From 90d537281333ddd0f6384ca832ab6ed3d3b7b158 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Fri, 29 May 2020 10:00:07 -0400 Subject: [PATCH 1/3] Replace database icons with SVG's MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original source of icons is the icon8 library (http://icons8.com/c/flat-color-icons) and Paomedia (https://github.com/paomedia/small-n-flat). All icons used are licensed MIT or CC0; annotated in COPYING. * Closes #4071 * Increase default size of database icons to 24px and entry preview panel to 48px * Add shell script to assemble the database icons * Use QIcon to seamlessly support High DPI displays and pixmap caching * Add badge support for KeeShare groups and expired entries. * Guard against use of QPixmap::fromImage without a GUI * Add SVG minify and improve `make icons` Co-authored-by: Wolfram Rösler --- COPYING | 180 ++++++++--------- share/CMakeLists.txt | 100 ++-------- share/crushpng.sh | 8 - share/icons/badges/0_ShareActive.svg | 1 + share/icons/badges/1_ShareInactive.svg | 1 + share/icons/badges/2_Expired.svg | 1 + share/icons/database/C00_Password.png | Bin 808 -> 0 bytes share/icons/database/C00_Password.svg | 1 + share/icons/database/C01_Package_Network.png | Bin 985 -> 0 bytes share/icons/database/C01_Package_Network.svg | 1 + .../icons/database/C02_MessageBox_Warning.png | Bin 805 -> 0 bytes .../icons/database/C02_MessageBox_Warning.svg | 1 + share/icons/database/C03_Server.png | Bin 810 -> 0 bytes share/icons/database/C03_Server.svg | 1 + share/icons/database/C04_Klipper.png | Bin 823 -> 0 bytes share/icons/database/C04_Klipper.svg | 1 + share/icons/database/C05_Edu_Languages.png | Bin 919 -> 0 bytes share/icons/database/C05_Edu_Languages.svg | 1 + share/icons/database/C06_KCMDF.png | Bin 801 -> 0 bytes share/icons/database/C06_KCMDF.svg | 1 + share/icons/database/C07_Kate.png | Bin 926 -> 0 bytes share/icons/database/C07_Kate.svg | 1 + share/icons/database/C08_Socket.png | Bin 992 -> 0 bytes share/icons/database/C08_Socket.svg | 1 + share/icons/database/C09_Identity.png | Bin 688 -> 0 bytes share/icons/database/C09_Identity.svg | 1 + share/icons/database/C10_Kontact.png | Bin 902 -> 0 bytes share/icons/database/C10_Kontact.svg | 1 + share/icons/database/C11_Camera.png | Bin 754 -> 0 bytes share/icons/database/C11_Camera.svg | 1 + share/icons/database/C12_IRKickFlash.png | Bin 950 -> 0 bytes share/icons/database/C12_IRKickFlash.svg | 1 + share/icons/database/C13_KGPG_Key3.png | Bin 821 -> 0 bytes share/icons/database/C13_KGPG_Key3.svg | 1 + share/icons/database/C14_Laptop_Power.png | Bin 816 -> 0 bytes share/icons/database/C14_Laptop_Power.svg | 1 + share/icons/database/C15_Scanner.png | Bin 955 -> 0 bytes share/icons/database/C15_Scanner.svg | 1 + share/icons/database/C16_Mozilla_Firebird.png | Bin 891 -> 0 bytes share/icons/database/C16_Mozilla_Firebird.svg | 1 + share/icons/database/C17_CDROM_Unmount.png | Bin 920 -> 0 bytes share/icons/database/C17_CDROM_Unmount.svg | 1 + share/icons/database/C18_Display.png | Bin 743 -> 0 bytes share/icons/database/C18_Display.svg | 1 + share/icons/database/C19_Mail_Generic.png | Bin 971 -> 0 bytes share/icons/database/C19_Mail_Generic.svg | 1 + share/icons/database/C20_Misc.png | Bin 914 -> 0 bytes share/icons/database/C20_Misc.svg | 1 + share/icons/database/C21_KOrganizer.png | Bin 930 -> 0 bytes share/icons/database/C21_KOrganizer.svg | 1 + share/icons/database/C22_ASCII.png | Bin 358 -> 0 bytes share/icons/database/C22_ASCII.svg | 1 + share/icons/database/C23_Icons.png | Bin 623 -> 0 bytes share/icons/database/C23_Icons.svg | 1 + .../database/C24_Connect_Established.png | Bin 1012 -> 0 bytes .../database/C24_Connect_Established.svg | 1 + share/icons/database/C25_Folder_Mail.png | Bin 709 -> 0 bytes share/icons/database/C25_Folder_Mail.svg | 1 + share/icons/database/C26_FileSave.png | Bin 691 -> 0 bytes share/icons/database/C26_FileSave.svg | 1 + share/icons/database/C27_NFS_Unmount.png | Bin 887 -> 0 bytes share/icons/database/C27_NFS_Unmount.svg | 1 + share/icons/database/C28_QuickTime.png | Bin 764 -> 0 bytes share/icons/database/C28_QuickTime.svg | 1 + share/icons/database/C29_KGPG_Term.png | Bin 751 -> 0 bytes share/icons/database/C29_KGPG_Term.svg | 1 + share/icons/database/C30_Konsole.png | Bin 826 -> 0 bytes share/icons/database/C30_Konsole.svg | 1 + share/icons/database/C31_FilePrint.png | Bin 875 -> 0 bytes share/icons/database/C31_FilePrint.svg | 1 + share/icons/database/C32_FSView.png | Bin 721 -> 0 bytes share/icons/database/C32_FSView.svg | 1 + share/icons/database/C33_Run.png | Bin 836 -> 0 bytes share/icons/database/C33_Run.svg | 1 + share/icons/database/C34_Configure.png | Bin 828 -> 0 bytes share/icons/database/C34_Configure.svg | 1 + share/icons/database/C35_KRFB.png | Bin 1021 -> 0 bytes share/icons/database/C35_KRFB.svg | 1 + share/icons/database/C36_Ark.png | Bin 929 -> 0 bytes share/icons/database/C36_Ark.svg | 1 + share/icons/database/C37_KPercentage.png | Bin 980 -> 0 bytes share/icons/database/C37_KPercentage.svg | 1 + share/icons/database/C38_Samba_Unmount.png | Bin 999 -> 0 bytes share/icons/database/C38_Samba_Unmount.svg | 1 + share/icons/database/C39_History.png | Bin 963 -> 0 bytes share/icons/database/C39_History.svg | 1 + share/icons/database/C40_Mail_Find.png | Bin 1018 -> 0 bytes share/icons/database/C40_Mail_Find.svg | 1 + share/icons/database/C41_VectorGfx.png | Bin 743 -> 0 bytes share/icons/database/C41_VectorGfx.svg | 1 + share/icons/database/C42_KCMMemory.png | Bin 752 -> 0 bytes share/icons/database/C42_KCMMemory.svg | 1 + share/icons/database/C43_EditTrash.png | Bin 880 -> 0 bytes share/icons/database/C43_EditTrash.svg | 1 + share/icons/database/C44_KNotes.png | Bin 786 -> 0 bytes share/icons/database/C44_KNotes.svg | 1 + share/icons/database/C45_Cancel.png | Bin 998 -> 0 bytes share/icons/database/C45_Cancel.svg | 1 + share/icons/database/C46_Help.png | Bin 963 -> 0 bytes share/icons/database/C46_Help.svg | 1 + share/icons/database/C47_KPackage.png | Bin 858 -> 0 bytes share/icons/database/C47_KPackage.svg | 1 + share/icons/database/C48_Folder.png | Bin 484 -> 0 bytes share/icons/database/C48_Folder.svg | 1 + share/icons/database/C49_Folder_Blue_Open.png | Bin 496 -> 0 bytes share/icons/database/C49_Folder_Blue_Open.svg | 1 + share/icons/database/C50_Folder_Tar.png | Bin 719 -> 0 bytes share/icons/database/C50_Folder_Tar.svg | 1 + share/icons/database/C51_Decrypted.png | Bin 826 -> 0 bytes share/icons/database/C51_Decrypted.svg | 1 + share/icons/database/C52_Encrypted.png | Bin 730 -> 0 bytes share/icons/database/C52_Encrypted.svg | 1 + share/icons/database/C53_Apply.png | Bin 759 -> 0 bytes share/icons/database/C53_Apply.svg | 1 + share/icons/database/C54_Signature.png | Bin 673 -> 0 bytes share/icons/database/C54_Signature.svg | 1 + share/icons/database/C55_Thumbnail.png | Bin 740 -> 0 bytes share/icons/database/C55_Thumbnail.svg | 1 + share/icons/database/C56_KAddressBook.png | Bin 834 -> 0 bytes share/icons/database/C56_KAddressBook.svg | 1 + share/icons/database/C57_View_Text.png | Bin 735 -> 0 bytes share/icons/database/C57_View_Text.svg | 1 + share/icons/database/C58_KGPG.png | Bin 939 -> 0 bytes share/icons/database/C58_KGPG.svg | 1 + share/icons/database/C58_KPGP.svg | 1 + .../database/C59_Package_Development.png | Bin 847 -> 0 bytes .../database/C59_Package_Development.svg | 1 + share/icons/database/C60_KFM_Home.png | Bin 869 -> 0 bytes share/icons/database/C60_KFM_Home.svg | 1 + share/icons/database/C61_Services.png | Bin 862 -> 0 bytes share/icons/database/C61_Services.svg | 1 + share/icons/database/C62_Tux.png | Bin 530 -> 0 bytes share/icons/database/C62_Tux.svg | 1 + share/icons/database/C63_Feather.png | Bin 406 -> 0 bytes share/icons/database/C63_Feather.svg | 1 + share/icons/database/C64_Apple.png | Bin 478 -> 0 bytes share/icons/database/C64_Apple.svg | 1 + share/icons/database/C65_W.png | Bin 452 -> 0 bytes share/icons/database/C65_W.svg | 1 + share/icons/database/C66_Money.png | Bin 285 -> 0 bytes share/icons/database/C66_Money.svg | 1 + share/icons/database/C67_Certificate.png | Bin 512 -> 0 bytes share/icons/database/C67_Certificate.svg | 1 + share/icons/database/C68_BlackBerry.png | Bin 516 -> 0 bytes share/icons/database/C68_BlackBerry.svg | 1 + share/icons/icons.qrc | 142 +++++++------- share/icons/minify.sh | 21 ++ share/windows/create-ico.sh | 11 +- share/wizard/background-pixmap.png | Bin 45338 -> 41772 bytes src/core/DatabaseIcons.cpp | 181 +++++++----------- src/core/DatabaseIcons.h | 30 +-- src/core/Entry.cpp | 33 ++-- src/core/Entry.h | 4 +- src/core/Global.h | 7 + src/core/Group.cpp | 45 ++--- src/core/Group.h | 5 +- src/core/Merger.cpp | 11 +- src/core/Metadata.cpp | 110 ++++------- src/core/Metadata.h | 18 +- src/fdosecrets/widgets/SettingsModels.cpp | 3 +- src/format/HtmlExporter.cpp | 5 +- src/format/KdbxXmlReader.cpp | 6 +- src/gui/EditWidgetIcons.cpp | 6 +- src/gui/EntryPreviewWidget.cpp | 12 +- src/gui/EntryPreviewWidget.h | 1 - src/gui/IconModels.cpp | 6 +- src/gui/entry/AutoTypeMatchModel.cpp | 8 +- src/gui/entry/EditEntryWidget.cpp | 2 +- src/gui/entry/EntryModel.cpp | 7 +- src/gui/group/EditGroupWidget.cpp | 2 +- src/gui/group/GroupModel.cpp | 9 +- src/keeshare/KeeShare.cpp | 14 +- src/keeshare/ShareExport.cpp | 2 +- tests/TestEntryModel.cpp | 2 +- tests/TestGroup.cpp | 14 +- tests/TestKeePass1Reader.cpp | 2 +- tests/TestKeePass2Format.cpp | 4 +- tests/TestMerge.cpp | 12 +- tests/gui/TestGuiPixmaps.cpp | 98 ++-------- tests/gui/TestGuiPixmaps.h | 3 - utils/{makeicons.sh => makeappicons.sh} | 0 utils/makedbicons.sh | 123 ++++++++++++ 182 files changed, 640 insertions(+), 680 deletions(-) delete mode 100644 share/crushpng.sh create mode 100644 share/icons/badges/0_ShareActive.svg create mode 100644 share/icons/badges/1_ShareInactive.svg create mode 100644 share/icons/badges/2_Expired.svg delete mode 100644 share/icons/database/C00_Password.png create mode 100644 share/icons/database/C00_Password.svg delete mode 100644 share/icons/database/C01_Package_Network.png create mode 100644 share/icons/database/C01_Package_Network.svg delete mode 100644 share/icons/database/C02_MessageBox_Warning.png create mode 100644 share/icons/database/C02_MessageBox_Warning.svg delete mode 100644 share/icons/database/C03_Server.png create mode 100644 share/icons/database/C03_Server.svg delete mode 100644 share/icons/database/C04_Klipper.png create mode 100644 share/icons/database/C04_Klipper.svg delete mode 100644 share/icons/database/C05_Edu_Languages.png create mode 100644 share/icons/database/C05_Edu_Languages.svg delete mode 100644 share/icons/database/C06_KCMDF.png create mode 100644 share/icons/database/C06_KCMDF.svg delete mode 100644 share/icons/database/C07_Kate.png create mode 100644 share/icons/database/C07_Kate.svg delete mode 100644 share/icons/database/C08_Socket.png create mode 100644 share/icons/database/C08_Socket.svg delete mode 100644 share/icons/database/C09_Identity.png create mode 100644 share/icons/database/C09_Identity.svg delete mode 100644 share/icons/database/C10_Kontact.png create mode 100644 share/icons/database/C10_Kontact.svg delete mode 100644 share/icons/database/C11_Camera.png create mode 100644 share/icons/database/C11_Camera.svg delete mode 100644 share/icons/database/C12_IRKickFlash.png create mode 100644 share/icons/database/C12_IRKickFlash.svg delete mode 100644 share/icons/database/C13_KGPG_Key3.png create mode 100644 share/icons/database/C13_KGPG_Key3.svg delete mode 100644 share/icons/database/C14_Laptop_Power.png create mode 100644 share/icons/database/C14_Laptop_Power.svg delete mode 100644 share/icons/database/C15_Scanner.png create mode 100644 share/icons/database/C15_Scanner.svg delete mode 100644 share/icons/database/C16_Mozilla_Firebird.png create mode 100644 share/icons/database/C16_Mozilla_Firebird.svg delete mode 100644 share/icons/database/C17_CDROM_Unmount.png create mode 100644 share/icons/database/C17_CDROM_Unmount.svg delete mode 100644 share/icons/database/C18_Display.png create mode 100644 share/icons/database/C18_Display.svg delete mode 100644 share/icons/database/C19_Mail_Generic.png create mode 100644 share/icons/database/C19_Mail_Generic.svg delete mode 100644 share/icons/database/C20_Misc.png create mode 100644 share/icons/database/C20_Misc.svg delete mode 100644 share/icons/database/C21_KOrganizer.png create mode 100644 share/icons/database/C21_KOrganizer.svg delete mode 100644 share/icons/database/C22_ASCII.png create mode 100644 share/icons/database/C22_ASCII.svg delete mode 100644 share/icons/database/C23_Icons.png create mode 100644 share/icons/database/C23_Icons.svg delete mode 100644 share/icons/database/C24_Connect_Established.png create mode 100644 share/icons/database/C24_Connect_Established.svg delete mode 100644 share/icons/database/C25_Folder_Mail.png create mode 100644 share/icons/database/C25_Folder_Mail.svg delete mode 100644 share/icons/database/C26_FileSave.png create mode 100644 share/icons/database/C26_FileSave.svg delete mode 100644 share/icons/database/C27_NFS_Unmount.png create mode 100644 share/icons/database/C27_NFS_Unmount.svg delete mode 100644 share/icons/database/C28_QuickTime.png create mode 100644 share/icons/database/C28_QuickTime.svg delete mode 100644 share/icons/database/C29_KGPG_Term.png create mode 100644 share/icons/database/C29_KGPG_Term.svg delete mode 100644 share/icons/database/C30_Konsole.png create mode 100644 share/icons/database/C30_Konsole.svg delete mode 100644 share/icons/database/C31_FilePrint.png create mode 100644 share/icons/database/C31_FilePrint.svg delete mode 100644 share/icons/database/C32_FSView.png create mode 100644 share/icons/database/C32_FSView.svg delete mode 100644 share/icons/database/C33_Run.png create mode 100644 share/icons/database/C33_Run.svg delete mode 100644 share/icons/database/C34_Configure.png create mode 100644 share/icons/database/C34_Configure.svg delete mode 100644 share/icons/database/C35_KRFB.png create mode 100644 share/icons/database/C35_KRFB.svg delete mode 100644 share/icons/database/C36_Ark.png create mode 100644 share/icons/database/C36_Ark.svg delete mode 100644 share/icons/database/C37_KPercentage.png create mode 100644 share/icons/database/C37_KPercentage.svg delete mode 100644 share/icons/database/C38_Samba_Unmount.png create mode 100644 share/icons/database/C38_Samba_Unmount.svg delete mode 100644 share/icons/database/C39_History.png create mode 100644 share/icons/database/C39_History.svg delete mode 100644 share/icons/database/C40_Mail_Find.png create mode 100644 share/icons/database/C40_Mail_Find.svg delete mode 100644 share/icons/database/C41_VectorGfx.png create mode 100644 share/icons/database/C41_VectorGfx.svg delete mode 100644 share/icons/database/C42_KCMMemory.png create mode 100644 share/icons/database/C42_KCMMemory.svg delete mode 100644 share/icons/database/C43_EditTrash.png create mode 100644 share/icons/database/C43_EditTrash.svg delete mode 100644 share/icons/database/C44_KNotes.png create mode 100644 share/icons/database/C44_KNotes.svg delete mode 100644 share/icons/database/C45_Cancel.png create mode 100644 share/icons/database/C45_Cancel.svg delete mode 100644 share/icons/database/C46_Help.png create mode 100644 share/icons/database/C46_Help.svg delete mode 100644 share/icons/database/C47_KPackage.png create mode 100644 share/icons/database/C47_KPackage.svg delete mode 100644 share/icons/database/C48_Folder.png create mode 100644 share/icons/database/C48_Folder.svg delete mode 100644 share/icons/database/C49_Folder_Blue_Open.png create mode 100644 share/icons/database/C49_Folder_Blue_Open.svg delete mode 100644 share/icons/database/C50_Folder_Tar.png create mode 100644 share/icons/database/C50_Folder_Tar.svg delete mode 100644 share/icons/database/C51_Decrypted.png create mode 100644 share/icons/database/C51_Decrypted.svg delete mode 100644 share/icons/database/C52_Encrypted.png create mode 100644 share/icons/database/C52_Encrypted.svg delete mode 100644 share/icons/database/C53_Apply.png create mode 100644 share/icons/database/C53_Apply.svg delete mode 100644 share/icons/database/C54_Signature.png create mode 100644 share/icons/database/C54_Signature.svg delete mode 100644 share/icons/database/C55_Thumbnail.png create mode 100644 share/icons/database/C55_Thumbnail.svg delete mode 100644 share/icons/database/C56_KAddressBook.png create mode 100644 share/icons/database/C56_KAddressBook.svg delete mode 100644 share/icons/database/C57_View_Text.png create mode 100644 share/icons/database/C57_View_Text.svg delete mode 100644 share/icons/database/C58_KGPG.png create mode 100644 share/icons/database/C58_KGPG.svg create mode 100644 share/icons/database/C58_KPGP.svg delete mode 100644 share/icons/database/C59_Package_Development.png create mode 100644 share/icons/database/C59_Package_Development.svg delete mode 100644 share/icons/database/C60_KFM_Home.png create mode 100644 share/icons/database/C60_KFM_Home.svg delete mode 100644 share/icons/database/C61_Services.png create mode 100644 share/icons/database/C61_Services.svg delete mode 100644 share/icons/database/C62_Tux.png create mode 100644 share/icons/database/C62_Tux.svg delete mode 100644 share/icons/database/C63_Feather.png create mode 100644 share/icons/database/C63_Feather.svg delete mode 100644 share/icons/database/C64_Apple.png create mode 100644 share/icons/database/C64_Apple.svg delete mode 100644 share/icons/database/C65_W.png create mode 100644 share/icons/database/C65_W.svg delete mode 100644 share/icons/database/C66_Money.png create mode 100644 share/icons/database/C66_Money.svg delete mode 100644 share/icons/database/C67_Certificate.png create mode 100644 share/icons/database/C67_Certificate.svg delete mode 100644 share/icons/database/C68_BlackBerry.png create mode 100644 share/icons/database/C68_BlackBerry.svg create mode 100644 share/icons/minify.sh rename utils/{makeicons.sh => makeappicons.sh} (100%) create mode 100644 utils/makedbicons.sh diff --git a/COPYING b/COPYING index fbca3c12c..11f5ee0b7 100644 --- a/COPYING +++ b/COPYING @@ -58,82 +58,89 @@ Files: share/icons/application/scalable/apps/keepassxc.svg Copyright: 2016, Lorenzo Stella License: LGPL-2 -Files: 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 -License: LGPL-2.1 -Comment: from Nuvola icon theme +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: MIT +Comment: Taken from https://github.com/icons8/flat-color-icons -Files: share/icons/application/scalable/actions/application-exit.svg - share/icons/application/scalable/actions/auto-type.svg - share/icons/application/scalable/actions/chronometer.svg - share/icons/application/scalable/actions/clipboard-text.svg - share/icons/application/scalable/actions/configure.svg - share/icons/application/scalable/actions/database-change-key.svg - share/icons/application/scalable/actions/database-lock.svg - share/icons/application/scalable/actions/dialog-close.svg - share/icons/application/scalable/actions/dialog-ok.svg - share/icons/application/scalable/actions/document-close.svg +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 +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-new.svg share/icons/application/scalable/actions/document-open.svg @@ -172,7 +179,6 @@ Files: share/icons/application/scalable/actions/application-exit.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/freedesktop.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 @@ -191,27 +197,6 @@ Copyright: 2019 Austin Andrews License: SIL OPEN FONT LICENSE Version 1.1 Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) -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 -Copyright: none -License: public-domain - Files: src/streams/qtiocompressor.* src/streams/QtIOCompressor tests/modeltest.* @@ -237,5 +222,6 @@ Copyright: GPL-2+ Comment: from Freedesktop.org website 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/share/CMakeLists.txt b/share/CMakeLists.txt index e07e6f082..0dde0fecf 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -39,97 +39,19 @@ install(FILES icons/application/256x256/apps/keepassxc.png DESTINATION ${DATA_IN install(DIRECTORY docs/ DESTINATION ${DATA_INSTALL_DIR}/docs FILES_MATCHING PATTERN "*.pdf") -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 +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() - # 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 - - # 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 - - # 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/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 @@ + \ 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 @@ + \ 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 @@ + \ 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 86fa47f04cca136d546fc32256cdc29299331a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)CMmDj$bbG| z%xiWV5vw+BF=aL5yowN~_f_ubzW%{H^VvRsefRxfZ;T0l^I)tIhs_3@FizB7oT063 z-Kp*^O;a}7q0pv6Mmi*fLje92D78f3Sd1aJdPVTd_gBY|A3*Otkxsj!F#)n>){nqs z(;pT`nNc2RT-jW%@qd0OkT1ZlS|w}tD*{i;B|76#pA1o9fB@`^HT~)oGfJY(AvX)O z9=3pN0@*3EsmdBi!uY0J`S>(&Er`x2xyArNizCTVzgUqFjdM#URSz^sgkUb#3h$M}qe;&zw zWZMQ_S*Q$XMI6MMR0~!mTd_LHignW>vB?sN^`=RC+~<@W@qpeAFc63!nMLv_$tt!x z!#G_)GXOod&$Ypk9*=^VaoAy>g5A@s^XrOrJ>KUcdm97}wV6rgkgOnw4$*feiCe-k z2p|&xke?BYt+V2gH^YX)#F+FOMfx89Yk~a_M1JmwBsrJ-u!!tf!*>TF=m^KK8Ysed z@-t$wIV~PrQf#T$ibA@4uLKUXNE~?+LcWb)|K(8LU8~~lWil6x$2&k+j-T0@b~be^%r>y|kD1oYpR>A60RjyW11Am#!hRFFpf \ 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 dceb0a528f3bd9fd717e2ef0dfb0a69d2c5690ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 985 zcmV;~119{5P)`KpO@=Wu zJ}*o3X^Dvs)5K}?VK}m36a_NFrb9s7#()CtN?Tg!?``kr%ZLx2_jBHkfFT4b5(N~c z%;j?rwsr(x?CkdM3I?2(t!&Y_HMg3a{Q1|3=-ky$6`S`rvo%eAW0VIB0UraO^z489 z+dCI7FUj?6PX323Q$|5v{W~L{8@!gY`rkNj(t5UKOwfkne9>X!U}!waCo$ zCOdX$CMV-+NiP_hPa{i;rO0>e2p`32--V;10hh0V z7Uw!YV69diG2JHy~uqKt&K>; z;H}di7D9i0H2_QkK43o%=gBY6o*Oq-5>npC-H}u21v!&ml?#Q4EJ!KyQpz7EqH^!y zfjsd3_6q{M2+@d?MPT#Y1O3MbgHHx3E%h1U@|Y32iJhqy7Jf+>-(37`F&i8I2>9ZE z0Te5;^ap@n;CanfQT~`>*D7_rAoGdHee}=>lr94CZ5iNSgCTwc`odd(00000NkvXX Hu0mjf#l6xf 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 @@ + \ 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 0b8a56f4705234a112ae700359593dcb73d4f598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmV+=1KRwFP)CfnnP>L$G3CGg}UjFtMXPb+IsWgn^%G z3{LMo*MX@Jh&CZ~*Kr*Mq-^U}W%j&Js}0Rhj2}AWq@2|4WuU!@4GHKDs2BI`IajRK z!1JKLpP+w$;U6b{k#H>8WVj)L1k19_-*=umoi$vK#axc>gJp1Bc2_ECCuRQ@fh)UO zBp?jHSap|BD^JyCi$7PPFu~E5;a%RNKq$OS z=2{EH%31;mGo?y!BKNJqQe~1j-wQysTBTmEcPsX9r+wiPv|5b$?u>*}As`gkZZ>;m z)EAjJ+lM-TnK+6`v?eGP87!Acv?h#Wdd{3hj_snj(spvL^G682kZ`axR6OgqzOZm| zmR5O;j?yS0_~+q6?%uyoECdmtiaSVOyabVC#I}wnaLn?1^EZckOe>mSB>LPWdHMtr zO*@_8%2W-dG>w1fSm|`=2$SVTg9QaYXicAOUpM9^M%w#Fx24-3KO)1JC^3npCW;k~ z>mem9EG{7xNUf1!M1(;`n7r1yV>KJi7tf`dQ6i&c6rti6sST78$p4mzRf5tQr4y7^ jC}EOdAeAyd#Pa3;FJvUr^d${&00000NkvXXu0mjfb9HN~ 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 @@ + \ 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 00ed933167fc0ca708d00d7ce76c445d38dc9db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(SAP);4DA2?Nl3I{NW74EPHbxifjs-#g02gRn_=pV)U67E7 z31Sczgs^jg@zJospftfmrPM%x>9hkabf%q7XS_3!M8n+V&fMJj&hMP_-8-bN>u@ka zp%8lNpeQ9^n2K7z-+#ZqzyGSk!I3K~-&0##{6-?Nwit_jd@4!#-$o1x{|rsjK$a!W z>-9b8?d`i2iCn6zudfFT!ypp5=oiJje{yoVdto6)Bl*A~fX!wb3Y{09h!!%v2W?$~lU8PaJH3IzpnxjYC$7D}Zu)YMc1 zO;d(cwFKDh94-jEC<6wKjYnZ==_jnO3&3$K`o@}XnkGTlF|Y)b%Vmhi6NV4a-Q8|x zv)e0BYb@Y61|&%s<)bxN127B+m&*>ST0(snP4j5l=ovQyDT*{FQd$FWoP2w%i+!7$mMrPv<&`6}CW7W+njLC7F2}>puP%IV;mH>1OFj3q` zkUUhN{#E3>;e*TNM#s1T(dZ*>W@aiT%ljjifOJ|YmK2HcRJ%dJBp~*2kVF~g=ikBj z_~=G5`QssyjiQP)OF%UG_{OV=7XzJvu0Ut-R8`BdE^7Hp9LB~*mNOaQoX6uyx!sk( z^C@c+dwNdK?(OAf`Rz@ZcpkrUd&oQ0+*n7EjBPa->P \ 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 a451fe1d25a02a1cd0b98f8ec08958a35aa2464d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYY|P)(L_t(I zjir-KXcKt=#eXxI`OhScNmsYJr6pD^SaGFRTm=_A2!aO%5%lCu5ZuL+dK31x3xb|R zSw!5!t`|M}aak2B2;xUosundhwV7y}HtBriV`h^7--8&`iwEEN@p$jSPg6?qJu(11 z&qGT2O|#I@Yz+}eLUf%>CWEGwV)MYj>g~Cue-4eTA52<8*p?x(wkd33h@@qRZrcz- z7(!SH!!$Lnpa1*vkr#4rp-}kP;IDOD+ID>3IyM{xUC?SPrsg8TSQ51qPD>HCBy0Oq zWV;e-$Pi2*ysAgcLY&_glUmol%%gGP3rA9_xJB&{NH~tQr$nU z)cCpcfm6f5o7qTI1Z_96rv*a6KJ2$|!`*b{cA zO@3M;`Z^7Ka6G>WjTw+FOd2$uN5rwD7C{h!A3|<0%^hbIaVS}~*zEs2py<^#sJ(@S zarDL{zvhbEyZef26RJ&^Z@^p~s#Js74^jq05VbqFc}F0J{jawkBAj4Ud1?RJT| z-V-#eG=2nb2vS+dHAfl!KYIE5rvQL!_rn|A%P02)ai#urV*csaL}l#pYj3P{Gag#M z^U!bA(p15Hm(Q1{U*~5^Z}Pcbbr1N+!Y7z4uwsZMd_|T9d`YeTIZWT94_047!{+;- zuK)l58FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?002ovPDHLkV1fnb Ba8v*Q 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 @@ + \ 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 d36534f597dba99e04b6431f39727d18a8724ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmV;I18Dq-P)^@R5%fB z!EH>`bpXKe@BiuUxI2W?BZRgJLIiud5jt{gSYwoy!=lXw%QcJsyMMb`_)mrOS zZ+fGv<{GQ9S`9_ZnG+?IM@g}RO_(VhcW~VO@9zKnYchMo_3|E;Kc=i{y;TYC<^7L`JPC!y8vse9tsCnYB*dWYUnJA0*B6@Kh*Fbi%1jDlS%fQ)tGh;sn^~Aqv$MwYA%+)C?bNx%;qWbH|IPQvduBNKGGgPxz z4nN$Cruw)SA7gp=H>Rd0W|yYNI+sK~1<@3kK-S^`_3PYSSm44#61Nmd1bAdmw*?o)VNj<&zrapt+b2PzGgS^n+|QUfQs-sqw2YG-qK zeeJ~H=p`I63wb~ROu%E+V{g}fbN==zp$lEyaFZhb*+(M&-n(MZ9urBiASN@zVn@f0 zTR@Oi5+LzErS+|r<1I~3hlJy@NeK{$HR9XVOocy+VXlzZk|YX?k*ocqH-sl9Swk%? z_eB=XIkH}kkTHkm4q&yzp+K>+ tMb_jHAbE~(P2F7)x-kge31EqJ{0E`aeqv`arAz<-002ovPDHLkV1nC+v#$UE 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 @@ + \ 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 331895758306b94d8f05a577f6643e3547f07c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmV++1K#|JP)&S+Vw}gAcDA##YO z$e|aa5r}*tt?hu?21uDeV!Vq_^G&>3FG_*Xbv(ksk?_#*(}fSb@Vp&1-N9%zIjRjo z!(Ldr6O6aEMq;3o(Cf>5>@(1XM%RGib|(xDLQX;uYQkC7Ow)an#lUTm4-5ew7!xRV z- \ 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 8427b9054472c3ceded439f1ac77c9aca4c6f42e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 926 zcmV;P17ZA$P)MbpXKe@9+2gp68zX^Qfuw{4-hpspTpcm^s3tvNwYWp%-(|s8PMy=uN9PgCJzY zY7`ZT1fw7ZS!_{IL{Qs{MQIIY4Nngfr>S@9oqFfpdC%Q*&o4)NQLp=agw~q>Lj*%_ z&G+?n?Cb1o(NdSSDK)03Xwwh~?dzbaL@K$wbK$Fzx67rfGkfft94=0i1bzopU9{ZV z+#M4A{cYmTmMDQBSSEx*5VFAz!X06pflm$$zy8Mgp2fuUkpP?s8|*7pIHig?ciT1W znx&m365}b_TRR9wY=nlO4M7`f>)@#u4vOl=(}SZYf17{$cweKFoRoi@k7F1#JrnJC ztfl9XJ=oPQ>6HyE&&Cc|_#SvAD0zZEXG&DAeaLgq7o7HEL!!#8VR3xoZsittu4mV` zdXZf?PJuvsiR9cA$z>BfkAPE!&T8!V2Mi2lX&$J8)suX4^3>@wcgK;1KB7I-s>D2exwS?#9!Lnd}c9ue3b8W#v9sP_WZ@x!w zXAKWMaF6LY4gLJrqrf5A+jDmH;?JIr=e3S+6!l`Rq?dAKo$<7GeXWb0)^iJK-QE50 zWp)Xn5JI6~8z}pUmFdOgRIZ_zuf~)XS_=#b6(0m345(7IG&ObI6`P*4B9WRByOfkZ zx1_e_e)#Uvmk&Bl9fqL@*g*n;AOYJ(DHGE)u`G|J<-a7_ldhZR7NOMr{G(D+@zZAv zsoSJ5w2%@Zq%fouyAaY)zVE3*VdYz`%kOa8-xn}p5G6y!5dZ)H07*qoM6N<$g7?0( AlK=n! 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 @@ + \ 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 6baa733350595d2676ee8ddcfb5eeccaedbbd4d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)% zV$dI|u=e`55`_(j5fpR+m2gKO@B!`Cn!>3;v!_KDP> zKP}QZA%qYjCxqA(LX1U(IMZ=Ywb!2P2HEl;(DXg#qrbfO)|Y|Y*orDb@lCOu$cp84 zRg5g8#qfMu%tkWepM(%?U2$QreWf2z{>x>JzToh_{pD?sc}=oOR*@wQRaOzxQu^(3U~eS6QFeiNc+wVEZa*c@p!%Xc9?M)1UG;0Wprc|bD@cBPOunB zFcXXs2rN=i>|oDMj~M#;+}Ui>|FLY+Q#5?@2H#z}MDMLBMk0a@Yc)yZcKRpQ_@-x) zzQG`Yq(Ws~3&(vGlvxxBqs<2(=T%kYg_h7v;Xz7bh|<1VKWMP>#3@PEvHL7kGKquO6~riKjO9f*Cm&`2EA5` z-dPSND}DYcT5tV%cRG`4+5(UupM-1zi0aWfpF%Nslw8{STzcun6J}FYnW95T5_bv< zxeyLdPbQNu1O5L4Qd`eODJb4SHa-g?2jFnRJ2p6&2H6k8DtrP=0{jcD*oUrGl(`T9 O0000 \ 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 0bf21df9173fa4c259112f662f6b6f21040c9629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)w&vn@qh~!0JdQlVGjI7@@7$%GlU2br-y;J5K~ctqhfA zZ08V|W~%GcSp9>0_pgI@h$uur1dK5tLZjg^-bK8ND4RvOZC2mCpi-%jH(OMwvamRZ zCM8KM#u${+6bdn0m!|!TbWJ>FtCq)wh%pMKG+Jx4R%j)7=SWkJ2|luS z;Fw)c=sgR)ZLRbc3v9Lrre^|fsl=J%o+ufT#GsU-Sj^L$vxgRZ2-K>MxlPSl0Y(=$ zXr7tl^^)UTIm7Ml9 z03u{EhJ)Q5f^%9%CZ5fo?m5=0MWR;VqYyakJcuU6;-df%|4kYMVwA5d^`G+J-}o0q W \ 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 08d441315af9a8247cc482584c8ad2ab86326439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmV;119|+3P)DobpXKe@BMn$YrA&sirwZqvbZ@22$?9$jAOE43@9WcxGuIdgJo&Zff5ExePO(gEoXispD=sj}eyZ-AoMWM(9;hHge zZhgzYORFfZj_qjV3=`9^K)Q6c?@&u(4F|YK#GB5(cDU!uxhpH<%&XUEtJ+R!x!^>) zn^TiNGoGHpl|C#-Vp$ejH%4iBu45+<?m+o9FTs*-ToCdIRVp!Vp7Tki*1F%9xn^3+?uU z;PbL-LCzH{n-1HW>XrJf&%6Q%ar?5_{ZZHPV}0}AqvOXED|Ix4HW8~1VF-s#LxLibQ!8>t&t`jrp*-r~T=UvVm# \ 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 e502227d009920950d735858bfdd9747ec76c9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmV9}Rr^wuigr37 z1T>Xl*ZPS!Umf)NZESyekJ&rZ7@ZtL%jf7s2C+&akua`{;n0l+0|&Ij^E`whL-Uu7 zh51`}Py=pWE5WwA$Ye&q_z=!<9ky%0;u`$G^EhKc zDp@}KHwtnlIOk9l6+z%bs4CXi-(qcz06u<*dxF4&s&ZoBQ9qLa?7v*YFrtf4(u<>; zoxP3wb5)dQrs22_f%CWrP-5xgoPskS+_+KDWr&4G4>4b>k%1ACMk)q&9AYPQ$@vsO zQkNBm0nyXZ?b-w~K%p>>Y&HYmbEs8DtirM^N{mC(jF>4W!&o| \ 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 4041042d3f81b8e07f5f1e5427b253998d03931b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 zcmV;n14;aeP)>1333mj*t_FA~?aR6~7Lp z6&Hk1Np}xT;l&sSr9NkUeR)x> z&LbX(N+s-JXlMi1H(5U4mvRu}hoXZ5O1(}vpV5lNIZ-ObT7Un9D3^0u5CDQ`<+7#u z{y2VPUMl^Ra#1sOP=L}rq4a&`y0bh8PVgf~7#|v1)&>Uyqf~lTFBV@BK@ez_%5s|1 z3WZVRUL}mp03rFbz`MLqXyA^+nCS3ganrEvcMQY0frURxq3ik$;W%&eqema69CR|w z2L>9cmZF{4sBN!P%kt3v--czKv2(c(uHU&cf91=s^~;wo>A%!!^B9{ka=9~j%qGp{ zT;#8#c8rp2b{iKyqQwm34c#=q{r=Zmk8dy6&YmnfYh(X**KRH?o&8~9;ju8yD^%A{ zqx}}z_d$q|QXzJzrX}3AcbI7!&jHr{s@1%=1UomPD=cUZ-7JK5W-a4Ekq zGZ{efiI)HhMTCj-jA;VHT)ewmQBl;E-R?1T@F&HNey5}yeco=jh?KwWKY9c|&(4Cy zx&N~3@-iV@N2}N8=HTh(CXggql-t`|xZ!B3O@E{gNO?iF+ZEMn-Q8$5)k3`vS;y%g zsaBzijlu%`D=RCIgrSPJw(iErMa{)jd-#}^@jM^1cAH(jb`3VMzd6?(aU2JZD+M0F zNC#spi;F \ 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 db6aa8ec7a14dab7d92842e94711f44d40c77e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmV-51Iqk~P)*gkyKjn#DS%T1g!tG5(2mXo2iRU=&+ znK~QJq1(*aT;^ux?4n{U>p}__b)jTn1(oo0-htM3>w*7)!*ibB`Tx&32msJl6rM^; zg@}lYJ1Eagy{_lw&3kn0)d%wY`PxG%H;NHL+$iy|E+7;M=*ZpG^SFayv^Zet(Z()EMxwizr#PVkJJ zfz?1dti7ef_h1IBy`jU;;C}dI-v_EA+pU`bHoH1qE^K&pnbd&U>;Q+u4bHKrFl3tn z|4;_3zeKQNMexmmVDS!uFD3*nbXxZ&pslUzgViXtDpQZD`Y; zBgCmpR&^wR$rQvX6xXbSgCj6GIRh@&Gwj9%B2lBSrKRI_f4>F1-Z?BkbavhgvDm`2 zXaHids&^=r%|5;UK6c`Psi|3LZ`XQ?i_dQp3YD6sruOHfqvIGp1yxn`a&8e34G5(co@LJES) z%EYHtD$Vcd=@+2Yc7Mizodh8Y*YT56b%g$pkd{VA<>gZRp+r=autcJIyTR}fTlRoV zcBKnDh@l!c6ak<{PR{W#fD&~IhQvyx%J)v^1T;6RgLqBbXs)P`A{vbr37|$+)-hCA zNQ42DT@FVoX>4p=kjcni%GE}5K|x8RgRST \ 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 8cd59f809cfbeac06760111b658cfca3fd468eb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 816 zcmV-01JC@4P)MLO(JEC5`n zZ-%O>D0I2*mmRv?!RReIgE_gS$noT+6pOB|hJQpNk#S8^$3!tUE6ZD%L?Vtr;Oh>6 z5CTGom0|V1w6>DYz{uJycBji#lq=*^mDsYZCsl0|fj}TSG&KBnYHG5F5V8OOgi?z7 z`ep!>;W#dz(zK4}O;k}dE-ogrtXAG#Sm^eZdR)H7#s-h7QqtZ1#6L3fp&=NYj_Cj( zwJjl)N@~_DQz*4XLyF21jaqmeW8qRVv#>0t`+9r(TOW3I&gbVl(9&|Xn&Y^$yBScL z0nMmHmQxK?$GkU7$||Y_M_!IW&tY3u5sz=FMa7<(cx*`+8=pa3T!pI2hJS!e#$e){ z-L*B%cYSrI+1xx6vaPQ^8~wFwp}Bl};CYST@@{~lYdFUrxBqe9&pdWstbLEr z^mi;JU%^&Rz>q9_9{q-iiI++^>~F_T0~99?7(d=9B?+_6)&=mDcWNL>J)m!zK)tzn z6Gx8UUT$f9P21WAsn>gDL(k&6L$HHVx&r{XeSo2Y5CcmHDQGIk?^|9(^@Owo+ \ 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 43f52ae8b8260211e8d65af61ceda4f210116465..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmV;s14R6ZP)G!q9FT1#u!Vz&bA`RIAiUz=dU#e5#t+1Y~< z&N(V7+;28FKl>5qMLn5JuPiLY?=CGBGNx($9f{0LUA*}H2Zo`VScA2;cA-QN1Y|OQ z`TYJpKlbz-*{JI}ibWHus=+ilrlx*FSJ&%bMx!&YVGV&X2F4g{HW7wl+&Fr4;Kh-V zQDbFA!{Xu{sH%>V`uZmj2)xnZaJXK^8Up7g1i=PbwnI@A7=|7^c5Lw7$;n?yRZXPR zcaTVAu&|IqQiMnO+Ys^G&VF{d9}TLr!0vu zOb*jxC@XU#6#AKlhCY5fo4wu7y1S2qF@jwd;da_F^G6&GhX_e1dhMe1Rb}nIT{@Ss z&X$8B8IUEwtPdbBhHY}#H zu;-WHk4%3s|LV25f>5c)Fo(zP_dX@VsZAGg#OFO|&381l;8| zT%9Atvl4di^rE)*VaRsJg97IkblqrtXlvE=#%BNLzWuG0nN1$30^n9GD2fOsiO`AR zg{Ry&{n-vYUaR1X;bAKpoxOyCfp5k`SHniyDAF7eg;b)^7*XFZM4b~v&yA?G`~4(+ z_}v^CYJqMi6V%q$p))4*1CS98$Ec*pEm|%TB?}f^S}4-sHIq6fi1vT2()i^x5pnwc z=1tnW_xT)vPWrBT!7Ef#r5co9G{+!kf!QHWD!{gm5hy@rOlf?*8x=HUaG3LLXu=xMa6xu)Ya`7 zKXmAD`pnr2JQhpP;NY<3be5k3umShR;PpNNm#Z8ePc_!B--LhN?{bwN+_vq}3A^3# dDF6}w;~#f_w~SK&3z`4`002ovPDHLkV1g(ty7d46 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 @@ + \ 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 7f592c673f0e0a9ee55115226fb7a1eb58eaba02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmV->1BCpEP)Hj`ixP9*jCxI$JLqsT5+ZB50#1Fd6tP~}h6iIKGGQE(K&`es!!fBa~ z8S>VcAvO2E*bi*6P{P(RdS~MfcTbhuhJRs{E#Dm@V?Zpi%9^o8I%^QUo@65xp}zf* z12(6>Q=>$+&wj{aSGLRPGTI}9*!~#iR6K~TdALObJ!5bsvc#96NtA1=s%`E#q*21- zwzq|+C-F!Mr#XpZuD~zR(~K;)kkePlWY#E{3Rk5Mx7$I5w|S>V2~{kVFN7CqlTlo) z7I5Fo^UdodwZn{l_%;^1lgf%3T6RB9m7_rB+FY3u5oEA=qL@yXPbcaE1<5)Ct|T?t zAg1o4=ounbx1Hqm6uGQHO{0U?qpy(iwvd|odRb%B3w^P{^K`50h@m@nb_5iK37A{9pVYIyGxyQ|}jv-sj%co;qz^`n8xjiV!V3T&6Bk9dw3{zIU01Z~wuN1I0 zW%0IU$y=fS#Cg5%)x$#@nZ*&{ni3I|QvAcX5bV^?UHaVllQ6Nzoto2B{D>vjsE_3M zxZ?r+*qf^t)|0=DgIopXfhZ!v4f&~E1BqUny!NbjO4HQKz|+q>S@~Y#BUf%_pe(Bt zM}Z))4R8ZiM1&j0KG{CBf1i5**bnRmb^_b(+TlDhbkaZPa#*{82EfjL{s!6wYGi^I RUJU>M002ovPDHLkV1n<=tPKDF 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 @@ + \ 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 9471903746faf5e752e8a61614409b8fcb4705bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 920 zcmV;J184k+P)M$pVWAb@ljuxiBD!R8htX} zqCRNiri=0R=))3>I!4pY45M3IoTfk#LI;$xQu09aVb_}SFqp^hsT-h8B^r+W{ZC8&AO zP@px`Lof=05NsPJCOSl^+%s}LcOx)nBP*L*BIlocW~e)JU=PJ2_&z8Ffe#x+sO^Ff z5QeZ_hUHZ_cH&VvGJ5t^kQq5Jn0kC-B16@KP=k=Lb02Qsgw+N3`xY!Of>KbbKz%rmIXVzU|XPA;kg&y^|QIG?(Bs15@-tqpcO=0T%3s8D(j)vLV{(1F<^jd z4O~0PD=(jkj0_Kmtu1hyKo|f(K%=41N+JI%6u0X>gaMT9fg_;zAnaB%Ja*~{*<_Cj zUkKvupcDuJLcm6`gjd_#klDGJ+#fe9)P0CGL8cvshT-55NjVU>ost6&3It#bI1%t_ zFrU4q!}{9K^56XY2S0o_8+NAPfnJaj0v~W7-3M)H08k1n2`w?0pUab*{dy6??=7t= zOAGlzD&0ADY!a4Y5{mTyUe%2w`p}&wFoO2=3hZ{2eeK0SGDMfQ{BQ9B1sc@$sqi z$4{J2^&RRK$@VC|-(Yp6ME2@6b@iujmbNRuy#ag$03f7{12!Oty8YC=+g;G|R3edn uI1-5_RYRF-bz?oOulx$?TVN9a0N{WBgl>R|sf#}V0000 \ 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 5348b7db2539220fd763c9a79510042e7c0ee770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)B_y*LeN++jPlO|~b zF)|p8Bb%%ZRwLnEe_m;Keou;7X)`d)nPT4ao@ZV;I5_zDXltuWatewn^EJDu{I5na zrXs2}zdU>Pw|%truy0z6=J%KHvGoFif1^#|a-4=M?Y3J0+x2$Ed`-fOioQK)}v$5d-)z zw_bL67$P`VMhO|B2PsgnI-?t}AC<1ff#PO7oKt)NpTGw}5L9OlM1+*)(EQAW_ht4g zA?Fo8gKA9qC0qInF%?K5DDirXJQs0Ac;XFD1P?xDg1>@WoTLbosZw3Op|+1v1e>YM&eI>bfA<}# znG$E^^5TNe&1V+t1v+2d#9E7z(X1@r_>ql`4PyMYs>b8-_WAjFcd=#6&6OoY6Yb?C zdfhep-Bs3BZ_!>^X642b7ncpg;U_)}K5+Q_c{)5iJdt+0T{lhhq^|4lf$w&9c7ER7 z-CZ@tkWxZK5D|vMA$xm!rzdYuesfbdNGZJrUeN3Hfbx}_o169i{{ETwUPq&mjz%LL z4u{$_jW$iA+uPg!7WVUXoy2~>Pp8xA9336KJ3c \ 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 ca7812aebd6408a2cb901da6ea926337100f7a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)*D3TdrL>m=A=xcaif>Xv_(EXuP87uS^fc$GOdk~(HJa);b|ER&q(3nR)vRKwQbuG z#mATAUcK7y0;sR=cBiHu=<@T6Pm{K2ga2#)57@r_=)ZvC;Ns%n$9YT(f4ljqy33uA zP}t!gkg{Xlx~=jxMapOl`412oc}!tpR%K>Z){KtMva|qWPH+r?a~P%{fMXcGFT3T6 zi_LHHTc4ER>1me1@T?35^Xh~6_>zp8D>m2E1L*GqTMzWzg}b+*tp#peeMsGvNlH%* z5*vSdNwQ>0MtOKVAw|4uea>pVHgVqpU7gT!(?xylJm-EG;oEQ8*}uPzjCZR@Oemx1 z>o!Wu@3Y=7qFIlWm398tpR4Uul-Vgd+)Ca@wWOzCAT_mul$0~1z5OF^rk*3epoy^w z7kzfv^uh;!N!l!VNQb_>zHsWajXmj?NZL_O^3JpDd8dl(oXhOXt0O13o{tM#=^j`B zV0Io-c9*-Pwb_!SjQ1*r9L^O+Mwh8+aB!@oozD(7Qt;_b@;|x7fiF7fvCROmxCm}H z94T%`+EgV;+PXEXvaxBJlO?%1IF9@w1FKMI`#(9pch*$YGL+Fg#pGw70hePi@|NXFrc^8;M(gN80> z8GsHuwDm$=;~d|e>E^?{i$p~qd>9mzJif+z(+$b@sHB%vT`ci(NXz}7IW;dhsVY`Y0X!X5+nsk21#C$B$-Sv%Eu>Ep`mHjQIY#*LV}|Q t*LVm0B6$}`dRfv_t4l9Q-mCSo{tp$rJtXG3d|m(m002ovPDHLkV1g&l(U<@L 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 @@ + \ 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 f428e4f0d0af95444864d412827f75a8deb7633f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w|?P)cmacd75rMz2D5rZhPRp`1p8!@AEz%9|OStXIOT25xai9 zniUt{V^S$M_fJTrbqB=aDppqZu=vT7HmgFRQWX^3iD#tT++voOcZ*%VEM*rjUSVXu z?FAGS-Q87H_4Gk!rwJ<62P*;6o0{6jR#pI)%Z;2INe2fI3MEV|uJi)3vc$|w;{den znO19t#{*0f{|q%C}B~!Gfu&1x!!7(BE%E zM~4~R-Gdk&wyy(?jQqfvGwE&HxBG8o`T6p?_V&-Tc^)>~3??TR$k>OB3~?`?fBuz3 zBDbm4U38NDH=v^8fs?Tf`@_QzGbWQYSXx?)FdD6}S{)Q~5p{Jc7xlG|ttybu7c^@$ zeH4E+#-~sE<>chFdqUy0qtrq9ccrooFJ5$_xA!~7$DL?t=|pJg!PuA>KI66|B%Ix< zP&7K1{&Y$OdytZnp=CZkyr9U);{{6PJAC;v3X8=~H&5ZwqnA^cE{U=Q0^zaD%&U^t zR^5`@4N3txoi1+=(Kw2}zA=J*L}_UaxD$0c3rb29EB^jF5`P0yQ#07# ziiwG%A1426bMr^2)!m4SihZ|b%jSrrq;pytqpz>;@pXo{xTJN@@$rew&(H7B?%jJb oj~qE#%j5APe!cRg*~$LVPrCbSIOj@AQ~&?~07*qoM6N<$g17av5&!@I 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 @@ + \ 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 e66e4aca8687ed122dfe56cc4ffb7c910919af53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmV;T16}-yP)l`CCcK!AUYySJOVB*TLMcw;s;$8kHokv*}nK?ip#QT zVrDSJ%q#L?M#VGPFf6E8r$ay}#~2h!OQCeo^=^54y?r!siSx6+pO8}We+X_;ap1wa z=BIad-`h~zI5;}uTs-o9_m8Dn#b6Kyhc|h#(Zei|1td3!p>jiO;qJOu<(87t9!o*x z)ZVmNZ&nCpVnoj`@Lu^V6qQ>k?E50{)|syloe41jZ16scNQqjU9o3$dbNB6&K#e$(*U)II7%F*r>+j4wpbKkb zr({?En2b233@&En^!%cnpI?=Ilb7W3dPF8-QU+Bi&vkX@?rGnA@v!%i^nI^YTt%=? z8Jp316}yd6y^lX5F+?JRwX_V&HVfyko#V9qD9irqjLiSRRMVVz;p4Ve+sQ@e$SKze zBvEBNN{@G7G}E-z&D6D3G$0mGNopGVw;jY-pz^`OaYnRHs45F#>oqX@p??qv11riq zIfgF}`^T;6Y2slwKAl3`4^b^cO>qM{e+|3p1o;IU{QQlMV-LMc`{C2A2$2AS3XmCH z;>+Buox6-qCW3LatU`Q4py_qg7wzY(0XxHed34>@l8cd=pD$Imw*FWQ0A;wgVQ0zg>W(L0j;b z;#*wk!sDzdf_OMbA|ps>f+yPAxvkPlo)Hv-i64gMIC;=eU9*X&6#kK&@yO2-4mXYF zDJEP#OvNU0Nd;93COujDM}2(T{~Hs-pR&i;%dXZ2nk~l11UEE+x$}ARmFA=Sw!ifG z0cz{&3HV)@^1M`-7O3CsWT#<;{M2;_#F_pz%%eTQ9>KqKoja7X$1k-U8oF{Ts}2v< z`62Ytm|S(Ms@;)}O)O~vho5zC0-s-FIRztvn^eKwEw#F{2BR#T^yJoDA-sVsz7+TX zKM(;_APJ~IMDSmFU^`F-7=aX^0xF;aDIg7GfGm*y3)G;8e{o*jN&o-=07*qoM6N<$ Ef_Un;5C8xG 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 @@ + \ 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 dcdfbed307a0aff753a55470211ddf6f276b95b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#`ZP)_CKU!rDsg1QAkepT@?pAoNk5`Yi00v;sdVIM#dplnoJs$=DRm7!3o9)NfGvQ8DL{)L;vlDAIgD3!MU}F*O z45EmNii(%+`KcyUQB_scg@+b3cL*w~qK5e8z71wkMO9S5sRu6AtO_csqAC`PU`AC{ zR8_3RH_uEpi=e71YNrnDxl*&LsH&6tLF$`}*qqKe<|=>{=|7XaE2J07*qoM6N<$ Eg0@MR82|tP 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 @@ + \ 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 0fcc98bd68349b6aaab69e694c4633bb1e26db50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)L zlf7duW+-+YJ5aLH(QGki_RQHCqpJMRF13Q4m!S zP(T!nK}Bq}_vQU}_u$da;Q5QkracTyQjM=62y_8r0-qp8h*FS%3PONaPxr34ZZ=nr zPt5({jL*9rzvtJ03Li5$lmej?2nno#RzOlGE~({sGGo6x)g?ZBvmAsW##A|3a&jmt&J>mC6R3jilCoYK9&Qi0yspeUJx5%{g6Jdo z03u*xG+5tobC~GMls2a2>nkd}WMWs4TM(S9U_6by`}mV_8eumbq4XaLyey@MwDd>- zr;@O1BbqKk8j#XorY&Mzwj#wu6~%VZvS}Nh+^M;~c1q(TNmu?|&KFx48Wsw`Fl}ax z$Gh zTdyqlMvm>ZtAwaX+|To$Kv9G|Fd~$@P}i18JK$N*7`ON1D{tOzu+fWH>oP?Y$djTd zsGvzPMo|@NYiN8;b9`V8w*L}SZ=)K{cJ!YW*Sw00dp \ 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 b691fb3fec08cd2fc151540f3ad2be6a3f77e053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmVqMTY|QzIJTs<{+qWzDSkqv@78YyIQ!kKVBL zN4hcBYQD6!Ihl=QkPD`gz{wbbFAxd`cNZ^rz#aE~_uQ|~M-mqmez_@e_Ig zGl+gShR_?&Tlc*DV~2vV7Eln0dyL;`npBV=kp=)&QNBC${*mLgwcFXWX#@8sCg`~E zdr$Af(Y|AKm77ru06(BGbozAMbK7$iab98NoWiye>UTB17oT?f#lMezVrt4Ogb-qU zaz>nJ+?{%I^`I`qm=I!2EZsRH+8z9K24usjHw|x@9CFo6KxwV7Z`@j94iZge@cCn8 zXWJ=r7VwPflk;ork}QrE6@t8AX|Y5U3Z0~5;cc661Fh^8|GCf8j z9AZ@lQQ3s$$qa=%!yv_pxJQ`1{7=jzcv=#jHaE{^=LI|llVM$wSxeC4eVvt!uToP{ z0jin!^c>~lEM?7kASCoehL|tPKy&XcCGJVxTmDbqYfMJS1S4dE3GxFjVr5OllRDv0 z5M_Odz`UQ_@eH=D`54R^3tf-m{`;$Ka&#{KY1c{LyN6G5y<0!UrC=)qS=%Vgvk>sF zvA(j3Kew2x*VJhA!AcsVLiCP@$u`%wdP2XUsH)_aOv3F7C+D{qo8lWVF#IkC_VYl4uzH;SUk*0p;be5=p z4c;ak4kf+G_^@MW^vi~#;Bl$ME)BMi@qM57`YRAl0MghAGp}{MNTHSjT_=_11FO~c zoXuuS%8D`(wC7(w)Yn_}POH6Ntt-vhzrSawJCr;C%mFAe0!^e5x( \ 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 3ef9fcb60255f8989aab079d4e5f905551cf652e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmV;$0y_PPP)+6cn{R> z-Yg8ZpU`!>pf^lnY&;3A+5x3{0F^b*&^46K3C{C^dZQpPyVJP-*pG7^PMDtt;PYpZ zN&`BL4KC`9V<>{nyV{}Yo5=}o@Pg{w!1ks|Tn6*u!Lan545KT@$EY> zJp(kJwBn%73f2(e1UGrXjw@LlZyAPO??I1Y0{4xd;PXW>JNp~0%>(!m$k06yjRG!r z9J_0-fz|o)g7s}#Y-@DFJ~9vIcpB~x3ozaL3}cTMO2rezVn93&WU>TRb)wmp`<=IV z!Ri+3fjSILn;pSvDs>77hXJnP$)vE9R0?prBTzM2v31`CumcuO(8>6n#n~ESs5oqg z>-{`mYGOf1jMLX0uclC2e-~>uDIr;_0NdNmCBGn!F>y!9h_ez&S+`2nJC~u(heByQ zdiXITm$ycw(v4r~y_2vIcZkbGEwO@$!5xrg+<;7WO5J|Z5w5CIdCSWyxP%Vk2(f`! rMMzoxfEA6U#7^QUv4>d6N*w9GcxEBH91PHe00000NkvXXu0mjf#Ys6O 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 @@ + \ 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 0d87f2531a3e6d1c3abf2940e0d87e396a131f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)J?I;qCn9LFVbW&CJX(GdG#Jo-@yS=9rl+Gcz-fHz)b&4-fPD2Y+T} zs<2qrzB`>tJDj+MHzo zfAYx}D_7pQV7NFa1*lL4b~B6GTzjtj>ig#Ho5h>2FKxH%?}u@lUbq%|4b#jrfC_<@ z%u{;wcpY-aWXs4&zpPPAROKH0kQQnMJE$4Axa zHf$GZ^Q5`_Y&aUjcFUy_ph83p%R{!yVkooEKkj6BvL&Q!X{hPtR}TFBUuYwBp+JS( zKi>KE=HcpAo}A{-M-QDpw=hm!>qJl@ZN_lCELKkjFZPIgKi#?OvzJ9?0ssI20001h Z{{cfZK2yIgKHUHS002ovPDHLkV1hQ%JM{nn 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 @@ + \ 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 4c52384617f376fded8d48d0784dd0d6e2db41f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmV--1Bm>IP)#I_vT&sf;zBpLapB6PJ0m~982$(h;Ps!W2#5rK=LFGc1Ufs@8WN;fA`#E#^I5-E(`@>gxf0iP5Uzg?z|St; zH6Rj^A(KffjLA9H)6p4izW?6(kU-!05q2 z$p&PML^PBdLJ}EkY(eP^PAaEptb-~D)=yAA0mHJOXdJ@fVHs-GnoGvVug#~^-M7#@ z0qbj`WZZ1$d~ddOa&kKM=JhM*`{vrdEJ`*ND3wH63`t?O{ri{kadr7Ak)#&RoKO^5 z8XX<%m1J43H;m#$T6uWy?(G|opFFEBecpXAa%F7y__)kgS3iBFf^0js*>GL+27nR;xpWLSYOIH##Ng@7Lk#&M6o_s<4E2MTCf0MQomR<}aS{YcO`4R-XU> N002ovPDHLkV1mkAloJ2| 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 @@ + \ 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 59a1694912ed8c30c4abef28bf0d311b6b0c2a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVzc#SHtH>F%l=X1ydFs8e-IRsDTcZ8kPG9;~mgUjtNC`813%|2tc2 zX*3#UdwYAjxw-irTU%Q*{Y;36h7iyJg#SlWRAtI=% zE*e+^&Ut?P?TF`-CY|mwjRb72{IXl{`0pcbeZ52+L70=MD)wYJQ6&8I`-nl&CT=B+ z_FfPd`|Lh@$@w#ZS7pZ5!}mlcV2plj5JCXp&D$xDhY@5c<^Dh1`=-V9s~x(%n7zXZ zS1xxscyBluPKm6d^Nm@NI(hT1WFiscV$6*%8bqxnetzP(`DL5c)384(Nn07m9~`K% zP(SIk+=^JTjwH)@awynx#@*{FJ*GS#!HXi{@O42aH;5{tHASpiyY!YDtab|i^d(id z&kqmZa-lt8uK?FOPd~LBA2}LHP6&$3)veBPoWQqNPjS(|;*?D2UOGoOeTLqpvvkai zb|Q?EoM(q)EcK&vf?A=f0$Cby`$msPPmg(da73C$Fe~XqLQy1KuqDfRh7TWy7@w>| zBrvNC7{gbqUCPoin>vytCre`{lL{Z22rzSj5JF85MUjc)m^{ztSoN>WvV=6P^}Gma z9+Qetc~9PK(rh*{#@KjgXJ@*$ww5{PIQbJb6@V^Wfkj?bj=^9+Q52PFwOV)j{r-I* uQPq06^DxFNivN3OjERTC;dnF}eg7|7<+oC%nlEJl0000 \ 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 010d33570b059482f74861ff5e2e148d602854ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmVL zlg&$1VHC!H@5i0FbDhy9HB1Im!%7QEh#<-`NNN!gNgotN7`cgP71XN#poJ}hcG05R z6eKMYN-C;F(PRnIlpkeT5~ii;o%{8+Fg2^42cE^*{5a=1=Mlyj7E&7Eq$5u3J4%}> z6=rNqYNxnlB9~2m?zr8%xjkl&78WGXTK}V5E{6nImZ7P!1-raPio4gNoAtY@)BDdi z)d?Z%L(jwWe0+bt!Z4hhpthDRNGPs~S41X8HRj-Kp=!5BIH%yTMBG@ZiP3!Jp0;3U1K4b~sq$?Ak9d2nlx%h_Uv)=bcS?>-7e zT-b!)4WF{_IkKY#DI~!36(o#5f5Mfq9>9i4W3jSf55c%Yja*Bazk=a@k8i^sq-?Bs zeAgi`4`K=`#xpF+&cgO002ovPDHLkV1fX`NJ9Vs 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 @@ +>_ \ 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 292df84ced954de1d0d7d1ca88e871a6b0c5f082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)Wu1i8O;!;{O_ow|HCix_}>meXz_(7szl{BDK`p&S5HwCOvVLy{)Ce+ zEfPdw;KUfLHSF*ASzK)3y{FUZkR%Cto|C32>0rQcG$P9~4h}Nv^;Hau`gtZnBj0*z#{T|I`lO##FcmFEJbEsG5=ALCd9@A>I`0>F5<`)+DYGsA@FJ2@Hg3=_8!C1ry z#u!jA&RQy!3Tta?bkme?@80FanKN{HJ=WLPxpMh3tE;P2t5q-tq6myF4FF?}C9GE2 z*>3a6rAzGW?C{z3>nKp0okdmI8xGOw6;X)T0Anlw&IOJ<%Q^S%1unexCdL@H+ihm* zbzVPvmX$kq`0n9Dd=!DTpo)Y6&RS4#);LTQkahbkEiJLNwZ%%S#W0S!b^A7xEQ8tE zGXBY=3^fRF&Vhh4)?mVr-+ua;50;m)QAA&1u3pE8P!t7&(TMS2P#R1ojPo&K465L) zv%L7+^US||lHTqv$;=GrPrX7l46(*AnG~c4L;8aOd76@^BTmd8BaUOdFK|(m@Wto1 zxOTOJJ4{xjyjVCY!K>oEQmZ`!eoUU{;x_;Oi=>_ \ 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 4ff0f127c1204fc1fe90c0531d50f1d322b8bb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmV-x1C;!UP)| zT=Y+~0W7{BYHPLeeT_&55rYGYB(Wq(m1=dXAQF%NcY6XTMD*yv!RC0se@K!X=R9j| zDwoSGPfkuP&dy#vH#S;2+lyjc*C1#V29yD-C_eM_?Be3mTBqIqb9eXg4~=H+ws+>t z=qERCe)#dlOEdJkZPp%avAN$N3=|FtN(q8PY&4`#t9P%zH<8ZfCbqY?Ui%a&;zBxRqTOJxQ)PH;j4PMt-}0uX%X!~} zsMV((TYl;k*nH@)U5AzttPC__75OB?mCHRY74x`Zj;UwMDX(7ds{Q>M*&)l33Hg3K zMWr?%Ua5gUc1Jc%_4y3>tk081M5`T(SF1Jc#>Qj90F0OBgDFjSGN7BdL<5Ztd64oG zvQA7s>GR9)9eRDJ)tY!pCB0HzL{Xh$smQAfuaM1TiQ^an#9FKfj&jgCW_5LyQZdi?c#&?m zS@U*xcW!TOJ^Zv#D5jT}-{-=GGS-6D2}xox#$rr@F@_-UnV!A~7`C_n=v69@zH-au zsRxzHqu(|*c34<=X(pG;ptV6nu-5*|K=6H+Tet4qy?_7SN1aanYfmW*gm-;E_43hC zqup+|l9OK$0TG3WMFw>GzUMlQ|JUJR^kW#N_#0~IhoH4ekMIBh002ovPDHLkV1mgh Bnc4sV 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 @@ + \ 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 53dda269ab87b7a5f0628290fcad2cd83e9c5090..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmV;?0xtcDP)rib-}mQvQbYg%000000DunOKL5q;`jd|z+1?&wEDVLQ zFw|r$j3o@2F|(-Dc52+)O;^9W@L>m=XP&u#?dhisLx`?17D{C?FNQ^tCsVmlDq{{& zlWW&^T>JjW3mx3LxgY0V8PZDAoA2yv8U#xl$E3-UbmuRkN{MFDYStd|?&tf4!&*9s zZesP}CH13=hEF~-be+44g~u*_?2%Vr=F$bap1X5~`*`n5&GNlS(Ls(R2X5ci{{E+o z1I)K}7>hdoOVf+JUh4P6kYx>$4#wJO(C6$Xdi;YErGWV3j#Rd|aUjx)5}{~FNe5#M z`H;19Z?V2f+uF#*+Vd~U(* z+j4r`^!3JhZNq#)D%G3g+$8s;Mh97|#nt_v{8+xS+YheX`ppxMp0cre#*M$j(P?sP zC(LHyjgwh433QNaqroCqxA*3D_ZI%!UC4!6m)L@LH6vk5J z90C!cZ9A8K$u58T+7BJ<%nsw5%R@Toi-;r_#=>k2i;+m=%upx=HKf|pEZP(irpHge z-!$!WRSW?E1O$PAKq53rl!^ZOw<#h300000006-MdSzf;rKn|R00000NkvXXu0mjf Dlw4Q< 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 @@ + \ 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 522b0a3f9314bba6865e42852dc009e67d7e7c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmV-K1H1f*P)w4jkPCaa=~I-o3z1JMH8_?tzb~hE3m7+3O9lXF0ymcu3Usd zH`0ZrLQxDFNh;QwqIl`ZbefEvF*B3QnKSoud7j5bVA_5EFW}3M5B!DJnx{Dn;0wng zNT+GmY9z8*%uI%d)Wb%b$r%o;8a=Ev2x!loQHp>wy3Cm>)w*5}C-@j};xj+WNhiTVcI`h`K6BCPz zv*U|zWZcnFMz3E-S1JVgJe^t%-RUrG+sAkM{UZYE!@$(i(v=IVtIkL!gJIi5K!Y4h3(4=MDU=}Zuga8AmbQ0IMCOB{EpbIVLp>Z*$Mn^ zm+hTxgyXz8Gzg?5f}cyZ+Wph6d)5d;L>Qu!qV;cy-rBd+bJJ8d)~Wt>@1I7oaKBft z{_q&_z@c4hHuLpX>ukT*qwM=s+ij}B!1F%+_;!>^ueBbPwj-^7v7bHs$g~p-0|_Aj z2*U82wS0cL8-^u62)^!Xy@n9^?q0o`o}BI_vSa9G17R2-B>>`S-}!&ujC8yJb`kpk O0000 \ 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 5314140ec6650abf49b8fc7109f22f7b4f06b004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmV-C1H=4@P)VU(yLq@psNiSEN4&)i&_X7KhuqYDRW^uohAoWuM3KhJXxD3#Yhsk{m* z)%6E@{Ub|fXScVd3&Llg8!e%R!;YJ62Fws3bR6puD`I-(dKRD=QA1np#DJ zVFGJw@6O3&xq=e`NqtSsw zLt|J}RPru4IjOm??={-(Zge{Lu&3v_OC(BDNF-T6K#-Z40b+3mq^Do<33NI=JvnK_ znVA(F82Es_y{~X?&V&xfE_yr%*xmiiEfmIS1cEr=^P?dmA`G}(E-=Gp2LQW*^2_%9npMv1vK!B8#BtdDZ z`uoVp7u?)*65IP^`GDM0J~6Ys?ZSozojodwmmL`y?hhdOATjZLd}gNPtxnfs>F9X6 z)877Me_>$_50BmM!20@o6tOQ34-fMPq^71qe7q21WBG~1q9Qc(^sSnjJDXN3?FXT0 zC;2xTZ5$3KCm?|34@gKj=Mw{Ba)yL(BpOY%)oix=mOY+5qFYP z(P;BQ78ifu($WTcy}z-t@+N&EfN{Z;#n@G=t1Kqd7I8rlfEnlKjVPBZCjJQ^HsSB& zkk4(iSX?+eyNqdRqEF-*|9=3?hzko#sO)U%M`oEt^8Ep;tCC(Hfbo0)0000 \ 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 b518beebd6a71fe8c7372b9c3cac0ae33db18f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmV#l*ye@vxYfc=O+39*mnB z7Y`m>Jn2Ob#&}pf%xxxfpk@I!H#Zo_A3+8Kp(`t+eeK%!&(BAs(`j7SMUv#bhYlV7 zp}(&;>em!hS(O!8k$kc$2_Z|8kR)V9()6%&=9AM`My~#R6hJ8!i#U#hB>9?;9ebfY z-qI#MJNp}UK*y2=Ha0dkw&h}FOCP67h1ng520*pI_F#Jl zvO6r>7LjO^R8v#abAN5+dr7YDMyc*567Q!_3H(*c=h)v{2jvRnONi}oPJ9t|1dCln59G zi9}m!?8bzm;FNJH7{@yIkUpTTAqq0uqzcVPG5ETm>*Js6LA|D6 z<~M~9L?Tfv>oKDD{a*`xy(#_pK!T~Uaqixo#r8a=7S>tWDsyySH%aTRne6B>Bh|6+ zKl3x@pJSuvXQn6L%@?+JUtG~bT&YNjT)es)khGAo6lXD+^ zxXsqWYJEdPczJnwW%d5bd?u5* \ 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 e30bb09b90484146a364dc83cabcdd0787cf5fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmV;S177@zP) zC=?1kGdw&zJ~=tLHaa?bCKhv7UVr0L<_mYoWKtv=!W8m|fYP9~CI|xB z+S;ymb#=MfZ1#lbxgWN-cN6$^g1S!-_^7~lw5nsY0YCyo!!}hNB`nlQ75Lp_V_&hc zzDiHesf!&Q=f;}Ssm8&f!DcVj*c^$tUTLpVn7MQPO=Fl7#u&bStCL#?y=+(ID~*}M z-_@!W;W#eGy3TSu_bkFlwASowSJ~RCaZrZeCqCYs`1O<15}+ko;x+dV#urku6n}zP z+$H9<5sSu{y!M4DEUX@^ZQkE2?cU$@Yn$e|Gw)@4doQPNOpU!G0Rm-4M9bkz!@16Z zyOt3vt5t&iJWg?%rw=W2G*~l*>f-YF+~)gBRd=bfw{_c3iI8oFGZLWr*yEq|yzpYP zux*a}0sGsE`qmDSmLnwNj|m(TM=ke>%imu8ex~D9$8k}r4xl7}oosc4Ys1Pc(l6o4 zFm$$o^)L8EPzsWgva%YCv0SbBp9D~mj3Azc*e>k-1Em!Rg+UZS#vtAdkthegU5CKe z1`Go6Fd(AslITfD?SU1BP$R?~h`1o*kW7J$Q1xYCTlS7IAOJ8A0>(%ijzC(2lZ0Xd zVhR!(A_=hKm~w?$P3c4;(NM1|p|L;+Apt)4=<^@@ujkM94fc6GPac)&rX0i%@N4UA zEGib}cbL6hMJF${H$~iQkx09A!Um;$A&fB$4P8uEN*ixms?`7TOXr_&&Dg?g5a^(b z;&vs!-Ps-xN{S8lACn>VNK z*;aT%hP1SV1`}WjW0xyiwdIw$pOw;AB*4N#A?|riEZw_njsNn^mjeU+r&m|kVvCD& z=Yc$rVvND_nx4w#PW_fnxBMW4$atQ22 \ 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 64995d2de0ecf293254162c74fb743f87391374f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmV;_11tQAP)x>UFcRUR_T_q%B_u+kFqTvS93mV z>I2uv77sLOh`W@#0}k&v?$`J3KGEOM>m{U={2zkK_Zr zKp-ds{-Ep|3CbOv17V6cqF zl1(zVTFUOK800eC_LpT=b$0}208Ra&+^noGOid}ed8;khbF zRk2{uZ{!buo;J^8W+Ej>p|E??BEE=~`Nsv+Tb6mM+M)dPK&w+(x)EH8+Gnp!6>Pcr zx50dAIG*`oTrs@AM-whfnv0VTwwFaIGw1mHSA*;wNyyiljl!zw+zwc63Xo>@^pEkr zgY6?1I*yF~a`D36ttOhCYfLOz8Mq(AX4J`K1uL;wDi&Rir?V>LG8Ea(Mg@>S99SSe zJ6N{s?LCLRs?f8N?xCDMKl|5eUKq*gDauN0h0gL#RwbV#lT(PUCDPjX`1od373F3l zd~q$c-(at8sZ{2o;~PvJmi>H7rHbEnOGsHHsJI9KCkum_FALS zXo;SRi!t@c{u76tteaJO2BoZ6{r*pzmI{2=zjyVCj^>g&^8&~;5p^r)evasl;Mc \ 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 4112a4f631c0f5b04d5438b4eed42827c5a00418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 999 zcmVaxn40 z!Ne_u#FLt6BI3bB4S}dgAgCpcY3bC`Qe&5)3uTsn`#eDOz5Ba7lu{gg;T2Bo9-*RX z)F9>T+BNN;J?pEZN1ZcLj+?{gu_sRDcbuGmwq@{KZYK#kxsL>}JeSKIS&r`=#WBny z#v>1R%XF*63L7^xRmcvdKiEII^Fpe=Z9G^I-&5k4;GQ}_pcHkr+TQDh{^urd{QgXz z6d03ZRIgp(e0wYy+*vU8WOg&lqFKHkrmZ29FIE2eKOm*Fnwncrk8ItZ87sStnQeGi zDkP(Mx<>kR(_CS`vcY%PCm3oOA^Td_p_A{u{_4h^wfA)ZA&mC!mWJj9(a!XtcX(_- z^5GeWSgxNp`aa{@dV=D`t7I=N@X(HznP0pk>f_0g{{m8|fx1og_Jwj216w4KD%_cO z7~m>{jq_|9wD1?kDE^eBoJiw|Wm2iu+}vEzk^r%Yy*03!#LV9nmj0aK$BWC{oS0#_ z?N>xgGcpuGENaZ?Td4>^eY}orHkSk%b%5q{dT`I40W$eAVXew~)hBl}U^7kJo|wd6 zyv6JfE=FM&cBo3&5Nz3!k7%0lpbpT{(cYWwOp@*NQGt&NT*RY_Qt53<)8pJNEu-yi zr>C=(z;y_RZTkBk&?1rOkPeVaC6a4vE8Hzt5!^%5B%T)#&GZq?Y2Z8fj)T-qtdLD1 zznOS_qM!prB9^99z}o5xnx>;vz{bV~sZ@%HWfJ%|LV(6Z--57S!%i-_^rUHQZ0H^yesZEazs)e`extYk8_bSP+`QbvT<%5G#ym%kJb$iOERIU4p;UlS zO3~GoAs&z6IIgAZ#%W*Zz2Ry_9qw9gO*9bx`j6)^*aP+CE$#2W$%A5CR@h^ \ 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 95e7d6e8ed5d29e28861c61e8b41409efbfe623b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmV;!13dhRP)}q~IiOr7Sdoa_EJsAXP%p8?;jCi9f(^fFn|cI3ZAb z=n15>jZipLDj}hilAGR* z{qCqgBq6bPSgRH`jm5RX@jdF+9BtdC)&wDt$lM1>0+$*|4C!BAzczGdaxg%r+NM=C z5RQX86z0fsvAkL1=ZE=wZ&nY#qHXUW1PWcBLfa0f-;O@GeRKRqk2oMH?K3@=#HwxM zRccIRQdGC{&}eXRX5_-|&gnY`TgF3NvZ>(t$Qz9ZzP<7J^e3Z1i<$m5@oqQCRDx(s zCz0$T9PU6-Op;-RwyDt3*V9+Zm;29ljX6bCuU?t?c=DTwT9vPzuXABygwALT0JmF1 z(=>!|2zn^v7cAd%YHW`#U^+`ZtDghAc|}0LZe8 zEQ6v*XkLk_L<6@TA<`4Mt!jGsvZe~IULK|+IKuMF|Cpa&WH8;s$jC76>M@QaQ*jhd zk51_C>*d2xf=62ho@iu3#TN{Uu~&pGn~N`4NEBXkaZYaA|yuOX)NK073{nUN1w#S^UdYsGl@t^PsU* zZ!7%%>@}tJ0tm4Gd4Y(>A)N*Q001PmHi|6#wSsADm}T>&T-|N_v|VgDxr$7^?qI*p z;rRS0*(?A6jw28P97oWsTja{Hv)STgv-X3G+yCU*eEGq?n&GJIkY6oQ>gYfSFwF)v z(?lRqDiz7+3RDa?hiZmD9+zi@%lAkj`enOabr$kPF&)pwdnI2Bt7;GqgvsS{Y;W%n z3Pf02EwQ=Z;8nGsyWbr=KPsNw!mCykf_Fes&dg)xmR`vzS2Q)2?1^w@7_?drwxdxw zl{jz`{JN6l?)Rs&hehKHRBHnqBvMO&0&YLx)o?u5yVJf~1B2>hBBpqdV6S2~*Gty& lcA@?wG=G6won{q;#s5S*e3hUGz>oj{002ovPDHLkV1jd|%5MMw 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 @@ + \ 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 6dfbb958d7ebf94e780e6deee43dda1269462db7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmVUmtB~;xtM68zAQ05YT}Cz#s?D< z_0flEoDo4@Otg?8a|EW_1j?kgLpCX3yFxF}L4Vr+_W8h~QBQInPEO8wI*0W2eU4mC z1!I7!vd07{)j`uJ#GLFi35KVi+*@;bdHMe4$jE!ARc$LyhzgN$v*0ScZmpiodujFFb&V(aTod#lcM9`o6%Jpdsa*vzI7 zoX^8h?1rn{iN5ns)m$6?>XmeA`hCCzp65xA&*ylpzOm}e!L}-WeVq-NWEj8yu?A5q zhAdMgS5wd}&7nl-K-bYd=stDn;y{1!3ZNvo_Vx?ohdNyy2U;sQZ?%AIW&z>o22j2q zo*EB!Ih`n}szxjegr}}!U(*w?mDQC8zMqUs(&8#`WCM6Lq{*pip@ZkF0KN z$qb@Gu&EFvw*bZgdL55!^e#?xwIZ*$9Al#si&T-NiJvDUfm}+0pa*mY3a1UQ7zs3v zKvDr60V*tjx59wjHjfWJ`4#;GBU3zA2=cs+ic3ptpUwQT+}nNJE-c0}C^t$dGwC4~ z05Cw$1En?~5>Fv8^27XgiQR-roa69rSx#JL(PHndY=WQjAb%glHG1Uf2yaRM&}oih_6C0830W| zVr2!R-wwfI5%6m3ZVwlp6@~Rw@Sv0iS6h1;loDu6eXyP>9JZM4-r?a;?AmvOV;igC z&G77uG&UNTz4^`H$0wDvFu9$;=0nG86LV-JQK>z>%07*qoM6N<$f}$kdiU0rr 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 @@ + \ 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 ec47b76e3e4af2e3a16473fb97c9f5cab83482a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmV?P)gn-t4-cCTq|{7ZihHBPeL0f@mWMHezF)CUt6S@du>R#?oIPXemJv5f;Iy z#fl&j0*b!iy1uWSH#zg%Co6c^**DDGbLQSNcf`ud%JKaC{1^aD;1xpfC(J5ZVObW^ z>9p9}+jCb}SASr4ch}SJpy7EssMU1Dxl&3u8Vwx;f%bhr-akD()qQ<^zhp!hWdFxm@9k}*+S~DUW(J|>#e2yp6bf;?$yhe|@rFs(vTgjSR8TCJ(KS8}6^78wnAS4l zc;Z#SsM&38_J0oaJ&m@ZA=JCNP}tdlo$&@X(V45bCg67wET?p21Q7C~-Qe_6Y`+L-{ zuMsr`ES;ERu1hIs)~G1-w*Lrv5KT_ves&hA?rwm$Vh{@?Lvb-pqx_K(gb6X72KxKq zvZ1O|Q}E{Ikf&IqDIgO^6~BT*a>H6)M)mw0pRTT;dV5hD9K`eJDD2^3lsY>R(HCX1 zH6GZuEhOv7(ZIMIihLdzKz(x)F6%X=zxDL=d?zo(&9_be4#dkdmv?t}b;ogj Z{s*Zor5o#lk#+z8002ovPDHLkV1lPPRGa_+ 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 @@ + \ 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 ee2560a0230f5892f96270031a20e7f8b7edc66a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVe-yh)*LIDz*AoR~8>LL+EGEXRpFjF_wrQ~ra8>R*xvZ)tzVcKSQ*=jcJ zqO!EM-i(;bE_?ylOZausI=DRa-JZ+mvu6+B$pdO^fV&iMmHeC=ML?|t)LQ^gHUzK1 zaA7j*Kx|hZK#4491t0@}3c#5_odu}RGK#~7UE?b!bDuk?Xjbe)0|~nGfI11NHLGQP z#$^6e533TrZ2dGr*XP?zZ&w{c11rSS0Cy3D`YV@((51bCRWExNW9)6eLtnI$uD5+u zY&xjw(H#nEl>Q4;mH<_ST3OJXEMD<(ba{c{p%I2Uf{a8$%vfq<@U@MeH4_DsZ2LG+ zSqfAXYtfeTMKxn*cx9do@p+E)4>C4AO#4bVBQNv0vnHohE=wUz=spfq7a0+-?&VH- zX^XYdHqpfK@i9J1#OQo7z`++1KWr!{+0#-0yuhy?+_V8z#aaZilh*MDjxH{6ZuTLI zMw?g=zr~8>Fk^2jxU(hFTqaKeXvXh6`9MvfQRcJm7DT-qo_oN_u}Mxx?{PdHp?a)| zu0$bc*Hye)E>8i1AII|KW}(HB%PzYG8w>3~)V=oGm^gZ{8FVWFj5kvjQdrvZ8;pcf%z i%8QXH-vNXm{<9zE1?r7N%%R}`0000 \ 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 d09e0793567ef5fd0264267c6350fadef85e226b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmV-$1CRWPP)|Zou}w+Rkj5qLLL-qPL0OQvNgY6CV1)^Z5yaAw30B0yPzecv zn2I_eAr@drr8FQ>sHl1&YFYShN-0ay)PzAi?(c2vclUSJ`gec$!laWmI=>=O3ne1xw^yIPurzb^+}V?j zK>)k$kZjZ?2|{`!n92!-e4aviiYPjqtp9lB^U3{d?@2m10?vQ5{_v&cQ;WCPTRhnI zIYEyPUM*3u4BuSe;`=q9Nk7FVW%1byI29%LzI^j?I%s}k0W6=cHtuglq`SAca%q+m z)hdfmc$myEUmEdbc|>AdEEDtXFTZ0=zoDGU?CZc0aI%!L)R^JtV3DP>Rno9eb90Nv zLW70*Io^5Aq2yJ$y_07pP;4g?qH(AIEC3}L7oUO!_Z&AmfC{x)Prj)5!#1w3=gVw7ke9XbpTMl=Uw?(9XVsXCIgD7uGOy)juPpcKad zpezMBgn|tv!mQO(p$o~q&WJ(!B zE~nV;`rLfb<#ZJaTBCDix`TvHr-Nl{G6NzU0~(-QbogT{WV07B^kep0Ba%eOTMls) z6AUACrm&5|)fSFrfl~SyXl@VEz1SuZ%|vqS26+yKDQ#cV@-3oZg6rg{yA{TInmEcJ z_LF1a+Gihrb$#WI6pIC1uS!oI \ 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 f981a9a47152fad062fed993fc5a18b9e23ed79b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmV+t1MU2YP)?cArAJ$-JzWb+5d#c8u~auOFfcGOB18uy5U2hJs3Q^sQek07 z0tpF(gv7!ED?ikt_9!~k<8pB>jh#4&f1DrN4?_}h>dII8ZqMuae7|2qYt8>D-<+ z+i&f(TBg@>crWmuJ2-dw8~Ms^?#~|=BI#!rx580=JPy54I%>nxbqyDGz z=O \ 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 443450f09044f70c0c9eb7b9f138d080f66dd866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmVrKWi4J32@N3zte7^Usfnd+e2`G%i;~tRl@>8JJ{VIU`j^;`?6=xLQ4x>LU_rM zk--N_84JS}z?kk1*Uf#@)02_?{RFRH)16A~xpV2#HMPlg+q0WCf$u{YqRyP5vsCi* z_3MLw_YAF!Zr;2@J$dn>KXdQiz@ci@m&cAl5a6CZ zO=q#_bMxj%O$goD-JSA#d!bZhGY1k@it4%Q+|CG64?`sq_9$HwA`xw&&j>kEz$C;%xXCW><7#bVh^PG0?>Qc3y; z4)efYJddl(rNzjyz1jhmZ50p!~ UJf`3JDgXcg07*qoM6N<$f|7>Y4FCWD 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 @@ + \ 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 fc50cff7408d77ee4862333e0e05accb5abac268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcmV;!13dhRP)29`mlT>OFkG5)zl-7hu4LwrDLJ?8xn{OHk_&10Tz9@*- zi&P&h2p%YcFBVc1TWk|!4b+gNNhE3Z$R4vZJ3Gg3#?MD^{38Ge1vs8YOq|XYjJd(X zrBjBH)uoJR)Gg=!#_pZYUiD*w@ModK%&6yq5U2nM0j@u+8MzP6TzKlz%(G*pGddkR z#OZ+_D)GIlJ^9zIwaGgRH-EKv_U1s`1&C3+0FF0Y7%F}H_WbP3OD~MjwIr3TT?W%V zaN4Y{R}pHQ2M(9X4nA~bf4BC0ufBhcSgabuIG56LnGfgYXU|VRU1EK!i&L*~dD@`o zc|10xaq{6L*B2|)8V(6fBXMZd*x%eZ9yHA#6ohi(^w}q0e`dTyqX|3rEha{EjC_JG zueEvq`zGa5mdi5-sJFT_s#O$Kp*TJ@g&M!4CNuh*N5@Br0x<1>L^8#~N`pUFEwoIY zYRh9~(`I5UkCv!WYy0@JN}^C8Y4p9N7R$xyrAii8x;$D85kgRLbZR>;P0L4997YER zXjlO)Q{wbg+MOn7HmO4Yn3~P$xk@YIx7#gVIhkO%Umy@9Ri76pRAwg*aj-wh7gx8b zv_J+9^=5-~m_gOj2{n=tsv_w*9$#H|7#~#V)8JTH@W%NfW>@m=)&KbP$9+0o7uzuj zgC58k(Bt-609}v5befJMnR;i1wJjSFmqgNqP(mnCgdi}jKxyt& z|4_XSdP)HqfGR<{{Jmv!WueX5whb|#DD)r^pOFRmhJeJ|{ z2Q^MSl7pTHfe*e*TuYM>X`H+NE)sg*#K@lUebc&SSL$bnMuv*9jE>zlSzPU~e6Poq zpVqOu9hA5rl`}}j^Yj*%cZ2%gYoM;jNInNKrRg@zU(D^@BY8bFmOI$bUOVE(KP`et zp!M~UjO&Q~F3!^OO~1bLDyT~!5ES17K%fvgt}a3@ri{M%WbwdJp`{a%jPOj`_p0>` l*{XjYh4O2N8lV6Q{{u_RqFVRXeJ=n2002ovPDHLkV1j$%y9@vT 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 @@ + \ 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 ac5d51789bfc69eee0accbd29cd72e64882fa025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)`6pHR5*=w zQCmopVHkeC|KPTtlxaG(shjhNiRTQmk|=~QP=rDuw640U8-paG=%&2r!VZ^0)I}O% z2LeU9CQV#as)cdGcZ$3bMJTf0wOrjnlH_~Y`A?U z7UB=wnf}r!Xjo})L$Tt7$(wB*vR|l7RF68A-JPDbwI__gFM%W2tPsJq7vuLHlxc1* z+h)l!ndfyeYOG9|pf>1`u|H49s4Fg8HMgdLf3 zobDW!92U6T6Nr|E!7WW7LWbX7?@MW~BPl<0WqhBAVI zNOiNUf(=i}+XRGRz|bbxUe9JJ1$svU5Jf7Jk-9uVupujc(H~Yv!cIZtodkkP$txoS#@OeB)8U0i3q+{o5W?*Y(2qcy zK0?8S?4rPG`(RmjFO1b{I#WixtKyem!PvmLiS&2?A4nMkX3 kuRDUPKdo)_`t{$K-^~mfi#r&!YybcN07*qoM6N<$f)vJuhX4Qo 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 @@ + \ 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 e648b3fecbff8dd3db735ef47dd4360a90589b04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484 zcmV004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 za7bBm000XU000XU0RWnu7ytkPT1iAfR5;6}lf6mbMM(11uPJ2OIfw* zCh!C}V0wR~So_~ZtUa&`tN>B?76CPBj{xporn&z50JX2{e^nL%bb7%ACY!Fbz=;PwLiL%p65}>XgdOEbp_mbmN9o=9Ap+U149b~ z1J=RC=_{4P^`e%Fv=9KDR3bJGaw~w;gt?J*FNe=`)XZ80@RkHXPoi}WG6#7$eHg~v zz#xZCf1GIq@E$7o=*yq5PTI(WIkPe^*4<(09u&lO0^SS6xN+Imi`h5 \ 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 baba6e00e8fcf143b24c98abbbc0c1a5568b4cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmVO>i=6ZOKN zH3l?>Wg;(_I|pV?Aq0~dU_1@94CqDG`Fzla8m(~ZeDTDw6z~HbN&&$Gpg&3H2MH&0{KsIJDEkEWLh5fKN%M7!~C mn1Z`i5!DX3En+@YrSJ>m7574%bPxLg0000 \ 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 69f1c455d8285bd016d9c5e6cac1866d2ec36e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0x+_>^Jd;quVQy7D(Cb}>#iV6u9 zV^CbRk|3stP^zs16)1Fu0p{M%a}uN`=W+l53p3-`K!F?p0D#H4h=_=Yh=_=Yh=?#b z7r2EAGGu5&0stATJOltB=BFi7bBh1~7G}n=fdY93`*k3YBox7&---EY007C<+?s`% zn^;Dk!R~X`Ys{_yKmbu7AxV%Jx;D+VxLf-uxryZrYDdhj@b8C2g#R8a*}eCfa%U>d z+SLBu)%nu2OV{61sdh=zRQgZjuGz}<3~I-~;_VL%oUM9sbi~-zH`EWC%AI9Hqvwtu z-}A@kU-@aZqVdkB=!A(3c8?)kE^iunYl>1y#EG`pCNE372UT8v&G6V|!vl-nUtXY? zfeRVzJx3HGD{-*R!6QkU$SOUQs_buYQX@O3*t7HJ8toI1WbpJD5sJJ+f`+{OO(L6n)RDcZj8$jMMNdF~H>O@ZS8PzVb3gs%@z4DGzXDt9SIBHPJ z$g^I0M`;|9pV7WgPl-}adzIckMdiqO4xpJ?m>J(Uw`TZ;^Hz=*7`%dl<1TtybOeZ?=kc ze2e=Lah5 \ 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 1e239a7cc8e4251ed982b03c55afff808d680b53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)a7=TWv9o1^p*G5P8zP)+# z@QyT1qp7Jolb0`F{HW3R_md<^N`Q%p2{8bK5DX5kfA`3dSH3)OV0?e8)n3_bF4PVl zeBr4RCr+NJ*M~kViUI({kfaq!T2V=pSI5T2-U%V|`4^v_zjW!s(-$uMu;p=ArZ3M~8Qpd9N2jK?p(=OS2fIVtKjTwm;3%PH4 z+rGJbz<1}P{@@`vOddUGT#<70get$k#%$8-AvWs3r3pv(z5NI{Hf zk#d2kNobnC((>3M-IC@_2KV)opeU$iBr!-K#4t-(AhcLqv~E-6#QQZNimX}_5m#9i zQ54iN;sm5XNjyW^Cd8z%{^!@~&my3Q \ 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 e1edec451bfaaac85fa06490bd26703fcd17458b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 730 zcmV<00ww*4P)^-1`sw0W8rNU63F; zi9~!bJOpKc85rl)-Bs7cJRIG4l1gq>?mao@+>)iGrL~2Hg*iY~m46{3f89OLBa_L< z>gsA^d3kw}m6esI{s-1tP1984IM!CHrK+lhLO~}dCtn%ooC8SH6z3cwf(RTPm8euI zL{Y@Z$OzWjUQZN7q-lz(VmkA^VNfsxTN0Q?1A3hetU*Yp}UhB*=s~RjjpL0!%L)-%u$X^7Z{|EI#G)eQw>D z;^5~#(sUF*?lUo(XD~m6s{SFc)&kJ1*ExRooY|ox5JNZskro-w?9ptMNW(g(Yirm$ zPYDMjw6ihOE#gLvtar|}+tXl_Z`(01-X=Vp9%Smu79>qR9T*z5I*QP>-U|`&Q5U0U zyGYjKw+@*kFuLz-l5vVJu z!#Rhu9R;fG!dd}yhC~IBfT`&pEZ$5Aj1S>epoN_Kq={{ZsM`GpiUNX9qnU7AF5(4w zL=3($G@L-q0}H?E9s|&^&=;ajEq+$;#vW5Vya!$Yv^}=_6qm%v{f`ay5U)@qN)IRz4It420EKp2LIh-cQ<*BkTm^VuXxu-1YI+99A% zZvSb;EeeGK)oL}CTrT%$e0=-~5NJ2i4n(9!)c+ \ 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 a2ae9cfc75cf75f871a976f69e9d597d1861b874..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmVrxsG>6#;m4Ejk1Ml&rN0yiL)>*qKG0Yf{L6)1wpH5(ZjY8ts=6Z zFf_7=3N)SUVKEU*8ynK1fyN#)_@W|fuJ_z~{^2HQ(Tl#15fT0eGn+#o7tkj2pi3`w z%L|*iuyqUIHXL2THf#`|1k)vyM*_;O2!wnWpz}(Oe?b7G+*Lk*c5GX?x+b6(D2~5G zL^Bk}`G)Ex7muuol=Kf|RXR1Yn-gdr5e4xpL{N^ZG7G&A53FC&bf~rpt&d*eNg}H!a(IyuJZJpAV<{o}=r|aEBqqA#nV_)i=GZyYIcVwtOY_ zY^bXJ>dC#EyV$(hyfad|b4eYfl4yzdzAXe1R=P~3$QE?6+SLfD#p_Fyy| z-LPmm+LCv%G*p85{!)CREIJ30xPE1%Uw(GhA>VngxC5oxP?`kk4p{N-Rj@2-tOy%j zhqte00o{);)&z3wBOa#*aqaS_v^(zB3$L4kVgMKzF@PARa4qM9DGMHaNV5C!q36ha z&0y4hhxpr<=xWc6A!BS28d3xTF#<6K#a$@jKnVvt&osqtDEtr?0b!cL+O|4D1&IJ@^AIlm|k2Ah;OEu-QI% psYFgBijHc6TEX#0jEL|*z5~-~Bs9LDyovw-002ovPDHLkV1gTBQse*t 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 @@ + \ 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 ba5ac29dd44b4797614a8ce57466c1b744b7ee83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)tdXNHJl79=5fR{Ig4%&j4CaAj`IQfr z47TP)w5|6<1Xh6Vf7At>0@_gYXDUjX9xu5o`b3lL60Ge%)_}q^UtGZqA4YvSirS1W zsjVPXH}yTxFed17gw0KYdZ}d%sPz(8(+;p2oS;;v73~|CuW5TC`s9#cD-}$gV{n!= z;9wqc)%(DtIF;~n%HORybS zMzg;XO(Sq*9jM*LN?r(ip~ekIi*+66FZ4-P{w)EwU=0eoU=%{YP9U%jm{l;VU^9Z< z00u27RbJ)!%y2|zM(SlxaX`?dkAX)6r9cT#vJR|H)dG;R%VU~+IeT3`z8H~-XwKsJ z>A>p(N0P^3$;M$R!eQ~_u=wKvAid1Zqfc{D5m}Il(Hr765xG)@eXs$BBC-7qn2Ph5 zo*(zi`!{!G;q#Pi&rQGYOoD+h^w&XuZEP`s7V0K@U9$Z3wk&?TEH}G${|1734IJ{p zP(uQsz@?w~@T^yUez_yl*8-B6sty7QKv^yfH*NqZTK1lZ_U^i*rRtM80#i(8doUTp8EFqvOJk>%EfL?*j{{a2~wR<2cpI4if00000NkvXX Hu0mjf^m!&Y 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 @@ + \ 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 4c3a26d449a02dd2f5d191991e3c62c16d9f72fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmV<^g1YgS1oH>ns-Syaxeymws-U<^KoCI$!GMcE zMiU4@4Jsx+qQ+O^Os2c1Z5y2Rx5^Gr=W1qr!%?E*6oZld+~ zEZn`wpQTxJ@d{21lkgt}E+h<69$p<|<crxm;oY{)5yTb%G#7 z^BflhfFlUnJ$Wl7E)TJFYagqtKe~X8jSYr}k1#oTzr7I=%&c(Q3{S;@x#Q#L|>L=UOQ8p-?}Tmt-wqvl}fHwd)^ouJIi0C W32bOC5q{nP0000 \ 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 e24b44ad3be0bac3b47b2430ee21a9974dfc7557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P)pO^#9bb3xu+LF30b}93(w2n=hY7+@jt`p>=}@*Q6o~9h>@!! zAYL8;B&mS86Mif;0!Ru&xOUbx_10NU5F{!LZZP1xN`)Xz4E!=9fjLSbbv!Un3E9#q z%a0om3>;}&&(LI5=^p{|nW2zx ziduK8?*2DhKUve_U}ra3)?CTOk5U-2OxYrc#me7+C|wc)HcSH2{pRktnPW5AynNNr z!*^x}O>Itg*+_l8p0lsSQ4%gI{s~OdCO}v+Ry8(TeR|QkER**3S@*TqCK_t`Y53sa z%SI>5KiS#sB2BK3oVIVKSMVKn9;0{01qZB+*_3cRz53*{6CPuSk!`MCzV9G!lr{6h z(*|BO_EG=d$%@Ydw7Q*KSE8XPMDhVZAfoq1wH6#*LQkiS9xrM6;$e-&$(IcdJ}~w1 z(u+o(d1_(NTQ{rPz09q;Kv_bt3&4B;KzK%IsirWC*X!TWY#(5q#m-ubja8rReE8AD zl4=J}-l=6lSsyRfRxoz8 zMh_1^F)|~6Ek$y1B>>5w`{D3W24>DaI@$ere=a?hUF`CZy1|Sdpe* zz|@>{hNX}1ktl|}1#l3+Wc)L+4}?+v3cq0gB9Tv0nC)F)$&;7i2wiq M07*qoM6N<$g7koNCIA2c 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 @@ + \ 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 afaa8132e9793050650e5d5f9b4aed2f7ef41c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmV<50wDc~P){$K7@NMt=4P_6{xflXRJbsD05cFVL;w?vLc(?#&cXDHj2jP>5XG@? zPl>gqcg)Q{r8Zh)a&nT@)m3I^AEQZe&S4m4Le^%@v`}!%D z_X6O3pi=2W)ev!*8D>V7MRx4!A#Noit{9NV$Z)mFaJ5>PH0bTEaOu)T{-uTab<7Jv z#UswM^tsN$%eM>;4NXty(#msf~U5dl@hOlh?;1}bH2hk)~hXpT;nQyU+nHZ}%8o+l0+8sOTsD}VQ& zb$B!P6T=m+;GAb|Wtk84MfwK@7#uuGqtT>ZualCZ3aW~#k!3kY`u8Dn7{e114(~l5 z>z{b|aE8gVXBZk9q}gmTJNtx~C!BMrDW*oN-DYaMhVMH9BE^8L)nek@6ccBsx)xhh zj~?Xq?VDfk>G^v5AY+DXMf#8I#Z;jBHzIu%R&@YClarg#c RxcC47002ovPDHLkV1oShP-OrB 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 @@ + \ 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 a842c79713b73cf5648f5ade7853c20b48cbe81b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmV;c162HpP)17mqtyriPYB(>aq}ngd}`P(sM4HjwH?MX-0nQ8{3>Sr)Ot+F6z1aoX6)p=Q+=>&qwXA=E%U)>a9(!U>6a5 zL9t7XGBlb!nJwoBU)Z5kV3`G?PMAgCK~7I3;}=f6(+|=A=md5vMy`K} z$eLg7OoZj_gP+R9h{$4I}z?Yft6OFLa{?euqhX$V2E37#5!Wt;LmuwQp8=!CjJ5JeRrkS>;4 zv0y$6k!1tFV}ofkldf=lA;Ps)m&T4(RUK;Er&AtCfw%17;(|i4f#&Wy%x7UaULX*Q zB6Bk=#SPYqEktvgoM@Ex*6Vc#*5T-_8)U>1yk3Q&s)bNn;4PBaNOYd7=lhvzu=#!+JBO)RXzSUa0yZ@FwsUIegW%TjGa(LrQ=GH{yQQgX=Og~Q`~9jWq?IeUM$Rp!W97{4 zzv8%;KLfr}+W>$BH1*VZ|5z}^Oq87gzyN \ 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 @@ + \ 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 b740c987b376d643fcbb8978cb7352c86f9cca59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)G7WwC z(CKvAn3yB>qTgw8!J9YJ&H*Qw_$j;7tA081=%;WKZrfCoggKp^l=;%yEH2!N=lsE+%M4{>B{ z0-wEjg~P8Wv8bdBC1Ob<{0#w-l8D*Pkhfc`R_l00MTM)ay&aocTCw}76I;9baPVFU z<|T!GC1t^|U)XGy*Jj?%;n?UnR#sJFLSoYION9mQ(drDunQQo|$A*VB%*%ZN>FF7B zlT)+U)7y`6ak0Nh>Rhl~TGN{w3h%3az@>6b>+_fiwrUj;B$tg>zX=$6pn7aTx zvP58DdxMb7^TsZ`=|^B~zKZlw-WVc*1kMV*-YefmpmVCm{e zB?A$k1FKH$xP4NKw~hy3Y@lkLczI?AfKO52E0KXh!tRn%%7KQFEArJ@Cg6_002ovPDHLkV1oRQhvWbN 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 @@ + \ 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 8076b8e248d154e3b541750dfcce4d3426127f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmV-r1DgDaP)~2D}lC=CTVxG$!=!n{qV39FW!9Mcl?)=^)*)qylgt69OQCeAPaZ;u2NB8TW-c;(XM*Pw|Gfdq^uQ6MmcLa=GY?E9;0U#D;ZKuE_S^t_qHL5Jjht;2k~ma+%_@gAiu%J(qN$hV|(PBsdtP1#Jv{zDHo?p=-_7 zuX0+*&jOuBBd?4R_jiL0a4X&D+gsF^AChQ6(z3J@(832VAn`r=<1V>aZ%oPGwOX!9 zr}XOaCo0|jJ%ERkDY7-7>dWN^@-M7Z=c7sz_H)@Nm))lt~-;7Do z8)c&B)`jn+)}hCSWS*X&GP$4mYgGy)?CW;8v>;e%$Bb;Bdbm9h!2VuS}5HHIaktAPzBp9MQP7#GluH;pZPN+PS%_&AFwO zTMhUQz \ 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 66478f4ad8881df379864b92fc94e60ebdac13c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP){`z~L;`q|{0b z*c1Sx#e!#+E|taz5+Dj8sH-oEFvo~hSX-v(R7czCZ z=D~Ni7V5gj2s8fp;cLI_`FX0Trus%%64J_CsH?85*njl&k?`$k_mwSsH#J+aod4>@ zEESTJG*4C}rc_)b31XHAc~o67dEl()U;OExFwCm4J8Jh&ys^5c<)J=q6(}dfjFjG6+FBoOVuj5_ic%~!9;|(z$Z;J7FQ;a7HF+H&&P7JlpV>c3jWP9X2 zJR72I!m-9;Yo@A)d@qdy6#B{a3AJ4+>ziirF*1OpBv>ivjPxunKGCtElvmqN+bVPC zgLJycl3}5##{*++i<*ST0U(*jEap(t-MpzVypH-#e|~?`_zTBwzWLJ88`Ho4MMs~$ z(KTUZW9`EL;4lv3#}HOs*!@U3PQ4$GKGz+G66dhKhtgwB;kUDU?u+r-NAax(2W|#R z0QTYw?5oc0xG=FMezLJSUBY)*lEWHQp`Q;Aj`x(mdbBrI3F81>#V$-FVfj5d-{g56 opb|r9L>=y8TX)`}L>L43A3zKbH*4AWivR!s07*qoM6N<$f{u@n4*&oF 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 @@ + \ 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 c22c15e2cf202ce61faf6cc12a5dcd3b72367d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2{YP)sK@d49J|*r%&_p@-iR+YisMDKY!xXU}a^+$;r87$r2?cC0kqDNs}f4 z^-P#B0jCBgCMHKmM{{%Y$jHc~#6%z|CMITJV1Ql2xpU`$=FP0s+da|fnsn? zvM!8}1Df*r^Jgp?>gwu%8rFAP-B@aHd7<8wMS8ba7)>m*01EEhxf5N(u3fuWSy??j zJ^%dq{p;=dZ+Dk`zrW)5r`tdu13kmT!vnM*MT44}8qlP(XV3n}0Q>jv2TB38AvA2+ zvIQt4Dk}OP8~FYEHy0Nd#5kyi*w|Pg-_+FfKMnw~zpShbszF{}9>_N{GsC4pU0ofh z02tg*4b05UK)#TW(4RklFjas5{v8;bKn0A9j8F|#RaL-b0~Bg+Z~yo2AF}GdfByny zfl{TVr9d?(@nEPakr^m8snobR$HKx$&D=;0$e2)U2o%)U5JQiLU$2h8+-mb?n-v5- zTx))BwHciIe6#hBmq*cK`pK#On>+JwY|Fg4v+(KJX)i9!xVftk%*}srycezv0QW \ 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 307deac8a7147c39497fb785c45204d0426e139a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk;P)6La~T$*G0f)gTVl~+-o$7dL7H)_4}Sa=wx5M4;qVPb zk?qlHK~atuwgqE0dkKY}IF4r+tDIi%7~K=}TJ4c#?*jqr#L46oZ40KR3107=-*2_~ zUEeuDp3kpY*5vu~s4Z+)tE+0&m2(KP> \ 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 d799fec0a6592b084c1bd6a69da02ff24325483c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)&?EGquGj1B zc9UmS_xt_h7wZ30EEec^QT)qR;Znwj_SS)^oPN&mXw-3D6a5$u4 zEEYST&xga|gY<#p@#wm4r_-TTyWNgNBK3N`R4Qe&*?2sjPNxIFX0w@0CiD56*LS;J z$V?`~fp{E}$)u)f^z?zzXykd`uMkQ4{XRQrwOZ9`wNNPVdQHf-?H4c}kC)5kpAaOE z3}#st08JE-N~Qb`v)RlOnog%YI*vnIH1K+g`8d2$7Xx$WShqWdL2*CE$mqWJ)Bj+%!$xtcaaTH&_5@Hk+mpV-Pf#%kggI zMqE??ptvI@<{K+>t4R=dFFgT(o$5l$Ck3oL0f5@?_t9vSk=E-qTMCE6EaTnq1nUl~ U46#6w1poj507*qoM6N<$g6w0|-2eap 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 @@ + \ 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 d3315b36cdaa45d4996bbccb2d3a6cc5c3249623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)I+yy4qU){vt2O5n=EEXe4l4aTHbSjD>`F@p3rAnm|kH<5a%w#f2rBabd zq+YMTeZjIUf*_K~BzU{sG7JMb91eH89rCBs3G1e5wpy)^k`) zwOR$E!~JQy-S&O|ahG&mhe?)Y@N6~%QxvsWEFdLG3d8U*fV$CW6h7>gZQDH0gKM=~ zzu)h4I?vBR(=?bAMakuIqtOVAt;FkBtJU+sa=FA9@EL{ySu7U8<#PGeNuzEekvJZY u;PH5jfaiIy0{i{``v5@@eAfN1pYH~ogs2Z`QF#mi0000 \ 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 619cea4b2eb6539722d43a908149dde1804cb7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3_U_tpA+{^d|u6OP(%{ zAsXkWPEzDM6u{F~J@anT^c#|8t(7W-#SJI)udC=Sq}u5Sr`mfc{Tru_ext}GnL6i!tG(mcOC)dlal6cv3G^Im-=_< zN^-}u^Cqn8DrQ)4_50iCORo&XKW|jcf6LH*l~1aHX9~xHgBQ_h)+V h`S0KJ|MKo(tP@&0jpO)45uooFJYD@<);T3K0RX!!Z!iD= 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 @@ + \ 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 ba7a76799314b5ec8f79e8b6d3cbf6030542bedd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)A3kuO-1{3XUjh(MyZ{s7_ z+F5$(ER2OV#!@Yek@x^$EDV?sGa#2C&M=(4|0N{8z+R+E<7i#X^R2o4-u`fS>{3xiiWxcQMu7mTx@^>}_t#n|qI+JR zSiCiLqnrL5q#h(>)^$DT_m9%Ra!l~c7tWWhc(}P67^0n^4f?}o*i=PnArdB6S+rVZ zl|3hDr@MFd+$1fUSrl-%fA~9fA*CkQby&D^(NLu~kGEbvuO^q~Uc3(>2#Sn?%#}$q z2GVF8Z%^Qq4d1=pTHEY?{`Bj^M`JWZ2o$4$>8a_X*6zQ0GSu!s+mehHlP4k=#_(SN(A(J9 zyz^jkZt3Uk`&jJEvmKBfq>Rrto{ooVwlzzbs0fqf06~}IlrrSX-+Eu~j^B%&dgUM; z95o4oNXY>QkaY^Q~HvR5KKWQ5Z&K7|}o6XWkpqkPq?z0000 \ 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 9f7e4db3962873a475cc68748c889fe03eed35eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)#*FER{+% z+U>T&aU6odAkEckHFUdOh@z;c)9I1kdcGe}sZ^AFArH6PjYK?7G7R$h2N;HdSZq%2 zuO9#e#>cR;x&>Roudl2wf@L|}WwLMtFbsp^`2|!M7N%uEA^?TwsDkzT+;D(~Y2kx0 zG3jz)R&pcLY?6z7?>Pg=8h43U^NqqU2)I=>ymw7_es-M!EQ9^2DBesH*RLvyM(a=6 ze>MPs1?XBG)m9r^y^dx3AaRdn!XoYnD1NHAINyc$s)W?WChdHAdWLOL#N+g|GoT|2 z2&^Q~x_QE6WP)~g5fMu>GvslHP@p^;2p{B-Exh39@Px>=Pj}ZmYo46=~As$ z>F8>jMgewg=OjrQZVv22EX&dOG{sm&;a2Vxs89twnDpFMykw|37K_W$+P6s^C zQ|Yvb#JaA->-9PVLZML8@AoUwX!P$o$z+nof*>^e>%RcLlb>KtbRK{J0000 \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index 4f01feca4..c1d74ba84 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -87,74 +87,78 @@ application/scalable/status/dialog-warning.svg application/scalable/status/security-high.svg - database/C00_Password.png - database/C01_Package_Network.png - database/C02_MessageBox_Warning.png - database/C03_Server.png - database/C04_Klipper.png - database/C05_Edu_Languages.png - database/C06_KCMDF.png - database/C07_Kate.png - database/C08_Socket.png - database/C09_Identity.png - database/C10_Kontact.png - database/C11_Camera.png - database/C12_IRKickFlash.png - database/C13_KGPG_Key3.png - database/C14_Laptop_Power.png - database/C15_Scanner.png - database/C16_Mozilla_Firebird.png - database/C17_CDROM_Unmount.png - database/C18_Display.png - database/C19_Mail_Generic.png - database/C20_Misc.png - database/C21_KOrganizer.png - database/C22_ASCII.png - database/C23_Icons.png - database/C24_Connect_Established.png - database/C25_Folder_Mail.png - database/C26_FileSave.png - database/C27_NFS_Unmount.png - database/C28_QuickTime.png - database/C29_KGPG_Term.png - database/C30_Konsole.png - database/C31_FilePrint.png - database/C32_FSView.png - database/C33_Run.png - database/C34_Configure.png - database/C35_KRFB.png - database/C36_Ark.png - database/C37_KPercentage.png - database/C38_Samba_Unmount.png - database/C39_History.png - database/C40_Mail_Find.png - database/C41_VectorGfx.png - database/C42_KCMMemory.png - database/C43_EditTrash.png - database/C44_KNotes.png - database/C45_Cancel.png - database/C46_Help.png - database/C47_KPackage.png - database/C48_Folder.png - database/C49_Folder_Blue_Open.png - database/C50_Folder_Tar.png - database/C51_Decrypted.png - database/C52_Encrypted.png - database/C53_Apply.png - database/C54_Signature.png - database/C55_Thumbnail.png - database/C56_KAddressBook.png - database/C57_View_Text.png - database/C58_KGPG.png - database/C59_Package_Development.png - database/C60_KFM_Home.png - database/C61_Services.png - database/C62_Tux.png - database/C63_Feather.png - database/C64_Apple.png - database/C65_W.png - database/C66_Money.png - database/C67_Certificate.png - database/C68_BlackBerry.png + database/C00_Password.svg + database/C01_Package_Network.svg + database/C02_MessageBox_Warning.svg + database/C03_Server.svg + database/C04_Klipper.svg + database/C05_Edu_Languages.svg + database/C06_KCMDF.svg + database/C07_Kate.svg + database/C08_Socket.svg + database/C09_Identity.svg + database/C10_Kontact.svg + database/C11_Camera.svg + database/C12_IRKickFlash.svg + database/C13_KGPG_Key3.svg + database/C14_Laptop_Power.svg + database/C15_Scanner.svg + database/C16_Mozilla_Firebird.svg + database/C17_CDROM_Unmount.svg + database/C18_Display.svg + database/C19_Mail_Generic.svg + database/C20_Misc.svg + database/C21_KOrganizer.svg + database/C22_ASCII.svg + database/C23_Icons.svg + database/C24_Connect_Established.svg + database/C25_Folder_Mail.svg + database/C26_FileSave.svg + database/C27_NFS_Unmount.svg + database/C28_QuickTime.svg + database/C29_KGPG_Term.svg + database/C30_Konsole.svg + database/C31_FilePrint.svg + database/C32_FSView.svg + database/C33_Run.svg + database/C34_Configure.svg + database/C35_KRFB.svg + database/C36_Ark.svg + database/C37_KPercentage.svg + database/C38_Samba_Unmount.svg + database/C39_History.svg + database/C40_Mail_Find.svg + database/C41_VectorGfx.svg + database/C42_KCMMemory.svg + database/C43_EditTrash.svg + database/C44_KNotes.svg + database/C45_Cancel.svg + database/C46_Help.svg + database/C47_KPackage.svg + database/C48_Folder.svg + database/C49_Folder_Blue_Open.svg + database/C50_Folder_Tar.svg + database/C51_Decrypted.svg + database/C52_Encrypted.svg + database/C53_Apply.svg + database/C54_Signature.svg + database/C55_Thumbnail.svg + database/C56_KAddressBook.svg + database/C57_View_Text.svg + database/C58_KGPG.svg + database/C59_Package_Development.svg + database/C60_KFM_Home.svg + database/C61_Services.svg + database/C62_Tux.svg + database/C63_Feather.svg + database/C64_Apple.svg + database/C65_W.svg + database/C66_Money.svg + database/C67_Certificate.svg + database/C68_BlackBerry.svg + + badges/0_ShareActive.svg + badges/1_ShareInactive.svg + badges/2_Expired.svg 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/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/wizard/background-pixmap.png b/share/wizard/background-pixmap.png index e64d87041879cad998833cc4c1403803a75ecce4..0651b38f5ccb1023dcb9154e3fe562c96135ad16 100644 GIT binary patch literal 41772 zcmc#)1y@^5v<(*A-L*h*XmJbf?!~P@aS873ZY{;#rN!N?Ezsib?hb+Q^1b&X-d$@} zlDo3z&Yd}X&fe#oiBVUT!$c!P0{{S+3i8sL003O_e+>l)yA#~Y_Y3xc=q{hm5|5mh)#1FLO6*fR~pShnS(98ng(sZ)`}+C-G?209P;PM&cT(oh zjSvquoM0MNsPqray;FK1*A-?WZqz8KDJr3RfW)!^4gq!rd)R7IvSEzy@L{2hSd>vI zGoBTVcb#6Pxr$cVdIBx|xIB?9iTzFoRwytqFaSk-Xc1Cjt~g;snq|x`zhevW?}E|N zm2(%;>O19v$36J~EU=k_yaQF7*a?zH@kE4RG93$lkS{57BKpWxfA#_#qGEqZef`w=*%_EDA(9Y7m}JqFLZ}9Swp9SB zFppQb6!1)&8HHmVFob5WYvSkAbLF4kFzdkIWH+xk1}@k)f8yxI^xomkQE~S7?^1d2 z!lk)};sR4^Pl=37U?bHcqCqERWB!;3(!lA$vMphp1R&n`^?~RC5mM$e|Ncou4Hj%6 z8f{k50s)E^R9ANl0?~a1z zH1T?9K{)v@?f}UW%VZ#8U^!sxSXzWrfMZ>i5FKgq@X*%&;e74)=Df_^u(mDMM46d` zG!8$^w1PeQu`osy`UM&RWU_!lZWOc_00~0Kz#;nPjGQF_O9Y5XQ%r*#AT6kI&^J1T z5bc4%(h(@}G6eft<0}9n;NT`3d-$qZ2(mj{`cY08O+XE%(pnk>HIYha(vy$?N)S#g zS$3Q?2ymvtWI3d53w*u3+k*al7Yu{rdPcBE87&kcP6H%QG{%eE;RR1#oSdLPAkh>{ z++9Awx8XX`)6;J`cCInvE^K{)mZ{`SM`DtXwK%S96B>~P4>|p40^lZmn~$L^OFl`q5vSaM~5Cm$Hf zLWhe$y8;7HXVC>u8wST{qbMXLLNYmwkG0I$Ou7Up2@~fVz`Z z00R_XO+wmMsGX2?E_DbV%+q`+0LjZpss`4^~u(#}N$*%u#I zcX)Cq2ebTV5aHHRCV24&z~XZFk1l|?o~N6GDXgBgsWK%8LbU#RKr#;EWG4Gf7N==q zqR6#8-YT9ixdXl>c0^jsi-0$K=B3x5a`$1N8iUcwfs}p#AxrFL^Izx3+lLa=n7r*f zf`Rw}>(}QytGOy2kH>ycwO)N$UnM*aL;Ijbv($~|{rTF;YLoRONti;0j&X3Jqxu$#gf3~js4?NmLM<68B^xnz&f;t0BI>s4 zI+{{0c2~LkUd;zha66j5g8bK^VUSt&D^*29}N5VNa8#W(m{kqJiKHtQV}K6zJ3Q=A;>;dL zse?p{oZi3JuY-@EG>X~}QI`)73!%%~3>{yZ`no6#l%C-pxUstb!5}AAsgUxq7wjp z?|x%oYmq*H2YaKmxK$6O4k9=zI$B;EI-~=Fqj6 z2pAptj1mmlR$Brfp4a8#uQ98Ekh9%C!WShHuYUm&DcBsVsz0{*o!3Qhjl4oRNcj*^ zHuwgN3|C4y8DJatKNOnVl_$IYM`3~tSv^W6?WCy4$Y)~qPanO!y#+iqP|ZL-4Vx_C ziA)cc78zpE+8La%h zaQ{uj9Y8V-3Z;?>;BSB@BaNQcq>Cfw%%ffu>7dZ_Ft0SDWl3CLU+2nm9U-;BInKk= zRT@si1j}$|%uH&_^7p(>>bO<|N_3-lB|r$tbs$w2@YTxfkgA^Bn*Yu3UH;xDOfYyR zkVzI`E<-)2V>H`M7;NQlVKMLl@P9Vqw^fV|VQ< z9LK?SBvq$P`;mC(9j6bf;LWcOgKW;jR;uPR#L8R&;Hvm091W!E2mavb176XJxbsL zd~}f|jErfstOd(cA-VxH5!(|1bnP=DD=j{!Lm3%6QrM!>fzX@$w3GT?u^NaqJWibv zvpl>E5AN#370H?+M@KGj$&S|yTWkVG*RW_Tes|MtI@mQf;|4>$@wD$D}TApb1FLLkuKu_xlNVV$Gyix!*5UJG)7Yn zeA%H+%W>)$N1=Jio|&1s?*N}jCllg1+oATOZD6}l7FhF z+T+>unfmNy?AnM!4D=rxQD{~PI|3m0`!IZPbBl?c)BXTKoPcL@ajc{i%F4lh6BoVnm>ez_-Q% zeR0(~qYq9GbmRquV<&}_M3k5?>zM}dKHazWCctNG5yOQOyOw-C3!$^4{b4oKT_D@n z*MX9prY80jxNjmU2IhdE|V`)B$X8`%bEspiti^eqsWJfPrD z4PU}s*@z!Jw0CM}Ig*!`r#&qSK<(K7X8)qZ(azxTEdv=xY-D6a0)~0<7}k!o5UF0?vj7 z6b|o790M!uPp&69u{%Gy1vdyNC>CA@{EQdD{Hay23y}Wxx!j5UPy!w}?--1MjlJ`q z3Cy3EJP1+v+s7O0V^Fx;elOP2`z;2L-;!>}hD${c`3jG7)$vhmAQR57$Ud%a`5F4q zn`ArUM+LH_XYWXwU-W&s8qKK?82jTcSHOTqqR$WbyRnfpC3I4QL)G2gtq(wE=j6%i zs8&}Q_tV0mkr9=+*9+d=3-kEys5Te5U}-Nr;z>|1rMjc?-&jxp)f!2`RH-&B9K49YX}b9L68+9Wwd;P00Pi};iMNi zN8|@k^ZB|u9=GFO4V}AriD^VUn;cj8zC{c4`wblo$r}N2$H?IjP7rD2r~^I*Za~(f z62+n3Y{A9-eca*tlX~ejWAI4ufFmGCT86If=k?p;sJLb_&hm*UHcesv#6vegxB7ImK?Em#=4tM?JpuoWqjLhR!zh7`D8$C=U!hNMkKwXE-la8C^v-`gQssN->yx##@D;wg; zh$e<$^!0Mj0>mgfb$(5}TOU~?@2>T0fvh|@G5L*nrK}Zqj_1XQ+Ab_Q z{q(X3|Jj8~07CE+yRxIM-BkQo&G;C^WscO^A9U)IykUF$_?lqSJ9mM3oG;^`tx%uZ?|85%+~We|UW@vA=)@ReoGn+cu9m9A(oRlAaC*Mm&=r77U=ge;LV%{NZ8pC_8Bv1L8nq(d#-2~ z#d|XSDUblFP^>~X)IeYOO}1}8#)@|uWTH|AiKt|;#5Y~K{Ab)mR>kAXP(dv0*nB#H zAIGRxTWsUQd#Uwm^l__FFv7hS z*%=T}fi&)V=C)6q`ohK&#>_W6W;IZPNUICrjLy~(2!v4Q?0<})iB z(EHUJAP`t%nIzi6ug<3X$G#ZNN=yqT5FnzU=n(iBiILfi((fV+LEdY}(sq7~_hv*( zw5}1Hta-Uw`tOKn<teKUz?{=X>yU zho4%T+Sb?lOEFqV$>RqfE#OanR`Rqo6-b1Mjm;EfXkhV?>@k`?@zD6EZAxx6I_@{} z_`qz*K2XTvnxss>t5pR^d(x|#B|Q=FVV**Y%`Epq@UJr0NL{%?)6A7dSALHd`W7)L z94agnLU*(^Cc2ldC7Cr3Tb)wTlo1&$!QEt8uJ54-1%y?|=45ay8-(&1BvA@n-H8fC zznamKZj$9N>Li7Nwn{z#NPB=hV9U*tNr+PSluR_6Q5#OcP0oh2O`gx^a|M`#_sqL3 zVImwB{@e%$1fn4ljtaz1ShB*IwLMP^-OZ&49l4{iv}7}*H(luQxq^Nl=gZvBAd0Q& zI&WQFxgP&*YM&6e=(?Fk7Q2KS5^@@m&APvaxF7s!P7*$EBM~Db2Sf*-O#!$u^U~lO z2vqhTCK3OgcqXJH$@!nAwkypZkPgWx z&!W;kHR2oHY*;Q`;u*F2a;e8@1q7um!AV=_xWXtvv9tdU`Qc_5_Iw`K$B*Hp(%0!I z8Ld)WwXoMiD>)4OTH3Q6E*&lzp%XIGXm~RHgltKQ7Vd!slK!MBLB;>@+abe+0||FWce zUqF&rg(hPc#VLjt_oI19TkA#0g>vQ;Z9%~8Dn&P<7yFc$=I@v0fnHj$WxyV*DeZr* z`VOzS9ve=&ukV@=MRK2`W)+W#l4Gs5NYm}C4I#jQC?l$X6oEEqV^RRd>tyds z+`Ts$x({qGS=Dba3(*1K>Tjd-{eYu;>QwnK758WBlm_ieL(ZY3$*_9#NMe*tcz#le zCSIQI-ILvflEt}OllDTivjU?API;mh6Gj<6@&|<&CMwq=(+?CK&u6{Tls^ODa1E{Q zR@U$NZu_wV)x{#CasG>EeUCsVCVHO&m;Jf#^G|qOMlc}?4$Hwn>Q)LdgoaQ~XEWS$ zL@TepmYVS4nmNxk`s*Yrv2qpgium`1|8iQsO~wnkG8o*X1~;N>BS>)(^!5-$U4@(b z)RP2@PN~vrmPngbQY^+Jq0E3vZ2$7H+tURFcQ*2%lXmqin!LT!HBAft! zl+mOS!8)LlQ}11RXmb7v3QeIVE^4>wswBa zY5mj^5yLl<^8S0Yyu|lGw)K8MahEPj>J*fcVBzrWjJ{s@2~2b>*-N0#L>e7_|I0=U zKj28oRMH2>pvB><)QyZ=oq}4V=B3$($p{@l$}FM^BqHb{^FmdmVJoDpO%0gTcC6@@ zL_6EfAVr@cc{Ys{wOmf&Q)TZ093ssMJI zq;Gv(*a%9{8?`^Q*rtz=FJ5wp#I_xv{r#zY&cD>z{OSoteSf0SNr$3*EQQZ8;9w(^ z-X;9>AR1_TqhcCld1BxD`o(hT)VgI`fRswQaU#xRDZ|?T47=wv%rmKsPnTqMB+`ej z?1_P~|0&d-o#fMI@7`?da%3+gU5Duh#HJWM(6jKaKC3ICg_u#xAa~lj#|Qx!3^Il3 zPWOy4?okTMB5Ahlz`in3(C(aO=*oNGxV-yN=j8#hYS&4s*J6^Rq2*K#Z&Dya3xT2x za#B~D!de}hB?dZgxof^hU0xP~K!_)`+c1b#%#HiW zR$~c20yrOLdAjt&#9j z89+@aq7Em2ztsARUkp-{w}TZ}WnYGcM}wpMWzvFQ^xS&NTLyB=l)ujG4^G=$KK{t< z(O`o!l@A8Beg77^v%(*=;(NlsaT+JO&SVGv+8Bd_sttV3e|w@XVQrAN|4bS9xaHYz zQ;%In({O}^V~t_?llR!z<4y*jy6q+4&wYv`A6CH2jDRhaNA0^j!vpa+>d*zN9#JY| zski>3WWM*=+oHP-HUw2Og%3of`&S2XiLe#b$|J-rZZB8=TW~v$fcR;!RM&s2D}$NX zv5eJrZqJtYgR5h-Y^m9BVY}7;B;gS@%t3c!FGb*kO!Rk`0n~6wX`3IPe;0Ao(?$19 zur(ajf~=xzy!~ZPes6fE`K^iS@zdq|`@;H3ujng;Pbq}2+@6pG=kf>H_S_Bg2SmW~ zFVBj*=^-D(;^o)^}QqyLhTu5_91dA8_x-KuA89B`Tg6p{0ur5AQ_@t0P>sE}B794E1)^bbC4J!o-oN(!|2LY$+5^8s^4{0wq0Sx% zmi^A31iqO0)RD0KpWc7A;~@%!%AAFus*0qJrdcWB?O^)vYF+#Ifk|shbY6Ij){6B} zy`4TehQ;>(j8eAx&E2kYdP0dYIUCD@uR&lF%kl3B&Aks339MI38@~9@!^XXr4>KnW z!2I0lyoauX!kZ~^YD^3U9VLeqMmlLM(c9^+AaUgXhGvI>(`5bte4yNT&6~E zkm~iy^Va1^fyi|=)%OOU?L_0 z{&US9G$CO=fO~y6824JA`wIT)zvadnWtfJV^l5HuB-WOzCK@u z%6D5LE(k$6g9#fQoze17p9`*l8|!V+b^ooMWYZQu|SO2>IsZ8cFJq)>7@YOvY%D^vv>*qheV46g= zbSuAgQG6o1hzaK5=1vJ6Bj0$Gyn9|(*Px; zP4SDn%W4h>2>!$K5bh)&kvy~-XuX2AcB!#vk!yVMef098An(3vclPYPE~^*r-)PtJ zp51dhCZS>}{V2i}zw@+!^~S)^HCS$y^UC>{NaP$-XE2T2)uG z_)HdX*lP+7+(CElXzO->^0e+AjnosPAMa*ck9u!BA1J+eeTO<@#$Q=6qiO!*&M--; z05zBvOtUF}bHWcek5t=Af^HW>!-X5wjP$-YG#XH-kj zQo-{X1Mmp(8Km{g;vT=S7P4tKi9a%~TRsqk6r)f<{$}WSt6Z&I$3*4Mww;>RH%tW_ zA+N+8u-*S0k6N_wAOcdwgmOKuZVq%?kk$$;+Af=#?&WGNX4_bGzxEp7+ zjQkFZe!Pc6$msw`xDGEkh=h&xCz%Ok?)|W?lHp*}Do}>4FaxykN90^zkk`P*ozc~W z-V(LnZ<({Sd=JHyGLDMW#^l2c*@7dx+th#gZjq3$3qgM%P+<;t)u8Jea*{2l&Z065 z5y{}&TSWYN(=M{#4?LqH4S`6|1Lq!6(Uvpr;)gLShIc>~hP+2unk2mEahS8Hu#k4I zad2=@e?~5R*99NLVS+SpJ}SRQ_Oa;K`Y`F6!b{u65q&Q-X=6!{x`W3xxhOFzf-qP` z4hs~YXifj8Z$q?Y1@doMyu+*ZDebNAxp$MvQzRtkCjqkIpGl=&d|-V4dZ6>tYFO6} zwr|zjuRW$B8w&qW-f7|F1?u&MZn2~0=g1(0jmrydZ==hOm!_%mXHl=Di+hu+uf({V z>NK+vgd?BfX^gZmJ+wW?8l#k zN9%bnNai+VL`+sMAU(tt$(L8gUTZSzPk+2p0h#8fpRKIIr{DG5g8w#t{!QjQ7>U{O zARsy#W{2j$f?(CmkaYtJ1^OY6VN$;&7+;>%qDfZ;4?QlX0|$K+~we>gCqfn?5$W%qMc*90T9;23RaD8riU_DnkEFdc;NAO|aeMKj z&N{<~liJ%r5_0mmUaMU2yut3QmYNQgoSs!K%sKj8Va3zHFs1`nWZ+YpJ8M**fDngHGf1G`0H)ee0)-w=2Jw?j1iSgy?pNoSfX%*qD5c*n8>S&)UMC zrzrJ}wlj48L%4D@!6=Kj@bV1FsLsO^Ct307gJ&KqnFGYl8l}blwPZ@hoTog zYF$5OY;neOkyOh1%7{VU4pPwRXeF<`v~L;|C1VjfNK`)4*~fJ?9VROtT1>;pc8n{T z{CWP}_n5ItWE6utbY9{e1J8XK7k3Zw7l)D8%y+^c2=OF$b?SX}^v|VjLeR#mvyfO2 z9jajQd-(V`#t|bHa+-uye}6Vz zGb^SREa*3SMu7id|G9dIKcnRxEKawNV*UuZKFIZ=61rcs%vdOBOg5v=3pI`H z>m%S`)78pckG;fcu^E|9Vb3c>pCn*2cD0^6?5SF-eJ5(#N)UV1SO&s_22!dG8QwcF zG8eN@L|nTNjFuz~nuJwwU60{o8(zGuuT0-xodr_Xw^!N6y(4f#k`TKs#O^;u;CqF` z8xbxNB4?mb_AHrb*HX)zR&ky@|6M`HaL=!&yXI8u^gc15NVVm3jfGG(-N`jwIol6I zkEsi>aNF}NvH9@(#Vh&phn}eP+(&y)$1PZhIKnGY=$QHTk5`YDpIQH36Rw8JB9Qv5 zU&aF>F~a_~aQa+|3`V;!PSg!7@lb`H}^ zrxeu_#uo*uSw!gfG`!=>#rDsey>{XPpKyEEoXB4j8S84%&g->31s$VS{{1WNiu`GT z4u4{%H5HL@461N7kKr=-amGEV#N_@J1WW!*|8(~Ks-QtAvZ1FdbF~ZS_Nh9pmfmpO zi57qDgNvLiSkpT?H|W=I>@|mgExr8vs;+agq!?Pa0aT`4zC!r_JYl14ut*I}j!DGu z{C$<|q;uh&FxA5sH*>=FdPUxR9=4U-*5@j$cN(3B=qla*c*Q#&Z&a-OqSAPb*~U{B zAfK_(m+KzWPaExb_JOTi-1hTqXWTH%M`xYD>Kxj+$U{`5f`=yPC&-n_7?3uW_d-%f zfoSEF(UHJQ= z^p5gz$LnqSf=DD5T6eSmdq**RKPbG8jjO@#U;vGF03p-ANZvh|VXvO(Xi(nLSjs4c^nD3E(CWXx`%)XwGV7&t3B78N=o$p&hEIC03>!x^ zW?^;(Jw0<8_69vZlnRm0x9w(S385wce-HcWqZ4z4XCp7p0#WXSM|*7GaIS=n;L)hD zoxA~A9_Diy+WH?+$rdJ$EzVfkX})|i5jmSI5otQA7oev2_&w1cwPJFD-qG$_>MUhf!Wy7r)jiFwbh-7ir-MsXhe1!4(cA;?N5$_cO zIhBjOi+N@6ObRPHY0bp3**k)^W})z3lu2ua7$%UP>75dsIH#RMB`o#h+#Dw!ZFUcg zFO8=DZOmB}Id$yZ{mCFKltm9s8Ui97kpb!sWhMS|pVKK07AF-$AYF!$0U1elRnqt` z$XLK1G}Lg)&gPD#Sw*iiKi#*ls4<63q3|kH%29vQb|nl$L-8-XH07AK;XmM%h8-q& zi;I`ZdHWwM3tv54JnAll9s@^*s+(vEu=r|?^uq&JacQlM1cFR%%8LZ#Q{t*%V#k_L zo{%4>(tWnZml52oJ1+8V)$$_XbiIwIR_!JRV-Ar|ovAKKSd(d^`>AvOg8GT~J?cUo z1p-VEz$|H-Mg#E965Ba&jMOgCo4L0ZR?hd1a6eS)ftFvL`d=vuz2qI@W_h@w{qK1l zDAscEpqwmzfHdh8o4S*CHyzIF6sLGh{^Cuz#@#xek6hVhA6YO+ozmeLE_`7?QD>L1 z>iSsMd`9BOjI-|{|JnEPG6x>>_j;MPTfD!~zbe+TQC@y_z}vonKHG0lP((kDsJkRs zFxBQ>LC6pbm-u|2MgYnD+g z_SDnOd#=d#F)4?9;mN{O%ar66gSG~Bb2t0zWl%&T@oSr37yOKGE%eruQ)fzmN3!I` zsoiKI3wp}rOsl%AVATr;&YFLN&spZEae1nvBOWR!xfe}Z+c_m$Im+-br_~m#Y#0NV zqD!j{t46K`%N#8j&%Dzm?ZI~TUEFB1u?&oHoBZG@^>su@q&UNP$+E5;QvUd7&MVa^ z815_5?34R|G7=vz+&~!R`{Zb(6L~21m8i!geXl(XT3|fnnf5xgUec^=u7|IzN)JL` zs+M@|oY-|7j`^`)Vh@>otq2$%1{P!VlxpZTYMyt*0`4MgPx5L2zI`J2%_C63#|UU(U*3@Op*&5FFm%`0x^H020Hh!@4%_mwBz=fn08Kot-W zp@?!MO594?*(tf%TZt@C^^Fyy@r+x2o~FL!eK3_m3rB`MPh6WuvW9*RLG(3q{*4Rr z6d(>xF>tJzP>8@2(VQwB*P7l7NI$j`KbGWxm(z-|L9lrWT2Q^iNpu3_0^h112nkf#+-gl9pgt&ZhRBfqS!#;JQm_1L{s zdm%3-cQ+Eb{>PAFhxssTK(m+&B^-NJeW0b zN%Bs6U#DM+@L`$-$2dhsdt;)eZlQ-q9#r!iMh7C?j?S{4&$x<(jhSb#nY`qxdQO-* z&QQ2O3>Vpp)uq31HA->#7`!rAO4iA{7ewNw+r}2hNT4IN8;2ENI4kfQz9Qf>-V(+N z^;JgxM3_4dzN9m;n?#s*+X>*bDS<$Bj8%B)BB`iR4- zYM0lHy_~RO>A>iNtms_CO&3S^vBP^KIpD5X&ng6-+PuzZJWlx4-)g*0djIEFk!dQ=!$?Y5uNA`>$*v1UITl;} z{E>T36EAo*#s%cDL_8$ijW2L1X{zou>R0xpSU5Ivm1%VD5+e@YE-rd-s*;qazkg+K z&l}34sf-3H5qN}K^{MABDhw3RGoc9?@TNT!`B{MfV(n0D_pF-)G6mQR61DGUz74O8 zwuBu65QueeF}YsTe4>y?uTx&{v&Al|#9td4%@=$Z2qdDUIul?4k@GO;VA?iL zMB5SG-$fQ%=^NXDIJmh?yzyxF@h`=dwF^O8jq+y7$pnwTQ3*(~v+2vZpO{@9dr9I< zdQ*b%0*oVW31`=}4E%L77KT#C?$EhO3~>>U$Nq75OGOztM*80fbu50-JC9*eTnPz}w(Lx;US72T zDRTRY6(iPp&`K=zh$g09vpwWzDc3E?sMdiurGpL0DS*{#!6n!e|@-|G1c5U<3GI#{S1i&=r4vV{3u~*qsJ1NJ?)A z<$9A_$H)L|?X70entA?U(Eeop78Uf8SBe~|wrw?#D)y=__&6p&p8L&^hf30t!UMH_ zys>sue^RIOfusA(zCft&o}XB^<(v>p@8MI32&xzxFpRpsDrq?GLt^vj3{#!hMtPYQ zQR?wnrwk$M?YWj-CNN$L3(tC+x_GBJJX7!?nfd{Ul7WGn!5;m*8OPw0RHlo*DtqeYn@i)8k_ICtPOLwCyeC@j( zoEfjJ$Ot(-fPPIVD{TW@v33qf3G6I7d;cOG#fWx=x zr*>+s15EQrA!kEyn%7=FXKOqs#Y-nd!@5QjKL{RUzliRguDy@OIQ}<%TVK`AT{Jcw zk=-}wR;+%aVIKU8b0q55!&`X0leFGYqP( z>P37h+y$ebg)r$pQup3Vveu6lO#S#X*w?OS$1@bjmp?RQD~|Ke2pfxR(kX|DNRhR{ zsx#n@^0APK3f?973>l!2PWwJhIs4?^qPju*;EZa`{B>04z*|_h)u-Z9#QM00bxNp$ zxR>Oi+oivz&hO=bNmN>sEb8(?NBuK&2|#k~ z#>kWraV&08?Xfhz%f8aE19SV`e;Whdx9a*L%?Ep&vIW{87M?(_=>f=#fdHKOL_S{4 zyeK?{@M|yu7S?)buBO$$^Mv`RI{&0z8;7I~T9J;k37$~Y@oH*vLR;rR)>aplU1+*-Bz#?QT~!G}mG2HJn?7na1BF zusc*Sx*lI|rxd_UtW?-nkWjLU$DQtZIA7HQuhdd~-iCIu+>G7_#}`HzZP9eljI*T{-xLaCCsMgpS$;jxeJWtK`rvV_5{!C8gqLlGBVs(9QBCa7mBg8H!&9a znOmI-S4PCw*vA@*e~UO=5FHlN&g~*%y=x1p@d;9hZmf5|ihIFC?oyYhcLy?Le&C zk7$cVR0KNSAipUfXOMz1w}7&Y}e00XcZ zzM|r|hGtn%mkgK%RQ{cg7GqIRMXAlVxYCcqL5^X40*>+;?i>!}zmnnGmS@x+(bl|#c;|GC#|XL0N1ZqL)0CM3NS{816QtW5eLHg72MU++d` z>QT%}#0U)n1PzHO;555J;TWr@AJ3O!N{*{$k+@q0$n($5XkD`-lgZrbIt17xs3Xy( z8!>H3zQ0rVhmTF#Tll=72VBsA6|mIlpnFyQ)1K6$DUPbDK9ixwG9#vWVk z-N7AADq@p?S`CN?By;dZ?!u++Z-sY92>A!l*cwO=2Q=BcGv>m^ae8Me>zL-772gwL zQE-p_8CFggmUQO7Shote9KC1>ayjt&Ms)=X%*|!!v_GYXJXd^zc6;*c{#cXFT7~jH z^aeh|*^iDTPV~E-_Y^rXnN|et;Tl!C6is-e8~$=vVyPl%wE~E~@Pmu-7;7VaM23#Y zX;nYOM2R%qG5!>M&X#1EuAF2igL8A5z1!sug?r29RIvTgbw7~EgQAf~-< zz}qn4o_}B3RdVgCCKTC9;WgNrYo!9TbtouFG4BKKGCA8W+P57auN>{!l&&Q!saU%- zWs~+oW52>jOTHku+cqwLDvJr*e#Iep@vXt`s7o$7b~QvPAbzDBmW*xDA7B^_4A?+R z2JaXWV%Kh>=Pk+&*LBw; zgY`97N>X-TA%Yp1p~5Wa$k$-ZUq^Sr*dWON)brwOBS^G;e?5O$>`S#xpy0eY-i`XO zl77wLXw1rZ+?rtxVBYyV(* zK8QAs@DCjg^k9f{mgcA)3XplD^k*}z_Kl~T5}}3m+gs|itL9|5U@K+qB2DX1XX20@ zGinO0d^k@YdF1%}fh71dy<}^BFXd;-hOe-CIHs2-R*9bniY_UAA<1+~#)xuMB17+b zy=pp!pIVhR!a2L{dzZ<*99=Xp6(asx)g#4B8#GouAI7qtTv6J;CYe5%Kde%}=Gn{eQBl7x(Z6^*gV$>b_8ZJwLH3(Hl zz~1lsUg##~;YshC1^V2ILlp{E#EQy9uh;g(_VFOta5s(r`$f;mb?fGe?rWmwdIiNn zgGOL{iL&yLc|(%oSB6q~?=oMK)CKRx>#k20-@``5z1vgs@Th^Gps}4lYEt2DFM02m zwkB9R;FY}MB}0M@(H+PTq}iB4Q|HulqA)P7p4~isJ#{iq|0r_q?Md9WWg%uhM{c6< zBkJlWmjA8qY+PSnu;sT^&S}kTjH-23vH_{=N(sTH zF$w`&ZbsYaO5oz-&b-Z@*ki-S>v!8#?E9XQCF{-$8q=%q>ZWu*=@{`)zz^EPvg(t0 zN(hHL-|!e&45?pgJ~g9-9-4g^ju`$KR>kXB_CG9Lby$<%-=<@943HQNqeGBzbc~kR z7$6-A2uKUal2QC*e>EHp51Bj&~*pDnN_5I zXx`Obk_HSk_a)kjp(>45f%7C^3AY=> zDDOUd2GZ;-{?JE14(9j@vA<8q<@1_a*{!0Y)->GD=Om{tN4OX)%y=AZY)X@;&y3>H z&4QZV@>P{+trjO&K1BY=R4M3~x6c=8O0uzZJPIvspQ*c^$FX7vFgXiWQhe4QPj}5e zG7`ri(DFPVnGz$7T`iOt%Dz8OlG7Pmrk;E_7dQ5}-JSoxXKRM*jhXR)vQ`d#1x-_s}9%weu3{?Aq<6($57%a&M}JY-Qf>;l1@WMu=;y`PPX zt|$~IKm8NgI9tE|@j|4^!V|KT+YC-&km~cKha<1+;5wE|90c3;KPIBf3Xb6XdVhY0 zpKWaffRl`X0HIBn^1(EnK{ecq0iqq&N2L92hOs5tn`ZfKjn1mcve4>Bnq7S4qw-r) zH2sdCoeN#Y-*KZk7nxf>9%Ya$($bqp)AJX%>@(33Zo7u{fic0Iec|F*g|C#52S-nV>SaX zB9L-bb|FZxo-V=)NekeY&S@S#&ADp?T88R+jUcr~n<%{Mz|ZmrDt?{(9`=3~47pX) zZ;1^LsyR803HO`fG3@K+Y~0VA=2CLn!BhO$NsCA1L4wC8m%~d#3+P$jisl;!6F>{F zThdOGW13!%;2c`#|Khxbm5K*{YdD)^G@s{Pzwey2_ z3mmn3M1NrPLmYXF%P6>uXg%H#;zk2Iv1W4qy zSb6d6x+?(`Wb|_R#u*MxN(a8N4fqMra8axcQJ-sA!^1pVv z8gTy{HEv_P+udmFTRTvFqIaBnAzK--qnP=Sx_W6@=GLL!71uWkz$VfElcGKrI z-+z!yu5G1k$3JXXCi(!pwcEA zO@w(8El-yGdI;ZNvOcdwl`-?>@RL^eqe`?$Wx5BCL+jqlccF0?BX&MK$@J8hva2qA zrrIxcgZx)VG8P?!2T|eizLOLF97zJ7HiJaLwNomA&B>jKY1`cii&mmV;|U4yHv)`` z{Ha@B*r1<|9-!dC{_~pG=h>xt zdHdMN{;9lnW7JH1_L1~Cyh}p-H>i^I?}Gfn`@C5nlMt78KlL+)nSWq{X;Zb`=5c?WLt7)<3z9sHZ5;B0avJ z+5Thz<+e~lORvz**MiY(@t51c_zsrdzbHK%%seyjcZuJeV_G?;8U0v{i3h&X8D<(# z@sM6(<%NXV{$-W9Z8*w}UjIc}NBLcea~c0ZGJbJo_vqv3Y>qi>R|Adkuzb=5S93kE zm)p6VLF{k$p|XCn)ru)XCrJdxn=N&qk5*Bk*IlV zzRQPeQF~C%eTM|D056n*KPr!Cltb5|elXqF2R8r~eaP|H9F`^ z@*C~+wqr(Z@?4%Rrj#|I+`dS#6G+&e%M8IJeaLC59qwPPEdA3%F8=U3?))(OuO!P>72d++z%k@$Ds2 zbI|e?QYv+dG<-nCD)~t+h58z2;P=U;A|B{HL#}s=T*wj=JewEn%Y+_^Y_BGsKI$NF zyD=$4XZ_e^6Oo>~uNwmnv?|l@7QA26QI$0=j0lBHsmy=gdtcWISf=y3-q)CEzUw;p zF3%KMLajfH{CU4??4IhO(%NVC%g_P8?W@||)(ua@2HG`sRvQ+1L-cpe5eE4JY zbd}n!+3x-Hx9{e+_eXxuf2`}8ZAVTU{^bOfr9Kb5J=#9Ze~9?~Lom1xSCdQ7`e$SozgY zM)%J|=!|Y4!SveD>E6Aw@Vu+~(o%I3WWDD^_jZ8u6sbz8OWsTKl&j_A2l^kBO}lFw zl|^T-sva7DP_BOU%lQod2hFcP2(FvAoxQ>}#n0s%sr1+ID%RghA`xcHsg8$~Flh+8-}eMS z)x=KQ&68+!(A)sa(>Cou8pR`BSfTN$8@bRD9*OPlq-(u&!i=YV)w{wA2+75;Z;-IG z^$IewFP@&dSAw(LIWGivbS-|xnv}PQ(f85`QfaSTwtX>!ZN(pj7zqb)1;4d`CYG|9 zNy%ne{;jSlfe(CwKg(EI+SFNymoxx6WBdM4tx)6>_0jXHH-Ue@DYyi9Zgv-^x&DYT zv1PogXZ4&6+`Y_SzaTXbv%e-*)#R*&93%dj5NJe@a8H`r;b`kY>7&m-x4apH==Ba)F(zZJ4X+@`xcm5ZMb>}y$Ijfb%B}ElU-0~Rrt*?575+5$Y{Xr|x+J($dMH}r{2(%$IXHdleVE1kKx0uB5=p7P|FZg^H7qr;H)e?7ZEua1w z-btDoGZZ=*^)63OW?d9uHWukLdu*Y@o|FIv$Tqox-+^lJj(n~MwUBl=IT?SEf zY43&d;|~Mh1Ni3T6=1Glp-E%V@FHSGSgc@6?YiJ4IiD!#&bu+8+|EEH$3ya*S0>5- zl2h_i*gmJYCV|crP0Gb$a zv7*$6c1!w_2aN1xjnkvmH151>FTGE$>k~Rj(DbbBar!y_MGcIpC~xNMjhE`Dm9BZ- zxvDG@i!KLZ=J9ennk*b^SGobVAxqAo7N*Ck%dHdsLppvEVFVtp108hRSq1Ee@RLK8 z_+_F{M#0OpD|C@1m2o^0t#L@dATAggjX~N%sk<~VF8!+T^ZZbME(xs+Cm~MmW(8Ri z|9(I#l-vG*9RD=$Z}_s(xR_kRYk4K6yh>baf@+o1{=R;=y(w9kw8onj9d`?WYboKO zn|J*vj@TDT)vm?ZqUJ9K@qRa@6ZBM*QBawus4D@bSm%|tEqtA=C+!hj5>+Q(cyA|< z01+=JTvgx^yg?y&f{8IF;yq|Qi6X+3G89$BBIQP&pkR<{H=%2UG|w zqL3=C!}K5XJ|JZ+{zbL~pgTgz4HWF}1Gsz|)W0nchjpaC@XD}8yDFkAqk%4YO-3!v zH(67v!bW?E3=H=-9?>R7aj|L+R+V)q;@n2CBt4t$%G8;ZT7XcRVxs65Y@{;Fv($mw zrnS#V`a{}##Rinl34L^PKOBX6jSs#%yaC5)ox`hx9AWc%{&rd-4H*Op#n&SzCFn?# zbG4rq2?Ht%v`k&UV{N%N_?iE1?PXFN;o4&!ceq`Fe`pj>3Yy6Db$)VRtE`q%#_Tb=UEyaOy5w=hN2-E{uj zsrfQ#)laEMtU}UGdi}m)?FMA4YrPF|{9O1t)!`$K@#gmH5&Z?kgZZDO$El!1`F-%M z$&BBB|8^5!Q*QPxALC|ziT5M&vszR45?XfF>2y+>cho^OSeYgZFf+KewCiTkBN)7x6~2{ zI2APBQNxuqWd1?3MqikHnv8~|Ig>vppcZYZ*CKkGC8ax+&}J=n`;hD(wAR|fUq3v{ zlykMatdG=c>+?yXtJj@1rsnWu+Vs*3tTO%m!5*n824X(B=y(i#q$B?4+{7|NI@{Oo zY|eq40e(YRPAw@p5e+YPfX%K^6q*3oS4zbX9(87~N((nC4tMg$m9Ee+4UAwS#kBSl zL~2x#v}R}A1%Bg4Y8OsVUlD)fVEGQy|EqOoV((L-MqfqqzACl)c}M9fmq?0E+gm+f zyMY5yIiIKG2Q}Lb!2Q#?e$*nuf!G#@g>yL&<-T=jH=LwjR`tANsF?kcj(`Ou(J!3&;g6LLNhq*k>DjpyuH6YK2kEC~t?|+WlJQMqa`)j52rpWL5!qoZKdN9r( zJCPYy-TG^s-}r7D*l@+YOU2Eg{M3(8$FC|kwz7-W{H!I(A1xUn&S63e3!W_;;>2}t=X=as3eErK5xBmc1 zNffR-lwOJ*@CO=2k=wb8qrP+M%9c(Bh-dlgt$Jd7a!WG-=>l=z>)b5mGbfCq=mmY{ zFyd{EdY+k$SikAmw!5Bo(vsA!y(U-JpP_d95r3jO5SuM%$z7pUlXLhx4;CTXi#WAg z(qBpDT(fe4)20^EhEw0l8g*mgJw*}Fk?81C8w*GMxpf8lpwfkBjSs1&*G49t-@RzL zoC^1&>E%T3Fduo}LEh)c4Udu^lT+lb^#kEpeXRwMoUoy~$l(`MK>Wjf3h9Ick)b=h z`8&Mgw?_{-0QQxICS=t3^!L2&v#|cTm1NG8sX_0FXhi?03D%B<;B)DO>6a0u#my}h5UTi! zr$@u=yA3f7HGjc4i{MXk-Dn4S!OvO4rJaq&(IJ-BXQFv8xvsYJm`hf|gZr5}=uYCG zUBaV!dUJ`_vwcB?$uHs#M3%C%2j%+N)u7cFk%MPPq*PkA4v&0AHi46(0W(IcoM_s+ zxaaxiEW57pxQrnCDV;FIA+?L#H`yD=J3K#%U$2T(WspjW*5T33-^yU_ng=fmu-D-m z(mYjbYrFM+t6@sL9l5d6Ak6Dn?=vRt*;4h0YA~(oGEPw8=>9y>nF)nK_IG76yQ33{ z!db%8f5oQ!T|ePn!ZpsJeNG1=Us<(|g*$xAs_r@a<@`y97TziRdbNQuHN47C;$hCV zoA#mWZuv=X0P@;0oIQ@13W2O@U+-R`j; z-Oo`RfuQC%h9q)@+lhxvkeH25d;9kHDsVz@J9*Zy4zt~qTzN)OFDf#PS3N4-=XtbY z?e-}h_k&`%(32ywe}5o9d1TWXiGsijj%AEGDZ9cnBwC|^A~iG<+21T@Yx$9G zUUo5eEX0k|;f3R3GUvR)b7`nKYsPg#4UOo4UcWr_(f6|f=MbvPojS=j;emgU3q2_P;5n83Ku`D4ep3dvO$gTo2TK34=RSJ;F22C|&0zRN z={461FkGy}rK{X0)d;8qMT;)p62|^#hL;0D2g?LSZm?42ZMo!Ja6)x^cRtaW0;B1m zqJlHsU;g+=FX8xc;39%rA4EA7o6XmFwz0r?oGZXz|`>X zfm_W2qSte~(eXeeWPbIa29#*fhTFCujl;R@cP#!ohnkFcVLOB#pGkF|n931pfLxs| zO3@!ifF^1hgei;=#D!rvf00QmEf)Y(ZlyBJ*?X5EeI>Xt+dkuSpTD4 zhkImI;?dv(CnGye>r;T1%8mPqzB8@f^td|YHE-1#KPWcdhMH$0Z{oCUO)9-J*&^7m zinbbbz8%Qir+1zGU5VxHeDrhN)|mvQ>L#sdB~8a~CLX@lB) zu2C?r*`;3hC}E8w{dxol5Y)B@Uz3!1i9GVQYxha(5+fSJm%&LEeT{Z`124$;{W@mW z-r77ai5IIEz;^_mPM7qN-RR+sg5B!X7Pmnw&>~a4t$NtVrP`&|$-9d)PSuhni$LFx zO&sJD;aqKXnr9O`YzqE%!3qZ=A4{*R;giS~hU~+L{Zw($lEBtY`w1qvb8}-ve0-{b zuR|!6i=zX8y^2U1B)>HlOC~h?^Fa)0KAGp=kaS}l)TFLr2#Lx(oT%CzVPWOJu6Z^+ z*pXkO5tP))>+?EIm8O(}SMU5o+pc}FGHmcc>9vm&xEIM^O*8%SgC0SVYb3|3AnNE# zLP~3k((J%iJ-n)70UaAokxUD4OASB0yz{i$dMGW$vqkv5b5z?=uFW9xa=KpNS0B58 zrspAWggLPb{VfO|(v@m^sx0$!?(OW@EzzB{55?)nCnhv8fJ=rzN77qPpPCO5XV$UOA6qx!zj|F#!N-1?cYzb(#@&X}=KGD`aik0@bE7FLI!E5lS=lp%;VKuwDw zXkERmbXTuNmGTV?D4aG(u;J6&a;Ub(z^kcpEQsZ0rnUBwJaagS@dqA=m>_$gOq3n~ ze9bsnm~e3}0%j7Wl`^SA{6$Ix>-wXOaHS#6KMWFIHSSbmks$2Hfzshw2iH4)M5P(H z3fUKee_8l{7Dt$)JliELKl+v3HPrl$9DL){P@VR&WK@dAAfw!*SY&jfz0pF27OlJ; zr~oSN7+d2AJ`h1G_ir)k+n@DqaZuL2VrEKz_F+aQ>M8f6s$;P|I}5Xu5Yq>~l=!iP zd*zOzJ}cU~@ymQ_=^T$)?o=K1A7{t0^l9h_B8sdIbYR zYQQ*1AK#yB?hFN$K%brIlu$Ntawl}_#p7mvX0Ja3&wsg?Tf3>5P6R~jVamK;7DBob z(RX+tzs$0Z^hVV={?_KdD8WjaeQWpjT0-vU^e&+7!01VSahd|s)cK|LwnpJW6`T|) z8*_GbS}`?|mPP?Yni$Bt6YjPs>@e=h&g$-c^h+BoRSDx-4X`i-(i1;2m0~WjS9GW| zq@f9MdF$O<9!@IkXBP$?MAt^Rbb_B><1Fij0)2@GdY(GIfZRkkPNM}eQ&3SsdR@BK zvH+7><*5`fS`m^>h?$!o;WufP)-b;Jijl$X{!kP!FnU=5&VJQIx{^slVxB{xFFQMP z%qx=g)zpsrtN5VZjd% z;;N4>rFsNGLCm(NuVj8EWn<@#U-lxZQ(+oHRmczT)*J?~d~W(R$Bz88s|O+-(xZM( zXWVP02tPZo%OYH*Q964cw8Ye2w@E%@MdU}!lB*uhxZ#^sk6EDoricCtkR+C0b&_39 z8?DduI9J^lbC@~*;D2p(HOHU@k{7Jn4{3fbnZr1>pHHf~wS7gp9KYKBS~mTGM*9(7#;32yX}O;ofxRa- zl9JH`CjNA_{PD)qRmNt$a&S*(LC+@|FA`86-VW69lPs8pzZ8Kd&wz75eUZe=W=HmF zE*=gzbM2_}T?Lf^aYLncp^wvp&*hnu$0_}&i656J?}-v&hV5E#^Di8Q5vi1Wb+mVr z&{?F|V8c_Ls!o$#Ux)KX=7rL8zDHdZmdhj3GHIOl_Lt(db91xRb8}c`T;EqI| zWVw&&L>s1D(q1sim~tv8a7+1zj#XmNYp(CY@4R|2znpy6&giDvIBfr&BU> zAb+Kc?C)t=Db` zcr)`!xW+i#ILO-ntUc)YGa?@sAj$zcYb)8!$`Xu?{Gwq%uvR4v4wT}O?)58IuI`#} z!6lW?GRZf)-J3n61={M`uEKWkDQkzK`3(=M;=2p;J*!(hmjW*M_(&H&h{`xKn^#jN z@P|jve5IfN1`zW#@d1&|KY?yp(m_^d1e@oQ?VfcvPV||p5UJwroeP()NbTB5`tD?PBuy^zr~UNBKhgAM%r{rZ?dp`66Ty!NL0V} z2?}bO_tEOedZU|unlyC1x2IzTqn>|GAT{!jRzFwAC$;$GV9qhoAfObDqLyY}4^NYK z8>e6HbrO;p9)BVZ(g?~W`nK!qB9v;``H$|9VWuE)@GWoL=RnX_J+Arz#?#Knr?_Bw zJ<$BtQ!7~BiaThfa%l7wZBbvuR?*dwm>3M#kgY9^f1h=~A=+1^B+RTt@2|4pT zSwdR{UWxi@>(KDO24b~JU<99@Ov_2evq1lfp}_R8CszqN*0RG9k}A>ejNt6)9)<`2Xz%nnJ%)*ToWiKgfXl zxz5&53wnK*4Yr4xiZebJmbW7zWjfI*{+GR7EJRrjt?Scv+_1Z)TKrhN)!#-BG455+ z#=&-qlk?UP&tLc7{h~V5UFaKK45yNQ+1-fYQRe7sRld1HEuc0#@U=&{^G>pCv~ZJaSoeWyn?_)iwWa7IQ_9{ zy*2an%7}2tO*zAo+k2lW5y24WKlrP^G*I%Zkxg zYkzSJkd~2#2a*qG$(n>m##1{4WY-1Q3?Fg%^!5{htdEaon3l35p+MOPnT_6k#b<$#|x|^#ghK@nY9KSH zi8Z8tkt zJuK@V9%K7|UJj@BYk;3Nx$kyK=@MeQ&~4r{g+MXznD4akc^@TwGB;9=LnXt(AvuD< zT#WEmJer2NI!2l*d{8u6wD`M%(7%hlr}<9#K6@gNi7m$SW7<$lp|cg&saRfuzC``3 zq2X{TNf@?-?n5j6G<0N)zgsHb{|F-PIav|JO!4dm4lh%wtoW}m?7uZXR`^B{wuP^8 zcpyw&yQLPXgH&C$j{yk8d+O% zM6Q1m?3#bIlrC`=sg zA&9M4d|1MA0?B$|@!AOMWFvEX7kloGiuD36VOJPl?Dh%I!0g)b2MJXC7$y=H4HY^^ z2^^T{h95oqv{CA}&&-Y#@Ov6O+eSu}Hb2`%ThNythzP!SQX>DIrQv$?AT{6Toc?5Xp9Ah!- zm%2XbUq=3yvzQpHCkqxhDIIR#SCT3k|Jc>0?)3*%@JUKk7b(wrBqM_@DKh44EsN2m z(Pz(^iaju7BOT*EqvMn;ly{5!WIchDZDZEU2@4M(puL=bQt?J3FtRe_b$ykX*{u>W z)o>Y;iaNb~8f-HkorQT-WhxL}8fW*OQyd9YSKhlsnzDi_HG-xlJcOI>z6ri_`n;_B z^lAcw=QfKLCS2Sgj|ZIfhP-f|f_6a=AC!YOY?kJ&uQ%8AU*uhZL+(SP83_kg%xMbP zP~y0IZuG4!s^hy;(nADns|clD!i0|ZbQKA!SU$N zUvo3x%CiPP@8sQiDc$8FE~u}sqsd>X<4B*JE5E0;gzzJxUxBK=m}Fd~F_5=k6>bS- zl74Ew8vkTz_P^)*yWm>pzb&@EWK2Uh9#P@CF+D7*fH!I==|~bY$7B)PE#ZWXA3B;c zj!EDix^Ee#M!Ic_051=9(z8CvuzO$BM5E#?m_^!{;?bEhd5(kd$XN5_^{IC385~;aHYhgGZAIM3mj19&JN2;%Pk({`s=@2hHnri5e|dy%&qlLjGMg zO(7#rx?#TpfwE2XXGNiethKGeo&GN{9FHQlkbeSeWoQfi$ysu%DD9o(25utL+Vm*oeZX9%t#;d04`04KOEnFvh>x><+lZ!mYI_qdn_0n@e2CSJtVuP$ zV&M*#q%Jt;!3dPan3e}qyKj*il-NG00ea#e)~F_irAOXQ+w z(-|0~Sng@g@RGdn;eJ|cDpFE;Dk7Y%)9XNv3T_ux`_FVZj|2< zMZuqwpodgQu>L!6NZ!j=vS%yO%qadUng*-RZ#f6jh3m2@xY7%1%vpXoKaQ0B7)zP* zByvkqD=d5ipD(w62TVw4wte(0G4gP&CjTO>i2HNO5xW&nIu#vz-kPYjyQ$z_z-9J( zKmh|eD0dl2o;sH(o>1*FvD|2kY+HScyUHTig$co#*G7im?AAsGU1B2%O7?}ONShu! zXWz*C@98y05nIdM1cV~q4m$$ZMzPdP-2#>9h#az%b#^8Bn>L9!6PnW?J32_(D`Ina zP$Bif4BTI8;qNX=(g^OYX&hP$2~qX2D_A$ljihK{-8StWxq({pxh=KJ0zc zem2p08xDrU>mm1o>VE+myf?T)jHCuf0HvA5iPkL(ZP>e;(Zef}>}k^EVDB>r^7z<$ zXA|RN@dh?qiFg)52piyV;_&K{byoBZ2n;SRW*ijETkDJuNk@ zCYmrI4`QsQhM5^eVb&T|UUMAxD2$!OsV9Jeos)j0oB_Fu3ax*mw`RMP78V<5!kjJZqE@P(ZE1s&wylU05KnT#3C z+nK98c3L|2^cujR<*M6EwyhZ1S?#K)ROm%O!+SBG;#h5Q2q1g+4Te7;R8Wg~ryU;x z0i-t1lRstEvwTz5Rp9AzqTcTnNlt6Q0FL|>8}d3a4y&;{f_0hQl5vnU=3FDue-Y5@ zm&?@ClLXX>AL;0jccSvY#EtmzjU)ZB}{>i0p6py9o@0X7axgqnM*u5MGYA4VwR70Jt|VrfMm;aqFW zmCh#(OH6E=|IDyu_vj)b`BoFjh$QpJttzOeC&Ahx!Mv$j*Jig{SYAaql;z)gRgMR# zI%|K5c59ELx7etFe^fx->hcSEGMe{N(16kftCjW%*~>FiKvEqmueMK`^wDCxHS&?DNB^Ad2h1-7NG>=Y%cby zx1lUOF9ttQ4_8Ax)neaCyyFyGq_UsnJ-^eLBwZ`(G(fI@f>vEuf3)oOc=%s*0^sp< zrjHP)2c+y3nA+G8#Q<1`TPDjMX}WNs$Mrf}i|3MJ(B-fbhpyGc&c1q+n-Z@eXD(x@ z1G=ROubR<=TfpY*x*NY5n->4PtHh~?q!Qb1;eqhjm;hA_Rs(h2i(A1sWOLvCl_Dbj zD(>pl_Eanjgk~BVeiF8mVGfpEnf|t4@lb-xlQJ=nr zcx`xWosq!$>BAj75Dxhs(FR3}h*0MKK9{8ns~v2AD~zD8B9j2hS70MCyb5EcbtZW#&rBP0pRfEakKV_lb?HS3Q;psjZjgM{3hJL-_sWpo)-QuXeoJ~6 zlqg$23Urw+QTBiCXo+-%$1*}<8~5$)^Mz@pe%eojHHG}@)f7+ZazYi-HhteKLXgk^eNKR zPs4wN?4E93G~$82s)q!rOcYLr+^EgxyU z$TU$B<-7#%SL>k#JDTHQ=^uF@26l*zCuWQwm5!~q4n5XJB>uR$0%r2WrZ>Q)W|hxe zSRC_sdgP!=^1RPXY$kaM`WR<5)3GH8PLuY)mjAeP3!@QR|H7|+xpnw6FCgsgae_*b za9BPihp49O5ZOqiwv>GR!sjmeS&5|Z^*)X2qsPn;ZP@zJb)yAIrpV)r+<5@)hjdf&@cNIK@{14P;z zy zrNqfH?h9InHe|S^MiJ?hlR3sOx493^G&MY0FG@!BXR;?ST!}tTNdD#KeYD>y#s?J0 z{M1l0)JiXm35rL~6zI-$AzLj9^iT)+m zQX9l7+Ym#}{z;TtfdM$ID5r)-utr(l)f8Kz@|cu8`#y zJKg{WnQi%=t=y}m$%1nl8g@g`SM~xVW9?UAsmd%C9Dx3jS8LVJh_eAqia1OOcMTO# ze%+Qg<3uWgOzo9`q(on2S_%+)F9?PnpP!M-jeu@gRK582i~g48Fc z=4}aj-HcktXWzr%_wqvXt~Yw{Q4?`MJMZKOA8Gq z<=3KjJL*b@w3ZHy5NZUvCGdfU??RWj&@$4xmnL-`T!o7v*z8VM zYJUJKOgqIP$aHzZB|(!}{!w^T6^+$z;T9!{zbo2Ur((i0spgOGJ?N)ML;v*lxZ}mS zJ3cZzh$-((ISKg>ri43E_t^8Oqa7t}@=1%|Wi{+Sg~g_pEq6s@t-|5Z3iV?B2YY@o zX=H@dG^w3vQ(CaMO+1$amY0xu5QSHSb0WjIgvx_lAfTFN@%n!@GF_zV{Re+UfRW@h zD4zR0r!L#yl`QCjB`t$b|Ckub%6{!zJr6D*ld=K-Js$XqMycPOCX+!yt-hnRfk_8w zAj@un0colT#GYue4{|pV5Id5iYsjd{A*%^pRMf6>p5qCeqocvWruH`ptd=vtPtWhq zz>D>G&gc-c`-b-F)1=X)$c5DYeZ$ouNt4Rd+2Sh}7_;HJ_J57&uv7?(#W(TV?Zk{RQ$wkOnx-L5rAz=-5nzWivK8n14w4RG;60xE+yU`)+8pnVnVE`h;IfZLi`<$7MV{3 z2qvIK0B^fqw+z;XtrgY~5 z_|1Qu$!yHKxX^W=*ZbARM%V|ZW4kz}NLhZ#5X1=|7!MBh!x)2ig^dU1qcqhYLOq9O zu|D^~6uUj?VlIw?W89s!rUQ)MR!m-2s4r&Nk)-C%Q~QpqK3Abz>Ge}$J^npUg)ot& z#KnnrT=N&MSE?MM=}Lqxc@*ShjU4*m&QY$s?ie48EvbmQ8rOdsM#f_C6j18?`ZQ@0 zJS%8J6v=X<-P*zHP`(6|fMW=ct31w}wal~jjglJ2b^ib|RX=eIK8(r`I6loyvU&(~ zH@Bw42UR_z{_~x?3s{8Oxm@{jy^6A+!htn118jm{J=lswSJT4*IP(50D|oZgK;z;q znLu@0oH_Cj0>NqAN<>+!k7r^y=Ym)C&$j|E`i5Qa1EwSaKQXu7c{SL(gs(oYdrYp9Ij<&Km6s)=rYi21LG>iB&iZQe(?Ya4|`(-OX1}mI+ z{wXz$Gk?Fir#&E&GsMt2bMaXFCqutpB@sQ}0Sug$_3KyfqsP900zTZ(ajCy8w(HJM zE`MwB^UfI43mYE`<1>ebMlsv2F~bFGN&+-z6-_r|ZVe3%v4Q9FsXqV*w|GnZUF)ou zaEp;ktTi9Q>+jjFyF_Z&s{he1EDBqaUr9s9C49zBI_7eQkB3iK*+CXYIy@|ow5`uaFPWORJC@ptTu>v z{x9xsE8ycQ5uQosoa&3xh}RSJ*o@r9B=u_cJAv2t+6IWxj-4l_yAsAZU-o#o<$XAcV;VZy)e+SKn&CW@6&oL3+*ZJZR45B^qL*gV1{~!$Ko*X`ZtA zc1JO83Xh%>{mGpTUcqX#c+Al0XMd%)L8KHPz)O{3vUTcb4PX<_;_xfnc!fY!(G3JI z8_pt^?7x6M0cJBMF;B-^K(PL z3HRuHz+{;F42yi!^k$sGRKJNeS#QK;9eS9)%C2kUyIM-f`f7XuZ#&vU?Bobf=w5{lLU$R0PlSs@ePFaQ7@}8`N@t9lduMK8grzRurc9mj84vZOIq~_1 zYjVg0%?2oXkh3TBf9_c2;u9?S)V#V)3%Yj>{A~33K54uU4S-CFZafiTHmpTAztaDk zLB(iL$$18~U*QDu9FVqoJKalvrOgeJe^iyBij-N{YqUXKS-2J|XGh=`?=2B=ao+MS zt59yG)snPh+=gB#l?;a2gLvG2_|-&kxM>57n9i)F9tX)}480lQ?^1CD|R>dvivd z2qi1q8D(6YQO=H!$g0c}Wh-ZtSw@M>Gm0qA$dUDZ>-+s5zVF}P@AqpwpO5EwJzvj9 z?AlS8N#iS1L8}U0$+nuRZXI)W-4~=JkbF7;(|%rOu++Qt!non3)}oSx;dEu6%_9lw9B}A=I&O-T5<9ib@i+nAi}!&M6b7yQ(ZWcxGSJp4hBDkQWHu2GF$WhxHA6P zKbLOW@^IR~U9@I}iw>TDZ`H#~*$1J%rGTx?i#2Y%T_?1*)IR!K{Ndc+IG1T7aFR+y zK|Fz)SFb2-G#n^|!zGsT+tz&rX`Pt#5F)$!% zv6icu9HxVFJjql;p9tEJN6}tMga#X8@hB0)A2s8yOdQ%gETtF9r)$M%CnYqinuK19 zgRl^_-UUt?$diiKF+F7xn_Y{GJZ*T(xDDgzvc~fB@Q@8W6b76QkmRiRzi0w$XGW3Ap5~nqe_RV-ggM1SOhn3owG=jG49N`o6*LPhs~@qAHC5t6A>>F^VVH8& z_WmOu%GKoF^GPbvpd9}42a|KYS$={u z#Q?7=fpb-3{ ztgh>Dsc<#_%mni@7wE;s#hH~dREtOt9+$gz&l>Fz;j%2;Vx#F@8OLxVEBy<+oJOBo z?|%$EXgIPlF89qRk8?zFG}cOXEjuy7ugIapwODg5-R17aRKZd?ENtJauPx6b{-q8K zf42qYons#&K=vJQH7P9r@2Du#?as#7bI3&ikURDMKns6VMU0*ZrS(&iW#Z^hDUMs_ zO%LhQ*>jaNU_jDg(F%V3#4W#8>Gqq4MyyC4j&|=-ECZi`~~8qF{A~ z?dYrp?%7_f0W>wC)m)+LkQNA8trWW4hA9<$fbpn;y=;FyTI=X78Fbo>5IJYz=3F|>SSyFVEBb1|?P4!@wdWTF*Z z6t^i72ul@b*$)zUvz*e-E+LE6xjCJK{2Dr8yAmxywW^ci*}g1loO?da8D-g;4!X|4 z{&>SqN-10FLG9E?FIPcFON0R(ROG#GIq3K!4u!2dNUdkRf**CFfJ<<}H~x@{<>cbA zm%FI8bv45}%H?bHrNBlUlSrGaT^5XPvu`-waa4WRd)a|m!#lT zqg=Xd(wA%IeW-CNg6Tg_KGSuGn?kb}wb-a9fCl$y5yu~HA0l|!w-^>#q;kM@;T)b! zYNF2eZ1;hTG0MIN2v6<#OEdODJ6<_v&wcBbGt0{51tjRqKdCBVHN?d^pcXg z1Y7^tXHomJy*zoEXNe~CaWVSxQ>~n-Z&k0Qt6B_3XKi_S6zNhX(8;9~ce!P^N84N3 zOT9)}@|PB*x}5EYz6txv)xj!TZBC5SMUVEm0Eb2t@MIn%;v(`P1j+xi1?%9Z%ttOJ zd0lbn$5-nEebt>SosEh$B02C<+j)i7K&}(#E`%2G<~(zQfvx6H?r7`9?Alh3`jasU*s9lSfM%HNQ-HHZpnX@ z2hJkRI>|vpi#0fC!P(82Ex~6)pT}b>G+H)*i$UjsqN@9$^UgloyCN$z2=I?8snVZR zhaEroGjj6m0s&Zyj5{B|Oj!|0)f?Sm%j zodpqQFQsGZ$v6v!Y+6a@`<~P=i%6yyB;rvU6Ko8Kb%aMk-`k^d0#SU)X__N31D%=f zqgMv$2mZ|vmOfQM*?RZ4#ao}V$o%i6w||PuB_}&fI~b~ZtyCsAY)V>%k|wzzFEGIt z8heaq&(drpGrH9rDG;Ng;i#3lvtB>DLQ+y%U@{#d1YeCn>%RI~w6V@_esXOmQ+U46 z{s#a5ZdbpF8Fco|>Xn@y4z8?;Yy4Hb7wdn;J0#&0>zV0z!kU=N%>8uxqI5%jjYCO3 zZFpASqE|~&|E;O-C}ZD!iTNG4)xh&uKLYJbM_e=^C0*^OLDM>Zzl2sXf+o=+4w~AQ z;h`<~AJWk*5j}VB2^bU$2OT{>4~AdBHC;+)UQVMorhQJT&;FXthP?LfZ8oVP>;#%i zi#UnFXWmnU-VCw%R>UcPDLi-TT2ClL7t0(DZ$?&+I!rx|iQZ`kNY}s6Ay`E-dKEp; z0k67ur+o-~I?DU3beuk=>RVp!4e*$O_5SlJEn1oOJ z3gPL`5G2K*tryqXi=IGIgp|3OPOL}M;{?PN*SiE=uE$}HpWc0i-fmh2_Vet&<%I;k zl_Wxcw>wR!)5(Cf=c8b5k@WP%uC%~udbEh=^ia3(EWf||W);x+e$z*C2~MG+q6;(w z`;-@>rn;SNpQSTa(n*V z4hNSor+|}H_$lRCW8b@r*V3}A_!V5?60oyV85V>s(NOBqW|y!v*U#csMjTKKMke+t zi%udr&pUAStip{?5AX7eLEvat78U06*rF1a&h`Dba%;bO!M&iEwk4;p{^894w^`>G zNogeAp(zL@JzTM-RZ5K|uJ1%AtTV?hAG)YPZ@rwm@sjsg{*1{Y>JCXcc%0-Am=UwJ z-29S3IJ1U9GSb)cOR~5^oFoH|WY;fIM+MK=@OHjH9&N>gfAH$MgwI}2XUpxF1rA#N zZxFemZk5A&Y%7Td4}LA|tzDLZnd!30ZcEh>e2SL$ajMPQ=!($x3wV%!~E(Y-UUts%^6Lsj=gwF2MKR$!=z};Bzyt z;v#7x7Pt5On)O;mNh=J-3)5hE z1CmHdn0eoYVCeniv+1%knwt$vHaWzMmZtRtgO*x@+1pT9EOm2fK_sw2tos)4lK5#cr7pfWDs_k)L!6x)(`71+<1_H(o>3ZvDabq%C@@b*;Nu` z|Gg5*A#j`gY1iOGGj~tVP_N!#m$2FkGch)J>4s!tUkzB*ecz}5H7-*0#w%AX(EtJ3 zr@;N7i?L7LXj3Hh!_0hzftm#ComD2~WwD({u2vj8q47Pop%ow&NRL!Y&3Zf}+$NtO z+}3DRjcMsC1qt-=9UJeI_M9bC6EzECsm?)QkIK;AuT*_$;dp9fK&HCxgYc#oCudU| zW6E;}@UMZv9%rEC1$LIt@H>lCkAECrlD_k7@NdmM{|Me zR~tU&&5a2fKT6t2nZ*%bKI_Cnq&}OMbiW=hNNF*+M~idY`-O4QE{d7*=?7>;)xZEp z3!^U&g-3Ms@!wN>Sp{eB-c?B^#UbP9q9v!d&iWG4F z?oAqW?~M1uzNe~?vPs0DZ_ME=+vsd-@GcRA2lCSw7}Hln2NIAfbjO}Ee5W!#547y= zb@E@NC=*c-qv92-Dw9U&PK^1XAI>-nZfebZjtqP1IiI}*7nhDuQ~g7HQnC!yXq1*F zgwlYOFcjl{pUoK+%!9}u77m*6Z^2vtP315E8Q?W)Udiwr<51f`$3XN-YfT6#sTmn- zP%bNN4TkR?{m5M9-KIRN#CA~fs~i!`-6;NzjXM1^xog*3JZ0jVJzBZ$9nW0ncc>H% z6S6M!0&fsqcqs+8(2RRHR>!f{-jc7Wz>c-@{xO;k4*evNbcq4?0E<|Swduc#)5zkz zdc>Vg6*tXJdoJ34DOMD=w>^MrRwJ2P?lT*kfB0vE#9KGEFOCTpY~kFNj$8%?JKhtS z#bZXo6sw!0Gig#yLXJFgN)vP_5Sb}$xt3|DK?SmOSI)#Bp=bZ09}ikLpniZQ7`JQT z5XqzFJwWF*Fq-L4pmYY#udlKTpsw;sFc#~CrEQ6j{SQ!b{#rgwb#Hbge-DmUFz^Zq zSmUMW;F4rJagt%v1Otwi+iaY+iLZtDbETZBNH5L#*!d0m>r#VpnS1&_qi{)c`uF~V zxhR(%+;HtI?9n~Jm~T7cJEOVROR&weCa9||Y=CwGEeBs#^{~TB*DEM-%uu)dFhvA- zR6s548{O#@h9aXhhhqhVCb+-G@pTobjNVqhk5Ut`IF~g~_2-q6Worfn=)^yST~u!( z3!ZhEg{MQB=CR7ZoiXaF1b+~e1^$9)S((;`vJ36P%){Rt(4O@lT8Q?^B3St315A&@ zSBB~@Xs##fEo#I9>N8B)?;!#Wk63iK1xAMsCSK?WhfH4JMdN~0%bbzRgMW62ZdpCKyk^iXCv)fx zQb>s9nU$BTt0uL+GSP}h9~3da7G#5@-QRg*Z^U0PlGXB|Z71&daAn9#|o@S_ndz5OgN#{colf zfeIi^?m{XO;N)BYsUjQivjV(-&JOv0DUS|1`T*sGO{=t}`Eo}+Le%?+I(FV+npbLK z0eZ@%C$}3vR|`VfrO{^XkeHi4dNZces1NmLwqi?ke(-Y4${GY8Jt;mV8c^#&NO=l0 zlt2={pcRxqE?bj1D)Es1WMOK`|4nt{`-N}Q+D&PGde`)oGGu;>kK)H_E9Q9g%6^Z@ z{TP>-7@L_%y*-0@aBquOq4N$r|8p}fz;&+A3A?Nf*@K(@J^Hca@}(gESE%|F)1noZ zoN*jA5y+DSgLa<&BzBK~nU`du$J`$*`mq;NYsb(ynsj}7I(ffIzu(Kppe6WT)(@LE z>9}ZZT#3>mE(`wUVuwF&c%6^l|04At0R=;_(W?tge}=_%-oD1PcUdj^-GkGn8(%UN zLU;#zQULzUZB9+|v6h;umU=@}-$hFIaRH&XaBJ#8onw0Y>3- zKu)Aw;XhsE@8__0W~q~-7hsJSY1shJ80yJo2f5`;O;$2gORJbt4dffOe?nvZJE?hX z&>>YyRc#FfV3z+eZ1l2OMDx52UMse|fctmd~S0)wbCJ;!O zK1H8yTPRRPC!> z9?lQ4`GDA@R1ziGfRk!&O<@=`G_I^>eN72r%F5Zk^o|l335BLLXKb(9-l$ID;-cFO z`TjEK5FmGC!_TUn?0wd;f1(hvQyg^(DG$^g`wTH%LFFqlEtbr|04$-3m5{L%LT@j< zXQI!P=XyaxZw5b0bva(*Dg!9#jTFbQa&DSkU_u2I&kLeNkX62Rmu@Il_EHDIv>0gNNA zf^wWRWea-`-@Vi5aP6Xu8Y|T^FB_8!^BWsTZ1Pk8{pNEw;po!Kr=?Vw_qW8@C0icu zNIch&T*2D9d@X?F-KE8mI00}1e-K}rcV)EE$flq})gw7YzIf#<0L<2V9joe>ALSrc zRY%6+Kn!yAmQ1oW&|Mwl%Nw<0o{IS-((Wl3umy5*ECPn00p~EE=*Lu06@p8HN3yz{ zoaXX{=VDw#4cd95=z-m5XUDJd%5JmvQCg-Kn?L%JkIkU!tpXXrKE&c_ZnZ{ z8G&LpLykW#9Ge|DxV!x-|K@u`Ve#RKEOIC>uL8C#y=QJ~K!>(Pit3vL*LCa|_v*Vm zz6^{Rl=Rih*TY;ca?k}0ES%Eg97ZVghMGg(RMxX&kC2@KajYiYCN?npX)=GRw`eSb zzT%tKS|VPa(!@+w>ih2|zZpvsnQYb-G>Hl?sjhqXAA&@n+TNf6OI+7tbspPh#6y?Lqrm^bQI{aU{;PM1+4LRK1Y&PS?Ev@iX{>~@f5KZVQtNTyL3l?^G=i~=RGYg4* z)SdUx4F7bWF*cyg`xfU#yMf@I0f{`2d)_G0PLDtwm53kO`93r-X28$)qiA%-mAUd# zuGP=%?d`xX3k!7}7Bc9kYF}+bf%TRYe?U*KmSG>_^q#EjKburhI`ztpDiVNeZM5%P zTMlWm-G2@sU*hJT(x6E~p9)-jOuveaJ4c)wUCO>vdBfI&z0}-le}w$YK&m_a!bTu2 zdhRzK1FYj>o)4;^v?I>i0unOcDT`(-Ui=msY4A(;6WWjIW7n%^{u6DbkrO|UH_wLAo8bK%sKDpi475ndxaowG^Y!=&o&+kw{bTU!bguE=YVB%Q{AL<`?Dc<+iVp6b{`gp6 z_JoG3t7nh*pU6IlG|ASnIm0ye()HfBNjtwv~_TIifi!VTHM`Rinh4B7S}>?3tGHLp}4!d7I!c1?m_On_gnWje6!Z9 zB(o-YWRC2;&q;*3svHI?2`UH#!cdTx{saQS#Q%39BLY_fJNd?d7kF1mh0n;q;frh* z4tz#&lGk+wfiV02J7JQUF-d`o#BMS=ZW@jjZXU)i<{%Fb4>oHDTUS$KCv!GO7t4$@ zVG5Xp-$YCCSxf2pz05I)34gc*|dLup-nNH zf)5n2!6VSW&wGPSLJr(#sNnZK5Ae6m7=N0m^#9}Vj0_|{gCPq#;7Xdqd}Jg84g#WB z@dP3e2l6k5{R0Gbm`xc=*vI04>fyCl$sjV?}J|#6RL|J;Uz0EI+alS(lC*WnG5|CU9I2Ld2=sL9uWb zJn{+rsGstU4$1~NC{L*?Dag;**UsV7&0IJH$%^^;`Nv3=AmWHHWR&EC5;jDUEP+?_ zMRlvWv$D%x{uE1#Bg&vftW9w@<=*b@?p)dw*dQ{5OTd}=?2ncyx zfPbG1j?Johm<0)tctihK1WIVOW%3(%H$Ws>_5no=rZFAET=l z#3Bc!{bfj~`e$uz%|Kf_)v)-p=kHIK?~_rl{c;{VCPXH-v-d9*fA~TQOzDgKIil5yg`ZcGX5c{P2;!(izxse(?czGBz@d%_Y!y=vPTJ zS_U?eik>||#Qn@~9v<3ID3n=5L}ad`qod;N>`W2Z5MJGFGY8nj@2nG?LE%5aiH}3l z6Vc}U`z&A~wHWevdamD7W8>rVmKGKyPdK5*d)%}6s0OJ>kN3I}h0V4f0`=q5BLOSY zzz@@d6Cmj#291CJs)x3iX2Mk|uzzrTd`v<{c5-%ldU|wvTJHYsn`W*xj8%e6UR+WN zRh@!BBde*h)hRAXxJ^bv5L?kLd*18Sn4uRvm$VB?xg0W1>Vi%E0I=JB-rg;uqM`;F z+1Z#b>(@2()e0ar*hRSg56(`WBmdN~hrB_Su%2vJ3R0cpWu>3rw>3643i9(Wu54^< ztSu}ooI*uEDDTmR1g8ICMegJOSjr{!1tLeqM2vrHxG9F?1&^B?#S=uNY=RFT6wZ_U z^zh*6XJV2^5o)Z5R!fKd;tiW1f7gS+E66WQSEUX=jZtj=j8Y&)Hk9pKbA${Mo-pn0 z?G=%dlJa|bc>(rVLGP((yT z?>Ssuq9NFLdOA|rVK508JaKJxdo)+)uqLS2?#&C_W$o#ygN}tYGdYRP`lTWIzbjT& z$iSLDmuqoH4B!2kv*8gGRNUU)CL$+)hlhv9!^bBJycAUA_+BZTthZ-ilJR3#ZcYzi zT1o#JvoJ@IPQ~a|9~&E+m6emTMZzTeGk1K;aeL3Som44hL)S{}$ME0Gu>~c7h?0%8 z`6GU6QQ!&AguE$iC6h8)89*U2b+|uwQA2X|P|R2hLF7Ha(bj zdxnRHmplBR7GN$;9Qi4qr9j$*wRn>Md=pnj2>uEk6oA>BuBh_Ix@Slj3j^b}>}#`& z(^8Fja5nl&4^D{ZB!ER0*oQF_4)xFCH69$ix#6*2s`+u& zes9q7_6j{*_c{L!Otb+-8tM}cOnPc+YI$*SarNNfPlWQ-kPgm~sJvkWx1#_*i^L)> zGSUSS=#`W<=s+G%Mrmnt)9C(at~4wxG&DLrG@+In8{{_oQEuw6C`Yv@$G^pMzBc;@ z1}R?w+?%rWKNM4X37)e&_|Uc>V09eXavyr z@Xz1TG3cF7R+|&~9M_|vXRT_he)ns2rh~EYkU#fQ?S%BO5d$Rb@>p%I(d~&5jiTM-mR`==eB)U+nFX|9;i=aEyDR07$YdJ%2)s7iFa1flGdU z+rT!!~P6w%t*L#=o10c~>=(oD}10gBJbsP@` zL&Xe+hc~vOf-Tc^T;L`lwJjw3zHR@o^!L_qXm|-EW$K+Zu|1A71f33#sX>a0oDL$4 zJ46+aKrQfh_V;*1grAE`fbe?NUgx%w}hiyZyQ*TOO zeK_%YGI8*((h~tlH!6uAj2G7wSo7uSRlxL?w*aQSc?Dl<<$o%krM^c{7*bJF zi^_T4VR*P}>{R*E=%9iv@10f!#@4rRaj5}*F>XRtMWwjIm`JU~4z~+0z5^EtDXcey z1y*f>7948l(@EXc9@9V#6rSNhUrd2U4%4tHUF|CJi_2k_nn1GFa-J#ML%r>B{}guWqvsHl)0s?7wgJ$JBxbdoY4Ag`O08Aq@VT9#OD_y*}aN2mfJzfAX z!EOE=RswzS!&5<`Y7eu)C93z*sKNXeIs@1c87EP;yArCZJl@PTb?xehp_D1UOp+5J zeiQ6U;WB=ly+1e21>gg>8I=!H9v#=@%QfavfYHyOr`P z2#kIJkDE9M#MA#BT)MEN&RR+C*?cc^20+77ga)3}SuP_?C2X%fa(l)8)Y7RI6in$4 z1ewy)c;@rc?On7rKT&8KMfNknF$HH{27-y~Ye2lbDR=aX@_!sP)WZo+NXyQ4I9aTg zVn|?t{W!={kiT}Sw6*CJ9#0hyp#61V&6O%Ra`TETuz~CA22Z1%&r066rG_d%`d0Dn zrm@dgL!Of3GM6`T`IMN~zq5*ht2+k&Ngh`B;}xI%3h@_W*r_9#g5=q$XkKb@*)Btm zwQo0T=l-cjx8Br2plN*Xi_Pw3zzy~+EG=ub?0=6AP)GEgZl7&dbs2#=rqaiBv(u;CEHJWUdY zsp6$1z(4TJF@whLAHx#G730d`06@tBPG~VOD4jb96MLrC_u5V7_q_PU2*ytCbDqc+ zacy-!Eg{W@>%FDT8&4s>RaXVUj< zfFP=hy|`rtygmZ#rB@0|B*a^P{8m~zn)8p;tp?wv9F-K zU@4?YNh$#LpTs!&(m*G}MEfTAx6uphFcS`Cv_g%WxPtlJbW|9l;>9EBkBZ(0na!ut z#Y-C}%Krr8ZrnRR9Tsi>7l4j#1u6U=jHT(z2w-s}yRL-+`gEgJX>d9*J{}2h1Y_@% zPy>*DJc+_o6M#5euOoOcRf} zKp6p#tBqR?tkRgM#wyD2=;)|t$ucJ~>-&0p z3nKS^{ZW8wggu=($4Jx~94v*{26(Qa+tn~bEtda9uqWWMf1jYxy@u=^~H9^A~R4W_Vu!M69Dlca)Jqqn!WuLFSYg$mgU z7)y=R81zKl$nlevC4EziR<_kgtu+`_H8~TJtsp7L?_Thw|F3uib`H4;9et-q7xv$vYT*d`_Jz1({NEGkkz>nr! z22jU#^&o|Y5E#7e1>%4)l5X{IavB0*eK+#TpW;_Up3{%d#P>@aHgPdOUUl^yUoOX75xEemR z4Y(Vm9vmH&NTk=pgS>YjatD6rK9v7uKv@jw$9P}~0CXxpU#!ljbLF6&{f2BkT>?b> zZsaepFnTEPjMG1YPGke_Q0tm+9`7`~I{S@SwbX@z3uyr!)?6H9Ipx zp`m@^+F}^@7*Xc!qy6d|zjWqX(T_tHrds}e(-Epm!MMfjFE&n*=UbPOp@I(-p0IuB zFx2*gmk`%B@S>~ecsk;@_f7u~+rY!9sHh;si9Q{CE!P?aV@topN;>>L-rS6r#0lzh z!l3Q6J6gpIBAb5^$5bXmrdWc?KMcLf^$gyL(NnCv5v_daz=AT|*HWQ_5_C-@s9;ez zmSTe-EU-aA;#7$A;k=_d(p303$jIO`W>%!32CF+PSWRZlY6~lsrvFakzlh6KHgF<- zw=+wZwy~DIBE3)04j}JNG;*=S2GK&W#nhE0_1%* zkMWKL7KSz`8o*)HFnB>Acarc!G)pBauqlGp;1G4GKlJsqyVL*Puosx|fW^KAj>?53 z4JvK8M9Dia8#gvG9GhkEJcKTYQ2>#C)-xO@C`jw30(-DrknQ=vR&*rHJ2Y~A z@DW?y;S1@^SJ_T-YV5i7>o%%sS!B@P@$qQ@oO@jYsGyWCECq}`aV-r99U?w=vmU3* zzhO~T;3eZnedX%7kiv?D`Sm*E1+Ru+n7qDR$&1mT6<(SR>n?0G9(P=HGf><2`Z2P>a9u#ExjcV+J@*{_vYxO~(b$-p<9$@D z4=hZP`$IQe73?P(K>kvsIgT>n(%4O_id5F6FF5_z@RP7xc}%5hs8&kdhoeM5?^4lC zEi;`9(GlA;daJ?P@UJM-T9JS3Gx1-(V$QxprJIJ~>S;53uH)Y$`}?K_w-8F(k3IK( z1fjboTQ&?mt5g53!BC-Mtl{E_*?eSJ!@&(VSw)-`|5r zM4%_N|GTvSyBxFADc5p7sUFmd6}i(9(~vj87B?*ZD8x@DAulxb&Q4i_Z~W#l&(83N z3$+X0ak0Uk$eq=#CSN4-kPA9F(UGLFM14-ereH*wUOlSzS7!u+%Si1VKD}1=^0#P9 z;ryYEDN1roOf`WWYbssQSQZyfm7D6e-6Lkw8Eu1B$!3R6D$}SK3r@p9FQi|{C7nfL zYR9AJCdS8vq>F$M32caG;4Bwg`^~4eWBqf<`t+}Xb5=ZC3k`NlT<3K&s!_uXaP3aC zTNn7!%MqBTqJHDt#!FT#ATI8UhSKV!c~!&~q;MD`78el?uRxg!GA-2j0M zA;_RM0JZiIc3dE^7Ht zl3u)OWwHka|fR4o;v*l z=bsLifzOk2uRG*)R?*I@N86)fy)Yo1{HZ@wPncw`W1J6Lgq`7*qSt9@7~$dnv9Dx+ z!wcgU_gI55)o_0DV1FB@!O{@nTCVHjdYk+Hvp&1y4*qo1Q35qEd9PdW-(QFPIK266 z^`z{!Tc!$wAYPIf#dd>zP?hhai|?6hPQKX7jM!hh)wMMYIWQ(Bt}coEQ>JCl2u)Jm zUA1}@edf%3&Ys7kejl&yyGRJ;;3j%szCzaTo%jUq+vFtbX(@ia9U>Z2q4wzbcma!D zP7|3o)b?S?4F6bpj)7Wq)K$63>#Z;ZqHwnsVndm{^^?VdLG@jBT z1E*nvhr7B{e)a7;_*P^O6yWVt{px&G+K~|2F^cw@YS09{qG54Y>@in;AO)L_gXvSuunqcje9Lih{l0jyqp%+umNzCz1#ytG46B)(z`z zG$Hg`DI)@8kZ?aLL|mryx+r;CzpOhy79Osg+oGa3-QQatxiVQ)stWaecJbh?+4M(I zCb>=c0}CO2)pwjD9G<+R$cV&7b6tv;C)?SlFj}1_gzfG%I_i}RUhM{P3OfK9>J1aU z$yN4}0hel5j?+NcnpSl&<*3{!!>zwh%t%h}7W%78LVvQCL66Um_5)n5nu9V+iu)-O z()Th_N2InG>MU0tR0*87$rn3v0Z3Am`ub}(V&hMgUc{!~_)iN& z7;#}h!utXf-GIRp??8qCdH58NL-6|}nm%7(%Axbe>rk76A${=VAuxWYDV5_QRnVYx zgH(D7zd6kjVT+S{Y-;+JZ7quZEWe&>xF`a%cV^+9Z`WTrGNfY>&PM~@@~?YyJE${g zBcp=IqMOV|S+@qD{`l@D=x9U_LjX1YtyKyW4-;ni&_l=}ES!lwEq2V1<(3d3ee>G- zkMFk&za(}>l`?IDLGHJ6y!&~B``-)moe$USpJOS6m$`?259j~Js`J+svLC5AgRTW! zI#i}ZNTZNL@}k=~S$6F*uMzyp$#j_3FP_ot>3_+TXQAJrZ?$i{fC5%D9Wg0a-gMSo zF?mZ;=-DCfgjoXE34MH7+XFrtgbxWv{1qQ)81ej@@ z&gDQ?HapK=BxIyF>P@vN7~<3a@Lqk?r+=EQAPi<=9oS<-+H z)WmNsUo{kl?#2*iKlgx1y&33VCC5H+)KxAIYTZ;4fYh;$o38elAAe{+XHDLFibL~Lp1QbRhf zk}&L&tGvV~pHuf5$G!A3qh47qhdGn9PjnBb=07Y*jFj&yA9K;E;b7hF2R44;?d)m+;lt`n zZ)DvtLtMR-93+DOMl_xlt6-Pw%=k~Bq(=4s^#U;4X1`x^=~LA-Wu5d4sNtJAmFx0Cp9MnrGaK=D%bEu%dgC^xkH8xS?cR!Df44Shj)PqL6R)?iqoE+#d%%;xWiZwnxNoD+Ic443`_*GVI-xq-*q5~3D)?OF5cjxq z%=M?a4|ARFquS5$k{q)5l;Pz}@PYH_6|n&*q~SDi!gjpzQYPbyV&~0+Ifrl1V^MNU zH>~h7s%|%88UiFj0>K$#NKF1$ftv-4%6Eosn@artbCZPIxC zRD4S3jvpQ{D9zq(%J0L|mX*^cy1&~p)a%7aWZX;$oeQ_^vN{eY88$kQivbGkHw-S3 zP}EF~HRFgNxUTXqj^&0AzZYhtS}Br(X1Pc|U&D=u->(JACgx7CB~E(U5qX zM~ej_IwG#If?a){tXw?qys@$Ka#8wsJiHuJMO$WY43t8?OB+C!7q*_SCnmlcIRO=; zOF-e+hlFsO3$QSGmX7N>Pcb+?OaCUA-Nh`m3D6oK3Vz%`2zZvg(fV>HC66aL-z*Qu zB!#WpXQILvUGJZhddq4WaEZijsit~jFI?k6iezfUvK*EwPrO^CgN5XB*EwjV?LRk}+wrr`tR}b93d%i)OU|m+9tb-NDTHCdUOo6BqYS zr~`Z~h5RrjUw!tGrze7Lz6_`L9KD}cRn-kpd~ghaI(r{-8}5}l6Vo55+Timg7Jrl_ z)n3_7E1#J52!N7f({Pyd5rIq+)a4V(+sus60sYS*;AX+o#4VNo`p~k5kx*w#AalQ& zgg|x1hKHo=Q!z5gvm4DIaK)h&!_?H275-D@Lbc7@`x78bcmK7+#6-hjOGNq9CjBA3 zfzbtAnj`(!d!YD8GssSoBdweuk*Tyw?PcN0^+Tp^^Pc_2&FkgF#u^|5@QtCfMf*~J zQn0>FtwY4XEspuaSGJ7Z@#eTr>3jH{9ZIU5W8_kpGB;$mgW0M)S31%d&R{<6DE{u(`OJ(jw=qUhKkzeDQ@JU0sC<{)9An(2 zxc9&kM%?9e2e!Z`1)e!Y!uE?ab`;UqBehV&fMecQG&O(cA8Gs1s_A)lyOJk1ah5pj%QVqtOjih`er zR!dmIWU#E^;_;|7Xu&ae5m>ImwU5I8_D8vd-epCF)5a-dX4stjh#GiaMKQArKlby8 za#O4~zkKM{k6UA+So9KG;jM|9>uDj&^1iQgb=0op_gUWLx8TU0Y+k5fG zmjHAG7ixH*J~A~BLwX5lWn_fDeT~!+3C9el>F$5=y>c!k zaC#B&dgM)(s~a@OqQ`bE<6sQD8lD){+^V;A5ETfr5)3}7>I1dneLRU6onJb!l7XK@<``(|e>C)zw<%}1f zRWata#dCTcEEL}C-2O7)sV=HqnG&D&TTYPHz1B>zv*sA6DhWt#1Ws?PZ6eaB>QuV! zACrQZOkN=I_UtTSNE%NZ4}Nz@7em0+$GgpJ)~#u=&ZI~GldtD}o-0qnfHv<5NUJcQ zw%6OrqW|bg)9w71FFRW0dOx_w`GeQKE$Hh`eC$Z>E%XxNHw$9kkacrRU&W(brLyCo z-l9}4MByrBDSf;7wpZ)=B$jFABP_62nrFE*LSfVViL3UODPNp1($oUpG5K*yWW)5$ z?Zu}Lh_i>)V{l%6eQ6Y;&;PJYtr&&Q%wL{vz3BP()jf2Qtmrky=y6}NLFy{Ay_wzx z<6a>qE#oud%0u3=MaHu_drN9dd|62%C(8;VcHd&T*Y)OMgEjR3&9gRMDRtapata9P z+OXJ($^JuZjBskl8=7! zVa+Y${M^BNkO7gEbK_Kl00oMOu?%6whp4UH_M$9zlJ(12kG|w&MY^dlW6czx^A6FH ztEokXdouN`kaVtqQhGR}F3NqFCXQ#CA74+d_2@A4#vFVg`vjP;4ZiAX4* z=Ois-MU{+s;mGf_zMzao$34P;Z4*vTZsVu6-59S9u81c9t%vf3)iFGDS_PrjaHtSVVez1O=RGXZB&O*ukLjr%WzDZjXjjIlp0XE;0E z{rdZ9(W|q9#hw|JF*>!sb6@1V+A}G*cMFkWfN`W&Vl&)hMXA8mQrejf6Z3?0qjWiy z4&}?$5KRmZX8rsW8z3OpoTh}h*EqTaXe4uF5hn_X?+sH;tA6$^{nzGaCdBr-ykTnM z4tD)Y9vw6cM@mWx2g(GbhNgqOC@zHm$~2Z0E;={ichZ*9Hfm05#uXBZL)%?D9gpc% zH?C9lc0+Sz0kO%JQ28`!A?PJ+`n*>=mtWRmDHi9DBFX7WJtT|*^NmYKE z5!tSBi`YMxcq*ikn+h$88NN}ZTLWDul<%)Vpm%7voo8`=C#L*B)g1%^3OW&@<0AK8 zGuX(5fCtcgZ%80H@KxfOpf|bS9jO+~AuZBI3t?E{C z+njeFxzxRhPK%sbaYgDlnFTrZzw3W;_Nw@0ju_pb~x(icr{z<{t0T zwahY~iUF(z7Ks6tA@YvjrlKcu{w_VX<&Ww95Z;p_%MY$)xhG*taKtDp-bNbz^&_@2 zWRHt-E4?zb2K#E>MK>U>Tul@|b)~SE@On~snoF$d9_g96(Vx@NTuW{!zq3SZ-tP#h~(fm?^AX2^DPc^jl2d5BP8gQwW@g1yQo?2@f<#}@oA zzxltMzs^X5$*JS=?!N&AYVm>}Wrm#;srv3|{ift(1XyNHcrtIG_>R@c-yNXY=lh`! zd#^+s@$3FT)#y^zX~w0(?d9PHzZFI^f>%tm(-3D_EBGH1X2zx4 zFSQ^1Q{ImL8U7YCY(8*WhAtBRCx=K*gw@;3mGoZ;d~@RX&Rw{a&HG&))>`u8U~ntt zB>7==le=R}19eJ`vD&7of7DVp&CQalA$Kl$|? z#ZEvqs6-klh-{!W&W|Y=Rk;^$xPut9d_iok+_*ZxpN5~+TH#w}31PX56H|cF-w&&$ zQS-+ai%g@zB1;t_5L>|Gh8o~U|D@q2R;~7U$%(S|_FlGm&Po9~iBx>sowo;8zv^OQ zMxneHQxitv;Fyjp3$3pjpjdnnkGC-ll~&$&)3pW{l@q>GEVVw-ypyUt+0mpgX$pBihD z^ajbhWJkcD%b}m7lU95998KszH!Fi@ELXwet!!Y3usv<*1{aCE9<)m0pO5<9LDf7r zWexLMg&CPj#feDV2A*Z%J20(|4c?ff5DI)os{7SkM(0RC{ch2f&_^~Yi9z#BrcvYS z{Qi*N;eFzate&3dQm>!wN0QPO+;Z4Hs08YUBq)&S8oHpJnu_9GLR(*T zBBI;$wARZsb^5|3ai-ZRpLA)CMtPR-t;uyQnZXKvUgdRhnfH0&s|5JEUM+i%&wv$@ zr@r-{2fROtfHPZ$uENvnr5>c4!A89n_FA{xv?zV7T)6H-g$|>Em2VSMloG>fu)<_e znxhHzHmUNABoJ!^{2wnSYUF8@j>WqL^etM(TPNm3m!pLzGFHnmqh4eMgC1`LC^7o= zUiUjYnW}vk@X3aFxIY_T7}*dzB9vcD&8jNjIvZx<#D!b!cgQVSIzHOX+cNw9&5C>{ z@b-L7?gey{$>R~2!fUXE%P5|N9?4HxpwJToc}$!`(VBY?T8SW^iLt$(=>uL z0e&)Xr`;3KBrUFpv3|Pxr#JZ!Koex2wpK|muT`M7g=GQ9vCOn*l28rV7LdNFrt}9v8SdaxD&Meiql0^m<=RN- zC1}MHlu=`IRs-_aiz2YE>SEhmr@n1<6x>aXhh)n6r^!Jc-w(b`p^O!&`T3gXq>2-T zKFEytB7kytkKX^vOw7DA$wA(S;YH0B;o}|`eYuWX=AR83#|Z|W3mwe307Otn3%(^% z^#eHwkVIh|zi>C3v|tfc*iW!7=oT{f`fVv$<@&K8#+Y^-^x5iQW0=pFHijY>qs<3sa`FI*~*5&n=Bkm~i=po4O^ zow7lx7kETuALExiY5vkwBelc|(`bd9uR+P*eg4VYoI&647%#V_OYDr=f;joffyj{r zt(bTWDT`vkS0TS@&BNi1-ZT@3MmE>{$-P*?ZT@RNe63zYzlbc0osB_G>m}aFa5aO< zshvVMB&-)FY%wI69zILiE;i$=wVF#mr(rlo^Rq>X(n<>60u!Fne1VoMlu>dXe%%Eh zA^#oAhRXdE6KsZ>vcjSJ3YHz=y|7o#EnJ9^3sW-&EL9zcHYdem#t6Dk|QgT911gl@8e4*^K>+OBO9YDH)r6 zA>KqL;gaw9*)hCi6b6W?4wKF7`^TyA;Fhu&GC~+$mnUDV1*ww(pI67U`)+G;OgWyW z$bBR6Y3GV_irlP&anvWJ6M>s`0XEffj7l_-QEPpB?P{4>Tjb_uOd4W*tm&1%S86|TbtfxwIs3X&+oVnYb z2e-WgZ&Q2MS4gJxzo*ym>&deyep9Yp>t{2vB*LM6+D2Al-Kgi${t^9C`$Wh(B!)m^ zN$u=~q7~3(SaYgzMRDXPFy-L+-CX1$5wVh=B9>#uqpK(#Ui}5dQV#XlxnEp93?G_% zy;!oY)X#}tImy#MV&*0md~S)eb?8)_?G=HdZ5}+mezD)@82Ui2rDGDD)4} zvZaS1;Cc9AIe|ZL+y>~^4q2DG)6D%W(fe z)>Zd$k!fn97vcZ}pEzWA3B6AS3*Q)sgutub>7W=XdI7>(ADJ%$>0Vo|L!%DahO3<_Qv`>g;gA46mG%E_oC9wiDz=kBuqZsmBBmA zOB>QAjDx^Vqf6}J3+OkV1T>B2xErI>rju%-xt^NcSEm^oxzvpC6bT7WPen%{B;lU@jPod;n&hT9$Df5+$ zM%t9Ic1|?X=?`yM%03}k)=4V@##EQ3{}bijJOplSz7d9pd^@*_RA@UI)|irKNJKV< z%utSnkb?^{R(aO?Lqzo2GjG)eg?%%;*Ek|SZG;vgkF(c=l>rxcbnX$ivAfoAN+6=a zeq$>YXyoluLl;-Kksr=qLobmr?B0Rr!Z4;C7Wqr@{^g~$63c^ZbzM1~2og%=gCwZV z7K5TbeuxPgLmR?(c96_==R(`OB4yWZBsYxMH4!Hx;N~a#sMTd;fY~oC+Fu5elD#R; z5DhI}{%oS_7&|}ZGER+U_BFM6VN}`hbH*^Y?UtdU6?GmTEOND_8-w5Jf}wFVno03) zi@`IcNvFIZHQ1DEKG<2-UzH=*f5LN7lI)#66;RX=ncvzUg1sm03ofv0^q+yd0X5kU zvU<85O{rR(u+r>rIxSME=nylPxaG*LLk>9SCJx3V?k*_<{@`ft{-(1QAdHvOOFXPY zOpskN+?K_lra9cs70=em#uP~AL;GI{1=9{|iru}ZY?(H+H6l>-b~ZMfB5pP+nJP`Sl~Ln)ZBPZ;#& ziRX!=Uwl;U(@lKz9n6E{&&cSYc=ewMZjNDniz}ZkzYA=n zKD_cE1q#&Wzm(NbYW3J}KUrru{|hZ!?7|7_O@IyC12sm7exR-;=lt{%@MKAOkEwi$ z^%+Bt;pKs_rCSaZ?CTJ^o^XHYTwu(LE<3DU%GgEuEUew#>d-?72# zq=6_yO|gquTitS8cfDbjO{sLzGPckrwZGoCot0}JDw852QDhIxw39zmlqueHPOF<) zYeGBUt?u{r>YYJrZX;Mv&KS?{q2QMX3~A(2SIE1fFS%# z`F;uf%Wq0CUM`#Rw?24kbR=HkYtFQ&-4vG>d;H`3(hV7Och2i??Dc7Y8MzqNYMg{Z}+S-MRKoDT-1F@9+|$ z#`tj+$XZsh&L1lRdi^%y6r{OzVg9lwv3hlFd5etzASbDbhsQYH(JX5fUuk6gKKAaRij`>vWIke1|(_XG}2 zgSl#Y@#f(4Bv&7+_=_AFrW^}yX_fM_%psLz?|T-F*2_bj*UrjLezG*tU(;Ds$957F zRZR`e?D;_liLM05I!^nK)N?isl&frP(6irv7WUJ>NaKW~$ciFyQX^-6bb&HPNDwzIK>xf8Qm6|LFfAMoqAv11_7_a!K!G; zS0N)&M8GM8auV^+5}X)yC2spX_*D3W{rs6WG%am6Y)TDyGwLvHQHOj-csK#v!RAfJ z#oOauKM&^zrpDZN(ILy*Qc+xuB7>^;ZFO}1cWIYZZVs#qhlkS;d>Cj;idqG}A?$nZ#7}z;)qII6NCqLATvmmYA(WJpJhkbZl6JwuMwI2jJ%Za*gBSbhaGs62r z$h_tnBlz817vO{_FWA~&$-B)|Y`}UWiDe4haq5v3fWmE8A1CaV4yt+LvF5w>z8f0z zZ@GDTQ-BV5=q4i35R})TqS#xZIEy*+8OV+??<*No(9px8Dn6)_Q0KdA8~t{EIbEo& zuC8{grU9}sVl_k|=R}jO?*UsNjK1g|Cov)AG*u!>4+%Sr4EEvW4BD<#*~(9pK|BYC zVLyIY^JqoIkwiSoT^CoA=r&K=X;tN8SJd=C>X=K8lx+mU)lwMv@!VQ6r>QKTqkYr+ zs|>48Y6mI8m#KxaUX>; ziKXp7w6Y7*4mzA2&-EJq!hLNcL@>al#{X*(5k#@nIM=$<64e7a47Lf1!-!b4qA`!? zlVu)GM2c^wok#qUE)&tQ3w!c ztNEQ|`O6Pa?dt8@X~t5aoTIhXi$x4)6ks{mXLNPWME}hCf3_b{3$oC`Y|vr@!T&;xmLJ_o68XOpZ1<4hCU@Zlm>)Yd19oyuMY+yoL%n z4B2b}P)8y77|(a)Uc#Pis^hc5GzcU@AHof;@MTS>q#fT;inh7c_1*M&>#JOM)5Lfz z2#OY*sb__lrI<@+ttdaA#s`-pPT}y7VE8_!u*2uPJj!{|B(0VYx^j#U#raW87wp=K zqP=^|os7kj7G*%Cn&pWGQ_7QYMLCKK|IRJYJ}Er+TBJJT+@dZz`>g*YO5srl%WTWy zVP{K?{a=KGZ_0Mb0*wexW0ad|ZhU-`-4_g$R#sp^1B2e04;9}`KXf#T5{~T(EC7#d zrNzsd%Gy;OQSeaMkvh3%ukpVtP|tk4 z8`o_&KSU50)4jL`+j&l#`ysyH+@*Cb=k2xVb)~}J{sAg-Z<$tiHF7lsOZ;u1CNopp zi&j09mf-6s$GG3aV7x@X2DoCd8j-YhZcP z0skuaZlG?o#z$zhFe@@FUFpI7QyK+8HBP{E8`mc_a#2V(uyPYE-u#xm7T@QmlJB$I zyr1$Rav5)GezxScDCb99EW%uDIOjE2uK6ViwZ_-?BW6uFF3Ku<^gutnbv&u-Eg{1)`R=YhG> zCP@U=EySm1PROX?)M93>78WZhN-|M)T%CQEXNXc-EH_Ix7O)@Ss@S-5+IM!^G$`!y zrqoBZq&!kAC43=P$ED$_@34t>R)$KsDBv|MWOIzs`3(A#tK*xdZt!R)y*)P5^_@?unEJ}dr^2Qwq?{5*b){%5koI#*1WkPU=sa%+?Tg( zJ@#4%d@`QS6I1KqzjHcCq^3*d%eDE`s>>F zc>D9B@Jm_hr$PuhuZiul_3~!M`clQ|lrodTh5}R2_20@roTkBoFGqzJzVL}w)>%!% zqle~K+4B9^gSj?UJVLGtqAd&kiF`5DI z134Op>jz2kCkzl7Hi#hLS2Mk4oV2av4@FS%ig0^ww^h&I?)Ac5zV#^ky3V_#3!Ar# z&YfSdjy;SMSCK>KXZxunh@;NQ_bg=1W+!3A&^z4K_3~ih#9<<)>*bX`AhK!yt>?{u zjZY*bG1X8H`Gfj2ajHD@WyEh0841ti3s%blro8ZIS?BDt!8$%iU8sU@Abw%phafTy z^p8Z7s5f(;shOMHuE^$@G>KBr0X)2?TGl=ZwSiRTz-IeHru@Fw-&Y79-Si`3f={7L z&pFy0DP0~63SidV6uh}u1oeHH*jC-Ex$Nid{xhPtBv6owt#d%oUgBYIK?AvDoa0M2 zBi@5F><|Jt+x{JUrM2_Fbi5)!P)M@Q)!4r`>9)9H>OP3b>or=^m!keYdUHK=4zaz9 z0K*#np2wA#1Ht#dSUul;V2kVFs(9_qqrkg7j)B0%Gm)nN`cRx7x@MvroPUqe3VE9k zydQx4*7iKO?kpGvrHL}9fDCG;F0%IzGQJcu*cCFk8ZjzHu6O4FH$s<(-#+QQGz15< zyk>sm(<8)#jP`Nbuh~(b*->(qm$oI-R4+0I-3|U&HF7-&gHM)0{#zrR%d*Dr-Xx`+ zeT&)3p+jxcrn2({$nY6%(`I1Plt5Qau)Ymiycc6jscQpdDz`uz%h__h6^`I>6c0EW zDUL#48vBAeK|wS01O9R9{B@u_AD5wbm#Tf^(0177@}(<4#c2w1xR3GIeQ|iHDqBQ5 z)-kBnw`a7uGDE&nzfX`hpEDcy`;vIQAdOkcPA^K*mdvs4wG{?!Wg^4h&58~lL_&&P z*1CGZh42$5$1t}qper+kJ(AcW;%#V}Km&!BruFy+bTazoP1^~f1q)MshZx5KKo*>N zr8=Q(Oi$C?&t!~x4sZ*hl6k2^BM}8_v9MbN+HXI4yXiaqXi+uW$n9Wk@*g$-zM^|q zmw&hrIxGF79Q(nyot6-wK*46jZAmkVmXDB+Pm*nzYRpDpeI41>$*-zB!B^?@M`&MT z#moBfs7DHf>mSX!0rG&tb2YGkKHgiFmLs`!n zY}vm7GODbv8Ew0fu&b+)o}5Mu!%2le#GFNW@p307_YcRf9Lob476KUYY&e;u)zR=W z{obcWrjS`blKM%ec$sXV4E0Gjw&H2fm@^nFEKn~Xl@s%iRl@{;V#VH}8fJh4sRt7a z$|viUDg(I}A(F+OcPQP%X>!+9847V}%KL3onJCYN8qocbf{7@?t@G^y-}PA0S+n@Ga*3mn$1UB(6Rtl z`OW4e@zZS;mDvZ@Wf~YbWDAJL6BL@N_}Q?o%gpF_of%Z%U-a3jvtnBIiKm2ehCZvn zetH~I$O|w3xq%o`&97FV<5yU(N$6#u^)@sYjTXd^Cy5}9BanUTp@><6Nnw>h0@AeR zEy0`6o^Oqak4_+yWTt|)4*~e>OMj(tHl1h;g%)O>1`>uqtu)@i#EG*>V!LkoS9UJ; zb+qW%uBUcBVHsMKv4kHqnLLW+RA23{Xc!iTK^qV;MfrGOY+=QNQN3V_kg{IoL?4)) zl`g#(?Q5=frK48tlL$$Qw3%$b)MYI@DaE)*d8#8^J8B8EDROa z;KiE?E+aH>fVd0=e8sWeAv9e2)b@qe@bz7jjDa+s+Wy<09OLcN%%b0fzLDv~ZnXyI zPpPBw!I8E63!#OLJs3&S6j_qKE*vN+Dmcht6Ui9%X~-#R6n=&%f@&>ej4D(cUlJlp zvPqw*9=&%Zt-D(p@$#-zanS*D%9cvGP2l$mtpEd0AWFu;kiy|JHM+Q&`v#1C*#6YX zNz(knj`At>nLGGl>hFf=9Ay^Wv#;jrLY9?cdUohfjCsCT=nKWXbGk^{?L-EX!9MPT z^um5B%i{R3A;LtLT86ju)3_{0`X%P{thF5t(E)o!;J$dU%$!BP(vwugO)$Zu1V_n} z6q!r`?A^S_yOA@8wwnC3r>?@S%-&vKtb<5IL^#C$h>*-#X82hl;TX1Q$b>2*F;$i> z;;#p^bEi*!&zl36*7v!aYD9g|9E@bsEKqm^?n>eZmSqA`Xz^D`mGwHvz$*+I3W%ASiE3tbD zzo;|CP;~X4Ms1~)%cSV(K8H{fA=SVq4_}nGazGe_nVTCw_@*J`Z-Fkz8KN#WH`RWT z+o(PiDrpht3&Rb$fAG`&+X6c2?>rFfk9f&6N>dNY>(Vpm5E#OM^h4^-8J~@z^=%^Q z`=2LMK)5vo4m45LJ!d$Iv<4*khb_hpOv9@gvL$T0fWdKN#H|3ry!O%%SuWw1RxB26 z^za6!5AcfAGs|t=4{;b!u0jwR{@$}5^5-lnW7P4?UIUqMw&Ij0Ol=bapLF@I_9kMGAj$i z?m9~$utMY4^#0r@RC zsw90W;j$^`gHfXC$%8CdUG|@H?nmVs-iKPdZ}gTaR54H6hz6yA^Orh$G-E30<{_M< zLa87kR)$8bARx)U^1XufSsG+}hk;gjF@}$aP(C+ZX%m~YoeSp-QmCIw_`=y*I_!lviNW5bL;GK4vka90YzDihDv}!C-Z_xn|CFRFjF66)moM%Jo8xb^O+BAe0~K1t{?< z{^&9d!zF~VFVboLp;q{^xUKhykh~5h92E61@tnj1+-&E~&cvX;TN|}Rh;Zcb$g(Nv zQX;3&h9c<#OIe^*s0~>*lf~x92SfwD3a4XD< z2mCqZ7g#(?HFf0F!y_Y?ljK*4B_R@Y8sG5i~EY>0K*`^*Ym- zl(9Yez)}8`%<#XXDYFa#Q#2xI6DI4HoOS;$U$8+h5*IN6oqa!EYQlGMbW}f@i?SFm zSZ4V&zl%ww9#a_`kD&+$jKRpt3l)y4pe`56y9)-Rd@9+YM_>z47o9U9DH+y`-uT<@ zyY7OE87LngJ_vC!9D$4yxjmTeDo--B+QLa|&%(uFZ?#aX)(hQ`IQ_6tg)iz=Y4&-6PGpVa;)6F8|&MSLK|F_lj?$ z^5XhrVWqgYyZ5QL`zCCw7pd2;#NUMHuT&{XO1=#mX5M4sGxZa5H&}Ge`3cr>#`XtV ziHk!&6S3ScG}Nk0#fg2BpkrX?AeUi`ON1XSIqF5l(IuBv6gZvwQs~n1$hmnm$5?So+9qUyf^!v3;#(7(Zg(uTX{TN|zr9y;JC<0s5)t zG^dD-tzLSV6!dxxs1GI2UA>mKLwy8OlI*BMFzE#7uFgqGZ?oHz`^5tLsCXTDO3XLXA>swHMWhf3@cz>mRcDtd9IIV|In>%6Q->DYh*w z0iEmWh0QKoSgj@;-}zvWB)(Ns7!409HqT7sbRRcj(99)Bi#8V?;?T-+P<6=vgiatK z`yu#MT&O6lq@Dn}zXS(>Y1#8_obAaRq79%K(87`=`etT?QX7fGD{$68{E{AEL8snA znfpf1-)I@C?il-)Q}l)aM#lM`C(*}gyLU?NrrNIS66SJmz zRNfZz-F!l%ZS%!}4ot{ZBN2YWIqvuah`4%Nv--tMapgW|7C_ms61O3Q&-z&7PeX~V z&kJUOwlQ4G?#fm=*|N>jTg~Jor{L?o0*f?q^*_yp8zPh6z~xN&E{2+Gf3n4Y1^$vQ zns(az;bujH&M@uqDZK!#?!S)A^?2%>W-NZ$p#?^)v>rfjRi743Fba-QTs@^ zCY**1-^e>wO-Ew|W`PvthVuG5IDpn?e21Uz8T}^ey2eS^iZc~o^g|LWGMeO}&0p-e zW-<@h6-!Xt#;?bF39WaX&*fRH;Y*&W-FsBA1o6?{K%Jn>Ts5tBNbQZ!e;5}(nh}3i zF@MZLW#Vwf5KdDthQ22Y2^HDTNlUsO@xmDq*B5fQF{83 zzqphyikOQ_-!6q3K{M$2s`{yCoSRM{+E43AKew*+s`yU&F!Uz)ua2rGC2Wt0yhRVE zB2p)yF5UR=<4GGd>zab6KG54s#Z-!pye7;4C}wh1Dn$+9nAUwXKtf}p_~no-zwme% z>vPhrC7%{R{adKQ;lXHm*gnmP4WE&TMO)@NnTN+hJfp69l0j8F7RxUKTfrW|5J0=< z(N45yZbO6zRg#kUZ!OmoifFk(|b{)X$;b%AoIjp49g(b;|`cgIABv^G#5 z|0!VWjh6Drx4G{Xb~P=10Q8&0J7+YFAXSd6#g6sp&XD(1$)czVRk;-C8!`nh1h!Um9$qZKLrhu{fg_yC0jNKN-NNXCa8sf<6=QHS)W+`ne=Y z3J%9zFrqpAU9g*!KUx!ONvSNbHE=H+%%q__77Uxdw0FcX_NnmqE!f|c%y~+q04)d? zYWroc=N>C>jhmjo}tpyrG0^$jYwW>C@MYD^olANOWFeh7R>=q=5{$l{gQo<3I*qD=?Sm6{$8b zS7fQ&HUqw~70KMW{wWmgsFOyuoBq97D+%}!96W>4+|ir|Fbc$pBz~Z4OKE$=G1&!u z7ma(?vrfcDOJiVR-xWbbo1CR9f|Sna8Cdtn#dS1z$kr|*a7NZM78sHVP)^}W_-G0;PyVi>z zjp4g5QV-_!oac4P?n}|ONqD+`hGY9}lsO0NI^DX^Ccd$NOwxn8C0^5ts0TJ@9#cl> z&KvDs0b?uk3aHKP``()w&n!RKlyrmdC++W%==S7y*nhIymkkIh+e>0)s~>(N#>-Yy zs!!%L1-;7(;lN`dW6;74#rY+kH2kjZZ&^3-uj{2J?Qfw=?ZJ)@?H%tKbdAQQ`*nM? zL~#LbcB{0Pn^Lc|8$E5ztLq;tIMT?7aJO&)wDEN6C*NXz+&IcV(!oa{4)U0y8I1UY z6)<_ttR*`7N!!Nz+Mj9L}Z@N>AD75kn= zTW3_$Sz8Ka%e7qQK3(R_->bKpFZ24clx^rE+-Rt>gIQ8 zUa~wrI~(5Q&_EjLU}Tr-dk>;vKGQ_HIJ|+kJ>>!BaCf0%KJ#`zVdEQ;9a*xzm~i=Z zqqJz=q74zo>Ppqzq=-rFih;aj@whM1DY@%JscqFj*B-UNoO|PLpBmpcwP%!i?#A_C zs!zOCX};vCr_Va&OP~+c$sJF!bCu0}qICBBnU?)*GY0n7vwYKfCx*5C93@MFre9;b zxjz3PI^Y<7qg~|8C3{Ua7|{FHOq4x7nrM$H%P*8Pj&qy=Lc$$UzPb)vO3gJ^^bJmHK!p@i(@$%W*nat&_p{~i z8wPrHy#>gRzqxO1QTLbyGbLOTi$#7==e>Cl@k~F|V#X3|C3pX;6P+zCUh^Y-UjsKM zTHLDrKVsEqE~|N?&>K4hv1;IT|BEBaFO;C&;Wdfv?7Wj<&tNp?{?;WBFk)J-^6`j& z2O8BL`0-K%tAp)rjQ1{>hf5ud8oMj!`FiB{(|ay&*4JL-Yefi7T0{y1Eo~$ND+7ep zd09g~F8i8jFCtetS}F=$MhAplP=_flndQ+BP&A#h``idFNovrNh1=)u(M`rJm&n=X-E}_?{HWA-h9pgmez-hNK(Q<=2S6Vc52`*wlX2T@;_S|BJBxOPOH1&-r`S`%`*lPD(y{bXT>qMoEigjI8;- zf&*Uph94JL^V2M|mB5T1#oOSQxjD`hw=A_#_400}MBUxFz&|+AEYXJhaQ-Dtlqy#& zPZU=;ij-b>EH8Yh_z}sdI46!VA|IO?+~ICKh)Pl zvuBjGOWF#t>e1|Lg8K|?|JtukUzq4^XDu*mtDV@Z=eEhd>xB9~*?8xZpICBPd6?a5 zUiK5sbI|@@FM#l~q%QIOzH^O|S7V)rp03)PqHa!;yatOBQ46KDM$I+q>C>1O_o|ew zF(73nv**b5u&fFb+MEFJ5p1Tzx@8mGWtkYx@9ZVMEtU-|GC#PgP4n1nP8LVh`KAFu z?o?n1%>lNx`*ob%G2v5(QmuK{`0ktr>(wXTS=W44qDdjRW`3h1Ge_ z4)pRArTWuywZmVkJSsPt>VC8&ihs&!n!c6{R2f+m;1cMt?_CadTebf33yYe_@xA}a z-lTq#QXt|1o4NA-7M0aVrmwGN2+Ye{!Yd%u{R<0XIw$-r)%5PcyVoZ&E)y*{Ip_7-J%2bHM_1gWWI)UoWC|qIa@0|9q z@M6azIw+BL9Z!{+N?zq0v*UL@4M&eWE_^7n%h06OL}w%Ynl31u%y!ttgyiT%v)H() zhlE|Ji(~GP+q6sP%cFL7u`vG{rS(yRl@362ALMP=4u_LDPe0%k<{4&%J`K?Zk(T?lcFhk%Fv||{6b@tyw>5! zoT%k7Rex{=m)Eslx2H!UMue4_@|?27Gpn!m0Y zQb(rEi9=-DiUELSwMCnXUl%{awK6cUM-zEHD`t*OQ82Uc5g)FUb@%udo+WD>2&J7{ zxX%83$30%Zd@+CD-O#{o?)!vYZwfQwVNu*ee3zQRd;CL&(u#zX3eUUpx4JGD``J6b z7)Bv+@@1&w4q5dN*#d+q9@CoIuv+vIUFzk)4lGCGr{Ln5r;-zpAH1}~7lyUr1NPBK zc(k^h;s9%uL^VC{QoKJpMWq3>nbe0883Sd1>~mzIrGLG-g`v;f+gF42-_;@-F7wA1 zDIYuH!VaSFgw>W=Pr2;1kGY@guoiZ-1|r{@-^~v$hwtw6U&>i{n|BK8g6Vr2yD~cl zcWBG$!a39+%o@rwCI484IWF!?>j zD1ZEx3H%*AwYU#$G9OUSyXal^MSu+*n(;?XnoXD=KDM&LYIRKH6}6qe@j^KnkVzJc zPsl5Z4InkyHTXu$DQWBEhzPJHgbb?kcDVz{p$s zWeY4vU4!6~8DR6aofPzGJ~KZh6j166IRe!Mc`X!OyQ zxN@CR4F_1)!f@h7%1CUSHW1phP>INst}EZ}T}rGGfybMb{wavx zN5x!BsQk;AI^A;Lr_KzX?WTIB7!P3`TO`dD31&iVR6tkiFFm3p@56qftD_2OLuI`J z$grH*!P@M}-uURx|BXRt5#Krx2SN$~81ORr%z7)~YX$zt@AD)7bcq30_Jsds+&{hi zQGm4F0IU3uU-3d33h#5i!2f5t`K4%3WED3&hDP3cDEH7+C5T@sk!Q)%kzpB3(Oo9i zFpdDAiF6&jNsA6?u^gA9(rva>P&zl3tm^XHhJwXDbhghdd?nR4arBm zLZ-Z2ZX@2;sbdjHUQ7uc@(EN6fDRc7X$f?bExl_!0jeID160iN{pno_h`#1Vzyygf zX3U*RlT-%jYHsxBZ`ik3bevRGecvcdZhw+%B`wC4sZ*D zr}5|S^IPo-nzsTUCS)bP_I+c(S{q6Ar`SIcjpE16yvVV-M6j!7fyx)4oLoM6EXeoE`SOXc~}usfa~U3#>}y~2V?4L05x1BLJsqQ zi^EcbK#a7kE525iA6m_j5GQ`)V`8aC1W0MSl8TI}O+T4i<18phR>04e9_uxL>2)1+J!FSlQO4oiDhuOgq}n#)CMhrdT|WT zA3b8k-X+!wIrqmQr&UHiu(3_9zz}0eIanyKDeRjoLS7RIF{%}=yK}HjQG;YQZxJ?5 z8$1%+7ac55yz+_R=}2pvCq_o8YM~nQM5Ja}BEbbh2DcxTyX`>Q?S8he?zAhTGUB> zunzqM?C7A3fV`hB$l>#7)+?nQ4LO@KZjQ||WE=NpJ9gE?+AXyEwAjV!>>+o0DO8Q1 zs3bgT?df##OPW&O`|s+s(i&BBQl{KU3uWBCl;fStkW7m8FH%ouYHzM0?G+s-4jXfk zrN-^Woa#eb{X&ZE-+^Y2ikfs~k}=5BX%-0opPga351t&x*ry0S}65Kr+=^Il z7)eunm;v|_$fjkuT`vA974+W)+&2l6MqB$bl)_%Aw;v4`M9dwk1PW!+UA9#jjCO30W%IpIk67)3IMxA1L=~5oKvv&aCco~;5w*}|)KYcV zvgzLe)jdn6z$rMa&=Z7^G>XRb55q_A(XTTpz)BH&;?yo08MA|?9=vP2U(I~g8Mp5^ z|9Z;u2$hEl^xpgJ$~lZ^+_8J&i&f*uXuE7KU$2aZODj@<@%<19!JvULaRP9nfY%c& zpg-RS-bq;SNmM|HWZ5bh^V!0?OU;;X=W*~Y(p0lCd+amPrsKP*qhO$#JEH%f?x*fF zTiD=Hh#^ghB2O_-NC!YxkmXN3(=Lwr;U@^ytSWc0fOUHsN->d=rwg^;{!g+~7bEJc zKb+5YNBsRg!n?hx##8|(h0iaY{UGHIA=d0J;j%_u>IFHH#1jPXe|w3*=;Ks@f&E9V ztj6d<_Up_V$?oqvC>0M5)?kqEdcaq+zc^EqnET~y$M?x4qe58s>8|d4qjgGALhd=` znvX01%dw0;&NWDYUEyj{*TZvZDJ|(fTuB{8sY<9o>ibPUTcicr-Cjj5Ak~Y{-Mh|L za@aV~s_zWYVoQ@ODIHvU$)Tz(;^HR!#t}}J1 z`~9=vl;f^V0ICnjyd()UZ1^ie^mBPX=rN0l1h>ItwVSSu3mCO$J(sz8Kk|tgG#*0< zNJaO5_P*B}VtJyh^3!XzV@$)g1cXqDKc4+Y_?L&Fg&cI#*K}At*VoH}v;MWo%08Y6 zM)v9sn?9%2qTeuX=Y5KRjSp;83IZ@`BHUiS3iIDkK8r^Weo4WJCi)2IHvYt%b4fb* zU>wUG(s6UHdtOf$3=vhuPx_?}6zdKg+ZETmM+-?Imq`>;MAqKdR^Ztw_FzIv~`mK+gnVGqv zs6sE0KqjJVmAf>-75)eLbuirZ}1BRNx?_nTlA%KQU}HmGisfGo4&3>;<4r?%CmQ!3DY#i%=Gr>DfgHHEO(UI zJNbQ+*33}VK~E1YXUP;O(EAO7g8>y1^ATC?x3%#B@6H$M=wV*TQgzC&5t2hSQ0-|X zkoF09&F?b@Aw3ctJX@7k9a^2Z9s?0AaTj5+-MKVg2ikk;&2a?IdoS9|%JRha%jlwR zVOX9W2!&`aU9%t{#w&%0#k*(+NZo&9OQQ8q%N!I@{NR`zDx<5E!Dnv4P_0y@b2gQx zaA2Z=qfi@b0ifyhv|-(e@hF`7qR!?nduz;MX(leXp}lZt$70V0lY^*S78rDrJR2m{ zhsA0~7%`E{Fr4sLuz!zSr9~>z+b^j&%#4(b=}RWy_~i^N%Z0HJXR?9@K$#mOah&!Z zrNfItr(Ho`h1xA{gMSTfUd`NOEZvHGv@R=tSi0xgRJ#3{lMnk@w=3BdX*G*7IlCB- z<8>K`;_$Jqh=i~UG*T3yDPbJ?WhmuhS7wRUu{&MsC=WO63I5xFfrmCcTm&O7D%jN3 zg9*z%1KwrKQ`~;Pj|EMYyXJlKEHXaq&9Bgw_E1 zC{wv1)%u)Ly14Ia&elv|ju*-6^H8tH-C&yWAl>Xy0g^uD@y^th#Mx>fadE{e?hDcxRG~@AAyL0!!XFgMh9fL+~V0S}{Rm|?56O?GPY+l%zhJrR3S(E|4KOe~xc8CQ7 z;Hy$^rKag!8SBLT4|=k7Kz?a;b;YiF{19Dgx0K_eA$g(zC2zN?Nr)2WQy45nGqXd>sT= zgj$QlQ!O@K21xZ_Bi=W+dh&juJ%8a(LD`rs_*ei12mM6ZVT_c2jC2js)P)OEq)fIb zuaJy$7rZqmcxG9S{>7okf+pv?GzLiVQ>uKNJ8L%^(N81DyzW(Y=2Pq|9+zFV$!$`; z)$q?QG`l7Y*8u(I`W;%JUw~GYPTwCZa3k)5Q}!oKCPt*q5Vvq=-x0KM%j1;~nS;8x z?wx_D`fWQ4?vEXNUmwV~Ni}lIO}|`x9`dNv%B)iA%(PdeShmw8j|dmPsFsAszVdi- zDUl4YoP0pmRLKAKL;QX$2$qshVai2WSR4Xx{=VlguAQ;7dkS-s-8-}bLzCE(9ufYZKY82S?};!blezNtx1`9jqfJJK7p3G97ugLh1P{=i;x z_YR?J8jLE3OAs2ZX_Eo9nWBSQB>JMiDX0XB1Ytp|80aB2-w4Dwz(X3;?e0iQhh1fo zlW_4omUx7^0EQ6jenTAQ*aOj%PRSm_Ec`Z8en_hKeXz_(L5D%vZI+b*Ti&9`geUiLJG#m)1F_o?r65cy3D z>$FiAVDqifgMeLo))jPH!hdnHao`dxs_MGMxdgJyk5Vcp(a4`Y7r)5pjuRy#DH$hD!Uu5>WV(;@?fh{cd;Q%px7*F*!_1GsBg_V6Q zR~kL5tk#aAi-GUj%73Y`f?Mp}o3_bX13p?;;$_yd@~x$DjLs-hq23DbcRA3->(beG zjlTQvR~5?aclY&4iv7l;D3g~)XNZ*+2~u0dK7mfx^3ev1hEAtcS4eDw5L%w~NFqag ztUl{$Pz(Hsjh}TL0GlDja`Yf4vNGKtb;7;@>=aM)H_FK2B{&$gG5I9PT=H{Bg}GGA z^u6Ey~$lT>NPhW2gsWy9e(WhoPAVAsN3lgK2L38AY6WxzbIGlaHByKU#?kEiDhTlM*edodQSS0grV zCwRzZl#>z5f-G+2sE@iYw;DEAC@=s?H=--TvYnqyy1Y_>apr4hd*?ej1uozCL6#)B4moUgcr@`;G;8aLzgj0Cfrw#fC zwCpu%`fjw8&Vf`c}{U_YU2xx60$ht567u zvru5MEc?bu(XNxzWFZ&$9}jWWN$4<& zRY^ij(V!RRX;EaZBC|8@h1yKj-21;o2``S*P(=6Viyc%^U<*{7zqGje$+NT^|B@zK9-9j)0>^5Vn%P%z3?+Ev7nYISFW|K zxe`mZvJ`E~lKltkN=&ECjhFagx*zYKH-V7pT9GIa7RZ@;88{p0*$sPRxRBS!el@GN zU#HZ#Vw=t5nS0+U_O+;M1N~3vvHnU5K<)mg5xBEWXj7NCGdav&%fcMi>_Ic_nCt&s zbkB zFI7?zKKZBmKm|ln=(1%duw0W20bszO!-mhyC9lY;@u3FDe^;hW-EvduoPC*5+N(+J zGN72D#J3#1IS}SRf8j=3Sw7*njr0$?IIyVbJ7c{1%pIv+BJyg2osS%IDr>v>O(Z@a zG=)eCpJZh_4{1<(U*)XFZg-dv7y9R-!WD`JdLlK&#{3&l>;DE6o2xdgMP5F=M!p{J zPjqZ}*dh9UQ~|ddyB`?*mht~ZoXhGMNi{mM1p1BN&ECTM;;uc(gJvvHzWLwf=D;DMD8{gR$rIz@463u^rU~1-jC2JJ*-b-}+xu>HKpF zN@3x~U(rJ&)3x28AreUnN?O0{Wv!Z1G52^0?3OoQ5d`h0!yGpU#z4TGoEf* zF5;Vf2dkEb0)5V74dWreNjY4^augZ0TV;Cj(D(h7a~5h>s#u2h)aVx6;!J@#Wvaj> z@L50)gc##Wy{jJcYOazUcFuuomVe0OREgIC9wtSC*nk!Kj-hT;(bhzxZpEtar62d5Aa1X|Q{IwRv6Vnc(mJlPD*K zh4nVOF1A(WJx*WVIG;W@1(%Z(Ixz*iBl(g*!fP%%78Auc^`D+P`RNSmUsS%}!Bj^CFLH?~V+i(D6z~wP{m3dYICLes+}X5u{By4uoMk^l@X#VmRnhitxXm}YUjAq=`_6LSr3EdVo&5L^-cYM_AG z7q5IpBVHB%O6PwCZa!gc`xnEhO+D!=oFJ}(Xj5lO#G)p04-SToT= zX#DnFg6bFLsLuUo4V~fubB7lXzOSYOuPCyhbaKmhSq)?Zkb#7B%1J-A0fUNHII`nO znY3Yb^7!5p*aD(KHS1Zi6kYp-t4UpX9ng$3->l&GZynbpEv`$ahNLiHT~t1I^jO7E zky_qFN%XozX)EYg`2EzU#jZNhXLqW{wF=I)o!xtBxgsXu6hoCmewA)FUIiWBo^A0G zNU_Gf=;op=j={QX%cd46!m|wOQ>#n1=UM2jgGKB0ysq*XbNI@@=5KLZo<~|2dn--lcqPXc1t0CRjMU%MqgXI(}or z!T1c=Qby4)wfT{x#?BK8iHp{n#JVlPXC9S<7`19rqne2{bet#UH}pKgIgzYV_|2M4 zV^2jacl`Mlrpp`%TwuAdr@;>VkdwDTjTfsw2b3e$jXaLnjfK#-B(M`I9+Yeblutwj)iGme{w6VDwjaJBas;=^f=eJ z)~zf=zx1e05KxkdXRjk?s_e>6S4{q~`3AdtJsafz>jl_~6jb{=4i78fb6~QQLLB$D ze@G^bBxYlLc;?SL=Bqz_YSdTNxD%#3*RjT_APEv4L1jIcOc|5Lj^34%;gFjp>1;nG z15UF!b!zOkM=-?#&vJBAKS(^IEmNotcqT5jPJ7zudg`+1i~K)sa{{koQ|}W29{Qv> zZm{#UWII$Of+Jqq8wO*>$zbj5>-#00mpq=v z^)$8}*HV~P0~g&Jm!qNN@9TiVJucut0F3(eOAkrHXaEqf;n%nfL%hiEzL6#b#cVOe z1O`w_e)&yL7KSRv#Lq9H4rmuQ@u4X>(F%&swXZwt4D^rU@ z$8!p`w|0xYp-Mb%X#kGncIfB!mbNwd{p1lj_5iij=d_+!hhc`T%By5+OY+rA8m|#G034yjK5a4 zGT{=LXAC}G1m2;a`G<9$^O1a}x#K*U>1oNG|B8D7lO$Ei{+k{NHRi0Q#n19n)l|ZZ zBEWc%yLy~$>@Uatod;@Rr7QhvmkNmaE@&dEP-<0Zu<2G|S&7$G{~&EV)&G{m;c5~#XZQ7OyKihF`th0Z2Pfzld_() zhCy@uUaw4GdHWrIljMrciE*V9034>rrt);OWG8zn_s_ z|8AZ2A~4F#}4c(!n%PtvH36Xo0;cUB(DqO2phm`PJ`UF(sr z=WG~Q-bG^~q*Rw&?eu;r0Lfgw%cRif!@po#f<+ny%tK0ejoFGM0oWsA|cn!Q_f zG>V>*mQ^#k`+v1v^;eY5+g}b>#%H@y4;=WxzFGgrrFt_gzl-wS7&9?bwNWvYBsv^b*mR(Kk4g?zKm_8BvAZn-Sob0_p{?nba``JS!(^5h7MKK zOS}&5ghU9?nO-VW@%v<_%d`xu|DoWKB|=-Rl=@ApQ!b0ym@2cj5PuAm7O51=jO?U$ zFe)=!0&T6ZNEf=I{;rHZqg`vh40>SL^9w|U*nk6&JLS~YJf82%vOMGZ@XRSc+SFyp z)E3(cL}IoElR}bt%86FZk>#9y!NiNA>D6OudjcGhX=$WGpr2TOengEd>*s>qb7m__ z_yiA?6noHHJGKZl$x(W}@J+6?R8b*mM8n=+UZ?vYS`@Es-lvjG!-CBcd9Lv!7<(wD zI8ObI%epfVclJ}1%d&=RtbLXBy$1a-0s1^UY`<^4Y|7v1kt)i|1d@RcN8|>+fB!;{ zX94{K-99vKq+4{ z8^}1xOkyZeQl0DB#6tq>&Dcm)zcTD;KFo80Zc&Db1kTrdnGA8jhOKFdd){y-JjSQF zl+5X?T%ri0+v9o=-ST;N{sq;_e7{N7rN2*o-M)7(&bKYtK#JIbt2 zGE1tYW1ZyG?}~p#0@GoGf2KTIFf*bv^RzyJH(mDTrWJu7qLmrMjy~&C^*?8A3vA8R zZ0NEYTISUK>zZL-_4P%3HzbA##7}I13*vPUa=iu{m`0Ry3ZvYTq+(qC+8vud3MWBE zMa>*f;)n}>Lv;P7cWzz>N4FshQo_caOGxjWoe10S`%S&u2E{u-q{#a5^^HddC~Y!K z8Y%KymBG%ZbPEVQ9ug^`5Y*|f*?<>OkSGpBu_(vQ7X^i{`s~lXQqH>B+KszUhPR>g zsb}15>r_(9qJavRv;E0W%M9t__{T$%DI>Odh3^|>$At2R=anP3zyUQ)0{Hrgo-{1> z)o?9g3MwpC(v&i6eG-#MtMEP?c^G)LxjUi?^76~zAdztA9!p+{SK^mM8}>5{7GK_x^3Vi8b z`cmffg`ZoEbY|&gKemp$;utzqs^`N%^|ao2Oz9858qt^eD5O0HV&avwnpAf_Fk7@t zH-Ty@?#sY3M52DBANm#LLtI#EY6urEaCl+JH2!D;)#qGHy3q8?a)7`9HY*Ty!{=~R z@FrPw!fW<`-=^a2wmhrc;iswPG{50t?G-eua`))@V0Hv6`F-^D8a!rYG;yJI^U_k% zd|cT+E<8df-iGf=rNrZlkXg6;xW2m?@m?CzkF^4R}T&_@!Tijj$0!C7lSM z`0^X2WdT0QipNfNwo5Eg!dad7*!9W<;10LS?noGe_nQe0a6VM7Vf)e2e--wGMRIP$ zr-RixR=VDvlB9zsu+EQt^h=m$@f)3~U*<82C$ ztfQHiyCMyk0JuSU^L-G-C-Mh{qP2Q`tc9ET+`9DI#FqDefy8qrQI;&64=>;pKnR3` z#6Up*!Ib>?DBtl1cJ`#0y!++jVg<< z#0PrYXOLGqjNnxejn1?$=-_0%(+DGQWgOoth1a!1P8Z*R*1IOI@H4*gBw^=2ety~%XO5hdZ@N_769N493jz;4K@i+3uK?xRNdsO`Z28KM-umtu!b3{ z5xHUp2Xb->F|4v3AO_0M`;c)b6CX_iZ>`2MmFT=qgp07_6XROOdUf!^-ghA*(0{Rb z`nAIa#yB<`%AZLSpXap*)_K}Go>=k3hzdqngP4PLm~dcmRhmYnr0BZ&X$|A=Wm}ns zTb*G#OwWB>&G|DKM*F+(A8(AkFW+lwu4FS{BJS~BELUqt*ifd$$54dJCf}6T=NzR{ z^?h0)|GO;@Zae#$iCliz|Gs+(2=CYpM0?qybfv#T;|rd%x$2~(6qddhK)F4%ji=yJ z6N3A)g2?okto4QZ-;jPKm0xdpb!QzOckKpgrL<<0KaF57d%{SBE$-OoP}5t^$WX7a=wc?( zA8|L~H&iA#L+A?R%v zLIqs7d2b|c6_1?wp>|?nDLJ!RBW8TbS{^p85JkbsmFPONB#2wwVnLMk2g*+JC zDSv0UzN(enRDyFm=Pxce*>4WcD|fUeh9P8w`%1>ExDXBZ^5Y0;mh`dRjAuRC!^O?? z{o=;}4n6=fTOqR(_l$HPXl%GM91PjhKZEW_B@#aLA*7mBcqqLWXiSQ=rHXU%3K)g zFh+htw9-hU{*1#pEnVT^X|n9^-?CS43BWpZr>!S{8z)^AEd2fx3HlE8xqPsf7)JeC zhf+F6s(+azHvGgK7XKex{jG<`y63HSlh#pLFj{FXJ{NpCen*BUUfpc?-aPNF&rHR)JRumWAppU@UzRT1)SvFDmMS1BH)a9cyu zbke=lI@xKmD?2$zWXx%jG5w3})XJl_Vjjsym*(fCLGU$ zm8$@LTSCD*WX=3|&!LGf&-~J~lyuzf;rk5IgalFCZ^kvDbvv(5s@@+2O%84SL#(<| zu*=jAHGqaK3;LE9g*o{D4>MWde_BD`kmwq6A|_MpITgdr(TynUUpVDS%0Dl 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 ce +#include +#include +#include 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 {}; - } + const QString iconDir = QStringLiteral(":/icons/database/"); + QStringList iconList; - if (!m_iconCache[index].isNull()) { - return m_iconCache[index]; - } - QImage icon(QStringLiteral(":/icons/database/").append(m_indexToName[index])); - m_iconCache[index] = icon; - return icon; -} - -QPixmap DatabaseIcons::iconPixmap(int index) -{ - if (index < 0 || index >= IconCount) { - qWarning("DatabaseIcons::iconPixmap: invalid icon index %d", index); - return QPixmap(); - } - - QPixmap pixmap; - - if (!QPixmapCache::find(m_pixmapCacheKeys[index], &pixmap)) { - pixmap = QPixmap::fromImage(icon(index)); - m_pixmapCacheKeys[index] = QPixmapCache::insert(pixmap); - } - - return pixmap; -} + const QString badgeDir = QStringLiteral(":/icons/badges/"); + QStringList badgeList; +} // namespace DatabaseIcons::DatabaseIcons() { - Q_STATIC_ASSERT(sizeof(m_indexToName) == IconCount * sizeof(m_indexToName[0])); + // Set the pixmap cache limit to 20 MB + QPixmapCache::setCacheLimit(20480); - m_iconCache.reserve(IconCount); - m_iconCache.resize(IconCount); - m_pixmapCacheKeys.reserve(IconCount); - m_pixmapCacheKeys.resize(IconCount); + iconList = QDir(iconDir).entryList(QDir::NoFilter, QDir::Name); + badgeList = QDir(badgeDir).entryList(QDir::NoFilter, QDir::Name); } DatabaseIcons* DatabaseIcons::instance() @@ -149,3 +54,55 @@ DatabaseIcons* DatabaseIcons::instance() return m_instance; } + +QPixmap DatabaseIcons::icon(int index, IconSize size) +{ + 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::Default)); + icon.addPixmap(icon.pixmap(IconSize::Medium)); + icon.addPixmap(icon.pixmap(IconSize::Large)); + m_iconCache.insert(cacheKey, icon); + } + + return icon.pixmap(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::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); + + QPixmapCache::insert(cacheKey, pixmap); + } + + return pixmap; +} + +int DatabaseIcons::count() +{ + return iconList.size(); +} diff --git a/src/core/DatabaseIcons.h b/src/core/DatabaseIcons.h index ecd38fd8a..9f33644ee 100644 --- a/src/core/DatabaseIcons.h +++ b/src/core/DatabaseIcons.h @@ -18,32 +18,32 @@ #ifndef KEEPASSX_DATABASEICONS_H #define KEEPASSX_DATABASEICONS_H -#include -#include -#include -#include +#include "core/Global.h" +#include 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(); private: DatabaseIcons(); static DatabaseIcons* m_instance; - - static const char* const m_indexToName[]; - QVector m_iconCache; - QVector m_pixmapCacheKeys; + QHash m_iconCache; Q_DISABLE_COPY(DatabaseIcons) }; diff --git a/src/core/Entry.cpp b/src/core/Entry.cpp index a5e372d07..fc553f9e5 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 @@ -1104,9 +1100,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()); } } diff --git a/src/core/Entry.h b/src/core/Entry.h index 3d42692c8..cbaf3e2c0 100644 --- a/src/core/Entry.h +++ b/src/core/Entry.h @@ -31,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; @@ -81,8 +82,7 @@ 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; QString foregroundColor() const; diff --git a/src/core/Global.h b/src/core/Global.h index 0821687e3..9cb890299 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 = 24, + Medium = 32, + Large = 40 +}; + template struct AddConst { typedef const T Type; diff --git a/src/core/Group.cpp b/src/core/Group.cpp index 7ce795f14..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 const int Group::DefaultIconNumber = 48; @@ -128,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 { @@ -140,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 @@ -452,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()); } } diff --git a/src/core/Group.h b/src/core/Group.h index 7adabc8b5..8ff33d8d0 100644 --- a/src/core/Group.h +++ b/src/core/Group.h @@ -21,12 +21,12 @@ #include #include -#include #include #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; diff --git a/src/core/Merger.cpp b/src/core/Merger.cpp index 2becd8a68..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())); } } diff --git a/src/core/Metadata.cpp b/src/core/Metadata.cpp index c0cb9bb6f..67a58b068 100644 --- a/src/core/Metadata.cpp +++ b/src/core/Metadata.cpp @@ -16,6 +16,7 @@ */ #include "Metadata.h" +#include #include #include "core/Clock.h" @@ -64,8 +65,7 @@ void Metadata::clear() { init(); m_customIcons.clear(); - m_customIconCacheKeys.clear(); - m_customIconScaledCacheKeys.clear(); + m_customIconsRaw.clear(); m_customIconsOrder.clear(); m_customIconsHashes.clear(); m_customData->clear(); @@ -178,62 +178,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; + if (!hasCustomIcon(uuid)) { + return {}; } - - QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid]; - - if (!QPixmapCache::find(cacheKey, &pixmap)) { - pixmap = QPixmap::fromImage(m_customIcons.value(uuid)); - QPixmapCache::insert(pixmap); - } - - return pixmap; + return m_customIcons.value(uuid).pixmap(size); } -QPixmap Metadata::customIconScaledPixmap(const QUuid& uuid, const QSize& size) const -{ - QPixmap pixmap; - - if (!m_customIcons.contains(uuid)) { - return pixmap; - } - - QImage image = m_customIcons.value(uuid).scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - pixmap = QPixmap::fromImage(image); - - return pixmap; -} - -bool Metadata::containsCustomIcon(const QUuid& uuid) const -{ - return m_customIcons.contains(uuid); -} - -QHash Metadata::customIcons() const -{ - return m_customIcons; -} - -QHash Metadata::customIconsScaledPixmaps(const QSize& size) const +QHash Metadata::customIconsPixmaps(IconSize size) const { QHash result; for (const QUuid& uuid : m_customIconsOrder) { - result.insert(uuid, customIconScaledPixmap(uuid, size)); + result.insert(uuid, customIconPixmap(uuid, size)); } return result; } +bool Metadata::hasCustomIcon(const QUuid& uuid) const +{ + return m_customIconsRaw.contains(uuid); +} + QList Metadata::customIconsOrder() const { return m_customIconsOrder; @@ -387,57 +358,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(); -} + Q_ASSERT(m_customIconsRaw.count() == m_customIconsOrder.count()); -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); + // 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(IconSize::Default)); + icon.addPixmap(icon.pixmap(IconSize::Medium)); + icon.addPixmap(icon.pixmap(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(); } @@ -450,9 +418,9 @@ QUuid Metadata::findCustomIcon(const QImage& candidate) void Metadata::copyCustomIcons(const QSet& 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)); } } diff --git a/src/core/Metadata.h b/src/core/Metadata.h index 0bf591471..c61bfacb2 100644 --- a/src/core/Metadata.h +++ b/src/core/Metadata.h @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -28,6 +29,7 @@ #include #include "core/CustomData.h" +#include "core/Global.h" class Database; class Group; @@ -82,13 +84,11 @@ public: bool protectUrl() const; bool protectNotes() const; QImage customIcon(const QUuid& uuid) const; - QPixmap customIconPixmap(const QUuid& uuid) const; - QPixmap customIconScaledPixmap(const QUuid& uuid, const QSize& size = {16, 16}) const; - bool containsCustomIcon(const QUuid& uuid) const; - QHash customIcons() const; + bool hasCustomIcon(const QUuid& uuid) const; + QPixmap customIconPixmap(const QUuid& uuid, IconSize size = IconSize::Default) const; + QHash customIconsPixmaps(IconSize size = IconSize::Default) const; QList customIconsOrder() const; bool recycleBinEnabled() const; - QHash customIconsScaledPixmaps(const QSize& size = {16, 16}) const; Group* recycleBin(); const Group* recycleBin() const; QDateTime recycleBinChanged() const; @@ -122,8 +122,7 @@ public: 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& iconList, const Metadata* otherMetadata); QUuid findCustomIcon(const QImage& candidate); @@ -161,9 +160,8 @@ private: MetadataData m_data; - QHash m_customIcons; - mutable QHash m_customIconCacheKeys; - mutable QHash m_customIconScaledCacheKeys; + QHash m_customIcons; + QHash m_customIconsRaw; QList m_customIconsOrder; QHash m_customIconsHashes; diff --git a/src/fdosecrets/widgets/SettingsModels.cpp b/src/fdosecrets/widgets/SettingsModels.cpp index 3337ad8c5..1382f1f0e 100644 --- a/src/fdosecrets/widgets/SettingsModels.cpp +++ b/src/fdosecrets/widgets/SettingsModels.cpp @@ -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; diff --git a/src/format/HtmlExporter.cpp b/src/format/HtmlExporter.cpp index cd3654e36..812af7868 100644 --- a/src/format/HtmlExporter.cpp +++ b/src/format/HtmlExporter.cpp @@ -21,6 +21,7 @@ #include #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" @@ -142,7 +143,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat // Header line auto header = QString("

"); - header.append(PixmapToHTML(group.iconScaledPixmap())); + header.append(PixmapToHTML(group.iconPixmap(IconSize::Medium))); header.append(" "); header.append(path); header.append("

\n"); @@ -166,7 +167,7 @@ bool HtmlExporter::writeGroup(QIODevice& device, const Group& group, QString pat auto item = QString("

"); // Begin formatting this item into HTML - item.append(PixmapToHTML(entry->iconScaledPixmap())); + item.append(PixmapToHTML(entry->iconPixmap(IconSize::Medium))); item.append(" "); item.append(entry->title().toHtmlEscaped()); item.append("

\n" diff --git a/src/format/KdbxXmlReader.cpp b/src/format/KdbxXmlReader.cpp index f4109a4df..4ab5c9d03 100644 --- a/src/format/KdbxXmlReader.cpp +++ b/src/format/KdbxXmlReader.cpp @@ -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); diff --git a/src/gui/EditWidgetIcons.cpp b/src/gui/EditWidgetIcons.cpp index c9a0c0310..9ffb80ae5 100644 --- a/src/gui/EditWidgetIcons.cpp +++ b/src/gui/EditWidgetIcons.cpp @@ -132,7 +132,7 @@ void EditWidgetIcons::load(const QUuid& currentUuid, m_currentUuid = currentUuid; setUrl(url); - m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps({24, 24}), + m_customIconModel->setIcons(database->metadata()->customIconsPixmaps(IconSize::Default), database->metadata()->customIconsOrder()); QUuid iconUuid = iconStruct.uuid; @@ -294,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({24, 24}), + m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), m_db->metadata()->customIconsOrder()); added = true; } @@ -378,7 +378,7 @@ void EditWidgetIcons::removeCustomIcon() // Remove the icon from the database m_db->metadata()->removeCustomIcon(iconUuid); - m_customIconModel->setIcons(m_db->metadata()->customIconsScaledPixmaps({24, 24}), + m_customIconModel->setIcons(m_db->metadata()->customIconsPixmaps(IconSize::Default), m_db->metadata()->customIconsOrder()); // Reset the current icon view diff --git a/src/gui/EntryPreviewWidget.cpp b/src/gui/EntryPreviewWidget.cpp index 06152c554..9332bb2d0 100644 --- a/src/gui/EntryPreviewWidget.cpp +++ b/src/gui/EntryPreviewWidget.cpp @@ -162,7 +162,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() @@ -315,7 +315,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() @@ -399,14 +399,6 @@ 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("] > ["); 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 m_ui; diff --git a/src/gui/IconModels.cpp b/src/gui/IconModels.cpp index 098089266..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(); 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 8274968b7..330a9cd6a 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -1103,7 +1103,7 @@ 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); } diff --git a/src/gui/entry/EntryModel.cpp b/src/gui/entry/EntryModel.cpp index e6311f6b5..6438f8ed1 100644 --- a/src/gui/entry/EntryModel.cpp +++ b/src/gui/entry/EntryModel.cpp @@ -271,14 +271,11 @@ 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 resources()->icon("paperclip"); diff --git a/src/gui/group/EditGroupWidget.cpp b/src/gui/group/EditGroupWidget.cpp index f77ae92d8..b77e49864 100644 --- a/src/gui/group/EditGroupWidget.cpp +++ b/src/gui/group/EditGroupWidget.cpp @@ -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/GroupModel.cpp b/src/gui/group/GroupModel.cpp index a9b61315d..beba13774 100644 --- a/src/gui/group/GroupModel.cpp +++ b/src/gui/group/GroupModel.cpp @@ -130,12 +130,7 @@ 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()) { @@ -304,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/keeshare/KeeShare.cpp b/src/keeshare/KeeShare.cpp index beff3d950..31136a5c4 100644 --- a/src/keeshare/KeeShare.cpp +++ b/src/keeshare/KeeShare.cpp @@ -190,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) diff --git a/src/keeshare/ShareExport.cpp b/src/keeshare/ShareExport.cpp index c17c5052c..1f7180d04 100644 --- a/src/keeshare/ShareExport.cpp +++ b/src/keeshare/ShareExport.cpp @@ -77,7 +77,7 @@ namespace targetEntry->setGroup(targetRoot); targetEntry->setUpdateTimeinfo(updateTimeinfo); 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/tests/TestEntryModel.cpp b/tests/TestEntryModel.cpp index 26cb0dfec..5df4b9ed9 100644 --- a/tests/TestEntryModel.cpp +++ b/tests/TestEntryModel.cpp @@ -230,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; diff --git a/tests/TestGroup.cpp b/tests/TestGroup.cpp index a9acb3dcc..28a9f7ec4 100644 --- a/tests/TestGroup.cpp +++ b/tests/TestGroup.cpp @@ -336,12 +336,12 @@ void TestGroup::testCopyCustomIcon() QScopedPointer 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)); diff --git a/tests/TestKeePass1Reader.cpp b/tests/TestKeePass1Reader.cpp index 30f744e28..cf0aa414e 100644 --- a/tests/TestKeePass1Reader.cpp +++ b/tests/TestKeePass1Reader.cpp @@ -112,7 +112,7 @@ void TestKeePass1Reader::testMasterKey() 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 df414f5c0..f58d0a885 100644 --- a/tests/TestKeePass2Format.cpp +++ b/tests/TestKeePass2Format.cpp @@ -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); 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/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 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(); 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 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(); 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/makeicons.sh b/utils/makeappicons.sh similarity index 100% rename from utils/makeicons.sh rename to utils/makeappicons.sh 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 From b5554e05d82f752bbffb54b417960186d16024ca Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 23 May 2020 11:05:44 -0400 Subject: [PATCH 2/3] Improve application icons * Add icons for Database Import, Database Export, and Recent Databases * Change app exit icon to be distinct from export icon * Updated and ran makeappicons.sh --- COPYING | 3 ++ .../scalable/actions/application-exit.svg | 2 +- .../scalable/actions/clipboard-text.svg | 2 +- .../scalable/actions/configure.svg | 2 +- .../scalable/actions/document-export.svg | 1 + .../scalable/actions/document-import.svg | 1 + .../scalable/actions/document-open-recent.svg | 1 + .../scalable/actions/entry-clone.svg | 2 +- .../scalable/actions/entry-delete.svg | 2 +- .../scalable/actions/entry-edit.svg | 2 +- .../scalable/actions/entry-new.svg | 2 +- .../scalable/actions/move-down.svg | 2 +- .../application/scalable/actions/move-up.svg | 2 +- .../application/scalable/actions/refresh.svg | 2 +- .../actions/sort-alphabetical-ascending.svg | 2 +- .../actions/sort-alphabetical-descending.svg | 2 +- .../scalable/status/dialog-error.svg | 2 +- share/icons/icons.qrc | 5 +- src/gui/MainWindow.cpp | 3 ++ utils/makeappicons.sh | 48 +++++++++++-------- 20 files changed, 55 insertions(+), 33 deletions(-) create mode 100644 share/icons/application/scalable/actions/document-export.svg create mode 100644 share/icons/application/scalable/actions/document-import.svg create mode 100644 share/icons/application/scalable/actions/document-open-recent.svg diff --git a/COPYING b/COPYING index 11f5ee0b7..174848e46 100644 --- a/COPYING +++ b/COPYING @@ -142,8 +142,11 @@ 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 diff --git a/share/icons/application/scalable/actions/application-exit.svg b/share/icons/application/scalable/actions/application-exit.svg index aea8b16ad..0c820cf06 100644 --- a/share/icons/application/scalable/actions/application-exit.svg +++ b/share/icons/application/scalable/actions/application-exit.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 88e025e02..a6ad04e2e 100644 --- a/share/icons/application/scalable/actions/clipboard-text.svg +++ b/share/icons/application/scalable/actions/clipboard-text.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/actions/configure.svg b/share/icons/application/scalable/actions/configure.svg index 6ab8c5e7c..5cacc6ff7 100644 --- a/share/icons/application/scalable/actions/configure.svg +++ b/share/icons/application/scalable/actions/configure.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 @@ + \ 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 @@ + \ 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 @@ + \ 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 index 001d98242..5cac2bbec 100644 --- a/share/icons/application/scalable/actions/entry-clone.svg +++ b/share/icons/application/scalable/actions/entry-clone.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index dad58cf89..66ae96f1b 100644 --- a/share/icons/application/scalable/actions/entry-delete.svg +++ b/share/icons/application/scalable/actions/entry-delete.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 6e0b0afa8..174a1abce 100644 --- a/share/icons/application/scalable/actions/entry-edit.svg +++ b/share/icons/application/scalable/actions/entry-edit.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 3fe6bec7e..eec7f0724 100644 --- a/share/icons/application/scalable/actions/entry-new.svg +++ b/share/icons/application/scalable/actions/entry-new.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index edcf11814..bc5edfb07 100644 --- a/share/icons/application/scalable/actions/move-down.svg +++ b/share/icons/application/scalable/actions/move-down.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 7ba0a9f13..ac6f52c17 100644 --- a/share/icons/application/scalable/actions/move-up.svg +++ b/share/icons/application/scalable/actions/move-up.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/application/scalable/actions/refresh.svg b/share/icons/application/scalable/actions/refresh.svg index ebe3f16e7..767162cb6 100644 --- a/share/icons/application/scalable/actions/refresh.svg +++ b/share/icons/application/scalable/actions/refresh.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 50d98a418..754e90a28 100644 --- a/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg +++ b/share/icons/application/scalable/actions/sort-alphabetical-ascending.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 602ea069d..4dbaadbe2 100644 --- a/share/icons/application/scalable/actions/sort-alphabetical-descending.svg +++ b/share/icons/application/scalable/actions/sort-alphabetical-descending.svg @@ -1 +1 @@ - \ No newline at end of file + \ 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 index 4cec1e30d..0a6c3e674 100644 --- a/share/icons/application/scalable/status/dialog-error.svg +++ b/share/icons/application/scalable/status/dialog-error.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index c1d74ba84..a02106d21 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -18,8 +18,11 @@ application/scalable/actions/dialog-ok.svg application/scalable/actions/document-close.svg application/scalable/actions/document-edit.svg + application/scalable/actions/document-export.svg + application/scalable/actions/document-import.svg application/scalable/actions/document-new.svg application/scalable/actions/document-open.svg + application/scalable/actions/document-open-recent.svg application/scalable/actions/document-properties.svg application/scalable/actions/document-save.svg application/scalable/actions/document-save-as.svg @@ -53,7 +56,7 @@ application/scalable/actions/password-generator.svg application/scalable/actions/password-show-off.svg application/scalable/actions/password-show-on.svg - application/scalable/actions/refresh.svg + application/scalable/actions/refresh.svg application/scalable/actions/reports.svg application/scalable/actions/reports-exclude.svg application/scalable/actions/sort-alphabetical-ascending.svg diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index eed3a903a..1cf4d46f0 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -327,6 +327,7 @@ MainWindow::MainWindow() 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")); @@ -337,6 +338,8 @@ MainWindow::MainWindow() 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")); diff --git a/utils/makeappicons.sh b/utils/makeappicons.sh index feb2d25fe..707a24b21 100644 --- a/utils/makeappicons.sh +++ b/utils/makeappicons.sh @@ -38,22 +38,27 @@ # # 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 check-out directory of the material icons repository" + 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 "Material check-out directory doesn't exist: $MATERIAL" + echo -e "${RED}Material Icons directory does not exist: ${MATERIAL}${NC}" exit 1 fi -if [ ! -d application ];then - echo "Please run this script from within the share/icons directory" - echo "of the KeePassXC source distribution." +# 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 @@ -65,24 +70,28 @@ fi # If the icon name is unknown, outputs nothing. map() { case "$1" in - application-exit) echo exit-to-app ;; + application-exit) echo exit-run ;; auto-type) echo keyboard-variant ;; bugreport) echo bug-outline ;; chronometer) echo clock-outline ;; - configure) echo settings-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-octagon ;; + 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 ;; @@ -90,12 +99,11 @@ map() { donate) echo gift-outline ;; edit-clear-locationbar-ltr) echo backspace-reverse-outline ;; edit-clear-locationbar-rtl) echo backspace-outline ;; - entry-clone) echo comment-multiple-outline ;; - entry-delete) echo comment-remove-outline ;; - entry-edit) echo comment-edit-outline ;; - entry-new) echo comment-plus-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 ;; - freedesktop) echo freedesktop-dot-org ;; getting-started) echo lightbulb-on-outline ;; group-delete) echo folder-remove-outline ;; group-edit) echo folder-edit-outline ;; @@ -104,8 +112,8 @@ map() { health) echo heart-pulse ;; help-about) echo information-outline ;; internet-web-browser) echo web ;; - key-enter) echo keyboard-variant ;; 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 ;; @@ -117,9 +125,10 @@ map() { password-generator) echo dice-3-outline ;; password-show-off) echo eye-off-outline ;; password-show-on) echo eye-outline ;; - preferences-other) echo file-document-edit-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 ;; @@ -139,7 +148,7 @@ map() { } # Now do the actual work -find application -type f -name "*.svg" | while read -r DST;do +find $DSTDIR -type f -name "*.svg" | while read -r DST;do # Find the icon name (base name without extender) NAME=$(basename $DST .svg) @@ -147,18 +156,19 @@ find application -type f -name "*.svg" | while read -r DST;do # Find the base name of the svg file for this icon MAT=$(map $NAME) if [[ -z $MAT ]];then - echo "Warning: Don't know about $NAME" + 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 "Error: Source for $NAME doesn't exist: $SRC" - exit 1 + 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 From 4de99cfe8e2ff1ce41a4854c3281b6ed283c2126 Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Wed, 27 May 2020 17:53:42 +0200 Subject: [PATCH 3/3] Extract highest resolution from downloaded ICO files --- share/demo.kdbx | Bin 65637 -> 70021 bytes src/core/IconDownloader.cpp | 33 ++++++++++++++++++++++++++++++++- src/core/IconDownloader.h | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/share/demo.kdbx b/share/demo.kdbx index 736fe7544ad1684e5d8e2ad709e37dcb40b7682f..5195cd19dd5ad77d50822707f4b7ae626b73db4c 100644 GIT binary patch literal 70021 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 m^xw?+TWqoR%FIV +#include #include #define MAX_REDIRECTS 5 @@ -188,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); } } @@ -206,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;