From 1867c92b2c869f148ac0ba2b523bdfdd6141cbad Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 30 Jul 2024 11:28:56 -0300 Subject: [PATCH 01/17] Fixed kibanaserver change password --- unattended_installer/passwords_tool/passwordsFunctions.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/unattended_installer/passwords_tool/passwordsFunctions.sh b/unattended_installer/passwords_tool/passwordsFunctions.sh index 9bb516f8c0..2316640338 100644 --- a/unattended_installer/passwords_tool/passwordsFunctions.sh +++ b/unattended_installer/passwords_tool/passwordsFunctions.sh @@ -17,7 +17,7 @@ function passwords_changePassword() { for i in "${!passwords[@]}" do if [ -n "${indexer_installed}" ] && [ -f "/etc/wazuh-indexer/backup/internal_users.yml" ]; then - awk -v new=${hashes[i]} 'prev=="'${users[i]}':"{sub(/\042.*/,""); $0=$0 new} {prev=$1} 1' /etc/wazuh-indexer/backup/internal_users.yml > internal_users.yml_tmp && mv -f internal_users.yml_tmp /etc/wazuh-indexer/backup/internal_users.yml + awk -v new='"'"${hashes[i]}"'"' 'prev=="'${users[i]}':"{sub(/\042.*/,""); $0=$0 new} {prev=$1} 1' /etc/wazuh-indexer/backup/internal_users.yml > internal_users.yml_tmp && mv -f internal_users.yml_tmp /etc/wazuh-indexer/backup/internal_users.yml fi if [ "${users[i]}" == "admin" ]; then @@ -277,10 +277,11 @@ function passwords_generatePassword() { function passwords_generatePasswordFile() { common_logger -d "Generating password file." - users=( admin kibanaserver kibanaro logstash readall snapshotrestore ) + users=( admin anomalyadmin kibanaserver kibanaro logstash readall snapshotrestore ) api_users=( wazuh wazuh-wui ) user_description=( "Admin user for the web user interface and Wazuh indexer. Use this user to log in to Wazuh dashboard" + "Anomaly detection user for the web user interface" "Wazuh dashboard user for establishing the connection with Wazuh indexer" "Regular Dashboard user, only has read permissions to all indices and all permissions on the .kibana index" "Filebeat user for CRUD operations on Wazuh indices" From 5782db973f687480a9e3a8f0ee1d9636eb9d355c Mon Sep 17 00:00:00 2001 From: Raul Del Pozo Moreno Date: Wed, 7 Aug 2024 13:27:53 +0200 Subject: [PATCH 02/17] Removed migrated code --- debs/Debian/7/amd64/Dockerfile | 42 - debs/Debian/7/i386/Dockerfile | 45 - debs/Debian/8/amd64/Dockerfile | 43 - debs/Debian/9/arm64/Dockerfile | 45 - debs/Debian/9/armhf/Dockerfile | 46 - debs/Debian/9/ppc64le/Dockerfile | 45 - debs/README.md | 30 - debs/SPECS/wazuh-agent/debian/changelog | 673 --- debs/SPECS/wazuh-agent/debian/compat | 1 - debs/SPECS/wazuh-agent/debian/conffiles | 0 debs/SPECS/wazuh-agent/debian/control | 14 - debs/SPECS/wazuh-agent/debian/copyright | 38 - debs/SPECS/wazuh-agent/debian/postinst | 214 - debs/SPECS/wazuh-agent/debian/postrm | 65 - debs/SPECS/wazuh-agent/debian/preinst | 85 - debs/SPECS/wazuh-agent/debian/prerm | 63 - debs/SPECS/wazuh-agent/debian/rules | 161 - debs/SPECS/wazuh-agent/debian/source/format | 1 - debs/SPECS/wazuh-agent/debian/templates | 4 - .../debian/wazuh-agent.lintian-overrides | 9 - debs/SPECS/wazuh-manager/debian/changelog | 604 --- debs/SPECS/wazuh-manager/debian/compat | 1 - debs/SPECS/wazuh-manager/debian/conffiles | 0 debs/SPECS/wazuh-manager/debian/control | 15 - debs/SPECS/wazuh-manager/debian/copyright | 22 - debs/SPECS/wazuh-manager/debian/postinst | 322 -- debs/SPECS/wazuh-manager/debian/postrm | 74 - debs/SPECS/wazuh-manager/debian/preinst | 166 - debs/SPECS/wazuh-manager/debian/prerm | 84 - debs/SPECS/wazuh-manager/debian/rules | 245 - debs/SPECS/wazuh-manager/debian/source/format | 1 - .../debian/wazuh-manager.lintian-overrides | 9 - debs/build.sh | 130 - debs/gen_permissions.sh | 30 - debs/generate_debian_package.sh | 308 -- macos/README.md | 30 - macos/entitlements.plist | 22 - macos/generate_wazuh_packages.sh | 429 -- macos/package_files/build.sh | 82 - macos/package_files/introduction.txt | 9 - macos/package_files/postinstall.sh | 155 - macos/package_files/preinstall.sh | 143 - macos/specs/wazuh-agent-arm64.pkgproj | 1255 ----- macos/specs/wazuh-agent-intel64.pkgproj | 1254 ----- macos/uninstall.sh | 33 - rpms/CentOS/5/i386/.gitignore | 3 - rpms/CentOS/5/i386/CentOS-Base.repo | 67 - rpms/CentOS/5/i386/Dockerfile | 53 - rpms/CentOS/5/i386/Vagrantfile | 21 - rpms/CentOS/5/i386/docker_builder.sh | 91 - rpms/CentOS/5/x86_64/CentOS-Base.repo | 67 - rpms/CentOS/5/x86_64/Dockerfile | 56 - rpms/CentOS/6/i386/CentOS-Base.repo | 47 - rpms/CentOS/6/i386/Dockerfile | 73 - rpms/CentOS/6/x86_64/CentOS-Base.repo | 54 - rpms/CentOS/6/x86_64/Dockerfile | 73 - rpms/CentOS/7/aarch64/Dockerfile | 82 - rpms/CentOS/7/armv7hl/Dockerfile | 66 - rpms/CentOS/7/armv7hl/build_deps.sh | 318 -- rpms/CentOS/7/ppc64le/Dockerfile | 56 - rpms/CentOS/7/x86_64/Dockerfile | 69 - rpms/README.md | 30 - rpms/SPECS/wazuh-agent.spec | 868 ---- rpms/SPECS/wazuh-manager.spec | 1115 ---- rpms/build.sh | 145 - rpms/generate_rpm_package.sh | 369 -- stack/dashboard/base/builder.sh | 333 -- stack/dashboard/base/docker/Dockerfile | 34 - .../Assets/Favicons/Logos white.ai | 1860 ------- .../Favicons/android-chrome-192x192.png | Bin 6424 -> 0 bytes .../Favicons/android-chrome-512x512.png | Bin 17660 -> 0 bytes .../Assets/Favicons/apple-touch-icon.png | Bin 4969 -> 0 bytes .../Assets/Favicons/browserconfig.xml | 9 - .../Assets/Favicons/favicon-16x16.png | Bin 1267 -> 0 bytes .../Assets/Favicons/favicon-32x32.png | Bin 1751 -> 0 bytes .../Assets/Favicons/favicon.ico | Bin 2270 -> 0 bytes .../Assets/Favicons/manifest.json | 19 - .../Assets/Favicons/mstile-144x144.png | Bin 4969 -> 0 bytes .../Assets/Favicons/mstile-150x150.png | Bin 14138 -> 0 bytes .../Assets/Favicons/mstile-310x150.png | Bin 3411 -> 0 bytes .../Assets/Favicons/mstile-310x310.png | Bin 9844 -> 0 bytes .../Assets/Favicons/mstile-70x70.png | Bin 2807 -> 0 bytes .../Assets/Favicons/safari-pinned-tab.svg | 13 - .../Assets/default_branding/google_groups.svg | 29 - .../Assets/default_branding/icon_dark.svg | 17 - .../Assets/default_branding/icon_light.svg | 13 - .../Assets/default_branding/opensearch.svg | 13 - .../opensearch_center_mark.svg | 13 - .../opensearch_center_mark_dark.svg | 14 - .../opensearch_dashboards_on_dark.svg | 32 - .../opensearch_dashboards_on_light.svg | 23 - .../default_branding/opensearch_mark.svg | 13 - .../opensearch_mark_on_dark.svg | 14 - .../opensearch_mark_on_light.svg | 13 - .../default_branding/opensearch_on_dark.svg | 14 - .../default_branding/opensearch_on_light.svg | 13 - .../default_branding/opensearch_spinner.svg | 13 - .../opensearch_spinner_on_dark.svg | 14 - .../opensearch_spinner_on_light.svg | 13 - .../wazuh_dashboard_login_background.svg | 758 --- .../wazuh_dashboard_login_mark.svg | 51 - .../etc/custom_welcome/light_theme.style.css | 4481 ----------------- .../files/etc/custom_welcome/template.js.hbs | 111 - .../dashboard/base/files/etc/http_service.js | 182 - stack/dashboard/base/files/etc/node.options | 9 - .../base/files/etc/opensearch_dashboards.yml | 15 - .../dashboard/base/files/etc/services/default | 8 - .../base/files/etc/services/wazuh-dashboard | 170 - .../etc/services/wazuh-dashboard.service | 15 - stack/dashboard/base/files/etc/styles.js | 189 - stack/dashboard/base/files/etc/template.js | 260 - stack/dashboard/base/generate_base.sh | 156 - stack/dashboard/deb/build_package.sh | 275 - stack/dashboard/deb/builder.sh | 108 - stack/dashboard/deb/debian/changelog | 197 - stack/dashboard/deb/debian/compat | 1 - stack/dashboard/deb/debian/control | 12 - stack/dashboard/deb/debian/copyright | 22 - stack/dashboard/deb/debian/postinst | 68 - stack/dashboard/deb/debian/postrm | 87 - stack/dashboard/deb/debian/preinst | 76 - stack/dashboard/deb/debian/prerm | 84 - stack/dashboard/deb/debian/rules | 126 - stack/dashboard/deb/docker/amd64/Dockerfile | 16 - stack/dashboard/rpm/build_package.sh | 276 - stack/dashboard/rpm/builder.sh | 104 - stack/dashboard/rpm/docker/x86_64/Dockerfile | 24 - stack/dashboard/rpm/wazuh-dashboard.spec | 412 -- stack/indexer/base/builder.sh | 99 - stack/indexer/base/docker/Dockerfile | 15 - .../base/files/etc/init.d/wazuh-indexer | 162 - .../base/files/etc/sysconfig/wazuh-indexer | 55 - .../base/files/etc/wazuh-indexer/jvm.options | 86 - .../files/etc/wazuh-indexer/opensearch.yml | 42 - stack/indexer/base/files/systemd-entrypoint | 18 - .../files/usr/lib/sysctl.d/wazuh-indexer.conf | 1 - ...wazuh-indexer-performance-analyzer.service | 16 - .../lib/systemd/system/wazuh-indexer.service | 64 - .../usr/lib/tmpfiles.d/wazuh-indexer.conf | 1 - stack/indexer/base/generate_base.sh | 125 - stack/indexer/deb/build_package.sh | 188 - stack/indexer/deb/builder.sh | 70 - stack/indexer/deb/debian/changelog | 197 - stack/indexer/deb/debian/compat | 1 - stack/indexer/deb/debian/control | 15 - stack/indexer/deb/debian/copyright | 22 - stack/indexer/deb/debian/postinst | 146 - stack/indexer/deb/debian/postrm | 103 - stack/indexer/deb/debian/preinst | 96 - stack/indexer/deb/debian/prerm | 89 - stack/indexer/deb/debian/rules | 183 - stack/indexer/deb/docker/amd64/Dockerfile | 19 - stack/indexer/indexer-security-init.sh | 189 - stack/indexer/rpm/build_package.sh | 187 - stack/indexer/rpm/builder.sh | 69 - stack/indexer/rpm/docker/x86_64/Dockerfile | 14 - stack/indexer/rpm/wazuh-indexer.spec | 747 --- wazuhapp/kibana/Docker/Dockerfile | 20 - wazuhapp/kibana/Docker/build.sh | 149 - wazuhapp/kibana/README.md | 31 - wazuhapp/kibana/generate_wazuh_app.sh | 119 - .../opensearch-dashboards/Docker/Dockerfile | 23 - .../opensearch-dashboards/Docker/build.sh | 167 - wazuhapp/opensearch-dashboards/README.md | 30 - .../generate_wazuh_app.sh | 132 - windows/Dockerfile | 16 - windows/README.md | 30 - windows/entrypoint.sh | 32 - windows/generate_compiled_windows_agent.sh | 120 - windows/generate_wazuh_msi.ps1 | 104 - wpk/README.md | 30 - wpk/common/Dockerfile | 13 - wpk/generate_wpk_package.sh | 351 -- wpk/linux/aarch64/Dockerfile | 20 - wpk/linux/armv7hl/Dockerfile | 14 - wpk/linux/armv7hl/build_deps.sh | 315 -- wpk/linux/armv7hl/entrypoint.sh | 3 - wpk/linux/x86_64/CentOS-Base.repo | 54 - wpk/linux/x86_64/Dockerfile | 67 - wpk/run.sh | 256 - wpk/wpkpack.py | 112 - 181 files changed, 26819 deletions(-) delete mode 100644 debs/Debian/7/amd64/Dockerfile delete mode 100644 debs/Debian/7/i386/Dockerfile delete mode 100644 debs/Debian/8/amd64/Dockerfile delete mode 100644 debs/Debian/9/arm64/Dockerfile delete mode 100644 debs/Debian/9/armhf/Dockerfile delete mode 100644 debs/Debian/9/ppc64le/Dockerfile delete mode 100644 debs/README.md delete mode 100644 debs/SPECS/wazuh-agent/debian/changelog delete mode 100644 debs/SPECS/wazuh-agent/debian/compat delete mode 100644 debs/SPECS/wazuh-agent/debian/conffiles delete mode 100644 debs/SPECS/wazuh-agent/debian/control delete mode 100644 debs/SPECS/wazuh-agent/debian/copyright delete mode 100644 debs/SPECS/wazuh-agent/debian/postinst delete mode 100644 debs/SPECS/wazuh-agent/debian/postrm delete mode 100644 debs/SPECS/wazuh-agent/debian/preinst delete mode 100644 debs/SPECS/wazuh-agent/debian/prerm delete mode 100644 debs/SPECS/wazuh-agent/debian/rules delete mode 100644 debs/SPECS/wazuh-agent/debian/source/format delete mode 100644 debs/SPECS/wazuh-agent/debian/templates delete mode 100644 debs/SPECS/wazuh-agent/debian/wazuh-agent.lintian-overrides delete mode 100644 debs/SPECS/wazuh-manager/debian/changelog delete mode 100644 debs/SPECS/wazuh-manager/debian/compat delete mode 100644 debs/SPECS/wazuh-manager/debian/conffiles delete mode 100644 debs/SPECS/wazuh-manager/debian/control delete mode 100644 debs/SPECS/wazuh-manager/debian/copyright delete mode 100644 debs/SPECS/wazuh-manager/debian/postinst delete mode 100644 debs/SPECS/wazuh-manager/debian/postrm delete mode 100644 debs/SPECS/wazuh-manager/debian/preinst delete mode 100644 debs/SPECS/wazuh-manager/debian/prerm delete mode 100644 debs/SPECS/wazuh-manager/debian/rules delete mode 100644 debs/SPECS/wazuh-manager/debian/source/format delete mode 100644 debs/SPECS/wazuh-manager/debian/wazuh-manager.lintian-overrides delete mode 100755 debs/build.sh delete mode 100755 debs/gen_permissions.sh delete mode 100755 debs/generate_debian_package.sh delete mode 100644 macos/README.md delete mode 100644 macos/entitlements.plist delete mode 100755 macos/generate_wazuh_packages.sh delete mode 100755 macos/package_files/build.sh delete mode 100644 macos/package_files/introduction.txt delete mode 100755 macos/package_files/postinstall.sh delete mode 100755 macos/package_files/preinstall.sh delete mode 100644 macos/specs/wazuh-agent-arm64.pkgproj delete mode 100644 macos/specs/wazuh-agent-intel64.pkgproj delete mode 100755 macos/uninstall.sh delete mode 100644 rpms/CentOS/5/i386/.gitignore delete mode 100644 rpms/CentOS/5/i386/CentOS-Base.repo delete mode 100644 rpms/CentOS/5/i386/Dockerfile delete mode 100644 rpms/CentOS/5/i386/Vagrantfile delete mode 100644 rpms/CentOS/5/i386/docker_builder.sh delete mode 100644 rpms/CentOS/5/x86_64/CentOS-Base.repo delete mode 100644 rpms/CentOS/5/x86_64/Dockerfile delete mode 100644 rpms/CentOS/6/i386/CentOS-Base.repo delete mode 100644 rpms/CentOS/6/i386/Dockerfile delete mode 100644 rpms/CentOS/6/x86_64/CentOS-Base.repo delete mode 100644 rpms/CentOS/6/x86_64/Dockerfile delete mode 100644 rpms/CentOS/7/aarch64/Dockerfile delete mode 100644 rpms/CentOS/7/armv7hl/Dockerfile delete mode 100644 rpms/CentOS/7/armv7hl/build_deps.sh delete mode 100644 rpms/CentOS/7/ppc64le/Dockerfile delete mode 100644 rpms/CentOS/7/x86_64/Dockerfile delete mode 100644 rpms/README.md delete mode 100644 rpms/SPECS/wazuh-agent.spec delete mode 100644 rpms/SPECS/wazuh-manager.spec delete mode 100755 rpms/build.sh delete mode 100755 rpms/generate_rpm_package.sh delete mode 100755 stack/dashboard/base/builder.sh delete mode 100644 stack/dashboard/base/docker/Dockerfile delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/Logos white.ai delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/android-chrome-192x192.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/android-chrome-512x512.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/apple-touch-icon.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/browserconfig.xml delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-16x16.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-32x32.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon.ico delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/manifest.json delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-144x144.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-150x150.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x150.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x310.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-70x70.png delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/safari-pinned-tab.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/google_groups.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_light.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_light.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_light.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_light.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_dark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_light.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_background.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_mark.svg delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/light_theme.style.css delete mode 100644 stack/dashboard/base/files/etc/custom_welcome/template.js.hbs delete mode 100644 stack/dashboard/base/files/etc/http_service.js delete mode 100644 stack/dashboard/base/files/etc/node.options delete mode 100644 stack/dashboard/base/files/etc/opensearch_dashboards.yml delete mode 100644 stack/dashboard/base/files/etc/services/default delete mode 100644 stack/dashboard/base/files/etc/services/wazuh-dashboard delete mode 100644 stack/dashboard/base/files/etc/services/wazuh-dashboard.service delete mode 100644 stack/dashboard/base/files/etc/styles.js delete mode 100644 stack/dashboard/base/files/etc/template.js delete mode 100755 stack/dashboard/base/generate_base.sh delete mode 100755 stack/dashboard/deb/build_package.sh delete mode 100755 stack/dashboard/deb/builder.sh delete mode 100644 stack/dashboard/deb/debian/changelog delete mode 100644 stack/dashboard/deb/debian/compat delete mode 100644 stack/dashboard/deb/debian/control delete mode 100644 stack/dashboard/deb/debian/copyright delete mode 100644 stack/dashboard/deb/debian/postinst delete mode 100644 stack/dashboard/deb/debian/postrm delete mode 100644 stack/dashboard/deb/debian/preinst delete mode 100644 stack/dashboard/deb/debian/prerm delete mode 100644 stack/dashboard/deb/debian/rules delete mode 100644 stack/dashboard/deb/docker/amd64/Dockerfile delete mode 100755 stack/dashboard/rpm/build_package.sh delete mode 100755 stack/dashboard/rpm/builder.sh delete mode 100644 stack/dashboard/rpm/docker/x86_64/Dockerfile delete mode 100644 stack/dashboard/rpm/wazuh-dashboard.spec delete mode 100644 stack/indexer/base/builder.sh delete mode 100644 stack/indexer/base/docker/Dockerfile delete mode 100644 stack/indexer/base/files/etc/init.d/wazuh-indexer delete mode 100644 stack/indexer/base/files/etc/sysconfig/wazuh-indexer delete mode 100644 stack/indexer/base/files/etc/wazuh-indexer/jvm.options delete mode 100644 stack/indexer/base/files/etc/wazuh-indexer/opensearch.yml delete mode 100644 stack/indexer/base/files/systemd-entrypoint delete mode 100644 stack/indexer/base/files/usr/lib/sysctl.d/wazuh-indexer.conf delete mode 100644 stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer-performance-analyzer.service delete mode 100644 stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer.service delete mode 100644 stack/indexer/base/files/usr/lib/tmpfiles.d/wazuh-indexer.conf delete mode 100755 stack/indexer/base/generate_base.sh delete mode 100755 stack/indexer/deb/build_package.sh delete mode 100755 stack/indexer/deb/builder.sh delete mode 100644 stack/indexer/deb/debian/changelog delete mode 100644 stack/indexer/deb/debian/compat delete mode 100644 stack/indexer/deb/debian/control delete mode 100644 stack/indexer/deb/debian/copyright delete mode 100644 stack/indexer/deb/debian/postinst delete mode 100644 stack/indexer/deb/debian/postrm delete mode 100644 stack/indexer/deb/debian/preinst delete mode 100644 stack/indexer/deb/debian/prerm delete mode 100644 stack/indexer/deb/debian/rules delete mode 100644 stack/indexer/deb/docker/amd64/Dockerfile delete mode 100644 stack/indexer/indexer-security-init.sh delete mode 100755 stack/indexer/rpm/build_package.sh delete mode 100755 stack/indexer/rpm/builder.sh delete mode 100644 stack/indexer/rpm/docker/x86_64/Dockerfile delete mode 100755 stack/indexer/rpm/wazuh-indexer.spec delete mode 100644 wazuhapp/kibana/Docker/Dockerfile delete mode 100755 wazuhapp/kibana/Docker/build.sh delete mode 100644 wazuhapp/kibana/README.md delete mode 100755 wazuhapp/kibana/generate_wazuh_app.sh delete mode 100644 wazuhapp/opensearch-dashboards/Docker/Dockerfile delete mode 100755 wazuhapp/opensearch-dashboards/Docker/build.sh delete mode 100644 wazuhapp/opensearch-dashboards/README.md delete mode 100755 wazuhapp/opensearch-dashboards/generate_wazuh_app.sh delete mode 100644 windows/Dockerfile delete mode 100644 windows/README.md delete mode 100755 windows/entrypoint.sh delete mode 100755 windows/generate_compiled_windows_agent.sh delete mode 100644 windows/generate_wazuh_msi.ps1 delete mode 100644 wpk/README.md delete mode 100644 wpk/common/Dockerfile delete mode 100755 wpk/generate_wpk_package.sh delete mode 100644 wpk/linux/aarch64/Dockerfile delete mode 100644 wpk/linux/armv7hl/Dockerfile delete mode 100644 wpk/linux/armv7hl/build_deps.sh delete mode 100755 wpk/linux/armv7hl/entrypoint.sh delete mode 100644 wpk/linux/x86_64/CentOS-Base.repo delete mode 100644 wpk/linux/x86_64/Dockerfile delete mode 100755 wpk/run.sh delete mode 100755 wpk/wpkpack.py diff --git a/debs/Debian/7/amd64/Dockerfile b/debs/Debian/7/amd64/Dockerfile deleted file mode 100644 index b89a783073..0000000000 --- a/debs/Debian/7/amd64/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM debian:7 - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN echo "deb http://archive.debian.org/debian/ wheezy contrib main non-free" > /etc/apt/sources.list && \ - echo "deb-src http://archive.debian.org/debian/ wheezy contrib main non-free" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --force-yes apt-utils && \ - apt-get install -y --force-yes \ - curl gcc make sudo wget expect gnupg perl-base=5.14.2-21+deb7u3 perl \ - libc-bin=2.13-38+deb7u10 libc6=2.13-38+deb7u10 libc6-dev build-essential \ - cdbs devscripts equivs automake autoconf libtool libaudit-dev selinux-basics \ - libdb5.1=5.1.29-5 libdb5.1-dev libssl1.0.0=1.0.1e-2+deb7u20 procps gawk libsigsegv2 - -RUN apt-get update && apt-get build-dep python3.2 -y --force-yes - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64:${LD_LIBRARY_PATH}" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CXX=/usr/local/gcc-9.4.0/bin/g++ \ - CC=/usr/local/gcc-9.4.0/bin/gcc && \ - make -j$(nproc) && make install && ln -s /usr/local/bin/cmake /usr/bin/cmake && \ - cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/Debian/7/i386/Dockerfile b/debs/Debian/7/i386/Dockerfile deleted file mode 100644 index 717926819b..0000000000 --- a/debs/Debian/7/i386/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -FROM i386/debian:7 - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN echo "deb http://archive.debian.org/debian/ wheezy contrib main non-free" > /etc/apt/sources.list && \ - echo "deb-src http://archive.debian.org/debian/ wheezy contrib main non-free" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --force-yes apt-utils && \ - apt-get install -y --force-yes \ - curl gcc-multilib make wget sudo expect gnupg perl-base=5.14.2-21+deb7u3 \ - perl libc-bin=2.13-38+deb7u10 libc6=2.13-38+deb7u10 libc6-dev \ - build-essential cdbs devscripts equivs automake autoconf libtool \ - libaudit-dev selinux-basics util-linux libdb5.1=5.1.29-5 libdb5.1-dev \ - libssl1.0.0=1.0.1e-2+deb7u20 gawk libsigsegv2 procps - -# Add Debian's source repository -RUN apt-get update && apt-get build-dep python3.2 -y --force-yes -RUN sed -i "s;/\* To add :#define SO_REUSEPORT 15 \*/;#define SO_REUSEPORT 15;g" /usr/include/asm-generic/socket.h - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - linux32 ./contrib/download_prerequisites && \ - linux32 ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib:${LD_LIBRARY_PATH}" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxvf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - linux32 ./bootstrap --no-system-curl CXX=/usr/local/gcc-9.4.0/bin/g++ \ - CC=/usr/local/gcc-9.4.0/bin/gcc && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -s /usr/local/bin/cmake /usr/bin/cmake && cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/Debian/8/amd64/Dockerfile b/debs/Debian/8/amd64/Dockerfile deleted file mode 100644 index 177a91925d..0000000000 --- a/debs/Debian/8/amd64/Dockerfile +++ /dev/null @@ -1,43 +0,0 @@ -FROM debian:8 - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN echo 'Acquire::Check-Valid-Until "false";' >> /etc/apt/apt.conf && \ - echo "deb http://archive.debian.org/debian jessie contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --force-yes apt-utils && \ - apt-get install -y --force-yes \ - curl g++ bzip2 debhelper gcc rename make sudo wget expect gnupg perl-base perl \ - libc-bin libc6 libc6-dev build-essential dpkg-dev\ - cdbs devscripts equivs automake autoconf libtool libaudit-dev selinux-basics \ - libdb5.3 libdb5.3-dev libssl1.0.0 libssl-dev procps gawk libsigsegv2 - -RUN echo "deb-src http://archive.debian.org/debian jessie contrib main non-free" >> /etc/apt/sources.list && \ - apt-get update && apt-get build-dep python3 -y --force-yes - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64:${LD_LIBRARY_PATH}" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CXX=/usr/local/gcc-9.4.0/bin/g++ \ - CC=/usr/local/gcc-9.4.0/bin/gcc && \ - make -j$(nproc) && make install && ln -s /usr/local/bin/cmake /usr/bin/cmake && \ - cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/Debian/9/arm64/Dockerfile b/debs/Debian/9/arm64/Dockerfile deleted file mode 100644 index 43f3da0a71..0000000000 --- a/debs/Debian/9/arm64/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -FROM arm64v8/debian:stretch - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN echo "deb http://archive.debian.org/debian stretch contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list && \ - echo "deb-src http://archive.debian.org/debian stretch main" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --allow-change-held-packages apt apt-utils \ - curl gcc g++ make sudo expect gnupg \ - perl-base perl wget libc-bin libc6 libc6-dev \ - build-essential cdbs devscripts equivs automake \ - autoconf libtool libaudit-dev selinux-basics \ - libdb5.3 libdb5.3 libssl1.0.2 gawk libsigsegv2 - -# Add Debian's source repository and, Install NodeJS 12 -RUN apt-get update && apt-get build-dep python3.5 -y --allow-change-held-packages -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \ - apt-get install --allow-change-held-packages -y nodejs - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl && \ - make -j$(nproc) && make install && ln -s /usr/local/bin/cmake /usr/bin/cmake && \ - cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/Debian/9/armhf/Dockerfile b/debs/Debian/9/armhf/Dockerfile deleted file mode 100644 index e243406dc8..0000000000 --- a/debs/Debian/9/armhf/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -FROM arm32v7/debian:stretch - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN echo "deb http://archive.debian.org/debian stretch contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list && \ - echo "deb-src http://archive.debian.org/debian stretch main" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --allow-change-held-packages apt-utils \ - curl gcc make wget sudo expect gnupg perl-base \ - perl libc-bin libc6 libc6-dev \ - build-essential cdbs devscripts equivs automake autoconf libtool \ - libaudit-dev selinux-basics util-linux libdb5.1 \ - libssl1.1 libssl-dev gawk libsigsegv2 procps libc6-armel-cross g++ - -# Add Debian's source repository and, Install NodeJS 12 -RUN apt-get build-dep python3.5 -y --allow-change-held-packages -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \ - apt-get install -y --allow-change-held-packages nodejs - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - linux32 ./contrib/download_prerequisites && \ - linux32 ./configure --prefix=/usr/local/gcc-9.4.0 --with-arch=armv7-a \ - --with-fpu=vfpv3-d16 --with-float=hard --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxvf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - linux32 ./bootstrap --no-system-curl && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -s /usr/local/bin/cmake /usr/bin/cmake && cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/Debian/9/ppc64le/Dockerfile b/debs/Debian/9/ppc64le/Dockerfile deleted file mode 100644 index 23319b1cbb..0000000000 --- a/debs/Debian/9/ppc64le/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -FROM ppc64le/debian:stretch - -ENV DEBIAN_FRONTEND noninteractive - -RUN apt-get -v - -# Installing necessary packages -RUN echo "deb http://archive.debian.org/debian stretch contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list && \ - echo "deb-src http://archive.debian.org/debian stretch main" >> /etc/apt/sources.list && \ - apt-get update && apt-get install -y --allow-change-held-packages apt-utils && \ - apt-get install -y --allow-change-held-packages \ - curl gcc make sudo expect gnupg perl-base perl wget \ - libc-bin libc6 libc6-dev build-essential \ - cdbs devscripts equivs automake autoconf libtool libaudit-dev selinux-basics \ - libdb5.3 libdb5.3 libssl1.0.2 gawk libsigsegv2 - -RUN apt-get update && apt-get build-dep python3.5 -y --allow-change-held-packages - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64:${LD_LIBRARY_PATH}" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CXX=/usr/local/gcc-9.4.0/bin/g++ \ - CC=/usr/local/gcc-9.4.0/bin/gcc && \ - make -j$(nproc) && make install && ln -s /usr/local/bin/cmake /usr/bin/cmake && \ - cd / && rm -rf cmake-* - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/debs/README.md b/debs/README.md deleted file mode 100644 index 8a892c8b35..0000000000 --- a/debs/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh DEB packages - -In this repository, you can find the necessary tools to build a Wazuh package for Debian based OS. - -## Building DEB packages - -Please, visit the following link for the full DEB packages building documentation: [Generate Wazuh Debian packages.](https://documentation.wazuh.com/current/development/packaging/generate-deb-package.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/debs/SPECS/wazuh-agent/debian/changelog b/debs/SPECS/wazuh-agent/debian/changelog deleted file mode 100644 index 59ff018417..0000000000 --- a/debs/SPECS/wazuh-agent/debian/changelog +++ /dev/null @@ -1,673 +0,0 @@ -wazuh-agent (4.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html - - -- Wazuh, Inc Thu, 15 Aug 2024 00:00:00 +0000 - -wazuh-agent (4.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html - - -- Wazuh, Inc Thu, 18 Jul 2024 00:00:00 +0000 - -wazuh-agent (4.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html - - -- Wazuh, Inc Wed, 12 Jun 2024 00:00:00 +0000 - -wazuh-agent (4.7.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html - - -- Wazuh, Inc Thu, 30 May 2024 00:00:00 +0000 - -wazuh-agent (4.7.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html - - -- Wazuh, Inc Thu, 25 Apr 2024 00:00:00 +0000 - -wazuh-agent (4.7.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html - - -- Wazuh, Inc Tue, 27 Feb 2024 00:00:00 +0000 - -wazuh-agent (4.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html - - -- Wazuh, Inc Tue, 09 Jan 2024 00:00:00 +0000 - -wazuh-agent (4.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html - - -- Wazuh, Inc Wed, 19 Dec 2023 00:00:00 +0000 - -wazuh-agent (4.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html - - -- Wazuh, Inc Tue, 27 Nov 2023 00:00:00 +0000 - -wazuh-agent (4.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html - - -- Wazuh, Inc Tue, 31 Oct 2023 00:00:00 +0000 - -wazuh-agent (4.5.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html - - -- Wazuh, Inc Tue, 24 Oct 2023 00:00:00 +0000 - -wazuh-agent (4.5.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html - - -- Wazuh, Inc Tue, 10 Oct 2023 00:00:00 +0000 - -wazuh-agent (4.5.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html - - -- Wazuh, Inc Thu, 31 Aug 2023 00:00:00 +0000 - -wazuh-agent (4.5.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-1.html - - -- Wazuh, Inc Thu, 24 Aug 2023 15:56:43 +0000 - -wazuh-agent (4.5.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html - - -- Wazuh, Inc Thu, 10 Aug 2023 15:56:43 +0000 - -wazuh-agent (4.4.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html - - -- Wazuh, Inc Mon, 10 Jul 2023 15:56:43 +0000 - -wazuh-agent (4.4.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html - - -- Wazuh, Inc Tue, 13 Jun 2023 12:31:50 +0000 - -wazuh-agent (4.4.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html - - -- Wazuh, Inc Thu, 25 May 2023 12:31:50 +0000 - -wazuh-agent (4.4.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html - - -- Wazuh, Inc Mon, 08 May 2023 12:31:50 +0000 - -wazuh-agent (4.3.11-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-11.html - - -- Wazuh, Inc Mon, 24 Apr 2023 15:00:00 +0000 - -wazuh-agent (4.4.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html - - -- Wazuh, Inc Mon, 17 Apr 2023 12:31:50 +0000 - -wazuh-agent (4.4.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html - - -- Wazuh, Inc Wed, 18 Jan 2023 12:31:50 +0000 - -wazuh-agent (4.3.10-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html - - -- Wazuh, Inc Thu, 10 Nov 2022 15:00:00 +0000 - -wazuh-agent (4.3.9-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html - - -- Wazuh, Inc Mon, 03 Oct 2022 15:00:00 +0000 - -wazuh-agent (4.3.8-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html - - -- Wazuh, Inc Mon, 19 Sep 2022 15:00:00 +0000 - -wazuh-agent (4.3.7-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html - - -- Wazuh, Inc Mon, 08 Aug 2022 15:00:00 +0000 - -wazuh-agent (4.3.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html - - -- Wazuh, Inc Thu, 07 Jul 2022 15:00:00 +0000 - -wazuh-agent (4.3.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html - - -- Wazuh, Inc Wed, 29 Jun 2022 15:00:00 +0000 - -wazuh-agent (4.3.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html - - -- Wazuh, Inc Tue, 07 Jun 2022 15:41:39 +0000 - -wazuh-agent (4.3.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html - - -- Wazuh, Inc Tue, 31 May 2022 15:41:39 +0000 - -wazuh-agent (4.3.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html - - -- Wazuh, Inc Mon, 30 May 2022 15:41:39 +0000 - -wazuh-agent (4.2.7-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-7.html - - -- Wazuh, Inc Sun, 29 May 2022 08:51:00 +0000 - -wazuh-agent (4.3.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html - - -- Wazuh, Inc Wed, 18 May 2022 12:14:41 +0000 - -wazuh-agent (4.3.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html - - -- Wazuh, Inc Thu, 05 May 2022 12:15:57 +0000 - -wazuh-agent (4.2.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-6.html - - -- Wazuh, Inc Fri, 25 Mar 2022 16:47:07 +0000 - -wazuh-agent (4.2.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-5.html - - -- Wazuh, Inc Mon, 15 Nov 2021 16:47:07 +0000 - -wazuh-agent (4.2.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-4.html - - -- Wazuh, Inc Thu, 21 Oct 2021 15:57:51 +0000 - -wazuh-agent (4.2.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-3.html - - -- Wazuh, Inc Wed, 06 Oct 2021 15:07:13 +0000 - -wazuh-agent (4.2.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-2.html - - -- Wazuh, Inc Tue, 28 Sep 2021 08:58:38 +0000 - -wazuh-agent (4.2.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-1.html - - -- Wazuh, Inc Sat, 25 Sep 2021 07:04:22 +0000 - -wazuh-agent (4.2.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-0.html - - -- Wazuh, Inc Mon, 26 Apr 2021 11:51:55 +0000 - -wazuh-agent (4.1.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-5.html - - -- Wazuh, Inc Thu, 22 Apr 2021 16:50:05 +0000 - -wazuh-agent (4.1.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-4.html - - -- Wazuh, Inc Mon, 29 Mar 2021 16:23:09 +0000 - -wazuh-agent (4.1.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-3.html - - -- Wazuh, Inc Sat, 20 Mar 2021 13:41:26 +0000 - -wazuh-agent (4.1.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-2.html - - -- Wazuh, Inc Mon, 08 Mar 2021 14:00:25 +0000 - -wazuh-agent (4.1.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-1.html - - -- Wazuh, Inc Fri, 05 Mar 2021 13:24:41 +0000 - -wazuh-agent (4.1.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-0.html - - -- Wazuh, Inc Tue, 19 Jan 2021 06:25:59 +0000 - - wazuh-agent (4.0.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-4.html - - -- Wazuh, Inc Tue, 12 Jan 2021 09:30:15 +0000 - -wazuh-agent (4.0.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-3.html - - -- Wazuh, Inc Mon, 30 Nov 2020 10:00:15 +0000 - -wazuh-agent (4.0.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-2.html - - -- Wazuh, Inc Mon, 23 Nov 2020 12:16:36 +0000 - -wazuh-agent (4.0.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-1.html - - -- Wazuh, Inc Sat, 31 Oct 2020 12:16:36 +0000 - -wazuh-agent (4.0.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-0.html - - -- Wazuh, Inc Mon, 19 Oct 2020 06:59:39 +0000 - - wazuh-manager (3.13.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-6.html - - -- Wazuh, Inc Wed, 21 Sep 2022 15:00:00 +0000 - - wazuh-manager (3.13.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-5.html - - -- Wazuh, Inc Wed, 24 Aug 2022 15:00:00 +0000 - - wazuh-manager (3.13.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-4.html - - -- Wazuh, Inc Mon, 30 May 2022 15:00:00 +0000 - -wazuh-agent (3.13.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-3.html - - -- Wazuh, Inc Sat, 24 Apr 2021 07:01:55 +0000 - -wazuh-agent (3.13.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-2.html - - -- Wazuh, Inc Fri, 21 Aug 2020 10:05:02 +0000 - -wazuh-agent (3.13.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-1.html - - -- Wazuh, Inc Tue, 14 Jul 2020 10:05:02 +0000 - -wazuh-agent (3.13.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-0.html - - -- Wazuh, Inc Mon, 29 Jun 2020 10:05:02 +0000 - -wazuh-agent (3.12.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-2.html - - -- Wazuh, Inc Thu, 9 Apr 2020 08:47:14 +0000 - -wazuh-agent (3.12.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-1.html - - -- Wazuh, Inc Wed, 8 Apr 2020 16:12:28 +0000 - -wazuh-agent (3.12.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-0.html - - -- Wazuh, Inc Wed, 25 Mar 2020 10:20:48 +0000 - -wazuh-agent (3.11.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-4.html - - -- Wazuh, Inc Thu, 24 Feb 2020 10:01:00 +0000 - -wazuh-agent (3.11.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-3.html - - -- Wazuh, Inc Wed, 22 Jan 2020 10:01:00 +0000 - -wazuh-agent (3.11.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-2.html - - -- Wazuh, Inc Tue, 7 Jan 2020 10:01:00 +0000 - -wazuh-agent (3.11.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-1.html - - -- Wazuh, Inc Thu, 26 Dec 2019 13:33:00 +0000 - -wazuh-agent (3.11.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-0.html - - -- Wazuh, Inc Mon, 7 Oct 2019 13:33:00 +0000 - -wazuh-agent (3.10.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-2.html - - -- Wazuh, Inc Mon, 23 Sep 2019 10:19:00 +0000 - -wazuh-agent (3.10.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-1.html - - -- Wazuh, Inc Thu, 19 Sep 2019 13:33:00 +0000 - -wazuh-agent (3.10.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-0.html - - -- Wazuh, Inc Mon, 26 Aug 2019 13:33:00 +0000 - -wazuh-agent (3.9.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-5.html - - -- Wazuh, Inc Thu, 8 Aug 2019 16:31:00 +0000 - -wazuh-agent (3.9.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-4.html - - -- Wazuh, Inc Tue, 12 Jul 2019 16:31:00 +0000 - -wazuh-agent (3.9.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-3.html - - -- Wazuh, Inc Tue, 11 Jun 2019 16:31:00 +0000 - -wazuh-agent (3.9.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-2.html - - -- Wazuh, Inc Mon, 6 Jun 2019 13:33:00 +0000 - -wazuh-agent (3.9.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-1.html - - -- Wazuh, Inc Mon, 6 May 2019 13:33:00 +0000 - -wazuh-agent (3.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-0.html - - -- Wazuh, Inc Mon, 25 Feb 2019 11:00:00 +0000 - -wazuh-agent (3.8.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-2.html - - -- Wazuh, Inc Wed, 30 Jan 2019 11:00:00 +0000 - -wazuh-agent (3.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-1.html - - -- Wazuh, Inc Thu, 24 Jan 2019 09:28:34 +0000 - -wazuh-agent (3.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-0.html - - -- Wazuh, Inc Mon, 16 Jan 2019 11:00:00 +0000 - -wazuh-agent (3.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-2.html - - -- Wazuh, Inc Mon, 10 Dec 2018 11:00:00 +0000 - -wazuh-agent (3.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-1.html - - -- Wazuh, Inc Mon, 12 Nov 2018 11:00:00 +0000 - -wazuh-agent (3.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-0.html - - -- Wazuh, Inc Sat, 10 Nov 2018 11:00:00 +0000 - -wazuh-agent (3.6.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-6-1.html - - -- Wazuh, Inc Mon, 3 Sep 2018 11:00:00 +0000 - -wazuh-agent (3.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-6-0.html - - -- Wazuh, Inc Fri, 24 Aug 2018 11:00:00 +0000 - -wazuh-agent (3.5.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-5-0.html - - -- Wazuh, Inc Wed, 25 Jul 2018 20:12:41 +0000 - -wazuh-agent (3.4.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-4-0.html - - -- Wazuh, Inc Thu, 28 Jun 2018 20:12:41 +0000 - -wazuh-agent (3.3.1-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-3-1.html - - -- Wazuh, Inc Thu, 14 Jun 2018 9:29:41 +0000 - -wazuh-agent (3.3.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-3-0.html - - -- Wazuh, Inc Thu, 07 Jun 2018 10:00:31 +0000 - -wazuh-agent (3.2.4-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-4.html - - -- Wazuh, Inc Wed, 30 May 2018 12:44:31 +0000 - -wazuh-agent (3.2.3-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-3.html - - -- Wazuh, Inc Tue, 15 May 2018 12:35:30 +0000 - -wazuh-agent (3.2.2-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-2.html - - -- Wazuh, Inc Tue, 13 Mar 2018 12:35:30 +0000 - -wazuh-agent (3.2.1-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-1.html - - -- Wazuh, Inc Wed, 21 Feb 2018 15:26:30 +0000 - -wazuh-agent (3.2.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-0.html - - -- Wazuh, Inc Thu, 11 Dec 2017 15:19:24 +0000 - - -wazuh-agent (3.1.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-1-0.html - - -- Wazuh, Inc Mon, 19 Dec 2017 08:00:10 +0000 - - -wazuh-agent (3.0.0-2) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-0-0.html - - -- Wazuh, Inc Mon, 01 Nov 2017 08:00:10 +0000 - -wazuh-agent (2.1.1-1) stable; urgency=low - - * Labels configuration for agents to show data on alerts. - * Added group property for agents to customize shared files set. - * Send shared files to multiple agents in parallel. - * New decoder plugin for logs in JSON format with dynamic fields definition. - * Brought framework from API to Wazuh project. - * Show merged files MD5 checksum by agent_control and framework. - * New reliable request protocol for manager-agent communication. - * Remote agent upgrades with signed WPK packages. - * Added option for Remoted to prevent it from writing shared merged file. - * Added state for Agentd and Windows agent to notify connection state and metrics. - * Added new json log format for local file monitoring. - * Added OpenSCAP SSG datastream content for Ubuntu Trusty Tahr. - * Increased shared file delivery speed when using TCP. - * Increased TCP listening socket backlog. - * Changed Windows agent UI panel to show revision number instead of installation date. - * Group every decoded field (static and dynamic fields-1) into a data object for JSON alerts. - * Reload shared files by Remoted every 10 minutes. - * Increased string size limit for XML reader to 4096 bytes. - * Updated Logstash configuration and Elasticsearch mappings. - * Changed template fields structure for Kibana dashboards. - * Increased dynamic field limit to 1024, and default to 256. - * Changed agent buffer 'length' parameter to 'queue_size'. - * Changed some Rootcheck error messages to verbose logs. - * Removed unnecessary message by manage_agents advising to restart Wazuh manager. - * Fixed wrong queries to get last Syscheck and Rootcheck date. - * Prevent Logcollector keep-alives from being stored on archives.json. - * Fixed length of random message within keep-alives. - * Fixed Windows version detection for Windows 8 and newer. - * Fixed incorrect CIDR writing on client.keys by Authd. - * Fixed missing buffer flush by Analysisd when updating Rootcheck database. - * Stop Wazuh service before removing folder to reinstall. - - -- Wazuh, Inc Mon, 01 Aug 2016 08:00:10 +0000 - -wazuh-agent (2.1.0-1) stable; urgency=low - - * Rotate and compress log feature. - * Labeling data for agents to be shown in alerts. - * New 'auth' configuration template. - * Make manage_agents capable of add and remove agents via Authd. - * Implemented XML configuration for Authd. - * Option -F for Authd to force insertion if it finds duplicated name. - * Local auth client to manage agent keys. - * Added OS name and version into global.db. - * Option for logging in JSON format. - * Allow maild to send through a sendmail-like executable (by James Le Cuirot). - * Leaky bucket-like buffer for agents to prevent network flooding. - * Allow Syslog client to read JSON alerts. - * Allow Mail reporter to read JSON alerts. - * Added internal option to tune Rootcheck sleep time. - * Added route-null Active Response script for Windows 2012 (by @CrazyLlama). - * Updated SQLite library to 3.19.2. - * Updated zlib to 1.2.11. - * Updated cJSON library to 1.4.7. - * Change some manage_agents option parameters. - * Run Auth in background by default. - * Log classification as debug, info, warning, error and critical. - * Limit number of reads per cycle by Logcollector to prevent log starvation. - * Limit OpenSCAP module's event forwarding speed. - * Increased debug level of repeated Rootcheck messages. - * Send events when OpenSCAP starts and finishes scans. - * Delete PID files when a process exits not due to a signal. - * Change error messages due to SSL handshake failure to debug messages. - * Force group addition on installation for compatibility with LDAP (thanks to Gary Feltham). - * Fixed compiling error on systems with no OpenSSL. - * Fixed compiling warning at manage_agents. - * Fixed ossec-control enable/disable help message. - * Fixed unique aperture of random device on Unix. - * Fixed file sum comparison bug at Syscheck realtime engine. (Thanks to Arshad Khan) - * Close analysisd if alert outputs are disabled for all formats. - * Read Windows version name for versions newer than Windows 8 / Windows Server 2012. - * Fixed error in Analysisd that wrote Syscheck and Rootcheck databases of re-added agents on deleted files. - * Fixed internal option to configure the maximum labels' cache time. - * Fixed Auth password parsing on client side. - * Fix bad agent ID assignation in Authd on i686 architecture. - * Fixed Logcollector misconfiguration in Windows agents. - - -- Wazuh, Inc Mon, 01 Jul 2016 08:43:10 +0000 - -wazuh-agent (2.0.1-1) stable; urgency=low - - * Changed random data generator for a secure OS-provided generator. - * Changed Windows installer file name (depending on version). - * Linux distro detection using standard os-release file. - * Changed some URLs to documentation. - * Disable synchronization with SQLite databases for Syscheck by default. - * Minor changes at Rootcheck formatter for JSON alerts. - * Added debugging messages to Integrator logs. - * Show agent ID when possible on logs about incorrectly formatted messages. - * Use default maximum inotify event queue size. - * Show remote IP on encoding format errors when unencrypting messages. - - -- Wazuh, Inc Thu, 06 Jun 2017 08:43:10 +0000 - -wazuh-agent (2.0-1) stable; urgency=low - - * Wazuh-agent - base 2.0 - - -- Wazuh, Inc Mon, 30 Sep 2016 08:43:10 +0000 diff --git a/debs/SPECS/wazuh-agent/debian/compat b/debs/SPECS/wazuh-agent/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/debs/SPECS/wazuh-agent/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/debs/SPECS/wazuh-agent/debian/conffiles b/debs/SPECS/wazuh-agent/debian/conffiles deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/debs/SPECS/wazuh-agent/debian/control b/debs/SPECS/wazuh-agent/debian/control deleted file mode 100644 index c6c6cb0b1d..0000000000 --- a/debs/SPECS/wazuh-agent/debian/control +++ /dev/null @@ -1,14 +0,0 @@ -Source: wazuh-agent -Section: admin -Priority: extra -Maintainer: Wazuh, Inc -Build-Depends: debhelper (>= 7.0.50~), make, gcc, linux-libc-dev, gawk, libaudit-dev, selinux-basics -Standards-Version: 3.8.4 -Homepage: https://www.wazuh.com - -Package: wazuh-agent -Architecture: any -Depends: ${shlibs:Depends}, libc6 (>= 2.7), lsb-release, debconf, adduser -Conflicts: ossec-hids-agent, wazuh-manager, ossec-hids, wazuh-api -Breaks: ossec-hids-agent, wazuh-manager, ossec-hids -Description: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring diff --git a/debs/SPECS/wazuh-agent/debian/copyright b/debs/SPECS/wazuh-agent/debian/copyright deleted file mode 100644 index b044031c03..0000000000 --- a/debs/SPECS/wazuh-agent/debian/copyright +++ /dev/null @@ -1,38 +0,0 @@ -This work was packaged for Debian by: - - Wazuh, Inc on Thu, 15 Aug 2024 00:00:00 +0000 - -It was downloaded from: - - https://www.wazuh.com - -Upstream Authors: - - dcid@dcid.me - Jia-BingJB_Cheng@trendmicro.com - vichargrave@gmail.com - ossec@michaelstarks.com - ddpbsd@gmail.com - scott@atomicorp.com - brad.lhotsky@gmail.com - jeremy@jeremyrossy.com - santiago.bassett@gmail.com - pedro@wazuh.com - alberto.rodriguez@wazuh.com - braulio@wazuh.com - jose.fernandez@wazuh.com - -Copyright: - - GNU General Public License version 2. - -License: - - GNU General Public License version 2. - -The Debian packaging is: - - Copyright (C) 2015 Wazuh, Inc - -and is licensed under the GPL version 2, -see "/usr/share/common-licenses/GPL-2". diff --git a/debs/SPECS/wazuh-agent/debian/postinst b/debs/SPECS/wazuh-agent/debian/postinst deleted file mode 100644 index 6de2eb2df6..0000000000 --- a/debs/SPECS/wazuh-agent/debian/postinst +++ /dev/null @@ -1,214 +0,0 @@ -#!/bin/sh -# postinst script for wazuh-agent -# Wazuh, Inc 2015 - -set -e - -case "$1" in - configure) - - OS=$(lsb_release -si) - VER=$(lsb_release -sr) - DIR="/var/ossec" - USER="wazuh" - GROUP="wazuh" - WAZUH_GLOBAL_TMP_DIR="${DIR}/packages_files" - WAZUH_TMP_DIR="${WAZUH_GLOBAL_TMP_DIR}/agent_config_files" - SCRIPTS_DIR="${WAZUH_GLOBAL_TMP_DIR}/agent_installation_scripts" - SCA_BASE_DIR="${SCRIPTS_DIR}/sca" - - OSMYSHELL="/sbin/nologin" - - if [ -d /run/systemd/system ]; then - rm -f /etc/init.d/wazuh-agent - fi - - if [ ! -f ${OSMYSHELL} ]; then - if [ -f "/bin/false" ]; then - OSMYSHELL="/bin/false" - fi - fi - - if ! getent group ${GROUP} > /dev/null 2>&1; then - addgroup --system ${GROUP} > /dev/null 2>&1 - fi - if ! getent passwd ${USER} > /dev/null 2>&1; then - adduser --system --home ${DIR} --shell ${OSMYSHELL} --ingroup ${GROUP} ${USER} > /dev/null 2>&1 - fi - - if [ -z "$2" ] || [ -f ${WAZUH_TMP_DIR}/create_conf ] ; then - - ${SCRIPTS_DIR}/gen_ossec.sh conf agent ${OS} ${VER} ${DIR} > ${DIR}/etc/ossec.conf - ${SCRIPTS_DIR}/add_localfiles.sh ${DIR} >> ${DIR}/etc/ossec.conf - - else - ${SCRIPTS_DIR}/gen_ossec.sh conf agent ${OS} ${VER} ${DIR} > ${DIR}/etc/ossec.conf.new - chmod 660 ${DIR}/etc/ossec.conf.new - fi - - # For the etc dir - if [ -f /etc/localtime ]; then - cp -pL /etc/localtime ${DIR}/etc/; - chmod 640 ${DIR}/etc/localtime - chown root:${GROUP} ${DIR}/etc/localtime - fi - - # Restore the local rules, client.keys and local_decoder - if [ -f ${WAZUH_TMP_DIR}/client.keys ]; then - cp ${WAZUH_TMP_DIR}/client.keys ${DIR}/etc/client.keys - fi - # Restore ossec.conf configuration - if [ -f ${WAZUH_TMP_DIR}/ossec.conf ]; then - mv ${WAZUH_TMP_DIR}/ossec.conf ${DIR}/etc/ossec.conf - fi - # Restore internal options configuration - if [ -f ${WAZUH_TMP_DIR}/local_internal_options.conf ]; then - mv ${WAZUH_TMP_DIR}/local_internal_options.conf ${DIR}/etc/local_internal_options.conf - fi - - # Install the SCA files - if [ -d "${SCA_BASE_DIR}" ]; then - - . ${SCRIPTS_DIR}/src/init/dist-detect.sh - - SCA_DIR="${DIST_NAME}/${DIST_VER}" - - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - mkdir -p ${DIR}/ruleset/sca - - # Install the configuration files needed for this hosts - if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" - else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" - fi - - SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" - - if [ -r ${SCA_TMP_FILE} ]; then - - rm -f ${DIR}/ruleset/sca/* || true - - for sca_file in $(cat ${SCA_TMP_FILE}); do - mv ${SCA_BASE_DIR}/${sca_file} ${DIR}/ruleset/sca - done - fi - - # Set correct permissions, owner and group. ruleset directory may be empty. - if [ -n "$(ls -A ${DIR}/ruleset/sca/)" ]; then - chmod --recursive u=rwX,g=rX,o= ${DIR}/ruleset/sca/ - chown --recursive root:${GROUP} ${DIR}/ruleset/sca/ - fi - # Delete the temporary directory - rm -rf ${SCA_BASE_DIR} - - fi - - # Restore group files - if [ -d ${WAZUH_TMP_DIR}/group ]; then - for file in ${WAZUH_TMP_DIR}/group/* ; do - mv ${file} ${DIR}/etc/shared/ - done - rm -rf ${WAZUH_TMP_DIR}/group - fi - - touch ${DIR}/logs/active-responses.log - chown wazuh:wazuh ${DIR}/logs/active-responses.log - chmod 0660 ${DIR}/logs/active-responses.log - - # Check if SELinux is installed and enabled - if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - semodule -i ${DIR}/var/selinux/wazuh.pp - semodule -e wazuh - fi - fi - - # Register and configure agent if Wazuh environment variables are defined - if [ -z "$2" ] ; then - ${SCRIPTS_DIR}/src/init/register_configure_agent.sh ${DIR} > /dev/null || : - fi - - # Restoring file permissions - ${SCRIPTS_DIR}/restore-permissions.sh > /dev/null 2>&1 || : - - if [ -f /etc/systemd/system/wazuh-agent.service ]; then - rm -f /etc/systemd/system/wazuh-agent.service - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - fi - fi - # Remove old ossec user and group if exists and change ownwership of files - - if getent group ossec > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user root -exec chown root:wazuh {} \; > /dev/null 2>&1 || true - if getent passwd ossec > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossec -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - deluser ossec > /dev/null 2>&1 - fi - if getent passwd ossecm > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossecm -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - deluser ossecm > /dev/null 2>&1 - fi - if getent passwd ossecr > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossecr -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - deluser ossecr > /dev/null 2>&1 - fi - if getent group ossec > /dev/null 2>&1; then - delgroup ossec > /dev/null 2>&1 - fi - fi - - if [ ! -z "$2" ]; then - if [ -f ${WAZUH_TMP_DIR}/wazuh.restart ] ; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-agent.service > /dev/null 2>&1 - elif command -v service > /dev/null 2>&1 ; then - service wazuh-agent restart > /dev/null 2>&1 - else - ${DIR}/bin/wazuh-control restart > /dev/null 2>&1 - fi - fi - fi - - #Delete obsolete files - if [ -f /etc/ossec-init.conf ]; then - rm -f /etc/ossec-init.conf - fi - - # Delete installation scripts - if [ -d ${SCRIPTS_DIR} ]; then - rm -rf ${SCRIPTS_DIR} - fi - - # Delete tmp directory - if [ -d ${WAZUH_TMP_DIR} ]; then - rm -rf ${WAZUH_TMP_DIR} - fi - - # If the parent directory is empty, delete it - if [ -z "$(ls -A ${WAZUH_GLOBAL_TMP_DIR})" ]; then - rm -rf ${WAZUH_GLOBAL_TMP_DIR} - fi - - ;; - - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - - *) - echo "postinst called with unknown argument \`$1'" >2 - exit 1 - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-agent/debian/postrm b/debs/SPECS/wazuh-agent/debian/postrm deleted file mode 100644 index bb30d5af0a..0000000000 --- a/debs/SPECS/wazuh-agent/debian/postrm +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/sh -# postrm script for wazuh-agent -# Wazuh, Inc 2015 - -set -e - -DIR="/var/ossec" -WAZUH_TMP_DIR="${DIR}/packages_files/agent_config_files" - -case "$1" in - remove|failed-upgrade|abort-install|abort-upgrade|disappear) - - if [ -d ${WAZUH_TMP_DIR} ]; then - rm -rf ${WAZUH_TMP_DIR} - fi - - # Back up the old configuration files as .save - if [ ! -d ${DIR}/etc ]; then - mkdir -p ${DIR}/etc - fi - - # If the directory is not empty, copy the files into ${DIR}/etc - if ls -A ${DIR}/tmp/conffiles > /dev/null 2>&1 ; then - mv ${DIR}/tmp/conffiles/* ${DIR}/etc - fi - rm -rf ${DIR}/tmp - if [ "$1" = "remove" ]; then - rm -rf ${DIR}/ruleset - rm -rf ${DIR}/var - rm -rf ${DIR}/logs - fi - - # Delete old .save - find ${DIR}/etc/ -type f -name "*save" -exec rm -f {} \; - - # Rename the files - find ${DIR}/etc/ -type f -exec mv {} {}.save \; - - ;; - - purge) - - if getent passwd wazuh >/dev/null 2>&1; then - deluser wazuh > /dev/null 2>&1 - fi - if getent group wazuh >/dev/null 2>&1; then - delgroup wazuh > /dev/null 2>&1 - fi - rm -rf ${DIR}/* - - ;; - - upgrade) - - ;; - - *) - echo "postrm called with unknown argument \`$1'" >&2 - exit 1 - - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-agent/debian/preinst b/debs/SPECS/wazuh-agent/debian/preinst deleted file mode 100644 index fbb87731b5..0000000000 --- a/debs/SPECS/wazuh-agent/debian/preinst +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh -# preinst script for wazuh-agent - -set -e - -# configuration variables -DIR="/var/ossec" -WAZUH_TMP_DIR="${DIR}/packages_files/agent_config_files" - -# environment configuration -if [ ! -d ${WAZUH_TMP_DIR} ]; then - mkdir -p ${WAZUH_TMP_DIR} -else - rm -rf ${WAZUH_TMP_DIR} - mkdir -p ${WAZUH_TMP_DIR} -fi - -case "$1" in - install|upgrade) - - if [ "$1" = "upgrade" ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent.service > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif command -v service > /dev/null 2>&1 && service wazuh-agent status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-agent stop > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif ${DIR}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif ${DIR}/bin/ossec-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch ${WAZUH_TMP_DIR}/wazuh.restart - fi - ${DIR}/bin/ossec-control stop > /dev/null 2>&1 || ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - - if [ -d ${DIR}/logs/ossec ]; then - mv ${DIR}/logs/ossec ${DIR}/logs/wazuh - fi - - if [ -d ${DIR}/queue/ossec ]; then - mv ${DIR}/queue/ossec ${DIR}/queue/sockets - fi - fi - - if [ ! -z "$2" ] && [ ! -f ${DIR}/etc/ossec.conf ] ; then - touch ${WAZUH_TMP_DIR}/create_conf - fi - - # Delete old service - if [ -f /etc/init.d/ossec ]; then - rm /etc/init.d/ossec - fi - # back up the current user rules - if [ -f ${DIR}/etc/client.keys ]; then - cp ${DIR}/etc/client.keys ${WAZUH_TMP_DIR}/client.keys - fi - if [ -f ${DIR}/etc/local_internal_options.conf ]; then - cp -p ${DIR}/etc/local_internal_options.conf ${WAZUH_TMP_DIR}/local_internal_options.conf - fi - if [ -f ${DIR}/etc/ossec.conf ]; then - cp -p ${DIR}/etc/ossec.conf ${WAZUH_TMP_DIR}/ossec.conf - fi - - if [ -d ${DIR}/etc/shared ]; then - files="$(ls -A ${DIR}/etc/shared/*)" - fi - - if [ ! -z "$files" ]; then - mkdir -p ${WAZUH_TMP_DIR}/group - cp -rp ${DIR}/etc/shared/* ${WAZUH_TMP_DIR}/group/ - fi - ;; - - abort-upgrade) - - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-agent/debian/prerm b/debs/SPECS/wazuh-agent/debian/prerm deleted file mode 100644 index c045c6b441..0000000000 --- a/debs/SPECS/wazuh-agent/debian/prerm +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -# prerm script for wazuh-manager - -set -e - -DIR="/var/ossec" - -case "$1" in - upgrade|deconfigure) - - ;; - - remove) - - # Stop the services before uninstalling the package - # Check for systemd - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-agent status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service wazuh-agent stop > /dev/null 2>&1 - fi - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - - # Save the conffiles - mkdir -p ${DIR}/tmp/conffiles - # Save the client.keys - if [ -f ${DIR}/etc/client.keys ]; then - cp -p ${DIR}/etc/client.keys ${DIR}/tmp/conffiles - fi - # Save the local_internal_options.conf - if [ -f ${DIR}/etc/local_internal_options.conf ]; then - cp -p ${DIR}/etc/local_internal_options.conf ${DIR}/tmp/conffiles - fi - # Save the ossec.conf - if [ -f ${DIR}/etc/ossec.conf ]; then - cp -p ${DIR}/etc/ossec.conf ${DIR}/tmp/conffiles - fi - # Save the shared configuration files - if [ -d ${DIR}/etc/shared ]; then - cp -pr ${DIR}/etc/shared ${DIR}/tmp/conffiles - fi - - if [ -d ${DIR}/etc/shared/ ]; then - rm -rf ${DIR}/etc/shared/ - fi - - ;; - - failed-upgrade) - if [ -f ${DIR}/bin/wazuh-control ]; then - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - fi - ;; - - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 1 - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-agent/debian/rules b/debs/SPECS/wazuh-agent/debian/rules deleted file mode 100644 index b79b4ce99f..0000000000 --- a/debs/SPECS/wazuh-agent/debian/rules +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - -export TARGET_DIR=${CURDIR}/debian/wazuh-agent - -# Package build options -export INSTALLATION_DIR="/var/ossec" -export INSTALLATION_SCRIPTS_DIR="${INSTALLATION_DIR}/packages_files/agent_installation_scripts" -export JOBS="5" -export DEBUG_ENABLED="no" -export PATH="${PATH}" -export LD_LIBRARY_PATH="" - -%: - dh $@ - -override_dh_shlibdeps: - -override_dh_auto_configure: - -override_dh_auto_install: - -override_dh_install: - - rm -rf $(INSTALLATION_DIR)/ - - # Build the binaries - make -C src deps TARGET=agent - make -j$(JOBS) -C src/ TARGET=agent USE_SELINUX=yes DEBUG=$(DEBUG_ENABLED) - - USER_LANGUAGE="en" \ - USER_NO_STOP="y" \ - USER_INSTALL_TYPE="agent" \ - USER_DIR="$(INSTALLATION_DIR)" \ - USER_DELETE_DIR="y" \ - USER_ENABLE_ACTIVE_RESPONSE="y" \ - USER_ENABLE_SYSCHECK="y" \ - USER_ENABLE_ROOTCHECK="y" \ - USER_ENABLE_OPENSCAP="y" \ - USER_ENABLE_CISCAT="y" \ - USER_ENABLE_SYSCOLLECTOR="y" \ - USER_UPDATE="n" \ - USER_AGENT_SERVER_IP="MANAGER_IP" \ - USER_CA_STORE="/path/to/my_cert.pem" \ - USER_AUTO_START="n" \ - ./install.sh - - # Copying init.d script - mkdir -p ${TARGET_DIR}/etc/init.d/ - sed -i "s:WAZUH_HOME_TMP:${INSTALLATION_DIR}:g" src/init/templates/ossec-hids-debian.init - - cp src/init/templates/ossec-hids-debian.init ${TARGET_DIR}/etc/init.d/wazuh-agent - - # Copying systemd file - mkdir -p ${TARGET_DIR}/usr/lib/systemd/system/ - sed -i "s:WAZUH_HOME_TMP:${INSTALLATION_DIR}:g" src/init/templates/wazuh-agent.service - install -m 0644 src/init/templates/wazuh-agent.service ${TARGET_DIR}/usr/lib/systemd/system/ - - # Generating permission restoration file for postinstall - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR) - - # Remove preinstalled log files - rm -rf $(INSTALLATION_DIR)/logs/*.log - rm -rf $(INSTALLATION_DIR)/logs/*.json - - # Clean the preinstalled configuration assesment files - rm -rf ${TARGET_DIR}$(INSTALLATION_DIR)/ruleset/sca - mkdir -p ${TARGET_DIR}$(INSTALLATION_DIR)/ruleset/sca - - ./gen_permissions.sh $(INSTALLATION_DIR)/ ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/restore-permissions.sh - - # Copying to target - mkdir -p ${TARGET_DIR}$(INSTALLATION_DIR)/ - cp -r $(INSTALLATION_DIR)/. $(TARGET_DIR)$(INSTALLATION_DIR)/ - - # Copying install scripts to /usr/share - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - cp gen_ossec.sh ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - cp add_localfiles.sh ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src - cp src/VERSION ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/ - cp src/REVISION ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/ - - # Install configuration assesment files and files templates - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/applications - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/7 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/8 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/10 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/11 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/12 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/12/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/14/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/16/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/18/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/20/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/22/04 - - cp -r ruleset/sca/* ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca - - cp etc/templates/config/generic/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - cp etc/templates/config/generic/sca.manager.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - - cp etc/templates/config/debian/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian - cp etc/templates/config/debian/7/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/7 - cp etc/templates/config/debian/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/8 - cp etc/templates/config/debian/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/9 - cp etc/templates/config/debian/10/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/10 - cp etc/templates/config/debian/11/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/11 - cp etc/templates/config/debian/12/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/12 - - cp etc/templates/config/ubuntu/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu - cp etc/templates/config/ubuntu/12/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/12/04 - cp etc/templates/config/ubuntu/14/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/14/04 - cp etc/templates/config/ubuntu/16/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/16/04 - cp etc/templates/config/ubuntu/18/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/18/04 - cp etc/templates/config/ubuntu/20/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/20/04 - cp etc/templates/config/ubuntu/22/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/22/04 - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/init - cp -r src/init/* ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/init - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/generic - cp -r etc/templates/config/generic ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/debian - cp -r etc/templates/config/debian ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ubuntu - cp -r etc/templates/config/ubuntu ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - # Copying systemd file - mkdir -p ${TARGET_DIR}/etc/systemd/system/ - sed -i "s:WAZUH_HOME_TMP:${INSTALLATION_DIR}:g" src/init/templates/wazuh-agent.service - cp src/init/templates/wazuh-agent.service ${TARGET_DIR}/etc/systemd/system/ - -override_dh_auto_clean: - $(MAKE) -C src clean - - -override_dh_strip: - dh_strip --no-automatic-dbgsym - -.PHONY: override_dh_install override_dh_strip override_dh_auto_clean override_dh_auto_build override_dh_auto_configure diff --git a/debs/SPECS/wazuh-agent/debian/source/format b/debs/SPECS/wazuh-agent/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/debs/SPECS/wazuh-agent/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/debs/SPECS/wazuh-agent/debian/templates b/debs/SPECS/wazuh-agent/debian/templates deleted file mode 100644 index 3dbe63d83f..0000000000 --- a/debs/SPECS/wazuh-agent/debian/templates +++ /dev/null @@ -1,4 +0,0 @@ -Template: wazuh-agent/server-ip -Type: string -Default: 127.0.0.1 -Description: OSSEC server IP address for this agent. This server is also known as Manager and will receive information from the agent. You need to specify the IP address, the hostname is not valid. The agent still needs to be registered and started manually. diff --git a/debs/SPECS/wazuh-agent/debian/wazuh-agent.lintian-overrides b/debs/SPECS/wazuh-agent/debian/wazuh-agent.lintian-overrides deleted file mode 100644 index e1233f34da..0000000000 --- a/debs/SPECS/wazuh-agent/debian/wazuh-agent.lintian-overrides +++ /dev/null @@ -1,9 +0,0 @@ -wazuh-agent: embedded-library -wazuh-agent: embedded-zlib -wazuh-agent: possible-gpl-code-linked-with-openssl -wazuh-agent: new-package-should-close-itp-bug -wazuh-agent: possibly-insecure-handling-of-tmp-files-in-maintainer-script -wazuh-agent: non-standard-dir-in-var -wazuh-agent: file-in-unusual-dir -wazuh-agent: hardening-no-fortify-functions -wazuh-agent: hardening-no-relro diff --git a/debs/SPECS/wazuh-manager/debian/changelog b/debs/SPECS/wazuh-manager/debian/changelog deleted file mode 100644 index dc816d5f4e..0000000000 --- a/debs/SPECS/wazuh-manager/debian/changelog +++ /dev/null @@ -1,604 +0,0 @@ -wazuh-manager (4.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html - - -- Wazuh, Inc Thu, 15 Aug 2024 00:00:00 +0000 - -wazuh-manager (4.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html - - -- Wazuh, Inc Thu, 18 Jul 2024 00:00:00 +0000 - -wazuh-manager (4.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html - - -- Wazuh, Inc Wed, 12 Jun 2024 00:00:00 +0000 - -wazuh-manager (4.7.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html - - -- Wazuh, Inc Thu, 30 May 2024 00:00:00 +0000 - -wazuh-manager (4.7.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html - - -- Wazuh, Inc Thu, 25 Apr 2024 00:00:00 +0000 - -wazuh-manager (4.7.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html - - -- Wazuh, Inc Tue, 27 Feb 2024 00:00:00 +0000 - -wazuh-manager (4.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html - - -- Wazuh, Inc Tue, 09 Jan 2024 00:00:00 +0000 - -wazuh-manager (4.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html - - -- Wazuh, Inc Wed, 19 Dec 2023 00:00:00 +0000 - -wazuh-manager (4.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html - - -- Wazuh, Inc Tue, 27 Nov 2023 00:00:00 +0000 - -wazuh-manager (4.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html - - -- Wazuh, Inc Tue, 31 Oct 2023 00:00:00 +0000 - -wazuh-manager (4.5.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html - - -- Wazuh, Inc Tue, 24 Oct 2023 00:00:00 +0000 - -wazuh-manager (4.5.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html - - -- Wazuh, Inc Tue, 10 Oct 2023 00:00:00 +0000 - -wazuh-manager (4.5.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html - - -- Wazuh, Inc Thu, 31 Aug 2023 00:00:00 +0000 - -wazuh-manager (4.5.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-1.html - - -- Wazuh, Inc Thu, 24 Aug 2023 15:56:43 +0000 - -wazuh-manager (4.5.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html - - -- Wazuh, Inc Thu, 10 Aug 2023 13:45:36 +0000 - -wazuh-manager (4.4.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html - - -- Wazuh, Inc Mon, 10 Jul 2023 15:56:43 +0000 - -wazuh-manager (4.4.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html - - -- Wazuh, Inc Tue, 13 Jun 2023 12:31:50 +0000 - -wazuh-manager (4.4.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html - - -- Wazuh, Inc Thu, 25 May 2023 12:31:50 +0000 - -wazuh-manager (4.4.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html - - -- Wazuh, Inc Mon, 08 May 2023 12:31:50 +0000 - -wazuh-manager (4.3.11-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-11.html - - -- Wazuh, Inc Mon, 24 Apr 2023 15:00:00 +0000 - -wazuh-manager (4.4.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html - - -- Wazuh, Inc Mon, 17 Apr 2023 12:31:50 +0000 - -wazuh-manager (4.4.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html - - -- Wazuh, Inc Wed, 18 Jan 2023 12:31:50 +0000 - -wazuh-manager (4.3.10-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html - - -- Wazuh, Inc Thu, 10 Nov 2022 15:00:00 +0000 - -wazuh-manager (4.3.9-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html - - -- Wazuh, Inc Mon, 03 Oct 2022 15:00:00 +0000 - -wazuh-manager (4.3.8-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html - - -- Wazuh, Inc Mon, 19 Sep 2022 15:00:00 +0000 - -wazuh-manager (4.3.7-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html - - -- Wazuh, Inc Mon, 08 Aug 2022 15:00:00 +0000 - -wazuh-manager (4.3.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html - - -- Wazuh, Inc Thu, 07 Jul 2022 15:00:00 +0000 - -wazuh-manager (4.3.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html - - -- Wazuh, Inc Wed, 29 Jun 2022 15:00:00 +0000 - -wazuh-manager (4.3.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html - - -- Wazuh, Inc Tue, 07 Jun 2022 15:41:39 +0000 - -wazuh-manager (4.3.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html - - -- Wazuh, Inc Tue, 31 May 2022 15:41:39 +0000 - -wazuh-manager (4.3.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html - - -- Wazuh, Inc Mon, 30 May 2022 15:41:39 +0000 - -wazuh-manager (4.2.7-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-7.html - - -- Wazuh, Inc Sun, 29 May 2022 08:51:00 +0000 - -wazuh-manager (4.3.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html - - -- Wazuh, Inc Wed, 18 May 2022 12:14:41 +0000 - -wazuh-manager (4.3.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html - - -- Wazuh, Inc Thu, 05 May 2022 12:15:57 +0000 - -wazuh-manager (4.2.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-6.html - - -- Wazuh, Inc Fri, 25 Mar 2022 16:47:07 +0000 - -wazuh-manager (4.2.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-5.html - - -- Wazuh, Inc Mon, 15 Nov 2021 16:47:07 +0000 - -wazuh-manager (4.2.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-4.html - - -- Wazuh, Inc Thu, 21 Oct 2021 15:57:51 +0000 - -wazuh-manager (4.2.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-3.html - - -- Wazuh, Inc Wed, 06 Oct 2021 15:07:13 +0000 - -wazuh-manager (4.2.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-2.html - - -- Wazuh, Inc Tue, 28 Sep 2021 08:58:38 +0000 - -wazuh-manager (4.2.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-1.html - - -- Wazuh, Inc Sat, 25 Sep 2021 07:04:22 +0000 - -wazuh-manager (4.2.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-2-0.html - - -- Wazuh, Inc Mon, 26 Apr 2021 11:51:55 +0000 - -wazuh-manager (4.1.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-5.html - - -- Wazuh, Inc Thu, 22 Apr 2021 16:50:05 +0000 - -wazuh-manager (4.1.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-4.html - - -- Wazuh, Inc Mon, 29 Mar 2021 16:23:09 +0000 - -wazuh-manager (4.1.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-3.html - - -- Wazuh, Inc Sat, 20 Mar 2021 13:41:26 +0000 - -wazuh-manager (4.1.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-2.html - - -- Wazuh, Inc Mon, 08 Mar 2021 14:00:25 +0000 - -wazuh-manager (4.1.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-1.html - - -- Wazuh, Inc Fri, 05 Mar 2021 13:24:41 +0000 - -wazuh-manager (4.1.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-1-0.html - - -- Wazuh, Inc Tue, 19 Jan 2021 06:25:59 +0000 - - wazuh-manager (4.0.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-4.html - - -- Wazuh, Inc Tue, 12 Jan 2021 09:30:15 +0000 - -wazuh-manager (4.0.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-3.html - - -- Wazuh, Inc Mon, 30 Nov 2020 10:00:15 +0000 - -wazuh-manager (4.0.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-2.html - - -- Wazuh, Inc Mon, 23 Nov 2020 12:16:36 +0000 - -wazuh-manager (4.0.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-1.html - - -- Wazuh, Inc Sat, 31 Oct 2020 12:16:36 +0000 - -wazuh-manager (4.0.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-0-0.html - - -- Wazuh, Inc Mon, 19 Oct 2020 06:59:39 +0000 - - wazuh-manager (3.13.6-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-6.html - - -- Wazuh, Inc Wed, 21 Sep 2022 15:00:00 +0000 - - wazuh-manager (3.13.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-5.html - - -- Wazuh, Inc Wed, 24 Aug 2022 15:00:00 +0000 - - wazuh-manager (3.13.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-4.html - - -- Wazuh, Inc Mon, 30 May 2022 15:00:00 +0000 - -wazuh-manager (3.13.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-3.html - - -- Wazuh, Inc Sat, 24 Apr 2021 07:01:55 +0000 - -wazuh-manager (3.13.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-2.html - - -- Wazuh, Inc Fri, 21 Aug 2020 10:05:02 +0000 - -wazuh-manager (3.13.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-1.html - - -- Wazuh, Inc Tue, 14 Jul 2020 10:05:02 +0000 - -wazuh-manager (3.13.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-13-0.html - - -- Wazuh, Inc Mon, 29 Jun 2020 10:05:02 +0000 - -wazuh-manager (3.12.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-2.html - - -- Wazuh, Inc Thu, 9 Apr 2020 08:47:14 +0000 - -wazuh-manager (3.12.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-1.html - - -- Wazuh, Inc Wed, 8 Apr 2020 16:12:28 +0000 - -wazuh-manager (3.12.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-12-0.html - - -- Wazuh, Inc Wed, 25 Mar 2020 10:20:48 +0000 - -wazuh-manager (3.11.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-4.html - - -- Wazuh, Inc Thu, 24 Feb 2020 10:01:00 +0000 - -wazuh-manager (3.11.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-3.html - - -- Wazuh, Inc Wed, 22 Jan 2020 10:01:00 +0000 - -wazuh-manager (3.11.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-2.html - - -- Wazuh, Inc Tue, 7 Jan 2020 10:01:00 +0000 - -wazuh-manager (3.11.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-1.html - - -- Wazuh, Inc Thu, 26 Dec 2019 13:33:00 +0000 - -wazuh-manager (3.11.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-11-0.html - - -- Wazuh, Inc Mon, 7 Oct 2019 13:33:00 +0000 - -wazuh-manager (3.10.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-2.html - - -- Wazuh, Inc Mon, 23 Sep 2019 10:19:00 +0000 - -wazuh-manager (3.10.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-1.html - - -- Wazuh, Inc Thu, 19 Sep 2019 13:33:00 +0000 - -wazuh-manager (3.10.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-10-0.html - - -- Wazuh, Inc Mon, 26 Aug 2019 13:33:00 +0000 - -wazuh-manager (3.9.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-5.html - - -- Wazuh, Inc Thu, 8 Aug 2019 16:31:00 +0000 - -wazuh-manager (3.9.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-4.html - - -- Wazuh, Inc Tue, 12 Jul 2019 16:31:00 +0000 - -wazuh-manager (3.9.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-3.html - - -- Wazuh, Inc Tue, 11 Jun 2019 16:31:00 +0000 - -wazuh-manager (3.9.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-2.html - - -- Wazuh, Inc Mon, 6 Jun 2019 13:33:00 +0000 - -wazuh-manager (3.9.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-1.html - - -- Wazuh, Inc Mon, 6 May 2019 13:33:00 +0000 - -wazuh-manager (3.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-9-0.html - - -- Wazuh, Inc Mon, 25 Feb 2019 11:00:00 +0000 - -wazuh-manager (3.8.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-2.html - - -- Wazuh, Inc Wed, 30 Jan 2019 11:00:00 +0000 - -wazuh-manager (3.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-1.html - - -- Wazuh, Inc Thu, 24 Jan 2019 09:28:34 +0000 - -wazuh-manager (3.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-8-0.html - - -- Wazuh, Inc Mon, 16 Jan 2019 11:00:00 +0000 - -wazuh-manager (3.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-2.html - - -- Wazuh, Inc Mon, 10 Dec 2018 11:00:00 +0000 - -wazuh-manager (3.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-1.html - - -- Wazuh, Inc Mon, 12 Nov 2018 11:00:00 +0000 - -wazuh-manager (3.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-7-0.html - - -- Wazuh, Inc Sat, 10 Nov 2018 11:00:00 +0000 - -wazuh-manager (3.6.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-6-1.html - - -- Wazuh, Inc Mon, 3 Sep 2018 11:00:00 +0000 - -wazuh-manager (3.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-6-0.html - - -- Wazuh, Inc Fri, 24 Aug 2018 11:00:00 +0000 - -wazuh-manager (3.5.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-5-0.html - - -- Wazuh, Inc Wed, 25 Jul 2018 20:12:41 +0000 - -wazuh-manager (3.4.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-4-0.html - - -- Wazuh, Inc Thu, 28 Jun 2018 20:12:41 +0000 - -wazuh-manager (3.3.1-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-3-1.html - - -- Wazuh, Inc Thu, 14 Jun 2018 9:29:41 +0000 - -wazuh-manager (3.3.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-3-0.html - - -- Wazuh, Inc Thu, 07 Jun 2018 10:00:31 +0000 - -wazuh-manager (3.2.4-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-4.html - - -- Wazuh, Inc Wed, 30 May 2018 12:44:31 +0000 - -wazuh-manager (3.2.3-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-3.html - - -- Wazuh, Inc Tue, 15 May 2018 12:35:30 +0000 - -wazuh-manager (3.2.2-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-2.html - - -- Wazuh, Inc Tue, 13 Mar 2018 12:35:30 +0000 - -wazuh-manager (3.2.1-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-1.html - - -- Wazuh, Inc Wed, 21 Feb 2018 15:26:30 +0000 - -wazuh-manager (3.2.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-2-0.html - - -- Wazuh, Inc Thu, 11 Dec 2017 15:19:24 +0000 - - -wazuh-manager (3.1.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-1-0.html - - -- Wazuh, Inc Mon, 19 Dec 2017 08:00:10 +0000 - - -wazuh-manager (3.0.0-2) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-3-0-0.html - - -- Wazuh, Inc Mon, 01 Nov 2017 08:00:10 +0000 - -wazuh-manager (2.1.1-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-2-1-1.html - - -- Wazuh, Inc Mon, 01 Aug 2016 08:43:10 +0000 - -wazuh-manager (2.1.0-1) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-2-1-0.html - - -- Wazuh, Inc Mon, 01 Jul 2016 08:43:10 +0000 - -wazuh-manager (2.0.1-1) stable; urgency=low - - * Changed random data generator for a secure OS-provided generator. - exi* Changed Windows installer file name (depending on version). - * Linux distro detection using standard os-release file. - * Changed some URLs to documentation. - * Disable synchronization with SQLite databases for Syscheck by default. - * Minor changes at Rootcheck formatter for JSON alerts. - * Added debugging messages to Integrator logs. - * Show agent ID when possible on logs about incorrectly formatted messages. - * Use default maximum inotify event queue size. - * Show remote IP on encoding format errors when unencrypting messages. - - -- Wazuh, Inc Thu, 06 Jun 2017 08:43:10 +0000 - -wazuh-manager (2.0-1) stable; urgency=low - - * wazuh-manager - base 2.0 - - -- Wazuh, Inc Mon, 01 Jul 2016 08:43:10 +0000 diff --git a/debs/SPECS/wazuh-manager/debian/compat b/debs/SPECS/wazuh-manager/debian/compat deleted file mode 100644 index 7f8f011eb7..0000000000 --- a/debs/SPECS/wazuh-manager/debian/compat +++ /dev/null @@ -1 +0,0 @@ -7 diff --git a/debs/SPECS/wazuh-manager/debian/conffiles b/debs/SPECS/wazuh-manager/debian/conffiles deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/debs/SPECS/wazuh-manager/debian/control b/debs/SPECS/wazuh-manager/debian/control deleted file mode 100644 index bbdeb2a7c6..0000000000 --- a/debs/SPECS/wazuh-manager/debian/control +++ /dev/null @@ -1,15 +0,0 @@ -Source: wazuh-manager -Section: admin -Priority: extra -Maintainer: Wazuh, Inc -Build-Depends: debhelper (>= 7.0.50~), libssl-dev, linux-libc-dev, gawk, libaudit-dev, selinux-basics -Standards-Version: 3.8.4 -Homepage: http://www.wazuh.com - -Package: wazuh-manager -Architecture: any -Depends: ${shlibs:Depends}, libc6 (>= 2.7), lsb-release, debconf, adduser -Suggests: expect -Conflicts: ossec-hids-agent, wazuh-agent, ossec-hids, wazuh-api -Replaces: wazuh-api -Description: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring diff --git a/debs/SPECS/wazuh-manager/debian/copyright b/debs/SPECS/wazuh-manager/debian/copyright deleted file mode 100644 index eaf819583d..0000000000 --- a/debs/SPECS/wazuh-manager/debian/copyright +++ /dev/null @@ -1,22 +0,0 @@ -This work was packaged for Debian by: - - Wazuh, Inc on Thu, 15 Aug 2024 00:00:00 +0000 - -It was downloaded from: - - https://www.wazuh.com - -Copyright: - - GNU General Public License version 2. - -License: - - GNU General Public License version 2. - -The Debian packaging is: - - Copyright (C) 2015 Wazuh, Inc - -and is licensed under the GPL version 2, -see "/usr/share/common-licenses/GPL-2". diff --git a/debs/SPECS/wazuh-manager/debian/postinst b/debs/SPECS/wazuh-manager/debian/postinst deleted file mode 100644 index 974441981b..0000000000 --- a/debs/SPECS/wazuh-manager/debian/postinst +++ /dev/null @@ -1,322 +0,0 @@ -#!/bin/sh -# postinst script for Wazuh -# Wazuh, Inc 2015 -set -e -case "$1" in - configure) - - OS=$(lsb_release -si) - VER=$(lsb_release -sr) - DIR="/var/ossec" - USER="wazuh" - GROUP="wazuh" - WAZUH_GLOBAL_TMP_DIR="${DIR}/packages_files" - WAZUH_TMP_DIR="${WAZUH_GLOBAL_TMP_DIR}/manager_config_files" - OSMYSHELL="/sbin/nologin" - SCRIPTS_DIR="${WAZUH_GLOBAL_TMP_DIR}/manager_installation_scripts" - SCA_BASE_DIR="${SCRIPTS_DIR}/sca" - - if [ -d /run/systemd/system ]; then - rm -f /etc/init.d/wazuh-manager - fi - - if [ ! -f ${OSMYSHELL} ]; then - if [ -f "/bin/false" ]; then - OSMYSHELL="/bin/false" - fi - fi - - if ! getent group ${GROUP} > /dev/null 2>&1; then - addgroup --system ${GROUP} > /dev/null 2>&1 - fi - if ! getent passwd ${USER} > /dev/null 2>&1; then - adduser --system --home ${DIR} --shell ${OSMYSHELL} --ingroup ${GROUP} ${USER} > /dev/null 2>&1 - fi - - if [ -z "$2" ] || [ -f ${WAZUH_TMP_DIR}/create_conf ] ; then - - ${SCRIPTS_DIR}/gen_ossec.sh conf manager ${OS} ${VER} ${DIR} > ${DIR}/etc/ossec.conf - ${SCRIPTS_DIR}/add_localfiles.sh ${DIR} >> ${DIR}/etc/ossec.conf - - passlist="${DIR}/agentless/.passlist" - - if [ -f $passlist ] && ! base64 -d $passlist > /dev/null 2>&1; then - cp $passlist $passlist.bak - base64 $passlist.bak > $passlist - if [ $? = 0 ]; then - rm -f $passlist.bak - else - echo "ERROR: Couldn't encode Agentless passlist." - mv $passlist.bak $passlist - fi - fi - else - ${SCRIPTS_DIR}/gen_ossec.sh conf manager ${OS} ${VER} ${DIR} > ${DIR}/etc/ossec.conf.new - chmod 660 ${DIR}/etc/ossec.conf.new - fi - - # Remove/relocate existing SQLite databases - rm -f ${DIR}/var/db/cluster.db* || true - rm -f ${DIR}/var/db/.profile.db* || true - rm -rf ${DIR}/var/db/agents || true - - if [ -f ${DIR}/var/db/global.db ]; then - mv ${DIR}/var/db/global.db ${DIR}/queue/db/ - rm -f ${DIR}/var/db/global.db* || true - rm -f ${DIR}/var/db/.template.db || true - fi - - if [ -f ${DIR}/queue/db/global.db ]; then - chmod 640 ${DIR}/queue/db/global.db* - chown ${USER}:${GROUP} ${DIR}/queue/db/global.db* - fi - - # Delete uncompatible DBs versions - if [ ! -z $2 ]; then - - PREVIOUS_VERSION=$(echo $2 | cut -d"-" -f1) - - # Get the major and minor version - MAJOR=$(echo $PREVIOUS_VERSION | cut -d. -f1) - MINOR=$(echo $PREVIOUS_VERSION | cut -d. -f2) - - if [ $MAJOR = 3 ] && [ $MINOR -lt 7 ]; then - rm -f ${DIR}/queue/db/*.db* - rm -f ${DIR}/queue/db/.template.db - fi - fi - - # Remove Vuln-detector database - rm -f ${DIR}/queue/vulnerabilities/cve.db || true - - # Remove groups backup files - rm -rf ${DIR}/backup/groups - - # Generation auto-signed certificate if not exists - if [ ! -f "${DIR}/etc/sslmanager.key" ] && [ ! -f "${DIR}/etc/sslmanager.cert" ]; then - ${DIR}/bin/wazuh-authd -C 365 -B 2048 -S "/C=US/ST=California/CN=Wazuh/" -K ${DIR}/etc/sslmanager.key -X ${DIR}/etc/sslmanager.cert 2>/dev/null - fi - - chmod 640 ${DIR}/etc/sslmanager.cert ${DIR}/etc/sslmanager.key > /dev/null 2>&1 || true - - # For the etc dir - if [ -f /etc/localtime ]; then - cp -pL /etc/localtime ${DIR}/etc/; - chmod 640 ${DIR}/etc/localtime - chown root:${GROUP} ${DIR}/etc/localtime - fi - - if [ -f /etc/TIMEZONE ]; then - cp -p /etc/TIMEZONE ${DIR}/etc/; - chmod 640 ${DIR}/etc/TIMEZONE - chown root:${GROUP} ${DIR}/etc/localtime - fi - - # Restore client.keys configuration - if [ -f ${WAZUH_TMP_DIR}/client.keys ]; then - mv ${WAZUH_TMP_DIR}/client.keys ${DIR}/etc/client.keys - fi - # Restore local insternal options configuration - if [ -f ${WAZUH_TMP_DIR}/local_internal_options.conf ]; then - mv ${WAZUH_TMP_DIR}/local_internal_options.conf ${DIR}/etc/local_internal_options.conf - fi - # Restore lists - if [ -d ${WAZUH_TMP_DIR}/lists ]; then - cp -rp ${WAZUH_TMP_DIR}/lists ${DIR}/etc/ - fi - # Restore ossec.conf configuration - if [ -f ${WAZUH_TMP_DIR}/ossec.conf ]; then - mv ${WAZUH_TMP_DIR}/ossec.conf ${DIR}/etc/ossec.conf - fi - # Restore local_rules.xml configuration - if [ -f ${WAZUH_TMP_DIR}/local_rules.xml ]; then - mv ${WAZUH_TMP_DIR}/local_rules.xml ${DIR}/etc/rules/local_rules.xml - fi - # Restore local_decoders.xml configuration - if [ -f ${WAZUH_TMP_DIR}/local_decoder.xml ]; then - mv ${WAZUH_TMP_DIR}/local_decoder.xml ${DIR}/etc/decoders/local_decoder.xml - fi - - # Restore group files - if [ -d ${WAZUH_TMP_DIR}/group ]; then - cp -rfp ${WAZUH_TMP_DIR}/group/* ${DIR}/etc/shared - rm -rf ${WAZUH_TMP_DIR}/group/ - fi - - # Restore agent-groups files - if [ -d ${WAZUH_TMP_DIR}/agent-groups ]; then - mv ${WAZUH_TMP_DIR}/agent-groups ${DIR}/queue/ - fi - - # Restore RBAC database - if [ -f ${WAZUH_TMP_DIR}/rbac.db ]; then - cp -fp ${WAZUH_TMP_DIR}/rbac.db ${DIR}/api/configuration/security/rbac.db - rm -rf ${WAZUH_TMP_DIR}/rbac.db - fi - - # Restore API configuration file - if [ -f ${WAZUH_TMP_DIR}/api.yaml ]; then - cp -fp ${WAZUH_TMP_DIR}/api.yaml ${DIR}/api/configuration/api.yaml - rm -rf ${WAZUH_TMP_DIR}/api.yaml - fi - - # More files - touch ${DIR}/etc/client.keys - - touch ${DIR}/logs/active-responses.log - touch ${DIR}/logs/integrations.log - chown ${USER}:${GROUP} ${DIR}/logs/active-responses.log - chown ${USER}:${GROUP} ${DIR}/logs/integrations.log - chmod 0660 ${DIR}/logs/active-responses.log - chmod 0640 ${DIR}/logs/integrations.log - - # Set merged.mg permissions to new ones - find ${DIR}/etc/shared/ -type f -name 'merged.mg' -exec chmod 644 {} \; - - if [ -f ${DIR}/etc/shared/ar.conf ]; then - chown root:wazuh ${DIR}/etc/shared/ar.conf - fi - - # Check if SELinux is installed and enabled - if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - semodule -i ${DIR}/var/selinux/wazuh.pp - semodule -e wazuh - fi - fi - - # Install the SCA files - if [ -d "${SCA_BASE_DIR}" ]; then - - . ${SCRIPTS_DIR}/src/init/dist-detect.sh - - SCA_DIR="${DIST_NAME}/${DIST_VER}" - - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - mkdir -p ${DIR}/ruleset/sca - - # Install the configuration files needed for this hosts - if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" - else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" - fi - - SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" - - if [ -r ${SCA_TMP_FILE} ] && [ -r ${SCA_BASE_DIR}/generic/sca.manager.files ]; then - - rm -f ${DIR}/ruleset/sca/* || true - - for sca_file in $(cat ${SCA_TMP_FILE}); do - mv ${SCA_BASE_DIR}/${sca_file} ${DIR}/ruleset/sca - done - - for sca_file in $(cat ${SCA_BASE_DIR}/generic/sca.manager.files); do - filename=$(basename ${sca_file}) - if [ -f "${SCA_BASE_DIR}/${sca_file}" ] && [ ! -f "${DIR}/ruleset/sca/${filename}" ]; then - mv ${SCA_BASE_DIR}/${sca_file} ${DIR}/ruleset/sca/${filename}.disabled - fi - done - fi - - # Set correct permissions, owner and group. ruleset directory may be empty. - if [ -n "$(ls -A ${DIR}/ruleset/sca/)" ]; then - chmod --recursive u=rwX,g=rX,o= ${DIR}/ruleset/sca/ - chown --recursive root:${GROUP} ${DIR}/ruleset/sca/ - fi - # Delete the temporary directory - rm -rf ${SCA_BASE_DIR} - - fi - - # Ensure that the 'Indexer' is configured - CONFIG_INDEXER_TEMPLATE="${SCRIPTS_DIR}/etc/templates/config/generic/wodle-indexer.manager.template" - . ${SCRIPTS_DIR}/src/init/update-indexer.sh - updateIndexerTemplate "${DIR}/etc/ossec.conf" $CONFIG_INDEXER_TEMPLATE - - # Restoring file permissions - ${SCRIPTS_DIR}/restore-permissions.sh > /dev/null 2>&1 || true - - # Remove old service file /etc/systemd/system/wazuh-manager.service if present - if [ -f /etc/systemd/system/wazuh-manager.service ]; then - rm -f /etc/systemd/system/wazuh-manager.service - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - fi - fi - - # Remove old ossec user and group if exists and change ownwership of files - - if getent group ossec > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user root -print0 | xargs -0 chown root:wazuh > /dev/null 2>&1 || true - if getent passwd ossec > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossec -print0 | xargs -0 chown ${USER}:${GROUP} > /dev/null 2>&1 || true - deluser ossec > /dev/null 2>&1 - fi - if getent passwd ossecm > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossecm -print0 | xargs -0 chown ${USER}:${GROUP} > /dev/null 2>&1 || true - deluser ossecm > /dev/null 2>&1 - fi - if getent passwd ossecr > /dev/null 2>&1; then - find ${DIR}/ -group ossec -user ossecr -print0 | xargs -0 chown ${USER}:${GROUP} > /dev/null 2>&1 || true - deluser ossecr > /dev/null 2>&1 - fi - if getent group ossec > /dev/null 2>&1; then - delgroup ossec > /dev/null 2>&1 - fi - fi - - if [ ! -z "$2" ]; then - if [ -f ${WAZUH_TMP_DIR}/wazuh.restart ] ; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-manager.service > /dev/null 2>&1 - elif command -v service > /dev/null 2>&1 ; then - service wazuh-manager restart > /dev/null 2>&1 - else - ${DIR}/bin/wazuh-control restart > /dev/null 2>&1 - fi - fi - fi - - #Delete obsolete files - if [ -f /etc/ossec-init.conf ]; then - rm -f /etc/ossec-init.conf - fi - - # Delete installation scripts - if [ -d ${SCRIPTS_DIR} ]; then - rm -rf ${SCRIPTS_DIR} - fi - - # Delete tmp directory - if [ -d ${WAZUH_TMP_DIR} ]; then - rm -r ${WAZUH_TMP_DIR} - fi - - # If the parent directory is empty, delete it - if [ -z "$(ls -A ${WAZUH_GLOBAL_TMP_DIR})" ]; then - rm -rf ${WAZUH_GLOBAL_TMP_DIR} - fi - - ;; - - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - - *) - echo "postinst called with unknown argument \`$1'" >2 - exit 1 - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-manager/debian/postrm b/debs/SPECS/wazuh-manager/debian/postrm deleted file mode 100644 index 016f40dcad..0000000000 --- a/debs/SPECS/wazuh-manager/debian/postrm +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh -# postrm script for Wazuh -# Wazuh, Inc 2015 -set -e -DIR="/var/ossec" -WAZUH_TMP_DIR="${DIR}/packages_files/manager_config_files" - -case "$1" in - remove|failed-upgrade|abort-install|abort-upgrade|disappear) - - if [ -d ${WAZUH_TMP_DIR} ]; then - rm -rf ${WAZUH_TMP_DIR} - fi - - # Back up the old configuration files as .save - if [ ! -d ${DIR}/etc/shared/default ]; then - mkdir -p ${DIR}/etc/shared/default - fi - - # Move files from ${DIR}/tmp to ${DIR}/etc - if [ -f ${DIR}/tmp/conffiles/shared/default/agent.conf ]; then - mv ${DIR}/tmp/conffiles/shared/default/agent.conf ${DIR}/etc/shared/default/agent.conf.save - fi - - # Move files from ${DIR}/tmp to ${DIR}/etc - if [ -f ${DIR}/tmp/conffiles/api.yaml ]; then - mkdir -p ${DIR}/api/configuration - mv ${DIR}/tmp/conffiles/api.yaml ${DIR}/api/configuration/api.yaml - fi - - # If the directory is not empty, copy the files into ${DIR}/etc - if ls -A ${DIR}/tmp/conffiles > /dev/null 2>&1 ; then - cp -Rf ${DIR}/tmp/conffiles/* ${DIR}/etc - fi - rm -rf ${DIR}/tmp - if [ "$1" = "remove" ]; then - rm -rf ${DIR}/ruleset - rm -rf ${DIR}/var - rm -rf ${DIR}/logs - fi - - # Delete old .save - find ${DIR}/etc/ -type f -name "*save" -exec rm -f {} \; - find ${DIR}/api/ -type f -name "*save" -exec rm -f {} \; - - # Rename the files - find ${DIR}/etc/ -type f ! -name *shared* -exec mv {} {}.save \; - find ${DIR}/api/ -type f -exec mv {} {}.save \; - - ;; - - purge) - if getent passwd wazuh > /dev/null 2>&1 ; then - deluser wazuh > /dev/null 2>&1 - fi - if getent group wazuh > /dev/null 2>&1; then - delgroup wazuh > /dev/null 2>&1 - fi - rm -rf ${DIR} - ;; - - upgrade) - - ;; - - *) - echo "postrm called with unknown argument \`$1'" >&2 - exit 0 - - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-manager/debian/preinst b/debs/SPECS/wazuh-manager/debian/preinst deleted file mode 100644 index cdd048c4af..0000000000 --- a/debs/SPECS/wazuh-manager/debian/preinst +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/sh -# preinst script for Wazuh - -set -e - -# configuration variables -DIR="/var/ossec" -WAZUH_TMP_DIR="${DIR}/packages_files/manager_config_files" -VERSION="$2" -MAJOR=$(echo "$VERSION" | cut -dv -f2 | cut -d. -f1) - -# environment configuration -if [ ! -d ${WAZUH_TMP_DIR} ]; then - mkdir -p ${WAZUH_TMP_DIR} -else - rm -rf ${WAZUH_TMP_DIR} - mkdir -p ${WAZUH_TMP_DIR} -fi - -case "$1" in - install|upgrade) - - if [ "$1" = "upgrade" ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-manager > /dev/null 2>&1; then - systemctl stop wazuh-manager.service > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif command -v service > /dev/null 2>&1 && service wazuh-manager status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-manager stop > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif ${DIR}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif ${DIR}/bin/ossec-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch ${WAZUH_TMP_DIR}/wazuh.restart - fi - ${DIR}/bin/ossec-control stop > /dev/null 2>&1 || ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - if pgrep -f ossec-authd > /dev/null 2>&1; then - kill -15 $(pgrep -f ossec-authd) - fi - - if [ -d ${DIR}/logs/ossec ]; then - mv ${DIR}/logs/ossec ${DIR}/logs/wazuh - fi - - if [ -d ${DIR}/queue/ossec ]; then - mv ${DIR}/queue/ossec ${DIR}/queue/sockets - fi - - # Delete old API backups - if [ -d ${DIR}/~api ]; then - rm -rf ${DIR}/~api - fi - - # Get old package version - if [ -f /etc/ossec-init.conf ]; then - . /etc/ossec-init.conf - else - VERSION=$(${DIR}/bin/wazuh-control info -v) - fi - - # Get the major and minor version - MAJOR=$(echo $VERSION | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo $VERSION | cut -d. -f2) - - # Delete 3.X Wazuh API service - if [ "$MAJOR" = "3" ] && [ -d ${DIR}/api ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && \ - systemctl list-unit-files --type service | grep wazuh-api; then - systemctl stop wazuh-api.service > /dev/null 2>&1 - systemctl disable wazuh-api.service > /dev/null 2>&1 - rm -f /etc/systemd/system/wazuh-api.service || true - fi - - if command -v service > /dev/null 2>&1 && service status wazuh-api > /dev/null 2>&1 ; then - service wazuh-api stop > /dev/null 2>&1 - update-rc.d wazuh-api remove > /dev/null 2>&1 - rm -f /etc/rc.d/init.d/wazuh-api || true - fi - fi - fi - - if [ ! -z "$2" ] && [ ! -f ${DIR}/etc/ossec.conf ] ; then - touch ${WAZUH_TMP_DIR}/create_conf - fi - - if [ "$1" = "upgrade" ]; then - # RBAC database - if [ -f ${DIR}/api/configuration/security/rbac.db ]; then - cp -fp ${DIR}/api/configuration/security/rbac.db ${WAZUH_TMP_DIR}/rbac.db - fi - - # API configuration file - if [ -f ${DIR}/api/configuration/api.yaml ]; then - cp -fp ${DIR}/api/configuration/api.yaml ${WAZUH_TMP_DIR}/api.yaml - fi - - # Agent-groups files - if [ -d ${DIR}/queue/agent-groups ]; then - mv -f ${DIR}/queue/agent-groups ${WAZUH_TMP_DIR}/ - fi - fi - - # Delete old service - if [ -f /etc/init.d/ossec ]; then - rm /etc/init.d/ossec - fi - - if [ -d ${DIR}/etc/lists ]; then - cp -rp ${DIR}/etc/lists ${WAZUH_TMP_DIR}/lists - fi - - if [ -f ${DIR}/etc/client.keys ]; then - cp -p ${DIR}/etc/client.keys ${WAZUH_TMP_DIR}/client.keys - fi - - if [ -f ${DIR}/etc/local_internal_options.conf ]; then - cp -p ${DIR}/etc/local_internal_options.conf ${WAZUH_TMP_DIR}/local_internal_options.conf - fi - - if [ -f ${DIR}/etc/rules/local_rules.xml ]; then - cp -p ${DIR}/etc/rules/local_rules.xml ${WAZUH_TMP_DIR}/local_rules.xml - fi - - if [ -f ${DIR}/etc/decoders/local_decoder.xml ]; then - cp -p ${DIR}/etc/decoders/local_decoder.xml ${WAZUH_TMP_DIR}/local_decoder.xml - fi - - if [ -f ${DIR}/etc/ossec.conf ]; then - cp -p ${DIR}/etc/ossec.conf ${WAZUH_TMP_DIR}/ossec.conf - fi - - if [ -d ${DIR}/etc/shared ]; then - cp -rp ${DIR}/etc/shared ${WAZUH_TMP_DIR}/group - fi - - if [ -d ${DIR}/var/db/agents ]; then - rm -rf ${DIR}/var/db/agents - fi - - # Remove plain-text agent information if exists - if [ -d ${DIR}/queue/agent-info ]; then - rm -rf ${DIR}/queue/agent-info/* > /dev/null 2>&1 - fi - - if [ -d ${DIR}/queue/rootcheck ]; then - rm -rf ${DIR}/queue/rootcheck/* > /dev/null 2>&1 - fi - - # Remove groups backup content if exists - if [ -d ${DIR}/backup/groups ]; then - rm -rf ${DIR}/backup/groups/* > /dev/null 2>&1 - fi - ;; - - abort-upgrade) - - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 0 - - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-manager/debian/prerm b/debs/SPECS/wazuh-manager/debian/prerm deleted file mode 100644 index e0c47ca665..0000000000 --- a/debs/SPECS/wazuh-manager/debian/prerm +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# prerm script for wazuh-manager - -set -e -DIR="/var/ossec" - -case "$1" in - upgrade|deconfigure) - - ;; - - remove) - # Stop the services before uninstalling the package - # Check for systemd - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-manager > /dev/null 2>&1; then - systemctl stop wazuh-manager > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-manager status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service wazuh-manager stop > /dev/null 2>&1 - fi - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - - # Purging files - rm -rf ${DIR}/stats/* - rm -rf ${DIR}/queue/* - rm -rf ${DIR}/var/* - rm -rf ${DIR}/framework/* - - # Save the configuration files in ${DIR}/tmp/conffiles - mkdir -p ${DIR}/tmp/conffiles - - # Save the client.keys - if [ -f ${DIR}/etc/client.keys ]; then - cp -p ${DIR}/etc/client.keys ${DIR}/tmp/conffiles - fi - # Save the local_internal_options.conf - if [ -f ${DIR}/etc/local_internal_options.conf ]; then - cp -p ${DIR}/etc/local_internal_options.conf ${DIR}/tmp/conffiles - fi - # Save the ossec.conf - if [ -f ${DIR}/etc/ossec.conf ]; then - cp -p ${DIR}/etc/ossec.conf ${DIR}/tmp/conffiles - fi - # Save the local decoders - if [ -d ${DIR}/etc/decoders ]; then - cp -pr ${DIR}/etc/decoders ${DIR}/tmp/conffiles - fi - # Save the lists - if [ -d ${DIR}/etc/lists ]; then - cp -pr ${DIR}/etc/lists ${DIR}/tmp/conffiles - fi - # Save the rootcheck files - if [ -d ${DIR}/etc/rootcheck ]; then - cp -pr ${DIR}/etc/rootcheck ${DIR}/tmp/conffiles - fi - # Save the local rules - if [ -d ${DIR}/etc/rules ]; then - cp -pr ${DIR}/etc/rules ${DIR}/tmp/conffiles - fi - # Save the agent.conf from the group default - mkdir -p ${DIR}/tmp/conffiles/shared/default - if [ -f ${DIR}/etc/shared/default/agent.conf ]; then - cp -p ${DIR}/etc/shared/default/agent.conf ${DIR}/tmp/conffiles/shared/default - fi - # Save the client.keys - if [ -f ${DIR}/api/configuration/api.yaml ]; then - cp -p ${DIR}/api/configuration/api.yaml ${DIR}/tmp/conffiles - fi - ;; - - failed-upgrade) - if [ -f ${DIR}/bin/wazuh-control ]; then - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - fi - ;; - - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 0 - ;; - -esac - -exit 0 diff --git a/debs/SPECS/wazuh-manager/debian/rules b/debs/SPECS/wazuh-manager/debian/rules deleted file mode 100644 index f07e01f938..0000000000 --- a/debs/SPECS/wazuh-manager/debian/rules +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS -export PKG_DIR=debian/wazuh-manager - -export TARGET_DIR=${CURDIR}/${PKG_DIR} - -# Package build options -export INSTALLATION_DIR="/var/ossec" -export INSTALLATION_SCRIPTS_DIR="${INSTALLATION_DIR}/packages_files/manager_installation_scripts" -export JOBS="5" -export DEBUG_ENABLED="no" -export PATH="${PATH}" -export LD_LIBRARY_PATH="" - -%: - dh $@ - -override_dh_shlibdeps: - -override_dh_auto_configure: - -override_dh_auto_install: - -override_dh_install: - - rm -rf $(INSTALLATION_DIR)/ - # Build the binaries - make -C src deps TARGET=server - make -j$(JOBS) -C src/ TARGET=server USE_SELINUX=yes DEBUG=$(DEBUG_ENABLED) - - USER_LANGUAGE="en" \ - USER_NO_STOP="y" \ - USER_INSTALL_TYPE="server" \ - USER_DIR="$(INSTALLATION_DIR)" \ - USER_DELETE_DIR="y" \ - USER_ENABLE_ACTIVE_RESPONSE="y" \ - USER_ENABLE_SYSCHECK="y" \ - USER_ENABLE_ROOTCHECK="y" \ - USER_ENABLE_OPENSCAP="y" \ - USER_ENABLE_CISCAT="y" \ - USER_ENABLE_SYSCOLLECTOR="y" \ - USER_UPDATE="n" \ - USER_ENABLE_EMAIL="n" \ - USER_WHITE_LIST="n" \ - USER_ENABLE_SYSLOG="y" \ - USER_ENABLE_AUTHD="y" \ - USER_SERVER_IP="MANAGER_IP" \ - USER_CA_STORE="/path/to/my_cert.pem" \ - USER_GENERATE_AUTHD_CERT="y" \ - USER_AUTO_START="n" \ - USER_CREATE_SSL_CERT="n" \ - DOWNLOAD_CONTENT="y" \ - ./install.sh - - # Copying init.d script - mkdir -p ${TARGET_DIR}/etc/init.d/ - sed -i "s:WAZUH_HOME_TMP:${INSTALLATION_DIR}:g" src/init/templates/ossec-hids-debian.init - cp src/init/templates/ossec-hids-debian.init ${TARGET_DIR}/etc/init.d/wazuh-manager - - # Copying systemd file - mkdir -p ${TARGET_DIR}/usr/lib/systemd/system/ - sed -i "s:WAZUH_HOME_TMP:${INSTALLATION_DIR}:g" src/init/templates/wazuh-manager.service - install -m 0644 src/init/templates/wazuh-manager.service ${TARGET_DIR}/usr/lib/systemd/system/ - - # Generating permission restoration file for postinstall - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - - # Remove preinstalled log files - rm -rf $(INSTALLATION_DIR)/logs/*.log - rm -rf $(INSTALLATION_DIR)/logs/*.json - - # Clean the preinstalled configuration assesment files - rm -rf ${TARGET_DIR}$(INSTALLATION_DIR)/ruleset/sca - mkdir -p ${TARGET_DIR}$(INSTALLATION_DIR)/ruleset/sca - - ./gen_permissions.sh $(INSTALLATION_DIR)/ ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/restore-permissions.sh - - # Copying to target - mkdir -p ${TARGET_DIR}$(INSTALLATION_DIR)/ - cp -r $(INSTALLATION_DIR)/. $(TARGET_DIR)$(INSTALLATION_DIR)/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - cp gen_ossec.sh ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - cp add_localfiles.sh ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src - cp src/VERSION ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/ - cp src/REVISION ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/init - cp -r src/init/* ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/src/init - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/generic - cp -r etc/templates/config/generic ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/debian - cp -r etc/templates/config/debian ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ubuntu - cp -r etc/templates/config/ubuntu ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/etc/templates/config/ - - # Install configuration assesment files and files templates - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/applications - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/1 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/2 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/2023 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/5 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/6 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/7 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/15 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/16 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/17 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/18 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/19 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/20 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/21 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/22 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/23 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/7 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/8 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/10 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/11 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/12 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ol/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/5 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/6 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/7 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/8 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/sles/11 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/sles/12 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/sunos - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/suse/11 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/suse/12 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/12/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/14/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/16/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/18/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/20/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/22/04 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/windows - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rocky/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/almalinux/8 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/almalinux/9 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sunos/5/11 - mkdir -p ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rocky/8 - - cp -r ruleset/sca/* ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca - - cp etc/templates/config/generic/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - cp etc/templates/config/generic/sca.manager.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/generic - cp etc/templates/config/sunos/5/11/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sunos/5/11 - - cp etc/templates/config/amzn/1/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/1 - cp etc/templates/config/amzn/2/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/2 - cp etc/templates/config/amzn/2023/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/amzn/2023 - - cp etc/templates/config/darwin/15/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/15 - cp etc/templates/config/darwin/16/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/16 - cp etc/templates/config/darwin/17/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/17 - cp etc/templates/config/darwin/18/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/18 - cp etc/templates/config/darwin/18/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/19 - cp etc/templates/config/darwin/20/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/20 - cp etc/templates/config/darwin/21/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/21 - cp etc/templates/config/darwin/22/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/22 - cp etc/templates/config/darwin/23/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/darwin/23 - - cp etc/templates/config/debian/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian - cp etc/templates/config/debian/7/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/7 - cp etc/templates/config/debian/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/8 - cp etc/templates/config/debian/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/9 - cp etc/templates/config/debian/10/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/10 - cp etc/templates/config/debian/11/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/11 - cp etc/templates/config/debian/12/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/debian/12 - - cp etc/templates/config/centos/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos - cp etc/templates/config/centos/5/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/5 - cp etc/templates/config/centos/6/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/6 - cp etc/templates/config/centos/7/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/7 - cp etc/templates/config/centos/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/centos/8 - - cp etc/templates/config/ol/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ol/9 - - cp etc/templates/config/rhel/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel - cp etc/templates/config/rhel/5/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/5 - cp etc/templates/config/rhel/6/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/6 - cp etc/templates/config/rhel/7/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/7 - cp etc/templates/config/rhel/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/8 - cp etc/templates/config/rhel/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rhel/9 - - cp etc/templates/config/sles/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/sles - cp etc/templates/config/sles/11/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/sles/11 - - cp etc/templates/config/suse/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/suse - cp etc/templates/config/suse/11/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/suse/11 - - cp etc/templates/config/ubuntu/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu - cp etc/templates/config/ubuntu/12/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/12/04 - cp etc/templates/config/ubuntu/14/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/14/04 - cp etc/templates/config/ubuntu/16/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/16/04 - cp etc/templates/config/ubuntu/18/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/18/04 - cp etc/templates/config/ubuntu/20/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/20/04 - cp etc/templates/config/ubuntu/22/04/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/ubuntu/22/04 - - cp etc/templates/config/rocky/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rocky/9 - cp etc/templates/config/rocky/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/rocky/8 - - cp etc/templates/config/almalinux/8/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/almalinux/8 - cp etc/templates/config/almalinux/9/sca.files ${TARGET_DIR}$(INSTALLATION_SCRIPTS_DIR)/sca/almalinux/9 - - -override_dh_fixperms: - dh_fixperms - # Fix Python permissions - chmod 0750 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/bin/2to3-3.10 - chmod 0750 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/bin/pydoc3.10 - chmod 0750 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/bin/python3-config - chmod 0640 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/lib/pkgconfig/python-3.10-embed.pc - chmod 0640 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/lib/pkgconfig/python-3.10.pc - chmod 0640 ${TARGET_DIR}$(INSTALLATION_DIR)/framework/python/lib/pkgconfig/python3.pc - -override_dh_auto_clean: - $(MAKE) -C src clean - -override_dh_strip: - dh_strip --no-automatic-dbgsym --exclude=dh_strip --no-automatic-dbgsym --exclude=${PKG_DIR}${INSTALLATION_DIR}/framework/python - -.PHONY: override_dh_install override_dh_strip override_dh_auto_clean override_dh_auto_build override_dh_auto_configure override_dh_fixperms diff --git a/debs/SPECS/wazuh-manager/debian/source/format b/debs/SPECS/wazuh-manager/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/debs/SPECS/wazuh-manager/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/debs/SPECS/wazuh-manager/debian/wazuh-manager.lintian-overrides b/debs/SPECS/wazuh-manager/debian/wazuh-manager.lintian-overrides deleted file mode 100644 index c6d2185ecc..0000000000 --- a/debs/SPECS/wazuh-manager/debian/wazuh-manager.lintian-overrides +++ /dev/null @@ -1,9 +0,0 @@ -wazuh-manager: embedded-library -wazuh-manager: embedded-zlib -wazuh-manager: possible-gpl-code-linked-with-openssl -wazuh-manager: new-package-should-close-itp-bug -wazuh-manager: possibly-insecure-handling-of-tmp-files-in-maintainer-script -wazuh-manager: non-standard-dir-in-var -wazuh-manager: file-in-unusual-dir -wazuh-manager: hardening-no-fortify-functions -wazuh-manager: hardening-no-relro diff --git a/debs/build.sh b/debs/build.sh deleted file mode 100755 index 7896c49081..0000000000 --- a/debs/build.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex - -# Script parameters to build the package -build_target=$1 -wazuh_branch=$2 -architecture_target=$3 -package_release=$4 -jobs=$5 -dir_path=$6 -debug=$7 -checksum=$8 -wazuh_packages_branch=$9 -use_local_specs=${10} -local_source_code=${11} -future=${12} - -if [ -z "${package_release}" ]; then - package_release="1" -fi - -if [ ${build_target} = "api" ]; then - if [ "${local_source_code}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh-api/tarball/${wazuh_branch} | tar zx - fi - wazuh_version="$(grep version wazuh*/package.json | cut -d '"' -f 4)" -else - if [ "${local_source_code}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh/tarball/${wazuh_branch} | tar zx - fi - wazuh_version="$(cat wazuh*/src/VERSION | cut -d 'v' -f 2)" -fi - -# Build directories -build_dir=/build_wazuh -package_full_name="wazuh-${build_target}-${wazuh_version}" -sources_dir="${build_dir}/${build_target}/${package_full_name}" - -mkdir -p ${build_dir}/${build_target} -cp -R wazuh* ${build_dir}/${build_target}/wazuh-${build_target}-${wazuh_version} - -if [ "${use_local_specs}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${wazuh_packages_branch} | tar zx - package_files="wazuh*/debs" - specs_path=$(find ${package_files} -type d -name "SPECS" -path "*debs*") -else - package_files="/specs" - specs_path="${package_files}/SPECS" -fi - -if [[ "${future}" == "yes" ]]; then - # MODIFY VARIABLES - base_version=$wazuh_version - MAJOR=$(echo $base_version | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo $base_version | cut -d. -f2) - wazuh_version="${MAJOR}.30.0" - file_name="wazuh-${build_target}-${wazuh_version}-${package_release}" - old_name="wazuh-${build_target}-${base_version}-${package_release}" - package_full_name=wazuh-${build_target}-${wazuh_version} - old_package_name=wazuh-${build_target}-${base_version} - mv "${build_dir}/${build_target}/${old_package_name}" "${build_dir}/${build_target}/${package_full_name}" - sources_dir="${build_dir}/${build_target}/${package_full_name}" - - # PREPARE FUTURE SPECS AND SOURCES - find "${build_dir}/${package_name}" "${specs_path}" \( -name "*VERSION*" -o -name "*changelog*" \) -exec sed -i "s/${base_version}/${wazuh_version}/g" {} \; - sed -i "s/\$(VERSION)/${MAJOR}.${MINOR}/g" "${build_dir}/${build_target}/${package_full_name}/src/Makefile" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${build_target}/${package_full_name}/src/init/wazuh-server.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${build_target}/${package_full_name}/src/init/wazuh-client.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${build_target}/${package_full_name}/src/init/wazuh-local.sh" -fi -cp -pr ${specs_path}/wazuh-${build_target}/debian ${sources_dir}/debian -cp -p ${package_files}/gen_permissions.sh ${sources_dir} - -# Generating directory structure to build the .deb package -cd ${build_dir}/${build_target} && tar -czf ${package_full_name}.orig.tar.gz "${package_full_name}" - -# Configure the package with the different parameters -sed -i "s:RELEASE:${package_release}:g" ${sources_dir}/debian/changelog -sed -i "s:export JOBS=.*:export JOBS=${jobs}:g" ${sources_dir}/debian/rules -sed -i "s:export DEBUG_ENABLED=.*:export DEBUG_ENABLED=${debug}:g" ${sources_dir}/debian/rules -sed -i "s#export PATH=.*#export PATH=/usr/local/gcc-5.5.0/bin:${PATH}#g" ${sources_dir}/debian/rules -sed -i "s#export LD_LIBRARY_PATH=.*#export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}#g" ${sources_dir}/debian/rules -sed -i "s:export INSTALLATION_DIR=.*:export INSTALLATION_DIR=${dir_path}:g" ${sources_dir}/debian/rules -sed -i "s:DIR=\"/var/ossec\":DIR=\"${dir_path}\":g" ${sources_dir}/debian/{preinst,postinst,prerm,postrm} -if [ "${build_target}" == "api" ]; then - sed -i "s:DIR=\"/var/ossec\":DIR=\"${dir_path}\":g" ${sources_dir}/debian/wazuh-api.init - if [ "${architecture_target}" == "ppc64le" ]; then - sed -i "s: nodejs (>= 4.6), npm,::g" ${sources_dir}/debian/control - fi -fi - -if [[ "${debug}" == "yes" ]]; then - sed -i "s:dh_strip --no-automatic-dbgsym::g" ${sources_dir}/debian/rules -fi - -# Installing build dependencies -cd ${sources_dir} -mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y" - -# Build package -if [[ "${architecture_target}" == "amd64" ]] || [[ "${architecture_target}" == "ppc64le" ]] || \ - [[ "${architecture_target}" == "arm64" ]]; then - debuild --rootcmd=sudo -b -uc -us -elif [[ "${architecture_target}" == "armhf" ]]; then - linux32 debuild --rootcmd=sudo -b -uc -us -else - linux32 debuild --rootcmd=sudo -ai386 -b -uc -us -fi - -deb_file="wazuh-${build_target}_${wazuh_version}-${package_release}" -if [[ "${architecture_target}" == "ppc64le" ]]; then - deb_file="${deb_file}_ppc64el.deb" -else - deb_file="${deb_file}_${architecture_target}.deb" -fi -pkg_path="${build_dir}/${build_target}" - -if [[ "${checksum}" == "yes" ]]; then - cd ${pkg_path} && sha512sum ${deb_file} > /var/local/checksum/${deb_file}.sha512 -fi -mv ${pkg_path}/${deb_file} /var/local/wazuh diff --git a/debs/gen_permissions.sh b/debs/gen_permissions.sh deleted file mode 100755 index d2dc055ae2..0000000000 --- a/debs/gen_permissions.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env /bin/bash -# -# Wazuh restore permissions script generator (ver 0.1) -# Copyright (C) 2019 Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -# -# This scripts take 2 parameters, source_dir and target_dir -# Remember: you must use gawk, be careful mawk is not compatible -# -# Usage: ./gen_permissions.sh /var/ossec/ ~/restore_permissions.sh - -set -euo pipefail - -find $1 -depth -printf '%m:%u:%g:%p\0' | awk -v RS='\0' -F: ' -BEGIN { - print "#!/bin/sh"; - q = "\047"; -} -{ - gsub(q, q q "\\" q); - f = $0; - sub(/^[^:]*:[^:]*:[^:]*:/, "", f); - print "chown --", q $2 ":" $3 q, q f q, " > /dev/null 2>&1 || :"; - print "chmod", $1, q f q, " > /dev/null 2>&1 || :"; -}' > $2 -chmod +x $2 diff --git a/debs/generate_debian_package.sh b/debs/generate_debian_package.sh deleted file mode 100755 index 4f14917329..0000000000 --- a/debs/generate_debian_package.sh +++ /dev/null @@ -1,308 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -CURRENT_PATH="$( cd $(dirname $0) ; pwd -P )" -ARCHITECTURE="amd64" -OUTDIR="${CURRENT_PATH}/output/" -BRANCH="" -REVISION="1" -TARGET="" -JOBS="2" -DEBUG="no" -BUILD_DOCKER="yes" -DOCKER_TAG="latest" -INSTALLATION_PATH="/var/ossec" -DEB_MANAGER_AMD64_BUILDER="deb_manager_builder_amd64" -DEB_MANAGER_ARM64_BUILDER="deb_manager_builder_arm64" -DEB_MANAGER_PPC64LE_BUILDER="deb_manager_builder_ppc64le" -DEB_AGENT_AMD64_BUILDER="deb_agent_builder_amd64" -DEB_AGENT_I386_BUILDER="deb_agent_builder_i386" -DEB_AGENT_PPC64LE_BUILDER="deb_agent_builder_ppc64le" -DEB_AGENT_ARM64_BUILDER="deb_agent_builder_arm64" -DEB_AGENT_ARMHF_BUILDER="deb_agent_builder_armhf" -DEB_MANAGER_AMD64_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/8/amd64" -DEB_AGENT_AMD64_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/7/amd64" -DEB_MANAGER_ARM64_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/9/arm64" -DEB_AGENT_ARM64_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/9/arm64" -DEB_AGENT_I386_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/7/i386" -DEB_AGENT_PPC64LE_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/9/ppc64le" -DEB_MANAGER_PPC64LE_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/9/ppc64le" -DEB_AGENT_ARMHF_BUILDER_DOCKERFILE="${CURRENT_PATH}/Debian/9/armhf" -CHECKSUMDIR="" -CHECKSUM="no" -PACKAGES_BRANCH="master" -USE_LOCAL_SPECS="no" -LOCAL_SPECS="${CURRENT_PATH}" -LOCAL_SOURCE_CODE="" -USE_LOCAL_SOURCE_CODE="no" -FUTURE="no" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${DOCKERFILE_PATH}/{*.sh,*.tar.gz,wazuh-*} ${SOURCES_DIRECTORY} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_deb() { - CONTAINER_NAME="$1" - DOCKERFILE_PATH="$2" - - # Copy the necessary files - cp ${CURRENT_PATH}/build.sh ${DOCKERFILE_PATH} - - # Create an optional parameter to share the local source code as a volume - if [ ! -z "${LOCAL_SOURCE_CODE}" ]; then - CUSTOM_CODE_VOL="-v ${LOCAL_SOURCE_CODE}:/wazuh-local-src:Z" - USE_LOCAL_SOURCE_CODE="yes" - fi - - # Build the Docker image - if [[ ${BUILD_DOCKER} == "yes" ]]; then - docker build -t ${CONTAINER_NAME}:${DOCKER_TAG} ${DOCKERFILE_PATH} || return 1 - fi - - # Build the Debian package with a Docker container - docker run -t --rm -v ${OUTDIR}:/var/local/wazuh:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - -v ${LOCAL_SPECS}:/specs:Z \ - ${CUSTOM_CODE_VOL} \ - ${CONTAINER_NAME}:${DOCKER_TAG} ${TARGET} ${BRANCH} ${ARCHITECTURE} \ - ${REVISION} ${JOBS} ${INSTALLATION_PATH} ${DEBUG} \ - ${CHECKSUM} ${PACKAGES_BRANCH} ${USE_LOCAL_SPECS} \ - ${USE_LOCAL_SOURCE_CODE} ${FUTURE}|| return 1 - - echo "Package $(ls -Art ${OUTDIR} | tail -n 1) added to ${OUTDIR}." - - return 0 -} - -build() { - - if [[ "${ARCHITECTURE}" == "x86_64" ]] || [[ "${ARCHITECTURE}" == "amd64" ]]; then - ARCHITECTURE="amd64" - elif [[ "${ARCHITECTURE}" == "aarch64" ]] || [[ "${ARCHITECTURE}" == "arm64" ]]; then - ARCHITECTURE="arm64" - elif [[ ${ARCHITECTURE} == "arm32" ]] || [[ ${ARCHITECTURE} == "armhf" ]] || [[ ${ARCHITECTURE} == "armv7hl" ]] ; then - ARCHITECTURE="armhf" - fi - - if [[ "${TARGET}" == "manager" ]]; then - BUILD_NAME="" - FILE_PATH="" - if [[ "${ARCHITECTURE}" == "amd64" ]]; then - BUILD_NAME="${DEB_MANAGER_AMD64_BUILDER}" - FILE_PATH="${DEB_MANAGER_AMD64_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "arm64" ]]; then - BUILD_NAME="${DEB_MANAGER_ARM64_BUILDER}" - FILE_PATH="${DEB_MANAGER_ARM64_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "ppc64le" ]]; then - BUILD_NAME="${DEB_MANAGER_PPC64LE_BUILDER}" - FILE_PATH="${DEB_MANAGER_PPC64LE_BUILDER_DOCKERFILE}" - else - echo "Invalid architecture '${ARCHITECTURE}' for '${TARGET}'. Choose one of amd64/arm64/ppc64le." - return 1 - fi - build_deb ${BUILD_NAME} ${FILE_PATH} || return 1 - - elif [[ "${TARGET}" == "agent" ]] ; then - if [[ "${ARCHITECTURE}" == "amd64" ]]; then - BUILD_NAME="${DEB_AGENT_AMD64_BUILDER}" - FILE_PATH="${DEB_AGENT_AMD64_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "i386" ]]; then - BUILD_NAME="${DEB_AGENT_I386_BUILDER}" - FILE_PATH="${DEB_AGENT_I386_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "arm64" ]]; then - BUILD_NAME="${DEB_AGENT_ARM64_BUILDER}" - FILE_PATH="${DEB_AGENT_ARM64_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "ppc64le" ]]; then - BUILD_NAME="${DEB_AGENT_PPC64LE_BUILDER}" - FILE_PATH="${DEB_AGENT_PPC64LE_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "armhf" ]]; then - BUILD_NAME="${DEB_AGENT_ARMHF_BUILDER}" - FILE_PATH="${DEB_AGENT_ARMHF_BUILDER_DOCKERFILE}" - else - echo "Invalid architecture '${ARCHITECTURE}' for '${TARGET}'. Choose one of amd64/i386/ppc64le/arm64/arm32." - return 1 - fi - build_deb ${BUILD_NAME} ${FILE_PATH} || return 1 - - else - echo "Invalid target. Choose: manager or agent." - return 1 - fi - - return 0 -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch [${BRANCH}]. By default: master." - echo " -t, --target [Required] Target package to build: manager or agent." - echo " -a, --architecture [Optional] Target architecture of the package [amd64/i386/ppc64le/arm64/armhf]." - echo " -j, --jobs [Optional] Change number of parallel jobs when compiling the manager or agent. By default: 2." - echo " -r, --revision [Optional] Package revision. By default: 1." - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " -p, --path [Optional] Installation path for the package. By default: /var/ossec." - echo " -d, --debug [Optional] Build the binaries with debug symbols. By default: no." - echo " -c, --checksum [Optional] Generate checksum on the desired path (by default, if no path is specified it will be generated on the same directory than the package)." - echo " --dont-build-docker [Optional] Locally built docker image will be used instead of generating a new one." - echo " --tag [Optional] Tag to use with the docker image." - echo " --sources [Optional] Absolute path containing wazuh source code. This option will use local source code instead of downloading it from GitHub." - echo " --packages-branch [Optional] Select Git branch or tag from wazuh-packages repository. e.g master." - echo " --dev [Optional] Use the SPECS files stored in the host instead of downloading them from GitHub." - echo " --future [Optional] Build test future package x.30.0 Used for development purposes." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - BUILD="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH="$2" - BUILD="yes" - shift 2 - else - help 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - "-t"|"--target") - if [ -n "$2" ]; then - TARGET="$2" - shift 2 - else - help 1 - fi - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - ARCHITECTURE="$2" - shift 2 - else - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - JOBS="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-p"|"--path") - if [ -n "$2" ]; then - INSTALLATION_PATH="$2" - shift 2 - else - help 1 - fi - ;; - "-d"|"--debug") - DEBUG="yes" - shift 1 - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "--dont-build-docker") - BUILD_DOCKER="no" - shift 1 - ;; - "--tag") - if [ -n "$2" ]; then - DOCKER_TAG="$2" - shift 2 - else - help 1 - fi - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "--packages-branch") - if [ -n "$2" ]; then - PACKAGES_BRANCH="$2" - shift 2 - fi - ;; - "--dev") - USE_LOCAL_SPECS="yes" - shift 1 - ;; - "--sources") - if [ -n "$2" ]; then - LOCAL_SOURCE_CODE="$2" - shift 2 - else - help 1 - fi - ;; - "--future") - FUTURE="yes" - shift 1 - ;; - *) - help 1 - esac - done - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ "$BUILD" != "no" ]]; then - build || clean 1 - else - clean 1 - fi - - clean 0 -} - -main "$@" diff --git a/macos/README.md b/macos/README.md deleted file mode 100644 index 9b08fe358e..0000000000 --- a/macos/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh macOS packages - -In this repository, you can find the necessary tools to build a Wazuh package for macOS. - -## Building macOS packages - -Please, visit the following link for the full macOS packages building documentation: [Generate Wazuh OSX packages.](https://documentation.wazuh.com/current/development/packaging/generate-osx-package.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) \ No newline at end of file diff --git a/macos/entitlements.plist b/macos/entitlements.plist deleted file mode 100644 index 96420e0f33..0000000000 --- a/macos/entitlements.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - com.apple.security.automation.apple-events - - com.apple.security.personal-information.photos-library - - com.apple.security.personal-information.addressbook - - com.apple.security.files.user-selected.read-only - - com.apple.security.files.downloads.read-only - - com.apple.security.assets.pictures.read-only - - com.apple.security.assets.music.read-only - - com.apple.security.assets.movies.read-only - - - \ No newline at end of file diff --git a/macos/generate_wazuh_packages.sh b/macos/generate_wazuh_packages.sh deleted file mode 100755 index 597cf17825..0000000000 --- a/macos/generate_wazuh_packages.sh +++ /dev/null @@ -1,429 +0,0 @@ -#!/bin/bash -set -x -# Program to build and package OSX wazuh-agent -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CURRENT_PATH="$( cd $(dirname ${0}) ; pwd -P )" -SOURCES_DIRECTORY="${CURRENT_PATH}/repository" -WAZUH_PATH="${SOURCES_DIRECTORY}/wazuh" -WAZUH_SOURCE_REPOSITORY="https://github.com/wazuh/wazuh" -export CONFIG="${WAZUH_PATH}/etc/preloaded-vars.conf" -ENTITLEMENTS_PATH="${CURRENT_PATH}/entitlements.plist" -ARCH="intel64" -INSTALLATION_PATH="/Library/Ossec" # Installation path -VERSION="" # Default VERSION (branch/tag) -REVISION="1" # Package revision. -BRANCH_TAG="master" # Branch that will be downloaded to build package. -DESTINATION="${CURRENT_PATH}/output/" # Where package will be stored. -JOBS="2" # Compilation jobs. -DEBUG="no" # Enables the full log by using `set -exf`. -CHECKSUMDIR="" # Directory to store the checksum of the package. -CHECKSUM="no" # Enables the checksum generation. -CERT_APPLICATION_ID="" # Apple Developer ID certificate to sign Apps and binaries. -CERT_INSTALLER_ID="" # Apple Developer ID certificate to sign pkg. -KEYCHAIN="" # Keychain where the Apple Developer ID certificate is. -KC_PASS="" # Password of the keychain. -NOTARIZE="no" # Notarize the package for macOS Catalina. -DEVELOPER_ID="" # Apple Developer ID. -ALTOOL_PASS="" # Temporary Application password for altool. -TEAM_ID="" # Team ID of the Apple Developer ID. -pkg_name="" -notarization_path="" - -trap ctrl_c INT - -function clean_and_exit() { - exit_code=$1 - rm -rf "${SOURCES_DIRECTORY}" - rm "${CURRENT_PATH}"/specs/wazuh-agent.pkgproj-e - ${CURRENT_PATH}/uninstall.sh - exit ${exit_code} -} - -function ctrl_c() { - clean_and_exit 1 -} - - -function notarize_pkg() { - - # Notarize the macOS package - sleep_time="120" - build_timestamp="$(date +"%m%d%Y%H%M%S")" - if [ "${NOTARIZE}" = "yes" ]; then - - if sudo xcrun notarytool submit ${1} --apple-id "${DEVELOPER_ID}" --team-id "${TEAM_ID}" --password "${ALTOOL_PASS}" --wait ; then - echo "Package is notarized and ready to go." - echo "Adding the ticket to the package." - if xcrun stapler staple -v "${1}" ; then - echo "Ticket added. Ready to release the package." - mkdir -p "${DESTINATION}" && cp "${1}" "${DESTINATION}/" - return 0 - else - echo "Something went wrong while adding the package." - clean_and_exit 1 - fi - else - echo "Error notarizing the package." - clean_and_exit 1 - fi - fi - - return 0 -} - -function sign_binaries() { - if [ ! -z "${KEYCHAIN}" ] && [ ! -z "${CERT_APPLICATION_ID}" ] ; then - security -v unlock-keychain -p "${KC_PASS}" "${KEYCHAIN}" > /dev/null - # Sign every single binary in Wazuh's installation. This also includes library files. - for bin in $(find ${INSTALLATION_PATH} -exec file {} \; | grep bit | cut -d: -f1); do - codesign -f --sign "${CERT_APPLICATION_ID}" --entitlements ${ENTITLEMENTS_PATH} --deep --timestamp --options=runtime --verbose=4 "${bin}" - done - security -v lock-keychain "${KEYCHAIN}" > /dev/null - fi -} - -function sign_pkg() { - if [ ! -z "${KEYCHAIN}" ] && [ ! -z "${CERT_INSTALLER_ID}" ] ; then - # Unlock the keychain to use the certificate - security -v unlock-keychain -p "${KC_PASS}" "${KEYCHAIN}" > /dev/null - - # Sign the package - productsign --sign "${CERT_INSTALLER_ID}" --timestamp ${DESTINATION}/${pkg_name} ${DESTINATION}/${pkg_name}.signed - mv ${DESTINATION}/${pkg_name}.signed ${DESTINATION}/${pkg_name} - - security -v lock-keychain "${KEYCHAIN}" > /dev/null - fi -} - -function build_package() { - - # Download source code - git clone --depth=1 -b ${BRANCH_TAG} ${WAZUH_SOURCE_REPOSITORY} "${WAZUH_PATH}" - - get_pkgproj_specs - - VERSION=$(cat ${WAZUH_PATH}/src/VERSION | cut -d "-" -f1 | cut -c 2-) - - if [ -d "${INSTALLATION_PATH}" ]; then - - echo "\nThe wazuh agent is already installed on this machine." - echo "Removing it from the system." - - ${CURRENT_PATH}/uninstall.sh - fi - - packages_script_path="package_files" - - cp ${packages_script_path}/*.sh ${CURRENT_PATH}/package_files/ - ${CURRENT_PATH}/package_files/build.sh "${INSTALLATION_PATH}" "${WAZUH_PATH}" ${JOBS} - - # sign the binaries and the libraries - sign_binaries - - # create package - if packagesbuild ${AGENT_PKG_FILE} --build-folder ${DESTINATION} ; then - echo "The wazuh agent package for macOS has been successfully built." - pkg_name="wazuh-agent-${VERSION}-${REVISION}.${ARCH}.pkg" - sign_pkg - if [[ "${CHECKSUM}" == "yes" ]]; then - mkdir -p ${CHECKSUMDIR} - cd ${DESTINATION} && shasum -a512 "${pkg_name}" > "${CHECKSUMDIR}/${pkg_name}.sha512" - fi - clean_and_exit 0 - else - echo "ERROR: something went wrong while building the package." - clean_and_exit 1 - fi -} - -function help() { - - echo "Usage: $0 [OPTIONS]" - echo - echo " Build options:" - echo " -a, --architecture [Optional] Target architecture of the package [intel64/arm64]. By Default: intel64." - echo " -b, --branch [Required] Select Git branch or tag e.g. $BRANCH" - echo " -s, --store-path [Optional] Set the destination absolute path of package." - echo " -j, --jobs [Optional] Number of parallel jobs when compiling." - echo " -r, --revision [Optional] Package revision that append to version e.g. x.x.x-rev" - echo " -c, --checksum [Optional] Generate checksum on the desired path (by default, if no path is specified it will be generated on the same directory than the package)." - echo " -h, --help [ Util ] Show this help." - echo " -i, --install-deps [ Util ] Install build dependencies (Packages)." - echo " -x, --install-xcode [ Util ] Install X-Code and brew. Can't be executed as root." - echo " -v, --verbose [ Util ] Show additional information during the package generation." - echo - echo " Signing options:" - echo " --keychain [Optional] Keychain where the Certificates are installed." - echo " --keychain-password [Optional] Password of the keychain." - echo " --application-certificate [Optional] Apple Developer ID certificate name to sign Apps and binaries." - echo " --installer-certificate [Optional] Apple Developer ID certificate name to sign pkg." - echo " --notarize [Optional] Notarize the package for its distribution on macOS." - echo " --notarize-path [Optional] Path of the package to be notarized." - echo " --developer-id [Optional] Your Apple Developer ID." - echo " --team-id [Optional] Your Apple Team ID." - echo " --altool-password [Optional] Temporary password to use altool from Xcode." - echo - exit "$1" -} - -function get_pkgproj_specs() { - - VERSION=$(< "${WAZUH_PATH}/src/VERSION" cut -d "-" -f1 | cut -c 2-) - - pkg_file="specs/wazuh-agent-${ARCH}.pkgproj" - - if [ ! -f "${pkg_file}" ]; then - echo "Warning: the file ${pkg_file} does not exists. Check the version selected." - exit 1 - else - echo "Modifiying ${pkg_file} to match revision." - sed -i -e "s:${VERSION}-.*<:${VERSION}-${REVISION}.${ARCH}<:g" "${pkg_file}" - cp "${pkg_file}" "${AGENT_PKG_FILE}" - fi - - return 0 -} - -function testdep() { - - if command -v packagesbuild ; then - return 0 - else - echo "Error: packagesbuild not found. Download and install dependencies." - echo "Use $0 -i for install it." - exit 1 - fi -} - -function install_deps() { - - # Install packagesbuild tool - curl -O http://s.sudre.free.fr/Software/files/Packages.dmg - - hdiutil attach Packages.dmg - - cd /Volumes/Packages*/packages/ - - if installer -package Packages.pkg -target / ; then - echo "Packagesbuild was correctly installed." - else - echo "Something went wrong installing packagesbuild." - fi - - if [ "$(uname -m)" = "arm64" ]; then - echo "Installing build dependencies for arm64 architecture" - brew install gcc binutils autoconf automake libtool cmake - fi - exit 0 -} - -function install_xcode() { - - # Install brew tool. Brew will install X-Code if it is not already installed in the host. - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" - - exit 0 -} - -function check_root() { - - if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - echo - exit 1 - fi -} - -function main() { - - BUILD="no" - while [ -n "$1" ] - do - case "$1" in - "-a"|"--architecture") - if [ -n "$2" ]; then - ARCH="$2" - shift 2 - else - help 1 - fi - ;; - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH_TAG="$2" - BUILD=yes - shift 2 - else - help 1 - fi - ;; - "-s"|"--store-path") - if [ -n "$2" ]; then - DESTINATION="$2" - shift 2 - else - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - JOBS="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - "-i"|"--install-deps") - check_root - install_deps - ;; - "-x"|"--install-xcode") - install_xcode - ;; - "-v"|"--verbose") - DEBUG="yes" - shift 1 - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "--keychain") - if [ -n "$2" ]; then - KEYCHAIN="$2" - shift 2 - else - help 1 - fi - ;; - "--keychain-password") - if [ -n "$2" ]; then - KC_PASS="$2" - shift 2 - else - help 1 - fi - ;; - "--application-certificate") - if [ -n "$2" ]; then - CERT_APPLICATION_ID="$2" - shift 2 - else - help 1 - fi - ;; - "--installer-certificate") - if [ -n "$2" ]; then - CERT_INSTALLER_ID="$2" - shift 2 - else - help 1 - fi - ;; - "--notarize") - NOTARIZE="yes" - shift 1 - ;; - "--notarize-path") - if [ -n "$2" ]; then - notarization_path="$2" - shift 2 - else - help 1 - fi - ;; - "--developer-id") - if [ -n "$2" ]; then - DEVELOPER_ID="$2" - shift 2 - else - help 1 - fi - ;; - "--team-id") - if [ -n "$2" ]; then - TEAM_ID="$2" - shift 2 - else - help 1 - fi - ;; - "--altool-password") - if [ -n "$2" ]; then - ALTOOL_PASS="$2" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - if [ ${DEBUG} = "yes" ]; then - set -exf - fi - - testdep - - if [ "${ARCH}" != "intel64" ] && [ "${ARCH}" != "arm64" ]; then - echo "Error: architecture not supported." - echo "Supported architectures: intel64, arm64" - exit 1 - fi - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${DESTINATION}" - fi - - if [[ "${BUILD}" != "no" ]]; then - check_root - AGENT_PKG_FILE="${CURRENT_PATH}/package_files/wazuh-agent-${ARCH}.pkgproj" - build_package - "${CURRENT_PATH}/uninstall.sh" - fi - if [ "${NOTARIZE}" = "yes" ]; then - if [ "${BUILD}" = "yes" ]; then - pkg_name="wazuh-agent-${VERSION}-${REVISION}.${ARCH}.pkg" - notarization_path="${DESTINATION}/${pkg_name}" - fi - if [ -z "${notarization_path}" ]; then - echo "The path of the package to be notarized has not been specified." - help 1 - fi - notarize_pkg "${notarization_path}" - fi - if [ "${BUILD}" = "no" ] && [ "${NOTARIZE}" = "no" ]; then - echo "The branch has not been specified and notarization has not been selected." - help 1 - fi - - return 0 -} - -main "$@" diff --git a/macos/package_files/build.sh b/macos/package_files/build.sh deleted file mode 100755 index 522513b789..0000000000 --- a/macos/package_files/build.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -# Program to build OSX wazuh-agent -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -set -exf -DESTINATION_PATH=$1 -SOURCES_PATH=$2 -BUILD_JOBS=$3 -INSTALLATION_SCRIPTS_DIR=${DESTINATION_PATH}/packages_files/agent_installation_scripts - -function configure() { - echo USER_LANGUAGE="en" > ${CONFIG} - echo USER_NO_STOP="y" >> ${CONFIG} - echo USER_INSTALL_TYPE="agent" >> ${CONFIG} - echo USER_DIR="${DESTINATION_PATH}" >> ${CONFIG} - echo USER_DELETE_DIR="y" >> ${CONFIG} - echo USER_CLEANINSTALL="y" >> ${CONFIG} - echo USER_BINARYINSTALL="y" >> ${CONFIG} - echo USER_AGENT_SERVER_IP="MANAGER_IP" >> ${CONFIG} - echo USER_ENABLE_SYSCHECK="y" >> ${CONFIG} - echo USER_ENABLE_ROOTCHECK="y" >> ${CONFIG} - echo USER_ENABLE_OPENSCAP="n" >> ${CONFIG} - echo USER_ENABLE_CISCAT="n" >> ${CONFIG} - echo USER_ENABLE_ACTIVE_RESPONSE="y" >> ${CONFIG} - echo USER_CA_STORE="n" >> ${CONFIG} -} - -function build() { - - configure - - if [ -z "${USER_BINARYINSTALL}" ]; then - make -C ${SOURCES_PATH}/src deps TARGET=agent - - echo "Generating Wazuh executables" - make -j$JOBS -C ${SOURCES_PATH}/src DYLD_FORCE_FLAT_NAMESPACE=1 TARGET=agent build - fi - - echo "Running install script" - ${SOURCES_PATH}/install.sh - - find ${DESTINATION_PATH}/ruleset/sca/ -type f -exec rm -f {} \; - - # Add the auxiliar script used while installing the package - mkdir -p ${INSTALLATION_SCRIPTS_DIR}/ - cp ${SOURCES_PATH}/gen_ossec.sh ${INSTALLATION_SCRIPTS_DIR}/ - cp ${SOURCES_PATH}/add_localfiles.sh ${INSTALLATION_SCRIPTS_DIR}/ - - mkdir -p ${INSTALLATION_SCRIPTS_DIR}/src/init - mkdir -p ${INSTALLATION_SCRIPTS_DIR}/etc/templates/config/{generic,darwin} - - cp -r ${SOURCES_PATH}/etc/templates/config/generic ${INSTALLATION_SCRIPTS_DIR}/etc/templates/config - cp -r ${SOURCES_PATH}/etc/templates/config/darwin ${INSTALLATION_SCRIPTS_DIR}/etc/templates/config - - find ${SOURCES_PATH}/src/init/ -name *.sh -type f -exec install -m 0640 {} ${INSTALLATION_SCRIPTS_DIR}/src/init \; - - mkdir -p ${INSTALLATION_SCRIPTS_DIR}/sca/generic - mkdir -p ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/{15,16,17,18,20,21,22,23} - - cp -r ${SOURCES_PATH}/ruleset/sca/darwin ${INSTALLATION_SCRIPTS_DIR}/sca - cp -r ${SOURCES_PATH}/ruleset/sca/generic ${INSTALLATION_SCRIPTS_DIR}/sca - cp ${SOURCES_PATH}/etc/templates/config/generic/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/generic/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/15/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/15/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/16/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/16/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/17/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/17/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/18/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/18/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/19/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/19/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/20/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/20/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/21/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/21/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/22/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/22/ - cp ${SOURCES_PATH}/etc/templates/config/darwin/23/sca.files ${INSTALLATION_SCRIPTS_DIR}/sca/darwin/23/ - - cp ${SOURCES_PATH}/src/VERSION ${INSTALLATION_SCRIPTS_DIR}/src/ - cp ${SOURCES_PATH}/src/REVISION ${INSTALLATION_SCRIPTS_DIR}/src/ -} - -build diff --git a/macos/package_files/introduction.txt b/macos/package_files/introduction.txt deleted file mode 100644 index c854daab99..0000000000 --- a/macos/package_files/introduction.txt +++ /dev/null @@ -1,9 +0,0 @@ -Welcome to the Wazuh Agent Installer. - -Wazuh is a free, open-source and enterprise-ready security monitoring solution for threat detection, integrity monitoring, incident response and compliance. - -This package will install the Wazuh agent in your system. - -Check out our documentation to learn more about Wazuh, and join our community where our team and other users can help you. - -To continue, click Next. diff --git a/macos/package_files/postinstall.sh b/macos/package_files/postinstall.sh deleted file mode 100755 index 058e39a5e8..0000000000 --- a/macos/package_files/postinstall.sh +++ /dev/null @@ -1,155 +0,0 @@ -#! /bin/bash -# By Spransy, Derek" and Charlie Scott -# Modified by Santiago Bassett (http://www.wazuh.com) - Feb 2016 -# alterations by bil hays 2013 -# -Switched to bash -# -Added some sanity checks -# -Added routine to find the first 3 contiguous UIDs above 100, -# starting at 600 puts this in user space -# -Added lines to append the ossec users to the group ossec -# so the the list GroupMembership works properly -GROUP="wazuh" -USER="wazuh" -DIR="/Library/Ossec" -INSTALLATION_SCRIPTS_DIR="${DIR}/packages_files/agent_installation_scripts" -SCA_BASE_DIR="${INSTALLATION_SCRIPTS_DIR}/sca" - -if [ -f "${DIR}/WAZUH_PKG_UPGRADE" ]; then - upgrade="true" -fi - -if [ -f "${DIR}/WAZUH_PKG_UPGRADE" ]; then - rm -f ${DIR}/WAZUH_PKG_UPGRADE -fi - -if [ -f "${DIR}/WAZUH_RESTART" ]; then - restart="true" -fi - -if [ -f "${DIR}/WAZUH_RESTART" ]; then - rm -f ${DIR}/WAZUH_RESTART -fi - -if [ -n "${upgrade}" ]; then - rm -rf ${DIR}/etc/{ossec.conf,client.keys,local_internal_options.conf,shared} - cp -rf ${DIR}/config_files/{ossec.conf,client.keys,local_internal_options.conf,shared} ${DIR}/etc/ - rm -rf ${DIR}/config_files/ -fi - -# Default for all directories -chmod -R 750 ${DIR}/ -chown -R root:${GROUP} ${DIR}/ - -chown -R root:wheel ${DIR}/bin -chown -R root:wheel ${DIR}/lib - -# To the ossec queue (default for agentd to read) -chown -R ${USER}:${GROUP} ${DIR}/queue/{alerts,diff,sockets,rids} - -chmod -R 770 ${DIR}/queue/{alerts,sockets} -chmod -R 750 ${DIR}/queue/{diff,sockets,rids} - -# For the logging user -chmod 770 ${DIR}/logs -chown -R ${USER}:${GROUP} ${DIR}/logs -find ${DIR}/logs/ -type d -exec chmod 750 {} \; -find ${DIR}/logs/ -type f -exec chmod 660 {} \; - -chown -R root:${GROUP} ${DIR}/tmp -chmod 1750 ${DIR}/tmp - -chmod 770 ${DIR}/etc -chown ${USER}:${GROUP} ${DIR}/etc -chmod 640 ${DIR}/etc/internal_options.conf -chown root:${GROUP} ${DIR}/etc/internal_options.conf -chmod 640 ${DIR}/etc/local_internal_options.conf -chown root:${GROUP} ${DIR}/etc/local_internal_options.conf -chmod 640 ${DIR}/etc/client.keys -chown root:${GROUP} ${DIR}/etc/client.keys -chmod 640 ${DIR}/etc/localtime -chmod 770 ${DIR}/etc/shared # ossec must be able to write to it -chown -R root:${GROUP} ${DIR}/etc/shared -find ${DIR}/etc/shared/ -type f -exec chmod 660 {} \; -chown root:${GROUP} ${DIR}/etc/ossec.conf -chmod 660 ${DIR}/etc/ossec.conf -chown root:${GROUP} ${DIR}/etc/wpk_root.pem -chmod 640 ${DIR}/etc/wpk_root.pem - - -chmod 770 ${DIR}/.ssh - -# For the /var/run -chmod -R 770 ${DIR}/var -chown -R root:${GROUP} ${DIR}/var - -. ${INSTALLATION_SCRIPTS_DIR}/src/init/dist-detect.sh - - -if [ -z "${upgrade}" ]; then - ${INSTALLATION_SCRIPTS_DIR}/gen_ossec.sh conf agent ${DIST_NAME} ${DIST_VER}.${DIST_SUBVER} ${DIR} > ${DIR}/etc/ossec.conf - chown root:wazuh ${DIR}/etc/ossec.conf - chmod 0640 ${DIR}/etc/ossec.conf -fi - -SCA_DIR="${DIST_NAME}/${DIST_VER}" -mkdir -p ${DIR}/ruleset/sca - -SCA_TMP_DIR="${SCA_BASE_DIR}/${SCA_DIR}" - -# Install the configuration files needed for this hosts -if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" -else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" -fi - -SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" - -if [ -r ${SCA_TMP_FILE} ]; then - - rm -f ${DIR}/ruleset/sca/* || true - - for sca_file in $(cat ${SCA_TMP_FILE}); do - mv ${SCA_BASE_DIR}/${sca_file} ${DIR}/ruleset/sca - done -fi - -# Register and configure agent if Wazuh environment variables are defined -if [ -z "${upgrade}" ]; then - ${INSTALLATION_SCRIPTS_DIR}/src/init/register_configure_agent.sh ${DIR} > /dev/null || : -fi - -# Remove backup file created in register_configure_agent step -if [ -e ${DIR}/etc/ossec.confre ]; then - rm -f ${DIR}/etc/ossec.confre || true -fi - -# Install the service -${INSTALLATION_SCRIPTS_DIR}/src/init/darwin-init.sh ${DIR} - -# Remove temporary directory -rm -rf ${DIR}/packages_files - -# Remove old ossec user and group if exists and change ownwership of files - -if [[ $(dscl . -read /Groups/ossec) ]]; then - find ${DIR}/ -group ossec -user root -exec chown root:wazuh {} \ > /dev/null 2>&1 || true - if [[ $(dscl . -read /Users/ossec) ]]; then - find ${DIR}/ -group ossec -user ossec -exec chown wazuh:wazuh {} \ > /dev/null 2>&1 || true - sudo /usr/bin/dscl . -delete "/Users/ossec" - fi - sudo /usr/bin/dscl . -delete "/Groups/ossec" -fi - -# Remove 4.1.5 patch -if [ -f ${DIR}/queue/alerts/sockets ]; then - rm ${DIR}/queue/alerts/sockets -fi - -if [ -n "${upgrade}" ] && [ -n "${restart}" ]; then - ${DIR}/bin/wazuh-control restart -fi diff --git a/macos/package_files/preinstall.sh b/macos/package_files/preinstall.sh deleted file mode 100755 index f1dc968dc7..0000000000 --- a/macos/package_files/preinstall.sh +++ /dev/null @@ -1,143 +0,0 @@ -#! /bin/bash -# By Spransy, Derek" and Charlie Scott -# Modified by Wazuh, Inc. . -# This program is a free software; you can redistribute it and/or modify it under the terms of GPLv2 - -##### -# This checks for an error and exits with a custom message -# Returns zero on success -# $1 is the message -# $2 is the error code - -DIR="/Library/Ossec" - -if [ -d "${DIR}" ]; then - if [ -f "${DIR}/WAZUH_PKG_UPGRADE" ]; then - rm -f "${DIR}/WAZUH_PKG_UPGRADE" - fi - if [ -f "${DIR}/WAZUH_RESTART" ]; then - rm -f "${DIR}/WAZUH_RESTART" - fi - touch "${DIR}/WAZUH_PKG_UPGRADE" - upgrade="true" - if ${DIR}/bin/wazuh-control status | grep "is running" > /dev/null 2>&1; then - touch "${DIR}/WAZUH_RESTART" - restart="true" - elif ${DIR}/bin/ossec-control status | grep "is running" > /dev/null 2>&1; then - touch "${DIR}/WAZUH_RESTART" - restart="true" - fi -fi - -# Stops the agent before upgrading it -if [ -f ${DIR}/bin/wazuh-control ]; then - ${DIR}/bin/wazuh-control stop -elif [ -f ${DIR}/bin/ossec-control ]; then - ${DIR}/bin/ossec-control stop -fi - -if [ -n "${upgrade}" ]; then - mkdir -p ${DIR}/config_files/ - cp -r ${DIR}/etc/{ossec.conf,client.keys,local_internal_options.conf,shared} ${DIR}/config_files/ - - if [ -d ${DIR}/logs/ossec ]; then - mv ${DIR}/logs/ossec ${DIR}/logs/wazuh - fi - - if [ -d ${DIR}/queue/ossec ]; then - mv ${DIR}/queue/ossec ${DIR}/queue/sockets - fi -fi - -if [ -n "${upgrade}" ]; then - if pkgutil --pkgs | grep -i wazuh-agent-etc > /dev/null 2>&1 ; then - pkgutil --forget com.wazuh.pkg.wazuh-agent-etc - fi -fi - -if [[ ! -f "/usr/bin/dscl" ]] - then - echo "Error: I couldn't find dscl, dying here"; - exit -fi - -DSCL="/usr/bin/dscl"; - -function check_errm -{ - if [[ ${?} != "0" ]] - then - echo "${1}"; - exit ${2}; - fi -} - -# get unique id numbers (uid, gid) that are greater than 100 -unset -v i new_uid new_gid idvar; -declare -i new_uid=0 new_gid=0 i=100 idvar=0; -while [[ $idvar -eq 0 ]]; do - i=$[i+1] - if [[ -z "$(/usr/bin/dscl . -search /Users uid ${i})" ]] && [[ -z "$(/usr/bin/dscl . -search /Groups gid ${i})" ]]; - then - new_uid=$i - new_gid=$i - idvar=1 - #break - fi -done - -echo "UID available for wazuh user is:"; -echo ${new_uid} - -# Verify that the uid and gid exist and match -if [[ $new_uid -eq 0 ]] || [[ $new_gid -eq 0 ]]; - then - echo "Getting unique id numbers (uid, gid) failed!"; - exit 1; -fi -if [[ ${new_uid} != ${new_gid} ]] - then - echo "I failed to find matching free uid and gid!"; - exit 5; -fi - -# Stops the agent before upgrading it -if [ -f ${DIR}/bin/wazuh-control ]; then - ${DIR}/bin/wazuh-control stop -elif [ -f ${DIR}/bin/ossec-control ]; then - ${DIR}/bin/ossec-control stop -fi - -# Creating the group -if [[ $(dscl . -read /Groups/wazuh) ]] - then - echo "wazuh group already exists."; -else - sudo ${DSCL} localhost -create /Local/Default/Groups/wazuh - check_errm "Error creating group wazuh" "67" - sudo ${DSCL} localhost -createprop /Local/Default/Groups/wazuh PrimaryGroupID ${new_gid} - sudo ${DSCL} localhost -createprop /Local/Default/Groups/wazuh RealName wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Groups/wazuh RecordName wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Groups/wazuh RecordType: dsRecTypeStandard:Groups - sudo ${DSCL} localhost -createprop /Local/Default/Groups/wazuh Password "*" -fi - -# Creating the user -if [[ $(dscl . -read /Users/wazuh) ]] - then - echo "wazuh user already exists."; -else - sudo ${DSCL} localhost -create /Local/Default/Users/wazuh - check_errm "Error creating user wazuh" "77" - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh RecordName wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh RealName wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh UserShell /usr/bin/false - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh NFSHomeDirectory /var/wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh UniqueID ${new_uid} - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh PrimaryGroupID ${new_gid} - sudo ${DSCL} localhost -append /Local/Default/Groups/wazuh GroupMembership wazuh - sudo ${DSCL} localhost -createprop /Local/Default/Users/wazuh Password "*" -fi - -#Hide the fixed users -dscl . create /Users/wazuh IsHidden 1 \ No newline at end of file diff --git a/macos/specs/wazuh-agent-arm64.pkgproj b/macos/specs/wazuh-agent-arm64.pkgproj deleted file mode 100644 index 9c463b1a19..0000000000 --- a/macos/specs/wazuh-agent-arm64.pkgproj +++ /dev/null @@ -1,1255 +0,0 @@ - - - - - PACKAGES - - - MUST-CLOSE-APPLICATION-ITEMS - - MUST-CLOSE-APPLICATIONS - - PACKAGE_FILES - - DEFAULT_INSTALL_LOCATION - / - HIERARCHY - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - Applications - PATH_TYPE - 0 - PERMISSIONS - 509 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - Application Support - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Automator - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Documentation - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Extensions - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Filesystems - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Frameworks - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Input Methods - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Internet Plug-Ins - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchAgents - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchDaemons - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/.ssh - PATH_TYPE - 0 - PERMISSIONS - 448 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/active-response - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/agentless - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/bin - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/internal_options.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/localtime - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/client.keys - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/local_internal_options.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/ossec.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/shared - PATH_TYPE - 0 - PERMISSIONS - 504 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/wpk_root.pem - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - EXPANDED - - GID - 0 - PATH - /Library/Ossec/etc - PATH_TYPE - 0 - PERMISSIONS - 504 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/lib - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/logs - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/queue - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/tmp - PATH_TYPE - 0 - PERMISSIONS - 1000 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/packages_files - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/var - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/wodles - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/ruleset - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - EXPANDED - - GID - 0 - PATH - /Library/Ossec - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PreferencePanes - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Preferences - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - Printers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PrivilegedHelperTools - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickLook - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickTime - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Screen Savers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Scripts - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Services - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Widgets - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - Library - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - Shared - PATH_TYPE - 0 - PERMISSIONS - 1023 - TYPE - 1 - UID - 0 - - - GID - 80 - PATH - Users - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - / - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - PAYLOAD_TYPE - 0 - SHOW_INVISIBLE - - SPLIT_FORKS - - TREAT_MISSING_FILES_AS_WARNING - - VERSION - 4 - - PACKAGE_SCRIPTS - - POSTINSTALL_PATH - - PATH - postinstall.sh - PATH_TYPE - 1 - - PREINSTALL_PATH - - PATH - preinstall.sh - PATH_TYPE - 1 - - RESOURCES - - - PACKAGE_SETTINGS - - AUTHENTICATION - 1 - CONCLUSION_ACTION - 0 - FOLLOW_SYMBOLIC_LINKS - - IDENTIFIER - com.wazuh.pkg.wazuh-agent - LOCATION - 0 - NAME - agent - OVERWRITE_PERMISSIONS - - PAYLOAD_SIZE - -1 - RELOCATABLE - - USE_HFS+_COMPRESSION - - VERSION - 4.9.0-1 - - TYPE - 0 - UUID - 7BC88EDC-74AB-498A-992B-DE940686D898 - - - PROJECT - - PROJECT_COMMENTS - - NOTES - - PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1M - IDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv - c3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l - cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 - IGNoYXJzZXQ9VVRGLTgiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250 - ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp - dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u - dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD - b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE1MDQuODMiPgo8c3R5bGUg - dHlwZT0idGV4dC9jc3MiPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5 - Pgo8L2JvZHk+CjwvaHRtbD4K - - - PROJECT_PRESENTATION - - BACKGROUND - - INSTALLATION TYPE - - HIERARCHIES - - INSTALLER - - LIST - - - DESCRIPTION - - OPTIONS - - HIDDEN - - STATE - 0 - - PACKAGE_UUID - 7BC88EDC-74AB-498A-992B-DE940686D898 - REQUIREMENTS - - TITLE - - - LANGUAGE - English - VALUE - Wazuh Agent - - - TOOLTIP - - TYPE - 0 - UUID - B5127C49-7EF4-4B73-97D7-2819981073A4 - - - REMOVED - - - - MODE - 0 - - INSTALLATION_STEPS - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewIntroductionController - INSTALLER_PLUGIN - Introduction - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewReadMeController - INSTALLER_PLUGIN - ReadMe - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewLicenseController - INSTALLER_PLUGIN - License - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewDestinationSelectController - INSTALLER_PLUGIN - TargetSelect - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewInstallationTypeController - INSTALLER_PLUGIN - PackageSelection - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewInstallationController - INSTALLER_PLUGIN - Install - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewSummaryController - INSTALLER_PLUGIN - Summary - LIST_TITLE_KEY - InstallerSectionTitle - - - INTRODUCTION - - LOCALIZATIONS - - - LANGUAGE - English - VALUE - - PATH - introduction.txt - PATH_TYPE - 1 - - - - - LICENSE - - LOCALIZATIONS - - MODE - 0 - - README - - LOCALIZATIONS - - - TITLE - - LOCALIZATIONS - - - LANGUAGE - English - VALUE - Wazuh Agent - - - - - PROJECT_REQUIREMENTS - - LIST - - - BEHAVIOR - 3 - DICTIONARY - - IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY - 3 - IC_REQUIREMENT_CPU_INTEL_ARCHITECTURE_TYPE - 0 - IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT - 1 - IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY - 866666 - IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE - 0 - - IC_REQUIREMENT_CHECK_TYPE - 0 - IDENTIFIER - fr.whitebox.Packages.requirement.cpu - MESSAGE - - - LANGUAGE - English - SECONDARY_VALUE - - VALUE - This installer has been built for Apple Silicon architecture. It won't install in other platforms. - - - - NAME - Processor - STATE - - - - BEHAVIOR - 3 - DICTIONARY - - IC_REQUIREMENT_OS_DISK_TYPE - 0 - IC_REQUIREMENT_OS_DISTRIBUTION_TYPE - 0 - IC_REQUIREMENT_OS_MINIMUM_VERSION - 100800 - - IC_REQUIREMENT_CHECK_TYPE - 1 - IDENTIFIER - fr.whitebox.Packages.requirement.os - MESSAGE - - NAME - Operating System - STATE - - - - RESOURCES - - ROOT_VOLUME_ONLY - - - PROJECT_SETTINGS - - BUILD_FORMAT - 0 - BUILD_PATH - - PATH - build - PATH_TYPE - 1 - - EXCLUDED_FILES - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .DS_Store - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .DS_Store files - PROXY_TOOLTIP - Remove ".DS_Store" files created by the Finder. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .pbdevelopment - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .pbdevelopment files - PROXY_TOOLTIP - Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - CVS - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .cvsignore - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .cvspass - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .svn - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .git - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .gitignore - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove SCM metadata - PROXY_TOOLTIP - Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - classes.nib - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - designable.db - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - info.nib - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Optimize nib files - PROXY_TOOLTIP - Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - Resources Disabled - TYPE - 1 - - - PROTECTED - - PROXY_NAME - Remove Resources Disabled folders - PROXY_TOOLTIP - Remove "Resources Disabled" folders. - STATE - - - - SEPARATOR - - - - NAME - wazuh-agent-4.9.0-1.arm64 - PAYLOAD_ONLY - - TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING - - - - TYPE - 0 - VERSION - 2 - - diff --git a/macos/specs/wazuh-agent-intel64.pkgproj b/macos/specs/wazuh-agent-intel64.pkgproj deleted file mode 100644 index 743fd71890..0000000000 --- a/macos/specs/wazuh-agent-intel64.pkgproj +++ /dev/null @@ -1,1254 +0,0 @@ - - - - - PACKAGES - - - MUST-CLOSE-APPLICATION-ITEMS - - MUST-CLOSE-APPLICATIONS - - PACKAGE_FILES - - DEFAULT_INSTALL_LOCATION - / - HIERARCHY - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - Applications - PATH_TYPE - 0 - PERMISSIONS - 509 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - Application Support - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Automator - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Documentation - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Extensions - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Filesystems - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Frameworks - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Input Methods - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Internet Plug-Ins - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchAgents - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchDaemons - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/.ssh - PATH_TYPE - 0 - PERMISSIONS - 448 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/active-response - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/agentless - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/bin - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/internal_options.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/localtime - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/client.keys - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/local_internal_options.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/ossec.conf - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/shared - PATH_TYPE - 0 - PERMISSIONS - 504 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/etc/wpk_root.pem - PATH_TYPE - 0 - PERMISSIONS - 416 - TYPE - 3 - UID - 0 - - - EXPANDED - - GID - 0 - PATH - /Library/Ossec/etc - PATH_TYPE - 0 - PERMISSIONS - 504 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/lib - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/logs - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/queue - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/tmp - PATH_TYPE - 0 - PERMISSIONS - 1000 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/packages_files - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/var - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/wodles - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - /Library/Ossec/ruleset - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - EXPANDED - - GID - 0 - PATH - /Library/Ossec - PATH_TYPE - 0 - PERMISSIONS - 488 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PreferencePanes - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Preferences - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - Printers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PrivilegedHelperTools - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickLook - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickTime - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Screen Savers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Scripts - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Services - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Widgets - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - Library - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - Shared - PATH_TYPE - 0 - PERMISSIONS - 1023 - TYPE - 1 - UID - 0 - - - GID - 80 - PATH - Users - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - / - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - PAYLOAD_TYPE - 0 - SHOW_INVISIBLE - - SPLIT_FORKS - - TREAT_MISSING_FILES_AS_WARNING - - VERSION - 4 - - PACKAGE_SCRIPTS - - POSTINSTALL_PATH - - PATH - postinstall.sh - PATH_TYPE - 1 - - PREINSTALL_PATH - - PATH - preinstall.sh - PATH_TYPE - 1 - - RESOURCES - - - PACKAGE_SETTINGS - - AUTHENTICATION - 1 - CONCLUSION_ACTION - 0 - FOLLOW_SYMBOLIC_LINKS - - IDENTIFIER - com.wazuh.pkg.wazuh-agent - LOCATION - 0 - NAME - agent - OVERWRITE_PERMISSIONS - - PAYLOAD_SIZE - -1 - RELOCATABLE - - USE_HFS+_COMPRESSION - - VERSION - 4.9.0-1 - - TYPE - 0 - UUID - 7BC88EDC-74AB-498A-992B-DE940686D898 - - - PROJECT - - PROJECT_COMMENTS - - NOTES - - PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1M - IDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv - c3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l - cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 - IGNoYXJzZXQ9VVRGLTgiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250 - ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp - dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u - dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD - b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE1MDQuODMiPgo8c3R5bGUg - dHlwZT0idGV4dC9jc3MiPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5 - Pgo8L2JvZHk+CjwvaHRtbD4K - - - PROJECT_PRESENTATION - - BACKGROUND - - INSTALLATION TYPE - - HIERARCHIES - - INSTALLER - - LIST - - - DESCRIPTION - - OPTIONS - - HIDDEN - - STATE - 0 - - PACKAGE_UUID - 7BC88EDC-74AB-498A-992B-DE940686D898 - REQUIREMENTS - - TITLE - - - LANGUAGE - English - VALUE - Wazuh Agent - - - TOOLTIP - - TYPE - 0 - UUID - B5127C49-7EF4-4B73-97D7-2819981073A4 - - - REMOVED - - - - MODE - 0 - - INSTALLATION_STEPS - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewIntroductionController - INSTALLER_PLUGIN - Introduction - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewReadMeController - INSTALLER_PLUGIN - ReadMe - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewLicenseController - INSTALLER_PLUGIN - License - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewDestinationSelectController - INSTALLER_PLUGIN - TargetSelect - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewInstallationTypeController - INSTALLER_PLUGIN - PackageSelection - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewInstallationController - INSTALLER_PLUGIN - Install - LIST_TITLE_KEY - InstallerSectionTitle - - - ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS - ICPresentationViewSummaryController - INSTALLER_PLUGIN - Summary - LIST_TITLE_KEY - InstallerSectionTitle - - - INTRODUCTION - - LOCALIZATIONS - - - LANGUAGE - English - VALUE - - PATH - introduction.txt - PATH_TYPE - 1 - - - - - LICENSE - - LOCALIZATIONS - - MODE - 0 - - README - - LOCALIZATIONS - - - TITLE - - LOCALIZATIONS - - - LANGUAGE - English - VALUE - Wazuh Agent - - - - - PROJECT_REQUIREMENTS - - LIST - - - BEHAVIOR - 2 - DICTIONARY - - IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY - 2 - IC_REQUIREMENT_CPU_INTEL_ARCHITECTURE_TYPE - 2 - IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT - 1 - IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY - 866666 - IC_REQUIREMENT_CPU_POWERPC_ARCHITECTURE_TYPE - 0 - - IC_REQUIREMENT_CHECK_TYPE - 0 - IDENTIFIER - fr.whitebox.Packages.requirement.cpu - MESSAGE - - - LANGUAGE - English - SECONDARY_VALUE - - VALUE - This installer has been built for 64-bit Intel architecture. - - - NAME - Processor - STATE - - - - BEHAVIOR - 3 - DICTIONARY - - IC_REQUIREMENT_OS_DISK_TYPE - 0 - IC_REQUIREMENT_OS_DISTRIBUTION_TYPE - 0 - IC_REQUIREMENT_OS_MINIMUM_VERSION - 100800 - - IC_REQUIREMENT_CHECK_TYPE - 1 - IDENTIFIER - fr.whitebox.Packages.requirement.os - MESSAGE - - NAME - Operating System - STATE - - - - RESOURCES - - ROOT_VOLUME_ONLY - - - PROJECT_SETTINGS - - BUILD_FORMAT - 0 - BUILD_PATH - - PATH - build - PATH_TYPE - 1 - - EXCLUDED_FILES - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .DS_Store - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .DS_Store files - PROXY_TOOLTIP - Remove ".DS_Store" files created by the Finder. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .pbdevelopment - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .pbdevelopment files - PROXY_TOOLTIP - Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - CVS - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .cvsignore - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .cvspass - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .svn - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .git - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .gitignore - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove SCM metadata - PROXY_TOOLTIP - Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - classes.nib - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - designable.db - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - info.nib - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Optimize nib files - PROXY_TOOLTIP - Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - Resources Disabled - TYPE - 1 - - - PROTECTED - - PROXY_NAME - Remove Resources Disabled folders - PROXY_TOOLTIP - Remove "Resources Disabled" folders. - STATE - - - - SEPARATOR - - - - NAME - wazuh-agent-4.9.0-1.intel64 - PAYLOAD_ONLY - - TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING - - - - TYPE - 0 - VERSION - 2 - - diff --git a/macos/uninstall.sh b/macos/uninstall.sh deleted file mode 100755 index 7f344720f7..0000000000 --- a/macos/uninstall.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -## Stop and remove application -sudo /Library/Ossec/bin/wazuh-control stop -sudo /bin/rm -r /Library/Ossec* - -## stop and unload dispatcher -/bin/launchctl unload /Library/LaunchDaemons/com.wazuh.agent.plist - -# remove launchdaemons -/bin/rm -f /Library/LaunchDaemons/com.wazuh.agent.plist - -## remove StartupItems -/bin/rm -rf /Library/StartupItems/WAZUH - -## Remove User and Groups -/usr/bin/dscl . -delete "/Users/wazuh" -/usr/bin/dscl . -delete "/Groups/wazuh" - -/usr/sbin/pkgutil --forget com.wazuh.pkg.wazuh-agent -/usr/sbin/pkgutil --forget com.wazuh.pkg.wazuh-agent-etc - -# In case it was installed via Puppet pkgdmg provider - -if [ -e /var/db/.puppet_pkgdmg_installed_wazuh-agent ]; then - rm -f /var/db/.puppet_pkgdmg_installed_wazuh-agent -fi - -echo -echo "Wazuh agent correctly removed from the system." -echo - -exit 0 diff --git a/rpms/CentOS/5/i386/.gitignore b/rpms/CentOS/5/i386/.gitignore deleted file mode 100644 index 74541b16de..0000000000 --- a/rpms/CentOS/5/i386/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.vagrant -.vagrant/* -*.tar.gz \ No newline at end of file diff --git a/rpms/CentOS/5/i386/CentOS-Base.repo b/rpms/CentOS/5/i386/CentOS-Base.repo deleted file mode 100644 index c39ea2c5b1..0000000000 --- a/rpms/CentOS/5/i386/CentOS-Base.repo +++ /dev/null @@ -1,67 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# -# -[base] -name=CentOS-$releasever - Base -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/os/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#released updates - -[updates] -name=CentOS-$releasever - Updates -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/updates/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#additional packages that may be useful - -[extras] -name=CentOS-$releasever - Extras -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/extras/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#additional packages that extend functionality of existing packages - -[centosplus] -name=CentOS-$releasever - Plus -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/centosplus/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#contrib - packages by Centos Users - -[contrib] -name=CentOS-$releasever - Contrib -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/contrib/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[cr] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/cr/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[addons] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/addons/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[fasttrack] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/fasttrack/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 \ No newline at end of file diff --git a/rpms/CentOS/5/i386/Dockerfile b/rpms/CentOS/5/i386/Dockerfile deleted file mode 100644 index af68534de5..0000000000 --- a/rpms/CentOS/5/i386/Dockerfile +++ /dev/null @@ -1,53 +0,0 @@ -FROM scratch - -# Add the tar.gz with all the files needed -ADD centos-5-i386.tar.gz / - -RUN rm /etc/yum.repos.d/* && echo "exactarch=1" >> /etc/yum.conf -COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo - -RUN linux32 yum install -y gcc-c++ - -# Install Perl 5.10 -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -RUN curl -OL http://packages.wazuh.com/utils/openssl/openssl-1.1.1a.tar.gz && \ - tar xf openssl-1.1.1a.tar.gz && cd openssl-1.1.1a && \ - linux32 ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib && \ - linux32 make -j2 && linux32 make install && echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1a.conf && \ - ldconfig -v && cd / && rm -rf openssl-1.1.1a* - -RUN curl -OL http://packages.wazuh.com/utils/curl/curl-7.63.0.tar.gz && \ - tar xf curl-7.63.0.tar.gz && cd curl-7.63.0 && \ - linux32 ./configure --with-ssl=/usr/local/ssl && \ - linux32 make -j2 && linux32 make install && cd / && rm -rf curl* - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - linux32 ./contrib/download_prerequisites && \ - linux32 ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib --disable-libsanitizer && \ - linux32 make -j2 && linux32 make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.12.4.tar.gz && \ - tar -zxvf cmake-3.12.4.tar.gz && cd cmake-3.12.4 && \ - linux32 ./bootstrap && linux32 make -j2 && linux32 make install && \ - cd / && rm -rf cmake-* - -RUN ln -fs $(which gcc) $(which cc) - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/5/i386/Vagrantfile b/rpms/CentOS/5/i386/Vagrantfile deleted file mode 100644 index 9c018c07b1..0000000000 --- a/rpms/CentOS/5/i386/Vagrantfile +++ /dev/null @@ -1,21 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure("2") do |config| - config.vm.box = "wazuh/CentOS-5-i386" - config.vm.box_url = "https://packages-dev.wazuh.com/utils/vagrant/centos/5/i386/CentOS-5-i386.box" - - config.vm.provider "virtualbox" do |vb| - vb.memory = 2048 - vb.cpus = 6 - end - - # This script will install all the necessary packages - # to build the RPM spec in a "chroot directory", compress - # the directory and build a tar.gz. - # The tar.gz will be used to create a Docker image from scratch - config.vm.provision "shell", inline: <<-SHELL - chmod +x /vagrant/docker_builder.sh - /vagrant/docker_builder.sh - SHELL -end diff --git a/rpms/CentOS/5/i386/docker_builder.sh b/rpms/CentOS/5/i386/docker_builder.sh deleted file mode 100644 index 333d6b49b6..0000000000 --- a/rpms/CentOS/5/i386/docker_builder.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash -# -# Create a base CentOS Docker image. -# -# This script is useful on systems with yum installed (e.g., building -# a CentOS image on CentOS). See contrib/mkimage-rinse.sh for a way -# to build CentOS images on other systems. - -set -e - -# Configuration options -groups=("Core" "Development tools") -name="centos-5-i386" -target=$(mktemp -d /tmp/mkimage-yum.XXXXXX) -yum_config="/etc/yum.conf" - -packages=("sudo" "ca-certificates" "make" "gcc" "curl" "initscripts" \ - "tar" "rpm-build" "automake" "autoconf" "libtool" "wget" \ - "libselinux" "devicemapper" "libselinux-python" "krb5-libs" \ - "policycoreutils" "checkpolicy" "zlib-devel" "bzip2-devel" \ - "openssl-devel" "ncurses-devel" "setarch") -set -x - -# Create the directories -mkdir -m 755 "$target"/dev -mknod -m 600 "$target"/dev/console c 5 1 -mknod -m 600 "$target"/dev/initctl p -mknod -m 666 "$target"/dev/full c 1 7 -mknod -m 666 "$target"/dev/null c 1 3 -mknod -m 666 "$target"/dev/ptmx c 5 2 -mknod -m 666 "$target"/dev/random c 1 8 -mknod -m 666 "$target"/dev/tty c 5 0 -mknod -m 666 "$target"/dev/tty0 c 4 0 -mknod -m 666 "$target"/dev/urandom c 1 9 -mknod -m 666 "$target"/dev/zero c 1 5 - -# Install the groups -yum -c "$yum_config" --installroot="$target" -y groupinstall "$groups" - -# Copy the repository file -rm -f "$target"/etc/yum.repos.d/* -cp -p /etc/yum.repos.d/CentOS-Base.repo "$target"/etc/yum.repos.d/CentOS-Base.repo - -# Install the packages -for i in "${packages[@]}" -do - yum -c "$yum_config" --installroot="$target" -y install "$i" -done -yum -c "$yum_config" --installroot="$target" -y clean all - -# Install perl 5.10 -wget http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz -gunzip perl-5.10.1.tar.gz && tar -xvf perl*.tar -cd perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dprefix="$target"/usr/local -make && make install && ln -fs "$target"/usr/local/bin/perl "$target"/bin/perl -cd .. && rm -rf perl-5.10.1 - -cat > "$target"/etc/sysconfig/network <&2 "warning: cannot autodetect OS version, using '$name' as tag" - version=$name -fi - -tar --numeric-owner -c -C "$target" -zf /vagrant/$name.tar.gz . - -rm -rf "$target" diff --git a/rpms/CentOS/5/x86_64/CentOS-Base.repo b/rpms/CentOS/5/x86_64/CentOS-Base.repo deleted file mode 100644 index c39ea2c5b1..0000000000 --- a/rpms/CentOS/5/x86_64/CentOS-Base.repo +++ /dev/null @@ -1,67 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# -# -[base] -name=CentOS-$releasever - Base -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/os/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#released updates - -[updates] -name=CentOS-$releasever - Updates -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/updates/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#additional packages that may be useful - -[extras] -name=CentOS-$releasever - Extras -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/extras/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#additional packages that extend functionality of existing packages - -[centosplus] -name=CentOS-$releasever - Plus -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/centosplus/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 -#contrib - packages by Centos Users - -[contrib] -name=CentOS-$releasever - Contrib -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/contrib/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[cr] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/cr/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[addons] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/addons/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 - -[fasttrack] -name=CentOS-$releasever - CR -baseurl=http://linuxsoft.cern.ch/centos-vault/5.11/fasttrack/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 \ No newline at end of file diff --git a/rpms/CentOS/5/x86_64/Dockerfile b/rpms/CentOS/5/x86_64/Dockerfile deleted file mode 100644 index 2a6b2d9581..0000000000 --- a/rpms/CentOS/5/x86_64/Dockerfile +++ /dev/null @@ -1,56 +0,0 @@ -FROM centos:5.11 - -RUN rm /etc/yum.repos.d/* && echo "exactarch=1" >> /etc/yum.conf -COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo -RUN yum clean all && yum update -y && yum downgrade -y libselinux - -# Install sudo, SSH and compilers -RUN yum install -y sudo ca-certificates make gcc curl initscripts tar \ - rpm-build automake autoconf libtool wget libselinux devicemapper \ - libselinux-python krb5-libs policycoreutils checkpolicy - -RUN yum groupinstall -y "Development tools" -RUN yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel - -# Install Perl 5.10, OpenSSL 1.1.1 and curl -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -RUN curl -OL http://packages.wazuh.com/utils/openssl/openssl-1.1.1a.tar.gz && \ - tar xf openssl-1.1.1a.tar.gz && cd openssl-1.1.1a && \ - CFLAGS="-fPIC" ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib && \ - make -j2 && make install && echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1a.conf && \ - ldconfig -v && cd / && rm -rf openssl-1.1.1a* - -RUN curl -OL http://packages.wazuh.com/utils/curl/curl-7.63.0.tar.gz && \ - tar xf curl-7.63.0.tar.gz && cd curl-7.63.0 && ./configure --with-ssl=/usr/local/ssl && \ - make -j2 && make install && cd / && rm -rf curl* - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - make -j2 && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.12.4.tar.gz && \ - tar -zxvf cmake-3.12.4.tar.gz && cd cmake-3.12.4 && \ - ./bootstrap && make -j2 && make install && cd / && rm -rf cmake-* - -RUN ln -fs $(which gcc) $(which cc) - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/6/i386/CentOS-Base.repo b/rpms/CentOS/6/i386/CentOS-Base.repo deleted file mode 100644 index aac76933ec..0000000000 --- a/rpms/CentOS/6/i386/CentOS-Base.repo +++ /dev/null @@ -1,47 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# - - -[base] -name=CentOS-$releasever - Base -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/os/i386/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#released updates -[updates] -name=CentOS-$releasever - Updates -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/updates/i386/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that may be useful -[extras] -name=CentOS-$releasever - Extras -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/extras/i386/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that extend functionality of existing packages -[centosplus] -name=CentOS-$releasever - Plus -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/centosplus/i386/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#contrib - packages by Centos Users -[contrib] -name=CentOS-$releasever - Contrib -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/contrib/i386/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 \ No newline at end of file diff --git a/rpms/CentOS/6/i386/Dockerfile b/rpms/CentOS/6/i386/Dockerfile deleted file mode 100644 index 15686f0adf..0000000000 --- a/rpms/CentOS/6/i386/Dockerfile +++ /dev/null @@ -1,73 +0,0 @@ -FROM i386/centos:6 - -# Install all the necessary tools to build the packages -RUN rm /etc/yum.repos.d/* && echo "exactarch=1" >> /etc/yum.conf -COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo -RUN yum clean all && yum update -y -RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 -RUN yum -y install util-linux-ng \ - gcc-multilib make wget git openssh-clients \ - sudo gnupg automake autoconf libtool \ - policycoreutils-python yum-utils epel-release \ - redhat-rpm-config rpm-devel autopoint gettext \ - zlib zlib-devel nspr nspr-devel \ - nss nss-devel kenel-headers magic magic-devel \ - db4 db4-devel rpm-build bison \ - sharutils bzip2-devel xz-devel lzo-devel \ - e2fsprogs-devel libacl-devel libattr-devel \ - openssl-devel libxml2-devel kexec-tools elfutils \ - libarchive-devel elfutils-libelf-devel \ - elfutils-libelf patchelf elfutils-devel libgcrypt-devel - -RUN yum-builddep python34 -y - -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -# Update rpmbuild, rpm and autoconf -RUN curl -O http://packages.wazuh.com/utils/autoconf/autoconf-2.69.tar.gz && \ - gunzip autoconf-2.69.tar.gz && tar xvf autoconf-2.69.tar && \ - cd autoconf-2.69 && linux32 ./configure && \ - linux32 make -j$(nproc) && linux32 make install && cd / && rm -rf autoconf-* - -RUN curl -O https://packages.wazuh.com/utils/libarchive/libarchive-3.1.2-12.el7.src.rpm && \ - linux32 rpmbuild --rebuild libarchive-3.1.2-12.el7.src.rpm --target i386 && \ - rpm -Uvh /root/rpmbuild/RPMS/i386/* --nodeps && rm -rf libarchive-* - -RUN curl -O http://packages.wazuh.com/utils/rpm/rpm-4.15.1.tar.bz2 && \ - tar -xjf rpm-4.15.1.tar.bz2 && cd rpm-4.15.1 && \ - linux32 ./configure --without-lua && linux32 make -j$(nproc) && \ - linux32 make install && cd / && rm -rf rpm-* - -RUN mkdir -p /usr/local/var/lib/rpm && \ - cp /var/lib/rpm/Packages /usr/local/var/lib/rpm/Packages && \ - /usr/local/bin/rpm --rebuilddb && rm -rf /root/rpmbuild - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - linux32 ./contrib/download_prerequisites && \ - linux32 ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - linux32 ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - linux32 make -j$(nproc) && linux32 make install && cd / && rm -rf cmake-* - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/6/x86_64/CentOS-Base.repo b/rpms/CentOS/6/x86_64/CentOS-Base.repo deleted file mode 100644 index 42bbb92497..0000000000 --- a/rpms/CentOS/6/x86_64/CentOS-Base.repo +++ /dev/null @@ -1,54 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# -# - -[base] -name=CentOS-$releasever - Base -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/os/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#released updates -[updates] -name=CentOS-$releasever - Updates -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/updates/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that may be useful -[extras] -name=CentOS-$releasever - Extras -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/extras/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that extend functionality of existing packages -[centosplus] -name=CentOS-$releasever - Plus -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/centosplus/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#contrib - packages by Centos Users -[contrib] -name=CentOS-$releasever - Contrib -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/contrib/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -# SCLO - packages -[centos-sclo-sclo] -name=CentOS-$releasever - SCLO -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/sclo/$basearch/rh/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 \ No newline at end of file diff --git a/rpms/CentOS/6/x86_64/Dockerfile b/rpms/CentOS/6/x86_64/Dockerfile deleted file mode 100644 index 01c55571fd..0000000000 --- a/rpms/CentOS/6/x86_64/Dockerfile +++ /dev/null @@ -1,73 +0,0 @@ -FROM centos:6 - -# Install all the necessary tools to build the packages -RUN rm /etc/yum.repos.d/* && echo "exactarch=1" >> /etc/yum.conf -COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo -RUN yum clean all && yum update -y -RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 -RUN yum install -y gcc make wget git \ - openssh-clients sudo gnupg \ - automake autoconf libtool policycoreutils-python \ - yum-utils epel-release redhat-rpm-config rpm-devel \ - autopoint gettext nspr nspr-devel \ - nss nss-devel kenel-headers magic magic-devel \ - db4 db4-devel zlib zlib-devel rpm-build bison \ - sharutils bzip2-devel xz-devel lzo-devel \ - e2fsprogs-devel libacl-devel libattr-devel \ - openssl-devel libxml2-devel kexec-tools elfutils \ - libarchive-devel elfutils-libelf-devel \ - elfutils-libelf patchelf elfutils-devel libgcrypt-devel - -RUN yum-builddep python34 -y - -RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash - -RUN yum install -y nodejs - -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -# Update rpmbuild, rpm and autoconf -RUN curl -O http://packages.wazuh.com/utils/autoconf/autoconf-2.69.tar.gz && \ - gunzip autoconf-2.69.tar.gz && tar xvf autoconf-2.69.tar && \ - cd autoconf-2.69 && ./configure && make -j$(nproc) && \ - make install && cd / && rm -rf autoconf-* - -RUN curl -O https://packages.wazuh.com/utils/libarchive/libarchive-3.1.2-12.el7.src.rpm && \ - rpmbuild --rebuild libarchive-3.1.2-12.el7.src.rpm && rpm -Uvh /root/rpmbuild/RPMS/x86_64/* --nodeps && rm -rf libarchive-* - -RUN curl -O http://packages.wazuh.com/utils/rpm/rpm-4.15.1.tar.bz2 && \ - tar -xjf rpm-4.15.1.tar.bz2 && cd rpm-4.15.1 && \ - ./configure --without-lua && make -j$(nproc) && make install && cd / && rm -rf rpm-* - -RUN mkdir -p /usr/local/var/lib/rpm && \ - cp /var/lib/rpm/Packages /usr/local/var/lib/rpm/Packages && \ - /usr/local/bin/rpm --rebuilddb && rm -rf /root/rpmbuild - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - make -j$(nproc) && make install && cd / && rm -rf cmake-* - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/7/aarch64/Dockerfile b/rpms/CentOS/7/aarch64/Dockerfile deleted file mode 100644 index f7eb619a93..0000000000 --- a/rpms/CentOS/7/aarch64/Dockerfile +++ /dev/null @@ -1,82 +0,0 @@ -FROM arm64v8/centos:7 - -# Enable EPEL -RUN yum install -y http://packages.wazuh.com/utils/pkg/epel-release-latest-7.noarch.rpm - -# Install all the necessary tools to build the packages -RUN yum install -y gcc make wget git \ - openssh-clients sudo gnupg file-devel\ - automake autoconf libtool policycoreutils-python \ - yum-utils system-rpm-config rpm-devel \ - gettext nspr nspr-devel \ - nss nss-devel libdb libdb-devel \ - zlib zlib-devel rpm-build bison \ - sharutils bzip2-devel xz-devel lzo-devel \ - e2fsprogs-devel libacl-devel libattr-devel \ - openssl-devel libxml2-devel kexec-tools elfutils \ - libcurl-devel elfutils-libelf-devel \ - elfutils-libelf patchelf elfutils-devel libgcrypt-devel \ - libarchive-devel libarchive bluez-libs-devel bzip2 \ - desktop-file-utils expat-devel findutils gcc-c++ gdbm-devel \ - glibc-devel gmp-devel gnupg2 libappstream-glib \ - libffi-devel libtirpc-devel libGL-devel libuuid-devel \ - libX11-devel ncurses-devel pkgconfig readline-devel \ - redhat-rpm-config sqlite-devel gdb tar tcl-devel tix-devel tk-devel \ - valgrind-devel python-rpm-macros python34 nodejs - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer --disable-bootstrap && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - make -j$(nproc) && make install && cd / && rm -rf cmake-* - -# Install Perl 5.10 -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -RUN curl -O http://packages.wazuh.com/utils/openssl/openssl-1.1.1a.tar.gz && \ - tar -xzf openssl-1.1.1a.tar.gz && cd openssl* && \ - ./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' && \ - make -j $(nproc) && make install && cd / && rm -rf openssl-* - -RUN curl -O http://packages.wazuh.com/utils/nodejs/node-v12.16.1-linux-arm64.tar.xz && \ - tar -xJf node-v12.16.1-linux-arm64.tar.xz && \ - cd node-v12.16* && cp -R * /usr/local/ && cd / && rm -rf node-v* - -# Update rpmbuild, rpm and autoconf -RUN curl -O http://packages.wazuh.com/utils/autoconf/autoconf-2.69.tar.gz && \ - gunzip autoconf-2.69.tar.gz && tar xvf autoconf-2.69.tar && \ - cd autoconf-2.69 && ./configure && \ - make -j $(nproc) && make install && cd / && rm -rf autoconf-* - -RUN curl -O http://packages.wazuh.com/utils/rpm/rpm-4.15.1.tar.bz2 && \ - tar -xjf rpm-4.15.1.tar.bz2 && cd rpm-4.15.1 && \ - ./configure --without-lua && make -j $(nproc) && \ - make install && cd / && rm -rf rpm-* - -RUN mkdir -p /usr/local/var/lib/rpm && \ - cp /var/lib/rpm/Packages /usr/local/var/lib/rpm/Packages && \ - /usr/local/bin/rpm --rebuilddb && rm -rf /root/rpmbuild - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/7/armv7hl/Dockerfile b/rpms/CentOS/7/armv7hl/Dockerfile deleted file mode 100644 index 5267cc06f3..0000000000 --- a/rpms/CentOS/7/armv7hl/Dockerfile +++ /dev/null @@ -1,66 +0,0 @@ -FROM arm32v7/centos:7 - -ADD build_deps.sh /build_deps.sh -RUN sh build_deps.sh - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - linux32 ./contrib/download_prerequisites && \ - linux32 ./configure --prefix=/usr/local/gcc-9.4.0 --with-arch=armv7-a \ - --with-float=hard --with-fpu=vfpv3-d16 --enable-languages=c,c++ --disable-multilib \ - --disable-libsanitizer && \ - linux32 make -j$(nproc) && linux32 make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - linux32 ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - linux32 make -j$(nproc) && linux32 make install && cd / && rm -rf cmake-* - -# Install Perl 5.10 -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -RUN curl -O http://packages.wazuh.com/utils/openssl/openssl-1.1.1a.tar.gz && \ - tar -xzf openssl-1.1.1a.tar.gz && cd openssl* && \ - linux32 ./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' && \ - linux32 make -j $(nproc) && linux32 make install && \ - make install && cd / && rm -rf openssl-* - -RUN curl -O http://packages.wazuh.com/utils/nodejs/node-v4.9.1-linux-armv7l.tar.xz && \ - tar -xJf node-v4.9.1-linux-armv7l.tar.xz && cd node-v4.9.1-linux-armv7l && cp -R * /usr/local/ && cd / && rm -rf node-v* - -# Update rpmbuild, rpm and autoconf -RUN curl -O http://packages.wazuh.com/utils/autoconf/autoconf-2.69.tar.gz && \ - gunzip autoconf-2.69.tar.gz && tar xvf autoconf-2.69.tar && \ - cd autoconf-2.69 && linux32 ./configure && linux32 make -j $(nproc) && \ - linux32 make install && cd / && rm -rf autoconf-* - -RUN curl -O http://packages.wazuh.com/utils/rpm/rpm-4.15.1.tar.bz2 && \ - tar -xjf rpm-4.15.1.tar.bz2 && cd rpm-4.15.1 && \ - linux32 ./configure --without-lua && linux32 make -j $(nproc) && \ - linux32 make install && cd / && rm -rf rpm-* - -RUN echo "%_initddir %{_sysconfdir}/rc.d/init.d" >> /root/.rpmmacros -RUN echo "%_initrddir %{_initddir}" >> /root/.rpmmacros -RUN echo "%_arch armv7hl" >> /root/.rpmmacros - -RUN mkdir -p /usr/local/var/lib/rpm && \ - cp /var/lib/rpm/Packages /usr/local/var/lib/rpm/Packages && \ - /usr/local/bin/rpm --rebuilddb && rm -rf /root/rpmbuild - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/7/armv7hl/build_deps.sh b/rpms/CentOS/7/armv7hl/build_deps.sh deleted file mode 100644 index eae66870c5..0000000000 --- a/rpms/CentOS/7/armv7hl/build_deps.sh +++ /dev/null @@ -1,318 +0,0 @@ -rpm_url="http://packages.wazuh.com/utils/armv7hl" -rpm -ivh --force --ignorearch --nodeps \ -${rpm_url}/iproute-4.11.0-25.el7_7.2.armv7hl.rpm \ -${rpm_url}/dhclient-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/audit-libs-python-2.8.5-4.el7.armv7hl.rpm \ -${rpm_url}/audit-libs-2.8.5-4.el7.armv7hl.rpm \ -${rpm_url}/autoconf-2.69-11.el7.noarch.rpm \ -${rpm_url}/automake-1.13.4-3.el7.noarch.rpm \ -${rpm_url}/bash-4.2.46-34.el7.armv7hl.rpm \ -${rpm_url}/binutils-2.27-43.base.el7.armv7hl.rpm \ -${rpm_url}/bison-3.0.4-2.el7.armv7hl.rpm \ -${rpm_url}/bluez-libs-devel-5.44-6.el7.armv7hl.rpm \ -${rpm_url}/bluez-libs-5.44-6.el7.armv7hl.rpm \ -${rpm_url}/bzip2-devel-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/bzip2-libs-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/bzip2-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/ca-certificates-2019.2.32-76.el7_7.noarch.rpm \ -${rpm_url}/checkpolicy-2.5-8.el7.armv7hl.rpm \ -${rpm_url}/chkconfig-1.7.4-1.el7.armv7hl.rpm \ -${rpm_url}/coreutils-8.22-24.el7.armv7hl.rpm \ -${rpm_url}/cpio-2.11-27.el7.armv7hl.rpm \ -${rpm_url}/cpp-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/desktop-file-utils-0.23-2.el7.armv7hl.rpm \ -${rpm_url}/diffutils-3.3-5.el7.armv7hl.rpm \ -${rpm_url}/dracut-network-033-568.el7.armv7hl.rpm \ -${rpm_url}/dracut-033-568.el7.armv7hl.rpm \ -${rpm_url}/dwz-0.11-3.el7.armv7hl.rpm \ -${rpm_url}/e2fsprogs-devel-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/e2fsprogs-libs-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/elfutils-devel-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libelf-devel-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libelf-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libs-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/emacs-filesystem-24.3-23.el7.noarch.rpm \ -${rpm_url}/ethtool-4.8-10.el7.armv7hl.rpm \ -${rpm_url}/expat-devel-2.1.0-11.el7.armv7hl.rpm \ -${rpm_url}/expat-2.1.0-11.el7.armv7hl.rpm \ -${rpm_url}/file-devel-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/file-libs-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/file-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/findutils-4.5.11-6.el7.armv7hl.rpm \ -${rpm_url}/fipscheck-lib-1.4.1-6.el7.armv7hl.rpm \ -${rpm_url}/gawk-4.0.2-4.el7_3.1.armv7hl.rpm \ -${rpm_url}/gcc-c%2B%2B-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/gcc-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/gdb-7.6.1-119.el7.armv7hl.rpm \ -${rpm_url}/gdbm-devel-1.10-8.el7.armv7hl.rpm \ -${rpm_url}/gdbm-1.10-8.el7.armv7hl.rpm \ -${rpm_url}/gettext-libs-0.19.8.1-3.el7.armv7hl.rpm \ -${rpm_url}/gettext-0.19.8.1-3.el7.armv7hl.rpm \ -${rpm_url}/git-1.8.3.1-21.el7_7.armv7hl.rpm \ -${rpm_url}/glib2-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/glibc-devel-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/glibc-headers-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/glibc-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/gmp-devel-6.0.0-15.el7.armv7hl.rpm \ -${rpm_url}/gmp-6.0.0-15.el7.armv7hl.rpm \ -${rpm_url}/gnupg2-2.0.22-5.el7_5.armv7hl.rpm \ -${rpm_url}/grep-2.20-3.el7.armv7hl.rpm \ -${rpm_url}/gzip-1.5-10.el7.armv7hl.rpm \ -${rpm_url}/info-5.1-5.el7.armv7hl.rpm \ -${rpm_url}/json-glib-1.4.2-2.el7.armv7hl.rpm \ -${rpm_url}/kexec-tools-2.0.15-43.el7.armv7hl.rpm \ -${rpm_url}/krb5-devel-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/krb5-libs-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/less-458-9.el7.armv7hl.rpm \ -${rpm_url}/libX11-devel-1.6.7-2.el7.armv7hl.rpm \ -${rpm_url}/libX11-1.6.7-2.el7.armv7hl.rpm \ -${rpm_url}/libXft-devel-2.3.2-2.el7.armv7hl.rpm \ -${rpm_url}/libacl-devel-2.2.51-15.el7.armv7hl.rpm \ -${rpm_url}/libacl-2.2.51-15.el7.armv7hl.rpm \ -${rpm_url}/libappstream-glib-0.7.8-2.el7.armv7hl.rpm \ -${rpm_url}/libarchive-devel-3.1.2-14.el7_7.armv7hl.rpm \ -${rpm_url}/libarchive-3.1.2-14.el7_7.armv7hl.rpm \ -${rpm_url}/libassuan-2.1.0-3.el7.armv7hl.rpm \ -${rpm_url}/libattr-devel-2.4.46-13.el7.armv7hl.rpm \ -${rpm_url}/libattr-2.4.46-13.el7.armv7hl.rpm \ -${rpm_url}/libcgroup-0.41-21.el7.armv7hl.rpm \ -${rpm_url}/libcom_err-devel-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/libcom_err-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/libcroco-0.6.12-4.el7.armv7hl.rpm \ -${rpm_url}/libcurl-7.29.0-57.el7.armv7hl.rpm \ -${rpm_url}/libdb-devel-5.3.21-25.el7.armv7hl.rpm \ -${rpm_url}/libdb-5.3.21-25.el7.armv7hl.rpm \ -${rpm_url}/libedit-3.0-12.20121213cvs.el7.armv7hl.rpm \ -${rpm_url}/libffi-devel-3.0.13-19.el7.armv7hl.rpm \ -${rpm_url}/libffi-3.0.13-19.el7.armv7hl.rpm \ -${rpm_url}/libgcab1-0.7-4.el7_4.armv7hl.rpm \ -${rpm_url}/libgcc-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libgcrypt-devel-1.5.3-14.el7.armv7hl.rpm \ -${rpm_url}/libgcrypt-1.5.3-14.el7.armv7hl.rpm \ -${rpm_url}/libgomp-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libgpg-error-devel-1.12-3.el7.armv7hl.rpm \ -${rpm_url}/libgpg-error-1.12-3.el7.armv7hl.rpm \ -${rpm_url}/libicu-50.2-3.el7.armv7hl.rpm \ -${rpm_url}/libmpc-1.0.1-3.el7.armv7hl.rpm \ -${rpm_url}/libselinux-python-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libsemanage-python-2.5-14.el7.armv7hl.rpm \ -${rpm_url}/libsepol-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libsoup-2.62.2-2.el7.armv7hl.rpm \ -${rpm_url}/libstdc%2B%2B-devel-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libstdc%2B%2B-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libtirpc-devel-0.2.4-0.16.el7.armv7hl.rpm \ -${rpm_url}/libtirpc-0.2.4-0.16.el7.armv7hl.rpm \ -${rpm_url}/libtool-2.4.2-22.el7_3.armv7hl.rpm \ -${rpm_url}/libunistring-0.9.3-9.el7.armv7hl.rpm \ -${rpm_url}/libuuid-devel-2.23.2-63.el7.armv7hl.rpm \ -${rpm_url}/libuuid-2.23.2-63.el7.armv7hl.rpm \ -${rpm_url}/libuv-1.37.0-1.el7.armv7hl.rpm \ -${rpm_url}/libxcb-devel-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/libxml2-devel-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/libxml2-python-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/libxml2-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/lua-5.1.4-15.el7.armv7hl.rpm \ -${rpm_url}/lzo-devel-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/lzo-minilzo-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/lzo-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/m4-1.4.16-10.el7.armv7hl.rpm \ -${rpm_url}/make-3.82-24.el7.armv7hl.rpm \ -${rpm_url}/man-db-2.6.3-11.el7.armv7hl.rpm \ -${rpm_url}/mpfr-3.1.1-4.el7.armv7hl.rpm \ -${rpm_url}/ncurses-devel-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/ncurses-libs-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/nodejs-6.17.1-1.el7.armv7hl.rpm \ -${rpm_url}/npm-3.10.10-1.6.17.1.1.el7.armv7hl.rpm \ -${rpm_url}/nspr-devel-4.21.0-1.el7.armv7hl.rpm \ -${rpm_url}/nspr-4.21.0-1.el7.armv7hl.rpm \ -${rpm_url}/nss-devel-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/nss-pem-1.0.3-7.el7.armv7hl.rpm \ -${rpm_url}/nss-softokn-devel-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-softokn-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-sysinit-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/nss-util-devel-3.44.0-4.el7_7.armv7hl.rpm \ -${rpm_url}/nss-util-3.44.0-4.el7_7.armv7hl.rpm \ -${rpm_url}/nss-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/openldap-2.4.44-21.el7_6.armv7hl.rpm \ -${rpm_url}/openssh-clients-7.4p1-21.el7.armv7hl.rpm \ -${rpm_url}/openssh-7.4p1-21.el7.armv7hl.rpm \ -${rpm_url}/openssl-devel-1.0.2k-19.el7.armv7hl.rpm \ -${rpm_url}/openssl-libs-1.0.2k-19.el7.armv7hl.rpm \ -${rpm_url}/pam-1.1.8-23.el7.armv7hl.rpm \ -${rpm_url}/patch-2.7.1-12.el7_7.armv7hl.rpm \ -${rpm_url}/patchelf-0.9-10.el7.armv7hl.rpm \ -${rpm_url}/pcre-8.32-17.el7.armv7hl.rpm \ -${rpm_url}/perl-Carp-1.26-244.el7.noarch.rpm \ -${rpm_url}/perl-Data-Dumper-2.145-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Error-0.17020-2.el7.noarch.rpm \ -${rpm_url}/perl-Exporter-5.68-3.el7.noarch.rpm \ -${rpm_url}/perl-File-Path-2.09-2.el7.noarch.rpm \ -${rpm_url}/perl-File-Temp-0.23.01-3.el7.noarch.rpm \ -${rpm_url}/perl-Getopt-Long-2.40-3.el7.noarch.rpm \ -${rpm_url}/perl-Git-1.8.3.1-21.el7_7.noarch.rpm \ -${rpm_url}/perl-PathTools-3.40-5.el7.armv7hl.rpm \ -${rpm_url}/perl-TermReadKey-2.30-20.el7.armv7hl.rpm \ -${rpm_url}/perl-Test-Harness-3.28-3.el7.noarch.rpm \ -${rpm_url}/perl-Text-ParseWords-3.29-4.el7.noarch.rpm \ -${rpm_url}/perl-Thread-Queue-3.02-2.el7.noarch.rpm \ -${rpm_url}/perl-constant-1.27-2.el7.noarch.rpm \ -${rpm_url}/perl-srpm-macros-1-8.el7.noarch.rpm \ -${rpm_url}/perl-threads-1.87-4.el7.armv7hl.rpm \ -${rpm_url}/perl-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/pinentry-0.8.1-17.el7.armv7hl.rpm \ -${rpm_url}/pkgconfig-0.27.1-4.el7.armv7hl.rpm \ -${rpm_url}/policycoreutils-python-2.5-34.el7.armv7hl.rpm \ -${rpm_url}/policycoreutils-2.5-34.el7.armv7hl.rpm \ -${rpm_url}/popt-devel-1.13-16.el7.armv7hl.rpm \ -${rpm_url}/popt-1.13-16.el7.armv7hl.rpm \ -${rpm_url}/pth-2.0.7-23.el7.armv7hl.rpm \ -${rpm_url}/python-IPy-0.75-6.el7.noarch.rpm \ -${rpm_url}/python-kitchen-1.1.1-5.el7.noarch.rpm \ -${rpm_url}/python-libs-2.7.5-88.el7.armv7hl.rpm \ -${rpm_url}/python-rpm-macros-3-32.el7.noarch.rpm \ -${rpm_url}/python-srpm-macros-3-32.el7.noarch.rpm \ -${rpm_url}/python-2.7.5-88.el7.armv7hl.rpm \ -${rpm_url}/python34-libs-3.4.10-4.el7.armv7hl.rpm \ -${rpm_url}/python34-3.4.10-4.el7.armv7hl.rpm \ -${rpm_url}/readline-devel-6.2-11.el7.armv7hl.rpm \ -${rpm_url}/readline-6.2-11.el7.armv7hl.rpm \ -${rpm_url}/redhat-rpm-config-9.1.0-88.el7.centos.noarch.rpm \ -${rpm_url}/rpm-build-libs-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-build-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-devel-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-libs-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rsync-3.1.2-10.el7.armv7hl.rpm \ -${rpm_url}/sed-4.2.2-6.el7.armv7hl.rpm \ -${rpm_url}/setools-libs-3.3.8-4.el7.armv7hl.rpm \ -${rpm_url}/sharutils-4.13.3-8.el7.armv7hl.rpm \ -${rpm_url}/snappy-1.1.0-3.el7.armv7hl.rpm \ -${rpm_url}/sqlite-devel-3.7.17-8.el7_7.1.armv7hl.rpm \ -${rpm_url}/sqlite-3.7.17-8.el7_7.1.armv7hl.rpm \ -${rpm_url}/sudo-1.8.23-9.el7.armv7hl.rpm \ -${rpm_url}/systemd-219-73.el7.1.armv7hl.rpm \ -${rpm_url}/tar-1.26-35.el7.armv7hl.rpm \ -${rpm_url}/tcl-devel-8.5.13-8.el7.armv7hl.rpm \ -${rpm_url}/tcl-8.5.13-8.el7.armv7hl.rpm \ -${rpm_url}/tix-devel-8.4.3-12.el7.armv7hl.rpm \ -${rpm_url}/tix-8.4.3-12.el7.armv7hl.rpm \ -${rpm_url}/tk-devel-8.5.13-6.el7.armv7hl.rpm \ -${rpm_url}/tk-8.5.13-6.el7.armv7hl.rpm \ -${rpm_url}/unzip-6.0-21.el7.armv7hl.rpm \ -${rpm_url}/valgrind-devel-3.15.0-11.el7.armv7hl.rpm \ -${rpm_url}/valgrind-3.15.0-11.el7.armv7hl.rpm \ -${rpm_url}/vim-minimal-7.4.629-6.el7.armv7hl.rpm \ -${rpm_url}/xorg-x11-proto-devel-2018.4-1.el7.noarch.rpm \ -${rpm_url}/xz-devel-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/xz-libs-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/xz-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/yum-utils-1.1.31-53.el7.noarch.rpm \ -${rpm_url}/yum-3.4.3-167.el7.centos.noarch.rpm \ -${rpm_url}/zip-3.0-11.el7.armv7hl.rpm \ -${rpm_url}/zlib-devel-1.2.7-18.el7.armv7hl.rpm \ -${rpm_url}/zlib-1.2.7-18.el7.armv7hl.rpm \ -${rpm_url}/fipscheck-1.4.1-6.el7.armv7hl.rpm \ -${rpm_url}/libatomic-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/jasper-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-devel-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-libs-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-utils-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/kernel-headers-5.4.28-200.el7.armv7hl.rpm \ -${rpm_url}/glibc-common-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/keyutils-libs-devel-1.5.8-3.el7.armv7hl.rpm \ -${rpm_url}/libmnl-1.0.3-7.el7.armv7hl.rpm \ -${rpm_url}/iptables-1.4.21-34.el7.armv7hl.rpm \ -${rpm_url}/iptables-devel-1.4.21-34.el7.armv7hl.rpm \ -${rpm_url}/hostname-3.13-3.el7_7.1.armv7hl.rpm \ -${rpm_url}/initscripts-9.49.49-1.el7.armv7hl.rpm \ -${rpm_url}/dhcp-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-devel-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-libs-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-common-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/bind-export-devel-9.11.4-16.P2.el7.armv7hl.rpm \ -${rpm_url}/bind-export-libs-9.11.4-16.P2.el7.armv7hl.rpm \ -${rpm_url}/libkadm5-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/libselinux-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libselinux-devel-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libverto-0.2.5-4.el7.armv7hl.rpm \ -${rpm_url}/libverto-devel-0.2.5-4.el7.armv7hl.rpm \ -${rpm_url}/groff-base-1.22.2-8.el7.armv7hl.rpm \ -${rpm_url}/libX11-common-1.6.7-2.el7.noarch.rpm \ -${rpm_url}/libxcb-devel-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/libXft-2.3.2-2.el7.armv7hl.rpm \ -${rpm_url}/pkgconfig-0.27.1-4.el7.armv7hl.rpm \ -${rpm_url}/glib-networking-2.56.1-1.el7.armv7hl.rpm \ -${rpm_url}/libxcb-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/groff-base-1.22.2-8.el7.armv7hl.rpm \ -${rpm_url}/libpipeline-1.2.3-3.el7.armv7hl.rpm \ -${rpm_url}/ncurses-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/ncurses-base-5.9-14.20130511.el7_4.noarch.rpm \ -${rpm_url}/nss-softokn-freebl-devel-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-softokn-freebl-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/perl-libs-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/perl-Scalar-List-Utils-1.27-248.el7.armv7hl.rpm \ -${rpm_url}/perl-Pod-Usage-1.63-3.el7.noarch.rpm \ -${rpm_url}/perl-Time-Local-1.2300-2.el7.noarch.rpm \ -${rpm_url}/perl-Pod-Simple-3.28-4.el7.noarch.rpm \ -${rpm_url}/perl-threads-shared-1.43-6.el7.armv7hl.rpm \ -${rpm_url}/perl-macros-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-devel-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-utils-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/freetype-2.8-14.el7.armv7hl.rpm \ -${rpm_url}/freetype-devel-2.8-14.el7.armv7hl.rpm \ -${rpm_url}/fontconfig-2.13.0-4.3.el7.armv7hl.rpm \ -${rpm_url}/fontconfig-devel-2.13.0-4.3.el7.armv7hl.rpm \ -${rpm_url}/libXrender-0.9.10-1.el7.armv7hl.rpm \ -${rpm_url}/libXrender-devel-0.9.10-1.el7.armv7hl.rpm \ -${rpm_url}/libXau-1.0.8-2.1.el7.armv7hl.rpm \ -${rpm_url}/libXau-devel-1.0.8-2.1.el7.armv7hl.rpm \ -${rpm_url}/perl-Filter-1.49-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Socket-2.010-5.el7.armv7hl.rpm \ -${rpm_url}/perl-Storable-2.45-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Time-HiRes-1.9725-3.el7.armv7hl.rpm \ -${rpm_url}/libselinux-utils-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/systemd-libs-219-73.el7.1.armv7hl.rpm \ -${rpm_url}/libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGLU-9.0.0-4.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGLU-devel-9.0.0-4.el7.armv7hl.rpm \ -${rpm_url}/freeglut-3.0.0-8.el7.armv7hl.rpm \ -${rpm_url}/freeglut-devel-3.0.0-8.el7.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-devel-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnfnetlink-1.0.1-4.el7.armv7hl.rpm \ -${rpm_url}/libnfnetlink-devel-1.0.1-4.el7.armv7hl.rpm \ -${rpm_url}/sysvinit-tools-2.88-14.dsf.el7.armv7hl.rpm \ -${rpm_url}/libcap-devel-2.22-11.el7.armv7hl.rpm \ -${rpm_url}/libcap-2.22-11.el7.armv7hl.rpm \ -${rpm_url}/libsepol-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libsepol-devel-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-devel-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/glib2-devel-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/glib2-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/gsettings-desktop-schemas-devel-3.28.0-3.el7.armv7hl.rpm \ -${rpm_url}/gsettings-desktop-schemas-3.28.0-3.el7.armv7hl.rpm \ -${rpm_url}/gnutls-3.3.29-9.el7_6.armv7hl.rpm \ -${rpm_url}/libproxy-0.4.11-11.el7.armv7hl.rpm \ -${rpm_url}/libproxy-devel-0.4.11-11.el7.armv7hl.rpm \ -${rpm_url}/perl-podlators-2.5.1-3.el7.noarch.rpm \ -${rpm_url}/perl-Pod-Perldoc-3.20-4.el7.noarch.rpm \ -${rpm_url}/perl-Encode-2.51-7.el7.armv7hl.rpm \ -${rpm_url}/perl-Pod-Escapes-1.04-295.el7.noarch.rpm \ -${rpm_url}/dejavu-sans-fonts-2.33-6.el7.noarch.rpm \ -${rpm_url}/fontpackages-filesystem-1.44-8.el7.noarch.rpm \ -${rpm_url}/libglvnd-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/libXext-1.3.3-3.el7.armv7hl.rpm \ -${rpm_url}/libXext-devel-1.3.3-3.el7.armv7hl.rpm \ -${rpm_url}/libglvnd-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGL-18.3.4-7.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGL-devel-18.3.4-7.el7.armv7hl.rpm \ -${rpm_url}/gl-manpages-1.1-7.20130122.el7.noarch.rpm \ -${rpm_url}/libICE-1.0.9-9.el7.armv7hl.rpm \ -${rpm_url}/libICE-devel-1.0.9-9.el7.armv7hl.rpm \ -${rpm_url}/wget-1.14-18.el7_6.1.armv7hl.rpm \ -${rpm_url}/libcurl-devel-7.29.0-57.el7.armv7hl.rpm \ -${rpm_url}/cmake3-data-3.17.3-3.el7.noarch.rpm \ -${rpm_url}/cmake3-3.17.3-3.el7.armv7hl.rpm diff --git a/rpms/CentOS/7/ppc64le/Dockerfile b/rpms/CentOS/7/ppc64le/Dockerfile deleted file mode 100644 index d580a6e5f5..0000000000 --- a/rpms/CentOS/7/ppc64le/Dockerfile +++ /dev/null @@ -1,56 +0,0 @@ -FROM ppc64le/centos:7 -# Install all the necessary tools to build the packages - -RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 -RUN yum -y install centos-release-scl -RUN mv /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo.old -RUN mv /etc/yum.repos.d/CentOS-SCLo-scl.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo.old - -RUN yum -y install gcc make wget git \ - openssh-clients rpm-build sudo gnupg \ - automake autoconf libtool policycoreutils-python \ - yum-utils epel-release redhat-rpm-config rpm-devel - -# Warning: this repo has been disabled by the vendor -RUN mv /etc/yum.repos.d/CentOS-Sources.repo /etc/yum.repos.d/CentOS-Sources.repo.old -RUN yum-builddep python34 -y - -RUN yum install -y \ - http://packages.wazuh.com/utils/nodejs/nodejs-8.9.4-2.el7.ppc64le.rpm \ - http://packages.wazuh.com/utils/nodejs/nodejs-devel-8.9.4-2.el7.ppc64le.rpm \ - http://packages.wazuh.com/utils/nodejs/npm-5.6.0-1.8.9.4.2.el7.ppc64le.rpm \ - http://packages.wazuh.com/utils/nodejs/nodejs-debuginfo-8.9.4-2.el7.ppc64le.rpm - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - make -j$(nproc) && make install && cd / && rm -rf cmake-* && \ - ln -sf /usr/bin/rpmbuild /usr/local/bin/rpmbuild - -# Install Perl 5.10 -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/CentOS/7/x86_64/Dockerfile b/rpms/CentOS/7/x86_64/Dockerfile deleted file mode 100644 index c351ef7d97..0000000000 --- a/rpms/CentOS/7/x86_64/Dockerfile +++ /dev/null @@ -1,69 +0,0 @@ -FROM centos:7 - -# Install all the necessary tools to build the packages -RUN yum install -y gcc make wget git \ - openssh-clients sudo gnupg file-devel\ - automake autoconf libtool policycoreutils-python \ - yum-utils system-rpm-config rpm-devel \ - gettext nspr nspr-devel \ - nss nss-devel libdb libdb-devel \ - zlib zlib-devel rpm-build bison \ - sharutils bzip2-devel xz-devel lzo-devel \ - e2fsprogs-devel libacl-devel libattr-devel \ - openssl-devel libxml2-devel kexec-tools elfutils \ - libcurl-devel elfutils-libelf-devel \ - elfutils-libelf elfutils-devel libgcrypt-devel \ - libarchive-devel libarchive bluez-libs-devel bzip2 \ - desktop-file-utils expat-devel findutils gcc-c++ gdbm-devel \ - glibc-devel gmp-devel gnupg2 libappstream-glib \ - libffi-devel libtirpc-devel libGL-devel libuuid-devel \ - libX11-devel ncurses-devel pkgconfig readline-devel \ - redhat-rpm-config sqlite-devel gdb tar tcl-devel tix-devel tk-devel \ - valgrind-devel python-rpm-macros python3 - - # Install Perl 5.10 -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -# Update rpmbuild, rpm and autoconf -RUN curl -O http://packages.wazuh.com/utils/autoconf/autoconf-2.69.tar.gz && \ - gunzip autoconf-2.69.tar.gz && tar xvf autoconf-2.69.tar && \ - cd autoconf-2.69 && ./configure && make -j$(nproc) && \ - make install && cd / && rm -rf autoconf-* - -RUN curl -O http://packages.wazuh.com/utils/rpm/rpm-4.15.1.tar.bz2 && \ - tar -xjf rpm-4.15.1.tar.bz2 && cd rpm-4.15.1 && \ - ./configure --without-lua && make -j$(nproc) && make install && cd / && rm -rf rpm-* - -RUN mkdir -p /usr/local/var/lib/rpm && \ - cp /var/lib/rpm/Packages /usr/local/var/lib/rpm/Packages && \ - /usr/local/bin/rpm --rebuilddb && rm -rf /root/rpmbuild - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - make -j$(nproc) && make install && cd / && rm -rf cmake-* - -# Add the scripts to build the RPM package -ADD build.sh /usr/local/bin/build_package -RUN chmod +x /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/rpms/README.md b/rpms/README.md deleted file mode 100644 index 79c3b40769..0000000000 --- a/rpms/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh RPM packages - -In this repository, you can find the necessary tools to build a Wazuh package for RPM based OS. - -## Building RPM packages - -Please, visit the following link for the full RPM packages building documentation: [Creating Wazuh RPM packages.](https://documentation.wazuh.com/current/development/packaging/generate-rpm-package.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/rpms/SPECS/wazuh-agent.spec b/rpms/SPECS/wazuh-agent.spec deleted file mode 100644 index 2244e7dde5..0000000000 --- a/rpms/SPECS/wazuh-agent.spec +++ /dev/null @@ -1,868 +0,0 @@ -%if %{_debugenabled} == yes - %global _enable_debug_package 0 - %global debug_package %{nil} - %global __os_install_post %{nil} - %define __strip /bin/true -%endif - -Summary: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring -Name: wazuh-agent -Version: 4.9.0 -Release: %{_release} -License: GPL -Group: System Environment/Daemons -Source0: %{name}-%{version}.tar.gz -URL: https://www.wazuh.com/ -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Vendor: Wazuh, Inc -Packager: Wazuh, Inc -Requires(pre): /usr/sbin/groupadd /usr/sbin/useradd -Requires(postun): /usr/sbin/groupdel /usr/sbin/userdel -Conflicts: ossec-hids ossec-hids-agent wazuh-manager wazuh-local -AutoReqProv: no - -Requires: coreutils -%if 0%{?el} >= 6 || 0%{?rhel} >= 6 -BuildRequires: coreutils glibc-devel automake autoconf libtool policycoreutils-python perl -%else -BuildRequires: coreutils glibc-devel automake autoconf libtool policycoreutils perl -%endif - -ExclusiveOS: linux - -%description -Wazuh helps you to gain security visibility into your infrastructure by monitoring -hosts at an operating system and application level. It provides the following capabilities: -log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring - -%prep -%setup -q - -./gen_ossec.sh conf agent centos %rhel %{_localstatedir} > etc/ossec-agent.conf - -%build -pushd src -# Rebuild for agent -make clean - -%if 0%{?el} >= 6 || 0%{?rhel} >= 6 - make deps TARGET=agent - make -j%{_threads} TARGET=agent USE_SELINUX=yes DEBUG=%{_debugenabled} -%else - %ifnarch x86_64 - MSGPACK="USE_MSGPACK_OPT=no" - %endif - deps_version=`cat Makefile | grep "DEPS_VERSION =" | cut -d " " -f 3` - make deps RESOURCES_URL=http://packages.wazuh.com/deps/${deps_version} TARGET=agent - make -j%{_threads} TARGET=agent USE_AUDIT=no USE_SELINUX=yes USE_EXEC_ENVIRON=no DEBUG=%{_debugenabled} ${MSGPACK} - -%endif - -popd - -%install -# Clean BUILDROOT -rm -fr %{buildroot} - -echo 'USER_LANGUAGE="en"' > ./etc/preloaded-vars.conf -echo 'USER_NO_STOP="y"' >> ./etc/preloaded-vars.conf -echo 'USER_INSTALL_TYPE="agent"' >> ./etc/preloaded-vars.conf -echo 'USER_DIR="%{_localstatedir}"' >> ./etc/preloaded-vars.conf -echo 'USER_DELETE_DIR="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_ACTIVE_RESPONSE="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_SYSCHECK="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_ROOTCHECK="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_OPENSCAP="n"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_SYSCOLLECTOR="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_CISCAT="y"' >> ./etc/preloaded-vars.conf -echo 'USER_UPDATE="n"' >> ./etc/preloaded-vars.conf -echo 'USER_AGENT_SERVER_IP="MANAGER_IP"' >> ./etc/preloaded-vars.conf -echo 'USER_CA_STORE="/path/to/my_cert.pem"' >> ./etc/preloaded-vars.conf -echo 'USER_AUTO_START="n"' >> ./etc/preloaded-vars.conf -./install.sh - -%if 0%{?el} < 6 || 0%{?rhel} < 6 - mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir} - touch ${RPM_BUILD_ROOT}%{_sysconfdir}/ossec-init.conf -%endif - -# Create directories -mkdir -p ${RPM_BUILD_ROOT}%{_initrddir} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/.ssh - -# Copy the installed files into RPM_BUILD_ROOT directory -cp -pr %{_localstatedir}/* ${RPM_BUILD_ROOT}%{_localstatedir}/ -mkdir -p ${RPM_BUILD_ROOT}/usr/lib/systemd/system/ -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/ossec-hids-rh.init -install -m 0755 src/init/templates/ossec-hids-rh.init ${RPM_BUILD_ROOT}%{_initrddir}/wazuh-agent -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/wazuh-agent.service -install -m 0644 src/init/templates/wazuh-agent.service ${RPM_BUILD_ROOT}/usr/lib/systemd/system/ - -# Clean the preinstalled configuration assesment files -rm -f ${RPM_BUILD_ROOT}%{_localstatedir}/ruleset/sca/* - -# Install configuration assesment files and files templates -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/{generic} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/{1,2,2023} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/{8,7,6,5} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/{9} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/{9,8,7,6,5} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/{11,12,15} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/{11,12} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/{29,30,31,32,33,34} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/{8,9} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/{8,9} - -cp -r ruleset/sca/{generic,centos,rhel,ol,sles,amazon,rocky,almalinux} ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp - -cp etc/templates/config/generic/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic - -cp etc/templates/config/amzn/1/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1 -cp etc/templates/config/amzn/2/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2 -cp etc/templates/config/amzn/2023/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023 - -cp etc/templates/config/centos/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos -cp etc/templates/config/centos/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8 -cp etc/templates/config/centos/7/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7 -cp etc/templates/config/centos/6/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6 -cp etc/templates/config/centos/5/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5 - -cp etc/templates/config/ol/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9 - -cp etc/templates/config/rhel/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel -cp etc/templates/config/rhel/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9 -cp etc/templates/config/rhel/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8 -cp etc/templates/config/rhel/7/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7 -cp etc/templates/config/rhel/6/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6 -cp etc/templates/config/rhel/5/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5 - -cp etc/templates/config/sles/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles -cp etc/templates/config/sles/11/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11 -cp etc/templates/config/sles/12/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12 -cp etc/templates/config/sles/15/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15 - -cp etc/templates/config/suse/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse -cp etc/templates/config/suse/11/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11 -cp etc/templates/config/suse/12/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12 - -cp etc/templates/config/fedora/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora -cp etc/templates/config/fedora/29/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/29 -cp etc/templates/config/fedora/30/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/30 -cp etc/templates/config/fedora/31/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/31 -cp etc/templates/config/fedora/32/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/32 -cp etc/templates/config/fedora/33/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/33 -cp etc/templates/config/fedora/34/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/34 - -cp etc/templates/config/almalinux/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/8 -cp etc/templates/config/almalinux/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/9 - -cp etc/templates/config/rocky/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/9 -cp etc/templates/config/rocky/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/8 - -# Add configuration scripts -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/ -cp gen_ossec.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/ -cp add_localfiles.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/ - -# Templates for initscript -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/src/init -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/generic -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/centos -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/rhel -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/suse -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/sles - -# Add SUSE initscript -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/ossec-hids-suse.init -cp -rp src/init/templates/ossec-hids-suse.init ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/src/init/ - -# Copy scap templates -cp -rp etc/templates/config/generic/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/generic -cp -rp etc/templates/config/centos/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/centos -cp -rp etc/templates/config/rhel/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/rhel -cp -rp etc/templates/config/suse/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/suse -cp -rp etc/templates/config/sles/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/sles - -install -m 0640 src/init/*.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/src/init - -# Add installation scripts -cp src/VERSION ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/src/ -cp src/REVISION ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/agent_installation_scripts/src/ - -exit 0 - -%pre -# Create the wazuh group if it doesn't exists -if command -v getent > /dev/null 2>&1 && ! getent group wazuh > /dev/null 2>&1; then - groupadd -r wazuh -elif ! getent group wazuh > /dev/null 2>&1; then - groupadd -r wazuh -fi -# Create the wazuh user if it doesn't exists -if ! getent passwd wazuh > /dev/null 2>&1; then - useradd -g wazuh -G wazuh -d %{_localstatedir} -r -s /sbin/nologin wazuh -fi - -# Stop the services to upgrade the package -if [ $1 = 2 ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent.service > /dev/null 2>&1 - touch %{_localstatedir}/tmp/wazuh.restart - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-agent status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-agent stop > /dev/null 2>&1 - touch %{_localstatedir}/tmp/wazuh.restart - elif %{_localstatedir}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch %{_localstatedir}/tmp/wazuh.restart - elif %{_localstatedir}/bin/ossec-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch %{_localstatedir}/tmp/wazuh.restart - fi - %{_localstatedir}/bin/ossec-control stop > /dev/null 2>&1 || %{_localstatedir}/bin/wazuh-control stop > /dev/null 2>&1 -fi - -%post - -echo "VERSION=\"$(%{_localstatedir}/bin/wazuh-control info -v)\"" > /etc/ossec-init.conf -if [ $1 = 2 ]; then - if [ -d %{_localstatedir}/logs/ossec ]; then - rm -rf %{_localstatedir}/logs/wazuh - cp -rp %{_localstatedir}/logs/ossec %{_localstatedir}/logs/wazuh - fi - - if [ -d %{_localstatedir}/queue/ossec ]; then - rm -rf %{_localstatedir}/queue/sockets - cp -rp %{_localstatedir}/queue/ossec %{_localstatedir}/queue/sockets - fi -fi -# If the package is being installed -if [ $1 = 1 ]; then - - touch %{_localstatedir}/logs/active-responses.log - chown wazuh:wazuh %{_localstatedir}/logs/active-responses.log - chmod 0660 %{_localstatedir}/logs/active-responses.log - - . %{_localstatedir}/packages_files/agent_installation_scripts/src/init/dist-detect.sh - - # Generating ossec.conf file - %{_localstatedir}/packages_files/agent_installation_scripts/gen_ossec.sh conf agent ${DIST_NAME} ${DIST_VER}.${DIST_SUBVER} %{_localstatedir} > %{_localstatedir}/etc/ossec.conf - chown root:wazuh %{_localstatedir}/etc/ossec.conf - - # Add default local_files to ossec.conf - %{_localstatedir}/packages_files/agent_installation_scripts/add_localfiles.sh %{_localstatedir} >> %{_localstatedir}/etc/ossec.conf - - - # Register and configure agent if Wazuh environment variables are defined - %{_localstatedir}/packages_files/agent_installation_scripts/src/init/register_configure_agent.sh %{_localstatedir} > /dev/null || : -fi - -if [[ -d /run/systemd/system ]]; then - rm -f %{_initrddir}/wazuh-agent -fi - -# Delete the installation files used to configure the agent -rm -rf %{_localstatedir}/packages_files - -# Remove unnecessary files from shared directory -rm -f %{_localstatedir}/etc/shared/*.rpmnew - -#AlmaLinux -if [ -r "/etc/almalinux-release" ]; then - DIST_NAME=almalinux - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/almalinux-release` -#Rocky -elif [ -r "/etc/rocky-release" ]; then - DIST_NAME=rocky - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/rocky-release` -# CentOS -elif [ -r "/etc/centos-release" ]; then - if grep -q "AlmaLinux" /etc/centos-release; then - DIST_NAME=almalinux - elif grep -q "Rocky" /etc/centos-release; then - DIST_NAME=almalinux - else - DIST_NAME="centos" - fi - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/centos-release` -# Fedora -elif [ -r "/etc/fedora-release" ]; then - DIST_NAME="fedora" - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/fedora-release` -# Oracle Linux -elif [ -r "/etc/oracle-release" ]; then - DIST_NAME="ol" - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/oracle-release` -# RedHat -elif [ -r "/etc/redhat-release" ]; then - if grep -q "AlmaLinux" /etc/redhat-release; then - DIST_NAME=almalinux - elif grep -q "Rocky" /etc/redhat-release; then - DIST_NAME=almalinux - elif grep -q "CentOS" /etc/redhat-release; then - DIST_NAME="centos" - else - DIST_NAME="rhel" - fi - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/redhat-release` -# SUSE -elif [ -r "/etc/SuSE-release" ]; then - if grep -q "openSUSE" /etc/SuSE-release; then - DIST_NAME="generic" - DIST_VER="" - else - DIST_NAME="sles" - DIST_VER=`sed -rn 's/.*VERSION = ([0-9]{1,2}).*/\1/p' /etc/SuSE-release` - fi -elif [ -r "/etc/os-release" ]; then - . /etc/os-release - DIST_NAME=$ID - DIST_VER=$(echo $VERSION_ID | sed -rn 's/[^0-9]*([0-9]+).*/\1/p') - if [ "X$DIST_VER" = "X" ]; then - DIST_VER="0" - fi - if [ "$DIST_NAME" = "amzn" ] && [ "$DIST_VER" != "2" ] && [ "$DIST_VER" != "2023" ]; then - DIST_VER="1" - fi - DIST_SUBVER=$(echo $VERSION_ID | sed -rn 's/[^0-9]*[0-9]+\.([0-9]+).*/\1/p') - if [ "X$DIST_SUBVER" = "X" ]; then - DIST_SUBVER="0" - fi -else - DIST_NAME="generic" - DIST_VER="" -fi - -SCA_DIR="${DIST_NAME}/${DIST_VER}" -SCA_BASE_DIR="%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp" -mkdir -p %{_localstatedir}/ruleset/sca - - -SCA_TMP_DIR="${SCA_BASE_DIR}/${SCA_DIR}" -# Install the configuration files needed for this hosts -if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" -else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" -fi - -SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" -if [ -r ${SCA_TMP_FILE} ]; then - - rm -f %{_localstatedir}/ruleset/sca/* || true - - for sca_file in $(cat ${SCA_TMP_FILE}); do - if [ -f ${SCA_BASE_DIR}/${sca_file} ]; then - mv ${SCA_BASE_DIR}/${sca_file} %{_localstatedir}/ruleset/sca - fi - done -fi - -# Set the proper selinux context -if ([ "X${DIST_NAME}" = "Xrhel" ] || [ "X${DIST_NAME}" = "Xcentos" ] || [ "X${DIST_NAME}" = "XCentOS" ]) && [ "${DIST_VER}" == "5" ]; then - if command -v getenforce > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - chcon -t textrel_shlib_t %{_localstatedir}/lib/libwazuhext.so - chcon -t textrel_shlib_t %{_localstatedir}/lib/libwazuhshared.so - fi - fi -else - # Add the SELinux policy - if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - semodule -i %{_localstatedir}/var/selinux/wazuh.pp - semodule -e wazuh - fi - fi -fi - -# Restore ossec.conf permissions after upgrading -chmod 0660 %{_localstatedir}/etc/ossec.conf - -# Remove old ossec user and group if exists and change ownwership of files - -if getent group ossec > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user root -exec chown root:wazuh {} \; > /dev/null 2>&1 || true - if getent passwd ossec > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossec -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - userdel ossec > /dev/null 2>&1 - fi - if getent passwd ossecm > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossecm -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - userdel ossecm > /dev/null 2>&1 - fi - if getent passwd ossecr > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossecr -exec chown wazuh:wazuh {} \; > /dev/null 2>&1 || true - userdel ossecr > /dev/null 2>&1 - fi - if grep -q ossec /etc/group; then - groupdel ossec > /dev/null 2>&1 - fi -fi - -%preun - -if [ $1 = 0 ]; then - - # Stop the services before uninstall the package - # Check for systemd - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent.service > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-agent status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-agent stop > /dev/null 2>&1 - fi - %{_localstatedir}/bin/wazuh-control stop > /dev/null 2>&1 - - # Remove the SELinux policy - if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - if (semodule -l | grep wazuh > /dev/null); then - semodule -r wazuh > /dev/null - fi - fi - fi - # Remove the service file for SUSE hosts - if [ -f /etc/os-release ]; then - sles=$(grep "\"sles" /etc/os-release) - elif [ -f /etc/SuSE-release ]; then - sles=$(grep "SUSE Linux Enterprise Server" /etc/SuSE-release) - fi - if [ ! -z "$sles" ]; then - rm -f /etc/init.d/wazuh-agent - fi - - # Remove SCA files - rm -f %{_localstatedir}/ruleset/sca/* - -fi - -%triggerin -- glibc -[ -r %{_sysconfdir}/localtime ] && cp -fpL %{_sysconfdir}/localtime %{_localstatedir}/etc - chown root:wazuh %{_localstatedir}/etc/localtime - chmod 0640 %{_localstatedir}/etc/localtime - -%postun - -# If the package is been uninstalled -if [ $1 = 0 ];then - # Remove the wazuh user if it exists - if getent passwd wazuh > /dev/null 2>&1; then - userdel wazuh >/dev/null 2>&1 - fi - # Remove the wazuh group if it exists - if command -v getent > /dev/null 2>&1 && getent group wazuh > /dev/null 2>&1; then - groupdel wazuh >/dev/null 2>&1 - elif getent group wazuh > /dev/null 2>&1; then - groupdel wazuh >/dev/null 2>&1 - fi - - # Remove lingering folders and files - rm -rf %{_localstatedir}/etc/shared/ - rm -rf %{_localstatedir}/queue/ - rm -rf %{_localstatedir}/var/ - rm -rf %{_localstatedir}/bin/ - rm -rf %{_localstatedir}/logs/ - rm -rf %{_localstatedir}/backup/ - rm -rf %{_localstatedir}/ruleset/ - rm -rf %{_localstatedir}/tmp -fi - -# posttrans code is the last thing executed in a install/upgrade -%posttrans -if [ -f %{_sysconfdir}/systemd/system/wazuh-agent.service ]; then - rm -rf %{_sysconfdir}/systemd/system/wazuh-agent.service - systemctl daemon-reload > /dev/null 2>&1 -fi - -if [ -f %{_localstatedir}/tmp/wazuh.restart ]; then - rm -f %{_localstatedir}/tmp/wazuh.restart - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 ; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-agent.service > /dev/null 2>&1 - elif command -v service > /dev/null 2>&1; then - service wazuh-agent restart > /dev/null 2>&1 - else - %{_localstatedir}/bin/wazuh-control restart > /dev/null 2>&1 - fi -fi - -if [ -d %{_localstatedir}/logs/ossec ]; then - rm -rf %{_localstatedir}/logs/ossec/ -fi - -if [ -d %{_localstatedir}/queue/ossec ]; then - rm -rf %{_localstatedir}/queue/ossec/ -fi - -if [ -f %{_sysconfdir}/ossec-init.conf ]; then - rm -f %{_sysconfdir}/ossec-init.conf - rm -f %{_localstatedir}/etc/ossec-init.conf -fi - -%clean -rm -fr %{buildroot} - -%files -%defattr(-,root,root) -%config(missingok) %{_initrddir}/wazuh-agent -%attr(640, root, wazuh) %verify(not md5 size mtime) %ghost %{_sysconfdir}/ossec-init.conf -/usr/lib/systemd/system/wazuh-agent.service -%dir %attr(750, root, wazuh) %{_localstatedir} -%attr(750, root, wazuh) %{_localstatedir}/agentless -%dir %attr(770, root, wazuh) %{_localstatedir}/.ssh -%dir %attr(750, root, wazuh) %{_localstatedir}/active-response -%dir %attr(750, root, wazuh) %{_localstatedir}/active-response/bin -%attr(750, root, wazuh) %{_localstatedir}/active-response/bin/* -%dir %attr(750, root, root) %{_localstatedir}/bin -%attr(750, root, root) %{_localstatedir}/bin/* -%dir %attr(750, root, wazuh) %{_localstatedir}/backup -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/etc -%attr(640, root, wazuh) %config(noreplace) %{_localstatedir}/etc/client.keys -%attr(640, root, wazuh) %{_localstatedir}/etc/internal_options* -%attr(640, root, wazuh) %{_localstatedir}/etc/localtime -%attr(640, root, wazuh) %config(noreplace) %{_localstatedir}/etc/local_internal_options.conf -%attr(660, root, wazuh) %config(noreplace) %{_localstatedir}/etc/ossec.conf -%attr(640, root, wazuh) %{_localstatedir}/etc/wpk_root.pem -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/shared -%attr(660, root, wazuh) %config(missingok,noreplace) %{_localstatedir}/etc/shared/* -%dir %attr(750, root, wazuh) %{_localstatedir}/lib -%attr(750, root, wazuh) %{_localstatedir}/lib/* -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/logs -%attr(660, wazuh, wazuh) %ghost %{_localstatedir}/logs/active-responses.log -%attr(660, root, wazuh) %ghost %{_localstatedir}/logs/ossec.log -%attr(660, root, wazuh) %ghost %{_localstatedir}/logs/ossec.json -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/wazuh -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/add_localfiles.sh -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/gen_ossec.sh -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/generic/* -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/centos/* -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/rhel/* -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/sles/* -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/etc/templates/config/suse/* -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/agent_installation_scripts/src/* -%dir %attr(750, root, wazuh) %{_localstatedir}/queue -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/sockets -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/diff -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/fim -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/fim/db -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/syscollector -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/syscollector/db -%attr(640, root, wazuh) %{_localstatedir}/queue/syscollector/norm_config.json -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/alerts -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/rids -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/logcollector -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset/ -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset/sca -%attr(750, root, wazuh) %{_localstatedir}/lib/libdbsync.so -%attr(750, root, wazuh) %{_localstatedir}/lib/librsync.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libsyscollector.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libsysinfo.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libstdc++.so.6 -%attr(750, root, wazuh) %{_localstatedir}/lib/libgcc_s.so.1 -%attr(750, root, wazuh) %{_localstatedir}/lib/libfimdb.so -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15/* -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amazon -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amazon/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/* -%dir %attr(1770, root, wazuh) %{_localstatedir}/tmp -%dir %attr(750, root, wazuh) %{_localstatedir}/var -%dir %attr(770, root, wazuh) %{_localstatedir}/var/incoming -%dir %attr(770, root, wazuh) %{_localstatedir}/var/run -%dir %attr(770, root, wazuh) %{_localstatedir}/var/selinux -%attr(640, root, wazuh) %{_localstatedir}/var/selinux/* -%dir %attr(770, root, wazuh) %{_localstatedir}/var/upgrade -%dir %attr(770, root, wazuh) %{_localstatedir}/var/wodles -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles -%attr(750, root, wazuh) %{_localstatedir}/wodles/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/aws -%attr(750, root, wazuh) %{_localstatedir}/wodles/aws/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/azure -%attr(750, root, wazuh) %{_localstatedir}/wodles/azure/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/docker -%attr(750, root, wazuh) %{_localstatedir}/wodles/docker/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud -%attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud/* - -%changelog -* Thu Aug 15 2024 support - 4.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html -* Thu Jul 18 2024 support - 4.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html -* Wed Jun 12 2024 support - 4.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html -* Thu May 30 2024 support - 4.7.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html -* Thu Apr 25 2024 support - 4.7.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html -* Tue Feb 27 2024 support - 4.7.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html -* Tue Jan 09 2024 support - 4.7.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html -* Wed Dec 13 2023 support - 4.7.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html -* Tue Nov 21 2023 support - 4.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html -* Tue Oct 31 2023 support - 4.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html -* Tue Oct 24 2023 support - 4.5.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html -* Tue Oct 10 2023 support - 4.5.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html -* Thu Aug 31 2023 support - 4.5.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html -* Thu Aug 24 2023 support - 4.5.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5.1.html -* Thu Aug 10 2023 support - 4.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html -* Mon Jul 10 2023 support - 4.4.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html -* Tue Jun 13 2023 support - 4.4.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html -* Thu May 25 2023 support - 4.4.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html -* Mon May 08 2023 support - 4.4.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html -* Mon Apr 24 2023 support - 4.3.11 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3.11.html -* Mon Apr 17 2023 support - 4.4.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html -* Wed Jan 18 2023 support - 4.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html -* Thu Nov 10 2022 support - 4.3.10 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html -* Mon Oct 03 2022 support - 4.3.9 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html -* Wed Sep 21 2022 support - 3.13.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-6.html -* Mon Sep 19 2022 support - 4.3.8 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html -* Wed Aug 24 2022 support - 3.13.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-5.html -* Mon Aug 08 2022 support - 4.3.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html -* Thu Jul 07 2022 support - 4.3.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html -* Wed Jun 29 2022 support - 4.3.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html -* Tue Jun 07 2022 support - 4.3.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html -* Tue May 31 2022 support - 4.3.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html -* Mon May 30 2022 support - 4.3.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html -* Mon May 30 2022 support - 3.13.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-4.html -* Sun May 29 2022 support - 4.2.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-7.html -* Wed May 18 2022 support - 4.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html -* Thu May 05 2022 support - 4.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html -* Fri Mar 25 2022 support - 4.2.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-6.html -* Mon Nov 15 2021 support - 4.2.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-5.html -* Thu Oct 21 2021 support - 4.2.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-4.html -* Wed Oct 06 2021 support - 4.2.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-3.html -* Tue Sep 28 2021 support - 4.2.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-2.html -* Sat Sep 25 2021 support - 4.2.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-1.html -* Mon Apr 26 2021 support - 4.2.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-0.html -* Sat Apr 24 2021 support - 3.13.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-3.html -* Thu Apr 22 2021 support - 4.1.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-5.html -* Mon Mar 29 2021 support - 4.1.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-4.html -* Sat Mar 20 2021 support - 4.1.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-3.html -* Mon Mar 08 2021 support - 4.1.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-2.html -* Fri Mar 05 2021 support - 4.1.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-1.html -* Tue Jan 19 2021 support - 4.1.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-0.html -* Mon Nov 30 2020 support - 4.0.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-3.html -* Mon Nov 23 2020 support - 4.0.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-2.html -* Sat Oct 31 2020 support - 4.0.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-1.html -* Mon Oct 19 2020 support - 4.0.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-0.html -* Fri Aug 21 2020 support - 3.13.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-2.html -* Tue Jul 14 2020 support - 3.13.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-1.html -* Mon Jun 29 2020 support - 3.13.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-0.html -* Wed May 13 2020 support - 3.12.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-3.html -* Thu Apr 9 2020 support - 3.12.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-2.html -* Wed Apr 8 2020 support - 3.12.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-1.html -* Wed Mar 25 2020 support - 3.12.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-0.html -* Mon Feb 24 2020 support - 3.11.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-4.html -* Wed Jan 22 2020 support - 3.11.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-3.html -* Tue Jan 7 2020 support - 3.11.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-2.html -* Thu Dec 26 2019 support - 3.11.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-1.html -* Mon Oct 7 2019 support - 3.11.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-0.html -* Mon Sep 23 2019 support - 3.10.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-2.html -* Thu Sep 19 2019 support - 3.10.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-1.html -* Mon Aug 26 2019 support - 3.10.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-0.html -* Thu Aug 8 2019 support - 3.9.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-5.html -* Fri Jul 12 2019 support - 3.9.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-4.html -* Tue Jul 02 2019 support - 3.9.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-3.html -* Tue Jun 11 2019 support - 3.9.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-2.html -* Sat Jun 01 2019 support - 3.9.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-1.html -* Mon Feb 25 2019 support - 3.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-0.html -* Wed Jan 30 2019 support - 3.8.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-2.html -* Thu Jan 24 2019 support - 3.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-1.html -* Fri Jan 18 2019 support - 3.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-0.html -* Wed Nov 7 2018 support - 3.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-7-0.html -* Mon Sep 10 2018 support - 3.6.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-6-1.html -* Fri Sep 7 2018 support - 3.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-6-0.html -* Wed Jul 25 2018 support - 3.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-5-0.html -* Wed Jul 11 2018 support - 3.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-4-0.html -* Mon Jun 18 2018 support - 3.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-3-1.html -* Mon Jun 11 2018 support - 3.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-3-0.html -* Wed May 30 2018 support - 3.2.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-4.html -* Thu May 10 2018 support - 3.2.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-3.html -* Mon Apr 09 2018 support - 3.2.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-2.html -* Wed Feb 21 2018 support - 3.2.1 -- More info: https://documentation.wazuh.com/current/release-notes/rerlease-3-2-1.html -* Wed Feb 07 2018 support - 3.2.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-0.html -* Thu Dec 21 2017 support - 3.1.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-1-0.html -* Mon Nov 06 2017 support - 3.0.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-0-0.html -* Tue Jun 06 2017 support - 2.0.1 -- Changed random data generator for a secure OS-provided generator. -- Changed Windows installer file name (depending on version). -- Linux distro detection using standard os-release file. -- Changed some URLs to documentation. -- Disable synchronization with SQLite databases for Syscheck by default. -- Minor changes at Rootcheck formatter for JSON alerts. -- Added debugging messages to Integrator logs. -- Show agent ID when possible on logs about incorrectly formatted messages. -- Use default maximum inotify event queue size. -- Show remote IP on encoding format errors when unencrypting messages. -- Fix permissions in agent-info folder -- Fix permissions in rids folder. -* Fri Apr 21 2017 Jose Luis Ruiz - 2.0 -- Changed random data generator for a secure OS-provided generator. -- Changed Windows installer file name (depending on version). -- Linux distro detection using standard os-release file. -- Changed some URLs to documentation. -- Disable synchronization with SQLite databases for Syscheck by default. -- Minor changes at Rootcheck formatter for JSON alerts. -- Added debugging messages to Integrator logs. -- Show agent ID when possible on logs about incorrectly formatted messages. -- Use default maximum inotify event queue size. -- Show remote IP on encoding format errors when unencrypting messages. -- Fixed resource leaks at rules configuration parsing. -- Fixed memory leaks at rules parser. -- Fixed memory leaks at XML decoders parser. -- Fixed TOCTOU condition when removing directories recursively. -- Fixed insecure temporary file creation for old POSIX specifications. -- Fixed missing agentless devices identification at JSON alerts. -- Fixed FIM timestamp and file name issue at SQLite database. -- Fixed cryptographic context acquirement on Windows agents. -- Fixed debug mode for Analysisd. -- Fixed bad exclusion of BTRFS filesystem by Rootcheck. -- Fixed compile errors on macOS. -- Fixed option -V for Integrator. -- Exclude symbolic links to directories when sending FIM diffs (by Stephan Joerrens). -- Fixed daemon list for service reloading at wazuh-control. -- Fixed socket waiting issue on Windows agents. -- Fixed PCI_DSS definitions grouping issue at Rootcheck controls. diff --git a/rpms/SPECS/wazuh-manager.spec b/rpms/SPECS/wazuh-manager.spec deleted file mode 100644 index 63b42234b7..0000000000 --- a/rpms/SPECS/wazuh-manager.spec +++ /dev/null @@ -1,1115 +0,0 @@ -%if %{_debugenabled} == yes - %global _enable_debug_package 0 - %global debug_package %{nil} - %global __os_install_post %{nil} - %define __strip /bin/true -%endif - -Summary: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring -Name: wazuh-manager -Version: 4.9.0 -Release: %{_release} -License: GPL -Group: System Environment/Daemons -Source0: %{name}-%{version}.tar.gz -URL: https://www.wazuh.com/ -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Vendor: Wazuh, Inc -Packager: Wazuh, Inc -Requires(pre): /usr/sbin/groupadd /usr/sbin/useradd -Requires(postun): /usr/sbin/groupdel /usr/sbin/userdel -Conflicts: ossec-hids ossec-hids-agent wazuh-agent wazuh-local -Obsoletes: wazuh-api < 4.0.0 -AutoReqProv: no - -Requires: coreutils -BuildRequires: coreutils glibc-devel automake autoconf libtool policycoreutils-python curl perl - -ExclusiveOS: linux - -%define _source_payload w9.xzdio -%define _binary_payload w9.xzdio - -%description -Wazuh helps you to gain security visibility into your infrastructure by monitoring -hosts at an operating system and application level. It provides the following capabilities: -log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring - -# Don't generate build_id links to prevent conflicts with other -# packages. -%global _build_id_links none - -%prep -%setup -q - -./gen_ossec.sh conf manager centos %rhel %{_localstatedir} > etc/ossec-server.conf - -%build -pushd src -# Rebuild for server -make clean - -# Build Wazuh sources -make deps TARGET=server -make -j%{_threads} TARGET=server USE_SELINUX=yes DEBUG=%{_debugenabled} - -popd - -%install -# Clean BUILDROOT -rm -fr %{buildroot} - -echo 'USER_LANGUAGE="en"' > ./etc/preloaded-vars.conf -echo 'USER_NO_STOP="y"' >> ./etc/preloaded-vars.conf -echo 'USER_INSTALL_TYPE="server"' >> ./etc/preloaded-vars.conf -echo 'USER_DIR="%{_localstatedir}"' >> ./etc/preloaded-vars.conf -echo 'USER_DELETE_DIR="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_ACTIVE_RESPONSE="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_SYSCHECK="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_ROOTCHECK="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_OPENSCAP="n"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_CISCAT="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_SYSCOLLECTOR="y"' >> ./etc/preloaded-vars.conf -echo 'USER_UPDATE="n"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_EMAIL="n"' >> ./etc/preloaded-vars.conf -echo 'USER_WHITE_LIST="n"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_SYSLOG="y"' >> ./etc/preloaded-vars.conf -echo 'USER_ENABLE_AUTHD="y"' >> ./etc/preloaded-vars.conf -echo 'USER_SERVER_IP="MANAGER_IP"' >> ./etc/preloaded-vars.conf -echo 'USER_CA_STORE="/path/to/my_cert.pem"' >> ./etc/preloaded-vars.conf -echo 'USER_GENERATE_AUTHD_CERT="y"' >> ./etc/preloaded-vars.conf -echo 'USER_AUTO_START="n"' >> ./etc/preloaded-vars.conf -echo 'USER_CREATE_SSL_CERT="n"' >> ./etc/preloaded-vars.conf -echo 'DOWNLOAD_CONTENT="y"' >> ./etc/preloaded-vars.conf -./install.sh - -# Create directories -mkdir -p ${RPM_BUILD_ROOT}%{_initrddir} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/.ssh - -# Copy the installed files into RPM_BUILD_ROOT directory -cp -pr %{_localstatedir}/* ${RPM_BUILD_ROOT}%{_localstatedir}/ -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/ossec-hids-rh.init -install -m 0755 src/init/templates/ossec-hids-rh.init ${RPM_BUILD_ROOT}%{_initrddir}/wazuh-manager -mkdir -p ${RPM_BUILD_ROOT}/usr/lib/systemd/system/ -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/wazuh-manager.service -install -m 0644 src/init/templates/wazuh-manager.service ${RPM_BUILD_ROOT}/usr/lib/systemd/system/ - -# Clean the preinstalled configuration assesment files -rm -f ${RPM_BUILD_ROOT}%{_localstatedir}/ruleset/sca/* - -# Add configuration scripts -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/ -cp gen_ossec.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/ -cp add_localfiles.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/ - -# Templates for initscript -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/src/init -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/generic -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/centos -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/rhel -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/suse -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/sles - -# Install configuration assesment files and files templates -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/{applications,generic} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/{1,2,2023} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/{8,7,6,5} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/{15,16,17,18,19,20,21,22,23} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/debian/{7,8,9,10,11,12} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/{9} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ubuntu/{12,14,16,18,20,22}/04 -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/{9,8,7,6,5} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/{11,12,15} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/{11,12} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sunos -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/windows -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/{29,30,31,32,33,34} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/{8,9} -mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/{8,9} - -cp -r ruleset/sca/{applications,generic,mongodb,nginx,oracledb,centos,darwin,debian,ol,rhel,sles,sunos,windows,amazon,ubuntu,rocky,almalinux} ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp - -cp etc/templates/config/generic/{sca.files,sca.manager.files} ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic - -cp etc/templates/config/amzn/1/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1 -cp etc/templates/config/amzn/2/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2 -cp etc/templates/config/amzn/2023/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023 - -cp etc/templates/config/centos/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos -cp etc/templates/config/centos/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8 -cp etc/templates/config/centos/7/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7 -cp etc/templates/config/centos/6/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6 -cp etc/templates/config/centos/5/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5 - -cp etc/templates/config/ol/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9 - -cp etc/templates/config/rhel/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel -cp etc/templates/config/rhel/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9 -cp etc/templates/config/rhel/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8 -cp etc/templates/config/rhel/7/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7 -cp etc/templates/config/rhel/6/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6 -cp etc/templates/config/rhel/5/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5 - -cp etc/templates/config/sles/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles -cp etc/templates/config/sles/11/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11 -cp etc/templates/config/sles/12/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12 -cp etc/templates/config/sles/15/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15 - -cp etc/templates/config/suse/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse -cp etc/templates/config/suse/11/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11 -cp etc/templates/config/suse/12/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12 - -cp etc/templates/config/fedora/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora -cp etc/templates/config/fedora/29/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/29 -cp etc/templates/config/fedora/30/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/30 -cp etc/templates/config/fedora/31/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/31 -cp etc/templates/config/fedora/32/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/32 -cp etc/templates/config/fedora/33/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/33 -cp etc/templates/config/fedora/34/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/34 - -cp etc/templates/config/almalinux/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/8 -cp etc/templates/config/almalinux/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/9 - -cp etc/templates/config/rocky/9/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/9 -cp etc/templates/config/rocky/8/sca.files ${RPM_BUILD_ROOT}%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/8 - -# Add SUSE initscript -sed -i "s:WAZUH_HOME_TMP:%{_localstatedir}:g" src/init/templates/ossec-hids-suse.init -cp -rp src/init/templates/ossec-hids-suse.init ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/src/init/ - -# Copy scap templates -cp -rp etc/templates/config/generic/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/generic -cp -rp etc/templates/config/centos/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/centos -cp -rp etc/templates/config/rhel/* ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/rhel - -install -m 0640 src/init/*.sh ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/src/init - -# Add installation scripts -cp src/VERSION ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/src/ -cp src/REVISION ${RPM_BUILD_ROOT}%{_localstatedir}/packages_files/manager_installation_scripts/src/ - -exit 0 - -%pre - -# Create the wazuh group if it doesn't exists -if command -v getent > /dev/null 2>&1 && ! getent group wazuh > /dev/null 2>&1; then - groupadd -r wazuh -elif ! getent group wazuh > /dev/null 2>&1; then - groupadd -r wazuh -fi - -# Create the wazuh user if it doesn't exists -if ! getent passwd wazuh > /dev/null 2>&1; then - useradd -g wazuh -G wazuh -d %{_localstatedir} -r -s /sbin/nologin wazuh -fi - -# Stop the services to upgrade the package -if [ $1 = 2 ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-manager > /dev/null 2>&1; then - systemctl stop wazuh-manager.service > /dev/null 2>&1 - %{_localstatedir}/bin/ossec-control stop > /dev/null 2>&1 - touch %{_localstatedir}/tmp/wazuh.restart - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-manager status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-manager stop > /dev/null 2>&1 - %{_localstatedir}/bin/ossec-control stop > /dev/null 2>&1 - touch %{_localstatedir}/tmp/wazuh.restart - elif %{_localstatedir}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch %{_localstatedir}/tmp/wazuh.restart - elif %{_localstatedir}/bin/ossec-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - touch %{_localstatedir}/tmp/wazuh.restart - fi - %{_localstatedir}/bin/ossec-control stop > /dev/null 2>&1 || %{_localstatedir}/bin/wazuh-control stop > /dev/null 2>&1 -fi -if pgrep -f ossec-authd > /dev/null 2>&1; then - kill -15 $(pgrep -f ossec-authd) -fi - -# Remove/relocate existing SQLite databases -rm -f %{_localstatedir}/var/db/cluster.db* || true -rm -f %{_localstatedir}/var/db/.profile.db* || true -rm -rf %{_localstatedir}/var/db/agents || true - -if [ -f %{_localstatedir}/var/db/global.db ]; then - mv %{_localstatedir}/var/db/global.db %{_localstatedir}/queue/db/ - rm -f %{_localstatedir}/var/db/global.db* || true - rm -f %{_localstatedir}/var/db/.template.db || true -fi - -if [ -f %{_localstatedir}/queue/db/global.db ]; then - chmod 640 %{_localstatedir}/queue/db/global.db* - chown wazuh:wazuh %{_localstatedir}/queue/db/global.db* -fi - -# Remove Vuln-detector database -rm -f %{_localstatedir}/queue/vulnerabilities/cve.db || true - -# Remove plain-text agent information if exists -if [ -d %{_localstatedir}/queue/agent-info ]; then - rm -rf %{_localstatedir}/queue/agent-info/* > /dev/null 2>&1 -fi - -if [ -d %{_localstatedir}/queue/rootcheck ]; then - rm -rf %{_localstatedir}/queue/rootcheck/* > /dev/null 2>&1 -fi - -# Delete old API backups -if [ $1 = 2 ]; then - if [ -d %{_localstatedir}/~api ]; then - rm -rf %{_localstatedir}/~api - fi - - if [ -f %{_sysconfdir}/ossec-init.conf ]; then - # Import the variables from ossec-init.conf file - . %{_sysconfdir}/ossec-init.conf - else - # Ask wazuh-control the version - VERSION=$(%{_localstatedir}/bin/wazuh-control info -v) - fi - - # Get the major and minor version - MAJOR=$(echo $VERSION | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo $VERSION | cut -d. -f2) - - # Delete uncompatible DBs versions - if [ $MAJOR = 3 ] && [ $MINOR -lt 7 ]; then - rm -f %{_localstatedir}/queue/db/*.db* - rm -f %{_localstatedir}/queue/db/.template.db - fi - - # Delete 3.X Wazuh API service - if [ "$MAJOR" = "3" ] && [ -d %{_localstatedir}/api ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 ; then - systemctl stop wazuh-api.service > /dev/null 2>&1 - systemctl disable wazuh-api.service > /dev/null 2>&1 - rm -f /etc/systemd/system/wazuh-api.service - elif command -v service > /dev/null 2>&1 && command -v chkconfig > /dev/null 2>&1; then - service wazuh-api stop > /dev/null 2>&1 - chkconfig wazuh-api off > /dev/null 2>&1 - chkconfig --del wazuh-api > /dev/null 2>&1 - rm -f /etc/rc.d/init.d/wazuh-api || true - fi - fi -fi - -%post - -echo "VERSION=\"$(%{_localstatedir}/bin/wazuh-control info -v)\"" > /etc/ossec-init.conf - -# Upgrade install code block -if [ $1 = 2 ]; then - if [ -d %{_localstatedir}/logs/ossec ]; then - rm -rf %{_localstatedir}/logs/wazuh - cp -rp %{_localstatedir}/logs/ossec %{_localstatedir}/logs/wazuh - fi - - if [ -d %{_localstatedir}/queue/ossec ]; then - rm -rf %{_localstatedir}/queue/sockets - cp -rp %{_localstatedir}/queue/ossec %{_localstatedir}/queue/sockets - fi - - # Ensure that the 'Indexer' is configured - CONFIG_INDEXER_TEMPLATE="%{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/generic/wodle-indexer.manager.template" - . %{_localstatedir}/packages_files/manager_installation_scripts/src/init/update-indexer.sh - updateIndexerTemplate "%{_localstatedir}/etc/ossec.conf" $CONFIG_INDEXER_TEMPLATE -fi - -%define _vdfilename vd_1.0.0_vd_4.8.0.tar.xz - -# Fresh install code block -if [ $1 = 1 ]; then - - . %{_localstatedir}/packages_files/manager_installation_scripts/src/init/dist-detect.sh - - # Generating ossec.conf file - %{_localstatedir}/packages_files/manager_installation_scripts/gen_ossec.sh conf manager ${DIST_NAME} ${DIST_VER}.${DIST_SUBVER} %{_localstatedir} > %{_localstatedir}/etc/ossec.conf - - touch %{_localstatedir}/logs/active-responses.log - touch %{_localstatedir}/logs/integrations.log - chown wazuh:wazuh %{_localstatedir}/logs/active-responses.log - chown wazuh:wazuh %{_localstatedir}/logs/integrations.log - chmod 0660 %{_localstatedir}/logs/active-responses.log - chmod 0640 %{_localstatedir}/logs/integrations.log - - # Add default local_files to ossec.conf - %{_localstatedir}/packages_files/manager_installation_scripts/add_localfiles.sh %{_localstatedir} >> %{_localstatedir}/etc/ossec.conf -fi - -if [[ -d /run/systemd/system ]]; then - rm -f %{_initrddir}/wazuh-manager -fi - -# Generation auto-signed certificate if not exists -if [ ! -f "%{_localstatedir}/etc/sslmanager.key" ] && [ ! -f "%{_localstatedir}/etc/sslmanager.cert" ]; then - %{_localstatedir}/bin/wazuh-authd -C 365 -B 2048 -S "/C=US/ST=California/CN=Wazuh/" -K %{_localstatedir}/etc/sslmanager.key -X %{_localstatedir}/etc/sslmanager.cert 2>/dev/null - chmod 640 %{_localstatedir}/etc/sslmanager.key - chmod 640 %{_localstatedir}/etc/sslmanager.cert -fi - -rm -f %{_localstatedir}/etc/shared/ar.conf >/dev/null 2>&1 -rm -f %{_localstatedir}/etc/shared/merged.mg >/dev/null 2>&1 - -# Set merged.mg permissions to new ones -find %{_localstatedir}/etc/shared/ -type f -name 'merged.mg' -exec chmod 644 {} \; - -#AlmaLinux -if [ -r "/etc/almalinux-release" ]; then - DIST_NAME=almalinux - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/almalinux-release` -#Rocky -elif [ -r "/etc/rocky-release" ]; then - DIST_NAME=rocky - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/rocky-release` -# CentOS -elif [ -r "/etc/centos-release" ]; then - if grep -q "AlmaLinux" /etc/centos-release; then - DIST_NAME=almalinux - elif grep -q "Rocky" /etc/centos-release; then - DIST_NAME=almalinux - else - DIST_NAME="centos" - fi - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/centos-release` -# Fedora -elif [ -r "/etc/fedora-release" ]; then - DIST_NAME="fedora" - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/fedora-release` -# Oracle Linux -elif [ -r "/etc/oracle-release" ]; then - DIST_NAME="ol" - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/oracle-release` -# RedHat -elif [ -r "/etc/redhat-release" ]; then - if grep -q "AlmaLinux" /etc/redhat-release; then - DIST_NAME=almalinux - elif grep -q "Rocky" /etc/redhat-release; then - DIST_NAME=almalinux - elif grep -q "CentOS" /etc/redhat-release; then - DIST_NAME="centos" - else - DIST_NAME="rhel" - fi - DIST_VER=`sed -rn 's/.* ([0-9]{1,2})\.*[0-9]{0,2}.*/\1/p' /etc/redhat-release` -# SUSE -elif [ -r "/etc/SuSE-release" ]; then - if grep -q "openSUSE" /etc/SuSE-release; then - DIST_NAME="generic" - DIST_VER="" - else - DIST_NAME="sles" - DIST_VER=`sed -rn 's/.*VERSION = ([0-9]{1,2}).*/\1/p' /etc/SuSE-release` - fi -elif [ -r "/etc/os-release" ]; then - . /etc/os-release - DIST_NAME=$ID - DIST_VER=$(echo $VERSION_ID | sed -rn 's/[^0-9]*([0-9]+).*/\1/p') - if [ "X$DIST_VER" = "X" ]; then - DIST_VER="0" - fi - if [ "$DIST_NAME" = "amzn" ] && [ "$DIST_VER" != "2" ] && [ "$DIST_VER" != "2023" ]; then - DIST_VER="1" - fi - DIST_SUBVER=$(echo $VERSION_ID | sed -rn 's/[^0-9]*[0-9]+\.([0-9]+).*/\1/p') - if [ "X$DIST_SUBVER" = "X" ]; then - DIST_SUBVER="0" - fi -else - DIST_NAME="generic" - DIST_VER="" -fi - -SCA_DIR="${DIST_NAME}/${DIST_VER}" -SCA_BASE_DIR="%{_localstatedir}/tmp/sca-%{version}-%{release}-tmp" -mkdir -p %{_localstatedir}/ruleset/sca - -SCA_TMP_DIR="${SCA_BASE_DIR}/${SCA_DIR}" - -# Install the configuration files needed for this hosts -if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" -elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" -else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" -fi - -SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" - -if [ -r ${SCA_TMP_FILE} ] && [ -r ${SCA_BASE_DIR}/generic/sca.manager.files ]; then - - rm -f %{_localstatedir}/ruleset/sca/* || true - - for sca_file in $(cat ${SCA_TMP_FILE}); do - if [ -f ${SCA_BASE_DIR}/${sca_file} ]; then - mv ${SCA_BASE_DIR}/${sca_file} %{_localstatedir}/ruleset/sca - fi - done - - for sca_file in $(cat ${SCA_BASE_DIR}/generic/sca.manager.files); do - filename=$(basename ${sca_file}) - if [ -f "${SCA_BASE_DIR}/${sca_file}" ] && [ ! -f "%{_localstatedir}/ruleset/sca/${filename}" ]; then - mv ${SCA_BASE_DIR}/${sca_file} %{_localstatedir}/ruleset/sca/${filename}.disabled - fi - done -fi - -# Fix sca permissions, group and owner -chmod 640 %{_localstatedir}/ruleset/sca/* -chown root:wazuh %{_localstatedir}/ruleset/sca/* -# Delete the temporary directory -rm -rf ${SCA_BASE_DIR} - -# Add the SELinux policy -if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - semodule -i %{_localstatedir}/var/selinux/wazuh.pp - semodule -e wazuh - fi -fi - -# Delete the installation files used to configure the manager -rm -rf %{_localstatedir}/packages_files - -# Remove unnecessary files from default group -rm -f %{_localstatedir}/etc/shared/default/*.rpmnew - -# Remove old ossec user and group if exists and change ownwership of files - -if getent group ossec > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user root -print0 | xargs -0 chown root:wazuh > /dev/null 2>&1 || true - if getent passwd ossec > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossec -print0 | xargs -0 chown wazuh:wazuh > /dev/null 2>&1 || true - userdel ossec > /dev/null 2>&1 - fi - if getent passwd ossecm > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossecm -print0 | xargs -0 chown wazuh:wazuh > /dev/null 2>&1 || true - userdel ossecm > /dev/null 2>&1 - fi - if getent passwd ossecr > /dev/null 2>&1; then - find %{_localstatedir}/ -group ossec -user ossecr -print0 | xargs -0 chown wazuh:wazuh > /dev/null 2>&1 || true - userdel ossecr > /dev/null 2>&1 - fi - if getent group ossec > /dev/null 2>&1; then - groupdel ossec > /dev/null 2>&1 - fi -fi - -%preun - -if [ $1 = 0 ]; then - - # Stop the services before uninstall the package - # Check for systemd - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-manager > /dev/null 2>&1; then - systemctl stop wazuh-manager.service > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-manager status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-manager stop > /dev/null 2>&1 - fi - %{_localstatedir}/bin/wazuh-control stop > /dev/null 2>&1 - - # Remove the SELinux policy - if command -v getenforce > /dev/null 2>&1 && command -v semodule > /dev/null 2>&1; then - if [ $(getenforce) != "Disabled" ]; then - if (semodule -l | grep wazuh > /dev/null); then - semodule -r wazuh > /dev/null - fi - fi - fi - - # Remove SCA files - rm -f %{_localstatedir}/ruleset/sca/* -fi - -%postun - -# If the package is been uninstalled -if [ $1 = 0 ];then - # Remove the wazuh user if it exists - if getent passwd wazuh > /dev/null 2>&1; then - userdel wazuh >/dev/null 2>&1 - fi - # Remove the wazuh group if it exists - if command -v getent > /dev/null 2>&1 && getent group wazuh > /dev/null 2>&1; then - groupdel wazuh >/dev/null 2>&1 - elif getent group wazuh > /dev/null 2>&1; then - groupdel wazuh >/dev/null 2>&1 - fi - - # Backup agents centralized configuration (etc/shared) - if [ -d %{_localstatedir}/etc/shared ]; then - rm -rf %{_localstatedir}/etc/shared.save/ - mv %{_localstatedir}/etc/shared/ %{_localstatedir}/etc/shared.save/ - fi - - # Backup registration service certificates (sslmanager.cert,sslmanager.key) - if [ -f %{_localstatedir}/etc/sslmanager.cert ]; then - mv %{_localstatedir}/etc/sslmanager.cert %{_localstatedir}/etc/sslmanager.cert.save - fi - if [ -f %{_localstatedir}/etc/sslmanager.key ]; then - mv %{_localstatedir}/etc/sslmanager.key %{_localstatedir}/etc/sslmanager.key.save - fi - - # Remove lingering folders and files - rm -rf %{_localstatedir}/queue/ - rm -rf %{_localstatedir}/framework/ - rm -rf %{_localstatedir}/api/ - rm -rf %{_localstatedir}/stats/ - rm -rf %{_localstatedir}/var/ - rm -rf %{_localstatedir}/bin/ - rm -rf %{_localstatedir}/logs/ - rm -rf %{_localstatedir}/ruleset/ - rm -rf %{_localstatedir}/tmp -fi - -# posttrans code is the last thing executed in a install/upgrade -%posttrans -if [ -f %{_sysconfdir}/systemd/system/wazuh-manager.service ]; then - rm -rf %{_sysconfdir}/systemd/system/wazuh-manager.service - systemctl daemon-reload > /dev/null 2>&1 -fi - -if [ -f %{_localstatedir}/tmp/wazuh.restart ]; then - rm -f %{_localstatedir}/tmp/wazuh.restart - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 ; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-manager.service > /dev/null 2>&1 - elif command -v service > /dev/null 2>&1 ; then - service wazuh-manager restart > /dev/null 2>&1 - else - %{_localstatedir}/bin/wazuh-control restart > /dev/null 2>&1 - fi -fi - -if [ -d %{_localstatedir}/logs/ossec ]; then - rm -rf %{_localstatedir}/logs/ossec/ -fi - -if [ -d %{_localstatedir}/queue/ossec ]; then - rm -rf %{_localstatedir}/queue/ossec/ -fi - -if [ -f %{_sysconfdir}/ossec-init.conf ]; then - rm -f %{_sysconfdir}/ossec-init.conf - rm -f %{_localstatedir}/etc/ossec-init.conf -fi - -# Remove groups backup files -rm -rf %{_localstatedir}/backup/groups - -%triggerin -- glibc -[ -r %{_sysconfdir}/localtime ] && cp -fpL %{_sysconfdir}/localtime %{_localstatedir}/etc - chown root:wazuh %{_localstatedir}/etc/localtime - chmod 0640 %{_localstatedir}/etc/localtime - -%clean -rm -fr %{buildroot} - -%files -%defattr(-,root,wazuh) -%config(missingok) %{_initrddir}/wazuh-manager -%attr(640, root, wazuh) %verify(not md5 size mtime) %ghost %{_sysconfdir}/ossec-init.conf -/usr/lib/systemd/system/wazuh-manager.service -%dir %attr(750, root, wazuh) %{_localstatedir} -%attr(750, root, wazuh) %{_localstatedir}/agentless -%dir %attr(750, root, wazuh) %{_localstatedir}/active-response -%dir %attr(750, root, wazuh) %{_localstatedir}/active-response/bin -%attr(750, root, wazuh) %{_localstatedir}/active-response/bin/* -%dir %attr(750, root, wazuh) %{_localstatedir}/api -%dir %attr(770, root, wazuh) %{_localstatedir}/api/configuration -%attr(660, root, wazuh) %config(noreplace) %{_localstatedir}/api/configuration/api.yaml -%dir %attr(770, root, wazuh) %{_localstatedir}/api/configuration/security -%dir %attr(770, root, wazuh) %{_localstatedir}/api/configuration/ssl -%dir %attr(750, root, wazuh) %{_localstatedir}/api/scripts -%attr(640, root, wazuh) %{_localstatedir}/api/scripts/*.py -%dir %attr(750, root, wazuh) %{_localstatedir}/backup -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/backup/db -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/backup/agents -%dir %attr(750, root, wazuh) %{_localstatedir}/backup/shared -%dir %attr(750, root, wazuh) %{_localstatedir}/bin -%attr(750, root, root) %{_localstatedir}/bin/agent_control -%attr(750, root, wazuh) %{_localstatedir}/bin/agent_groups -%attr(750, root, wazuh) %{_localstatedir}/bin/agent_upgrade -%attr(750, root, root) %{_localstatedir}/bin/clear_stats -%attr(750, root, wazuh) %{_localstatedir}/bin/cluster_control -%attr(750, root, root) %{_localstatedir}/bin/manage_agents -%attr(750, root, root) %{_localstatedir}/bin/wazuh-agentlessd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-analysisd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-authd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-control -%attr(750, root, root) %{_localstatedir}/bin/wazuh-csyslogd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-dbd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-execd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-integratord -%attr(750, root, root) %{_localstatedir}/bin/wazuh-logcollector -%attr(750, root, root) %{_localstatedir}/bin/wazuh-logtest-legacy -%attr(750, root, wazuh) %{_localstatedir}/bin/wazuh-logtest -%attr(750, root, root) %{_localstatedir}/bin/wazuh-maild -%attr(750, root, root) %{_localstatedir}/bin/wazuh-monitord -%attr(750, root, root) %{_localstatedir}/bin/wazuh-regex -%attr(750, root, root) %{_localstatedir}/bin/wazuh-remoted -%attr(750, root, root) %{_localstatedir}/bin/wazuh-reportd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-syscheckd -%attr(750, root, wazuh) %{_localstatedir}/bin/verify-agent-conf -%attr(750, root, wazuh) %{_localstatedir}/bin/wazuh-apid -%attr(750, root, wazuh) %{_localstatedir}/bin/wazuh-clusterd -%attr(750, root, root) %{_localstatedir}/bin/wazuh-db -%attr(750, root, root) %{_localstatedir}/bin/wazuh-modulesd -%attr(750, root, wazuh) %{_localstatedir}/bin/rbac_control -%attr(750, root, wazuh) %{_localstatedir}/bin/wazuh-keystore -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/etc -%attr(660, root, wazuh) %config(noreplace) %{_localstatedir}/etc/ossec.conf -%attr(640, root, wazuh) %config(noreplace) %{_localstatedir}/etc/client.keys -%attr(640, root, wazuh) %{_localstatedir}/etc/internal_options* -%attr(640, root, wazuh) %config(noreplace) %{_localstatedir}/etc/local_internal_options.conf -%attr(640, root, wazuh) %{_localstatedir}/etc/localtime -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/decoders -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/decoders/local_decoder.xml -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/lists -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/etc/lists/amazon -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/lists/amazon/* -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/lists/audit-keys -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/lists/security-eventchannel -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/shared -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/etc/shared/default -%attr(660, wazuh, wazuh) %{_localstatedir}/etc/shared/agent-template.conf -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/shared/default/* -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/rootcheck -%attr(660, root, wazuh) %{_localstatedir}/etc/rootcheck/*.txt -%dir %attr(770, root, wazuh) %{_localstatedir}/etc/rules -%attr(660, wazuh, wazuh) %config(noreplace) %{_localstatedir}/etc/rules/local_rules.xml -%dir %attr(750, root, wazuh) %{_localstatedir}/framework -%dir %attr(750, root, wazuh) %{_localstatedir}/framework/python -%{_localstatedir}/framework/python/* -%dir %attr(750, root, wazuh) %{_localstatedir}/framework/scripts -%attr(640, root, wazuh) %{_localstatedir}/framework/scripts/*.py -%dir %attr(750, root, wazuh) %{_localstatedir}/framework/wazuh -%attr(640, root, wazuh) %{_localstatedir}/framework/wazuh/*.py -%dir %attr(750, root, wazuh) %{_localstatedir}/framework/wazuh/core/cluster -%attr(640, root, wazuh) %{_localstatedir}/framework/wazuh/core/cluster/*.py -%attr(640, root, wazuh) %{_localstatedir}/framework/wazuh/core/cluster/*.json -%dir %attr(750, root, wazuh) %{_localstatedir}/framework/wazuh/core/cluster/dapi -%attr(640, root, wazuh) %{_localstatedir}/framework/wazuh/core/cluster/dapi/*.py -%dir %attr(750, root, wazuh) %{_localstatedir}/integrations -%attr(750, root, wazuh) %{_localstatedir}/integrations/* -%dir %attr(750, root, wazuh) %{_localstatedir}/lib -%attr(750, root, wazuh) %{_localstatedir}/lib/libwazuhext.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libwazuhshared.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libdbsync.so -%attr(750, root, wazuh) %{_localstatedir}/lib/librsync.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libsyscollector.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libsysinfo.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libjemalloc.so.2 -%attr(750, root, wazuh) %{_localstatedir}/lib/libstdc++.so.6 -%attr(750, root, wazuh) %{_localstatedir}/lib/libgcc_s.so.1 -%attr(750, root, wazuh) %{_localstatedir}/lib/libfimdb.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libcontent_manager.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libindexer_connector.so -%attr(750, root, wazuh) %{_localstatedir}/lib/librocksdb.so.8 -%attr(750, root, wazuh) %{_localstatedir}/lib/librouter.so -%attr(750, root, wazuh) %{_localstatedir}/lib/libvulnerability_scanner.so -%{_localstatedir}/lib/libpython3.10.so.1.0 -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/logs -%attr(660, wazuh, wazuh) %ghost %{_localstatedir}/logs/active-responses.log -%attr(660, wazuh, wazuh) %ghost %{_localstatedir}/logs/api.log -%attr(640, wazuh, wazuh) %ghost %{_localstatedir}/logs/integrations.log -%attr(660, wazuh, wazuh) %ghost %{_localstatedir}/logs/ossec.log -%attr(660, wazuh, wazuh) %ghost %{_localstatedir}/logs/ossec.json -%dir %attr(440, root, wazuh) %{_localstatedir}/templates -%attr(0440, root, wazuh) %{_localstatedir}/templates/vd_states_template.json -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/api -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/archives -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/alerts -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/cluster -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/firewall -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/logs/wazuh -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/add_localfiles.sh -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/gen_ossec.sh -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/src/ -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/src/REVISION -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/src/VERSION -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/src/init/ -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/src/init/* -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/generic -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/generic/* -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/centos -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/centos/* -%dir %attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/rhel -%attr(750, root, root) %config(missingok) %{_localstatedir}/packages_files/manager_installation_scripts/etc/templates/config/rhel/* -%attr(750, wazuh, wazuh) %{_localstatedir}/tmp/%{_vdfilename} -%dir %attr(750, root, wazuh) %{_localstatedir}/queue -%attr(600, root, wazuh) %ghost %{_localstatedir}/queue/agents-timestamp -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/agentless -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/alerts -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/cluster -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/db -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/diff -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/fim -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/fim/db -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/syscollector -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/syscollector/db -%attr(640, root, wazuh) %{_localstatedir}/queue/syscollector/norm_config.json -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/fts -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/rids -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/tasks -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/sockets -%dir %attr(660, root, wazuh) %{_localstatedir}/queue/vd -%dir %attr(660, root, wazuh) %{_localstatedir}/queue/indexer -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/queue/router -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/logcollector -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/queue/keystore -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset/sca -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset/decoders -%attr(640, root, wazuh) %{_localstatedir}/ruleset/decoders/* -%dir %attr(750, root, wazuh) %{_localstatedir}/ruleset/rules -%attr(640, root, wazuh) %{_localstatedir}/ruleset/rules/* -%dir %attr(770, root, wazuh) %{_localstatedir}/.ssh -%dir %attr(750, wazuh, wazuh) %{_localstatedir}/stats -%dir %attr(1770, root, wazuh) %{_localstatedir}/tmp -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/applications -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/applications/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/generic/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/mongodb -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/mongodb/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/nginx -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/nginx/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/oracledb -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/oracledb/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/1/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amzn/2023/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/5/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/6/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/7/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/centos/8/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/15 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/15/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/16 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/16/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/17 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/17/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/18 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/18/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/19 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/19/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/20 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/20/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/21 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/21/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/22 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/22/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/23 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/darwin/23/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/debian -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/debian/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ol/9/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/5/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/6/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/7/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/8/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rhel/9/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/11/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/12/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sles/15/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sunos -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/sunos/* -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/sca.files -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/11/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12 -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/suse/12/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ubuntu -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/ubuntu/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amazon -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/amazon/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/fedora/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/windows -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/windows/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/almalinux/* -%dir %attr(750, wazuh, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky -%attr(640, root, wazuh) %config(missingok) %{_localstatedir}/tmp/sca-%{version}-%{release}-tmp/rocky/* -%dir %attr(750, root, wazuh) %{_localstatedir}/var -%dir %attr(770, root, wazuh) %{_localstatedir}/var/db -%attr(660, root, wazuh) %{_localstatedir}/var/db/mitre.db -%dir %attr(770, root, wazuh) %{_localstatedir}/var/download -%dir %attr(770, wazuh, wazuh) %{_localstatedir}/var/multigroups -%dir %attr(770, root, wazuh) %{_localstatedir}/var/run -%dir %attr(770, root, wazuh) %{_localstatedir}/var/selinux -%attr(640, root, wazuh) %{_localstatedir}/var/selinux/* -%dir %attr(770, root, wazuh) %{_localstatedir}/var/upgrade -%dir %attr(770, root, wazuh) %{_localstatedir}/var/wodles -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles -%attr(750,root, wazuh) %{_localstatedir}/wodles/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/aws -%attr(750, root, wazuh) %{_localstatedir}/wodles/aws/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/azure -%attr(750, root, wazuh) %{_localstatedir}/wodles/azure/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/docker -%attr(750, root, wazuh) %{_localstatedir}/wodles/docker/* -%dir %attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud -%attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud/* - -%changelog -* Thu Aug 15 2024 support - 4.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html -* Thu Jul 18 2024 support - 4.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html -* Wed Jun 12 2024 support - 4.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html -* Thu May 30 2024 support - 4.7.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html -* Thu Apr 25 2024 support - 4.7.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html -* Tue Feb 27 2024 support - 4.7.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html -* Tue Jan 09 2024 support - 4.7.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html -* Wed Dec 13 2023 support - 4.7.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html -* Tue Nov 21 2023 support - 4.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html -* Tue Oct 31 2023 support - 4.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html -* Tue Oct 24 2023 support - 4.5.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html -* Tue Oct 10 2023 support - 4.5.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html -* Thu Aug 31 2023 support - 4.5.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html -* Thu Aug 24 2023 support - 4.5.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5.1.html -* Thu Aug 10 2023 support - 4.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html -* Mon Jul 10 2023 support - 4.4.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html -* Tue Jun 13 2023 support - 4.4.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html -* Thu May 25 2023 support - 4.4.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html -* Mon May 08 2023 support - 4.4.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html -* Mon Apr 24 2023 support - 4.3.11 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3.11.html -* Mon Apr 17 2023 support - 4.4.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html -* Wed Jan 18 2023 support - 4.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html -* Thu Nov 10 2022 support - 4.3.10 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html -* Mon Oct 03 2022 support - 4.3.9 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html -* Wed Sep 21 2022 support - 3.13.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-6.html -* Mon Sep 19 2022 support - 4.3.8 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html -* Wed Aug 24 2022 support - 3.13.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-5.html -* Mon Aug 08 2022 support - 4.3.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html -* Thu Jul 07 2022 support - 4.3.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html -* Wed Jun 29 2022 support - 4.3.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html -* Tue Jun 07 2022 support - 4.3.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html -* Tue May 31 2022 support - 4.3.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html -* Mon May 30 2022 support - 4.3.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html -* Mon May 30 2022 support - 3.13.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-4.html -* Sun May 29 2022 support - 4.2.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-7.html -* Wed May 18 2022 support - 4.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html -* Thu May 05 2022 support - 4.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html -* Fri Mar 25 2022 support - 4.2.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-6.html -* Mon Nov 15 2021 support - 4.2.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-5.html -* Thu Oct 21 2021 support - 4.2.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-4.html -* Wed Oct 06 2021 support - 4.2.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-3.html -* Tue Sep 28 2021 support - 4.2.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-2.html -* Sat Sep 25 2021 support - 4.2.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-1.html -* Mon Apr 26 2021 support - 4.2.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-2-0.html -* Sat Apr 24 2021 support - 3.13.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-3.html -* Thu Apr 22 2021 support - 4.1.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-5.html -* Mon Mar 29 2021 support - 4.1.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-4.html -* Sat Mar 20 2021 support - 4.1.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-3.html -* Mon Mar 08 2021 support - 4.1.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-2.html -* Fri Mar 05 2021 support - 4.1.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-1.html -* Tue Jan 19 2021 support - 4.1.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-1-0.html -* Mon Nov 30 2020 support - 4.0.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-3.html -* Mon Nov 23 2020 support - 4.0.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-2.html -* Sat Oct 31 2020 support - 4.0.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-1.html -* Mon Oct 19 2020 support - 4.0.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-0-0.html -* Fri Aug 21 2020 support - 3.13.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-2.html -* Tue Jul 14 2020 support - 3.13.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-1.html -* Mon Jun 29 2020 support - 3.13.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-13-0.html -* Wed May 13 2020 support - 3.12.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-3.html -* Thu Apr 9 2020 support - 3.12.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-2.html -* Wed Apr 8 2020 support - 3.12.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-1.html -* Wed Mar 25 2020 support - 3.12.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-12-0.html -* Mon Feb 24 2020 support - 3.11.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-4.html -* Wed Jan 22 2020 support - 3.11.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-3.html -* Tue Jan 7 2020 support - 3.11.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-2.html -* Thu Dec 26 2019 support - 3.11.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-1.html -* Mon Oct 7 2019 support - 3.11.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-11-0.html -* Mon Sep 23 2019 support - 3.10.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-2.html -* Thu Sep 19 2019 support - 3.10.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-1.html -* Mon Aug 26 2019 support - 3.10.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-10-0.html -* Thu Aug 8 2019 support - 3.9.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-5.html -* Fri Jul 12 2019 support - 3.9.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-4.html -* Tue Jul 02 2019 support - 3.9.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-3.html -* Tue Jun 11 2019 support - 3.9.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-2.html -* Sat Jun 01 2019 support - 3.9.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-1.html -* Mon Feb 25 2019 support - 3.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-9-0.html -* Wed Jan 30 2019 support - 3.8.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-2.html -* Thu Jan 24 2019 support - 3.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-1.html -* Fri Jan 18 2019 support - 3.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-8-0.html -* Wed Nov 7 2018 support - 3.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-7-0.html -* Mon Sep 10 2018 support - 3.6.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-6-1.html -* Fri Sep 7 2018 support - 3.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-6-0.html -* Wed Jul 25 2018 support - 3.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-5-0.html -* Wed Jul 11 2018 support - 3.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-4-0.html -* Mon Jun 18 2018 support - 3.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-3-1.html -* Mon Jun 11 2018 support - 3.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-3-0.html -* Wed May 30 2018 support - 3.2.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-4.html -* Thu May 10 2018 support - 3.2.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-3.html -* Mon Apr 09 2018 support - 3.2.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-2.html -* Wed Feb 21 2018 support - 3.2.1 -- More info: https://documentation.wazuh.com/current/release-notes/rerlease-3-2-1.html -* Wed Feb 07 2018 support - 3.2.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-2-0.html -* Thu Dec 21 2017 support - 3.1.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-1-0.html -* Mon Nov 06 2017 support - 3.0.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-3-0-0.html -* Tue Jun 06 2017 support - 2.0.1 -- Changed random data generator for a secure OS-provided generator. -- Changed Windows installer file name (depending on version). -- Linux distro detection using standard os-release file. -- Changed some URLs to documentation. -- Disable synchronization with SQLite databases for Syscheck by default. -- Minor changes at Rootcheck formatter for JSON alerts. -- Added debugging messages to Integrator logs. -- Show agent ID when possible on logs about incorrectly formatted messages. -- Use default maximum inotify event queue size. -- Show remote IP on encoding format errors when unencrypting messages. -- Fix permissions in agent-info folder -- Fix permissions in rids folder. -* Fri Apr 21 2017 Jose Luis Ruiz - 2.0 -- Changed random data generator for a secure OS-provided generator. -- Changed Windows installer file name (depending on version). -- Linux distro detection using standard os-release file. -- Changed some URLs to documentation. -- Disable synchronization with SQLite databases for Syscheck by default. -- Minor changes at Rootcheck formatter for JSON alerts. -- Added debugging messages to Integrator logs. -- Show agent ID when possible on logs about incorrectly formatted messages. -- Use default maximum inotify event queue size. -- Show remote IP on encoding format errors when unencrypting messages. -- Fixed resource leaks at rules configuration parsing. -- Fixed memory leaks at rules parser. -- Fixed memory leaks at XML decoders parser. -- Fixed TOCTOU condition when removing directories recursively. -- Fixed insecure temporary file creation for old POSIX specifications. -- Fixed missing agentless devices identification at JSON alerts. -- Fixed FIM timestamp and file name issue at SQLite database. -- Fixed cryptographic context acquirement on Windows agents. -- Fixed debug mode for Analysisd. -- Fixed bad exclusion of BTRFS filesystem by Rootcheck. -- Fixed compile errors on macOS. -- Fixed option -V for Integrator. -- Exclude symbolic links to directories when sending FIM diffs (by Stephan Joerrens). -- Fixed daemon list for service reloading at ossec-control. -- Fixed socket waiting issue on Windows agents. -- Fixed PCI_DSS definitions grouping issue at Rootcheck controls. diff --git a/rpms/build.sh b/rpms/build.sh deleted file mode 100755 index d05da93dcb..0000000000 --- a/rpms/build.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex -# Optional package release -build_target=$1 -wazuh_branch=$2 -architecture_target=$3 -threads=$4 -package_release=$5 -directory_base=$6 -debug=$7 -checksum=$8 -wazuh_packages_branch=$9 -use_local_specs=${10} -src=${11} -legacy=${12} -local_source_code=${13} -future=${14} -wazuh_version="" -rpmbuild="rpmbuild" - -disable_debug_flag='%debug_package %{nil}' - -if [ -z "${package_release}" ]; then - package_release="1" -fi - -if [ "${debug}" = "no" ]; then - echo ${disable_debug_flag} > /etc/rpm/macros -fi - -if [ ${build_target} = "api" ]; then - if [ "${local_source_code}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh-api/tarball/${wazuh_branch} | tar zx - fi - wazuh_version="$(grep version wazuh*/package.json | cut -d '"' -f 4)" -else - if [ "${local_source_code}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh/tarball/${wazuh_branch} | tar zx - fi - wazuh_version="$(cat wazuh*/src/VERSION | cut -d 'v' -f 2)" -fi - -# Build directories -build_dir=/build_wazuh -rpm_build_dir=${build_dir}/rpmbuild -file_name="wazuh-${build_target}-${wazuh_version}-${package_release}" -rpm_file="${file_name}.${architecture_target}.rpm" -src_file="${file_name}.src.rpm" -pkg_path="${rpm_build_dir}/RPMS/${architecture_target}" -src_path="${rpm_build_dir}/SRPMS" -extract_path="${pkg_path}" -ssl_flag="" -mkdir -p ${rpm_build_dir}/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} - -# Prepare the sources directory to build the source tar.gz -package_name=wazuh-${build_target}-${wazuh_version} -cp -R wazuh-* ${build_dir}/${package_name} - -# Including spec file -if [ "${use_local_specs}" = "no" ]; then - specs_path="/downloaded_tmp_specs" - mkdir -p "${specs_path}" - if [ "${legacy}" = "yes" ]; then - ssl_flag+="-k" - fi - curl -L "https://raw.githubusercontent.com/wazuh/wazuh-packages/${wazuh_packages_branch}/rpms/SPECS/wazuh-${build_target}.spec" -o "${specs_path}/wazuh-${build_target}.spec" ${ssl_flag} -else - specs_path="/specs" -fi - -if [[ "${future}" == "yes" ]]; then - # MODIFY VARIABLES - base_version=$wazuh_version - MAJOR=$(echo $base_version | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo $base_version | cut -d. -f2) - wazuh_version="${MAJOR}.30.0" - file_name="wazuh-${build_target}-${wazuh_version}-${package_release}" - old_name="wazuh-${build_target}-${base_version}-${package_release}" - package_name=wazuh-${build_target}-${wazuh_version} - old_package_name=wazuh-${build_target}-${base_version} - - # PREPARE FUTURE SPECS AND SOURCES - mv "${build_dir}/${old_package_name}" "${build_dir}/${package_name}" - find "${build_dir}/${package_name}" "${specs_path}/" \( -name "*VERSION*" -o -name "*.spec" \) -exec sed -i "s/${base_version}/${wazuh_version}/g" {} \; - sed -i "s/\$(VERSION)/${MAJOR}.${MINOR}/g" "${build_dir}/${package_name}/src/Makefile" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${package_name}/src/init/wazuh-server.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${package_name}/src/init/wazuh-client.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${build_dir}/${package_name}/src/init/wazuh-local.sh" -fi - -cp ${specs_path}/wazuh-${build_target}.spec ${rpm_build_dir}/SPECS/${package_name}.spec - -# Generating source tar.gz -cd ${build_dir} && tar czf "${rpm_build_dir}/SOURCES/${package_name}.tar.gz" "${package_name}" - -if [ "${architecture_target}" = "i386" ] || [ "${architecture_target}" = "armv7hl" ]; then - linux="linux32" -fi - -if [ "${legacy}" = "no" ]; then - echo "%_source_filedigest_algorithm 8" >> /root/.rpmmacros - echo "%_binary_filedigest_algorithm 8" >> /root/.rpmmacros - if [ "${build_target}" = "agent" ]; then - echo " %rhel 6" >> /root/.rpmmacros - echo " %centos 6" >> /root/.rpmmacros - echo " %centos_ver 6" >> /root/.rpmmacros - echo " %dist .el6" >> /root/.rpmmacros - echo " %el6 1" >> /root/.rpmmacros - elif [ "${build_target}" = "manager" ]; then - echo " %rhel 7" >> /root/.rpmmacros - echo " %centos 7" >> /root/.rpmmacros - echo " %centos_ver 7" >> /root/.rpmmacros - echo " %dist .el7" >> /root/.rpmmacros - echo " %el7 1" >> /root/.rpmmacros - fi - rpmbuild="/usr/local/bin/rpmbuild" -fi - -# Building RPM -$linux $rpmbuild --define "_sysconfdir /etc" --define "_topdir ${rpm_build_dir}" \ - --define "_threads ${threads}" --define "_release ${package_release}" \ - --define "_localstatedir ${directory_base}" --define "_debugenabled ${debug}" \ - --target ${architecture_target} -ba ${rpm_build_dir}/SPECS/${package_name}.spec - -if [[ "${checksum}" == "yes" ]]; then - cd ${pkg_path} && sha512sum ${rpm_file} > /var/local/checksum/${rpm_file}.sha512 - if [[ "${src}" == "yes" ]]; then - cd ${src_path} && sha512sum ${src_file} > /var/local/checksum/${src_file}.sha512 - fi -fi - -if [[ "${src}" == "yes" ]]; then - extract_path="${rpm_build_dir}" -fi - -find ${extract_path} -maxdepth 3 -type f -name "${file_name}*" -exec mv {} /var/local/wazuh \; diff --git a/rpms/generate_rpm_package.sh b/rpms/generate_rpm_package.sh deleted file mode 100755 index b2c3ee8f36..0000000000 --- a/rpms/generate_rpm_package.sh +++ /dev/null @@ -1,369 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CURRENT_PATH="$( cd $(dirname $0) ; pwd -P )" -ARCHITECTURE="x86_64" -LEGACY="no" -OUTDIR="${CURRENT_PATH}/output/" -LOCAL_SPECS="${CURRENT_PATH}/SPECS/" -BRANCH="master" -REVISION="1" -TARGET="" -JOBS="2" -DEBUG="no" -BUILD_DOCKER="yes" -DOCKER_TAG="latest" -USER_PATH="no" -SRC="no" -RPM_MANAGER_AARCH64_BUILDER="rpm_manager_builder_aarch64" -RPM_MANAGER_X86_BUILDER="rpm_manager_builder_x86" -RPM_MANAGER_PPC64LE_BUILDER="rpm_manager_builder_ppc64le" -RPM_AGENT_AARCH64_BUILDER="rpm_agent_builder_aarch64" -RPM_AGENT_ARMV7HL_BUILDER="rpm_agent_builder_armv7hl" -RPM_AGENT_X86_BUILDER="rpm_agent_builder_x86" -RPM_AGENT_I386_BUILDER="rpm_agent_builder_i386" -RPM_AGENT_PPC64LE_BUILDER="rpm_agent_builder_ppc64le" -LEGACY_RPM_X86_BUILDER="rpm_legacy_builder_x86" -LEGACY_RPM_I386_BUILDER="rpm_legacy_builder_i386" -RPM_AGENT_X86_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/6/x86_64" -RPM_AGENT_I386_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/6/i386" -RPM_MANAGER_X86_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/x86_64" -RPM_AGENT_AARCH64_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/aarch64" -RPM_MANAGER_AARCH64_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/aarch64" -RPM_AGENT_ARMV7HL_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/armv7hl" -RPM_AGENT_PPC64LE_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/ppc64le" -RPM_MANAGER_PPC64LE_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/7/ppc64le" -LEGACY_RPM_AGENT_I386_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/5/i386" -LEGACY_RPM_AGENT_X86_BUILDER_DOCKERFILE="${CURRENT_PATH}/CentOS/5/x86_64" -LEGACY_TAR_FILE="${LEGACY_RPM_BUILDER_DOCKERFILE}/i386/centos-5-i386.tar.gz" -TAR_URL="https://packages-dev.wazuh.com/utils/centos-5-i386-build/centos-5-i386.tar.gz" -INSTALLATION_PATH="/var/ossec" -PACKAGES_BRANCH="master" -CHECKSUMDIR="" -CHECKSUM="no" -USE_LOCAL_SPECS="no" -LOCAL_SOURCE_CODE="" -USE_LOCAL_SOURCE_CODE="no" -FUTURE="no" - -trap ctrl_c INT - -download_file() { - URL=$1 - DESTDIR=$2 - if command -v curl > /dev/null 2>&1 ; then - (cd ${DESTDIR} && curl -sO ${URL}) - elif command -v wget > /dev/null 2>&1 ; then - wget ${URL} -P ${DESTDIR} -q - fi -} - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${DOCKERFILE_PATH}/{*.tar.gz,wazuh*} ${DOCKERFILE_PATH}/build.sh ${SOURCES_DIRECTORY} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_rpm() { - CONTAINER_NAME="$1" - DOCKERFILE_PATH="$2" - - # Copy the necessary files - cp ${CURRENT_PATH}/build.sh ${DOCKERFILE_PATH} - - - # Download the legacy tar file if it is needed - if ([[ "${CONTAINER_NAME}" == "${LEGACY_RPM_I386_BUILDER}" ]] || [[ "${CONTAINER_NAME}" == "${LEGACY_RPM_X86_BUILDER}" ]] ) && [ ! -f "${LEGACY_TAR_FILE}" ]; then - download_file ${TAR_URL} ${DOCKERFILE_PATH} - fi - - # Create an optional parameter to share the local source code as a volume - if [ ! -z "${LOCAL_SOURCE_CODE}" ]; then - CUSTOM_CODE_VOL="-v ${LOCAL_SOURCE_CODE}:/wazuh-local-src:Z" - USE_LOCAL_SOURCE_CODE="yes" - fi - - # Build the Docker image - if [[ ${BUILD_DOCKER} == "yes" ]]; then - docker build -t ${CONTAINER_NAME}:${DOCKER_TAG} ${DOCKERFILE_PATH} || return 1 - fi - - # Build the RPM package with a Docker container - docker run -t --rm -v ${OUTDIR}:/var/local/wazuh:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - -v ${LOCAL_SPECS}:/specs:Z \ - ${CUSTOM_CODE_VOL} \ - ${CONTAINER_NAME}:${DOCKER_TAG} ${TARGET} ${BRANCH} ${ARCHITECTURE} \ - ${JOBS} ${REVISION} ${INSTALLATION_PATH} ${DEBUG} \ - ${CHECKSUM} ${PACKAGES_BRANCH} ${USE_LOCAL_SPECS} ${SRC} \ - ${LEGACY} ${USE_LOCAL_SOURCE_CODE} ${FUTURE}|| return 1 - - echo "Package $(ls -Art ${OUTDIR} | tail -n 1) added to ${OUTDIR}." - - return 0 -} - -build() { - - if [[ ${ARCHITECTURE} == "amd64" ]] || [[ ${ARCHITECTURE} == "x86_64" ]]; then - ARCHITECTURE="x86_64" - elif [[ ${ARCHITECTURE} == "arm64" ]] || [[ ${ARCHITECTURE} == "aarch64" ]]; then - ARCHITECTURE="aarch64" - elif [[ ${ARCHITECTURE} == "arm32" ]] || [[ ${ARCHITECTURE} == "armhf" ]] || \ - [[ ${ARCHITECTURE} == "armhfp" ]] || [[ ${ARCHITECTURE} == "armv7hl" ]] ; then - ARCHITECTURE="armv7hl" - fi - - if [[ "${TARGET}" == "manager" ]]; then - - BUILD_NAME="" - FILE_PATH="" - if [[ "${LEGACY}" == "yes" ]]; then - echo "Legacy is only avaliable on 'agent' target." - return 1 - elif [[ "${ARCHITECTURE}" == "x86_64" ]]; then - BUILD_NAME="${RPM_MANAGER_X86_BUILDER}" - FILE_PATH="${RPM_MANAGER_X86_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "ppc64le" ]]; then - BUILD_NAME="${RPM_MANAGER_PPC64LE_BUILDER}" - FILE_PATH="${RPM_MANAGER_PPC64LE_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "aarch64" ]]; then - BUILD_NAME="${RPM_MANAGER_AARCH64_BUILDER}" - FILE_PATH="${RPM_MANAGER_AARCH64_BUILDER_DOCKERFILE}" - else - echo "Invalid architecture '${ARCHITECTURE}' for '${TARGET}'. Choose one of amd64/arm64/ppc64le" - return 1 - fi - build_rpm ${BUILD_NAME} ${FILE_PATH} || return 1 - - elif [[ "${TARGET}" == "agent" ]]; then - - BUILD_NAME="" - FILE_PATH="" - if [[ "${LEGACY}" == "yes" ]]; then - if [[ "${ARCHITECTURE}" == "x86_64" ]]; then - REVISION="${REVISION}.el5" - BUILD_NAME="${LEGACY_RPM_X86_BUILDER}" - FILE_PATH="${LEGACY_RPM_AGENT_X86_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "i386" ]]; then - REVISION="${REVISION}.el5" - BUILD_NAME="${LEGACY_RPM_I386_BUILDER}" - FILE_PATH="${LEGACY_RPM_AGENT_I386_BUILDER_DOCKERFILE}" - else - echo "Legacy is not available on '${ARCHITECTURE}'. Choose one of x86_64/i386" - return 1 - fi - elif [[ "${ARCHITECTURE}" == "x86_64" ]]; then - BUILD_NAME="${RPM_AGENT_X86_BUILDER}" - FILE_PATH="${RPM_AGENT_X86_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "i386" ]]; then - BUILD_NAME="${RPM_AGENT_I386_BUILDER}" - FILE_PATH="${RPM_AGENT_I386_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "ppc64le" ]]; then - BUILD_NAME="${RPM_AGENT_PPC64LE_BUILDER}" - FILE_PATH="${RPM_AGENT_PPC64LE_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "aarch64" ]]; then - BUILD_NAME="${RPM_AGENT_AARCH64_BUILDER}" - FILE_PATH="${RPM_AGENT_AARCH64_BUILDER_DOCKERFILE}" - elif [[ "${ARCHITECTURE}" == "armv7hl" ]]; then - BUILD_NAME="${RPM_AGENT_ARMV7HL_BUILDER}" - FILE_PATH="${RPM_AGENT_ARMV7HL_BUILDER_DOCKERFILE}" - else - echo "Invalid architecture '${ARCHITECTURE}' for '${TARGET}'. Choose one of x86_64/i386/ppc64le/aarch64/armv7hl." - return 1 - fi - build_rpm ${BUILD_NAME} ${FILE_PATH} || return 1 - else - echo "Invalid target. Choose: manager or agent." - return 1 - fi - - return 0 -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch or tag e.g. $BRANCH" - echo " -t, --target [Required] Target package to build [manager/agent]." - echo " -a, --architecture [Optional] Target architecture of the package [x86_64/i386/ppc64le/aarch64/armv7hl]." - echo " -r, --revision [Optional] Package revision that append to version e.g. x.x.x-rev" - echo " -l, --legacy [Optional] Build package for CentOS 5." - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " -j, --jobs [Optional] Number of parallel jobs when compiling." - echo " -p, --path [Optional] Installation path for the package. By default: /var/ossec." - echo " -d, --debug [Optional] Build the binaries with debug symbols and create debuginfo packages. By default: no." - echo " -c, --checksum [Optional] Generate checksum on the desired path (by default, if no path is specified it will be generated on the same directory than the package)." - echo " --dont-build-docker [Optional] Locally built docker image will be used instead of generating a new one." - echo " --tag [Optional] Tag to use with the docker image." - echo " --sources [Optional] Absolute path containing wazuh source code. This option will use local source code instead of downloading it from GitHub." - echo " --packages-branch [Optional] Select Git branch or tag from wazuh-packages repository. e.g ${PACKAGES_BRANCH}" - echo " --dev [Optional] Use the SPECS files stored in the host instead of downloading them from GitHub." - echo " --src [Optional] Generate the source package in the destination directory." - echo " --future [Optional] Build test future package x.30.0 Used for development purposes." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - BUILD="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH="$2" - BUILD="yes" - shift 2 - else - help 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - "-t"|"--target") - if [ -n "$2" ]; then - TARGET="$2" - shift 2 - else - help 1 - fi - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - ARCHITECTURE="$2" - shift 2 - else - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - JOBS="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-p"|"--path") - if [ -n "$2" ]; then - INSTALLATION_PATH="$2" - shift 2 - else - help 1 - fi - ;; - "-l"|"--legacy") - LEGACY="yes" - shift 1 - ;; - "-d"|"--debug") - DEBUG="yes" - shift 1 - ;; - "--dont-build-docker") - BUILD_DOCKER="no" - shift 1 - ;; - "--tag") - if [ -n "$2" ]; then - DOCKER_TAG="$2" - shift 2 - else - help 1 - fi - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - USER_PATH="yes" - shift 2 - else - help 1 - fi - ;; - "--src") - SRC="yes" - shift 1 - ;; - "--packages-branch") - if [ -n "$2" ]; then - PACKAGES_BRANCH="$2" - shift 2 - else - help 1 - fi - ;; - "--sources") - if [ -n "$2" ]; then - LOCAL_SOURCE_CODE="$2" - shift 2 - else - help 1 - fi - ;; - "--dev") - USE_LOCAL_SPECS="yes" - shift 1 - ;; - "--future") - FUTURE="yes" - shift 1 - ;; - *) - help 1 - esac - done - - if [[ "${USER_PATH}" == "no" ]] && [[ "${LEGACY}" == "yes" ]]; then - OUTDIR="${OUTDIR}/5/${ARCHITECTURE}" - fi - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ "$BUILD" != "no" ]]; then - build || clean 1 - fi - - clean 0 -} - -main "$@" diff --git a/stack/dashboard/base/builder.sh b/stack/dashboard/base/builder.sh deleted file mode 100755 index 993221fc77..0000000000 --- a/stack/dashboard/base/builder.sh +++ /dev/null @@ -1,333 +0,0 @@ -#!/bin/bash - -# Wazuh dashboard base builder -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex - -# Script parameters to build the package -architecture="$1" -revision="$2" -future="$3" -repository="$4" -reference="$5" -opensearch_version="2.10.0" -base_dir=/opt/wazuh-dashboard-base - -# ----------------------------------------------------------------------------- -# Set environment -# ----------------------------------------------------------------------------- - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="x64" -fi - -# Including files -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/"${reference}" | tar xz - cp -r ./wazuh*/* /root/ - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) -else - version=$(cat /root/VERSION) -fi -if [ "${future}" = "yes" ];then - version="99.99.0" -fi -wazuh_minor=$(echo ${version} | cut -c1-3) - -# Obtain the Wazuh plugin URL -if [ "${repository}" ];then - valid_url='(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]' - if [[ $repository =~ $valid_url ]];then - url="${repository}" - if ! curl --output /dev/null --silent --head --fail "${url}"; then - echo "The given URL to download the Wazuh plugin zip does not exist: ${url}" - exit 1 - fi - else - url="https://packages-dev.wazuh.com/${repository}/ui/dashboard/wazuh-${version}-${revision}.zip" - fi -else - url="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuh-${version}-${revision}.zip" -fi - -# Set directories -mkdir -p /tmp/output -cd /opt - -# ----------------------------------------------------------------------------- -# Install OpenSeach Dashboards -# ----------------------------------------------------------------------------- - -curl -sL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/"${opensearch_version}"/opensearch-dashboards-"${opensearch_version}"-linux-${architecture}.tar.gz | tar xz - -pip3 install pathfix.py -/usr/bin/pathfix.py -pni "/usr/bin/python3 -s" opensearch-dashboards-"${opensearch_version}" > /dev/null 2>&1 - -# Remove unnecessary files and set up configuration -mv opensearch-dashboards-* "${base_dir}" -cd "${base_dir}" -find -type l -exec rm -rf {} \; -rm -rf ./config/* -cp -r /root/stack/dashboard/base/files/etc ./ - -# ----------------------------------------------------------------------------- -# OpenSeach Dashboards Node fixes -# ----------------------------------------------------------------------------- - -# Add fix to Node variables as Node is not using the NODE_OPTIONS environment variables -sed -i 's/NODE_OPTIONS="$OSD_NODE_OPTS_PREFIX $OSD_NODE_OPTS $NODE_OPTIONS"/NODE_OPTIONS="$OSD_NODE_OPTS_PREFIX $OSD_NODE_OPTS $NODE_OPTIONS"\n/g' ./bin/use_node -sed -i 's/exec "${NODE}"/NODE_ENV=production exec "${NODE}" ${NODE_OPTIONS} /g' ./bin/use_node - -# ----------------------------------------------------------------------------- -# Provision data (SVG, Styles) -# ----------------------------------------------------------------------------- - -# Styles -cp ./etc/custom_welcome/template.js.hbs ./src/legacy/ui/ui_render/bootstrap/template.js.hbs -cp ./etc/custom_welcome/light_theme.style.css ./src/core/server/core_app/assets/legacy_light_theme.css -# SVG -cp ./etc/custom_welcome/Assets/default_branding/*svg ./src/core/server/core_app/assets/logos/ -# Copy Home button -# Copy favicons -cp ./etc/custom_welcome/Assets/Favicons/* ./src/core/server/core_app/assets/favicons/ -cp ./etc/custom_welcome/Assets/Favicons/favicon.ico ./src/core/server/core_app/assets/favicons/favicon.ico -# Copy loaders -cp ./etc/http_service.js ./src/core/server/http/http_service.js -cp ./etc/template.js ./src/core/server/rendering/views/template.js -cp ./etc/styles.js ./src/core/server/rendering/views/styles.js - -# ----------------------------------------------------------------------------- -# Customize OpenSearch Dashboards with Wazuh -# ----------------------------------------------------------------------------- - -# Set v7 theme as default -sed -i "s|value: 'Next (preview)',|value: 'v7',|g" ./src/core/server/ui_settings/settings/theme.js -sed -i "s|defaultValue: 'v8'|defaultValue: 'v7'|g" ./src/core/server/ui_settings/ui_settings_config.js - - -# Replace App Title -sed -i "s|defaultValue: ''|defaultValue: \'Wazuh\'|g" ./src/core/server/opensearch_dashboards_config.js -sed -i "90s|defaultValue: true|defaultValue: false|g" ./src/core/server/opensearch_dashboards_config.js - -# Remove the `home` button from the sidebar menu -sed -i 's|\["EuiHorizontalRule"\],{margin:"none"})),external_osdSharedDeps_React_default.a.createElement(external_osdSharedDeps_ElasticEui_\["EuiFlexItem"\],{grow:false,style:{flexShrink:0}},external_osdSharedDeps_React_default.a.createElement(external_osdSharedDeps_ElasticEui_\["EuiCollapsibleNavGroup"\]|["EuiHorizontalRule"],{margin:"none"})),false\&\&external_osdSharedDeps_React_default.a.createElem(external_osdSharedDeps_ElasticEui_["EuiFlexItem"],{grow:false,style:{flexShrink:0}},external_osdSharedDeps_React_default.a.createElement(external_osdSharedDeps_ElasticEui_["EuiCollapsibleNavGroup"]|' ./src/core/target/public/core.entry.js - -# Remove OpenSearch login default configuration title and subtitle -sed -i 's|Log in to OpenSearch Dashboards||g' ./plugins/securityDashboards/server/index.js -sed -i 's|Log in to OpenSearch Dashboards||g' ./plugins/securityDashboards/target/public/securityDashboards.chunk.5.js -sed -i 's|If you have forgotten your username or password, contact your system administrator.||g' ./plugins/securityDashboards/server/index.js -sed -i 's|If you have forgotten your username or password, contact your system administrator.||g' ./plugins/securityDashboards/target/public/securityDashboards.chunk.5.js - -# Disable first-time pop-up tenant selector -sed -i 's|setShouldShowTenantPopup(shouldShowTenantPopup)|setShouldShowTenantPopup(false)|g' ./plugins/securityDashboards/target/public/securityDashboards.plugin.js - -# Remove the Overview plugin from the OpenSearch Dashboards menu. -# Remove the "updater" property and set the plugin "status" as inaccessible (status:1) -sed -i 's|updater\$:appUpdater\$|status:1|' ./src/plugins/opensearch_dashboards_overview/target/public/opensearchDashboardsOverview.plugin.js - -# Help menu -## Help header - Version -sed -i 's|"core.ui.chrome.headerGlobalNav.helpMenuVersion",defaultMessage:"v {version}"|"core.ui.chrome.headerGlobalNav.helpMenuVersion",defaultMessage:"v'${version}'"|' ./src/core/target/public/core.entry.js -## Help link - OpenSearch Dashboards documentation -### Required changes to detect if dark mode is on -sed -i 's|injectedMetadata.getSurvey()}|injectedMetadata.getSurvey(),darkmode:uiSettings.get("theme:darkMode")}|' ./src/core/target/public/core.entry.js -sed -i 's|surveyLink:survey}|surveyLink:survey,darkmode:observables.darkmode}|' ./src/core/target/public/core.entry.js -sed -i 's|opensearchDashboardsDocLink,surveyLink:surveyLink}|opensearchDashboardsDocLink,surveyLink:surveyLink,darkmode:darkmode}|' ./src/core/target/public/core.entry.js - -### Opensearch Dashboards documentation -sed -i 's|OpenSearch Dashboards documentation|Documentation|' ./src/core/target/public/core.entry.js -sed -i 's|href:opensearchDashboardsDocLink,|href:"https://documentation.wazuh.com/'${wazuh_minor}'", iconType:darkmode?"/ui/logos/icon_dark.svg":"/ui/logos/icon_light.svg",|' ./src/core/target/public/core.entry.js - -## Help link - Ask OpenSearch -sed -i 's|Ask OpenSearch|Ask Wazuh|' ./src/core/target/public/core.entry.js -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://github.com/opensearch-project"|=="https://wazuh.com/community/join-us-on-slack"|' ./src/core/target/public/core.entry.js - -## Help link - Community -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://forum.opensearch.org/"|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://wazuh.com/community/join-us-on-slack"|' ./src/core/target/public/core.entry.js -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://forum.opensearch.org/"|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://wazuh.com/community/join-us-on-slack"|' ./plugins/alertingDashboards/target/public/alertingDashboards.plugin.js -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://forum.opensearch.org/"|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://wazuh.com/community/join-us-on-slack"|' ./plugins/indexManagementDashboards/target/public/indexManagementDashboards.plugin.js -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://forum.opensearch.org/"|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://wazuh.com/community/join-us-on-slack"|' ./plugins/notificationsDashboards/target/public/notificationsDashboards.plugin.js -sed -i 's|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://forum.opensearch.org/"|OPENSEARCH_DASHBOARDS_ASK_OPENSEARCH_LINK="https://wazuh.com/community/join-us-on-slack"|' ./plugins/securityDashboards/target/public/securityDashboards.plugin.js -sed -i 's|Community|Slack channel|' ./src/core/target/public/core.entry.js -sed -i 's|href:helpSupportUrl,|href:"https://wazuh.com/community/join-us-on-slack", iconType:"logoSlack",|' ./src/core/target/public/core.entry.js - -## Help link - Give feedback -sed -i 's|https://survey.opensearch.org|https://github.com/wazuh/|' src/core/server/opensearch_dashboards_config.js -sed -i 's|"Give feedback"|"Projects on Github"|' ./src/core/target/public/core.entry.js -sed -i 's|href:surveyLink,|href:surveyLink, iconType:"logoGithub",|' ./src/core/target/public/core.entry.js - -## Help link - Open an issue in GitHub -sed -i 's|GITHUB_CREATE_ISSUE_LINK="https://github.com/opensearch-project/OpenSearch-Dashboards/issues/new/choose"|GITHUB_CREATE_ISSUE_LINK="https://github.com/wazuh/wazuh/issues/new/choose"|' ./src/core/target/public/core.entry.js -sed -i 's|"Open an issue in GitHub"|"Google group"|' ./src/core/target/public/core.entry.js -sed -i 's|href:GITHUB_CREATE_ISSUE_LINK,target:"_blank",size:"xs",iconType:"logoGithub"|href:"https://groups.google.com/forum/#!forum/wazuh/",target:"_blank",size:"xs",iconType:"/ui/logos/google_groups.svg"|' ./src/core/target/public/core.entry.js - -# Custom logos -## Custom logos - Login logo -sed -i 's|props.chrome.logos.OpenSearch.url|props.http.basePath.prepend("/ui/logos/wazuh_dashboard_login_mark.svg")|g' ./plugins/securityDashboards/target/public/securityDashboards.chunk.5.js - -# Collapse initially the application categories in the side menu -sed -i 's|_storage\$getItem!==void 0?_storage\$getItem:"true"|_storage\$getItem!==void 0?_storage\$getItem:"false"|' ./src/core/target/public/core.entry.js - -# Redirections -## Redirections - Replace the redirections to the home app -app_home='wz-home' -## Redirections - Replace the redirection to `home` in the header logo -sed -i "s'/app/home'/app/${app_home}'g" ./src/core/target/public/core.entry.js -## Redirections - Replace others redirections to `home` -sed -i "s/navigateToApp(\"home\")/navigateToApp(\"${app_home}\")/g" ./src/core/target/public/core.entry.js - -# Define categories -category_explore='{id:"explore",label:"Explore",order:100,euiIconType:"search"}' -category_indexer_management='{id:"management",label:"Indexer management",order:5e3,euiIconType:"managementApp"}' -category_dashboard_management='{id:"wz-category-dashboard-management",label:"Dashboard management",order:6e3,euiIconType:"dashboardApp"}' - -# Add custom categories (explore) to the built-in -sed -i -e "s|DEFAULT_APP_CATEGORIES=Object.freeze({|DEFAULT_APP_CATEGORIES=Object.freeze({explore:${category_explore},|" ./src/core/target/public/core.entry.js - -# Replace management built-in app category -sed -i -e "s|management:{id:\"management\",label:external_osdSharedDeps_OsdI18n_\[\"i18n\"\].translate(\"core.ui.managementNavList.label\",{defaultMessage:\"Management\"}),order:5e3,euiIconType:\"managementApp\"}|management:${category_indexer_management}|" ./src/core/target/public/core.entry.js - -# Replace app category to Discover app -sed -i -e 's|category:core_public_\["DEFAULT_APP_CATEGORIES"\].opensearchDashboards|category:core_public_["DEFAULT_APP_CATEGORIES"].explore|' ./src/plugins/discover/target/public/discover.plugin.js - -# Replace app category to Dashboard app -sed -i -e 's|category:core_public_\["DEFAULT_APP_CATEGORIES"\].opensearchDashboards|category:core_public_["DEFAULT_APP_CATEGORIES"].explore|' ./src/plugins/dashboard/target/public/dashboard.plugin.js - -# Replace app category to Visualize app -sed -i -e 's|category:core_public_\["DEFAULT_APP_CATEGORIES"\].opensearchDashboards|category:core_public_["DEFAULT_APP_CATEGORIES"].explore|' ./src/plugins/visualize/target/public/visualize.plugin.js - -# Replace app category to Reporting app -sed -i -e "s|category:{id:\"opensearch\",label:_i18n.i18n.translate(\"opensearch.reports.categoryName\",{defaultMessage:\"OpenSearch Plugins\"}),order:2e3}|category:${category_explore}|" ./plugins/reportsDashboards/target/public/reportsDashboards.plugin.js - -# Replace app category to Alerting app -sed -i -e "s|category:{id:\"opensearch\",label:\"OpenSearch Plugins\",order:2e3}|category:${category_explore}|" ./plugins/alertingDashboards/target/public/alertingDashboards.plugin.js - -# Replace app category to Maps app -sed -i -e "s|category:{id:\"opensearch\",label:\"OpenSearch Plugins\",order:2e3}|category:${category_explore}|" ./plugins/customImportMapDashboards/target/public/customImportMapDashboards.plugin.js - -# Replace app category to Notifications app -sed -i -e "s|category:DEFAULT_APP_CATEGORIES.management|category:${category_explore}|" ./plugins/notificationsDashboards/target/public/notificationsDashboards.plugin.js - -# Replace app category to Index Management app -sed -i -e "s|category:DEFAULT_APP_CATEGORIES.management|category:${category_indexer_management}|g" ./plugins/indexManagementDashboards/target/public/indexManagementDashboards.plugin.js - -# Replace app category to Dashboard Management app -sed -i -e "s|category:public_\[\"DEFAULT_APP_CATEGORIES\"\].management|category:${category_dashboard_management}|g" ./src/plugins/management/target/public/management.plugin.js - -# Replace app category to Security app -sed -i -e "s|category:DEFAULT_APP_CATEGORIES.management|category:${category_indexer_management}|g" ./plugins/securityDashboards/target/public/securityDashboards.plugin.js - -# Replace app order to Discover app -app_order_discover=1000 -sed -i -e "s|order:1e3|order:${app_order_discover}|g" ./src/plugins/discover/target/public/discover.plugin.js - -# Replace app order to Dashboard app -app_order_dashboard=1010 -sed -i -e "s|order:2500|order:${app_order_dashboard}|g" ./src/plugins/dashboard/target/public/dashboard.plugin.js - -# Replace app order to Visualize app -app_order_visualize=1020 -sed -i -e "s|order:8e3|order:${app_order_visualize}|g" ./src/plugins/visualize/target/public/visualize.plugin.js - -# Replace app order to Dev tools app -app_order_dev_tools=9050 -sed -i -e "s|order:9070|order:${app_order_dev_tools}|g" ./src/plugins/dev_tools/target/public/devTools.plugin.js - -# Replace app order to Dashboard management app -app_order_dashboard_management=10001 -sed -i -e "s|order:9030|order:${app_order_dashboard_management}|g" ./src/plugins/management/target/public/management.plugin.js - -# Replace app order to Security app -app_order_security=9030 -sed -i -e "s|order:9050|order:${app_order_security}|g" ./plugins/securityDashboards/target/public/securityDashboards.plugin.js - -# Avoid the management Overview application is registered to feature catalog -sed -i -e "s|home.featureCatalogue|false \&\& home.featureCatalogue|g" ./src/plugins/management_overview/target/public/managementOverview.plugin.js - -# Avoid the management Overview application is registered (appears on the side menu) -sed -i -e "s|application.register|false \&\& application.register|g" ./src/plugins/management_overview/target/public/managementOverview.plugin.js - -# Generate compressed files -files_to_recreate=( - ./src/core/target/public/core.entry.js - ./src/plugins/discover/target/public/discover.plugin.js - ./src/plugins/dashboard/target/public/dashboard.plugin.js - ./src/plugins/visualize/target/public/visualize.plugin.js - ./plugins/reportsDashboards/target/public/reportsDashboards.plugin.js - ./plugins/alertingDashboards/target/public/alertingDashboards.plugin.js - ./plugins/customImportMapDashboards/target/public/customImportMapDashboards.plugin.js - ./plugins/notificationsDashboards/target/public/notificationsDashboards.plugin.js - ./plugins/indexManagementDashboards/target/public/indexManagementDashboards.plugin.js - ./src/plugins/dev_tools/target/public/devTools.plugin.js - ./src/plugins/management/target/public/management.plugin.js - ./plugins/securityDashboards/target/public/securityDashboards.plugin.js - ./src/plugins/management_overview/target/public/managementOverview.plugin.js - ./plugins/securityDashboards/target/public/securityDashboards.chunk.5.js - ./src/plugins/opensearch_dashboards_overview/target/public/opensearchDashboardsOverview.plugin.js -) - -for value in "${files_to_recreate[@]}" -do - gzip -c "$value" > "$value.gz" - brotli -c "$value" > "$value.br" -done - -# ----------------------------------------------------------------------------- -# Wazuh customizations -# ----------------------------------------------------------------------------- - -# Add VERSION file -cp /root/VERSION . - -# Add an exception for wazuh plugin install -wazuh_plugin="if (plugin.includes(\'wazuh\')) {\n return plugin;\n } else {\n return \`\${LATEST_PLUGIN_BASE_URL}\/\${version}\/latest\/\${platform}\/\${arch}\/tar\/builds\/opensearch-dashboards\/plugins\/\${plugin}-\${version}.zip\`;\n }" -sed -i "s|return \`\${LATEST_PLUGIN_BASE_URL}\/\${version}\/latest\/\${platform}\/\${arch}\/tar\/builds\/opensearch-dashboards\/plugins\/\${plugin}-\${version}.zip\`;|$wazuh_plugin|" ./src/cli_plugin/install/settings.js - -# Generate build number for package.json -curl -sO ${url} -unzip *.zip 'opensearch-dashboards/wazuh/package.json' -build_number=$(jq -r '.version' ./opensearch-dashboards/wazuh/package.json | tr -d '.')$(jq -r '.revision' ./opensearch-dashboards/wazuh/package.json) -rm -rf ./opensearch-dashboards -rm -f ./*.zip -jq ".build.number=${build_number}" ./package.json > ./package.json.tmp -mv ./package.json.tmp ./package.json - -# ----------------------------------------------------------------------------- -# Clean -# ----------------------------------------------------------------------------- - -# Remove plugins -/bin/bash ./bin/opensearch-dashboards-plugin remove queryWorkbenchDashboards --allow-root -/bin/bash ./bin/opensearch-dashboards-plugin remove anomalyDetectionDashboards --allow-root -/bin/bash ./bin/opensearch-dashboards-plugin remove observabilityDashboards --allow-root -/bin/bash ./bin/opensearch-dashboards-plugin remove securityAnalyticsDashboards --allow-root -/bin/bash ./bin/opensearch-dashboards-plugin remove searchRelevanceDashboards --allow-root -/bin/bash ./bin/opensearch-dashboards-plugin remove mlCommonsDashboards --allow-root - -# ----------------------------------------------------------------------------- -# Set permissions -# ----------------------------------------------------------------------------- - -find -type d -exec chmod 750 {} \; -find -type f -perm 644 -exec chmod 640 {} \; -find -type f -perm 755 -exec chmod 750 {} \; -find -type f -perm 744 -exec chmod 740 {} \; - -# ----------------------------------------------------------------------------- -# Create the base file -# ----------------------------------------------------------------------------- - -# Base output -cd /opt -tar -cJf wazuh-dashboard-base-"${version}"-"${revision}"-linux-${architecture}.tar.xz wazuh-dashboard-base -cp wazuh-dashboard-base-"${version}"-"${revision}"-linux-${architecture}.tar.xz /tmp/output/ diff --git a/stack/dashboard/base/docker/Dockerfile b/stack/dashboard/base/docker/Dockerfile deleted file mode 100644 index 1f48bfa54d..0000000000 --- a/stack/dashboard/base/docker/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM rockylinux:8.5 - -# Install all the necessary tools to build the packages -RUN yum clean all && yum update -y -RUN yum install -y \ - curl \ - tar \ - findutils \ - git \ - xz \ - gcc \ - make \ - bc \ - sed \ - gzip \ - autoconf \ - automake \ - libtool \ - python3-devel \ - python3-pip \ - jq \ - unzip - -RUN git clone https://github.com/google/brotli.git -b v1.0.9 - -RUN cd brotli && chmod +x ./bootstrap && ./bootstrap && ./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib64/brotli --libdir=/usr/lib64/brotli --datarootdir=/usr/share --mandir=/usr/share/man/man1 --docdir=/usr/share/doc \ - && make && make install - -# Add the scripts to build the RPM package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] \ No newline at end of file diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/Logos white.ai b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/Logos white.ai deleted file mode 100644 index 93fc0395b9..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/Logos white.ai +++ /dev/null @@ -1,1860 +0,0 @@ -%PDF-1.6 %âãÏÓ -1 0 obj <>/OCGs[26 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - application/pdf - - - Logos white - - - 2022-01-17T15:33:12-03:00 - 2022-01-17T15:33:12-03:00 - 2022-01-17T15:33:12-02:00 - Adobe Illustrator 25.2 (Windows) - - - - 256 - 36 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAJAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FX//2Q== - - - - uuid:71212cb3-d980-49b2-9639-f38e1aa51c77 - xmp.did:a2a60a6f-864c-2044-babb-74b67147df64 - uuid:5D20892493BFDB11914A8590D31508C8 - proof:pdf - - xmp.iid:488a1c52-9e88-5841-8ae1-cc46f9819bf1 - xmp.did:488a1c52-9e88-5841-8ae1-cc46f9819bf1 - uuid:5D20892493BFDB11914A8590D31508C8 - proof:pdf - - - - - saved - xmp.iid:488a1c52-9e88-5841-8ae1-cc46f9819bf1 - 2022-01-17T15:29:48-03:00 - Adobe Illustrator 25.2 (Windows) - / - - - saved - xmp.iid:a2a60a6f-864c-2044-babb-74b67147df64 - 2022-01-17T15:33:11-03:00 - Adobe Illustrator 25.2 (Windows) - / - - - - Print - AIRobin - Document - Adobe PDF library 15.00 - 1 - False - False - - 310.000000 - 310.000000 - Pixels - - - - - Grupo de muestras por defecto - 0 - - - - Blanco - RGB - PROCESS - 255 - 255 - 255 - - - Negro - RGB - PROCESS - 29 - 29 - 27 - - - Rojo CMYK - RGB - PROCESS - 227 - 6 - 19 - - - Amarillo CMYK - RGB - PROCESS - 255 - 237 - 0 - - - Verde CMYK - RGB - PROCESS - 0 - 150 - 64 - - - Cian CMYK - RGB - PROCESS - 0 - 159 - 227 - - - Azul CMYK - RGB - PROCESS - 49 - 39 - 131 - - - Magenta CMYK - RGB - PROCESS - 230 - 0 - 126 - - - C=15 M=100 Y=90 K=10 - RGB - PROCESS - 190 - 22 - 34 - - - C=0 M=90 Y=85 K=0 - RGB - PROCESS - 230 - 51 - 42 - - - C=0 M=80 Y=95 K=0 - RGB - PROCESS - 233 - 78 - 27 - - - C=0 M=50 Y=100 K=0 - RGB - PROCESS - 243 - 146 - 0 - - - C=0 M=35 Y=85 K=0 - RGB - PROCESS - 249 - 178 - 51 - - - C=5 M=0 Y=90 K=0 - RGB - PROCESS - 252 - 234 - 16 - - - C=20 M=0 Y=100 K=0 - RGB - PROCESS - 222 - 220 - 0 - - - C=50 M=0 Y=100 K=0 - RGB - PROCESS - 149 - 193 - 31 - - - C=75 M=0 Y=100 K=0 - RGB - PROCESS - 58 - 170 - 53 - - - C=85 M=10 Y=100 K=10 - RGB - PROCESS - 0 - 141 - 54 - - - C=90 M=30 Y=95 K=30 - RGB - PROCESS - 0 - 102 - 51 - - - C=75 M=0 Y=75 K=0 - RGB - PROCESS - 47 - 172 - 102 - - - C=80 M=10 Y=45 K=0 - RGB - PROCESS - 0 - 161 - 154 - - - C=70 M=15 Y=0 K=0 - RGB - PROCESS - 54 - 169 - 225 - - - C=85 M=50 Y=0 K=0 - RGB - PROCESS - 29 - 113 - 184 - - - C=100 M=95 Y=5 K=0 - RGB - PROCESS - 45 - 46 - 131 - - - C=100 M=100 Y=25 K=25 - RGB - PROCESS - 41 - 35 - 92 - - - C=75 M=100 Y=0 K=0 - RGB - PROCESS - 102 - 36 - 131 - - - C=50 M=100 Y=0 K=0 - RGB - PROCESS - 149 - 27 - 129 - - - C=35 M=100 Y=35 K=10 - RGB - PROCESS - 163 - 25 - 91 - - - C=10 M=100 Y=50 K=0 - RGB - PROCESS - 214 - 11 - 82 - - - C=0 M=95 Y=20 K=0 - RGB - PROCESS - 231 - 29 - 115 - - - C=25 M=25 Y=40 K=0 - RGB - PROCESS - 203 - 187 - 160 - - - C=40 M=45 Y=50 K=5 - RGB - PROCESS - 164 - 138 - 123 - - - C=50 M=50 Y=60 K=25 - RGB - PROCESS - 123 - 106 - 88 - - - C=55 M=60 Y=65 K=40 - RGB - PROCESS - 99 - 78 - 66 - - - C=25 M=40 Y=65 K=0 - RGB - PROCESS - 202 - 158 - 103 - - - C=30 M=50 Y=75 K=10 - RGB - PROCESS - 177 - 127 - 74 - - - C=35 M=60 Y=80 K=25 - RGB - PROCESS - 147 - 96 - 55 - - - C=40 M=65 Y=90 K=35 - RGB - PROCESS - 125 - 78 - 36 - - - C=40 M=70 Y=100 K=50 - RGB - PROCESS - 104 - 60 - 17 - - - C=50 M=70 Y=80 K=70 - RGB - PROCESS - 67 - 41 - 24 - - - - - - Grises - 1 - - - - C=0 M=0 Y=0 K=100 - RGB - PROCESS - 29 - 29 - 27 - - - C=0 M=0 Y=0 K=90 - RGB - PROCESS - 60 - 60 - 59 - - - C=0 M=0 Y=0 K=80 - RGB - PROCESS - 87 - 87 - 86 - - - C=0 M=0 Y=0 K=70 - RGB - PROCESS - 112 - 111 - 111 - - - C=0 M=0 Y=0 K=60 - RGB - PROCESS - 135 - 135 - 135 - - - C=0 M=0 Y=0 K=50 - RGB - PROCESS - 157 - 157 - 156 - - - C=0 M=0 Y=0 K=40 - RGB - PROCESS - 178 - 178 - 178 - - - C=0 M=0 Y=0 K=30 - RGB - PROCESS - 198 - 198 - 198 - - - C=0 M=0 Y=0 K=20 - RGB - PROCESS - 218 - 218 - 218 - - - C=0 M=0 Y=0 K=10 - RGB - PROCESS - 237 - 237 - 237 - - - C=0 M=0 Y=0 K=5 - RGB - PROCESS - 246 - 246 - 246 - - - - - - Brillantes - 1 - - - - C=0 M=100 Y=100 K=0 - RGB - PROCESS - 227 - 6 - 19 - - - C=0 M=75 Y=100 K=0 - RGB - PROCESS - 234 - 91 - 12 - - - C=0 M=10 Y=95 K=0 - RGB - PROCESS - 255 - 222 - 0 - - - C=85 M=10 Y=100 K=0 - RGB - PROCESS - 0 - 152 - 58 - - - C=100 M=90 Y=0 K=0 - RGB - PROCESS - 39 - 52 - 139 - - - C=60 M=90 Y=0 K=0 - RGB - PROCESS - 130 - 54 - 140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 70.0 70.0]/Type/Page>> endobj 23 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 144.0 144.0]/Type/Page>> endobj 24 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 150.0 150.0]/Type/Page>> endobj 25 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 310.0 150.0]/Type/Page>> endobj 28 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 310.0 310.0]/Type/Page>> endobj 35 0 obj <>stream -H‰T‘InÃ0 E÷</ ZE Û:EWAtÑM€Ô÷B+v¬@ÐÀ÷ý)RÞGŽ£Ç—È0Œ§¹ œ§ o†~f¸ð6LÈ•R‰vBA8ât†E:ƒ“BžsS4Gü—Œ÷„}"¯Õ K…r”¦'- åB!?‘vQB§‰TªJ!ô@…|ÌBåîáNåÜÊÚAVBW”dJµ¿ð '¸Z_Â÷é–åÿ >ñÒ=†øBZT±²¥N¼¿…9X-k±=P¶Ž\(ƒ®{zĸ‰Š¶B‹†=ÃûåÛõܤŠ›õ)gÚ ¶ËWà7ŸoÉ–&_öçOp`ÌeÙ -endstream endobj 26 0 obj <> endobj 36 0 obj [/View/Design] endobj 37 0 obj <>>> endobj 31 0 obj <> endobj 30 0 obj [/ICCBased 38 0 R] endobj 38 0 obj <>stream -H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  - 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ -V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= -€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(Š‡R¡,¨*T2B-Ð -¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 -N'çÎ)Î].ÂuæJ¸rî -î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö -n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ -¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû -endstream endobj 7 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <>stream -%!PS-Adobe-3.0 -%%Creator: Adobe Illustrator(R) 24.0 -%%AI8_CreatorVersion: 25.2.3 -%%For: (Daiana Iglesias) () -%%Title: (Sin título-1) -%%CreationDate: 1/17/2022 3:33 PM -%%Canvassize: 16383 -%%BoundingBox: -19 -108 1279 76 -%%HiResBoundingBox: -18.5638170212769 -107.889093468757 1278.13826890054 75.889093468757 -%%DocumentProcessColors: -%AI5_FileFormat 14.0 -%AI12_BuildNumber: 259 -%AI3_ColorUsage: Color -%AI7_ImageSettings: 0 -%%RGBProcessColor: 0 0 0 ([Registro]) -%AI3_Cropmarks: 969.553191489364 -171 1279.55319148936 139 -%AI3_TemplateBox: 16.5 -16.5 16.5 -16.5 -%AI3_TileBox: 827.073180503036 -437.019989013672 1422.03314144054 404.899989016354 -%AI3_DocumentPreview: None -%AI5_ArtSize: 14400 14400 -%AI5_RulerUnits: 6 -%AI24_LargeCanvasScale: 1 -%AI9_ColorModel: 1 -%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 -%AI5_TargetResolution: 800 -%AI5_NumLayers: 1 -%AI9_OpenToView: 723.893617021277 271.851063829788 1.95833333333333 1620 874 18 0 0 5 151 0 0 0 1 1 0 1 1 0 1 -%AI5_OpenViewLayers: 7 -%%PageOrigin:-290 -412 -%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 -%AI9_Flatten: 1 -%AI12_CMSettings: 00.MS -%%EndComments - -endstream endobj 17 0 obj <>stream -%AI24_ZStandard_Data(µ/ýXl®Žy„Þ 70OBÿd¯úƒþ ÿÃFk›E´7ÄìÛåb¨-‚fØ/¥änÄÖSJ)¥Ô„ `7€‘ÈÏí?/Ë Ä ï—|_¹¸¶¶¤f)Æ‚ T095q„Ë)‡š.¯ŒÌ–¨Ä’@«0–äɆ•V… -Ãe‡¹¤îÂP<¤0ö’Æ’”%²la|9 su$ÊBvG²|¡Â¨\BŒRWõ- äÇîqU¤;£"ä( ¬C+Z\‹V+È·0Ìœ òB eW]N(…ñUUMÔÛÂÐÌÄQ‰[.ùbŠ)‡Ý¯#ÍŠ-¤ØTpG‡ 2W¤øU%ý&‘]á:ÕêtóÖŒˆZ‡FJo)éQ’žê9•ôX[ôò¦­yÿ«^mFMÿÒÐôlÜòªê©5Z˜¶Ši/fÝaž|Ç+eù°4ÑeÎ|¥ OD@LD°0êÇB.]O’DÂFÜã¨DIXÞ;[Ÿaa<¹ä”Õ­’ º¼ÌDÍç‘%QZ§‡’Єíò{dIø…qyd)Œ-v¹0 µ04s¿&ªCæ‰>d~é½}¢bžŠ¨÷]#¦WõzœZu£ry3¯lR*RÔ¥ÔËÅ›ë§ÒyÈUÛe¹ðÒôgyÈØåRjê뼚g;{5²’ï0í.s×y‹ÉooOs9~v’:Ê[H”Â@”C96M1¥HI(Ha çD‚”‚F*ùÝY9±( r| #ñ¬œXZHQIE¡ƒ¥E<£+ºU(A¥ÞÅ -«0²¶ŽB„ùJï‡\b4¼J§­µô4UUt±½ï± >“/OÜGÇç†ë@d!#…Qˆ!†ä"?D¡J,Ñ3d -£› Œ - 0[ç¥ßÓ©d·çº[­ÔÜûÒÙÊ›™=ÝGKˆè]´2z‰UõgeV2¸ùÌR¬£¤îÉÄÓªCxÈànú©kÿö±;“ꙹTgD¨kFK—zvX÷CÆÜ!©êÚ2iYûÚo¦™2Z™§CÝõšôR}Èø15Û!¢OHDkvéÖ2¨U¶yº´Ò™¼káqNED…qXG¶ëŒN§Õëû>Œ8ñ&…±?DI–)V¬F)u…–ÄR‰%)Œc9vÙ¼E•Ã+Œc¤*Œã¥¥WU•pâë²”TE•”Jú¥=èHV«0\V˜º?DI$ÊâÂÐe“en…±`‚Kx SL1ÄŽ2•Æ¥0$Q–ÄBNzW¯ì‡‰…¡ºÊ9 -ãCœH–ò´¢V.›l…Q€ÂXÈe…a‡©ûÅ -ÃNÁ¼L]tÉ%—[n) [jñBKBYEID9”+«¨’J*¨œRŠRÉ’$ ’É5É“K,©Ä % dÁÂ8:œ0¡b‚À `2eŒ1†ŒÑÊM=Tx¨0r]7Úž†*Ý­2O‹ˆÆ™ú¦Ût‡ -£ôTy»}…QÁ‚ NàÀ±`* >`&04$)Œ -ˆ©0* †È†Ð¤±)“jß ­v‘V)oúa©Ù‡LÖ÷²è‡/ï!ãJ²2Ú¢½ò1¾~_®^2J'+n"Úé!‚sˆÆÚ­0( c·0Q¼8a*W•ÕV–ÖÖë(¤’Rj©D‘ÙÊÌÎÐÒÔÖn…qb‰)¶XÂè|uvwxyz{¿ãKN¹åGh,4D2I%—L$©µÔô5Uuõz(¢IBi½µ¶·¸¹º»…ñ=Ùd•]6±t¿n¿ãózyrå˧ÃGvÜGzìñã8#9”c9!…a¤CA$E9r ’ -² „'•Xr &™d¢É&OŽI’DI–$‘b¥SNA%U -c•+‡‚(‰¢(‹’PhñR‹-·à’‹.»|9dIeY–ÄB '*a‰K`"šØÄGI$ %±$‰D²$J’$G²‰&˜Xâ$(’È!…²ÉqÇÃtÆòäÞî'ŽÝͽġ«ZJšø¥øC;- K}…¡PBt|•’ÏÊT¦Äé…(ª z¬ƪeÆAxàÆ]†Kø…a'U²–T2Iä( -‚>ñÐöô²0ÖÔÌ•¨¥¶²0¨¨^œ -)JX(ŒQI9#GQ$D9ÄC -1B!‰c9–C9”#9’9Ž£0ŽãÇ{è‘GxÜa‡uÔáƒ:_¾\¹òäÈ‘ÿ¿×ëóxüýn·× çÓ›Øe—U6Ùd‘=öØïî®®nn.î­­mm­—–6¡‹*šh¢ˆz½®ª†j*ê©©i©•4‘‰\2I$<ò¹©™‰‰yiYétR&pÁL0A‹ŠŠˆ…qxhXh$L\â–S.9äŽûýôòðîìê|tt [L±Ä;춦–†vVf#KTa,¥TRHõÚÒº²ªrQ)NŒøð½V£Ïæ²MNÐB !tZJB:2*Œ† -CbÊ)Œ - 2`h€ÀC‡… Æ‚† p@ ÕƒH!¢‚0`˜¡!bႇ  €hÀ€S… - 2@A0lа‡‡† -$*Hp`˜à`ih¨Áà - "`À±qlÐñ@Á0HØ@ÄÂÀ ¢ƒ ðÁ,P€xˆhÐÁ Á¡AˆX¸`ÂÃ4à³ @dÐ0a!‚™ÀaÂÃÌ*h˜ ðÀD &,$ˆ`pX˜pÁ  "Ì„ @,8,L¨†l BÄ0€xˆh°†ˆˆSÙ !"ƒ*@0\@©€A‚©ÀáÀ°Á„‡  ƒCâA -¦ñ0!Q¦† (4 æ!„…„SADdÀFà ""0H€‚ÂxЀC< ÁÄ2Ð`¶…‘CC„CÄ €= AW}ž6{U{ºxƃ?³w§ÃkZצÖò¥K¥{ŠÔ^uu‹”Ž&UQ¯\x7ÝÒýÙŸÙ4¼Ãï½­Í¥>KÑÙQS¦é*–Þ´ˆò‹6vÝ+ÝEÔs„fïîÎc]B›¼¬[÷V’É–ß<ÊÌ'æNÓìžWŸ+µu©ðç„推ð®V?é2Iæç.õo„yOK=v™Mý™á¢Þ•Ê¤9¿¸JdgM¡šß5;¦2…z.ËJ—ði½s·©=^ÖÙDƒ›G{¯ÄN“óìéï„vç»"Ò£oéÚ¾tów¥Ã,ô_z—©0”Ä2RyyFj‘A’ÂPŽ0 #o)ÃÔý$‰ÂX”QŽ¯¦ÆmÙc‹Žå  ô²‡‡Š%vÜR jbÕDE¹k’$Z-™˜Í iÙUeg…±Wu虿’T»Y[‡Œ®±N©jVk²;¼ûæ×1ÙĪ†R¹/äÄ…‘ ²Ü§†M†¢`axÐba"›…±œ$•ÂØ[Z2QHa$ŽÔåÏÕ:4¢g‡¦W¿Ù.Þéê–Ч¶¤‡jf_³ï$éÞ²ToŸéÕó\keWßqí6céÝ!‚ä—²ÃÜ[Ë ¢{$Q–Ärʼn¥”S…\wˆ/Œ½R ­xѳ¥Yy”@¤0Ž_•‚({×J,ÈíyF¦uìªF¢«¸¨Q”$­lTÇ7ñÌ•@£OO"šÞïOJdßóyŸwVUî™èq©×œ>´-ÛiWzûÛ–‡Œ9Â$ËJsa=“NUÉö9fnÖí¯ŒœDTjO<[+®QÉN]K·ú+ùWHäDò½š Ç%n•M\?tšºZ¤J÷9BÜ;õ‘™|âí_ߺó±©Õ-´(ŠQb¹²cñùȆûãHfa,²»…±GbV)Ha¬ïE«ñžR/Û±²uíÕ¿†{iû4¥“êûêÙHó÷´û^:/õ°lVT—ˆ&2¤%AŽºB²ÐЪò±C¹jGk$£$³¬×¥¯ÊH}=šÝÒc…ˆ…þn-Ù©Ô,wm-S5µôggutóÑïb²rH)¸\¢ ÊaJ)¤ ( r†æQG™ #‘Vs¢v¨RåÂX”ga$r5Ó…‘8dQ$AŽo!¶¦XAŽ[–Ãl„¬‚6Ü<¶0èðHØ -c“[œˆNK)Œ½’( ¤P_J¡qaàæÆõXÈv%-áÿ@’$Q–„J(…±B -%›–0³lïn§²Û ¨@›÷¦¶xE²§ÕêsÛ5k7i&¸§³­fÚo+]-ïäO&Ÿ%µ·òìkÕ‡ž.;mÑæÑ–lg¶ÇÜ ±µß¾†zÔŠlw¬Ê;Õ)ûEß;jÖ)*Ü¢¼ÍŒ¨ê3;z›:½K´Óº£çrž -ïºö»x›ôTÚ꺕·ºŸ<›D´}ÈölÞ¼}²œŠ·ù+³uBÒã3ýèògÛ©³ñ–¯|ž:«Mg~«~̾F¨ùD˳uµ¥™§$=6s®Ëû¹ùé#“¥eÍ´)‘•ìw?Íoiž­C•§§uéòäA´´ë®»÷B¼»ÒÓ*ÝþöÎî½Öî¾÷gºJhœXeúÊ=VÞ‘îªí)WæI¯îì2:ÞuÖEÔ#’ËôYµ?/½×>£­ëzsê™$R5=Ùö­¦.bêÑ=£ˆtðætóGwo÷.]3ýàÑɼ¢íÚ{Ö£¿§l£”›¹e££…ÉæïWZ¦Khc%éî˧Œh‡‰iÃ=šm®ù>.D²ž^áîI×ìyÈhø´uae¦Ÿ[F?jÄM}®×|%]Ó -­g Ë–¥{»>GxFw§[Ztô·¨{…vüÛ\¿ÔÏrs íj1sµÌg ”îréNOâ‹NIˆø-³Ü´éøÐl•— ñ'ËÝûLJ7ÔÝUÜÍÃS‰˜‹ÏÕ_׿V]<âo–”FÌ:£E'ú®Š¸—ßCŠ©ÖÃÅŸ*n¾p ‹N-RRâWÏR¯¸6թļåâQ“¼N\L²óDDEMÜ»ýdb}×¹KÖ“‡«v·¸˜x•¸–Iç‰hÄUܼæ©Ä³Ó¹GÞ£‡>ªÚr+÷÷Ô¡-¦U®¯öÜá'óRn’þâsŽŠ˜ .!Þ¹D35;¢/Ÿ•‹h´®w–¹æÒÖâê©Õk·ò55ÏšAk-Ùn¦±rª•È¶4ÍËuÖL™Ó,=iÆþïÖê¾péÔ™Ì#}m™}[žY›¡m uO¦!ýè™ßjišÏž±<ÚãõЙZ<¯ÌÓ£¹ÝnÝšïÇ•&+O^ùönw¶°ìüÌ™éóëj[¤x|i0ÏgÑøðØÞ©4f<ªº4è;…Æòšk»¸xÖÒØ=O¡¹¥]UÑqïî–¶ì¼?‡&Uo}»wt²Òmc®é<-é‡Ö˜ÝÚ¢mž[«Q¼s窞¯ÁÄ=ó9ûnõKGjõCš¶³§}[©fL_Úê¶ð>Wiö¨'Ó¤ÙênÓiÌY™Þ’ÕÎQ"Õ™^Ïulꦈ·vš_íÔ t­Ô“kV«nëÎUÒíØšDż­žõœ¥±R:»}£oÏŽêªvKjxnýZéÉ&Ó‡*æÙ¹›Ú¢«ÛÔÛc•&/õй*ÓöÈôäùölš¢ºÕîÒ8O­ñ50ñæXùÄÃ4ßôYYÇÈƼkGKsû=vãB¥³½òžüA5ÆÛE[#ÌóKú£±Oj¶˜æ÷ATLÛj­Ì4¸ö³fnKMË6×Î ŸUïøLk­iç›F]zðŒRÚÌÄã4[«šÆŽN©¹ák×õsšæÔ{¼&­-&Ò±›×›d¶º×C™ÆôuýÎfš»¢ciŒ®U³Ãý1š×¥÷8ÍþÞ²-¯gš?ó\³6ÝÜjy¶«‹ç0ÍÝ$"Þ¶˜iÖdçÖ¼6-뜦óYÍC7Jå{íYë ¦±²ÚÒÓ’Míaš-¦ÞYÌÛ¼¢<¶MšO¾¥W*ƉÀ(`* ÀdI €1† "ˆx 4 ‚ƒÂADÄ&,0<`$@ýÙ"Ë4ÃCò¹Ù洛a¢a®Ù[yIç¥:_ÞçÛe—>_&Y>Ïé¼Ñe¯­WfCú^vºE©èµ»Ò˜˜GtúYé;M„x<¹|(}”'јª&Ÿ×Çw’äõzŒ¨1±ôl–R8ÚQER¯<¯ÖjÙÑóÚ¹*ï3ßi Q»ÕþäÕí¾Ê¯ÝÑŽZ¹YÙýªÌîNU?s½Š™¶½<–¾U½Êïù{äüé*žó…6“Öúv÷­TT¬LMÓ!9IïœÊ>4Þ7­Ñgdˆë»õ~ª¼U¥Ïê\j¾[©î1+Û¤ºW•W%-¦Ý­*‹^÷»éd•öênþ-™úÈÊ°îh•}iw§ª“õN•ˆ¦SÃ׺PjJ¡v¨„w¯.áè(ëìŒþñ…ªVÚMüéæ!unÙí×YÚN7õtO<©±ˆèðµÆ¯}<#^ÕZ•¤xÝüyú†¦¼¢ëаÎtÓ©KˆWõí^á}¶£õªÚð~§ºw¯¹Ç¨ìuJw®ô¼“ëкw=Ñ1*¢Ã¼“+]w×Éh¯Ô^Ewöʘ¥§®ê–Y¹÷ZmUÕé^¼cU]¡Þºðf.:¯ò ]´yzW*½\½ûUi•%¡ï¶ºªûRí¢QxUÝð¶Æ×ó¬•^Ò­™ÖíAºR#-Ú"#|Þ·ŠT{p]÷½Uï_wøõ©ìe‰¥ö½ŠxR»E_ýWuJ}V¶v´í†FK;Rz“n5ëÞ;˜ÞÂ3-:çIWO¡©è÷üœVÕtê¥&Þê5"Þ6é¤Ú®go -¶Ù7ÕÞ³hÏ«\…z•¿óût2¼ã5ÑAuVfâ­¶K'Þ¬ð˜úú®ZW¢=t•­N½S%é;I•õ,½¯úVº¨w¥ò¯œi_t9©œæBç﹕Tß»ßU]*â]XH·{UåÝYZeµUy/o¤Ò§åÞª°lhæ%¼û¥‡¿ß{2ýLeSî½ôyŒÊ¶+½/•êÞâ¹Ê¾S5«Úxª®hw»¶‡IxgW£³2:§–¥êÝë2ÖëXzçöXÆYécEJ¥¥Ã&i_'- Md©—¶ëÅ|ºëã´ÃÍú–Z ˜ÜÍ3ú´*§»××±J.½×<¥aùÖÐ,Ë.Ÿ²lÏ{v£ÑY¬çÝÒŽUeôÙ)ËkË0K+iYâ}öʽCY¿"£=±ŒJj¿B¬»ßjO<ž½Z,¼Z;z}ôÊgëºÓ¿®Î]©-šîVjµïÕŸê]yV¥vHw´B«o—šÖ꾺t¶JƒC$0D,0x€á*$ 9ýâÒ1á“Ž’íÝ÷œ¾¤÷¦åY_¶¼=æÑú¥¼SÆôùœëLµH6é×µ§‡{«ÇsÓ4Ü«]ªÞâ­Ú¸vòùbªs5Ϩk\¢Å“‹Kù;»Jv¢E$\'åêWíd–7z2ïT³ì—Gz~õð”‘íQÚï»OÚ[ýËÒôöÖÒ{nJγڽE£QC#ú1ÖË™t,ûeJéçI•œç¿è”Ý:óVÉwìtá&áî½+žÚŽåÕG¤´K{í9?0&¢oþ®,‘ô<0·fX{ÓtÏójЖ¾§Ì8•ž{ÄfÓ~UµMòÙz`êÁÙ">0öãŸV‰15²O“P+Õl‰Ê—D?†÷ýUF½U‹N4›N³Å2U»jÞÉ+#ùv5Ò1)î¥I¿¨¥å;|eâ– &š¢Ýºí)¢"®½ÒêØ•¹oj¸YÆ¢ô©+cI´¾O·¨fDkg…‰ÖóAEº3ùNå;feÎÓpqÉÌîÐ÷Ë›õVãjæO®éÞçV÷õëNU'ü¢ªR¤§¢QÞ}gw½ÝcUFÉ”Š{¸y,Ѥ_G¶UåÜ%ºÜ"Ü –ŒÈ¬|iî/µhõAå¥Ý1³#œS;þÍuîê$Ó'Ù©Éh!ž_÷ŸÇªÓ["ƒi5Ó{éÒVwl3«ÒÓùçdnXVzýá9!.¦õ÷õ)›²³¬ÇŒgSÒÛqzQ«¬?üs„#CD*ú"âé ÷Š†»Šg‹‡¨h¤g¸˜Šº…‹t;µxڢ¥<=¸h‹¶…§Ï֮݅¸˜»GW­hq¿×=•WdùD$DSË2íÞîS7SïhÐÔóvE'ÍF×*MÏ¿„¹f³çËã¥ZY1ZzÐl¬OoÕnóe¹´ù¬¬½,ôéí"‘95OEuåÚ¼${IQO¯µ‰e³j³¼]Js«æzÓ©')ëé²¹£_Ù”¬›·²ÉÄKU=iy+) %fµ,óQûÇú‹î'-ÙaâÙ$)4ªžúÝÚÒéÞÚýýlÉìaanY7m<'D¥}®3í q××µó¬F¸ùºSwfݪòPm]F×øßêåK‰(ïæz¶öÛT¡ÞDu·÷»Zï§2G%ôf æ“ꬦç©2+Û÷Üž¦4ËWñG—–Jk)ÿc[„D¯ÕÚ=©i6]'½%ù m°¬iðµEz=Ë£¶Éü϶šŸ¨Äñ R˜e2Æ TL’SÀ0 Å’ }b~€}br“úR[òR÷î7ã}b]ÌêÂ4÷ãÑW›`ƒöUø|1žSûµ[fNK"ãˆxÄ#^ê -5u¼Wvg*34œúâœÂXÿC“d@æ-ü†…e($¨¢Ò‹jáÎd=Ž‰Õ‹C” PTÑ8w;Ô£¨JÖ6oáêY7«j‹p´äÂ0ö«JKl,€ò€åÃoÏõ†*ÝVOq¹c<±¡bMÈͼ¸;d_0(È讆ën«•f³F1ývWuMÁS{å/GY²¢ ìqW;ìÁ_éÈ[€Õg+îÓZŽb¸™ŸÓTÕ–ñÊöáÚ-3r>—8.x,± z¯êê9ráÕçAJÐih¢ f]z1! „C¤žê•Š5+ÁŒsõc†Òv®SµÓGwxÄДë½í|®fvÒ5\óñLÑÕ>jxMÙCn7NÕü’KÚõ¨¶‚ç•D¨À²„bKïj/Y kÌ2ïU$F9ß«%_ÝlR ŽÝ7‡1'¬i3ïW2~RH;S²$6K*¦ð{ ÀÚ8Fú™Ò©à…%²ÉgÊåbʈÒá'¢ºªPàÇS,¬l”š=ºd¾ó1­ë›.è}¹`"@Î ÛbG:Å¥6®ÇÎko=,¨’Ú8e¿àim•õ²2m«•Ã7ï€YGdJdÏÒÆïÄj”´-Ö;esW+†iN.Šñ -íZs[+e²¶„Õ¯t*¼_%úP*‚š)R¸¬$×ÊjE”È©AB»–©–î3~•ÜÑI´'ö­égž¢é øBûƂ׉`(ï'’'¹†{° bexlSǬӾ2öIºúR±cmê—"- `ˆje !…ÄLëÁÉ˪@Ý,¢VÁŠ¥"•.@Êë—ÃNÈb·ºåFÍ™¸€ó"’|Xjû(¸uÛ\‡ÊÅreV'4Ä,t­/”ŽµÐ` ‘I¯¢~P,ù&4= ôE ¯.}ˆjá0mC¡ÑÄÙø ó¹$ïˆ5º’*"1èåéO!&„è˜NåPePSÿÔWú>„K„Éžîè–<Þ-fº{i!Àg]ŠFϹÍDÎø Ì÷xž›Nw´]Svz-»Óêüi׬F§¶Õeçô†ºÙåìôÑJÈÙúgjâäÃYKpJ ó3½Ñ«]Îä¾»+Ö›0Sdì!zHÐVG$ÂRU»˜îš65ù›i¸+>E”¸l‚Ë—r.O}ë^'yV£;ž¢È>¡¶o2"¾\˜p1u Wî˜E$Jê–kG|5umÛRrXC- -"©mE*>]ÐK¢µŒ¿WëÝ -ÃHƒnŠÜöóSŒ;Ñí½†6¤ì(hÅ ?ó(Ðõæigž—XçHsHaœÅÆ&mnk¦Š80@ krËÄ­0ËFI¨v¹/þ¡i™Ï‘“³R» –²1;r4N¶f†a“Lº 0Vj&ÜWH§‚ø¼>.¯;¼B¨zãŽjCcÿd!Œ…7 M²˜[€“¢hë}Ä0±¯ïÁVéBÞ¬&‹Ý‘‚ˆ>¨ƒaÒ¹……ÃOŶv¬ -¸ÁãA«œ “ãåcx°mHÓ®ÃøçÛÒ¤_KaÌ>¢O•‰|©+ªt¶¯æ&¤õä°W -Í&1qÕ>öŠ(» u©Ém»dfg{ƒ¹òOÁ£Ýbô…-ÊåJ -Jd­4Q@hwkCAgób‹¨Ì✵a5WTk}’âLëÃ\=4Ú¬ðVgé¶A—ÌPÎ`ôV–ÿͬ¤Ùù×XàM/1SS]aÀL.v`^ý%ì¾àlMåå7Q–ìM³Äåò¿Gß‚Å0alù|ÏG \Êò9ÇÃS«±ïʳžðÔ -£6ëàBœfê •?(pÒp<ŠLR_qŠ‚vvcýŸaPŸ‡® dƒG'à¦z¯€™:eª /aò˜±VÖ;¸NêF-  µNÜø˜ÈQÙ¨£ r¹QúND4jDòbÓ.• - D;r/¥‡Ÿ+aÚÊ?Ië€Õ+´oYÓL®V"m‘Ûvv¥ƒëð;ÄÚAžC^“ì–ã|?`Ôj~³úa'žZ¯BÐe³œÃ¿£µÖŽÖµ5æ×:¼ÃvU‹ñh¸r+3Ûð¶%³ŠÛU&¢¨@ÁRƒ%!=‚>’vCÖ°ê³o Ì˺­Z¼Ñ„@8Ã'³€²7Lôíú[ÁÜÀÜ/‡ìÂ5Qº}ƒgtÒxìthK“ùï -N‹}Ù®©ÃØ@åJ®+9yJ&‡•>$8¼™ûÀ\Òêäýü(síà!DëèÄ’`”ôW™ûÑ©ÃÌe¤nܤÃ9A¡™;' >`?c¸˜ôsÊ=’xzîZÄxs š¹T¹!ϹÚf‘ëSË&œÜY på¶ÿ=ë+Â*áqt¹„o@ ¨`írUo)á N”n5¾-,#¢ /=a?Øè0±×Ð Y,w˜â—Å…DñÐ=ÕµºZ,O¡ Ý¡ûÑ“¸Ýø¤e8Q ßúI*EÞÑeŠÀƒ¶H·ÐöVÒªRZ3+ E+[^ÏÀ£Ì´ö_¸Ë‰™FÇìnn7È&x«ÞµýºDJÊÒü]` N»CŽÑÞ>›YS쨄Ëá ä JÆËõÖ©y åý¦Î¡WÇž¦hÿ̽9ú~Á)¦ -Üúm»¢Á½RmåAš› yÂU¼Êá8&LîR¤¿§þ3ûýÊQ¡÷ôïó¦(ÜvÆM- gd|Þá>$H Ú÷`E2ÐÀ‘g@׆AÁchö¼SR=¯]kzV·¿êye –¨®°ð[qnÀBkcÜ•¿¬eWpñùSSsºõ|÷Og^Ð0Cï¾ÝZõÒ/{³òVÞé#¡ÞþßMÝÑŸ §Y¨‹ûâmòѳiÍbwñv¸<‹–o£ÈÇ"ÿj©?¶“yX•5]¼óëp&oòWO˜Ëê-ïòÆBŒ·Âøo J°ZŠÖ®I^‹±×Ãë˜Õ{HE•¸™.Þ¢ó äuœÉU°ä5ÿUR \‚¼ósòˆQçjk“–Ѥž%È[ES^Ï\Pt¾Gœ4´ûqƒ‘äxÐÈëTU>e¢¤¿…“P™çꦆbgáåŠXNŸß@qÈ[¾v³ºÍ{Âo“`9Ø|4š3¾²{öÀ#W&ä³óø'ã/âµÍ”üËFÆx厲ÿnKwÅüa$ò{xMïa†‡7¹Ueç%,ÿáý‡…~,ÉZŒ ’䞊|^ìWyÙ’˜‰.ÒHŒÌ_Æ$A^LJO”–€°ùÃéxS p!Ðhü!óàwK>o+b¿­«ÐpÉñ²×º_8Þ*zÔæ ¿õ†ÆaoøÞÔîŒx%Á1â} R)‹›¯ –lÅ[†„WUí5$ÞríÆ–¦Ä8D –0ïV6pË?ÙÔÐn%Ñê×»éG s¼Æ •!öÃåxI ìÁÐq¼QÃÑG¬T¢'Çeãýt~ÝFñÎf‰LkçGÏç.WV·½óáÂëo^eX¥/¼ûœÁÐéÒWrŸxiÜrÎ š×O$qN® fÁ¡ŒÃ92‰i0ÆÄË´fzŠ¯T†µñä6UèýÄ9Þ,o™ã•Q<Þ„1Ýïú/ÛñæDŒêõdD1H¯ÍoôJœ½–`æ5 `þ¿:Ö@…"Wì@k…ô(#5"°ŠaK´WæÉ Š…Ȳºdt9Í܃PIüFyë šc<ú&‰9(°g)‘‡N5rÐY‰‹!—ƒþÖÙ·”ƒRóçBæ  kÚúØp(ÉeíMüÍAÇ'j ³ÍŽ©…tP½d+4h<&é ý•3;èÎÚÈÊ“â ‹îö!þ leke„BÏ“‘¡Î©>׳®ÝÛZ¾ðƒeRÉìJ!T i|3@ÎŽC»X‹ A¤_¨Å7Š œRöŠ_Â<Ç“Ë‘Êäï®H£Eú¡pâe¬¯!¯ŒY_1¼ÖU’†Re}qáÁŽõþ­¯ð¯CDì¾X××¾ýlrûº®“¾Ú0>¡Š~eóBŽLæ_yùt5ø}9pÐNƒ¿¯ÃŒ1Þ¹Xù}…ØZJ¿ïS' mþ}…6Šô÷íí^–å3Üv_§œpáÿûZëIÔÜ÷UòÌçûÚØLÞQ¹BÙä?}ß êIE¯ö}? Y(ëû.H>u¶í}2[~ïëœú¦ô¾™GWh_cTkëQ”zß²‹Æ §} c®í›˜Á"/~ŒíÛüÃW/ë7kÛ½F\z÷ªÆqÐsZã1âWå¬Ç%Y#€Ö9îÿ,±Å–»d -VK••n¯ kFÄX—¯ÆΧ‡*Úk¥Õ¸×ã„ Áêw5ÿ‹·08,üsµµû)*‰t->ò§‘h`îR£‘<{z#8ƒJw"–=Øm_LÉXûå²½n£Ñäp!F#|”Yü4mgÙâiLtøÅ£‘bª~9A­9;¾w5¢û%×6z(ƒ¶ òÈ\°{‚j À6, ­Ô¯‰6ºÀ¯ØGµ`M¡Þ½€³é2/`cán{®x -,ÚFƒ¸Ïä'Z"*j”$Z.ÿ›å]27‡Ï£Vej÷ª@ûDÖ‡N¤˜Ô "h=¶Ê¶Ë‚eò±žˆà8¬×¬#òûBjl2º…(¦¼ý ¥¤´¥*-Ð +WmV*&:æÅ(ÕþíÍ"!C+Áb/pžð'dÂ> $p*Õ‘ãÎ~·xH–._Q?c0FoB5.#ØswáןÙes2ä|rDsQ$,“ìXÔ>¡ìt@Ù.‚®ìL<\x³¬B:±ÞZÄz† ¸©GºÐÛ×±yêw‘ †Æ#߀3{@uåÖ5•‰$Ž5´dYäÕ VV¨®±N&&p™U/©“?¹à¤æ!|È$šQu¦Ä-ÌÍÒƒê®ÕUÑ/û¤Ï¢åTf‡Æ€'¯=›bùä¹ÜÀ£_ÒE ì™Acù”OÚï¦ù{4^ìjÄááµQ½¾Íª_Áû†íÜæ.×+Õè cõ;÷"ê¤Ì²^YqÒÏ™2’;nWD?2IEºh|“þÑ)/ÕçÅ"?í£¢põ³v3Ë]‚k"ö³¨a,z9}èзéò—šÌÕ•G“ êJ5\„ÁNxÓFÅnÊÊ‹I3Ö @ãdEˆ˜µ¦ÆöB¨U^7´¦à0u£Á›`ßGXNxÐð ¬<)njNõ¸fÒÇ-‚uÏ8”ÑVs«X#Ž:º þ­}OµpGéÊô^¨—º¡zÕ KäX(— x¦‡8 -|‹gÆ¿ÀNØRéràäd€¹’@aaØ“û§Ýr‡qçsÁHž}°ób°¸x­ü–çÎ/E0F˜Ì›­žC¤Þd—€ pèŠÎ_wìÉ%ƒÖ®«#lbÈÊ‹œC>Y“?b[1ñ«³jI׬³Þèd'ÆÔ¬Üí,ø¯ÒK»#p 䱃ûø_Ç⼸'«¿êÛCÀrÞî›\Ê#ÉÉõ¥ÃÒÚÁÏ{°’¯?óSçÃëÑa—*ôsÙQ8œKÄŠÿêG¢¨mZõZ›= fKw c©Ž¹dä¡Ÿt £*ºFmbÛô]Ÿž¬ádxbµ³–ƒD c·g›ëÑ+ÌjxŠ½©@Ý°À3ò-¥2I P6'ý焪ëû"[nž:_£çOXùÂÔïΡ@§\ÈbÍ MJ¨Ö*Æp0G @xá¶[4PÅìÍïbãu(¨©{ab¶ÛûÂ茪)®„ÃñMœîÏÓ£ŠcŽO绞nTA.B;„Dt[$Ïi'Epš2ƒ!D´ …äe€0¼Ž€göT -¯†,ì!É… -Íø‚±µD)ÓŸ„äñcMt”Ê)Ö¨:ËVxDh';æ 2õëÑ3ù;jP‚ØB],‡ó>À•ÿ2/vz’`Ø -‹&bÂcÒlƒb¶G‰Ÿ¸^9¨×a$°þÇ.åÍ¡zôÎ ’Ùl‰Þæó‚ÍOðMÏŒ×oåð`Á8Ì*†„èTL ¿tQ˜Œ±HÉ#7ÊD±bËÀ žwÛìÕÜÏ ,åiÓ4ë5L^FºÈçf«-JÚ|eð©Žm#5 ‰YxúAó©öQ™OEÙäþXÇ¿Næª[5‰`Ä¢¼§Pvߧ{ë¿C’sÐŽ¦“ÀPC•É—/ÔÊ&J›•VAgÏH‡lûŽ®¥„Eagy‚›[`¹žTÚÁtDŠ•í3ÀùÀó ×”hƒ¡£+Ç{Ðm¥,ç‹•ñD×Ñz`èU;Þ“Ü…,þ¬š™meÞ•è`3$p³uÆ -/M²*¦ O¯b‡@óB€Rø«¨±ªÙ÷%Kð4ü·-sÎqØ :5R|pÍd†µG{±tnæ;²gâ/}™Ç’B6;‹'êUºÃ"z¹Wõ®œJÎWvÏ]Œ©U•ÖUì‚B°¬­è„Æ2þÁ”i ƒpè‘?ªºV€}™•9a;@¿¬Ž‚ÏðûBýÚ¬H¼ÔÊ‘ïëLÚ¹Nü(@­|+¬WVP»Ân7ÿ¦ËÇñçv1•‘°»iµž×žaˆ.q¤.ò™À/Tf3r­¿¸s× €˜î°ÁD½ÊYqFÑ..]]ß»–HŸŠÚÿu¯6T·¶*'º2§‚5ê1ð· ‘#KÂS:|$7ÍDÖ8H³Le‹‹Ž `‰»³qÂCâj,l@á@öUàÌX®ó)ü$…þû¦AAø† -\§7:lž”h×Þ.ñ%»Ô˜7Í#Ž+`Í\'P-.·ÂAÉf6‘)\«-)g¤ÍÆ¢Xu¶fUeRÈsÆâΕ†éΟ/×}á8]¸²À¶zÄ“¥Ïj‰ -EÚ™ÃjÒ´?¨6k9¤†0Ç¡t܇Kç)XÎx&È•ÇXB].cÉ’tèýæ9Òïè1DZÓ].à,HðÛzÖŸžgº¾îÑe,á)øÂ…PÀî’‹!ÃÆP8eBíÀ4!Ê'–é„¥H ÌF?ÝE‰$Ü|îÕ£)¡·)U¯`íØžÌaLÜ/1[W€dS‚q7S "œ)¥ÞiV:¤|EÙJ+̈ÜP`Ó!.´@!…’+ŒC «¨¬²O?êB19ªÏ`ÖïÊÂÿ6SX?ëÖ ^)-Ç&·t áÒ«‚û+šÿüÈ+œøÛß©• ã7¿'zê­Ô¸‰ïQFä´7ªר7æõ2Ÿ+º‰Kõ•U½aŠ1²ÚÇ–vc×<×ô‹ê¡¿4’ÖÙ㓈3Ç,á³vŽdÇD1ßìVðÔz±jà ó&w¹÷µÆåŸo0ͼy×ËG·;׆Ý)P n`£Ý$S¼xÑæL—9a ú¼y•Ãþš3¿6”_’¯šý†’.^kPDÏ+¹\PµDF+á1V¬Gl9tÒ’ªÄÌ¢r{Ç•\c‘%Ä/“æÑch‡RCz&Gp¨©uìÁêÜôbÖn…cý©m±e8Ól;X…¶-fXte§{ñýþ»h {sÖ& ]É œ,Øsjj*\D¦3PÈ4éܯ Sû€ÿŒTªùº¶R‹‡Ó5• JábÀ;Y>z7[¸ªND ~Žaµ‘$”sz®ï Ö¥åŠÂIæñ-N {9Ýø1â¥äá-QRƒTŸfsƒ¿'6:†ŽÌ¤9œnÔ´¬}HÓpf ÆeSÆʦNõÃÑj*’Âì|'eBª,î(9áÀ˜†Ñ¾ü YÆ>Öžÿ„›BŽPñs…ƒÑ³àl_;ãù`­\¾0UŸ %*€)ù~¥ë¿¯+ßÝÃDGÉEÎWáhÔ‡Rëh š® â¬g&d;ÎF鮦$q¿EÛUy³äúèÁ+’Õut,²ÕlTaÑ”›ÄôÌäÒ²+ô£Œ¾^xUZpûáÔäCí¬b» "ä&E” `˜ÉE"“(‰+çzQ‚VŽÐÀLA‰ÏbŠ+¢ÖZa´VûÉüDÞpˈ„ƒ®"Óo%øù¬%g±}üJÐDŒ¤tDÍC›X˜d} -GYé«Ã_S±àcDűêqí5ëgÏ#'"!l½»Š:,X'Aö3z—ãh¢*Ö-³–,ö,*î)âVìºH⇙ÍÊ´¢TB" <:†€\ÊS‚$óÎ;µc¡h®Ø&!F:¹E Ài_Ù×%1ÞÍÞz)t#삜ڗºéâÑîœE20Ÿ‚õ]~|Eò"Gt]eÃ7Ë¡^Oö†¬hó†Lfº²²F›ñ¾`Ã@iX†ÃSGa1KªçVc;mì5Kà@ gJUëåtZ¿ƒÕÃäêpØ?ýg«8™PWÙ¢ðeè³<´!ó–œÆl^Fã0‹Š ƒ¤tØötßH¬G¤S·.ô¦&èÖQÌéc™sÁœÓ5a0}A^ÛMìÞ}pÙ[Ër|_¤Ûªè³5ò_á•ùÿKûïÍK—101í¯¡$·uS÷Sñ°uóaªô7ˆEÙDJJø_æþßûoPñX3>Î+}-®Ç¸BVüff[¿õ/ò’‰Äv~¯„zÑÔˆ C»gîW–¸ú -É]à#:\ßS‘lƒ!­é)1åæ#j'}°FKÃØ#‘6gÑz]ï$6yË;.ô¹öºó^¦Ê_–“““è¯C5ÊJž÷[†¿”%x¯âÇÖr”Þ¼ò/Öq#jnîç õã‹Þz6Ÿœ-èO®çØ«ÀqI_¢Ì}GOY^µlkòàQ¤[ô HßèøÔé4>Œ>[–ò¡·š -z Æ.ÆfUÎ>d”‡b3£èÔ!nÆlDáÁ²m‡¡€¯Êÿýè*ˆnáš6t‘Û? ô¶sŸ .Ÿ+ÝÕ&æàÈlº4T® Î¬ÇÀ¥ûª^ü;Í?ãGÞ‘{ïv‹DüŸ~´qcÁafÙ?f¯íp??%É]ƒëœ(8¡„«h Ÿ5t›(4“+ôŸŽàóØËBÊëT,Uq vp+Y½* 7ŸÄ[4îÙ¯ø^qŸ __ªY"¡ø»³ -4óä>‹$ô¯÷…wÃ4:>èÅ>à÷ÁŠ¾U,9^]ÜÊL/§@ï:Uç±jèuO„.‰nÉ7OD'ü!%î$©ä§¹JÎo:ƒrF·&Êɯ†Œó¢JÈúj¾ŸI+ïQeqµ<ñ¤ÐGVv¯¹$áø|Eù"­¹»7jaÞ ˆMãÒáðŒŽøšËêYš~‘J¡9öô¡û‰FÁ w©ýkž¿qþQ¦éKü˜iß<”Ž«ÒÏ\Ù¶Õ}Å1fÜñ2À§‘ž6$Á1˜¦ˆD;H<¢Gž’;7Ä ö’ë±dô*ÛFÁ/ÍOp1š¦CBˆ³»͸Y”Éhè$?ýCoDzJ÷®‰,Kýì¤ñŠ h×—ÍSä4Ðð´]>€bðñ¼V0 -uÜßkÀU‘3h–ÁGv7ˆB&`ž£‚¥@Üã;@Ë¥ÔÝx4—hÛ¥`oórR èÿþë·•ylù·Ç^`KšÄGZ»¶6èU¸üoæ Ït4Û;áùkÞìÄÚ“Üs?Ž8qø¥ÙéÜâ4ê¯Y‹ Ùµã,öÅKtŒNºÏ)æÜ‹WbSæ’ÄvCÑ'5oOšx£gjÉe§(Kc¥C*ŠתÕ9§^¢]~±pU•*¢Ñ^@UÝÔö^¼|\x†eúD¸·r˜_§Ì·6ëwLÁ¯»£8ø¥ëëØRÙjxçÙ¯JoÝ×#ÊE¢¦@½_mÇ<`Äî!ÆNs–n‡ê£4 -¥—ýé -¥© À;®å¨” 6yˆ - Ü »³&›PudûWÿÎ_…Þ’+'²Ç uò/ÆÅ°ìç'ŸÝCˆö½óFj¬ ¶ ÁSöNü ÅÛñáĦ–`NÂ`'/Íg%広 =×YüÙ“çʦAé@ ÜËcÇåÈsŇ(s1ow”0ûtˆÔn6ö¦:ƒ‹«3 +Έø.%b<çó“`Õ¬'ܳßÇNm#Ýu2îeòWÃÛ<[^E`öφ±T‘ŸÒf¿5å$‘?üªèÕ¢®óżU‘uJI0¬¥Œ¨¯rµt¥v1U{ ß\òz‹ÒÄbkè‡d î+‚*»BÁ`J­XÊt$' -¨ƒ¢FJZ¼ís‰©*û 44ü¾:ŸU˜x¾Y̱¸DåM^³…Ž)B9_2²¿®¯©ÝtDì‚åz.¡ ‹Õ^ =n‚rê穹cÎIwÎRÛ0U3‚3…è’ˆÄa¢ÓÇT?0, #­%Õˆ¤¸ð5þ3·ÞbZÿ†m;Ûƒ8¤ÿúuí°}ø²š²83TDqþ˜¨$ðc0Âó´äõÀ Óÿ ¸ñZþ j#1ú BLÂ-&i‘}^íØ"›©W)²Â0Ë·d=ÐïP¥}7Æ5i_Y–¥òíeå­Ä÷°|Χx@˜Z\øa8õ¨R~RY„-"¿)å°æ A/Õ¿³'q!›Ü/ÐÙ¬ì[ð¢aþG›#£Œ˜×0ï‰?*¬ÓNä¿>æò×üÁ0A¼§mÙ#ŸДô™bìMž:›ð-"sþÏsrQáµ{›Í ˜?áE„ üµOäЖHõ‡ ûŒïk&kpŽ÷ÀÖÓøhªJö1É2ñ'ç\´SßÞ*5Îd#g$Ò:I!×4d=G42½›˜è]’ü|›,Ãk»Œ§¯C¢=­#Ö¦œ€«”@jfõ2õi©ÑC5ƒ¨» u!õMô©&ûb,í‹AÈ•vΈÕ‰·Ùš1*™¥ö¾pSÌ*Ò¾°žSgô5Íeñô0JýuhXô®†-8Ö@Ââû|<õK‡‡fa¯–{(åXë­d-xZrØÍÕ‹‚È&ùкãr’’µ5î*ö–]lR†m úh’i'ÞTŸæ#VõìðR},îB …pÕªŠ„¢ˆÙýC•5§ã~4ÄÔÕñý…|íÛ3ë}cþXZ нqïR¸…(3¦Û#Ì£9=ýê “|d™¼|†#¸4bŠ]T,3í,ÜH+ZO4OÑ•IÌJîJ–(´ jyvpxÚ rCóH£5øÔoÒœÚbâä‡ÿe²:È'(úþÚarˆ{æóOeÏ pð x(S—þ'ÅÄVëÆ=íä„äþcøþ¾~$—LÖ„È1BŽ5cŒ¥Ù)ƒº“uá µ±Æbc,Z6F0q¥ …’áÀþK•0šÙ©¶@3!' ?;æ£/Û¶°À -v™©,ÌNN-µB'|´vJĶ*qgZàû/L#Û -[Ñh#ô‚~W°4c”°^*%åÙXQxQ€Z¢“ @3I8ê…í -™Áæ&Ôu[æ ; #æûhÞr´ZòðCøc ñô¡U#Ó=Žü°iŽlÖ;/8í±ØM³hÓW@íØnë—ì8ÔÖU‚ bßJäŬ ÃV÷¹€êÇ_á%b0Ûª0›6ª³· %ͪ auêw«(€äVì|¨$­ø4¥L¸Ž6Z2òRìXª§ß«©s5¢)sòvü¥­;óÆbjï=³¡Šk•g@‰ÆÑ' ¼Pгºj¯)¤wu—קz‚9Ââ[âêm­ªß.¨KšE:’Cdþ2ÎN°—ÄS¤¸¦Ùù:y+)4«ÆSÆ{ÊKò+§våKóüƳS$¦gª‚<ì_†… +‹ãFDâ€fä׬´º,«£¶K­cŸÖhJlZʹ˱s,'[=’šÇ¦Ql—}Ž‚xpši‹n¥2㎚Ñ=ËšàÅ#Û÷§¾h¿C«­WCHÔ‹°Ôsòprâ*ïìâzâ‰wtç¸v§§ª*cN;7täÝïgOXS$m㢖ÃÞs‡½Î=¬ßŠ¶„VÚ¸/ðãO# O¹ï¨O¨/ÏQÂ+D9þì„iê³…q³Ëõ‚óÄ=éì½ø3èv¶zg¬Urä÷£+ÔEkªJF¾]*`’{Ùá¯B{öüÖò—nf†+#±&‹†ßvkdK›Ec´†®…•è–¶ -³FõÙ:™?Cg-Ì«N/Öu§f©è…íźÉ,·¿ÑÄê™åÑ݆Zä&eË–Ü×äz•Qñ] '÷øV[6Âd¤)7•ë -W@OS&]k¶•Î0Š»-¤ªË°ºÃNBfÖròÄêñç À¶'Nþç á6*5¶ÃzžÂ§qøÅlJÔl@ˆvÃŽA8ÓʲÐã!¬ú ×@*ÉÇbÅPSù !Z™ŠÈ&Ǚޛ´pŒ4¾P–"£'ܦk~ÁøCª{׆¬Æ 4쟙M†.xè~÷eiþ òí==]Kó0ì¿€Fºª1% ÊM­ÐUk >RcU¶$ï¾{Ç!ßâa‡G:”òÓS¬1¯ÅÂe“p£Üçh^ó™±Ð<¦X‘ÖÃ@µV´4ícƒ¥zôßQϹͻ'F&_¤‘~,SNè”Òü\KhïĨ”Ë™åÖjl¼±ÙóX—0 ßýô‹^øѯ‹RTøBo9eå[A½0°<Gëñ|½lHe{J׉'dY™37GGEwAX ¦‘8)[=Ցá_³€(“º²$(7ŽŠ…¼ß%ý½…óü‰õ†8‡ÿ%¯O¤uðëîdDd·HŒõa$‹+±tèèpb÷FÙjQLÉË_Žù+¥ä h÷ÊO éŽæùÌ?(‡;3tCQ"ŠAí€.Rá è–Dx,Á^„’u…ŠÒÿ®e”Ž¼ø:ÀÃÀ×÷^ý·à¶tOMQ;þ,õbÞ‚ý磄è4‹Q¨g|` -äcÎÏòׇòCÌ{–Õî‰'çÞsC7ý„bJßÔv·KÞóžFÉžïØ‹–t {oñ¢!_qúÂê=ž¶!ÿ¿zmhÖ¾|6„ØA†ÈX^ù§wl9Å`Ò9­u¼1Ǥ!E’ ÙtƒwQãħÁ½Ç‰ôŠë´ 󛶭òo΄j=¢‰tˆùÐød -uêéIškx—ÔK]Œ—NPà¨Feyᛃn¡þ½þ¡`[ÐÁ€;ËÊ阄;ö˜~¦ t„ç3,cP´Ý£–x.d·ž„ÎAà‹ß®(ddÐ’lßáuq_{@3¨ø„^=tfËxÜ.ϵxÍNÓ×5T©è%¢ šÔ'yU; ØžX“/°²/d¥WsOhÓáõ¿%ÒÇŸFRcXsÿåÍú·®ƒMõ¦ *R±ÿw4—·mqÐscÅ¡OgˆX”ˆ#fh’RYä'‰ÿÛ\…-d " <Ÿ‹æ6cÓ,>¨Þ»kèA‘ÑŠzQJl´©7 ¶¾Ã.UõUéª7íûõ¿Úï}<Š7òsœ:´Iâ/Ê·Ǧ[u¨”þ)#ò,I(çJ&qû@± ¢rœã#‘EÎpÕn¿·Ý|ÑY¤4=[Us…à÷íIÒ‰‘‘9›8_À.KŠéýŠp¥‹º»ª³1)ö¡ŸM©'Wó=X|J ¼_!¾¯œÉöá” ü± -ü…ò§Ø“¶Óia®’}× -ݸVâIyO2¦¾ë¼*RļL`nëÖ -|è£N˜w&ü¢¬Cí5LòSLˆòÞ¾ÈC—ÉC¦raÚr“œ -ºÙ—þài{UìÅN |%|m i*1•Ûæ/ Elá vóƒµu 3(/ñèK7š4Ù9/‹XÑ~8#ôó†!ší‚ž$G>ÒEœW0i.ÆóÏOŠŠ`S"_ªcô‚W£6E `³éæ©~§Q±4nÇES´vÿ9òµ¤ÐËðÁ¸Ïp0tn<ÕOÆbÇxÏl¦ô‘îJâ½+­³„¸et.ˆÄîþ:kNWI;ŽKæ -æerªvHaVÚòuÞÆBˆ‰ˆN#.QV TÞ”‘u -¹åëà„ó&¨T‡›äN„ŸP;íäî¶pdDvÞjíqzJÝ%‘¼=@² ¤I`à†ð²¢ jŠßeüÁ™ÜBMim¢†B4)9xm ÔÙ¤& -–€`™G™ÞùI†øÓ -}‹Ê‹Šc¹ùˆ¶=$<í3 ×¥ŠMû¦b®•Ä͹ËLþU²wuÄØ<ÓU¦©ÞýÝŒDþ¦•VK*š,V—$gÈùNëú #³ul˜‹Sl˜Ž‚bMÃ€îƒ S7¡ÀðSÍ) …Lí|·±G¡óXÔ*²eº—Á‚H¦›õ¢½Âà~ºt?d¿Û”îÞX¡n§ÝpÁõÀ«§r=|Ø££SŒϪÍ<ílR=Í»íN¸ƒoØæ%b#Dݧ.¡®íF‚SWÜÒ×â©éê0w -mgÀhà™ô9¾( ŒÈ$¥2x-•¨ª¯$€$ÕÜ ˆóz´ám¤5É·ôé&^GÞ(Þ6•±V‡ora¥ñ{² ±øÃZ,-ŸèÀ¿Ã»%tªÒâ}â‰ÇY-i5¨Þ}_¢~Kç½//jxsb Èî¯RL$Ø5öIE#kˆ^à¯0jgÂ3QÑFè‚E>èvÜ0póÊ÷ÓÁü¬ÔφÎæñgQÄÙۣˣ ‹àÕ!?¨qDÞ££à}Þ©{'þxrœ6™¢ù‹…Þ œÃøUì®×_ËÛ,‡ûWAC ÞG{«UÌ(¶ ñ/ÞlÞlbpróÖˤ@ëãn´ M)E³V_5l4„:\N·¸”?Ç`M²’_g¹Žbÿ`‘½ÿ7äÓŒ$ÿTÊCß+Lfù8Á~øÍ´î™Åάz,?óðo¿ý’)6´mµÊÃRœ|cÁ÷'}5Ljc¸¤‰+ê›É*£W½ºœY;JÛF„”¬© ^ÂŽ©FÝŒbUz«„7ÜB_TðVQÙs†H˜²Ôþ¤³bŸÓ%Qc ]^²çÂ8 ¬œ'§ Á9J…)6}œ–Žcç?PDzÙ™›ŒC—¤œù)â¡ ÚC6fq>›ª´÷ÔÉ b±µAH0ä£õBD˜jó¥6¹Ðáâ¿%äJUf©vćqÄ*z½Ú¿ Ú>×[++Xk$£&™)䑹,š%âL › qdaëØ ‹5PúÆ@/JaRë%6¨äË#ºÖ9ÄÒ?0…n¦-Ã$;A!XÀ‘ŒðŸå:ì\eÝM©å #¦æWÒ „%"òM˜ŽBLU#æ0dO?1CûbúAˆ´Mȧú§Æ#Èôp¾”በßW|p0VEo}wßì–⧺föoyòßM -6mNC›šü„e#ú¬ñ1*£$Õl\(ôéþ€—ô±"@£ÈÆ>bé‹™ŽJÚ×EœÀÉ5HzA$Hú@bHô¾EÇ5 ÏÄû‚¸|½Ûwys·º"Š‹¬›±Dñv‰8]"jx"zœ"Vô*LÚbòße~Of0p¾bÐ÷Pkµl¹êòº@Ô¨TfbUé]Õ[P3p5Éeã¿ùA6[¹ Àß)²Yæp3梃86ÒrLUü­±dÍqÙ—¤Ÿ£ùŒ¯Aþìê­¦7ûÅy]Ìæ G¬®Ñ\]Ù3‚ôfÐï ±ïµ±H$"K²‚_~0ð2 "h±îÄìíFðìU+Ž£ê^}@Fç:JÇ’æùý@¼5F$Ð1q’«T¯‰úÇ9ݲ¢ãø^v¬’^å.xü˜Ï@–ß™3‰Ø_Ïʹù7s4‚³R…¨wÝ52 íŽqö­Ú” ½ Èå?®1¶¥eúš%/M–Œµ£iböÄ¿ŸXI -ÔYDû"R¨€5ø›7 á' #:–²¬¡[6Lž„Ÿ*[T×îñ“óŒCÉ4Àd!e³b M?Ñ`óc»†Z(—â1SóNÁ)v«ûñÚg“H©æ¿Þ” -(Ég€'ñL¬‚^iÝz0Ærô ÊÎ1kð¿úÏ&èíA¶·¹§bF£LZôÇ@6A¼DrH^z„ÚÓ<3²F˜ysɆDðü,ZÕ‚ŸaQÚÈìˆkü -$rͤ˜IC!a. €Y±N[.ß üDëZäT¦¼¬ ,oˆOØTp»A'­ävªÑírÑ+É5hT#»Æ ÌQ¢õ(Æz¥#f™N3¢m±9l Üíö‡·‰s Wh¦[ï Yð´ôÔô¤ ÿ>~¡_óIšþÅ Î{Ï}¿èôml¾M{!Ô¨\ƒî%ÜÜV—.˜5 ·­FWO%‰Nˆ°Ò(ìÀD±À²å=·H#´Ë—áæ@B¯3¯¸å «‹ÌPÑÙi.:3.úz‹‚3Ýò¸vÅÔ9ÄAy:ÛA0¶àeP@ ‹0èf”&㩶VÌFAmT@‚8´÷ '8ЮJè뙌\êÚĺ$з9WP] ÕQˆ³mÓv#'ßz‚µ¿ÂGØ|dá‹TýRãŒT °ÕÑs -^@ ¼l^"pÍ‹U|0 赟d{¢ =ç?%³C¶'%ÊŽI¼eëi ৎž•Œ*n™Ì\­º´dB&'6kõ§Fz{Ž ìàZ[¼ÓºéQC¢ùú¨EƒÈH:’¨çÊp;x„5µ:>?R¿T3£Á˜G•É0‰¾M¶<Êÿ …{ -ø'eQ1Ès¤vRŸ<ÉIJc(æQËu‹MŠ«’CûÙ(Ì”ñ72x³”!6+°EHߦkŽ¾æãâê°©hëjGÚ5]xu: -I¸6rGØ<(q~Ÿì "lŠÎWøà~ÒâJ‡Ìz(ËS‚€I‡Ž—#béìdýkadçC`È4¥aJ=tD-²•Æ䥥æ4æ-+™†7°œ^¶³l”†Þó=§A„/²¹\@"rŸ¥2¸ÎÈBFl¤µQšû€ÎLªÝíÐÿñL©Ì.jÈ#!ºŽ//¢ô9Ä8ÂSéó*uåëßFoA/Î%®roVä°Œ«¬èí†9/DÎW9i»{^‰ÎÇ€í†>Í ßן cxÈò;úµok¤=ÕP­J-UbÆí$ ˜P•¯ °.•Šþ„ÂtÏÎ-ÒuÎÌq”«îc»g9·å½ ß³›ïñ–ìžmÃ…Óc9€5eO…-ìèž°äâ*o”Õ>I.{Áè¯ùn²£/untPlñ3®Ãéñ`æ³A£…ÑÛes—h,0cÓhü±'c33ÛÀÈŸÇÇÏïãˆAß 6‡³ÖÐHÎN”M²œšP«F¡nu•5鈈A‘>»ºŠ>^nû–VgÔ?È‹‘$zTX…z ê¾a é{ê­@Á˜åÙÌjÍÛ -ͺfÖ*sÝcîïu:}㬓ËÓ¢¦g*oãNRÖnʼnG,y»ðЦƒ°äy ÕD¼h«’f§wÉ?ÈΑßþwQÅÁ|Ü›…ƇF®:A*Œ4*ψ‚”©›eÔý±0õjdšJ”/sú²æÔ½º]!‘ÉÅ–”õ!ãWJ¾ŒEùbö€î³`˜o1e¯C'˜à[TMkbEæ{X;'£âxêÑ‚ohùä•.EÒŠÑ2¦äÑ«SEÐ3ÂxµÔÿ,§µà=ÏŽÛ¢‘[6ŒBØ›—pj„ÁAp %™÷‹çVâ9å` O ïþA¡Çä³|žØpÊ® Y4Åt Ê~Ô‘a¯˜]¦,0KðwI;,MœµeÒGH ™ä(Ù9ŽÜ -rƶ“/Œø‹0ÁÖV2×kwJ‹NP“¸Á žA5ô⡘-{ê#vbzaC,p³±ëjœ¸{h?û&1zùõ7\))„&¾”Üôq,;Ì¢dÒnÄFóÕn»ΪkÙtz›çÈ„z @‘z‰`B¤¹¦–A²$œ¢šˆ|ÉÉËò¦ÝìZ† Ä¿é#ª`—PÀàšo PÙ"ªúºšu :¦MÂ’õ“¨²„€¥œÜ¹Ã Ät†¢½J6—е„\ - qÐâM°ÝZ®{È$˜iÂÄ™àî 1aÀ1pÉ–:Ìž.O«qJ…È™M#ð¤y `Lø¥T_´€Iè(£ì`¬Òuð©-â’´+ -³¤c7ôa3J(íl‹¡ãcq‡öº*­ð;^O#*®ýt‚˜[1_öèRºÀ ÊRZÙtMb€”‚Æš(3_lzõð³Ø´·‘5oŠ•Qa‰Ú€Î.w¶tu䧕S!Äx -Ú’?&kÀ9Ì•§’¸r¾EB:i§•Àî™×;\÷X¯ÃÖü1áÎQ…»þ`¸Kr™2°0s*ªsˆGôÒaÊð.HiˇïŠ"®ÙÃ2=ÇñÅ|æØÜY­Ý2ª8úEýþÚ vSø¥þ*|'^g¨gE| LÞšfJ*B­‘¾C‡d|ãµCú»·4äÍ°PÐI&rG-O„i÷ÓÑüëçù¦»oð±îm7X5æ¦Ê2kàm_]u5¹õ—Ú£«<NíÃ÷Å ^üþÖ£¯ï“˜?™'Ð:¤#ÆðÎg/È£EÁHŽ‰lm% ¸xMÚ™îÊqEÏ‹[MZY¥d"±Ñaþzœœ” wÂŽ³š“ÎtMÀ¢ÎfzºLPƒi{Ér’â¨~x]Ém™òœïz*·ZÇò=ù5X÷ËP’¢¸L­ï4Ez¤H½)'¯Á‰qGN\ƒY‰mÄráÄbnrçq›Ü;UuÀ“Kˆ2X(¿eŸ[-#˜%™3?L(÷pºßnŒ·  W¹<[üߘ DxæJ%êç[âGüý% s½ÏÇýøs íëa¿Š“gë,õG4ãQúí+jõÄÓ.¬¦•2–v ?}J[˜ç.@Ú­£ô“{CÚ¼¨2M_\t²žO&êNœ™ŠH¶ˆòe‡ÅU,¡opˆhé+¦º^Ô2ožå äÕ %!?Çw=Jó4¾¥ñÇí ácƒÛv%JCácØ„ž‘0² Ó«ˆñ‘¨»4Vc´ÎŠL^ÔÓMû‹(C—‡L'5²g¿þºaBl¥‹@v¿,é—:|¶À”*Eê…G0•ñø”g24ÅÂLÍJ½&ƨ)ôä:Ýy€ }nÊ„SEáK|àÌFUS-®L0hà©BØ©ÞTOÑ£rašò©º~ª ¨j#¨H9#ð‹ªãÑ¡ë±6 W‡ªnú,E;»ùñë€,Íô!e¨âÖ´J!áùzŒ—­„rHÝ<«;Ñ/^4X= x=¦%ë -Ç£A š¸ E„)A™ !Bõ@Ý…«ö N5­ÉŒ´Ñ`!S8—~ÖÛÖöYC”lüøϲSš´ÝoyÉ­–=ë‰ÑÀÅCz¥ZÖ£‡D"¯†òsE÷glò 4,«ä é”–¡ã;µ  -c:Ó‹“HñþEÓ`Ž&ªëǸ(..(§r -¬ÔŠÉSEêAíÃøõq®LOÒü Ó'ì†îª¢_áÉ!ì‚Ô¿ õ>O`~\Þ£Ž3x’5z\qµ n $ëÝ+Ò%*B§H.¥„Æ ú~ì T. $qÇû£ ô ÷hKw¶×D]ü‚ÒqËÂé™Ù÷l_Z:=VF·õ•Ò?+¾¹36LRh{,…¿vÜ9.¢*=”z¯€Ó4…VÕÞI›ÒÜ©_AgZýq¸tòŸ/¨˜³ïœMÁñ5#J†:×Äý§ L3h A-GŠ; -~Ž°Ÿ0B® šÐ¾?Ê‘ë¦ÔéòÞô^=•ÖÂÙ›B@*1i8K‹`»‹R¨w×ö·`Ýç”5Ï]µËœ˜¬jàŸì´ÔÚ´øÒ’J‹ýzŦ x½s=œÏfZ [ÛÏÕµû#&·å¿LP¿ß:ä kw/œzéó¾4^J‰?ØT†Mÿ`Q½lØ¥d`³<›¡[ˆÙ"œu -êöU·Ä. -KÄ„R’õ0G#X¥øÞÔ r€e–FÔ -Iz,@¯‘Œ¨€8#ÐFd#Fp<Ä -Ñ´1Beº©mNŒÍè3=.¸õE‚ªÅǯmÒ:‹UÏÓìòš±‹U9âër΋:‹ƒc8Nù8 #1äð0rZ(9•'ÇEñ.[“•ù›+3fËÔt™×ßn3JdÎbæT}σ*wZ÷œ,uMTB®¢ÃîÈBŠ, Ù†ÜÆ… —ÔkAÙ‚Élr•~3k4¬Œ³%±AÅI)–&F3òc â*dS/“ª›!!?qô)s´`n7l*¶ÁS0ž÷-]Jbr¶Þœô]ùp wò¿1ÕžÂrAþ2ºó+d¼Îh‰J¦60ÊB¨ ’P*_¡7s!m¥–&2Óå±È–Ô72ü-µ¸qbq;)!“3Ì‚'x,í‰Æ$X£`Èý’Ìû/9£çiŒtc2q'-Øq^³Mžcƒ([~źª-Ô»¶hÞªçýU“gñMŽcZ)ôlõÉÕéC†BŒÑUM›ËžÿãK\È­º·Õ’ÚªWWc¥E‹<Éé¤ÊÄIGVdú¥Y/'8ªö‘1±1Í0<˜°ÏŸÞ–@s`‚¸ -0“KÍ´n3›Ô )¤Ø •ï´p× $WÚÕJOf-³‡ -…)cû³Æfëݦ–.#¨ÚËoÅd‚ÁžÏ{wŠ“$©ÓDX0V#y,Zû–\ÈÂOdj™T¡RâF2§D°Í?{¥¾ùU<#øœ!í¢ õª ;¶³µCâ‰5…·Ü\4“KµwPŸ´?Ë°ú¹GèrÕ{Ÿ‰áC¾À ^ä ³áÂt ±‚t‚潶 „}ÑkÌ~+Ê¥‡Èò<$; ¡ÁÍ›ÂíCÀ+d†9–ÈYØmœBÆHWŸh–Œz‹êë'ì9M\ó˜MòPµ×Q6šfóè™]€tÔ6ƒ¯ -ÞdF¼Å!ï’šBú¡û$À ‚Lzž~´H:ŸÔ± Ó=xçüÄïÜZ\—-1ÛÙÐhl¿8ßœKÎýëE»œñŸ38o«òæ>_,õËß©ë.þ½Œ³ùšgK•ócÜÈÁñ>e¼³õQsÒTp>7Pô¡Û*=>Œ`WÂHfÛE°®,Ԯ꿳BÅ+:Úê¯É_ NdMeÊðÓ?_­ÄQ³KsL -qû"§& ~¨+žÌ¾ýoé…,.H+ÿÑz‹ÅrŒÌ¼Vÿ]ùˆ›ÏùïÞ·;v¤.´5FäÜ z©‘"nÒ§ƒ{ vjw@΂³X-Ü¥qÚ¼ú?à—ë_¸Ñ/¸"'眵uÔ„ÑMm1ã¹ 46kd>hÝJ# -’i9-v–2|Å„‡Êµ§+ÊKôÎw/K<K·)N'.·{•r»}lE,ß/û§(Ø_Š½ý}£ôÅbÖÕп\•—Ð_¶ßcÇø›ÏñCè'ÞaÞfð|ðä„gYÑ7A2¼É 2ÊÎq{ŽÕ:Do4¯Ñ2Ž°k3iÀþ *B"{,#ox%‰š2ºäú·u×qð<‘ð™€ÂEÚ=#(e›­Ì.(ÒÀo'ëÛUë~ºq\_øüEç²õ6ùøj§Ïµô"ÓÙ•PÒ¯®umÌÓŒnqµ]×ø+~™lœÁ¯¶1ì}ÿÆwâÜïÝÂZ>Æ£%3|­aø 6”d·¼ŠÅ,¿ð°[Xž [b°=ÿˆ>ñaßy^Ø+ƒîB~…‹dÂúÀvŠ3Ÿ@0¸|þÉ~€9öç%Æöu{u·në9^Æ.¥ô÷¬dzÝ=ótBÚ(ÑBôíéæ³ -†ù¯Ð3N t´¡½97R§Ú"vÉQ-”à7ÓOÞÜ#3Õ"F/«Ë-ëeOMÌñgšZKîÞ(vN÷²Ãž^tµyàûJ×qMtœgt=(Ù1¿ÿ‹(C!J•_&ɶ+Ýß]|,¾løXLêÊÛ4óµÏÅ\)®øû Q=%j[(“h½œBG³iÎ}ƒRŒ(ļí”’þ_ØVI]N&½Š§ÿ‰2…ùãÂ,·0¥ZUG–h‹u2x;ó:?`Ÿ¿Að^càì›VBa}hÍ ûé25hùÆt>^S’6Ê !ýœ!ëø²$ò6þ\9âxXNûø2]8ù)¼ÔÜÓ'® síâG©ÅšF@ Èãl³­×Véz 0_…á&CóðšúÃ)(ùßÝo k„ï¿;£é%2Ó»-ÔÈ B/—¹¢IÏðóâO›¿Ú -»”?ŽžD… P8&(%¡©ºoe’Ô(; %)SJR‰éE“^”dHöSaÿç#"œ3bz™Šµõ3REæAIÂ)ªŠâ¯Ø+{XÍAíg;Îë/WX5T]Uyæ|ÂA*36«™çU©¡eZn|JÂU5ó ¦lrÙi yJ/Ź¶¨\!13D.&S§®Q™SL…ÚH’˜v? Qs06‰”*ÛE}l>\„_B¶¦x@¾0æ-a…jÂU)1Ù3%¼ /¨Æ#´©ŠjÊ–¡]Šù„ç€ m*[´Øû9(ÒkKÏW©– -¦Ç*(ªý_#Ø÷L2ð…ßèŽRAÑg¦Šh¿ï¿§Šˆ›lè#Nl„y}âtãŒS…埪’pcñÙS«Æ§jO5¾ŠIÄw.øßôÒvÏp:páŠq7v —𛪰ƒÅ -FF9‰Û¾3®0>ÍÃ+ šЄH.gø+’| O©F¢Œ"E§*™WHå&CÊIw¡!ޛʬ3}˜NóWR‰¢‡œ&,=ÈŠ2&ä8òŠ×H~ÚŠä"VB>S -íf -’ñÂ"¤ö•„\¨JŽ’À )È ¿–„h£ùØç¨Ô‡n⭆ʲU\h¼7>î4΢Ü1y©ÎѼ”U˜$(R©‘„­ËK6¡æŽ dX–ýF˜…4¡"ÝÔX­Z2–Xƒ5G1ø‡ÞáQâ}âó*^ž8kCõY¬îÔhZœ¼rgŒ×,(ŠDIh¸¾…È&· 9~ˆpøso‘Q§èà¾BæR5A—-VpÀz"oÄOàTÌ$üUÃ-LþÔPÈ|Z›qÕÇøª¨ID…¬#m†š‡¼~Ãt ‰‹˜›½8B\}sN*”« -V1|kø&$§ ¾Ëv™5†ä1;崑ĔԌs’™PY%d/Æd.2yD ÉHšä3’·Y:‰t'U=¨ò¾¸"Λ -YW -×ÚãS«àNH7ÑrÜ"„&BwÅ‹H5ŠÏ««EñúN£Ó_¥F««qq]{I«ñGXU"Ì´î’64HO0‚§/ôŽÐ_ŸHùŽ`ÄcòÀo"k MœFêI¼¼É„G³ø[€ 48"+ÐIã¨Ê5/Ð$yØRä„È–4m*Ï -%^J—Y” ¦£^ö”*Öª2D¬:L)çoû#ÕÌÌMCZ„lamÆ4¬,‡ÛHyµcËÆÄÒÊ©¢46‰SÄ%6ñL¬D81ìCìò‹bKñÀ¦š„!rCÛ%mé,¸,qËÄ0˃ -’’O’Ô'G"“3•«hY;JÙœì"gZvÉyÁ‰{3ÇÓ8 $gËX±ïŽÓÙꃧÇÛµú–Û–‡¹'8Q¡ðæ¨áB&ßNÕLn27†TïÕã;„ñiï ¥ÈÁÁú+ŸŠ‰r©æ ¬»X7Ñ9¶P%L(B©ïÉ*HÐf#vZ|‡aÁƒ k´«­½²J!í:‰¡¥G‚ì*™ ¥‰æîîÀ!-“Þ#¡ÂÕ‹­ÚÃÊÃƾe“”»"Ðññš&”Œø^(Pð w«7Õ(ŒÐT;Èu -ú#Y¸[š¸©âôªhÊôÅ*ú–`ľ™éHÄçÉï}¥N|s -õ$ßm‰‰ò6ÿ¯Ç@Â>ƒj§S˜Ö -FUܱR¼3†¨yÑÖªâ“Åi±`Ú‡ÇKa´Šˆp;v šo›Ð.‚¢vœrïxèiK¯Fl—É8''Þ5ö¶Xóy•?¦{*ïl³ü—[¤ÉŠäs3|&ÓImj7±÷s­¨<³Ã¹iÿ\„ôjóÏÜå‘ˆÞ  -¢Óœ|mj,óbÍ]SÇÞ}jæõk¾¢5c«ÎW?ìÓâ|†ê3?ç®áB}ˆÓyˆ<ôÞœQ$vP"Å™³î@±ŠÍTlfÎ? eýCȦ¥ˆCc£Lj2/±CÈæËC¶P2–)Ȭb™7&½¿jÈåôYÈŽ’Wåk¹Jy? Þhs²UÉç›’ …š±/•Ì.ç&/Šã*¾4‘²ˆHw0¡ ‘‹ùPÎåäÒj®}Q'w`?¨£œÂ´SÈeÖ°ŽÒK´›”x64mrŠ= wòÊØÅÅdÚºNg•—–Э޳(XFûps2$,Æ‘à«œDˆÁ‰ÑWŸ9cÒ -1ãŒäÜ°õ䞈 ÜDF¾Ï32•—ŒB7™03ùdî( "“ˆ 3o¹˜¦#†sâš™Œ+µÂmsÿpŽ« ZC6Š‡]!j`ðh…)Ú%BxÞ×Ôóã4š…[æ ÐÇ»y•&FsùÌWâ061&´Â©þ,”øÒ·³_" -Q¥î½‚†ÂÔD܇BÁÝma(Yd ÃÔZcÙieûd¤Ä½c -®^$"ór'Œl×%”ŒBf2" ™qldvDƒä«,Ì6'Yf¥ żÛÔKæ±\ð` DÀ4h`€`ÁFP à€[N50^§Ùø+Ü.oŠÿ>ePY±‚"cÚÙKA‘K˜ýZK¡05¢Æ[—[áí,•TãÂ;«pÇvŠݪëNe‡¶¦j¸í¦-¨XÒQ‰·£îãªÀzf®Ú™·=&*Œ&>–F5Ü>š†Ñ°¡t›ûÜceßüÕÉ>_©‰Ï1!;´‘ì–î®W š¹k«}SªÉA†¡œ -E¾IH—­äÞˆU…ØΨ”¥dèêkW˨–˜:¡—…Ô²‚ÞÊÔOUoêZbЪsЊy.sD‹ÚF&JØŽS¬¡ËÉb‘¤sðF0.ó‡×»‹”aUé- ’ÞîD¡)¡»rÐÿ"ôUl>õQ4œWIŠ\F+ 첟f?c­ážºD]y63œ(},˜ ½: ¥ME]”n°›ä‹EãñJ«ÊG2áblF¨ Šß„)‘uÚˆMñÍÚghl¢Q ±š˜1l]³xäTÙZqD*/¬á¸="À ^ëÉ$ÅSå9W‡„YO±%4ë7›ëfí«h»¥äȹR­DK˜™x61õ© -+‘ªI,§Ù°BG‹Í6YË¥[97Ÿö*ÜZ¬LŠ7wd2nÌŠDçÕʆÙ(xFÿ¶µ6Û—¹¤³ƒËe;ÃeŽ —•ÐŒì‰©ÌBt±L¦²©Û2Uå¯1” 4†²9Å9 ¹cœ ù£š³Æ@JÍí°?¯ú‰Es’z¸K¤sÏ0Ð;þÐJᆈ\¨æ™«¶—°µÆ+<žÏ…˜îªä¥?Dêu%9eŠ¤ònUô—œ³Ö-kó*^^Õ -–˜”3r U¥D~ŽF(drÈ´1¿a‘Û#ád8N™$ -’Ç]Š›64EŸK­ÂA-U}Ü’„å%uQHŒ7+‹4ª’ƒššQI¾’XˆÊLß ˆŸUŸš¾ÌÙOº½¡ x7J7b)]5†Ñxã-KÜ^O2 ÷©ù9!Ê¥¢¼T6}N£TO¤¸_’CUùXñ–…èQpå]Òúëp”„93R¶ÐXhѸ]¡|è%á@ÔÓnÉâL”®Ýw¾Rí)£†æ\ F«šd×7)G8T?—"Y_õ%QN‰Ì—M<ù‚JB„A/Z‚첃ofGî¿Ýý§C±êt6zw Méç-}ô}”‡–Úœ#¾­äÊÁ–ÒX(øò3D‰y’óßD“@_É^j‚F0HªÈˆ}·\\ê‹žˆ±½Z\Lc -r.ëã¥æóëfŠ|K°¢Ä*è&yP"â^'®¤ôJòpüXì2³Ø½‘*G³‚v+B´9æãëœjÝ7PFa¾ä ™›†*GâE##„®²(gK±¨%¢ÛĘEªDvpYÆy yKŒòȤÔ$i¦‹Œ‘`ËNJ§Íò#ìi©q½$éåÁ ßÜî¤ø˜Ü2”©ô„Ôì*½<9#ã {£‰™ïH)b̈ô\ÁŠ¡~zS´Þà(›ˆzT„â†VÈ"íCážDL—ÐWé(fJ!Ò;Y” -Š‰Üt±P°èœ¹”©ô(‰ùh(ÃRMý#°XìÅbö$TÁ%äòdJvKyc˜KëÚú²peÿ’Ï‚Å5N…ÍE3Ò~ŠU¡6qPÁ|óVMº„‚a©ri§Ä ïhŠÚÆ[I²âbZ šDÚH´ôpZYqãñq˜Z9(îc^Ô`ZÉpvZ§Ì)ìøÜ ±„Ü5vÓ¢‘GÈ; ¼’Rr÷ «no¿¤(åÀÛ¬Ÿ^Ž$C¯7…ŸoH$1òåC¯Ž{¬ÕJ¨Hä1ÊPÍj$iÔMcBµ¾Yv%Cv”C¦¢Ü• ðáT¬úkîJ8üx[¸oØJ„K›ÍMCµHTãøŒ²¯ÏN¬Ø«¿f¤ê»*nR©–e¤5æ[Égf¤?_øÐHSò†¨¨U@´²ùÊЄÝUÁGØ"¿Ç…tîR™ÁÔÇ5õ ·wÅ0šó·Î‡„݇3ž)îûg[;§‘¢3 Ñq-^{9/áºIGîá5¼ã!ÎNóÏãACo³Í£Õ¢LjÂi8ìbß\$LçµÏKZ¡hŠä  ÷xäó´ªRcƒƒöCUa]kh¨$mœ"jÅ­˜#¦ZKÿH¢X“ '–Ù§å!eµI…”¬_)ßfU«WÍ?ãHŒ¿ê¸b.?ë¥8Ç$C7u¤GÈØv‘ÑŠW(¬‘6c—Š»H¸C·Ê!%q‚?3lHÌšWŠë —œÆE;Ø\h,p@® šÑ$™+!deDEÆ Æ˜fS‹9e9c%òšÆc¤iPÆ¢ŽÌ¯˜Ovð¶bs3JÔ?æã•g*V5ÿæBab“¿lyIœ¦~*¯f¼dT¿ö.ã¡!‡qu~š8ÖsRMÙ«™Ç‡üFB5¯ƒ=&.£z ©ªàà\gˆrrQE¥Q…,*µ¤¢0‰ª- ‡)Í­å#Ñ -ŸÒÔeœàN¹õò> zÝá™*<¢jP_ìI ãE%ò„Ÿ†tǤýÒdÎ\35(Î!µ:‡äiZ1ˆFÅÕ¨¤æ‰ÍÌŒcšÌAÿHçë2U!UnXVÛôôcõàFÉ*8u–°&DN±ù˜pêPÍfG‚ÊäxøæCc`|•‘·¿ y&õYZ²´Ê"sF>ÇÙl9œ¬±Æ«pΔüÏ6¢Ût¨Uwz²à à ƒü z%Ã܄ʸ?}´o ½t°$N3]Vy„KkÉ9©©Ó$‚C^®J‡ñÁÔ0x¨»= ?ï‘ïð¢Â4u>‚ÔAXdá_Â÷&Eóø<êëÑ:¸ u»Œb÷†è’O©„‚Ç%÷ÒF­òÉ"”*>¯¡¿¤òI†2¯&pœ Ë4Qv33ùcXˆ*ÅB.J9D1L k ¶'ŒyPCøåˆ.´N‹jhgÝŒ¹°TPÅ#\(™ Eæ€1²f9`Wµ‹X‘¡[LÈ%ªTN‚ÈAYq×=yEõo:ô§¢bª§¹ˆés/!rÈCÑ@’3dËT ;ņ -ùA&²iÓA-"$wæ ^Á1t­—ЂF&Š‡só ÕácûmIVÁe0lmi;î*¢Áih¢ˆBå*2ÄBó¤¼ rm[‘E;‘;«/ -33ž“«d(i*!„µ^1‚H«BeŽF‚^TÓÇN¦yBÉ„êÁ'‹‡Á¤M— c“ÇpiꈔhN’,ÔÊ2QÛ…Â¥+~«›‚ýòAAD%.Y7åÞC,7êƒÏ#DØ4ó'tw@r6 ²‡5D^™(%WŒÃæ°[#(fMùA‘M9ˆFj¨¬‡0$8*UT'{Ó-È*šx‡‹6²¹pO¨Oe$ÂZ*P´""i¡x02cZ5!ú˜Æˆ44Öÿ„h¨ØA^) £ —DAÚÒp•È¾%œ-!Ç(¡ˆ•GÕh,l¡GT,TÁ’‹6¡Øà ryCR·¡ëª†4àThŒM%ÿò*vì ™‡-ŠL‰s*Eš²Ø® PÄðV1õbǾEh:A #ž%q¶”$Ñ™õ`<ªƒPÄbU&|bsÏÐÄ%Œá8ŒB)U"˜ãmÓPÃúëÝ5#tKXHLÁ·¦54DjÆõª*)‘'”æ{ÞÜ¢±Û„ê¬(|d#ÎìC›âÊ4$þÇR‘³C% yMªH¡ê9C* ŸÝ‡"WÕ0œÈ½‰ •êI[[Ê_Ë+Ô»‘Ò´uŒj6¦µ²fqòc ÑfÍÔP”ÌLgZUhâqªÐ=2®IÐ"À%0f"¸` .xÀR ‚ \` ÈJð $€ ¸€:ð 0@Ê%ÐÀ*p €ààœ$êC‚ |@0¸€@@..‚\ ØÀ6à€ ” h0‚ @à|Q à‚\ !h@Ê@f&Ž$Ò‰q&yæQ1²~á©à@v{A;hTù3A­Y㟨 îÕð ,°€ 48†5ˆºFNÀàh@–ñeÌ„Älµ 2ߘA§„'W&hýÂ7²a8Qïcí(­¡w6ú×J —³Ó¡F""¥4„NÇGÙE"ÏÆ1bU”ˆ+¢©Õ)L´Ú‰ÆCŽ‡‚F¢{Pu1Z™BñztlU}Š¬ÖxÄB¨6ãT ÚÜ›F±ˆ´ÍMáœ66>QTí5“p.ó.qªG°ÃQÍùmT&AŠm™†ÅÈ©¼‹ç Vp0Ò<|дè,¡l.¼‚˜¡:ËûG"%}PTM¡XfØÇ_Á딧‚gz@ò -E$Ã¥ãqü^ÁË8‚8¬©(ÂÆ#ò"S2!¾› ^J$_”žÛÆ– ¬–’ê§<±*žä {(ÔRCà - ƒ½XXÓ—È/R|PÎ'Èj¨4¯ƒ76´ BÆqüÐ*FÊü~bìYÒó0¤Ùhä ¶›„kLAt±Ÿò'^ -ªº8¬óÁ­Ç ’ -®jôa‘´D-™-•èÈ-gŠjšÃmMÁ Ÿ°øºÈÊESï¤:•Ò+LJº¢D=ñ5.ª‰¢o6¡¨%B©EEËkÌ—J\®ñÎZà‰¦Xª:V ó=9õ÷üšhØ´ö©UImM§¤^!’Û–Ð'™/׃¹¨Ê“[ëç3'i5ÊD³0ÒšŠz‹*Pö>êžÊŽ -u#^”…°‘v=X…6ºl!5­ÃXØÄå ®xP)‚n\cÅ>½¤sŸ)Zç*örɇmæºùj­ÚnB+UIpf1 -mû¹Ì¢ê4sÞÆ€ðh{9;OQxe¾žäÕÊ÷ñÏÌ®¥s—9•Î¢R¸׺dBìøAúUö„p€TJðúfEç±æLf' döG㎚@­nÖñvu…r×t°Ò¾fÔ/ÁD¬•áý>Õ ¬aŠN¤°s -ÑGêÏ?MFjšUKqa…:ËMhÙ‰š z.Ź~Çú¶?£H¦‰×Cªzeÿ dÊÝNL¼]1!Ëéw¿å¸‚4ý´0ECt,«ŽšhJ„g9Wöº× -Ò -Vò†ãSÃ’+¦]ù•HíÊJÝDeÑœé*v fÙ«&ª+GNOjýHVõÅq¶ì”¡eÿ¬DíÓÁÈ8ˆk[É~ÝžcM fÌ™jú,<ömV–£‰JÄÄŠøŠB„ÚPÜùj2VŒ¯ÿt¤x'GŒ+6€Slá–ÿ~‹êæ.*sº% )ÆDT-o+7çWrÛ8*E^Ø Ô”ÍöK:~*…ž<«"1ò(ý󻱦·¿p, º[qà¾Ê‡Ù;Ç­D%âÛÚï­oï¹èG›mßû·ï]@ÆšU Þ©­ÝèºøPnh"¡~¨}ú -‹? MÆåî3Në´³QY*¯.t/æö¯:Zˆ1 ¼©òö ¶ïF˜=öÎpe–žêX”KÛ}·……¢ÕNÒâðÜeA|[¼³ÜÏtÀCטKÑVó5 ôná,ê:Œ=<Î\éj{K+` ‘†èÖ¢jÿº„Z ÃõÒh#Ó‚n]æøÐ5CâeÃÞ(fR$Ê-d_o^äªÒvP€Š£`í§¢nHÄÖ~§÷±b?.ü©@û¶46”ÑøUЉ/ýÖÁr¸ØS-D@˜ÊQXjƒMWñܯþc]4ãaÄf@Qæ剕x†>Õžõ#ƒõÌå mè5Õ™eA…Œ6&´XUgþkÌů¸˜Ó2 ÞŠgŸCæûB¦–p±‡¤Ä:Z:Í[šA>-¸åèpÚ»¤heŒcÏëW3¨¨‚·½qº_ð -HœP­ÜW([P>u®èúà/ÉLêk7 -=Ëšy€ ÒH÷ö®¯ÞÌúò#©/ [”N/)âDZ˜sìÖ4&ö¶ix¥6¡Øó‘îQÿìöt€HW®xdIÌÖRUdáÄTÌÂ%: ò{:n7ÝÌù>q©`(CPLk©\L¿5tÒ¶€]þ6$!o~·EÍ·{YþFÙ4Óo¤;'Æ -#ø†ÿ¨HçîÜŠ{¼isÓ¤‘•Ó…É*;¾ƒ.FŸ”Qñ¼F8!½[EÙÀKýˆ?²2¸p«Y Ü::ù•Š,ÛoAKœaϱ{õ_ÔdÝ=^O.­ü¬9wàfâ ‰÷ˆuž lÖÚjN+¥a@ߊ6,èÅòJO”ö£4þGGlÆ, µný{éïU[•Ž‘õŽ×S\1ŠÑ=_ŒÝ>sÅšàü+Ó¤6ÅW·a“WÿrÛÓµÁO%$‘¦A®:ÚŸúp1ýU𤧢ÊldŸEYD“H7ó­šð–d˜G=‡¼&¤¢ØHÒÅãNõÓ¡íB¨m$mzOHiS2]- ω¯9^·=iƒÕ£Y’^fî<Ql•æ…ÁLÓœ¢Œ€•õ£fåDŠ`-NÞ%›5¸¸Ã÷„«8±ì’@ÔŽÜt§²gêòL¡ ‹y¤¡ÄL~_vkÙªù¸iÖd<÷a9†¶Oܨ»CÖÐé -zááä™ê£“'‘ówÇEË•=´a·>Ú£'àp µ17ó±ÌûÕÙh¥A ˆ=M¿“¿ó«_þnn=Ú•±+§sWô›hzrn­'$->ƒ–Z,AáN¸º¾ãï¹ûi…›·ÕñãÇü Ò¢{üçª:ìC3Õœ©\´He$£‡Oçí@fÇG$=ŠÉ*uš²îÆ·ÃDå(âÝ}¸ŒEÇH-¦êKDÔH#ëBÀshbÿìi_<¬œá»4+æõó 7|yLµ±I(Qhap¾ç ÒœEª¤Ö¡9gOòÅŠªÎŸ8¿ ‡$sŠY[Q¢Ÿ(/ß?x%7©ìvLW—ïJeìÙ×0ñ~l;êt…Åø´[–`>îEݼ¯”Nz-Sc'ALõ¦Ø뇞*¶z—– Í¢Ñ×.!ã‡"3@—‡¥¤å; *Ú °h®ñÏTK0 §àþ îõ„S¶¢TJÙ5j@ÉjKÀœç‰Ô$J³È×Û¢Á÷wŸ>ÂgshKßqÉyÞEø@z+q;à -Íu2½ ‹T?O¢ °'ÛíRxS³á¾þè6ìÍ*4¶Çñ«¬VæØ¿óä6JU{´E¥îhE…Ó:Ìõ{ô“¥fÁxÀô* -Ó‡áÍéÏè@õÄâKÌTÛÒ“‘Po0ÖŒÀˆçÆ ú `uÍ/z ÁzÅ€uÓ yr¡„vm o}Ú)ä|•7ú•Žs$zøѾÁI¿³A.©Ñöäp AÇG[¶¶J<æA°ö¨ÖI!…Ž™¥UŽ=Ëáž»2ý|©!Í‚=cIìCijiŠTÐKáûçï‚ý¹ðÛ\‡:aÕ 1·7dwéÂã"5°ÉO_õ‹Ì5sµMI’M¡êÆaCo´Fß…b´œå60º2¹q>ðï+¯·ë<Åo’6îw›„Þü¿²ýyfln ÇJÒRŸotL"}o˜~ˆ ÍK;˜Ç 1˜'R¬K:¨ôwèF™d÷MI)é\íýGK,ƒ÷*I«Ø%5_•‘Ùb3 E¸eI (;r“©è×,—Y¸ ¨¡„MÖ ³«ŒëŽzŒè¹6µ/†®4b_ŽÞ² &¸áöì8T“Ķ¬+ÖÀìT—|:𡘓%b*°Ë€{Qp>>ܶâóEôeÉÒºÜpƒáåà› c8ÚQHlûðE=¬9Ñá&”Ãihœãx¨ša®‰BYµÔ1?¥j"#2ˆ˜ö·ÖV?e°5)¿wˆۢ €ƒÂ< }å$Rð×íy-«ñŒ62Ý<Ú/¬Ö© ¸qNS%§ÓÁèMˆ¨ 1±¡§4hÀÊüѲð×WMϯ³ïâÏ¿K©à·RwÝvN‡ðìA¤[Òù®6¶ìkõ˜à­ñgÃôžb­·îòedVüEC€ºãÉÖÚ$2©üÌ„ -ÑAFaX[H…ÜnG-w¹…YÿUNƒY=D"ôqj‚„ú"|¹ˆÏxâ×yGˈxS¸ ¡}ý,vZiPõØáîPµÎÑôy$Š)Gà?¨mE`Â\ -ÙkD­}fòZÓè¶ü\m“aÇøïñlRahÖÍh®Õã5ìAHY Øju -± ‰G¥(;Œª‡I@-8îРAȶ}ÏÁ¥u.ÇjvÚhS$ˆØ&ú€‹DƲìO¾>ü7ûhÚ XX°/1C[ß@eÏ’wÑ^š7ÖÃ@Ç­¿¾¶H9 -Û_¦ß8ða*Ÿ‰ëš-dS°”)Pþ嬵ÓÇÐršj‡ÔðA>\t€V«¡Ë¨ã@~i|æð¡ÏÊïÙ˜ÞEÀƒÚ’ØÐ 4êŸ:X¹ƒÄ)®ÓêŽ5`ºÆ^@ù?Ó­Ýë|Û§~ô¤bñmðx…˜Ç£a_Á2ªÑ£‚F·Cy –^è=Ýhrq‚£Ù;®Ã¼ -ºy.R\ž¦MÕ4Šéùy¶g3êœ[ÜŸ…ßu\ÉòHͳ©Ä»–¸9yƒËÝ:œUɧ¹¸îzß¡EgÊv_ÅA"4‡•HÐTÐå¹Z7þðëE¯WÃ4öÀm·® ¾PsQ±%³ÑOÈEŸÂ%•R<ìúíIÖRùÝ8¯ö É€^,'æ+¨×Ækʺlå€R -\¯ -Š#£On‚Ò¶öéëhÓ-®fŒdtMg†Ò}Q¥zØR’úÔžÛ¸så«[RÌ‹@±”ûCITË9ÃÎàXu^þä†ÀuøÏ ŒhQsë؆ÙhC9­Ö%9ì“`©PqÈAtLÄóÝCÆ«#»¤Æžc¼ò6öåíX¾y¢KŸá¢Œe±F$H‘•Ð…%‡œ°¼–óÀ"¿uëÊ5ÓÇ=Óo¨k¹£•ÇÈ™hë®”³Htlg0ß.©9X¥'c1 Ã5Ø}F¨©÷WÌ·…†€*•·\_OŒxìc By Vp¨ y× iUéÅ9`‚ßî -àp´Ø.ågC{×ÀU¡$!’òmô=W턽Ñ:ú) ̬K²¥|ö0’¬)™×‰7¿˜šŸó„g V>Û5X¥•¤h6¬–$µÙ§MÇÒŠÊGö‚”ASdb÷fk/qDkcNa ‰ }“ᄦÃ5³oÿ11Ïá%¤B§?]¦KB0Ë?锢°)…ªûÌR$Š_"iäÁÐfs,§™¿Ë>„°o‹žn¹; Çå¾Û Aø€›*ÉÇu„• ¤-¼ü¶¶ýÃZY…é<$ î¥Ç\hÚuGj°µÎKžPv³½”XEÜg -˜œ¨¯ŸdažÐjvN »3ùÌ~šýyFÄjœX -ã<ä’›¨É#mTÄóQ)ö§l³Ï¦•Ö»¾F?&ç‘!Ýù*ïÍŠMD7áü¼ÐñWaÁÅš'(Óñ³i‰³üô…ë0Q^ÂÇÉ>‹ÇSéæ¾îâ*³zöìRØåšÀò%Ÿ&ë†úèYK&]¯àlk•«LéSËk€!³PV¹Išó"¿±²Î¡ -ž¿JœË eÜ“‚¼!Ùu"Ù¿˜w4êjïNùkQ"ÝôÍq³ê:4'‡õ²ƒ(!ߊe=×´8ŽÉ§ºø}…áá»@ð¼'‘·ßèë’¿èíÝƼ½§@~Ïh'¡=åßv6"Ò-H÷M=o: ¤ï AøÁ³$ÿˆˆo7õ›÷€í¡ïÜ¡ÃFüüT¤ÝùIÈìžMÙÒ)$_p0.õ¶ÀÔ»B¥©—FÑ®#ºZé?Ù§œÑºR†ü‡(/9bÞêzµ¿.3‘àÜ - „Zîóß#x|½TØÊ{¼0j“¡nÓNW„3Š–ÌÆ´2‚(vy‡Eh}Nè -,<ÖC£ã¬mÏШ}“o¥`žÝ -jàF+P[HÑmèKè¡`rþ@^§}º…½KìB< 97·¼žcKŽô++ÛŸn"%‹]“iGÙt Ljd’ÂrÑÌÕÖ²YJ–Ä %Y”È–ù¦ô·e^¿Óf79Q<Ñ5« „ zÚ}b,ý¨€èä*žàb>ì Ñ樂fÁ¨[µùH² »Kp)îf)‘ø©±Ñ=ª¿ÊÔC|™Å¡e‡ Nõ¦ñ¬v‚ %Þ ^W_`ÍYpã´rœÛcñŽÖsÖèy÷$ —¿<£ÏŽ"Uò†#«ÑeåSžëô@5øQ‚Ž_fñaHɱdb´ÎСR~_¿KO€½Ù€þÔç‘ƬFÌaâboV­ï8å"ÚÖnŽºAlI9;O˜)9±±À|R>ÿ˜/t~äpBU-F@”#}ÖÑZ»¢`mnÃsÉ1“—šˆ˜+ð|‡F_þ–]„?í'‡Ñ„EÃæNŸʸ´Ào- ³1UçpFžûªäF-šÌ”H, Ö,ú0ð³²ïæOé㸈㢫r´uJfAƾdXva+ºvÇ®,“‘WB/?T2Í<Ä©,Áë› @QVåòzê–«~-ß5–Õ -¨J_lp¬IçQ}–Ä“(ŒÛƒÓµ7±MDÎÈ\xÑÏážþ;JR²¡tÕP©ç?¸Â‡Â}b„CE^ ´ àB–7 ß}îFÛÞû’Æ<›+ ö׈”Ù+Ùâüphžè\1‹ÇªA¬´³>äi°Ñ⪜5³%„°[Eˆ}C 2³îûQñFÑ¥Z¬Û!LÎ*€ -Ÿ%â¸4=€ÑQDPª=”ZÖõ§ –3;âeN™5û\÷Xá—fë&¥ß¨1Ý$.9ÅÕô -»4i0Ü°({ä7‘ûéwÓEvÊ’{òSø{eª=|+]Ͳºµ0ƒ H³<žM^Ñ7Bw«¼aC¢6‡­œšö OXªZ6zx*^lŸéäU+gb•ä&†“ƒ*ITË&›šo±N>/ÃFåëaùºÌ>1ÎÙŸ—¶)ìp”Â2”1Ò¢:§’½œ¡¦d”èáel4ÂÕÓ¡‚DàzÛ%[RªÁ¾dyÿ£Š¯%9Â7P©’¶n¼ª¨“ê|΂'`œÜ•ƒxªç);!bàÅ¿‹ ™¬¡×çIV±Fuͱg2Š¥ ½»¦l(@rõƒÿÆÐ:ÑSšC»¿à€3'\E‡îÌ8îsóI›œ ˜m’K_öèßO³Œ¬°Çà8ë•ÁDh¾ÈÅK_£ÿ?Ú(­0¥æbqmW™±mj ¿–!Ùh8· oa*öG´‹›êsæ¯jYûF+éWÔ>“1“é†L’;6 †øÜ -pŒ4¹Ì_q1\#©^„ãÏ?Ì14TC/!×pWaF‡Á+0:ˆNC¼Z·Ô>`¤…×Ë™ÇÍÙr0í¥¢AÎë÷‡“ä5¿â‡&úãø:u˜ñ”=¨  -Í’{º•&Ó©z¥—0øŠâ#>¸yg²ï´*gW2‰(8ªÃÃåN -DºWjŠ8G×± D‚ý -6XÀQ0gw#‹üÕÎ!h︃ñK_}Ê­¬ël˜ -7Œ]–ØÃ6„ŒÎ¸pæœP5\SeQhÙ\WC¾ŠxÇͧô‘ǽΆ÷ P(¬aøB0ÿ> ZâiHUUfTzœ½‘çzK;oYãú€Z•0‡8ð+÷—-I¢÷»B=¹Ð?þp$ -†·Œ¦:»âÂøôY”̯§ëSz¹žM~ö/²MaÄt«†¨™„«Ùà”'—»¤¦Á5ù£A”?}ã†ñÑwjx1Nfn‘ø–`ŽAÁ¾U„%*f5CUå#ŠîÓ_eËgy—xZì.0nYMAÝ×Ý=·˜¯ á¦pÂPÁŠbž™“~#b>ÝÈ © àôµ'ߤƒ bOcL z/+´ÆI¬ï[÷"™fxäø´—E,½3L¤'Ã}—œF‰“ej™—´L«²©ÀR WRLóMѲ:+‘£à}¦ü·Æ -â2Â|'ä‰×•L΢;¸Ù.>4tE÷dòéò¾ƒ½â_Ù3„§MŒ±ì>¸TÜ®8½èMIà6OlÄ<ßZ VîÌ`t8ŠuF¾ž°S÷Oÿ›OŒmIèš5v`”–†K˜dª/hÆ’²ñ¨~ш8¢£jtS´VAT3J(a÷yîõ ÿ0õä¢uÜ—óàºë& º÷ÒÄ"üxÃGž´×965|\²…-àÓIùCô‚æÐ/ñBöÍFzÐÏ®žq®”aºN'&ˆü@žšZŽs|írBç ¬àCfm¢I~ Û Äyé0Ñ Ù,Ò×Ðì"®Š(Ìæì“tYh7=—ש” œ¤as˜5’> ÍçJÕo+þ,Föœ¨hs¨®%¾·vNNÄ*̦¤…¼¤q¥ŠÊ`nø¹lô{Þ‚JÐñ?ÜcM -@ÁBxãê8¨Ö$b)#rÅ'p“ÜÊDÈ…/g ùñŒmã~¬0n`Ý*¼r¥*–p®/ÊømmãzÎ.Å­óg ¸÷áP¾½L’«z£ÜVwùqò„ƒzX ¨)aØÜE¹M¸/ìƒ0ŪÜéÈÇšæ¶)`rç6H®)×Z{ä‚j\rf0ãÅ|y¡|àÏQöbd8‘5¢žVwþmYO&œÔ1N~SÍ•À¢#È¡Í@GÇRNŸâÈHåìããñXHX~0Á«Ü¦xb©‰n%œ,#ÜVþI+{¿#»ÿMÉá6ö—ÄŽçy]&¿jò9QcRLGªÑe—Ýå,a**R5Šõ¹ð?Ö9|ѧ——÷$áñˆNªEf}ÒåóFᔋŠ~Ðz˜úÍçSî³õìj(­@Dо‹É=yrÒ êÁ@dÞZv‹®“T¾ö6uUà ²›åÍ¢Qb3¨XdÎö’¡§ðçdü+-5µU"…Ø]ân˜Žµ88ãFOíæ,H Jg¬ÿæb)Éæ§/®Ø±F¦Q\;ƒ,Â.•eaXDêuÁªò+1µ"liGM(â4Q¨å&6>â‡{›Ï=š«<&o‘Ôëôœt0?‚ãcŒÌJ8 (ŒZ3º´¹ÔOˆ‡áFš(Ïò”5Éáì&”¦'‹0™K°¬Pïãm<ܳ5+´ž?ÍbЃ ý™Ø瘥£@×s{œ TƸ™› ûíÄsŸÖâ·”(#DÙÿ(LàJ_ƒimá_ð zwrýâNy3Yv+£¾dÄ™–íï/Z&“H"—ÃÁ#”w+ç”®A$V1¹ä =YÌv×Úw{.êGÑ ZªÄ"âWôQˆNÔ)Wãy÷,ÀÁúÙ,ÐÎ-öHÓÙW%¿3§5„¸ëòúïú@¡Ï!sºUSƒ³{/pgœS– NæÿÒºæƒ8?ñ¹Û-¹´C°|`¨ºr¿zŽ*ÐDùR4d=[EH"úq£ÔÔLHô w"—?©Ÿ¢`Ñ›É]]ÔH蜿âÁ(¤ô‡'ùzðÂËÈÑ' 4Yê}¬ -èï4Düûˆ×ÖŒh.Š8k¹—ïb0cy -ÁVc4c'éwšùe0‰`\»±³SïAåXà@'Üz¿ÆM—ûA&6٠هBÓŸñáð¶ò‰5–ò ©VÙ ä·Ž¦£z:Á -îU÷'—kTðNš\6š¦pf]1‡_–`º”Î5Ñ=ïaj¡ãØö®‘„"ÖÂ5ÌòÔP¯ú?OJr26mÁ$Äù‡ØL Ö›¯” 8÷ ’TúRþ GS#Køg°’8Ň7‚nXòwE=§èë\mÝ R£ðŽ¬tþC¾#Y³þ¹Jòƒá›oÐr¡ûNŒ§“‚,(ânÀjëȼ¿ÝL¡Ž¢KEŽF9#ÅVÆrÈ›~ÈX”v'ç3äì'ÃoAÈ÷¥³:H¡ÑƒNÒ¸1§—©¥\b9¯ààÓ²øA•QtÐËá ©&,Ú¤ªiŽŸ•¢ƒ -žYJŽÜAÑCê%¬o$šrk/„0æBøX÷_}6qÊ’á% jð¸ -+d3u.8àXÎíŽÒ'òÆ3gt`Z­3/U”QÜÙ$q-ùÒªO4ø^kÑ<×ÑÏ—µë|Y´.ye¼g¯É”Ëv»œ˜êþxzä -Ønå—CA2ø²GÔØÕÝÜT&21ÍÊ/ÙóBÓ+‡^ѱZ<üqWŽ³ `2æÔþù”¸¿,YÍfúiÅÒ]'z±“@e}2Ó|V–ïÊ Ã?iÁbêô‘ÜÜNgmÏ3¯áO‹Œ6=´ø„’âKŸ9,‰Jo+T@Æc¨ZªQ —>ž} J -øÒ@ÄøàájIèû–üè¯ßo0HžÝä«6@˜Î­ œ8wYC@"ÅU»¤]¿¦|MøÓÁûZt "5OUÃùEŠ…Zº÷Üú!'¹S?æ5üß¡×ÛSŸÜ,cQy^âg±â)Q­nä%Ÿy† ˆÁ%¿;uqN¤+h¸“7€g…N×Ú§/ã†Pñ K²œ@ÿXó*g+¯GR¼ØH&²·h±‡ö[Z=úÊ%ðIݬ$Ù ž»²2ä‡AÍYšœ]Ô‚´ŒÃ<¯r6Š þ}ç^ÑD üCÑç÷Ig¤e;ûêíWýE牕‰Žv²4/¬ZM| %/ ÝT¹I÷<ÒŒ -Á¥Ê}¾s‚¨êŽM°É_¥q) -R|=û lUHñZ~$ö”O„(YrAò8Òé˜À UNº)t$s‘Û⨠-`9Tס¦\^ówÐÏ¿oÉñ;¡úQcˆ0ý‰fy½ú47!“q¼yvÚD({ ”^˜?Þfu®Ó¹ <1âmRôfE)!ÛчE\4"3VÖøù¾QÌëB›C±K!tþûy÷O„²Ëê‡E ~ÔDØ×^/ÛKR£–i†ÂÈ!á+,Œ«±·‡3ÿŠ ›ðPTŽQDÄGõšL“[,·"fvQ䧚ðÈPôÞmŽ©fïÀÃácfYÍ6ÍŒÍ -ˆ_§’‹6Qœ®Iå ³fs}r jê‚)wÉñ˜ÀÙfã °@<*½bˆa«C-f›ÞýškéšL¾ÍFÑL×ÖÝfŸAD‘ÓïP€ÀÙ!<Ñü.Ʋ ή¸C‘ÀÍLÂÙ #¢h,gcòP˜³ù" -ÖrvŒ‡(`¨³¡L˜êlÒ„€ïSšëìPvvâ =p L†°Š¢$:-F3fg'4Þƒö¹³ôÓÒ¥t.Jo®´HZ j*‚³™xj©™Ù ÈéfÔry)€m¶³Pe6?c`\´¹X<üÒjs1©Ñ6G3 €Ò*“r…˜NÂl3Š\‹ÊúÏNŽUR¨yT›©å‚j"ˆ6ƒÄÕæ(µÖÏ0¡ˆ6­°b¾á6îV†›²òu x”ÑË|°ñk%OÅ‚7Žñâ\¨8GLÔ ØùtÿŽubxy%’Êí¥t#ž‡T¾:&±OÂW‹;q³­Zu#Aúï$Aê­î3•‹õh_2q%ÖêË}|KôÑÄÀìÌgs!ž‡`\óoDÂ:”¹àÍÁ`åïU²Úwý}íÚE¾ã™5°“ï¨4„H_ÊÍ@¤Š»Éƒ`È\ Ú,€`¥|÷èò`^4’Ów¬¢àX =*ãà1Ÿj€—Nð]¢5¶e?¡€{ç>ÊCÄ ˜sïÄãö³ó&}Z|ÚØ!§×^×2'ðl] ^ Î˾: ‰²q«î¦šÄw"'¬ƒ¯«ºïjƒ5 ‚Ô6^â^ÿ¥Ë=x9UÒ®•£’rHêäðN8pì†Ø4™ >TÀ}¬h Çúßf†8SÈtß½B ä58’Ü=ê}g#9¿#nÜP•UôR)%i­ôäÇ: "šà0ž=`zhšÈºÇCÜ##Ú”þ>#€ŸTUÔ“Ö;Ä318N‹Å·¡$­vF•ÀÚή»ð`>¬VŽ¡CJe®SÄ—ˆÄR4ˆ'—’B52°:‡7äqÉ… FÕ‡H*ÖjBÅÿò ×ß!a«wä?Ɉ#'v«¬¸hZpxªˆD︌ēk>Ô—w3 -ð»®ÎReÞõZ.²»uʧÞt;>fï€XfGÄÇa ÁÚù=úÀÕ®zï]âJ4Ÿ¦(»(B=’—Åp@úÀ4.¼šèfˆ>${…À¢+-›Îðß<ôµI´øõ³ ^ïtÞ¬;°øvÜQ5“[cng›–¯vÐÖ•Ç;§­Ýë”òe9Z¬õŸ&ägÀ)pÓ™ &¤“Î)ã1ºñûGoú}É;‰!JJQœŒ0ª@ÿ(¤<.RÎÅ„>½Å¬ ;»(‰‰Îrygù(v“;ʶ&v’/BQÈWŠL‰¼Ó˜Àň1]¨øàÉÒ#ÄT%L†/HJ¾žä”àŸÐ„NB¿m–Ã×ûó|Úyª⬣±s‰Sg‘˜xWq),°mšJV+Þ•¤BèV×ÞÕŠñP+A¡ÈTïzh ï®Í: Õ×Ö"Š9ïŽþWîàªeW^qJ‰ÊÓ~Ôó@ÅlÎ4àȧYÉLü«4" Õö/™ÄU1M¯1…˜ƒ¸ì‡/@*0« м»C^ø÷:ÙõÕ4Î|±îmRÖ­´ÞÐB"Ï/dà‚Y‘ö–I¯j:Ó“鬔Ñ}NÊC?´~’¶´Ä_=—X'ˆGÆG4õP†uqx"öh¨†«¿ðS@¨­Ðƒ^êžLæÛ;bSëí|˜ú1ó5˜íÛªYp÷ia“`¹L9Õ]ú˜¹èËOÐH·>öxØ´þ——ý ™"öwHqv'ø1RÈ -Ú‚E˜ -‹ûG¿î2íÍ·àCÌ‹-¹/zÌ:`w‹nÅuW9©ÀÔ6Ÿ·î¢Ïa=Ù]½ã<.D•ùµ×U÷°e¿À1–ZW‘ÚöAr¤üµÁ‘Hd}¨‰Q4Ù]xK8¤nw{ï–.ü’68ømk ßîâ/ ‰ÛÝYÏ@h»CeeÌvG’1@¹ !Ûà œµ»sá0ˉÝõÅ$´cwagÚL%v~°6Nüð¥p¼œð‡‰®ä´'HùHÁnÖF$ÀKH×Ýá5 ­ßë€sµÖlw¦‡@DÇBÊw±ì¨æŠHðÁOv‡ØÁÒTB&:{eêìÁ3ܲ¿A75G -Ö Ô­‚¥,÷›ár tÈÜ-:&W JÝR -¨.p‚¼“î˜LøšGÀ÷Å9±ôx@‘¸Eˆ>ên) ”º£¬ «¨`xÁ³š¶‡˜ë–Ž.U…(!ò”Eˆì§z™saFÝÞÿ¯#Vÿµ<öß–º›¼üŸŽu¿Ñ¢¨¿èÍò£3,üoÒ:ÖýèŽáØOÝ-vY„ðT& —ùŸÉ¿ôû(QüÚøý¬tÞ¯uqø -¡S“ŽÀ=í]¤*Ú±ç (ðúL©Ž†Èi"F¥^ûú\Yé÷…î†úÇ ÛàÎû|%èœy¾)ºòýÍ£\ɯèV—ˆs7Q‹‰ÆTï €Þ¹Ä ð´+é{Å0%ï\qî^RwA‘¾0îõC³í¬¤} ç΋€ùÌ<.ìÇͨ±ëk ðETJ]•a„é®#uPêEŠÜñŠF0YÀj„LKEe ýÀ|‡à?/ÆŒ#ÒI{–½KòC yGîàóêp»Îá#°ªÚ±ó# svä$‚=v° K…D@¶¼W‘w"AŸÜe‰‘¨âÔ½ãîT¨CŠ…wŸ4IàÑr‹»‘UHèš‘{~®¨%d-¸ÓP “ßÎóºòÆkœQ -¦'A;/t‚Ór'¹]÷´Ñ‚““ŽáGN»3Jÿ -–vÇ]/?kœY–˜ÙJÒ°âQqL%ýˆ®¡ÔÑᶬI[®CJ̈p%Ȉ@ NFB¤$pBù!"€jwØÅoŠ¹!,|Óà 3Õ›<Ãêñ¦†s7¤P«I$\vN"&q³Õ/Ù9B]ä…ìÆ°„ªM `ì¦ô Šm·*_À¨d«¡ÌQl)î…§âÿì$’Y;Md"tlË×Ôy«–YN°b×E])„Û¥U2&$½uðòI^®¦þ䣹Ýc‚&Zï w+4îóFE¾K7;ù™ -Þˆ²g>!ƒ3zÖé̮Εª ífŠ¾‘šùn(ö_àîû˜¹z&Á¬i,+ð2—f RËÂÆÑh©³F…TR™ÖhX™(s¾ÀA”õø#k%ë^î/€:#õ†ìél:M;¸>!>&2Ù¬VÇÊu$Mg®Ÿ¤5õ •L—KWL)”½Š™¤ŠŠIÌ®F… 1a·yÚ“T’4É°BO8A[&öH˜}ÈcˆƒI}ìr -&B;£SìOÈk¨ @EW7qœ–ô gðÝbøbW_qnèä7k z™-²¨pÖ! IJ犯±ÒºrJ5¾(Ò°¹<¾¥0Οh\™oKà¸"—òÜH' þw)ˆ*G`lç3F$«sß¡ª5-¼{"…9ã‚zœcºAÃ9ÈX °«,òò†Ý\Ïù€Ò6Çf=Pcs4C<Ô´æÀ¨9${…‚z‚ðvEŸ\U*OP±[¥ÆkÀcµ¢q’9.z†°9¨ûU¸˜d«È?ÿr±ìå°ÜI½SÅ~h©¸Ê'–œkTä´Â&Bõ=*°½§ð)Ä*°‹ -v‚U55ç& "¦pÀ%ÐHåêÝhQ*AŽHÊA ¹‰H}RÄ?9Þ² ;9ø Ø&ð€dr¼]sP«B!Ý 1(TÕ€ä•ZÌ’Œ0–OLèÁ Ç£”¶Ð -¼žà–‚ȬÉrÖšÉdŒ8ù%vÉž`µ°èÞ¸  z\“e ã'Øqá³À1¡÷‡ôtãHª7Îy7m2€­$IKÚ4›J5È($dúÙ–´¨‡»óÓìÇõŒõR’6 |<&£XY" й6(õë - -D°µ -\8äð2ðn H®íÄw¸ª}ªô_ÅÉ`_Eˆ¼ÄÿsؽóX2Tþ¹S*•žÃ¤×Lºˆ ¢²že±une¦ -¢\sხ™;k„ÍÓ"f¾"_¯m¿ºÊU} â~阮ùGÁ}Z†¨ÎI\ÛYmL×MÞªÀG¶GoãÑÉ©ìHÖ BaZÞJéD&É@úiBN¥×Ø^‹·ÐtýI}nµ¬*ÛÛ%ý¬)ië¯È躌ѕä–O"ÙñÝ2ÅJÜÙÄor?S*þyJ—Þºa x~ÝÍ„¾.: Í´V¨S#\²Ô¹4pe¦úÒçcœ Qd—~má¡Çi÷{ŸQ²Ž– -Öë™Þ$az7™­ò½íüÿâüF«J+hÉÐxóö¦­º‘ ½¢þƒ…ƒÍyQþªoCa<Óþ(Ø{ôwo;ä1©¥Œ?}ðŸ?WÙÆb׊Y¢0ür;f¦¢Âk8 LE–Wg…ï.„=pj_P£/hPF™gKÓf¼a°AZX·ÿâTõ!»ÒuØpÅ=UúHíÝQa…jÆÜÆdÄBÇà&ÖC½,v e7°w­k³œ½µ;Ç;ÄÄrYi[áQÎ)½ÏäS¤)Ö¢HnÝ x¸W -õ†({+ÉúxfCqzŽ.tŠêR&ë¾M;U6”{] Ÿ8…xäWîÈüv°‘—[¬0Ù•†VL_ÕDÕe‰ª¯¼×r_-Q³)~Ôßl:•¶E‡Ð²°8ÁÜZ-W17TžfÙÂSîß XsnËlð'ÿH@-PK8è„‹ø³RNAÏ®a8÷n˺º™>ýü¡.á˹;ò‰æиÜ×>o|Ð&ͤvzgXÓ1a•WÃ;w >ê_îv~CûƒVIUˆ»_žèeRt¨y9>ð©MaŠœD”‘Q••†¹ÃÀ`DÎMNÊüJÜÆM¦Ðåö’i¤*œ£‰£xü@$ÈåžÆßjšˆš ÁR9¨£É^ßZÏó·ØW.ì­EÔõ^Ó׋ Óó}á2ÃÙÓ’üÝ70îÊL0ؘžBäX…F_lþa}ÎP=ÂWÇW΢W $çñûƒ×#³~›#⛧¥ ¡N\xê¿ØÀ[v7žˆ³õõŸ€{þT×"GéB/ÔöPåS‰¤ña~j+.ä4žÉFÄëóKñ7ܹ{©_+«Á´©[åýnHÚ,ð[–;–¤á:šîšëÃØKˆêÆwÒ"®¡™ÌÒàÎø„âãÌ„O0˜¹ø÷ŠNæ¾Þ[ö˜îèV”;r±’a®¶ýAý¥}ü„Nöwyêû‡ë¤ -ׯLœè`ý¬lâ:õOCS´§_ð1í[úÁ¤€ôc]Jú0–¥äŸoV%žß%{Üüå2©Uæ'A’W—/|HÜTþ©ÿH›Éÿ~G±C~ÙÝìøK™ÑCÆ—ò"ŒQñƒR¨Ðˆÿ(²hø!IÔ‘ðÇA”NðUÆ!ú?5 ñó{¶òÆ÷©@ˆÞo.¨í»oÊØ ^å(@çËþÈIN)öÖ0Šöy`鋯e߶§¹&éÐw¦—dã)s`à`ªùûµhÔÕ¸½LcªºfFçÅÕ2é“êk°Å÷´2ž ª/ªÉå]BÊæpÊÔp{FšNÓÿõ›Lé·¹•pJI£›ÜÉ錢#=ícüCn­‰þAjiñ!@HI4ñрów\8yst‡ Þ{ãÇÀW£€½àš‘ëñ³cô:»Ì[˜àẎÙv¯â†Ñ¦G±+IÛn’.ñ+ Hn0LDÉaâDÖQ;’ÇÎ?{Á1a¢Ï0x„4ý…³&Jk…Upȉ$1ߦƒcPC‰ÚzÂy¯`Ì/ÔaŸBiÙ Ì—ÒºÞîŠ&Á6pQóÌ¢âñÄ -ß¿¡)ÂÑ»WrÅ,Þ+»UžØÑ« !òœã¤pïx<{ÀÊ\î¡è¨ Ñ}6â&ÇÛyÍòÒg¥qõˆÿ­ZÖ9Hd -aÃ)Ä5.l/vç³MzÔ#© -£‚¡ôøEÍÌÙ¼´ 2Ÿh?ãúß“ï‹o¹42À Œ×’º<‡ÌÕÜšpaðK61zöƒè`Ƥ˜ŽÜ(ÎaNÌrú:÷ËW+V3d„Aû2ŠgÂL^±pŽ4Æ\À¬vµr =F¤³Î/µúÂXØÒ¸¬8N}ãY’Gñ[¡ Íñ‹2x4µòBk˜fö ±šmš©þVåÝÀ ÌÖÍŽDÇýk õX½ 6Îü ®¡Mƒ¤ ‚î€ PžÊ#²†‹çW“9 AK<æ›h@ -ȃ@=)b³Ú' …B{Û\ü {ºç…éÒ˜t¬Ý{è…=Á‹6D¥´þ„i ÇÐ õl=:pCˆW&¢l|§ëcu:²“z„‹ýCõâh×™ª½R”è - -¥Ï—™Aw™ -9}KηësÔî‘ÙKâ'»Bœ$òæ}Ç9Ì:pŠ4¨ÒvÜñ!èA!eƒ‰N€ ¤˜ì…î#ÀÕ’`4.môjªmÊí%d$—InE±ð~à6ý$ð—U̧ Flƒ¹“§®,.½¯ xK=a^9]Š’NÜjK±"æÖñök¤2iË­¡p:‘_02ŽLÜ…Æ(ÿÕ¨t?ÈíPžìˆ‚+¤ÓÊO˜z^É™^Ç¢½tÊGœÍ!ŸâÙàô1-°º-s!9¥FI!ìqh†O£bS’Ý£BBÈReÔ"tÌÚ†w™8Kb`£L@Àa„£Xy¯†¶\Èë-KèK_¥µ!3A@CÄgh›‚åcœuÍ Š ŽDÐïßó2Œ‘Ý̦hÝ-|ªé¶érÅçêof¡\VþfÙtZ@ãáÀÕzá8سb›oª!˜îÎXÙ`¶ FzBü(—~^­ÿqÖ`tÌÚ)^¢ˆ·‚ï‚~> -608‚’3%óî P¨ß»èYwºµÅ1rg³Ÿ~È”“%ëÛ“8ƒØZ2}Úœ8|Döê¿1%w  h¦B—Ÿ‚TÈ(G!íPÐ8Ñ=‘ñ0Èò¤ ˜<~©£€@† ?M  Ƌ㈢9tðFFŸe¦@ BT¬ô:‰„¦êC{~©^3³Ö‰©FM?òàÑ8@þ_*7­v¶®ÆgÌEÃôé¶í9#Ù~ïdacæÿÿø ˆ½[…9í}I~7À¸&0¦Î¤U+íRÉðnåñƒXØ ÝÌ¡”YÙÎ:Òë‹%ŽkXw8‡G=ZesK|ˆ§a"Ýh¨ÞÍlxýéV©¦nˆ˜ÚKÙ’ÕÚc/䣳H#>ò­ø›Ó9Ð+—¬Ò(iI&~:ø¢@TRµÛ^QtU´_ Ô*H܈¤p9ñŠÊ…Ä"=adÖQ!,˜Q¾]“èÓx´ýÞiÔÏ¡š?®üµ•2ä•UÚ¯¡¡–î> ùÒ }ª œä°›mW¦1Wi¥ƒ;3bGM‰à…úõ€Íd@>Ap•Û¨<x¸}¶^ß±Ý C®òä!4¼•ê‹ÇÅ—П@¡F²[Õæ®Ë.#_‰ñóÚ·ý - Ï$8¿­Z™& J&â½Ù¦¾ æÞnÜ"m‘‡rEW°P+ÔfàVæ2­îw)ó[bNf¶õ~dã“lQñ—Rm£ˆÊÞæ8%÷ÒDö‹£ÐóDx9'¢ÅxÉÊ¥-û޸׷['DæŒÝÚ³cV¾¤A .™ÀX›¨å9TEª·ŸãfüRˆ2©ùëœo¬Y³ mË^åuWHÍÀhËø8ï•G  `ˆ‚Ћ›è´åF)§µidJŒP4 œ%þ=ÏBìQ..Sõ6qOÈN&?Ÿb¯SžìkäÀ)UkÆõôšÔÂnst¢ìC©°A½áY rΧ -` [lÐÖúFT|Â3^p¹Ø’6M`ÜÄŒÛñÈR-MXÏô]Bòâ-§&RS€”t=Äûâé~\^ç|YhJp¾à$T¥X>”ØX§Cjß,;zÅ;èù8B©:Õ¾*‹¢jœmÛKÊ"„vߟ>*D×Z¦1÷®ã¾ ,¶¼ƒD,XBcݼûÌü‹œ—kü­åá;Bi•Ê³WŒ¹yH—–º3¨Ê,˜«JGU(­ÁSiŒ)Êň%“*=üâünÛñ™d8¹ÇPˆÒ"pNg)ƒ{DÆ,¦ŸZžcÓPù2ª'ç-@s†ñ€èáEºµÈ/¨ß«Ráàyy²® btÏ#%q0%)hµÞ3jÆRûÕ‹ >kür@2’+Êr˜ÍxŠ¨Šlyª á~¼#©É<·Fl£ÍY]®It}è’ÀQ<ã æ:<´@dlÄa!ç鼬q™ž—YµÀåU¦v«­é×ÐU°ýͤg1‘S䨜e1©»üuPF—`ø–pŠº` -Ö\à‚¢½Ç÷š öæ5”1Vɺ q@$åiªYUzLÂA2ÔßÃ+ƒÑV·Œ Œ¾$ÝŸ zV¯ø‡>Ä¡DŒFöo >š—ì}‚¹¼oÚ'ž9G;}…áÕ "DzÅä6Aü®Ÿ`#®lÔ#àÞ§NpÆü¬<§bðÇÉPgOq&ØUù:M'àÖAÀÛ"7ô9:pš¢½1{†›WÑ,¨wࢠ£9ƒkí@ï.=±ÚY3s Ò~,m¹à]*•Wšû‚n¬æ§ ]Šª›CÎ6¿­‚aA‹'öãÁ`¾08óóUq ƒLç-/ æJB— BúœlÏCQ–?Ç÷]"‰L&ý}û`½òÈ"3ÚÚú=¯dýSÌæ¨Ò€Ã+|ìAÂygÍz -|žWŸÏ‘ZYò7¾ œ.bvcSÂu^¡€êúèÌ“ˆ .c?Û¦V 'wÿ†ágþ>c(¹>Æ•XÀõßký„©™úǶŸ>õ´~C}ê]™’é²vBÈ91õv&qèj¿ÁØ©wO¥^o9ÿ6À¦ÞŽ*QN©k\=õô­þ²¹Xüš}©·édµó£G¡¥JUþI¥þr§ò,õWŒ™|C\Íå†Ô¿®Ê:Dê/zUê½Í±Xrâ½õYa<ýÖ¯&ƒ‘=jº]Äàbˆû“½[ê_'e†‹Œ0ÙßåûB“½·öIx6„2 duAsÝÄ…öAØ ¬‰S4‚éñ›(÷Ò,—pƒuûùe?ÀW;ZU.ã‡q7ñçQ„ä×Dv"=²¹šH¶íãÖDC¸òwVWŽšøAÛ,m"e•Ó«u ¢dÛ\ÜÅàDÀ¯½*JŠk¥Îd¯\ŸRÈÿî=q#íéÁhõ‚"÷¶É`¼¶ù}Eß‹n’U.CäÇl´J"2ñ¡xDÔ®jéQmŒ4g†GD8µº„UCD®êkyñ_D$Ÿ< þE´¹X‚T  ªˆóY‹†÷ˆ Гy»ù:ÿH1N¬•‹hÄ,Ñœ; §ó1b^Ïô·ØýÕÖû¾„#^‚ÛUœ{·ß}áB"³/p6kêø]’Q -ª™ÊÊ¥¬$Bž¶¯y C"¶rÚpÛcý%NÂá`‰PTÊå‹ ¡Þ.t_"(Éo¢7òÍĬëøUý¢‰ÚC»½ûL„'1‹oÂvW"z^(vÈž -•X«ÝÎY‰æø¹õ!0#†­Ã,´'\J…zôJ|hß³K dÃ錯•˜Q²ÃÂ/QÓdƹD½_cq -q H¼ »âHJ>ŴŪ´–ñÇ£"_Nê”ØWˆø»ÿéjC&æò eÅuðN½$”$F+ŠVÀxÙjÅ‹€^ükÅ&‰]ѱjE™1:܇j›Çpìÿ0¸øJ•hæ}yNº0L?:@¸w¢I¹N’QqmG¨@ÞQ—Êë/ÜÙ¡…m9Ìà¼1 lëítÆ lxƒlÞî3®Ý™|›¶Y“ÙwÝokŽ‚«Þûü!œÉgò?záÏÛ•×ÊÃßTñ¸. -8‡g_brÄ)¢:OØøÓ >ZŒü‘ÉSz¯®…¶¿(HÃñAÁ‚#ôëߊ©êK—:­¹\܉րn®“)Ì·Võ‹hÁ ˆÞs6#5{ À~`*/n¨V‹l¼Ã/<)ÉÂZ÷›¶‡7iŒØJðœËBq¿G7VTBèû{HEDk››te!r¹áT¦lf‹‘e¿\Ó¢·¿Î¼¨ô¾®uÁˆÒÈT¦YGnqÚyÑˤ\>ÄÛè¡Ô‘buGlü¯Þ¥Kxä|Dû@%STñnAU}u¥öØ~o´/"Ï=ÍxýWïe3bßq‭=Þ<5ö>øʲ„68S×bÏ䎹§٥0 ä„-³Æ=æ„ ç7/f9aW"îêµÃXNêÐô2°GÍW\$ú€)E¾ñ]~"ï¾/`ߟ¸[R^^^f^â"Kš·„"í!‡Û %C·‹)ÓŽáàäêÁê,íM¯@°«¼/–×lLGNó/,%”ªSa­ä„¿} •AC4˜£ÆÕ‚ °¦³@mÔà€•H -oŽ™”öIÿ<óh -n›×§Ê8ëwccV3¼›*v%*HL[³á… é‹>Ún ƒÎ…+Øy¤ÔŠ:A4êxhš'‹óN, Œ¼nƒ£~1$q=A$æ;eݽµÌŤÄ0þãôE¬‡»qkô¾i7rü¹¹Fz³ÑÅüG;AƒØýyDšÓ¯ã€Gülœ´£Mìmˆû—´ÆýâªÞ·æ^ÛØWlÛ— NJB¦íµÞ `Lç4÷¾íwh&„«7¸vóÆ% Î\[òX÷jƒU–+·° 'ŒÒ¶â¤àpí¼®<#Ò±l÷)nc Eñž9±>Ç«cÂõ»ÜÖ´$¤ðÁ}Ôª£^ß(‚«Îròå æêB-=ÜÀU²ÈÙ\`m5”˜Á°òOˆTÖoC»:×lZÏ%o£ÓÏò­yIl9ë¿åÕûAîðí1»Ta`Ù·`»ÂZéês•_5­}f˜xm†9 -n †ÈµµTœk©R=®²ÙãÊóÅd¿ÇžØ7»s½ž¦ û£t»üó™=د¢Ç™åÏ`øê;òèp$QÎá.KWÞ1ˆ0É_0ܶB¸qòNt L{'JËÀ~%® Ò´º¶è=VWÓ¼!Oœ·_öÈ¿ ^‹‰ 4áy7—PñÄo˜ÿ¯”„p¿¬²—ýó؈çýX-¡÷êµg;.‰™¸´ -§àòC;sãûK,á…q|):«™ÏĪz¶´ÛÁÌPË~¨g’Á6\*û•W3f/à)Ýjc.²Ç M>žr·HüéúÖqT qjoñÉÙVb$æJæ*iõuŠ±”€¦kØ>Ôâç#Ý$ëdZñaOl]ÝÕ°šuluqa÷æ‘m—4NþZ‚箋:,àKü,A§‹Î:ÖŠ ì«ÎKe0ðXNfh´^îD9!˜š0g`T× ‡ÝéüßÍþåmžåPù5p%ªÓƒ¸:ŠB¨(ÌRùþz¾«úê§P-]£mÊWŽº5W_lÕ),°™Vâu¹di¸!°ðN³láU ¥ØúhmÂâYvP^¨²É œ¼Sc–²çêjÔ“ž±àŸ.†kBowJØ­R*qhå/ÀÈ7jñI%%ÉJ;uÅ;Ý£¶VËí“Ñ&!E³S_Ø2©Ó5™~p°{I4uº ð¾ì´:MOrLÅ·dôFPûö9½¯ëx¢Çqør†~<1BCØû ep‹ pà K AÜi_›œó -~öÛ<ù›÷¼ç÷-•?à¨yšV 7ŒäFíN{na-ðMs¶Úß”.­o¹rÖu -zG;í@Å(®S‘wY~²™ïÓ.•N5Wb~ѬE¹}*ÍÉóкAœ%K:͆¨iÒB|yÌ2Z”Xö20•Y°ë‚›¢r*âҡТÜ'ÂöïJ<ÍöM‹r÷ÀpÍÿjQÂ7ãŒö‰D¾w$+víÀÂEáðJ˜€Mæ83¯–ûsQ²p_„0J^ð« -Va0c|ÜxÍäÁ‡H7)Ë(6LDŽcFÖX9Hf”Æ\ŒewþI‰Í¸©Fùp3Š±b3 - }mREËÎôºFéy… ûÃbhbtµAoOÜß(‹¬ž8J_1aGfçÜ~ù¤G9¶áú/Žâ*ÚO†ÇQ>YÆ>Áø/â(Þ‰(h%Žªõü£ ×0 òIÕ?ŽrRñäwàñÐ8ŠêjPH£PyûŽÌé*•J¬šs‰šªdn;§¨é ”£Î†l@šzbˆ¡H࣠'pùdðêúUÿÃUaÝ­®¢P2'M§jI¤æZ^p¹§õDF•¦lX4×í4,h -œ«§‡23JŒ&Ì,ö&;ø-4®>è˜z™²øÔ@ë4ø00(³.KüÛ.xL)—©¹]5@@8 -o SWPìk ²3‚ïKÌËŒ{ ÓÕ !ö™þ—éFŒT¶7ø¯í‹iЃþ<$ÿ°¨ C=XÓ‹iÌõê®ÃTyL½HÔ`Ã/õÂèe#«8™² ’Õ`0…ã‰QvÓ¦„¢ç!%ÿЕG‚¹… ”õ[ Ფ°Èüs†<Ðì7‚Oè>¥9;t²ðô_¹²í|~ïãNÞœG@É×Ë9kê”±A-¦!þo¤ú:ÞüÞTÐ 2…éí`M›€Øßê…þ*ºÇ9ÈÔK¦,žsµ‰ýZÈT ”ø A!ÓvŒz±ôAö’§9PE.ჼo\™ZÏÍýÃr$bŒ6PN±Lýp´Ü‰~৴¡:Jf‹@”4¦Ë? cèz&ᢠÕh˜.EÚ‹ÅŸQÇ‹§„˜ ‘­/m bMY8âúϳŠq84;»àFÛé:G*$hñ©Û³ßRJ0±F9CíÊZjß2ƒÆWLÖGWlé¦ød襴qbE¶2æ…¥À(U(l‘ÆK+äÀÄŒêÓ¬:æ”r¾*?Ê|Ši $Èå=C ¶¹PN'Ú‘ÆÔŠž¼>º´|1Õ…ZM¾ðp|õʼx¨f¬Süx—,sÓvÁD³”0³ ‹éFƒÚdžžPÙZCÏCs©3¥bîæKsé}åBgäì·ºg.-|«¦˜PA&º¥Þ¸Ò‚‘wéÝ°ËøÒ •´0­3ŽŽ|°ÐG^”3š’Ì6Ddÿûc·r[Ÿ b‡©þR2 ­UH3po ìBƒðR¤ c%G}æÿ‡Š:Øl_¡¯dm¯üED%%ù—ÏÜ~$(¦§Æ`èÉõi)ÈÀM“R‹psž¤âµ&Ø^RûPS‘£JÙ±ÏÀ¨o–Y7Qõ7îÍ¥þu¡îð%'ÕxnóÍZ«½+öR»¬òj)4…õ‚šeyÖQ!€ŠÖRÀ§¿Üåû?à„'í½ø‘ù–&Ìâ¡ð ÿ%  `-…‰~þªÖûKQ!;vµ”³qYtõ Û f)€fL§ã Ù³ÔÈ­¥:¶]ÝkišÒz;Ð[}¦ç#õ±–oÙYªJã³HþA¼ó´…œWÇÐÍÒ”sw–:ÉBú‹b§*e©…¢ä¡U©Vœ·Â.•2(¨[0\\QÅU“)eÒ‰bJ;¯-¥$ÝÈUiGYœ- -qq¾úªRŒ¡'Ú%UéE}ÀU©F™ÅƒZCÌ*e?éàïþQéTË1„ÀR;Â!© ‡¼`, -PéCòSêÐÕ5È[B·¤„]ƒJgRrDe~ªRNa¡{ -/Aì2€©ÒÊÌ5²"ÀFgB•2Îö‹"÷ªÞº1Dö»Ûµ“uqa(mÃf}’UÚ­£%+õ£BŠVoœƒì½óë¡ó)=þvYéY(Sµžõª>Ééq½ÌœÝdX)‰D#£¯RRäeei# -÷…Š¯RS€wÿ‡Ä‡#BM¥A]¸5zÙ–]³ÏV£‡P¥Ž˜D¤Ç(e²Ñcá÷çë«*¿nÍð+<[™³ýæ“®tbÈ•úß¿ÈìQØs{xén}< S-VZ -bvpÞ¤n¡vE0ø¡ο¯¨:ÿ±/‡¸ü•1)6ô&+5rÆD•ÞÞyÅ–¤O©«_^Ç«<`¿‰-/‘Á“bý,×OéIuKÇÎÚR?¥1²°ÈãgßÛ59©¡–RýZ˜¥<ÞRkjÅG^0B`ºž(9S%Â|\Q ½Qº\"^“÷ðspdžÜê‹UJ5ö5Â^(e•R ý]±ò7ë©-Æ,¥»_vª{rÁV¬(}PF=9³B:inZ±wtWJG÷ æ—8¿fµRÚx±ÿxxÀÕ"†á1×û«¹ “=¤Å'3¬{LJÒò›TJq³¤Ó²6u¸§ÖΣաhe…ˆXJ£ž€ŒùÉ«%€9Dÿß$íñð‹IG)ñΞÇwžžÌdSeIuçROÅ¡HÄÆÖído ºŒ«Î`rëƒBiQ\¼» ¤tÑê‰W¶˜(Jy5F)èŽø;ªÁ“˜‹ yUÉ ^堉QõVS5ÉY(fç…[µ¿)œ–F¹šô—O“JÅ–Ïrd¥ôMræYìO‰.«+ú¤=CcÝ‹ßY²•´k«HsR€NÃLúª>¬ÇàšOª×‚r ƒX§!€ý+Ï(ÙÓ™®Ë¹eRP0Ê‘ -Þô¾ív>é“¡÷ÀrT;º¬fUÞÜW×'ÕÄbÒê“&£~°cêüÀ·•†oX†;fYBhò“~˜hj°Ç3ìOª™ mNq0ÿ'{‘Úö'•VOéCöHÜdKþ¤àÁFeS²34…OD©èM{ÿ¤¶lp­C®Ô¡[€#y91m'Í*Ò•l0A€8Ö¶¦E!¯Tƒ!щó?kRö8#¹… J(#zÊ"CV •G¯I{Ý#º˜T«–ÕKx€é÷\¶y–]0ÄLEÈ#© ‘#ýjIÏ tÅ9Eq’â›y…y’º—’pJ~rŒE˜&Flj™ð`Bݘ>ÈK‘êU_ؾLãÝI—Ñ‘¤ª.Y¦–°}²+½ŒFæj'Y¦ÌK‚Ý1”ÉEÆNª+ºe2¯£ºb%}þDtŽ*¦â92£Œt›Šô•8ª@ín4õí\©>·!NªÌLVë˜\zyKY…(Ò„øUDB#cú:ÞýE›gÐ Uuºh•!Â0EªŠ“HX³,£DMð ¢'éÿ¬ÃÚ{ÒÚøÙ!˜A󆘻ï¹$ºÀë(G´žUWz1|Ë”yÁ¦VÛˆžš­s>#IWxè8ƒÁ–“I5/p²Å­5”å‚åf¨•ÍG%†VŽ« µ¦5Ϩ^¿J~P¡®¸rjû`}“éÃg¢»º&ž¼ƒ¯ñÌèô #‘•MÊ8èpEdhP¥1CÏ›ÄÆ -Êú}k<—~¿j„Çãuhk«EÝ-÷Ê%h;HâŠìê=…Y@õ·Jä -Å(‹vÐnâÌ[קªUJÌA>”,Ê€1~~Ü}”­Ÿ$ÞpÕ'>‰ø YÕfôÛ´ÒC~ÜsÝŽ€k‡>:…ùœ™J|Äh»ŹÉVè{( 6¼˜ë>¹µ,÷¬<Ä€§ÆQ±$EÛC§J;°žÑ>n«>Éôèõ 2F6óÌU{»’Ž´xgÍ<Wu7™â•ÞÛŠ†'¶VÒí©“!”ý%ÌêiÚÈ¢8O;È -Ü``c'%‰˜®_Õnî$)ÊH¸·ŒÒíi§Lã°†Æ:Da!·e¯:Å’´Cu•JÕýZݬÓÙ†ÖõK<ÓŽ| H_ËG-U’wX¥³1àe« Ø;ÝÎ ð=Ÿ&ta!ÏÅ’\Ûyˆ»Ðmçä‹€R¥ßhÎvÕGéZìwòé7cºX9©Jƒù:ë%Ó :É 9·]Õ™õ¡ãL¸ãTFqJ¦Ù(%v8Ý•ÅÂÙð%iEIµÁ9+qrÔµ -‰ò«¼XG@Iµô„…é´lç§Thpzd)Û@„ïæ•x^V'¬›ânnBí ¥=HÅ”~tµÉ&@·)wÓÍX~¨=*./’(qXv™ØaC›xLŽ—Mõ‹ÞXŸQÞ)–ÒÅ;Ï4«a×Bñ&Dªâ÷¯¾…aË®ü ré1-ý)–åZ¬“j‚‡—&=†E]¬7Zò,ˆ_%3:éý¿fÍ»G)®¢ÑnèÅ‘DCQ+‘kŒ… Ô/n«”q4StO÷ïO4õlÉf¼h,²<í©¢Ÿ¹CJ"'/"ÙSŠ³‡ÐNˆ!מGãœI+gr¶{3c_’ªeLh‚RDuZ"33ê'(×ÑWÐ[ ^5fÉ–.>ûÿV.3‰þÊÔcúÍÊaÊéN¦¤ÚCtãÖµt·[)™[JYdîªoN2ÿ{y'ÚeÀ,‰IÖ¹´¨ZÄœ§¾Æ“Ô½˜žQ´¨÷íVÌ,58¢ØòèGÀå†SÿÃ’hÄ4µ#f*ZT_±‘Øó†mÒ>˜5ê¨R -¶0ɤNZR"B "7E ó^½§²´Î§¹6TÀô"¡éÇ›jªÐ”@JòÈ% ÚH¡iýŸ±ŒFA^ªL…¦ïd#ïè‘¡é³ìºÐT«wZBÜ#šJôÞÕ3M¿ñJ.Y%Àïø`šº Mã'`0MËSbI#LSKàx`â f]Õô|÷A¯©“›mE€ývY:Tº¦÷×SÙ5r Ü5{[¥o®)ôùßd‡¥¦š´D Hª)I]’ŸTS”T+Z"iÆ%¦©€ô±À4­ô‰®VMO<†Æt™¦ª—òÃ!¦©§˜Ó0Mw(-¤"&Gkw ëËï)Ÿ~#}†» Êê%ܵÞöÝXÁl*ª@•¯k\nP¿>å«ñT²Æ~öƒ+Ó5W¡h©Æ„àóMÖøoa±@'v°ÆêjLÈ~s­1®¸jßoÒÛ5&Ü쿖ºÆkÀp¹Æ“²§wSPÛB¿ÛÓ’ýÞ•¤±ìèŒØŒŒï*€ÔSvGzf<ÙèbƹWÂA•z̘°°—bƵÑMiîô÷ÍŒbÆ+'G¸l`Æeh´ãùéHéc,ÄŒí;`Cô%Å‹3ö`‘ÓÏ˘8U ÂuFãìÚçòã{‡†‚sŒM%ÜØÍ嵓-Àã·À§0êËo|ipEµÍò77mÕ7QEÒðñvÒaÑQë©T¹_ £^xÿ±»ò»û±&¶›—Do¹W!99p$ü\ÏžQÅQ+Ò‹hmA¸*5¡Þh¢Bí.‚ˆsE¼¥HÙ¥ ¥ú`Õ¥PRãe°°þO}A‡²›¬VËÁªóq:¡q+îøäQkÃâ=y”¦ d&Ð3d}GJ¦­tql@pܱbKJåÒ[mh†ÉرFp¸nò@\\71|LnOá"…=‘%pòãbäQÈ…É'§òX[1#e«éHQÀAHºó.ûk 'ªÌ¯}Á{óop˜I²x\nâ\”hCþ9ié‘÷—æh1ík{¤Ò¢{{œœðAU@ àöÈiµJ]3Ž®«3²Sîɲ.é=¸xˆL z÷So€©@€‹B‹Hø¬9Ðàó$¥”)%ù-Z×å%ÆïÕy?gž/¬Ÿ(¯c„ÞÍ~©>Õmñ½µÄÈH˜ÔúË%Â|Dü©á>ÌGt3­ðs’2üŒ„?cBŠÞDŸCRzγ„²'yÙ¤˜MŸ’óYJU9EÒº5×һWáËph/J‡ˆŠz1i~_² -/ew9ÊŠÒôIAßhœšå7U!J*{æG¹‡/_X9‡•¯ð[NxqØUy‰ù‰zÈOt^äÙ*i8Ÿ¨D (O,ÛÙÙ6&fg{ÏS¶³¯­ÖCû°®Ýìþ×~ËåÖ^v¨¾Ï*mÂ|qÖš’<å99'¯ì”©=>r²Üµ[,Ui-†Bµ’E¸ÚФr×È>KÈä2•ÐOúõÛ¤_p2âœÜ4 ý(äߥ“ó£Tm•w,AjvÔÊÛÌf†|!ÉlÔÂVýÍÚÁ²ƒs4‰=ÒG¦þ”ZrÕÓ$éeØÞÃo^œ Zê ï^†ì=œ:…ÒÓƒý˜_“$@$€€@X@"èµ_m¼Z–aÕ0ÏÓ=ÛÃRО©D½† -endstream endobj 18 0 obj <>stream -v,p9ã8i -=2$ä$ã(¡1©d†® SNk‹¦Á§¶©úwZQVÄb`¢Ñt„j&¹Hh4æÝSf¯$T¾?4–¦Hfj8¹8I„2“Z9‘…¨¦\ÅEèr™V©Kn!r¹а„¨Ü ‘kòÖ;ð…êͪªÓ£œTŠ1)px%dŠ ›ª\KTB•’®ˆÜÆ•¥™¹œ†|˃ùTá—¢e¢ -¨¸*jµæÍPçUµª±‰¨CMÑc¥/&QR1¢‰î©ÖQ‘•PP•ƒÊõ·*òòMŒª¼Ñ`xÓt†±«Ÿ :u-!3Õcit¦TZR–‚‚.˜©OöÀRTD -Îhú¡ 9Ÿ0†gjC.š©Y4<Ñk2%¬&S~i”iCˆØ™ÐPhŠ]ŒS"¡p¦-*bF–73Š )š!ñ11C4Ÿ1ub\´ù„'ÕÐB6-@¡§¤Ip>$Q¨%ßDáQL«ÈºˆCeÕ2¶ì ×X\MÁ3+ˆ¨™RE£7./M•LÄ”Pª‹&Œj -ZÉr’«HCªåd"i㓈–Ç¢"ª:±˜ŠdñW[±PQu/FœoðD®LÂt ÉOâ2Y®½u×ÛIyCS Ó]ôžÆôÞôÆék´ˆp*¿œÏtjšâ¨Æò*‘âV{ÍÃPtPÃp‘ÒœÄhGbž 2ˆˆ{OEŸ—è¥Ö‘éœü¸†úæüjMÕ¹jªß:ì×Æ4Wç#¶ë§ý_Wf¤)Ô쾈þDêQš³ M¢AfÜiïhÉPÉå#CAzq¿E“»â16‡ÌŠlI\Æ겟¤¡±œãë¯4ØAD r•óòµFè^‘Mî‡ÄÕËšßäÍ)z!V"Þ7ZA>?(çl·JBa<ª$¯q¬èW#áyq—¹akäEE–Ôtñ ±ã¥‘¯F##:}AìâÓŒvÆmz¤NÉ,pœ&é&s(“PAHÉæ/PuˆRTD¬ŠºÑ # -~6gK%Ô”ˆ4ÜJ‰H06I å¦eHŠ„ȉÄšYˆ¸@–{,Bb©˜T Š¡)5q×’…(ÕêƒäŠh ŒØQR%Da#'‘ ) - ’¢Iˆ²PÐÌ!LRÞȬfAÝaqIŒ iC–0‹JÚ% TëFkÅÅQ…ëa Ø 1Á‰QR…¤€UA¦h¦BwÃéfŠòRQÏ)0ÁÔ „å=z-¨‡TªdÂñ -ŠÊF™\á H¦²+P‚!½èä„·Q¥ -#Á©†L“'x‚V(Š{Qˆãô+<éÅi:/µ_+"4fŒâ4rÂID)ê$­ø¸«*EJ(Sò¡Nø—SQ—ÑL¼Þ ”4ÁwõÊ;ÚrÈWHê#âAsÊ]$dôC¤¡)s IFâMäÏѲ*{V-+l¢xÈÊfEâGq1sœ™ ”Á"W÷%¢AGÕc®ÒÁõ´}•Þ^t´Œ~‚Q‰ZfòUSû€ç°yhú„í¿fnÌÕyÌÓù^a‰qîÚžxÍTñy…ç1⾘ùÿc‡ÿù¯½ÛÞ`VCUõº‰xß½2˸Â!òã%Ù6ÑdïÕrˆ÷`9KÃ3ñ^­åÕ’ÈýŽÊ«'³U%ý"¹“HïÈ¢2…§h7>ØbÌÆs­®¿µ;±zïvºDÜöI‡J‘ø‰þ˜#LÉPµq¢•bÚÏă:-W¼þåš—ãC¥rQ‡Nj=—iÄK"-—\šÉP\¦ß”+ù¤åÎ_iãäFI­ãE¥–“S‹ºªcr2꼨 -ßÅëb‘™ñ™¢*~e’í!ån·¦sùjC¥}®xö’èR‡,"Ï¢y:½—ý¬”ìm§"%‹°ìª±×OÙÇW”Ÿö“(ÿhx¦V’KžäµÎ^ªN”ç*Âû\_ÅðØÛ„„[Ó>¬”dWfB¤íe—öÒRÙÝéŽ;¹•q'w£”IX¢Ø×ÖÈ%‘عÙÙJÉS´È%+æi(R»y:‡†ç†çYt-D6AâyRFdNµì|Kèüœ¥Ìü>wâZ"}} Íìi8i¹%…‡dqüŠgŤá-òKÞ úã¿Î;‚©Uh­áÅCbjñŠŠr Ë+ nV ´ð#Y6Ýõ=¼¢ØT*‚¬Y³={äpž·™}Öf³ö(žÑ~ÿ’H2²¯!©*F5ûŽÜ—pú›ÄiüeI » ©±Šý”z¾¤š·!êÉ,ʦŸ0…Úóbi!m‘ˆÐbñÈßI£OÓØ5ôï’E³ÝHo!™ëI$~Šô´†¯({ׇq§Xñ.ŽãrŸ=Ã÷EëƒÈžÂá\¯ɂKz~”ž¿Rüñø¸c%eþÊ!úî#bsDüÙdöCÇÙøQãÕ•ÁÆWmMQ}ž¥²‚ºêª´xUïtñxÕ)ãS]9Ü8«*KB>Æ]uqE[ ¶\W‡ˆqWk&ÅÒÄ? nŸÔk÷ºÜť懲;2QÜÅ-wqWnpªž§/k72]ÿ¼³à#IÆÀï—S¡z78ïoeãzÖäË-ÉÒÁu¥™òž'â‹DzNPŠþ •é}Mz_åË¿§Ò%iòü•_…J’ ¢œóð'‚BËði[ÌoYîá“ã¶Hߌ¡~Ì`\ÄRýc”zZ|‹ò"Ö…´™ˆL„Ñ9gk<³>ˆ±± щ®ÍGTbxž¬W«È ñÈJŠ(â¥8D¼·Òĉ¢×2kÕ>¶1äè…Å»8S4ü‹˜UóšzOº4X¥Ò6ä4j”E¹8üNúA 9Y¼‹'‘½ƒ[O¢¥H–Dz¾ENŠg‘L/)ÅèÛùOB -"qëI$IåßzËõ$N9zǾ†ô(Ù~ÚgÓS/³ôZXœŠƒ«ÎGQ3eøSò5†ÝÚ‘osáO)ó(êÇ”~„ŸŒjŠo8ñkZj„´ëîQ{%ƾHP7!Å ööQf_ÃÉKƒl‰äå-‘®+‘ÈhPQ¢4U–wbJአÂÕ)âX*î'®R‰ãõŠQKe]8¾µQGµ(Ê êüÂ…;3ACQÖ­ÒO*多â3õã%ulhûÝ"ƒÜ -·‹t¯×øoi]Qî·¼bZ#·OZk4¶SJ£¢<öá0"*¤âÝlÚÇÈnw*,¯MÉîÖû[ñÒÓ—ÄPK6ÑSd×:EÿäZy+NR‰—jƧJGuTRµÑ‡TAk¼U‘2>Ua1£7ΚÙK®¹hFÎ*qŒ+®M"4s@dÓPC5?K´µËæ"Ë%5»ó°·r3#¤ó4ÍÒèCåÒž–c¦?-ùA¢Š`ëlØálòƒô`ýADJ}(¼ëûæqÕ+!¾&HEb\ã\—Éê4>E¤&§K0Æ—‘N“Rù« -Iº1e"aÕé3QB•Gk#ô—”˜L‹¡ÚFª«ÇHÍfN"=>*TŸèÖcdœE±~Zj¶L×’ uÄyÒó>ËV2guå6§Ã%þL”9ňÈRaË|3^V)!Z„dF!©YåB«ÉY3™ ‹m¦:Žš¬V5ùHšÍTäÔùq1šè&h¾èhf W%$áZs ×ábÎú¼ßÜuóèüL¬g#Ÿ©m&Ö©PŒé"#wžƒ^ŠYE°Ht©kÒ -3 -]¨VM U-£J6:T"‘ÃÒ¢•SE°,XX,óMbÅXE·³fB‚H¡†<Ñr U”÷p"I‹ªêT§YM1ˆÐ­ÓO¢Í5‹óhN]9·”2-ÐxfZŸàñx<$”Ý¡ì ¯\‹Å­†j>˜ÿµù^’šû7nLNDè›csÙãÌMˆ}¦Ç¼“21¯Ñ¹-FzÄFZlôœ/NØla6§ðDU«"ÒH™ #cÀø¬Èch"¦UI}4»±ÈchnÑ"(„L:GÙÊÛ…˜®‹:’‡ò¾&ï7”!ñHL%BNùBÎm‡¼óý“¡²f'uÉñ¶bÃSr³)dkzq}HhÄWb4A¦žã—P‚$ÜÅ⇌AEW°N¤Ñ ‰:Å/DbzDE~Lð5y¸4"ÉrÝò(Úœü¢ÑJ£šòD:D““³³ ’&–NnùŠF­ ­J„ìÒ<'¯öVéè«C 02€‰d&tff>ff6r¡Q«\ûpBïlBïu&Zsˆx')‘ Ù˜J1zÏ/Ö™¯?¿B"j“FìµÑ6«c^óZÅb:ídHs\*¤›ÎD½"«ù†“ùp\mæÕœ›‡Ü½ íåzøjÌÍD'gWÌý?IlH(ÈA5(KfRņ^bKkK—YLK®ºqIb5…Ålú!qwŠÂ‰¨>ÑÎÐ?—¿%ô}LÛEæ ¼D\Zæ1]­%b™·óN›Ò*ߤßL£‘y:5YŒýRPLãô5Â"Ù±ñ=zœ¢ñ=’©\~4x‘Ò§uò)Aò{F«Y‡–r8ag&QäY’qAhm+’©œ2&Š¼fÔ¢”çCtpæckþO[å3Õ µq“?ÖÚŒ³ÌL‘“¬¯ŽÒ‚ìÈŽ3D¶œ¦1ML«çÕ(ÄW’±?~F"$NTŠ ’¢6¤J†ÅKñ(¾e¡]/SÖ롦c}Ýøìèó#ëÏ$}9 õ¼å£ûÌÍ´£µ›i÷QH%m”¸ÓˆGŠU1ÈÅ|oY˜¢jàP¦ÆãO §öMÒˆ°¡IUèŒÏ*™à¢™6«NJú;¿Š,î»!£#2Ç,¢(,Ê,XòÙ¼™ÍP¨dDÁ=ÈEÙ†XŽðìÄ™»S™sßøPWô©Àrá¡¡+‘r{ঌˆ¨2 Qr€Ãá†a(£%”ƒ,X\Ó$P‰$P'PË2ó@Ä@E­×WD¤R‰èšY–à¥Ä#e™,EÙ=Ç‘Äm‹~ˆtQ?'ç4¢]Øo/7D(.SŠWµâš!YÕêìç4f¤dsÈ´Ò},’–¿´'é=´Eìâr:bj¹¬Q»Y:ífÇ<ÑnvÖ5¥Tçíïz¯4h1‘°&Ò1Všê™Qð´N”ô*ÑJÑwZ¿Ó*ëGÆzCêRöTn]FkµfHÆÇZ#rü£®™©;3i3>V -¾«˜Ÿµª{OA8¨²5DÞ©Tí°,®•ƒ—LYöÁÖ¾j98¡Ú‚êÙ£¥gvÔ™}íjqåC"RÝç)¤“¥œÊLã3-ÅgúR<¨CSÅÐã]é®3Tk2Å•p?Ô9+åý)“n,¼GŽù!ž>ÕžC¹Œ ö5©œLø®œ›ø5…<²k”WUPO 9§‡j’ã «&If’ˆ#š%‡æGé‘(ƒæGi!»0W½%}£ÖX‹âNìE¸} -i꥔ˆHÍe÷º'¡Äô¶Ûû §¯IÛ{ÉL=Òû mÄ"ÇÓËøž%#•9©/“JŒÏPÂTn¦jý!‰i<Õ$ƒè šèó7çmâ<‹©‰:¥ºþGêKI1äßèÝ"/ÑJÍ*Ϩ”gTxr4òC%…=+/®ø­õP¦ýPdØ ®A¤õ®ŸuÄ ÕžA~[Iâ0ˆ$_ıí õÓ”a+-±%îlSzÖ!Ù!V‘;[½°§MfdÉD;QéI*[|Í…ˆ¤2·»8_'ñ¢¡ù ËFcø¢Œ‚NVT'::‹8çLV‘8ßr"r¦ê$¢CƹªrÑy+­µ0{±žtJêG,ö ©ØTÆÁ)ɣߩºá†DÛ9N\âìUΕŒ-­u‘ã }Ž°AV´j§yFZÉà+Èi)ô9GW|‰ôp|ÔRRYL1ÓMH²¾$¤aZkÁFR dG£ÓN#NXš°#y‰`Uȉ~´Že4þÑʯʅ5ÚdÓvá’tÒM×±XìéJÓÍ­Ë3•èEíæ(YQ -—e£çË%£“’A)ç46ƒ-—NèËeâ"‚Zn†eeõ*åÕkµå5dek5‘¤§„Ónc®gÃaD²HªPÎ/Z¡œQáPNö®B9=3¢d"O+iHr†œ(•‹)\mØbôÓϸ5[oÒ&Õ›öÇä"’ÅôT®\œ§Û¼ÕЖ[3&˜˜K×ü§oQúxËԻ؅§ ndÔªµˆ2ûï")+2¤TMF,zB”Gå-eÊ÷ÐE–¢TE^Z” †#"(c™_ Êf.ª’æ'4É|ŽAÒj“%4³£Ýô—š4i¢t†s”u’h!«0ßùGL–•ŸÜ}K¡¨‰“úY!¾Pæâ±o̓¾mDœ iTEuè´¸œÁ:?þÅ­¤“â¤÷bŠ&ߪ i*û(g<Æ ÑŒq…8°qÐP¦µðÌ;C“2DÆXh3÷°GÓT¼¾‘FTjhãÆÐçEÙÔÔkrÇ&ºDE$¾Ñ8ä¤×±›1V[ßukЫ×r¶V¤s˜k•——cP«X#’ˆ¨ô‰ÏäÜ#¥¦j8çuB¡°$a]6J+}'3;+íLg+‘R{IíþÕ>J÷µ(qFTûhõ:%š°#š°´ÑjÅšÇWJщÙö¬š¬*/U.ºèeø®u!O^βÛkbxi1ÕuïÕHí÷‡N‹ÇÕO=¦LO³ÔJ¦¾ú›Ç½`[w™DY´ŠÊĨ9„:§)QYl* ½v" Åâ²MøùçÆ©éRÔš˜½Âw.ªÄb1±˜y¤UHlÒšN}þ­LÿOç­÷Íí7Y¯¨JÄ~Š¼íœ^^¥D\ãÙ¢¢ÎGÆW¨:®T£³šóÞlUŒMëɱoä3B›i#ÜÈ:æDmS™É—­.«U™S½3C)ñL¢*½M•ÏJfÄÖañ´öOd%÷¿ÍýY&Bó”˜î97äFM>H‚)m4±»iEq«™u«Ë«†‚"”häµëJV"B) &<ä C r&Džq‹÷R}z^Š.׫UZ¤à*¾N“&&Æ°òÿqèDär¹\Xê䲪LF„ö&2ïtÕ™D:"ám\11Ó;qálBÚx4"T©¯uy‚.ŸA©¬¾ï} -éFåÞºª?%¥ŽW2"a'•jt«’yU3 ²ŒèxÅÊ<¨Û\¶Žæíi4šïœ¥d„X›i}êµ*#w‘DÇPgŸF:q¤·b³ÑBÓ Í Yc}xõ&Š:ÃÕGÑô!¤Ë¥ì1ÒÔa)¤tBb*õD¹ž”§§ã }š0Ä•©Œ&/ÕGÐ$K‘hÈx¿á[¥zégͨï)jÁ}—J¹zµ'žWŒªâÂ>GFѯñ]cl€üü:ûìx#âe µ¦¨ÔQ‰å›2’³ÀÐ ƒ‚A1ÉäÚ>€ êz&šÊ¡pHŽ%’$cL!€S -Ð)ñµ.5€„ú|¾0$5€ïBní%'ƒ.mRˆ·Í5éëž’ƒO -©î¤ÍˆÛÀ3ÞXõÓ¨g»K o  €ë¨/ìß³¨[Ï’ù¥ÔÛÉ&Hn\¡“RÜ _›•txCK¦µ¯ätÕ•ÄÊêÓ#5 ÊæòáE%5À£ ¨Q"³’¬ý:Ö€íôEZ @°óü5æÞêj`…ÁønHöØÝ=2#ã×÷Ñ7þ*‹ˆ¸ÿÄ[ÌÁã è}K›Ý1XßÐÁ^8jô.hñÞ¬Òó2€š=«]~ewÑ2*l€g‡ÌÃö`o°V:_17]Ò¬DIØ”¹M…Ë’²”£ØÝ2}¤ÆÕe£ðÐøp£Yæù@!ÃË€ý·ÎFÃo¤}2`^Œä0Ül§ùç1 ¨‹¢GÔPHRS1 @3ä\~á\ Æ0À"¶z"b Mè`€“_À͘÷gûðÍs´—ÍÛ1å…/þ ìƒ -œ†î¤Á.\0iÿ”“Í#0@&f¹/2+U`@«ÓíÞ1Aoò!Y`—®0Ò°(2 _¹Õ‚+øy…È~³ -ˆF¢'«›Ó8Á†ß3càcH×j©ç\•£$*¹ {«€èàÞŸ„wŒx¼Š T«Å( Êí‚$ -[ú‰8]år«»qô7„ Nm€`lpÞµœ¡Pb”Vm<Ô¶ºrÇúNUQýuµB1ïE.®âßnV¿ÙçÕHqÑÔ[(iº+¨]WHMÇ1¥iQ~–ÅCã§18šô+à2¨%’îãÈîb¬¡°ãÂز4—©±t1D0«iË°åàPú4‚a.¬?*³3.ib†ÐÒõ"(@q:X3ç#Å -‹%ˆc‚XËèÛðy£âÉfp0âÄ -à ïÏŸXŸ¿ÆصŠ›È -ð„êFI`ù3ØéYI¤"ÎJ<óf3Â3pIY‚Û©ò[(Ï¥>JÌèT=ü6ƒ=VÀcðgûÂb,ûe"Y%ÌŽîú4žd á\¬d½‰d4øn+77Tª]Vž œÊ g2I…XfI–JËHèŠUÀ¬ÛNö©¡OµS– ¿tÅÌl dƒÎÒÎ8ÿyŽ¤«Oè=œ_Æ™–ø£Í•[û»ü²Q€ÁLøV»¹é)Ô=1ÿ°ë ÕÁqØØÜžQFÐiü&#oN¢A·|á#.Õ.Á É¥„Ú@:™F*óîéßXZÐl…+!,dzhø•¬ÂI•ÓFGQúž'`‹ÄÏð˜i{ƒ7IßµÆ.ƒ ÖLZ ÐWE€ ¥Zœ:' míè\‰Cœ’‰†€?ðD€)œW‰Ð ‚,ñ€^`?ôtœ] •žüº ï?€A‹Û¯ËÉï’}€p¿ï½ØWº= ñŸr-èz((y€ˆyhÚ¸ú¸=-A›íëÿC? y’t€én-ªE/´IUæOÆ™Bü -˜»Òÿ0ÅuÌ eò"Êüj*ȵPYë=áAÅçìH ø#3Í -̪•ñÀf€ésb"U6\2À]2sîÈ;pa‰*õ”åÕHû¿L"ÀÓì(!œÉPÛw,k"•Ál¥;+º ½ìBvÜÚ„ë"Ó ‰u˜]" À,IU‚>Ø -Àp0´»>™.h©û‰¬®™3ÿ %)@A©v^P€ùÈh¶\¼ ¶b´ý‘SVèp ÀR½6Ø u|¥$€·é -¤’5úæ°ÀfqÃiΉ‰{ZÌ'ì(ðJ!€PÜèG¯vÞЀy›2Ë'² àÞ Û&´èÇî´ÐM®?Wõ0¾¨ªÝ´J§á`VAÊ°Ú?'<<Ñx,7€‡G×Íg]@Ó€ùG Í¡È ‰ô<-¨Hà ¦(¨¶Tuõ"ˆVzÜÓ¸ÅèàÁ€SÖ² oÏÿ!ì/ù7ºE±5ý/“ž—êÓèÑ3-úIÛó¿dôY•H™Ž 64ÿ„h“’ÉCË¿XtÿOs (nµ‘ÿ@IÝ¥3äøûÛŽ*c…ðDr ³„Æ? ßë_8ãŸÀhe!]FqèΣlºÙ|ÿ¡´J+¾¦düÃ%$jðÇÕB™ÿµCƒ–LòÓ¡©EÿAÉgy¨ÎÃÆ? Q -ðÃîlYÆ0órnR[JIh>zãßå‚'1(Q$HkI¸ñ;£^ãËÆÿ€fbC*–!”Æ¿9•Ksæžÿó׳vg,³C Ù§P‰ $Hªåðª Á° ‚fâøp9è¹¢Æ? -ïÐ2©Âÿ“”¬6= Œƒ•ªZT1§´A¸gÉ`ý RJš(ÔÌ,PW¡Oxãßw;ªù¶ŽÀ¶Œ'“ ˆY mÔnrüCKWô€àŠz€PËùžã1ï†ar^rüï<qzîž\oDÂ&½0 ǼÍS¹ý׳Ëñ5цj°¿ã‰Î³û½È”wÇ? pÇyÞÞ†–ˆrüSò׃Êí8þ !)sª8t¶ðnüŸÈ“)8»Ò›jmüOñËÍ»øÿp¹¨½5|PPÖ:Ô¶š)-ƒÙDÃÆ?ÊÉa0Õs4þ?.W¥ÔŠaµm)÷âÊÆ¿‘[Q€3Æ_­Š‰©„7­Ý3lü‡cÍè*âc,nüc ¤ÇV]Û°ñ†e"ÛÏvÆñô5þ'+§æ­'ì§ ¬öðjÛ9Æ13‹^ï{ÌiRØþçwÒ°‡ñ” õïÏ€M-Ù#†8Øû·!ú÷Oíp(Ûý¡=˜R», ÷x^„ošàjÛ¿&HP)mCoiÿ?Ü6ÙV×MöŸ(Æ‚ûSdÁ„hfêÛ§[­“7”%]Æ#çêÿqQâæŒå –úKˆƒúçôŸWGÖ‰DøSõšô·`ú—)ªœ§½è?vŽ„a§Û[{—òëR뼞o³)»væßfgeØ$Ãù«8o—”ã3ÿešf² Bp/$@­¤.c^Y?K÷i˜¯œõÊß_fgÊ_¼û2ãR ßïvšˆ;|@û\ øÁÑ™”Hò?¯ÜHÇÃ¥$ÿ µKæ@ -y&å%8©j"Øj³ªÀïZµOKJ’?5Oø†Ú6Ú$¸BýNhÆ©i#[ÉMYX­OäU—üí Õ+¾©°§;¸ A§¤gÅDUˆPµgG^ò7P’ágêZr´cW¬’ÿŸÚŠ•è9aèM›˜K-–§]‘0:Se,}è┊ ,´\{äߤ‘„S;ŠàÖk7òçE’§4)µ‘¿O‡¨È¹oÿ^Ö+sÙ9Vä 2Œü§]³?wõ)°ã?jTGþ¦‘o%ù/!µ–Ë’ÿ¤ bó ê!ù[•Ñ^¼5X‘üý«à%õoö =Š—4²Q:ŽW]ç-“² ‡Hˆâ.’ÿU{C#AÎiɲ¦­Š9 C;â’ÿÉñئ¤žÞ53¦1Õ$ÿõ¸P‹Î‡ÒVò'…zSÐ8CA]òÇ\»Ü«ªB‹BØHô-ù÷â#®¿Í¤ñY*ù3Ç¢‚8Du á_ÿÇ};P®h–ÀøßjtrMËÞÓh1F8ñçÛå`lâû@]pqUÙr -¯1–îÐÝýž«*ÿwyÔÎ6ü?²âV¨üCjø¨'eÞšÛòKjdÝŽèµ™¨•(&4ü‰Ba<Ç~õSáë -yŒ0ð2$¥zùÈ—eùþÅLTF>šáŸ´ÂŸÆ®íñý ›òŽÒµx|¾Ÿñ‡#7bó:¯•º÷Åå´*TÃÿ/Àh®A@3 >g7Ÿm-¦¼à¿\Fé~9½/®–¹@â(”þÁe]g»½¿Øÿ”{¬•gkj™¬-•3hï&oøûÂ$9˜Yëú\Jj»ÿ´[ âËä$S…ý]gärýÜA‚³7Þ© Ñy&µ6ü¯C0%7§ªÚð‡AŒÞ>Ûv?[e!º¶Ùäð'Z¬Œ -—$ƒj¢rý'Õ¿™ÎwÎD‘äÓµêÚ–q°Ã?X¦Üðð4!ùðǼØpi„TǼa þå¸êDÀjŸ`Ûˆ?ÄÿïÕa,úJÎi¿»!þ·T´ þ˜]ŸP•‹ø?³”oððOÑ.Sbsû}*U¨?X’›\‚š#ó摵 …Ïxø°¿~K<0þÓëÇî^CàS”Îð•ÌÅUKàö—Ôg[#HóÜ~@d`ÈT¹ýW~Õz Zrû?ÏÃÅ#0Açö ýÎÅB›‡mRÜþwoÞç^VÐ̨«¼aU ‹›iæ?öf•«_n‹dGh•¸ý]¸¦)I;× ¼ýá¶?¹§e®¼iñÈi#çÅ•­H?¸°mû±†MŒ7R5¸kQ>Ù–¥MúF¶œqJû½&ø21%x8ûu¯˜tíßs”„”ý­?3þbÿœJ­¨Áú`¯å,IäU?M1¿ß¿ð§~ ,½òú Ç |£~b›äGÊ -zú™ÃþBB húcqÌL¿Ë%SI&M¦ô[Túå¦ô—¤6-„æ©‚þ ýuWJd»è?X6€ÆåÝ¡ß(”ÆƇA8Ú¯•RÖáçß&Óà{n +óü …“yó“ç7/úÇ¢S¡ G:‡Q¯°¢ó M¬¶ezÎ_¸ÜæüMŽÿm­6ÒXxóã©ÓH=Øù©æW¼c²RŒ"jž Ìüâ5²³îèBö0¿‡Ì†¶“³×åïx_ÚNüi\"JŠ¥UÚ¶è‹ Ÿh­*U9ä]™ì’ÿ]iáÈÿV ý­YßSÈßòdgÕ´|ü'þU]×f1Y’6Îñã4íøåÔVãï¡È‚ß×ø3Ç4³ñ‡Ïˆnã·ýj‰>Þ§ )xöºÓV¢U6·XšzeKñw d¢Ç$‘/‰&ÃÄ – ¬Ä_æãÌaè=Ã/¤Ê\2g\õ4ƒ Š=ûf‹…œ‚,áï @g~‡,ž*Ùƒ?q˜ì ™_#Hðã&Y'7H øŽóJ¨>w¶üu¦¬êløûÞyˆ\Ü}§ªEóý%"G°§{?äÕÃQï“Ö¯7ƽ/ú€±¼ïÑüt˜~RÞ™“ýY œ¿à}s~ôB 9i Ýý¸ï&FÞtÉÁzì>_RáN¨GÔ}™ï¶Y`Áiò¹n}è°puƒØT•ûZÊ^Œû1LW(¢ÖÅepÿÙú'0ÇßDäAoKvGäÝs \$æøUáá¥~¯ ×QûÞÁ¼öI -­Ú¿Òu¤:ЊìbÚº-{¾½ŸÂ¸ˆ¹&´ª%%Èã/vö¦oXÒŒq²û AçPÙW¼idŽ³ñÅÈ4ãä±Æðs®8áÞ„™v‰PªÒÌ¢l³™.ÙÇ:7çŸÞî“’ÌúQ“iûúpR|ÏëS6²j0gõºþ“a¤Šë3í]BúMñ-d!mÙúàyÑ„&Ë´~¹dö„Âq -øXß -Þx­9¢m_}«Ãþøqd|‹9o­>MAsüp{¡²ê…³N~È£úY(ô¡HµOÝ‹Üiê{Q%Eê@<)(”ˆúPøý$äˆ#üé»_‚ŽbýŠV}“¾tÒ8¡î¨¤!¬²IBý&¤Q»ô×B¾Je Ô÷Ûg“>$S‡wR1ÈÝÑF¤?1Ÿ±a -Zæ2T…Wp„’Xy™JÑÒdÉèŸvr¼Œþãz2¯3ëöOŠþPâîÙ%ƒè—<ê#p÷T¨¥X]˜\·Ñ5Ñ︕¦bvЧ ´,Ó/-…Ë¡Y,—+ìó“W1ü׫' ô×ý°ýU¼?ªºðüùÆ­~ËùüZ<„ŠU¥úÓd=ÙTµïOØÌñüÀï "§Egí|MÓ?fþå—aΣói%C|äü¡¤ Ä4¶AOÿ7¿)WIëêN0ßÚÍ6ŸùíÀƒqS/Õš38Þq`KšïtI람cÇÒB,mæëS§‡×éØÉüajŸîíéEb>Ó94~LU¨•1«óY”ò½Õ×Gïòo²0³´È-}ç=RMí(a²p52Ë'•áîS“ö¹­+?¨å¡9`{.°€*¼ŒÛò¹šVn„3RÅ_…òñã¿ ¿»™“Z×€K´ùucò»F}-‹©Xüìc”|WU¬û$»}äÓïUÚ-òAwÍ„_—ð†|” -·Ãöù‰ìˆ÷¢}ü›³ZÁÑ—ª“Ç—“K,¼YBD¨£ŽJÀMôÞ–48~§¹èüðÅç”1Þ£4u&>Á[X5w•Zy‰Lm—ìÄÙe_9Ä•¸îÃo†?Æ&²æ”×6ü™$§{ì4¹Èð…\ƒ;¼”² Êˆ²Òöì ɃÛ<¦„t³W_.·$üÌ‹€{•›Sá°šu `Ëì|UN ÓõÂ/Ì8ßœ*aN”|-éÿM%žGíRüáòÚHFD õ4¸±¿)Ä@§:]À·¡*€‚\¤iÔàZÀ—¬€ûùÝ—j‹.3p|THœr’øÆâð@­¾Ï¬ ”ßg #’ø”̼W°Hpú¾yh&‘©B¢Õïp»Bù_N Jãe‰?€ŸhC&ê÷´›¥îˆ=?Åèõ^ªoAÆõ¾Æ9›éý±ôÞ<«zàĴ冮jýœ÷H -””÷ML6´ËlÅ`ñú-\°ïyn<Ãi]^\äZêÝÉ{æHî>˜4_¡³,™v¿,\rð åIv…rëÕý»ÒÂéþ5i*¼Gˆ×Tt_éeë ¹TôSá¹?|cºÝçÌ}>~Îßîœcñr«Ü?NÕ Þ™!÷Ág[²3oŒ{Í4ŒÑë<ˆû´ßß‘2´û8¸¿¦Â¬ÄËáOôð·?9¦/ùË~{W~Î0ðú%6À¿äG]V'ŽˆøÛó•}WJR,ÿö®²¥¨4€û¢;9¤b‡Paù=î++MîO±3#ùéܬC^_±zoÂ\Á4ë³r½É-)´F›c¡¦ G)Hîg€ûœ/œð!VRÓ¦ -ï Rùk2AuÿöÎQ›Äæ ðo?<³ùó/ÿ'|ï³Â™Þ\p–ÿíû\Цa ž •…uµÁ·~È~`£á§ @/±N+BÚí!w¯XºEۣ֒ǟ¨ÿ0›fX«Ôk8T±êÅ(oÛ¤=0¼ò«hÛ^» ölß·íápé jlAnƶ½ØZtY‰ mODS™––…;Žz¿° ©NVOµÑÜç²Úö+¨é|p›,A1–%EÍ E¹—¹³ÍMãÓËyÝ%Û~¨N!&~ØöoÁ\ùˆ¥_¤¯í·=Ú#—<À¶Oj8-Û>O‰øî.†ÇÓ¶/dùc[ ~ƒë4>¢­œBüñÏ6A[„|[íBÞæÔb]Û>®Ò¬ ßÆmû/„®G¬pÛœ½nxùGÕÄZþ;¯ÒB³mO¤¤Tã}Þ¶_UqðQJÖ¶=¨‚î>#J¸·íÍÍs­€‘)¨…*˜kÛG2sð²Æp©KXüÄ‘SµÖ¶7dÒM¸½FdʵxÇ) ü»älN)fÛQ›JŸYž!d/¥™l{'™5*Ûþp¹`ª*åÿ$†a¼²íû¡ Õó2'bl{À˜Ë_NßQí×öo4C‘w!’oÖö{$D¶Ê¡4¯í5Ç-Œfç¼rmOhÉ&¤ êKuÜMͲ¼müµ=j#Ï!¬+ÿQÀúÛÎOëÚ~³ ¤™ÒïÚž„­Hme)Ùj%¼TÊo÷7LVû£ÿÚ`8óYY®íÅ Ù$ngþ®íC–ÖRÑZ%‚ÆX‡³K6ßØöeü¶›$p³íEÁ”{¨Ê@õ_±í«¬Â˜ðÌ?Û³RûÆöƒü ”ò{½*tVíù¸;IÞÓNÆ„9Sùøþ¯Æº)³Šë³¯íçì`E/=Òb†’œ°ä¤w:Qîê­é®Èò Çï(ÒQJžP++ËßìlÌê÷P\¬ãÎêœP¶šXëKk¡ S2þ»^Pc¢ë,ºáóBÁŸºŽçk0ñZãžê:Ê 3m—s#f‡£uÜŽ`-\ŒXÌ¡IÒå»F–¸ÁÆ¢ê¼?ó‡­s|˜?ÖI]F;Rz¢nFgᣤkÃZóBg°9R -ÎÒÞ+Š­ÆîS~o»>n4T <0‰È)÷>;¶âþ P³­ŽÕãƒ:Jy ’¥‹Íc!«®8ü y¯'ꩲbД47±q"hü‰ â±»éTÄIÁ(¹yÙ'I¤†¬ͬƒ¯ªÛ…îŠu$Qуw&ԱǠäÅC®‡oŽb‰_êkµÇZGu0¤¢þÆ\®¥3°½ˆÉƒÄt.PðAÃ\Üj©#²h¨“­+YQªo@ Ú§š9s`2”ç&D”Œ4&l -NÏ3‚ á Áûè@D©yì*ÎÓáT%«Ì²°ªŠR³æ€i^šÍÙrÙê<:BÎêŠo+òû}¶§£ûã…•LêéÚ õt$ËÛÌÍrN°âª ¡§ó­Æ6çxåéˆz%õq+OG˜¤³†Ò[Øc‚¹î|ñÑ1´ˆêBD‰‰©B¼JO'nÓ›T|>•ûÅ•& v}I“芧óJT M.ÄÎR”luo LQrÌ·Õ[6,áédÊ\£üo5òé¤÷äÎN÷dûÞNÚK~bfR%ä¬o¦HÜ´‹{F»‚Ý´«†žœé_2g12?>òÇ¡` |ê{nH&.Ûˆù|yÑL]„©QT4~¥9I…IÂÝÌø˜àû¾±K€ÅÁÞ$BW|_Gu"Á„£ä…Èì#y?-?ä,kö‘[u[»bJ0'1¼Ï‹MÃâÃ3&˜ÐÏIc’rím¨ü¸ujl××}$áül_Ó((€fµ7Zú¹ŸþúÙyÒ,#Vƒë€Ê¤ùîíËJž2æ£?= ¹ý?×AþÉÔEîí}ò?”v›©Z¯Û2O²!¡ê3³ôØú_ÑÔþ€' Ô…âkMó9/°Ð}oùIštøzKb ï©ñÔ¦)9ƒ¤Ùšžú¥*¾,T“‹ižh_†Å‚ªºÃ+‚VF·2 ªš§ubøšSÛ¤ùa•‚þÓÃgJJù]‚|vI{C ä -Êͯe“ûENàÓ²`q· @4 Š]EKO@µ‰3Ù”RÕdˆx_UÄݨB± åS‰ã€÷Q›Ž"e¨7$Ñ .#T)ÞtD¢ArSºëAüh ]xÎo£A€'Lë6Ù͹ØNûÑ .¨ÃÌSªŽUAsùŒŸEÞÑ ÓÀÖ&-3m2^®ô7ÅÍD -c›æ|ˤB¦2iƒbõ{×sJ<ƒµ< $Ëß+rö„š´cI?© š8¸‘/Cι,»ñš¥¡pŽƒÄ)£×éã iœJøt֔㠛 •‹®ùý8hx®n¨„mãëB4(Õd¥±Ñ"ᦛѿáÇ2©¡ÆRž8ÈjüþóV·$n\0Vnk$žÅA ^bÑ×po—|,×ÑÖõ8Hß*ݦoÎD')”×£A ˆ; ¬kFòÊ€vS9\c8 -íjØáÈ‘¯ qbÕ„-àuŒ GYäEõ³)AFðWšU¶ E®*(qŸ8ÊØ‚†?^UÆ2îf%´lO¿:è^ÊÆØ4MáxÊ3Üï]X±”XÈdýV ¿Mº4:~Vì®BJµ f´ ’je“"[±™‹WÔ‚^6õa¶ÔT6Ii”ùpÉx¬†ôÕfb˜¡¥¼òE)¿`é’ ßÚP5®ih¾×ù¢ .¹{ÝÛ‚À‰øJe‘kW6€øTobþ@=Ûöó råÁXváAK/_Ðjœlùq2¼3K±àÏ„$ʵ¾³„žØNþå ˆbLÂ{/è¸*{›Ä ÿ~*dϦïYTùù‘ÏWú¿öJîÀ7•Mh,Së¡`lêÍ©ÏQ²Ý:¤ z2û키 ño_#Ó$)ˆÓ!¯.1ÁÌoQØüúð]ôHAü -k‘DÛ‚¸4³Wæö»T -Ò¬ùµÉW¢ªÿ+в{5N°©o;_ãÀcSêAl!Êcy$’8?챉P‰84oG2M -P©ÃgÏ‘[Aý¢§<#rsVP -€M²kA *RYþ2(?c6Ýå±»3UŸ•äkAz´³ýý€¯Õ‚ÂèA40¼ßÚ‰‚ÌFS_Ðl/ Шi‡?úÓô8[Gâ1B‡î rŸÑþ†ŒæPÖØl½ bÂûëýl+‘°Ë½ ì%.ï?ã¥|Ùä›Êj¹H=¤OOØ-›ñ‹*bæFǦu÷D4ˆ€ŸìÙ¼”„Ç ^Çsulª³$"æ $™Ó„rRœD»Çylª¤N• n=68«|ï1W术°ýèEAVP#õá¾ð´¯éymóh+¨š³PÙx -¬ˆÕ0Ða[P"W -m^´}µºÚ‚FHoS‚W¿ÀºÐö°6»{C:^F<™ûx\`·p‚Ø%ApŽŒÙÅæ7³ÁÁ€ýˆ•Žõ@Z“—qÒ:íÀ„ó–{m3P‹*èæ‹A‘|ůi°eäq¬ Ñùiƒw”3b+4æ°é™â( ¯¨îPi¡}e2MC¬µaéSÄó0%õÓ”µ¨´|AIÐL ÿLŸ×|M›‚~;ó‚:,¯ÛlO/¨gMèV„À¸¿üèÀ?s[DzAϤÑóøcõ% '{aÒ0*-hs¨¼©¥4lB\£ƒT{ r5´fœˆÒ‚òø#2ý¦#6~*ŸØ\ØÔp3çñErªIÍ‚JÈy©Ì‚ä±E4 Ò ‡àB6¥&–ã•ë+û‚ÒjvÀôl6È&ú‹ÊÕؘn ý€ÎÆqjÒo¹m¯²‰sø -t½ª˜CJƒÖì¶mÏáÌ&Ä÷÷ÈlZuZ¨"o?²ôÐ  †Öˆj“dó8Hâ¤ÂÔ °Nd?@å:¨„TKÈ-ë/Œ­ƒÖ·†fÉs´æу„·½u*ô ÆaÚô¯€UÝy£Ú„Þá¦e( ´÷D?¦Ñmrĵ˜þò‘ÇZOS_Üzû§æEÒ•ý:8€7i ݦcßôöØë µ - à5›†ì:H6 ⌄ -ÙAL ¨êA׺Çå¢89“ø+Ò0íõÚÇ ÈHC¼aêèë&(¬0¡»^IOi„n£ÍÀà¶nê„44í Ê÷>(Ëoy=·ž¹‰¸ù}+NmH5B⯴Á?š¾˜îûZé‹b( “${¥Í„š}­1ؽ¡• #vIë®±_eíá»)Æj`_„&Ï%l;i!ZU]q½¦Ás -ÁTBP3ˆGo"Ù2ã&¤íLÃô¦õ‡Ã*mRA¡yû%@ãñœÕ!$ÝkK2xäà2W:„£I·yDîãª}O¥!êªo_¾)ºÇv ¹VÚÄ©¾›’þ…XUi¼‚­Êåë%Uû¿Ó_^–t릖JU¼¾|7Ù¹  I¼Vþþn‚rþ` Û¬‰ÝBКû‹Põ•Æ7ò1r3èM\r…7ò‘• ;¢MÀ7õâ ŠPÞªLŒ’Ò!…ÞT…Šÿ€PsÝcEˆŽ‘­¥ešzÜ1ùOÎ}ÑžÞ¤x¾ÕéË™EèÅÎÞ@œ¸7,BFˆ-£¹9W -B -ô Ö‰˜ZçMˆ¹¬J<Ö`wÃyÓNÅM»0J–zô¦‡<+ 3‹Ox_„†©8È”ÅEHé÷i»u£7‘Â!:I|Éæ_„ -E!ã"UØ-a„ VЫÎÎ9ÇxdFHœ”ÜD\`"Ô¦«h‘èdY„f$ªIÎ\µÈ"Ä`²Çì ÌÅe†ÿrI ‹P?öÕ÷sX„T"à–!„9‡jÝ"”ȸ«Z„¼°DÚ²ҩΡ„NO¯±l¥ä_Ðo -̘ Ûz|S{î yjaZË1zEHMè„d"Xm0„LëžÊ"ê‹HÇEc—!$ &BÕ*"ï&†vº”!ÄJ.e“BÇ‚>ðEõ‡!d’j`+yÄ&NB«ç¼¯«…7~&CHRÍ´Ó*(0„0º)E”€¯{7“Ž°‰¢[æ‘B‹ø½Á¡[Åß6ÿòDÛÈZ¾ìÚet#ÙBý¨›ƒ×h–JBaÊðþnj[¤\d¥Ȧ2Âw“,cqe3%­uÝ †šÎA(ÌÎ.ãÆZE×g%'4ÚBŠR~ž7E¬ÉQ„þƒpé ¡÷ƒt0ChpŽ¯AØ5„èév>ç?9–neð&ÕU4@B U7¥UtEƒ´dß= Cè -‰ëL¨qð&ax~M]:{†Ð=žµ“žOò§ð¦”gt$×oÀŽÜ:¿YÍšpÍ@¬ÑàM`¿¦Ô##ßM/¬Â.1 !Ú•äuMÓ„!„ƒ™ˆŒl)4†Ð6~$Ð¥ mC(± ËÀOËðè»éáž 8º\7¹0Ë'mvn:°ú -ånõÃjá‚¿÷¿c„¾ê_רnì&E—ï¤rÄØA(Ö‡RIù€ž+H2H"»fÎîº «¶!»Z"– ¦7Ù¼®,BBn«‰xlB¥hÌRÓbä´“8¯Påh_…)”oz!˜o1;Š0Ë7q¸út® - ­lÝ2ûM û”Õ1ؕ§ɗR íz¹è¶t`ClC’M‰‘êEh¥8÷l¢ºãMå-¹ҭ;n3ö0ñ7)Mµ‚Ë–¦·å”{*¨g RnNmì -™:qç´ýfUa—` øçä¡ñÏ¥§Šª òGÒ k•5ˆ9ÄNQ¬êP¹áF³È;Ä-û\ÛßDÑ)}Ã"üPÑXë8‘Øëv_A,¤H -%ÁHä(þˆ&¢}µÜÀSر4ÕÙ£Ï;'5.GT€Ä.p\Þ÷ Ë–„úqPä»)Å›.ÑH`®‰”úè42þòlîg“ž¨xÊ Š€1 É(âžü"¬Rdòò·'åœÝ|T$êåanO]ҦݓòÂHsõ…è7¬û{òèÊÚ€øÉa ¡°ˆ¿LZQ`hµm4QÚ-*T„ns‘flp¼‹IÇêøiW‰5Hü‹îî4³ŸL@B¡}þ@‰ýM/xý©‰g×?íÑLþOmÍZ„tuè…ãê># òðh”,Õ‡jDCÐpfú‚‘”3P|”ë ò@)BÜxºakyõ¾‘ë×Ò݆£[œ]{i´L ªgdÚâ ÖŠì¤Žà+^B9šÖÔ;rß©)Ù.S“«:[ÎÇ+*G~*®Þ‘<¢@HŽP ¶È˜K(­9Soâ?&_B-ÆBÉ$’Uczí¤ôd´Z0ÖçÑîÙjÓxb¬s­@qÙ#K磲ƒïªà¿à)+ŠÕ×-RÆg¼ 圬¤šê8³¶R oeP4e )aó ‰L¥#~cñƒH5*‘¨„Ej-“§ÞK¡EùàÇHl§ó=›:;=T©šÛá°º-²¸(BnÊ!‰´è'$)”ÒõYÓ¢ò,0gUº$˜¨;žá”m ÞÖ‹¼M -ÿçêSßä±O¨âo?™|Ir?ú]FÙŸ¡kK4ê‘RêÕpžMÊwäÍ•Š¥V¡âBI´WO"_·ö“.\0®£Š¥PAI¤ÜsXð(Þv”€ô(»à‘§*¥ï.Q)%¸ŸzÉ”2AÜW™Þœòó³ó‡‰J\Lò¼enÉÇiV6!fUºŒyOÅW pfb–Ž”­6¥ÊO{($©˜XU0\(ú*‘yËÊP-æ -ä«drXž²åÜ^^²3JyÇ€\)þ¨Üúa¤9ž é/Àä\ëUú ϼFWéZË©†ÐH¾™Óf¹)“zQÏ–r|VŽß^V**Ó£Ù­´Á ¸.Ê‹H -—¥ '0¥û -õÏ´áJC‰ªœ»‘€@n% ¾@»¼J®”jGd0’YWj¨,¾au¦~WU)éœp¥÷¯€î -IeÝY½qŽÇÇ\\É'®`ºÚ —‰)’ª_V(š¤Ò\˜kÞK…ñ›±$ -&‹Ÿxe‰SSxUNê2òkï´¤0 AŽ-!Ê‘Ü®ni0}aŽR}¹ßYJùªB„ê˜KßR•Nö'ÅX)ÍK‡ ŠlÐܵK; –¢"RS©,U”`€è“Ö¸‰‚Ié“&G'tä0é9—Ñh/ÕoàÖŒ˜ÆÅ¿f%wczrE¦A&²H -ö/ÁàœÑFO„®ELË[“î%"Ä~LšCÐÇ®?…ý1ÉN Y­ ”‡ËIÂMG&}ÿZÔÄÎ{uö/G&®kÒVóÈÈ#“pµi{H€ð¾{d:ÔR{®ÝS"¾¥7^$“zɉTÌZ%3¦4—lŽÙE¢¯/’ÉÌÃçEú¸I&-fm÷È”#öš¥Ë) ò”Y©SaÓì#lâžfMr AYȆÑi&äÕÊD@&V¦ï„û€LôCzek˜æUISR¿"S²ä\8 -A\·%JIbnËwzÄI¹šŽxQˆ˜2ù.Åx@¤A˜‚‡Áã²ÅÿK  gŠ¥k]v¼Q¸Šé?åd­›©õ—ÚÒ;a†véyÈÁ”iÝŠ5>,ÒRL¢g–C+cŠg˜Ä]Æ”’¥S%¨óÁL1cÚü—ýøØ Á“CÁLàÁTë£&—––È3¦: LÅDCÃòg¾iê, 1•áuT'õϘÆðçy -¹9¤Õ`Æ$µ«xOjÕW|cu0•žrµÇb‚YƒO¬SÀb¢ŠÃBø—²T(Ç~…DZ˜Ê_~Þ»¾(òý—ÒÊyå©HšˆÉ(Ò´Õþ›ßÍ‹˜x)qÖ²lš{)¢k§ˆ(YŒ 1µýxRñV1‰ËÊ¢†’YÒök0¡Í-uœ,Ò»R -ÈÜRª%˜IQ¹¥²²$ÂTƯÂä·§\¶Ç^í‚¥<¹)ÒMl¨MN ‚‰-¬|ÿú"‚)r·‰SÛácLiÏ}ñ%ˆ”¨-„ 6LŽ4‰ÿ&¸!ˆ ž~¢hKñm^j)§S6£“~Œ@Š^™`Yž H!L"þv[ Lóƒ”u;.•¼·Tºm=9Þìé¸ÔÖ[°{ˆ 8}0¥ãœ,„El~8˜*PQÕ>ïÁD‡ÉÙÔY«/uw€ÉÃ*3ã0•V@î‘iÀÜaÂ÷À`6^öt‚qÂã·Ã´|‚ÉÓ ÊôË'wô{öjùôÞ„m“¶&þgùÔj»Z9K¥ÕØ›ó…»OË—:3ÿx©N§lm˜EC•—Š=C¨Gcãzî¥*«ÕC -¶Ú‘ã4H°ôêÓPIâJ[®÷ˆ±`tõ©loðé‡[*‘tî9µÐ#ö)ÇfÃðPÜRi[¤BË«÷-ÕÒà5َڌד͌.¹Ri×im±OG¢Zø)ï&tõS4~󘎳/M¥p„Í褡ƒ¦ ˆ8UÄÅPÊý°±MÂýTe˜*RPÄŽÊHÕ¸ßO%êiû Š'êäQá×p‚†EEŠb­\ÔéŸ0šÿl¨)1.jõ - NWHçTˆRü­Ï®fbuQºì-ÁÒdJ‰¡»].êÛM\b!y.ê0ÄKa ûºÝ6YåÏÝyƒ6¤™^ -À>“ rQ¡€ -Yœœ&ƒµ!º-——àÆç-Z˜ÒF;&„N˜ˆ­£rõ%l5a£`?Æ\ó@ÂRÂ(øÃÈäD•rºÚi‘[xa”+übþHð¤E/­’X½c0‘%̨53Å:•¥U\Ñt•ââT-£¡¥FeªO£Ž³,Wˆ|š¢dǫ̃Lµ*ƒüË‹‚6ZÙ˜êrµkUç÷)ϨnWXOŬÑHa:£ÂOûq?­÷=ÐLZ]À††­UµM†Ñéð?QÉ‹Ÿf±.Û­U¢ŒÈ6i•n†ºÒd¬ -Y›Õ9ºtpæè("Šr¿Îñ9DÄ•kT>Ñ·³òÝx G}«hÌøóÃ-gÕ?^j§äm0-<\ŒÄh«Æµ×ÊìP{›õ (ÐVYm¸¢¬DÊÚWK¾µc9ŽeY!ÕªîJ¦+‘SG1gd2,ö¢D¹â¢CüvŸz¢OM6êר_˜²V¶Š<‚^{lªÙÎsÖ&[uš‹½‹N|O/r¡u­÷­šºƒ8,P¾FÙ£ãO òºÏV5°aÉj@Ìë¿M£² -Ø™¢¢Â“0fö7jºHuŒÊ¥¦ÐÖ¿ÿTirºmn^]Š -ú Žl}Ô°óÁAÍë£F V9º+H‚|ÃG…]õVvYXZÙ{+b;ƒ÷B˱…B(”V_ÌŸÙïR¾= -ZtW].²Bžš+wsVBŒÎÖpÃyf°_ê (‡F"'þÇq¯˜´Bå{_«½îª)éqÝŇ~/ÄCV9·}®ÿQŽì™u»*ò -W"zÃ)#]uÙÞN1Aºj-hl@'P -§«Å[L9ùóWüɱ߹xw{&°¨?êø+A,Àþ¨¦ ¨Šœ¹«”MRï=LøQ8Z;¸ôŒ€£Ãµæö-&ëÕçTkE[úÝ_û¨¸òK*ϸýî ©²ÔÓ¾ -æ ‘vĘ‹'© 5˜Ôc¹a5˜»ÔþÞ²’àsÖ’ -’¯r~Gê¶û¼íJýY•eúo©boýXVZÄk|¸«!W%ÑHSË€vkÊÖlS`h€§|pB%§r™0³VÁeyzuÔϨ?cR E±M±E‹¼y^Ü -’]ííÜ7|þ@(ÒJòuúqG˾Õ4‚%}ewd²;â*€ørWΩìy±YWú¥ 4(W¸Å\eÂk©.ݳDWÙs~´5ËÆì [ø3n7 tM±sÓ¸0éêŠkp`¾âaÏüÍãÓ‹»Ê™ @̨lÒH­‰Ê¦̶r0ø+Gª‚¡©Êñµi+ä]%èç™…:ÿ5ஶ VŠ»2± 2‰IÆ*êËUrØCR–’6(ªæbYÛ"Ê)ªjV $çì -óÞf°%Úš=ÚUŠÖÝ•ëHÛ¢JÅOèµWÃЮžÐ}Í)ð¢]=!¿ÏÀ’²ˆU¹5V§ -¡z€“ƾs_M¿®‚¤ÓGûø¿®pæVsÏR J¢ƒAå}]½ 3nLŽ¸ßéq©IŽ£o §ê[_ÖHU×ÞõP˜)ô TônW×MIvª©ÎEô¼ÚUY -Uð¹a÷h•v4#òb!÷ÊØ6#|¥æx-fSõûì*bjDzUR4«Ö_•É/÷ÕÎ)'UóKb°Ú2Ë~¿ºPž ÆX ÑŠÍJûmXöù–c¤T=À"@‡•qôãÀ¢!€ÙÊ·¢¿VGpë„YÿaÚö5nu¤÷÷zqŠ¿éÍ[íõë¬ÃÚzàá&,®v(£vY:¬Ù™¡Ö®àç)Ô,E “¾UWXí·ÂN· Â+"€¡åU2s(¦^eè)ŠÑti¾:Ìþz®Wh.ñWtPÜq¬Îf1ŸËíi¯œ|‚¥?ÖŠÁc·Õ¾ª ˼žá•‘Uý«¿Šd=ر,­ZÉÚñM'ÅZåÐ îÉZ–RÈXÔóÂGQÖǧ .q$‡=(9l¬Ö8“„VYžÄÆèbüX†¨)ïKüÅFIÚH–!^—4YIHÈ8ÊV!v´1+n%2u2Ö²=I`ú²˜;ïrš¥á%4‹£² šÆp"œ5 ïTç3{EãÜ:K7ÔÄzãp¸üAL ½¹MN­³F6deVAÇ\eü¿ÒÑ{¬³€2ngèê¾¼ø¿å܆ØG«:{Ê‘f™üEä -£Æ³Bc³Ùñ¬wl¸$Ã~‚Ý ÛÀ\WƒÉ2—À³Žºœ÷uÈÎán—¾¤€g…å›'U$ Iè)qR>Ü1žEÆ›»¶=ÅtšE´ 4{Yà è¦}þ!«©Ú*Ó®)žuPÖB¬zJmÔœ,|ȶIõ[ô{[9;ö~<ËÀŸ%ZAó†-ųb:¥ j¸ˆvö¡ -Jâþ,öÏ®’Yvt”ñuÏr-,âÝöçËxVÀÙLà¿õnƒ%éBù¥é@'Fñ¬»ÿh„B‘›ôuYêå–Ïb~0/g…-¨:æaþäYÉAÎ4.ó¬t`F—eró,€eøP\Á6Ï‚TÜôf]ëß où­6ÏÒů'Ð} çY‡ZçwòË „á6ËÃMÖ`%&½2ñNúFYJuttć$æYÀv”T -HæYk®ÒÈW•“ydß\·óÔæYô1^Ïp‡Ý¢ÈlX†þ;á6jœøUd>>ËÇ.^Ö4bÅ:½pQž8+ð…P¡IC -^–¹Õ9Ô„±γ‚ 6‰c%¦æbŒ)×Qa‹Ç‘)GÜŽKf|žU¼\†4—g͵†öç韽Xže¤uƒ£Užõú%ñ,hÙV÷h<+‡Äð—Ο¥_‰iÙxVàÙ›A@Ïï,ïåàƒÔ€Ô²w°b™ÊÚ\¦:!…ï,‰Q5›Ÿw:Gx–µi®z‹ù|.xV¯Ô¬Y¶4BÇ_ØwbŽÑƒg¥q4G.}?õR+àYy°ªý@GV[Öñà(Ñz=“È¡âÑVÎ,"]öC±AÊ5z:Ïúü—`yÌÀ³J»üìÍ­ªí¢€gGÏɱՙš'ñ³%\ÔТ¥oHš)l«g3<Ë--N½BÙíGæÓu¨!”zµFAÓÎb7Fú¹ÅÎòFŸ¶o”ÅΘ'p `Þâ,!ì,Wû¹î¬0Œ†g…í³r:•S$ É.ú6¹R5 ñN“´p‰¸á¸¥GR_Üò¬¼Iæ|yV´_óE‹Lpà›µÐ¬“Ê7žR¼à2#MAf>ò¬tǾC“@”åYN¤£j–…7äYrÒy­<ËŸŽÅÀÕjyÖ.™uo#›<+©,ãäY+¡1ÀWzŽ&âãSž5¶å1}°ˆ³xÒñAAî¥)©þÏʳl@ºp}ðL¨%J¹T†g?fëÝgñòÀξ+Y =KÓ.ÅTù…+=˺Ïó53d=‹<‹g_] Dê—žÕ!ú:0Uâ‡}гÜà ÿþ -›g8±GHöGžÒE°’g6-äËÄfUžE¼.6ûæY°ªÙ$Íiγ®—Á=áôJçYsÆÏj# –| zïùÀÓϳöî9Ó>C€µ’kž¥¢M«¶[ÒçYç(7Ñø^ò,cÉPñT:ÖÄ.žeôÀƒ5æ!3ù"ž•˜ãäyÖ±,'½¨Cò,¨Áƒ^½‹ëåUs<Òlz½/äY@j"ŠlV1¸ÔAúvRð9[u¨§< ‡OɶÏ*iìÅ0§O\ˆmËÔYB„yê¬Hdþà¾ÉÏ1¯ÄÄRg¡"·° ŒU¥Ž ˜JP”ËÓYvæ]ÒSŸ»KÔÜTYÚëÙ6Æz²³ÎeÙŠ…Mp.Ùƒ›P.M¡j¥R˜¡V\gåp€\gÉÚ’MTOš»uVÙ €¶î¡ÃëåÂ:+ìRM#¿ebGõ.ÒEYgáñî«ë¢ˆ:x DÓàë¬QÆZ>`º: Ó£T½áѬÙ7dÞWoÈcg­x‡fk Z.K„j©0£å;ë !ÚA)§×Yù•nuÖ˜(S©o: |0Ït ï( M²T0ž³ÄÚ!avµúóœ/ñeEuY8gEȳ.ãJó©4œ³Fˆ‚˜»—r’Ïw„µßr)äöñ3:+VÎÒ½î $ËY¿ -s2g€¨•³NÚR?í‹6ìiÏ{nÖÊ8¹>ˆfJ TØq–ÐÅšé ´? D+èk1T6Õ$9+|…bÚd#gé|'ó,ìÿÓ8 hÒö›b( ÀvœÅ¾k ŨÜJ©¬xØ ¶I“¹Êï“óqVŒµà"À‚pÇYÑ­D¯Ž"ÎB¨½Æº³tgýû«#÷–ƒ8+Z¬ ‡ þÁ/Ó$‰³})νã,@oÏaVOLÐúã,_öÔÑ&¡³DÄ"Z?AmœµsªTw7Î2RÈA¬ñ„]®Ž³|ø†Ê |0…u4ôÞ©;>9Φåu!´<Ϊ>û[$ÄòÓØq,k™dTi_|þŽ³0¿Ì£8W³BKý‹sº;ÂV¬7¼ÒnYHWâHDe?-%!ç¿I°8ëTÚæR¦À¿gMNx’›˜Kœ5PH…»ö -½ª:Õ%aCJí•öEçâ8 jøœu tYŒ³ÊŠWþ*5>Ê÷ã¬Ç àZ©UÔã¬%êCÚNÀÐ 7èLëáqÖ¹ë˜.ûšxýʼéŽEdãâÙw¦þzj²"«˜àØÌŽ” ŸKŸÓƒË8Ë› p6aÐqÖíÚPÃf‹ÇYvaUXœEÜ—l±êþ`g ÀIÌ%—¡qV`Ù"l“¾z³d•QOàøôй9g„M•9¡;&­.Gåg1p®#:`<gmÐ=…êp5<;Ί`¼ÌTg5B¯Ç‹TI_ñÆl0”€iA !®@~ïþÃÙd2ý‘q–Øv- /.%‹³æUžæq¡â,'ï"=ò\œuÇ’gx ߤ™ÛË´qÖ[(WhJÍpŒ³<ùkžÍî\‚\Ø8ËýJ¼¾‡ÀcêŠHùÆècœuhâ0;Rìt~Š#a“œ•$‰H5ÈCMåý}ÑPIJS99‹: ¶BŽÉYÓÚét®gr–tF{Â;ÒE$gM|pž €œÉ‘ð&è0á& È—‘³`r9‡œÕLvµÈ„ÿ)rÖ` åì#º©D"˜WC¼;lì)§Á€yèÿ@Ϊ)6aÖA½Dïû“³BAÜnýNg¸–c"³”~½ŽŸ§ýç5ÜäVÔµ_9‹a ñÔ´ñ½öçWx›3£«7g¥X‡Ñ)º9Îœuõ¾Sö§ÜbÎZÎC׬ùaÎ]ã z^7üb¦þÃO( f™:ò4ä NðÃÈððê˜Bͺ¿vÀwìàˆYo¼Uš4Œ [Éä¹0ðóæ—!Ë¥V¹W¼©JGrÜ×3?S{¨Yº-L é†žšåˆVÝ>‡š<rVsøšYG¼˜šAñÀ 8S„­®!pà©Yq¬‰I—Yêµi¼Ùy8—5©Ù£™˜ñ…M²fQ¹÷È*2  bEÉÇÖ¬R­_d‡ª¡i¾d…IžâD\–ò=^³Ä@ˆpÍ[+¿lÀˆ6HøùÙ÷šå¢7þKÈß1àó;$á£e2ÌË(>S½€YnÍ*»“àBÈÚ÷ÇíOßú›Õ¬d×oæž$ÒÔ9ñæÉüškVüô®ÏÞßöøšÕðúÍãÚuŸE»}¸iñ%:»\µ›µVÍj³­e•#HôÕ¬Ä`ùﬥË0ö­f©Zkz±5=ŠDÄj–ZÐm4“j§ª÷ݺT³"¯ceøTͺžŒR³_Ú˜„¾‡ÉhÅyµ} `\&Ë›­,¹8­l z™¹€mðGý kU³ô(Ô¬›š5ÉŽ½î©YøÕ0Ÿ¶5ëò )š¦LÍjóÊ-ù5–šåG=¬Ô,.5Pl8×ò2ÇRjÖ‹‘ CŒäyšušµµê*2!Í‚gñ¼ç•™õlÙ H¬ÏvØr}"ÅQÒ¬\]@c*jD²&Jš•¥:ƒIgÛé>L\ÁIš•m$¤AžP&Íúiß…^­´`T»=å`½æ&°Õ$º4Ë|O>fhÓ¬…õ˜7Øù…iÖ£eXgI=Íš‡4{ŒÅ“šuÌHì§;µ‡š4ÒWæn Q¯èf:áüÔ¬™±‚â5?¦/^1 N7|ƼÓùHÍ©YpʨRG¨‰6¡fí=„(mþ·siŨYÎ7Û¥qZj–ô½nܘ$šõr‡µ†x§*©YUµé"ŽUc -Mͪ5½Àìm+ê -¼…J«Š¥fÅå8“mg-’šE©4¿.@Kͪx»ÜF6D5«0=䆥$V厓š5¤âcì+2¥CýÍŽ5«/ ªYV‡†ªÎo‘-[ͺõ»àÓµCtSÍÒ^P3Ö¨á“å&\®fÁ{²Fj5£²šå/Ïîºmî_9`ÍjƒËg|©“HG¶Éw5ë¿ÝìnͲ9ó‘5ëç¤ðh_kÍÒZ2m××h¯™ô­Yyü¿t—œ[\ÍŠþò29JúÔ¬ ¸(ßF²|qLÍÒOG×IèðÔ,TsÀó˜¿TJÍšþîEz«„\¦¦fc’E_kU™še²Ô•³$ŒUj–Z&)<ÞðáDͲ·«Øº·MÍBp¯ñhü¹"¨YEñnºpO³Â¥Ž”falKÒ,Î5´ÁOiV24'ö ýár©'ͺÑ' Us —f±]A!ƒúcCòˆfV'ÍnG³,À…ë4E³¾Ú4#uiÖGóõ‹8‚SÖ§Y…Ñ‘ÂiÓh„lþ¨Yš‘Æzä÷ì«EN³øŽ·pÛFLÊÍv£Â”Ký¥YÀ½d8º=s$tðî+¥Yi™7U›4kÏ)ìQ;¤YÆ)?H÷ÎÆiV&Ç/>¥YsYjˆnÿr¸ø¥Y—î.ÍZtÍÀ•4K•áœO;1Îxü¥YÆ7OCò…«–3Ý*÷ršeÝÁ†9Hè8ÍZhkƒŸJ`‰i–ã*À§¤Ìsè6ø-°Xª’Œ0%ŸfÉ'îO¡ ѽ‹ÓDš7 Â²'ÿ{šeÇ÷!=ÍŠ1ŽXFÂLÂ;?ÍÊ?ÉU„8?Ôµ­onš% Ð{|TcJÿ4ëdžˆ…sÐÐ4ÆæRCžM³ò@Nš²ÿ6Íú‘Õ•Ò™¤YÜÀàYÒU¡e°³F¢š#v8^[Óƒ(ÍjhFž:=Ñ2©«°·ø€ÔZØÁÆOhI³”œ¢ÂE‘4ë²æž°'ËäÒ¬ÿNUß P‘f±(D¶4‹­M© -3ùW8jÖ$%>Ýyƒ˜FÍêŽÒ ‡¾5ëíêÎÔÔY‰›šeL!ìbâË9ëjŠ¦7l®Æ{“ò횃‚».P^ &S¶˜GÍJ)Ê«Dͪ›y>ãJ -ï£׫óy™\JÍJì#‚•*5«”ÆGøqR¿.Ô’á”D4QjÖéá»9$¥fu=‰¥Ì4Kî ÝKš•B,Ú€ÃäQ9 M9‰ˆ?€zŸÐ‚¯thÔ¬òZr¿\ÊV¹˜WS*ð2C5+Êب¢Ä]©YmëÀÀü6jV9ªšjŒÌN³°]±ð#ƒ-&L³‚<®Ž™M³\#î©–Dk„ϲC…bå4kŸ4-õK^žfŸçnÌ4N³ê³û6 =Õi–iøbY±§YùŒiÜJy °éáÀ3Ír¾QªúÖ«hz·1eršEÚÐfüo•éiV]C3vfÃùêZY>^“pšõR‰Ó8ÆêÄ4+ŒAšiV\f¤º%õ4k¨Žq@ òaTá¤O³”L[1O¬Á0žfµð\UÂɶ5µü2ËOHòN³NôÙ4sÁ™âM³†ffÓ,ìa U‰W1ÍÚËè^"ŸfÕª|1§Y=,KM©Yí(Æ Îm§ÉǨfÉœ+ü–ÿ A5+>ò6ˆ”[¡ô—diØÊA¹‚M5 =yö\õ¤„àòxU³ŒP/¼.¬>ªY€àWë2\ô뱨(¨{ìkÖ‡åØÚÿéšåî(|Q -þVÆ~ͪèÚ:¦9è]³h#…ßØñ%á5Kà{R ¨k–oߤ^¯Y§Í‚LùšU TPšu`±YD?DÚ·k–Í—ïÉ®×5Á#ªi׬°g±•ÍHknð혧E«G¹fùw7Ö®Yut” Ïž9*íxÍj€©¡B|Ù5+óà¾f™U;à÷ÛÐ…¿^‚Y³¦é«õWåÖÚë¦Cž$£ÍÖ,tL/t‘ÖO'75«²Ú_˦ÀS³Ò—7ê^û×cŽe5«¸…#ñ‡š¥â»eyðPQ³‚¡ö› -"5K°+Ì¡U:5+JØôÎyjlª„šÔ,ôÆg¡°©YØëˆ ­ßP³ïD–7+ô¿¤’s’qƦnÍÒÃ˺[J#µkÖÙGzUkÍB;hÇH¬YÂ7ðí®H—ÊÅ!Ãð>°ZâšU»m׌V³¾Ì}ØRš1ZÍZn¸'ھͺ)´ëÆZ5ëqWÁI­³B³üm¨Yß9±˜ÌT%šåÒ¶1Y„è-{Ž› µ"}¨Yô“ÁN!γó{¸Kj–BOÃx*Ô¬D±Y¢'GÍÊÐ\´Eݺ>“î¼ -jÉ.PÊ5õQ³ºk3[ ìq Ì`<Ù'<€ÎðLö®Y°Ž6aŒ°}¤ ’Ê.ƒÍB1~¤Ú1˜Ø¬Ï0?R±Yßî°|qÍ:·%_/ Ñ”~1 6ËüßöàN`\³ÄW‰ìÀß?ùkVf÷ž‘pgYi–$ e¯“\³ñg9kNÚ¯YùŽçGþÿ½f!¬bù¯Y˜+ßžæáõÔ›U&9%Nà5+ËKèVú¶3%sÍâãË*®S›(‚ש •€m–+ÿ»TÖ¬6³8—6`wä&¾ËŽkV.¡'"Ø,äðª&Çìš+éèóUÊ°’÷š•9X˘=кféL4.vP׬nf(5«fÞxÍÂô}jé !ã+¹5ÿ¶­˜Üx‰qÍó¿¨:ÿ~½¹Ìzº 6KýψÖý?è†X-pÆEÍüŒØ,>œ}­kzZ'`»]„³àDYL©©†&>Yt -¢…¼‚«F4Øu»£”y=œöÀ5›V ÎRó7‹TTÅYù¦zÒ³8«pˆ -‰³ ‹³ÒÈd¨D¾‚³ª‡úЖýGupÖ´gÏZ aFÈÆ pVKa¸hä -ÎÚ_ZÊü£oÖè.ã%¾Þ,.߇=&ì½JΪ }XŠ7,¡­Ž¤-žß¬¶6ðkÔ7ë°snðÄ£Fír¼˜0uQHKΆ¿Š[Ä×Îöm)‰}~©uS¼YPÍ -С±HŸžbü±Úø†Â6ärƉ¡ ¬³0}]7ëW±_¼7‹:¹ {³è2Å×›åDÑÐ4ÆC^ÞÜ.r:äA*Ý,iˆi -tø´ óº’yƒSÓõ:ZŽÔyyúŽä¸ \MYýik7ãä:{qŒ@œºYÛ!|/&žÊ?EÂwò‡¾ÉXC‰ uKL³<Ôâ,xW8+sJ ¢ªo–qò_gaÈEaç«N(à,Ú}NÝ gE.¸dþ^8‹Qó¯ä¢*mæÒ–»m×Éô—£JH¾z8+4ØùÁYmŠã\|«(Ép²n$»kXÀ·•…ñÀYBHçÃþ3Ì¢!uÜ\:µÕ›Ðöã4ˆ²õ¿oâ…³þf…Wã+ä‡ÎÂØXh åÀ×ïøXn8+X¤Îzh±­jœàû¨JošqV'Pîux¯‰b#ŽÑ!;ª¼q–šo¨ê:…¸x<΂‚¢rÅÈYö@ (¬s|ô”ä¬Äà”}nƒjyxJ–=ÊY!#4±åø_)¶|õõùǬ$J\c74ƒ3³F>HPl>ÖrH½AxÒåæ³ u,9ɠЈŽZcœåº7±4çAoœÅ¤¼Ø9;àLrVŒq!g}ŒÀi0¢‹Sø‰rVzf -ßNF4ßõ"g… ®Žè¨ã4)] uÂÙ2±ÌR9<À˜qæ3œÃâêRgÛmß x&g]ÈÓ4ñ®ë#g|%ŸË˜œ5èµ2&Šùîˆ={9+C¯[ ³õurVD--¤ÈY…½º_ýƒý'wkÉY±¶ë÷nš@ˆ é®"âéæ2³'AóÎÝÖ‹Îo\\á®ÄÒbñjéj¬œ%ÏiE%_xßÄÐ@dàë’§AÜmÕëZ¿TÎú¿.ëw»¨œõå×–‹f¬•Y5ÈY›>Q±ßqVpcJ]Rd·´&`þ㬗ÑÛº›É@èËã¬IfÎ/Î4XžLiòpV<…ò"k4’?DСÀ2— Ò+œåÒ‘½º\×`U8ëÛŠ€ÀŸoÀYÖ‚Ȭ¶ÀYÆÑå -ª¨iÀYAš¼¢Qú]€³<äêÑÊ/àÁYË~´¹AÒ gÍË µÎËÀÖðmÒìJ}gÁ¬/¾:ª"ÕÅY¿cdïN¢ÿhᬃÁºÎêk ÔÛRlá K†‚%ÎÚß7!`¡Q‡HÈ@¶o z–8‹hînÞ¡h͵¿fq–ü‡Â×ÿp+­"Îí8u±Sl\ÄYe{YOâ-Ί‚V"Ƙ4;ÎÒLO ÂJ’³‚ol‚¢ .Κ¯éÃàÅ—ÈûÊ;à¯`ÙyC0%t* ÇYBEÓ1ñçkÛ•ôÜk  BW"ü”Ò7Ãù%6¡ÉÚ½äq )ÆX-›]³LßT•kÂœ 8irÖ(ø.ß“\kzz òS¹4 ÃG geØþ”óUxÿ?þ€œµ£ÇÁ”QØF¹­„kVå²FƒVFKˆzïk´°,‰)Êé+©—³BÛ:¡âG›,ÐúÒ¢,”³Ž Bms°*x9«[‚á1@È8•³b ¦¢œ%"òQø-gÉ•GbZu•³â½ªË¤-gz Õ"- *g9ÙU? D;„~€U½8›"Û/Jb×å,T®f©@&Ãœ¾1‹¶Ð/9«7ûÈÁ6²Úd‹`rÖë ?å}vÂÐëùë!g;˜òè­ä¬ÕYÉךNX(t’-„ä,ñ3è¹òEÎJ{Vnû8F8‘³¢|¶DÀÉYù}0Kä,»†ûîg­”XcLŠñ;èÓ^ ìíj@ NÜI¨ u‹Yœ%Ð!c*ƒ./àЬy˜f‰†bfEù !“ÍÜ•2Yßm¼ì_ðl÷‚‚ôúÆéÿOOÜ_õ|þâŒH£U…Ô7SÿŽ«ƒîOéÌž1iHb Pj@Ÿ„¬pF'ƒŠT©Sže5)Äòö£K^|OöüAúRf†=â ztÚ[y•ÿéùZŽÒ¨)uÜŒWyÌÙV 7‡9rˆcAJÆÄ1”"!Y׸i&D'I ­bÿÊ× k>ƒ=°1‚ÎÅìh-ŽF>d"Ìø×Øßè?àŒëâ@½$ cõ»&Q“)j08;9F‰/Gú,8Ãwë5(°§v—ãÎøR•âÉþ¹¾b  Ãňi³hçµiöe½ã„o—öœ où/œP¦¦$>ò?YyPbàLÉÒÛ†×è£%/²9 -¶CÎA+¿,uѨ<X0!aâ8I$äm‘¼»‰k², -l€#-+¨än¾ý6:€X ßKì‘>¦û꬀F)Do5A³½ð¢óU»%_|R)½/ gi:‹e93wžîå°¾vþDiÅè9µ&>åLycrMТÀ®ŸR!• ,i””еás*Ò†ïÇ)\xi‰ËHŸzšÅO”–„hÆe ±š–|~:·Œëãdþ¬p4@ݸ*Y¯@OûáÔõÂ|~ ÒÄ—ˆòÖª59QòÊ×'®è‹ãy¯ü/ªœÌݵЮvÒؤƒ¯U•ˆ=ºUp)¥œ¼?^èô>笓8ßÐdDИ.S!i÷'[Öë -‰ƒ~ØkêÄÀÊëwÚSHsÅ0çQšÖÊûÙUKø¯¨Ì|›ˆjñLf Rö˜ =ºâCQsü¹|lJìLB ÜcqJ ¼>mÕÙŠÚMWêsËU`Š¥xd…D%Þ7×|+÷4Ü‹Np<ä10¾­yæÖ¢Ê7uPØþÓø?Æk ï[+®2ÙW.•g5àWØä 3–/¦T‹9A­.AõӰɪgß9€¿±ýä_L¬2ØÇl#Ýa¢c%®VÃK/pW¾©Ü¶“-*5rl5‰„p Éë83,q÷Wõš|äX™¬ÐÚ{"­n~®Íq›}QיLj!î&µ4ì 7…7sžnÞyJèr¬¨ÛöC6XŸï8Â%Ÿ!°AéÄÛÅÈâ†öçæZõ÷ÀØÁ–õ4Î+ÈÏuÿÈðM# ­xm–ÒŒI -OóO~œ\@d݆ ˆÅ*šü·qÉm¯-éUÃãLp”Í0)ÅÇžŽ ‚e -ÚÈ5ænØR’ë¸í5H,« zR)’ué”ùÖvo1äöÚ™+ýhý=ã©k›qÀPPË׃ŠÞ×ìV¡¥ì5!…ÇÀO\ é'r Ί3[ŒîUÜmì„î¡…Œµe¯À“…üˆ?Lî#Õ̇ -9TâÄWúýp ‰&¶/æ‘W;^ž5o¹øg€^%·Ü#ðêýçÔè8øY¿mqÁ:©gÔ~@Kïöe±›a<ΦEçÐê“í¹HJ²Ls?ælâT<ºF÷w ‡P Ó Q±tì’ä¤Àh7dáÔ€åÄ^ƒ÷"BZ>Siú-ü¥i}Ìäiök-½˜ƒ]G¤Áì­Hý}6>%#fˆøÙŠ™ICe3U\ Á§sÚBêÿcYö¿‡~æƧœ-Œ¬y_`f|/¦Ó›ð» p‘îcºÓ˜n…qjŸKWµÑÒã!xRožæ-0&…ç•e¡º„Ñâtªö€¬+8ûhS~~=þ½Âؘ®Ý[ö[š¢4#b‹èSäA¹¶É%V–t‘ N×<îËeQpЛb?öóÑ¿}ßSYÂd… ë9ÙU’Ï–©˜çŸrWÌ\H‘±”lFµI€ÃNO¶‘ü½qì-$–ÆRûE -+÷BÝýõc‚˜b‘vyMüš0C  X]æÁ.4Ú*ª¹+Ì> ¸"AÑx䶓^Æ©3cì}Å<#ïlH6«eB`&»øà5»¬Ê_:º!ÃÏÈýñŒ/øìÑÇÜ `»ƒ*)öR'Ýl)”æý í¥ñp¦Xl šŽú§f+">fæ_zÌ Ž…Î7v@fMÏ0Íwk£kD¢æPå ςפ4ʼnjŽHzÖÄÑ$ftØŠ¨)êF_ïµMÒì£ÊTâ=æÇ«b¾ p4‰TŠ°!wæ  ®úsÛ𧢬¸LsYíTxO$e;\ ø†D+f rH×µ±/.˨=™˜ñÞ8¨ÎBñètV¨|Ãã¾¢¸¿ß*¡JŠ€õ<-˜‚ø’–î+-„,BÙ®aùÕ¤¢2y‡ Õ첧¤Ì=;pL?ó†¾e©Ó§‚:éVûØQˆ Ø›¶Òó÷To`WÒL[s‡er–[Fòã-`Hâñ˜L^¡æÈ `±Ô‡ÛpŠŸ»É¥té­ f]©ýW€ƒönsŠ÷¥åQ´qH¹Kp™›À©\æ Ç4ZS ä4*/(#´å¦XŽhÿ‘2ª HÔ /·.Á²òƒBÌ`Ì|†J®:\!+µî-ŒÈ£óÓN¨¥*î[BíDÒ*WAÆþÚÓ¬Q´/¿zÁ C±Çïù¬"v˜,X&yƒmÙ•© 7‘²S€44¬Y#DÈ"ËÜB¯‹°)\Õ«<ôM¨œËPà'ö«J5Ì «smë9~O@†gPÚÓŒ!ÌúòfÕF,EðêÜ ENŽÎÂÆH„`à^oQ¼â"§´wP¨&;ô¼&‰æ¸t)cJŒ‰§‚aÕV¤Äy“FÙ|ás,‹BâHë%°8 ¼€|¾ÚreQS7ÝGh|¹f6ß²ëù§±á±Ý¦UNÓI7Á¨À7ÞEzBœ®Z{¡ÍsÂà$JC´ß©e¥q_Ó#^ô€šEq<ÃbY¨ÐzX6Œ92?_\½€Ï—¸Éߣ0Lô&¸f&χO•X§ CÈêʼn!NTÉŒèÁ™ú{=F -ðƒÌ…cC"ŽÒÁùAÕÇ®UX -€È_nk¦wGÝ?$œÌ¯ÜÜ¢¡,º³üÊÄxM§5òÒ©ˆP 8%ã4ôË÷S!ƒÏµ½Sf™¡2òR^{K/¢50¶ÌÉüÔ|pŠéÔSs4š(/Œ5ݹPp•®xéMü"¹KϨ—…‘mËtDL 2dD³×çü_`ÊôòWa(k£ÄŒhhqËÑ|°œ7¡ŠbP+údÙç.!¦[eJy´šx„+Ü/9Ûµ³/)¤ òÉ>7=qŒQë¥v´øž«^ªtF)m—(õ¬Š¦¸‡¡Ëé1—Ô±¶Ï·ŠlH‰Î6…Ü©ŠæÝðfÐÁKWnÈÀà´è¹Qÿ‰eÐÇó“O-6ÅÓ´n Êòœô¾Þj+/tXƒª;i#¡ûÔ癄»Fl¸¤µùߥôÞ‡ek-ó¦SŒ·9;£p4æüþß93p&ÂÚ ”r¦aTy~Vë Ñ*¤Yè’Þ\@Cv»ÿ旅!E5"«]_aYîà5妪ë¬WYKWêué¤Ù!vUxô#SŽ^ïi|ß`É8r)”Ÿ)2fcI|å6ßpÞe¸¥Ýåg଀lÎßÎÙÙ½ó'Á\±‘B¨Œx)$©·<l˜›šsº™N‚bz@¸rgà­¢$gåa•éb0X9C¬·‘×mÕØ^ﲉPŒº¾ß÷§ûw1MœÚ¸…u$WÞ4è †ÊÜøÏFPE¡$”$cÏeHìö2ë Å@µu0Šì(ÙEL -M˜&ë m¯bü÷ìêU¨ê¿¿DÜÈn4™^Ï1nDUÔíq“ú’ö•±]þ%*ŠGE_¿ï[À¿Åïjê…ÐìZ­MÉùçHù-ÝæÊÒÐûµ8t¸ØϤ -oò%Œr $]§¯OoƒCÅÇ&oݳå™>aB}• O(±[º¬½•Ö¶>†ª¹ö'}ëøÅ͆iáš¼ð¿WXeÕCDREîC1÷¤ø¹‰KåLH¹à¨kôC >ã-KO¬¿¤%F -H,\2ü,bK|çI?3Œ]œ‡fúײ Òüørßci_lHZD=Åj`Úh;†aÍ8ѧx¡íÃ[yÂ%UÙÚ}0âdŒ}4Hù|JEÊ_›‡Ö7‚²]j1ˆ"àCïiÄŽŽÃã„îO‘I³4{‹Ã±G0ÜèæšZ–|€¸Ù‹3uþíë6¥óA;-Éõw7ÂÓ(Ž÷ ô¿Hd÷¼O{^ré¼ }ý÷Á }²ù%U\»Õnï1ÊãBŸ>M;Iä©Ÿ¤¤{iñwPúí†À˜6±mX@¾šŽÞuÜù]8ÄÈI(OŒ[çT’‘ÁÄ…%8÷9Š -#Ñ/qÿ|4íT`§Á(Íš œ?E)KkÛ+ï¾›ËïoƒÍÄ>TÀYCÜ âúXˆ¿9`çPQ†5cÔL±@§"ÒݺesÚõg®oL@„{ýËdzË4  gx$Ð@gÁ‚­%Ó¡[ÛW$9¨ÛOSƒ¡GWuSóŒP™j -q‹¸¢ñÀ?ÙE81bý&+âêi)pµ`¶ñ 3áìŸÏá´C3±fò öƒ7©ûñFÁjSÀ•5²XÐhÁ†Ï‰Êy>ˆŠilDb\‘@¿e2VF#•;AIñ诉lY¦2Á&ÆëLÏpÏzŒAÏjæĨd¹¯$RïÎII™c]éd‡6¹BÑêtqzÊkÆSºT‘&ŽKœ¤ šxÔ´RF×iBÓÏ~Ý®áìQJpq4ýb['ŽR¤è´|ʱýÝÛ•¬ά~Ýš)³ØÁ™Ì–2F@(¤†Øçߦ˜˜ÒÄ Ý¬Å¢²Ø´B(, -<éØ•n \èÆJQj(Œß˜ªe|IÆù ÚIòxsòõ…<·Ë…Õ ÿ»Õ2¡]=3ma)#¼+$)NPSxw—1ŠâK ÐÁ(ä.ÏH.Ñ®¡&æº^Ùð4|ape3³È¸ÕÝÚWݹM´½}oÏÌD9ŽÔkr.À[œÛÖºåꙕâc8*=Þ.3¡1UX½ ÖiR¤Y›¤_æ–xYam4 <ܧåêÒCV¢¼ðfÈZÕ™¬2@ß—‹Íì”ãÀª 8—îLÅHUí½Ó¿;”ªRû¬´ÿ"c• ¯#´W/SDã3J …Í“òÅEÁf—„½I£kaþ9͇6Å€Ôošƒ—‘œpJ‘Ífûþ\‹ü\ÏÈnžÐHù›{î:óßvñ$9…£)­O© T™I6¥>äzÊ$ß1/ÔÊw®~Rè £ØÜŠ–PŒ¸÷PÑß(·Õó?žõ›ïCÂÏ£b5à4(ŸÚQïŒ.߈È%˜cŠ´KpæÊÌÙöÍ7ë¥^°—…(a¢¢MQÿ>¡]fúQ¡>,y‘ljâ]Êx0%í§”ñÑ‘ŠÒK—bpQ|…R'Ü ˆW,ÝUÉ©§° -M™?ç+]žJü%œì>nÕªÎÚkñáÙ˜Ež\—³·vÅÐÂ2¤vsÄ­*ÒA3ÒCüC%GA´m!€ ¶ôõ¥þ`j ¢‰ˆ³ªy½˜Ž4hy˜eª?zæ“qX¼7)ÊEOçCv©bKÍÿŠº×’Ô-Œuª)ÖçßóÃm©ñ˹ˆ”wÃæá»øð<Ò¾e¿ L6 -f2ð» 2ÄnÀÈHf`ëŒz—ÂIÂFá3¦¼~eœ¶”!¸…£i;§Ñº[d?éÉýÊ᤻gI;`éQ ªê(mê£Kw¹K‘%p´ä³œßò1rü€8YÕ€Bü§™Üì¬ &—Xv«áÐäAÔ¿q³ý)ñxvÎOc!d—žÎA_3°  æ2a&àAKoõVóÙYWþBðÚ0×þŸ5ÝŒSˆ>Ãw[AZ?u_a'=v–ÄWMõã“ljçãí F_SàqY²Œ|#æt;VÏ÷5¨+£Ü¹yA¡oâÇ{ÏòD¼×þ²¹s?æ,!‘à2K³÷-  P8^ǵòêÿ|rùæ×'ó{g8ŒXÛ.Ê ÓüàBD˜×(î¹<*8)cFDLÛ¥Õb(‘n›_ôé#t*åÌëS,®cnZ }LF;»­®£å†f/¸±RNjÍ8*JÔeAÑÊÅ0 *ââ"QÐ(2ùˆ{‚*š6À”!Þ— Û<¼MØSÍZð ¢y>Bm#™SÞ™" -U{æóy'ᯓ<æ~ ’I&é6_B‚lÓ¡ ²øAÂvœ›‰]Ós|ðÅõü•0C"Äoh¨€’S4fÄbCHEÿ×~Aþš¾¿H-Š§R)õGx7áb#‰Ã\òú’†0¾ßÉ_‡šã‡€Eº]¡ÙBü…ŽÏˆÝñç¿ ùé^¡Ñ¿¶ß·ÓqÆõ…õ=bù(_ãWBQù!d•ÿ‘TþC¤ê´7„±qø’P^·¾§qï„…à‹Û¹:¨_îYŠýZWú«uˆ¤dg«Ûa"Ìô0Û”OBøYµäeög»p¹¼¤¼h!`Ö³Ñéü¡•K›òßtR±ipŒÿ¦ü7õ4Fª ûO£Æ(â<œ¬#-Ȩ#áTEJ"„Î$Z×á»3ñ%Êxˆ:¼Qsáóp±Þix̽¹¢á£ZÆð­{ÕŽ)—¤Ç¨d»{¦•FPspÐÁ``0„û U.b Dj!ƒ@\dD4PþÍEÜþÑpHÍ>Ä«N¹Í.¼À‹Ö1öŒ,Ž@jÓº14þõ±B³GX¢ôß~ -?s÷ ‡e]È~4@àÖ哵§ŠùÑ([õǬow—|IcRT%QQ ŒŸ T¼ï²eòåà¼ð–ò£a,mdÀR…(ð¿zÓ+iM¤½°X†JaÈÂ'ÂÓâ‡Ô'–ö{X3FØÄH£G9m± ‘U˜ó"¼¼±­*&?[6;äµ²¡X†äW¢ÓV×XÐ5ª°T»¤Å2¸‰PÇo!kâßvg õ UDjl÷:L}ÒŸ¾¯ ð (ÿórŒ7’š)ƒ‹RõÏW¢éÒhòöl¬Ô'HzäÕ¶hØÙ-Îyàquôå‚b®å˜˜)ƒ«é•i¤ÚÃ[à—z„Ûœ•·Gô5;§ÀTð´xµihR. ±_\ ‹^€|ªVxkÏ”¡S–×¥«ÒôSiXœé76ý@ -Ñ÷ ‡^™2\gâÓ‘¦ë}!Í”a‘³`ÞHC³“økÅ+ä*†›B}f^¨2†Ì³­TšÒØ-ƒ0‹Ò(Þ Àl%T¨u<ìr"FÀä$2¹H©zÅô}vo«!êPXe¡Ù“rÊ/¦ð2e¸àÅS2ÒG£ÏŒ z4eh$z4JÅP`dð»ù»Ù ñÎA='äîî{†±’Ø#„4>•Ë™Y„²Hk.^ ð¡d¦12\.Wyå)ë’ËYŒ ×aFD}Á.F†C,7†®˜„¤à4F·±ó7½o±3öAp°£ #ƒzÑ -Áå´ -7­cTCÉõÜFD‚G—ã„fwÞŽ=0kÈQi—ÿÂÈ Rfw§EY¸¯cAÅ'°ä£qZÿŒ$Ëfï‡ûh€jQk¹Ff“Æ€‘øh4_]dð3 ½Q¼ÃžÙþByÓá£a=ß«Ì©Ñɱèå£aI¸%ƒÙ·¦[ÂBòDB‡”Æ­z4fÜDÒ“É•(qßz4Ð…pi÷ÂèÑ°©3×ù«&uäÑ×i â\}—y4zíˆÑ†y4|hq<9ÎÔÅäÑ0›Ä@çaHÊèÿŒ¡»#TÕæ€4£8ˆÇ8é¶ÒÐ]Ph?Ârߌp:úPZÂjÌ—{OJÊï©P?Þäïg¯‹ÍÅÐRä$wç™UŒ¸£ó– W¡¨R=vý>¥µ_o B{T ÎùˆeN~JŸ†i%hpŠùoßU/FMæÄ &›Gcu#i3,ÅGÈ%`¸Ó—? /ºÿnç0ûZÑ€‘ày4zˆëÑÈSÚHŒÑ½Gc&>¸‹À®xôO5^fx{4.mb•S1·äô)FÅ ظi üÊаË£aKBïh(ã‘GÔì(—š×Ñp!±;Õèh`’èö^ãè•_s4ÄL0Íç(…†§~ÍÑ`pצ#åh †ãc|I¿« #âhØ8É,ÝýxΫH+rŠ£1N4ÕLR Uå©ãæ²£~î–Äíl9tÞ)Š7öcðñÂB!”;ì4®yÉÑ𠽕{<nõ•EŽr4ˆ^FVˆA€î.tßoeð†jfœ avi†£ql¢Ò•¼%7R`½ä=Õ/(ˆRp4ʬÁ.hkrúò˶µ9×”Á,eu;hÎ4 °‹ ¨cT -»ÒÒi9ª¨ Žib9-R=µ G##B d‰œ²G# ë_w3¿Fª:ÓMkÞ®Ô×—Ãot!ä^Ðë{Š¶]ð(Iö~u@B¾xQ’t3‡ð€¢Ú;sòaýke+EÎDà Éa1<©Kcæ£Ks£àMÄÿ‰skÜhèžÛž›Å°ì -2Ø^þ[áÜFãI~œ–7½‰J§B6ÿïðË,a±t„BOl°X ¡…u’Æ…ÚKT¢y剻Ç3löFƒ€þ ؽ7jÏpaÏ6c„p£Q‡„ãРøF#xY¡Ï7€ÿFƒIO®ë_ü¿·8ðW-µ´pý…ÍRò7ÞÂÑv„‰.Õí[VxÚ-\D]]»¨¸Ñp÷L†Ï´AƒšäFÃNZ2栃 ÜÂ?63ÿV“OÁÑ°¢ZSP#ò[q7)Nn1kÚ9]ØÀ‰ùX’Ž¾—©5YtÞhLfüÍ…Þ‰ìèy£Á, Œò×"qŽ*R’¾Ñp5ààï*és|y÷S -Gƒe̬ÛØ{·ì]h_-„î}£kÇÄ$º?eEyÊÞhèÜwoõ†NŽâWI¡£‡£‘K‹ ÚN-ÞAZÛ€!–8öqgQïPµF$6)ÆÑ8µyùW 0[& õ™œo„|ÖÑq4ŠmZŸžiI¥p4Dz˲}KôD8æ̳moú…™]?@ØÔãÝÈñ{䶰—>µqÍ U—¯QS*$Ž†v'bå„)cÛö£šò°s`eˆãh$‚¹âã>LÏ.Ÿ úÕífŸq4÷€÷ ¯+~jZ¢ÕÌÑÀ ÉŸüèh¸Ò²ÑÒØXdŠZԸNj††}ª£aI´ÔSâÛyb!…Ž°ÞÑ0ï6žŽ;=¸ò›_”FËüFë TáÒSÆÑá ~—µËÙX8÷êi 7´¿p•¾>[†/¬.Œˆ–\…UBöIP!<ãD/ 45µÐQ­E{=OôÚc¼°~…Ù¬\Oª~‡”ù|% ›ëî š_ M4(x4ºU™b^áŠxÄD/Z„‡WˆñæÛ¬¹häŽÛñhЋ]*N•ØXg©ˆ¸?`½K—º…| -áÏ–˽åoM,WXÊ»aפ±§‘_ßn\¡+ð~wkwwY0 ~m¿£1€TÔ´1ΦŒ„Ž5ŸÉf -@¢ØOåv û'úp¸7U õŸWÄs+xÑ—µŸ÷ž[¡ øÔiñ×Ü -EçÑgøvr„áÑàÐuøƒ¦OuGcùÆZ™·‰1v4 r‹UV¶vZœŒ#x;àµ?·‚®|â‚?ô,t]F~GC2˜,˜#CnË摹À5ºÚ{tÁÉÐ×U®h¸}ßÑÈÉ :x2U”ŒµˆÌ€n…uaÜOh_âÊÉ!£[A×&üädó«Ý -âN jVò— õ#쉤[¡eº”^Oxºp.âÛEÞü´ü  åöÁ†] ¡®ˆ¨ÃæÑ­¿•AC.bdÕZ!bòÜôŠKp™Ï¸§¿–KAaÔ -Ž-'ßȲ 2–`‚m‹Ô`þ‚øŽZá}òhÀlJGB4ÖåÑh•°cEièшòA03ÕŠ•Œ¬ruÀ“LõaúâÒ0jØCô€°c=È'j~ÇÚ©GC6°ëøóR“ÝÏÜz¨þÇò„ZáBÜ1ÆëG=Ɍ٠pPµB¹ŸK'ù9ÇÄE´NÇ)xxŽ1C£P`F‡=½Ïµ#j§ÎÛÝ’Ñÿ<$ 7øÓÅ@¾EC‘„»÷pZ⨵iÒffcc ÊhØ2ž(g.(§h@ä˜W¢‘^A4XtìáÐÈjǦQÆc -É©ì±ø‚Æá@CHBzÏkqó3@k„ŠŸq푳÷zø†ÉÍAW·í˜^F:v«gtr,až±wxÆ ÝD:&±30åPgDeŸ3&-g¨Þ¡Ú(xˆfTt,-7£«û#雑dÍà5#|4có™áœsÍ eFOàXtS€àXM\8–ä–¡!̨&57þe` sÛm`½ ÂØeÐã2bÚ2|£eÀøÖœ·UÈ2,*õW†aØX³Œ­ ùŒQ« l¥2Ê@ž1(cOMôGÊèePÿd@²“Q“æ`›Œ™æPú^ ’qáÆB[2.8–R2•e’ ‹Š&JB3ª¼˜áFŒ:ä)¹Ž¡{ŒÄÊŠ ½•€„ŒŠ^L\‚ Ä´I¡š«LwcÈÍyÞ1(êcôÉCñ¯ÆžvŒØÑ1ä cÚuÃXßPmŒ5QÉ×Ƽ{4FH#ц¢2cØÆñnŒ2e5†c׫ØDã®ÚŽ!}1.ºÏ ÍEÖbØÊ-4Wb1l5ÖeŸ¾ÐÜ`Å ¾Š!Vc¨S ›Ðœ [b©4ªeMƒš›Ù‰‘»¿L Ï8v@#2†‰VÖ&2/­RŸª1„°c-”Ç:F€:¶ü¥ce\¥9ñÃ@8S>ãUOŽp—Ø0véX†ñ·c4†¥C HǼ«0 -Ó±NÆ'ƆÙ!Œ…Œ¦Ž•u0PíŽ9m0Õ±SƒÏ£ËŒÑFÉsÜæ(Æ@#80y ¦cpÖ`ê˜×^˱j´PLj鎥Ÿ5ñ8J`4àŽý=¥cÙÏ&Ç1—Ž‰ŽY —ŽcÀŽJ‘A:£›[Ðo9V|¶:†_Åâ¼2¦móX¸KAýØó2^ðŒ`ÙÒEFd22Óã‘]q‘Lp'™û+Ù‘ƒÉ(B“é‹“­ŒìÉÊL2âÝRÆÕOÒpc+ʈêÊä ËÀp›e1ö·­e8˶]X¼Œ½ú²—‚ fR‡qžüø[fØ”Ùk©Ì¾2[¾º=Ø3 ´jf» -)…ø™A~šdÖ‘°Ýj³Ln¨5Óî…³+8Îj¼œ:# Á—:kžs§î2>úhŽwöûð%Ã56Π_”ÞE½g˜> -~Æú¾£äÏ$ Œ&P0jc€)®0ülftÎ8wÐp%ÀÀ¯uŒ„wúÿÅHnh`ý_Øò±Öÿâm$ÑbB2E+Á¶rÑ,£•ÿ‹Ìý8Úey íѨ(BÚk# KšŽÒ¾@¥ñŽ¥)ÿ/’{ìý/t˜Övfš- •]UÖ>Ð7Í_Ñi§OøžkZ,Ô†£¨ùÔQsù_Q5º×Z54ŸÅk³@[ ³ 8‹:VÛ¯YÎ,ÂÓ˜ÙËÉV-‹¸U"ª,ª‡²p1Y>²hŒÕ¦²ˆ°÷ÁXíîcÁdµ€ŽÅßVخ֬«íûäW#Ï‹˜}µBʹÚÀÆ¢Ž­Õ¼Ûiƒ)f­VÆ] ‹îúj1_Öø60GÆ3x¬ êœl,näšÙ6¬õ‹ØW[;óÕ -5T}raM™Ž5܆¹Æb»±Öˆ±ø²Xo|µ­ -kCÂÚt-¬ñõ -$ìžçÆÙÖèØÀ£lDX«W\¤°€àíjñ -iBW¾šêþt<»_-D‡5] kÖxÅ’‚Ç+„râò †2kv=˜hMW£5Ÿ¼"ÿY< ZS;´f´Vå£ËÍŽ µEÂURlmÕŠKõ#¸'—±ñÌŠ@;¶˜ ÁfÇ6?³":íTY16ÙCV°a|§ÁßÒ‚r¾lƒ+b`߃ƒp6”~LÏÆèUøAÛ¼®‚Ô£­÷»³Ò6…«ö´Ý™"pûY…†j‹Æ*N¬ öª8ѵqZoØWU<³.ªâ}#<ÙÙã÷m{|¨`tr¨Âv¼­0Tqôm}*€à¦èT$6ÜÞ5Œ˜Šfq+Y*ÀùyÄûýQdG*Ê ø¨0ÅÜ®DçVYT¼¡Q±ÞET8¦›ËP¡WÝ0„ -Ž×¨ðÎnÛ?‡»åúç»Ξ"ËõxÓˆ§Po`v -¶ä)™XÎÛ:NQ-½5ßë­Ö¦¡SÞ.k ò=~#óÖKSäÛäL!Gßød -ªÚ7p1…ß¾‚)xö[ Lñ¨¿±ñRœÿ ¾¥ø8Â,ÅE‡×®^ÄÀE®`Îe*Ex÷§”‚/)E ”âå7)¨58õ’BK -•—¤À8R4áB‘"Eñ@qHÖÍ©- -(\'âþÂyƒiˆª_8K  —ÏQ ãpÎÐéÕ( ƒ8»̈3£ÀJœ¶‹B, -Á¤¢°Oq* -ò¢7ocb6‘Ëe‰Y·+QˆdcDA*£ƒ(Ì6îê¡`Èq1Å«‡ÑP<{¦' Èþ\°BZ!g-#”ÉŠP\DŽÂƒÂ¥‘ëCиïYK™A69_ûɉGÊmù¨œÔÊQ²Ü¶å¨ -,u9ñ -E¥/÷„ sJsúbæf*4Ç„jŽn6wÑ pñæ:·8WΠˆ9çêæ:§õ ž«)Û( -Õ®s›[çjÕ¹òÎýjP 3(gjPpÔÏEnÆݵAQ²ÐÕòCÇVƒStª)£s{G'Êq÷jݤ“Р+ŸAaä—nwh:àt]—§ó%¨Óñ¢®È”:ƒïÔ56Õ 3( ©1¦\6¹º¨¨FS Ab PôÅßê  pË­Nè?Á—þ„jýD)~¢zö‰%ô ö«³ŽO`õ=A¬=áÀºõDŽ`ÝHzB)ëxóëHò„þÄà‰Ÿ»ÌjûƒÜvŠíÄï|¥?*|ëhu×­êˆíb'ˆbìDAT—¬ªîÒP$;AHu…Tu²ô؉ö|^Õí´cÕ!Ø îaU÷!Lª³þub H£ºeMÝvb×$hLŸ|Sça'Ê%©«HÔ¡lš;!ÔqP½(QÇòQÙ€ìÄÌ꾸.Q'QÇÿb'ØósLud†ºrìD®‡ºyQê¨:uD©k±S'O„Sd'¶S—Á^b'd;!óLuBvbµÄ£7vdV“E‹ýÐRu"[Ò‰ã@'¼¥:ïç„i U™m𥽠[š¶ØÑœXr¸¯:º™GW‘_u×˹[æÄóTç²›Ù±Tg¢·´3'\«º2¡ÕaíÕ™ÈX7T!µ˜_¬×Aa(‰ócU19×uGxÝùºùv’²°3?±[!ÇŽ‰%;Gsb×e§ýf§áøÙ£¸Ñ@í­­eíÈ¿‰÷æDŸVÇ91ܲCÈ·Ëò1Ü©rNÌwâ1w>6t·RÕ®s‚ -1çÄg!ˆrsÅ»WˆwÅáÝd(¾â¨ï&ƒwnA}¿9NʇsÂÂKCBsNÔãvT†hÆ7–wo¡z'§Õå˺åîÕ9¡P"”8ÞDô{çû}ðÝ¡"Í›¾w‰ß¤(†gY—7±ï„˜¨Obªï$Ò´›„å¼(ÅKIö7ñ•UdxF”‹N”ÑÝ N°õLÍo"ÑïôæwFËïÚ}¯lô›ó›ˆ=^y$-ÉÍï–¨Û)5ª»áo³¾‹½ ý®4s•—¦Ç&d˜Ånb,«qËÚ&|ïi_3gãCÑð¦Œæ•a0´E›¨5‡x‡dâ=i±œRÅ«u+žú¾c¤‰'‡hTh¡Å‹yÄ{Ï&JAñ ÜÏâàXÅx6ÓÙµ&”¯ñüVØžïÛ ÓGômq´WÜ4ñ2äuIøÈ“MÄLÞÉ™„òØ<D•áLØÅøÙ£™8ôò¢/À˜§­L„gÞÛdB6b2Á‡ó˜%F·…Låy-ÇÄ·Ï#0&.AㇼÊz5P±Mãä–Y›~¯&¡ ”ž·`‚Åô(`Â5à˜(ÀÄ÷‰ezu_p/‘P^Â…»DrºD|!Ѹ\‚%J°%ôŸ–øx–ÐÆô+K Uø^1–`Ó{ö¶ž0µ #,(MDÁ¡°Zp‚0,ñŽÊ–¢Ä4%4ÄJe•È@•¨:½þ¨‚žBŸWSO ‹¦Do¢Þ¥DŒ¡ÞüH‰è˜z_TØ–z# -J=Ñ$îùOÂ^fOB$ôØNBKN¢ÖQ¯ÇI$´IPqšÄ2‰^0 —F=›_øzýÜ•ÄRJI dÅIby’„{ºàÿÔ‹’Š‰D£Ä‰89¹‘ ËHpØ©½-ù©$PCÖ‰8c_8C<$b)ôPC£Êô.›2Q>¢Þ¨÷[Èÿ@½8ì >õÌäG ô—ã;}Äøíëשw;XŠGxeöc¼#Ä©wfGœ Õ ¡Àa|Õ{VÖ›ÎÛNëqY#‚Ù€@n#‚ÌF åz}•cq=œ‹€ë¹V±(ð&=wK#Â4ÿ¿õà¹%äŒÆsˆ)iåEä#~Üc„6ëÙUŒ@­6›õ°’4#ÄÅû-¿p^D ê"ðp߬7a‹X}!7që!›VÄ{ë}UÄvëQQw½K™"ðy8¤îPºÿDÚ‰HÚD¬ã À ½EíR"Èw½S1IbHƒDh8"¶[ï|A|ëaæ®—">Õ¡" .ˆÈÙõv@_?„„®'ñ!pô®ï–¹^·‘˜ªÔ {4q{c/çnˆ»ì%Ù>{š/(Úsð[푹ÉÁû¢³‚ñ1[ƒ=¨/„ê^Þ=^Žûyô„ˆð½)+„8¿‡¡BP< -aTï–O²‚/ׄ8'|ˆ%Ä™ÃHBïñï>„Åû0Ó\ÜÙ6·Õ‡–¥QBöÈàs>T†ùÐ'ÖɇÝãC©‹oÒ–+³‡R߃–'Ì“ºc¸/Øêgcîõ¡õp …乬Å<¼Îzèü<|Ùç!”èÂ¥l.Aª W°‚† -GCЋ†‰M4ÈÍ¡ÞÈNh8TAƒ½òøÐ÷ ˜g˜º3tÔ@{:ÔE•3TžœAdÈ~g iª4V+sÖ „ÊÑ -[¨D0Í #3ˆRþ2L¼àÛeàµe K–áÝÊY+Ãä.ø¨ Ì.ÈCÊ`wÁò'Û ƒ– /h’ VÍ‘Aß9‘r%2”MÈ°Á¸ÇpÚÇîÖ]åxn ¹Ocø(cp4» ë‚$ê2ª]€÷ #ƒËowH„d`oùN¨æ+†fca¦Š-©V±aXh=X§ƒ{……¿Bù|…Cõ -œ.h^k5··°+ì?W@Œ+üî­PÓVØsÁË«Hi‘›ÏñGu‹r©¹ Lh…8ç‹YAÀcÈ°Â3|÷U¸MWAžaãöS«à±° -V…óS…£ -S\öT êj*4i=… -ÖØR!i^‘I*ðlTy¢BW)TÐÖ#$T m«¥¨ÀuÁ¾§tA¡;….åÉ)¬·)„—¦`ª ÊŽ¦ ³Qd -½ÿRh¿¥°-ëV -)R -å9)Œ¨ þ&¾$ÙŠrRèð(,¾Q@1£pè‚»(¬ ©* -™˜(̆(PסP:†B; …ã ]Ð -È_¡lë €  0¢ ö-Pø ö¼(àùæÁOpÏ'zOªž°÷Íœ.(Œx‚ìJq$õAw'hÜ¡Ü`¥†.HÓ€¸.¨ìN€0‚ž‰WŒ‹wB(òÝ ÂÎ'‹=vÁþ¹y'ô® –Á.(E»àùuï„÷îT¾Yµòæ°ã¸¤m7^°Ýç“ôN¸¢^ë;!ÕàÓ/¸wÜ\_ ^fÂ=ïqÄîÙ9ê‚ÆÛ »¾ôy'ˆ¨Ý ãº`Õ*¸s`Ä•ÒVkLõ™^ê„èË]0½œŽfÆfÇ ë.X 'œñ‚ˆoB17Áí‚¢Ô&ȽFa± –^Àšp>M`c4Ð3aN3!x,ŽLª1!4bª ÖF˜ð6oþKX¥¿^´«—€2½5uA —ðê_ä«„_¾ >ûOË| -êÌJ¼ ©³&¨K¸“ìë2xÁYr¡ò‚Í.á@X—0Љõ,^ðèó‚….ÁÕ|á¡å»àõ\B¡Ç"º„wH‘0pN—€Ã¶N|ZÖ%JšvAû¹ -Ô%€÷ãð‚3k]ÂLƒr=/hS¾ ¢|Sv -øº1^°ë®‡À»`°Kðmºo T‚qé±?‡jÙ2‹–pŽ,Áö±di\/(¾‚šõJÐ…¯WmW?^0´îJ€äÉÈeñÖ• Ä r)ð,ô‚.­–;ÎÙ] 0v™löžg·9¹6©ñ -B Ç+A‘ú ’7€Á§W‚/ùŒ‚•[² Z"¨ü+¡h` µ‚`KÀ¬ÚC–0,ÁXÂ_ƒù$Í`°ƒY vkG*' Ú_ )2˜q` C,Á¿x ¯~AX‚zQ‘d.qž=-ª` ½•LpXÂÛ`0C¥[0è¿ÀÁSºÔ j®„GdÊVÂyÀ ƒ¨ËxXÚ&JTèÈK)š„¯ô[nÀ»å ƒË - -]²? 0˜L:o(´ES§PÂu ~'%œ@LJð“P‚è¿JZpIJm(áE¯P0HQ-y.Ñ „Ö$PbÒÜS‹ªåz0hB°, tiαšKK±`–غ† Y¶ûXPÏW¬È)@±]Ž u=ª v *‹„ʈ -ꡤ ÆêK04H}$<ñ# a - æy„$ï÷Ĭ:Âùs:Ôè§#AE9]p„n„Ók:`>wò¸äb”„šŒpÿ‚PŒà@à‰ZÀD‹¼:Œ Çô žÿ"˜vÒ¶ A‘E¨mE`Ý¥«B„'š/h“³Ü¡Ê/˜O,Åøé ¼b»C„þÙ²†ƒæÑ!‚ã;T[‰‚ä…©C6‚ ¡ý ¡Õb á•^ SòB8Óü,„Êø*?~Á\Ia®/DÜð$0Ý‚ðNb‡ãÐ ?“P®ƒàƒÁlv%aƒÆ„ N1ølAH—‚0™A‚0Ÿ ”Á`l T§‚¿%$Z 7 +jFÁà· ²©èQ?@òÿƒn©ýƒ¹ýÁ®gxÙAÙ|@$T–Íâ¬ùH*>}H¨,`p¶=h’ÎýÄ”.a|ÐÁ¦ƒÀÜŒè/é=¸â¢=˜þzð³zà4=@%DšÀ`Â>FÝyp¥º’y`_ÜëTÊÈîZE/N ž´êï`íöhqwpÁ5嶢y*ñƒA¤¦œ”È[Âàjê‹ÃNPÁˆøyÀ\©ˆzê§z6uðÙé@¢tð|0xbtð'”ýžƒ9Ršƒ‡0H0†Á`®ü‚Á:9Š$Ä〕zJÁ Cø1”À`æØ`®àýhëäKN]ž©î)K`PÚ 2I78r¸Ñmƒ`pwmÁ[Ú §;gƒÆÉ+‚ÁšÅ0ÁƒA(¯Á9Â5ømlºÏp„ÁÑ«ADC«j 15¨¨M® <ÉÄ0¨ H*¸hЊ84=A*h`«¥TV³ fá Þc30 ùÌ@_ýcB{H´ ®ge`k”Á¡É {· D|™d1( (ïcp§càÊ«±H[œ,›P @ÿÄ R1¸Ýà w ƒ, ƒµ0¸a@.¥rJ?™ówM0P[%€A«ø ñÞÔÍtu/xH½@¼¼à/…L=GL¹ z6 æÄ.8ÃÃàQäë¨Áñs“㶜Fß'5=$¥U?$ бÁ`ïÑ&\ ÖîИ¸éƒ# whÈXƒ]PNšó9#•Â傆ãbá‚zÁ`¿| JÀ2ÔŽ0î-À -ƒ4ƒº¯‰Þ‚RÞ˜½jÜÛ’³5éy ‚“é-Xôa‘ ?a°Û[€ò| hõ-(ÅoAóå/ ß‚],Eu‡ŒîÞs”Ãí9µ°ŒÊz ê¼³…ë-€Î[ Ç[0ín[›@aœóšVG£²Á…Aã-€Ñ,€ž—·\$½Ï[` ƒ…[V>[PïN~» ¶×‚_mUNÕ¸‡RÈYÖiKÅ´† ±à“ìBŸ×‚Z(Ôd÷Z€Œ0SáB±ó"†Û{¸„ªQÀè½ü÷3Ó±V,ÂÍ´@Ë;I -¨%â‹"b¦"à>ÀÿKˆ4 Æ,}dUèà?äfBEWCó©ßècÁßHÀ¾âê f7Øm±àyÕuÍ>÷˜êaÁ¤_Wo[ÑÀ“Á êkˆéñW°% *êdn.õ -‚ˆjø§™@ôì -rÿ:n\Ã{¡ €Û*:m /’¿¼¤{–¬„í.[ÒkÑûn7DE„3åKCÖÿÒœ¦˱Ÿns›.£ ö¢2â”ﬨ6€F#A%ïWª"ªŸŠÉÝi÷ Uæ_'h{ƒ§ ‰€·C²çUëQASËF! ôù6—>ð/•} -ºÉ¨#ÂxM£x]dÃC3'°”d4ÙÈFå#Tà‘šq’ÀFJE)1öR€£öL[Òrï;9c–¹0þlÿÐxx¸[(E¾3‚ÞN3°ò 38xÅžØ@ -ćݨ‡ZøêKÅäiÌ< -X6Ík¥ÁEܯüLO% -¶b]3Õ¾O3Þz.4eü•ýL#q>¡@üé¾ä¡ÚåÌ(¤µ7]²q/ðñt/¦'hEf¿'ˆ n¹š_Î<Bcpì?$¬'Ý ìU¸èè¹RN5 Zf „þÈ®ÞWN€ˆjÀYO+v´™Á âUfë sÜY„Ál»MùØk‚¤Au]z“{X:$°&nÕa•`-$’O˜5c[š<É>1%äDeL6V|‚ Þù¸ìþ$0MªÄA?-YÂKàÉ’˜býø– / b“¬c Œf ‚è7û £³¶8´»ühŠ;]Y—¨¤EU¥K ºFÉnYósPu×åu©Èîž¼œ‚z†I0.†’$haÜåÚDlÇ#A3—K;üm+Ô9BÑ‘C‚\HPBY! ·hó4fÿªÑ=3[ðN³ }lg+@(6¼õÙ‘Vý ¦û\§v³ÈnÈ9éÓ¹X¤±  èâ©a¦t¶ˆáç^#Æe™Fö´žWyXà`Qδ¥òoh«bplc6Ü"ˆ»J<7ãŠ`$Q};‡1þQ*E€ÀcA31¸®Û8†Aã -yiÒû$‚_“C¾• PD@´`…ùZJ×-FÁ\o;jÐP‰ê4)" ]™åDF€l“p ¬Qñ)ëºùÉÿVÔõ9aO1mæ—DtÅu„Z³¡NØËòZ`¥Š‡~°r¨uƒ 0çXtÉI¡·¤F|œhØ_Ñ’­I!ò -. Z±’˜P7Øu¬a -„ÀÆÓ\éü è÷8±—SÞ½Œêüô¡A0›I çùZ [A Þ±]_¼áo}……IŠÒÊ@Q’HvÇŒÍcûÀ¯,ßâð èBùhÂ`ß°v’j‹ú–fÓìRÄ›ž%û×ÿq%*:a83¸(¾Ëþ’b¡·Ýñ-;6ÃøDƒŽ”Ä}iÎ*¶Z{†C%!a3Ÿ"aÀ3ÛlMû÷–ϸP`;BóÀ­"ðjÍÈ’¯‘Øk8ÓÀ?/™êß̤N”ä¶=À†r¤2î# Lè}ø’ôJÇÕ’ˆ{çþbPJmL£kóÀÏK8_xö$üž:eYïT‘]âË?´„±Ej7&àoøé™Ø >A¿;@f œ&ªyûn4Àü!\ëÿF«/;àŒòKánHš¸tº!UŽ-Â=ñ:Lu°Ê &S¶rL¾êÕÑ]+È-$–Ç<ÚjõçR2X!»/ÎÇðZ‰¡rýË8Ýe°÷<Ó»–>vÏtþ8 ßpUxÜA6p,¼óü -Ô]~:ªJÃPètîŠýµa‚WU O†Šñº@ê2þÉ –”ûª&èÎc®ÄèS -%’õŒq”…ÓÈ6(÷(CÛF^ Ö%æËL Špk8‹\dë"ø4ê‘WàD·€£ß;7X4 ØÒ’á@_Aò§r+”òoijÛp€ÎôŠÔ?}ý>ÿûÅw'õaD%y*›óùkºX~²Oëõägg@åÂ] ÚV—áÀ8úl/Þ]•Vß"ŽÉ+.ÛRÑ ˆ7#€é‚ì¼9JÂÂ_s%¦1Kƒ|ì»ÞËÿ ®Íünžbá@·¼úñ0¡ìÛ -ÐèÔ/La:*N^8ÀL÷@V!bºv4VámO}bYPϦ~˜k|-¾p€òð#J™å,°µéÝ"úô“Šl w¥~Θí @e=&•¼Šð R¬…5‹ùl.²â --)׃]ÇÐËÔFûÄRèE-8ËX1 G‹h·°‚•JªÐR/ØÂMê­šÞ4ß~ìmq,Ù‘>ƒœg° ô[3̼úXâ%'EQÞ`IBí…m)YÄk·AÏ Œ+â}½,ã`ôÒúdl~?|"®2Éî=e -…š.æÏlxšè@‘Â>æ—°aºà•Â‡¨”Z7—í„róö‚ICõ‹ç -á€õM9}BS#oz“Rã|ÉÇ°PRE܀ݢ…p Ó:_:®«,WQ)z N_ä¿t|2bOœ‰Î -\òœ¦(çK‹´m k_mYžÐ÷$œîÀó‹ÿ/ÒObÁ NýÃÝ ÐNs Ü€ÑÌæ@aþõw°Á®‘ŒuÄÜ@yñÒ82‚º¹ÍÉîâ…˜ø.$ºšj57ð©=Âá -¬Ê3.ࣹ`? ðE,Ùô{áNæ×dn òÀé9(”ä4,9£Ù¼952Zþ¸ÖªÞvÜb èG’tXY^> Ì]2¦´YI'+»*¼®|•yМָ*ÜÀ–‘­2t”YKë NqãN·dqhVMnÀþ—ü4½%…¥-¹Þöõ -ú8r*ºšÞÜ€E ìݧiL!W´ÝJÆ¿.7ð‰Í»… #Í£¸Qþ:bj‡í%°/L¬!‚År˜«BPK@Ê  Ö¡.³ÞX3¾ˆ^W:¥ -“å<œù á4 Ü@ˆhB©G~s¡õH€ÈžÙÜ£ßônn@~‡"ÒëQwÁXaÉûÑ1s¬X&]Ž0ÆÄ,Oc€Û -x­XU#Þó±sFÜ7^š*¾Þ†ðûÀºH…‘ª8Þšìï¡ô¡7´³( 77ða Ïp;þ[0ïÂBõ£Ü@öÚU%ÔõêåTd8Þ“J‚É#LÄ’ÉàfÜ¿¦Óº©§^šÎ£>—bI)w¹7Õ(Œî¹”xv¹ûB5Ù?ÈXáoËŸz¬2ö7 $‡æÖÀgë&›jß¹Ðø%, ´kÊyÕyn€éOÂ_uÿhrõS/{®Ù½ürfG7Ð!”XBœeÐ |gçxnÑ p¬àRBžð#E7°ñéèn{b½ØÎ¥è–ý ”iå"%¤n RëaYݹYª`³€ÕšsÙšk¶Å q)Y›E;J” -]ø`9Uʤ8  (húTÃÐsÓ ¤NÛõt•&øµß;”€q¿Q‹îOrîI–´¾Ã ˜N»€ØÆ° dãuäøÚ€í‹-fž‘ëâ:èáHÖøQˆiø39gµ¼Ýj½ç!Í°] ›¹xBÉ؈°ªhÓÚ¬ŒTUà+)ù²x5ˆ­¹7@ رîj^XTè‡ÿ„×H°š 0þÚ£6~Ph imWB 8˜j;%>ñP(–Žœ307¯½£ å_¿NKï ŠJ¿Dý#a™‡·>à ÜÁ (Dð4àh ˜+Û#TÒ¾€“íªKzú¶ÈkxÈ_Îc Øã‹NV4zÜg›ß\+ÎAÞè±´¸:ê8˜ |ˆD}¤BÏ–LØ=4…З ø¡ÏÚKR`†è?cþ+<à 1"Òƒ™|gvçèÚvY10àbG? ÇÏgô°ödåA•Ä6ÓàHâ.õ;œVéz -bUC€n#Eoñ- f'†¯¾ädF± | $\°ráôn ¾¾5`;³yÕâ8ÁZ<Šý®ñ1ÃϾ¬Rò0â뻜towvY—¯0TòÛâS‰è4û¶´TåeÏäÓ±,c–_¢&ŒÔã¥(,Ø ÎÎ ‘¯@>Kž+ÀÈZ¤dÏ æ/^XXÓ -X)ýc…=ÈUn€BÅ>sU þœaN8!—›Ž?zÒF墳›Â¤ ãN½?&níÚC¯|U3lݪûì,:}ee -DAÉ5¨qÉ^J»p¡КcŸ@(9CM -ð‚¼A¼clͬ ($q\+£ RߤÜgKñòÐ -#P ‡PŸèKä0‰5Â{Ú€¢!ðn˜' $ÕdêáœÀ$_F'¤œ˜7²X®Z ”QVMÀÁ -Gþó.ÁL€¥.?Vk™ŠO€ía@»‰ÅYZ]#•!—@ ‰nÓòp–€–À›Øú³Ai¡\ÝnÀ)"ò¯Ÿ×^ºEºŒœ;d -R·EØ@® îž«’!0õÓF0Oª|¦Ä‡/…@g´úÓÕÐ bƒ™£Î&Ÿû˜â Ẕƒ¥C@ŽÃ‚UFò¦fÒöäS'Yµ/êÖ “¹ÑV×À«V9i £€@¸K\åOÅ?àæ¢WÈœV›€`Ä?!Úm¨@rð®äП+ê›Þ|¢XÊ»MõÄ–»)Ȫ¨ëyÀݺB+× gíx$qÍ\H¾é’C¢ï96[Ê$×€R™ÁêÙ sCŠ­úh¢¬ ßjE:`m‚˜SDBÇ^S¯‡wt'IêÊ5¿”€÷b9`òiåÕíD9<D ª~ÃÝôÒ‰¿ÎðàâVƱÀÅîs8òèÓ´ °(v>S«_dŽïƒ!¬_MÍ—´5@wJƒj|]j@3IFý‰Ô€¿ì -©^rÁ1iWv„<˜À¤º`Oå—RZPÂxÁÀ¤€uòÿàkôÄ -¼ãhȇ·95@Á.mƒ‚þ&#Æ<íiJ°©:©­Õ`ÃY™D­Dzd&%S ((œÇ°nQÅÕE½ÂÇ0!ÇP‚,ªs¡«&kùut°HÛÊÊ©ˆM‹°^ßÓ‹91Éí’›²³©#¢K˜O mˆéÎ3ølô7°÷´1:͘`k@8ĺ1„Gt8„eÁ2I™R’RÕ0æóóÏ _]b4ÿ[¹¼ý¬åg3‰§CŸ›6UNÕ©8S5´)¶ý¤WÏÝÏÛ¨V¼òp&'16ë(ŸìD -:Ïá;NW[u];'qáÙÝ„<#ˆ1,m†®e”¾Ð?­ë2%9åòÊrô¾c½ÞÒtV]þ¥×DD~µ£3|‡O5G“ؼ}e–1ajT„ãófb^—½™Ì™¾ðÌ/®Ì¼Ä­ùÅÏ\毛pcR"5–i˜ÕÅ·ÙñgèKðë2uݺ½EqÌÆâöØ&EÏÖGljTõs4U¯OEÚ”––NìÈ¡jTQèžç{>µL):'º–‘‰eÞz%D=Õ|ëS]w²9íš];èζév=qÌ”Hüš­s‹e´”:~®¦"wélDN|AD9\ 'ÃÕŽk¸Žˆ$ÞDª+ëN,ñÌZ½ÎÄX×­¸áuŠRQ4W‘,ëÒØZ#8A+‡É™^¢¥i_}‰Ì“W"µŸB¥Rm Ò”¥Â㛾w¿·:eâèÓë—-KçtWí×tWEdèõžN‡ÉTzG:Íÿ¶1eën£>T©ŒV?±ÄV8QÄÒÉÆ:Œ1ÇóÖåûÛ-ÅIU"¨ÐIa«óùÌÿµ•øÚ΂|+q¢~TŠJÚº¤¿§ò/.µ?Û þѾíÿXi•hÇ^Æ%ÿâ2„Öþ¯h0‘ «jõ`ÉŽ£ŸÚØ'ÿLcñ‡T~OOÓX“Ôn…îØþviîàŒ'µÅmû“û—ÛNüŸžN/j_¿éÅ\ŸVè;‹Ð;‹P-ÄãËšãè㧿E§¨÷ U¨Ý,þK{n^¤ŽG£yÝ©ÞÕm[rÛÖ¢¬ÅbWúJ­-ÿãíÚºtíRùÇ´} Û˜ö'w±)Ó”ÁÑÔ„}šªéó‰ ½è¦ÊOSö'÷kËiÍ+¦pøÔ)Úç"nÐkî0k=Â"ãú2ÝiDZ³Ò1±PL´®bZO³¨D£tWJµ zÍq²…Öÿ%SfwâXblö5ß÷¢ .ˆJ‹ ‰*.ºH]B –Ä?,·./i‚æm](/ìG›þ›éJùD. -9X².³tªsÇ8]ÞpìÿöØ_ªãÄ©W™¸NqšW‰$‚(dj¢%ãw¨#‹XW"“ˆt4+%V쌬׻Їú -KÔ¸¬i£7|¢9ÅábH¿MÌÄ‹&f^b¶þSÈ<Îô©%\±BïL2ŸÕ‰qbž˜ÐĈ«±øYT\»YšÅbfQfp΂f ‹F 1ÞÙì]½ëçf§æ 3‹‹EC­Äú¨†fùlç;:N' š 1D¬†"¨‚$*ie`Q90ˆÃMÿE t »äÁcq3¼Ê.\uX¸(·†âOª ]p† ¢(Ä¿?_\ƒÿW cÒëú#á05©ÖbÿK­-‰afÁ”°0<|'%Jª` )=Xbø÷a -2R »³àÌ`0ù2Ð`ŽÐ§JaËAêÚgIjªÁåà0Ä¢ôl•*’€X¦lƒD¡,¨…U€à  V$˜``Œ Ð@,Ài"X–T(¿@(Œ¢…!p[ƒVAD -,± „äU*‹ª¹i©WêuShiLá©E$ösD–Ò2Î"îˆjMÚLIÖŒÛ)sr±Î]÷$¼ oB ñü‰Œ4$Ó^Cvå`p2‰ÌÊ\vs7kµó)«‘2ÅTŠuº]E <×^s\‘¥ÈŽ¸ìˆú?¿KºŽÞN%%øvBZª§ˆ¤Ì¨d{ƒªq"0P à q Áz]&fBxƒ0ZˆâdÖðL° ú¿âRcleÝ ä †ÀFÅ©£Y&Å7ðûé°*ØÇ XžŒáðôGv>Ã5îÌÂùó}§¼¹*âëú,Ñ‚Æ“à•hgó~„ßñ°ùÎ%õ?'K¸x1®ŒãìÌ\TØfââh::‡£ÓÒ?|Õïc™*¼ÅL*Òxj#4]ž(PS0Ù©A x$úá†øœ×,Ë’œÚg -"ô‘–Îb ¨ÒQ™s÷}vp[©N¦f0ÃV½g¢ˆ·‰"+¸Åí=¬YÞI¢I†Rz µ”áÍS vËT‹Ävß(ÎnbR×eøí‚ÝË`šC þ¸ ŠP×Ä1F…Z7h°Î!É ~bÔñ˜œÊØ ~ïQå¤÷Žº4~GÁ~})lsêtãÝà|ÔŠÜÌ—Q/|ãN«ì4P;pĪ°Óœé© -(ùbwRéëóõœ8,¡´$”~ëXšÒ‘ Šo¡7Td‡t)I×Ý`[p<ëô¦#`ÆÜtÕÌ»¯v¹MCšíK,”<¦)¤°2ªRNº>!cÀéΚL6C;fBJâ(äXÀf;3õkíÒÄãD§©&N¯B‹›:M‰¦Ž'ã€{¤ ü¬ý -Çïij} T‚Äw<­ŽjçA„(œØÁáñ¥‰ŽâÀcËŧÐcø·¶VúÂÕÞ•ýˆe8ë[Z¹[µE¡¨•Ø#š¡u€ƒâŒ=–a8Æ?ýõ†1¼ F7!£@CÖíkR¸³Ïª,FUe0` <œ¯`†kQWÃ)é\ŠÈßÅŽyä0½<?Ý™œ”ñò®”¹–ÀöÀŽâ°–@tµÓï3V nMì±á$‹¿0Ä|Ûg‡1ò“&9j4òʧþœ4ˆ%4çs HW{±ã«©Ç$b ì6B¡V²}[gd“ú3×’è@¥ª } Eà´Ç Ge‡<ô¤P7B`p“žvQݞɳÀ Ÿ™û Ỿx=^”úâ¿/ˆ “¥¾Ÿ;þ6úûýë dRÇœsQ/£4\[ÈЖ éœî0=ÂßÔ‰Ò;Èî¥6X s<‘jqNZ4HÍÇb¼ ùc·T]UãuÀ~ÌLJ£(pýðÇð¥ Di̤ó±7Gi,Õc `=¶{,ZÊö—4V{¯}LùÕÇzÛô1K•Kb5†’Ò¸Fi¨qrŠIÚÒˆˆÄcÑÙ±mŠÇ®º Q–CJŒÆÀ¥4ú›Ùß»¦zZ|IcKµÇz4Êcóºc3lkzuŒþŒÍ;öǯ`1è;f -†wìO…ÿ6Ö«:Ö>¥AD“¼cÞÈ}#zǶªcµŽwL[‹å{Dz£Ò KòzÇF§Òv“>öP4?ÆmUXSJkmœ{óÇêç8–‘]R‰é„f«±™}‰?¬4â·6¬U ‹´u¥–?f ÷ÇH‰"úǪ°4ø²Ç+ úKŽ ûÿY¶þ1–LõþXkrâëþW£ûšÇ?6{ ÕƢh {ªç… ÏÇpóÇn÷Ǻ4•<ü±X…®cöþ˜í| ñúXpR)s7e·|cQCÈÚµ†ŒÂId2´È yö A=H²aAJ–k.”˜ÉPøM1ž M ìªŠ2Ä$elÊ„€RWYut+C.° ÃÉ2¬§•Á!—Um—¥ç½l’¥q˜á3afp‰Yy³-Ìšu—YU7³@[6³I˜ñ|jæcT3UÍŒ£bm.éYr·yƒ‹_3— ‰,ÊŒ­¥qòf2-‡å¸8‹Ÿrv.ÏYg£|w&RðLå–Æ2=Càî™-KZi>ëbi0ô§ÉˆÎ¢ÎÒÈçÎ(Zö¼“ßC a+‚欤uà x„vM([ËQêgU}t¢{DcAKã6ŠfC÷tÛa4ÄwCÃ×Òx«s´Ü`ß>„ç1¤)÷H{k“Æ‘–Æ ”ÒÚ•†1=veÞÈÎÂÉ´?iÚXÛ´Â, ¼ä´yÛiaOc°ËjÓ,Qc’FMãHA–šókj´4røÔ¤ÕB[;>0B^ªÔCÕ¾^gÕTµ4ŽX-kûµÚiildi˜X­vr–Æ3x®&¾šT_ ¥a…çjAÀA|5¿2àY.¬1¼ ÂZþ‘–„5_Gaí%_عJ qŽgiÎÕª8 VûðÂaµ} biUsnЊjJ€¥Á_ÕÄ%(1»ÒðNv¬ZFaµTë•Íu‰ VÛû1ýª²ªýÓTûéJC0B¢Z(}öJ£‰ Œj¥‰¸£šîT­Ÿ°4ðüÅ@*?Õ8õAõ]jyvªŠW5»‚€!ˆÁj|%Œ!¥f쀥Ü¥ LøÈöUc5¡rŒ@5X­)W5ƒêT£§Z÷OJê£Jj>stream -Ó ßlÉßܿݯ4z8‹æ!R œ£>pý£àJWëœtäà!„Ã_i¼/áâÑ*œŒÂ „¥a¿p¯3AÃÕâ•FMHn\i¬îÙJƒníî%â&­4`“@OÑÈ.®²‰»Ÿ×¹Òà­¸ì¶Å}ÿâ Œ+{ѸEÚRp6ŽÛ;.jÇÓü8D+›¹;ä}‘s’‹’3|™ä•Æ vr!=DÒðíõ*—¹Ò‚åÖuZ.¢\.÷r[š0w®s£½Ìµ¯4蟹ƒ+Ó9ÍÝ+l.[nn ᜰ—sSç vçŒož+ú÷ÛJãâ焬4Ì ÐÙ_)èrŠn¶ÒÐ) üçA÷¨1Vü»J# BÇl­R‡•6ˆ.¡sëB÷HBÇᆱJcN¢s€‹Nø]¥J. ]žI:œUÿ)]~aqéVýËt†vÓÙ­4øNwDJƒ¨»JiPuÛ+©ûÒÔñô¨NV€µ:°øêJRÇ:ÕкL)÷œr,êJ‹ ›qÝ™nÿËðíÝ”†`¸î×S,î2\G6Ž•ž®£9Æ©ëvPi<Öu<8ãû§4Æ^×YK¥áD…Äu­*B·7ŸÙ°Ñ}ëî½uW«u9åUÓ¨Ò˜Ì:*j]u,ë^L¥Ñ•Z'TiLÀ^µNWì‘G÷¥†h1þwß;4‘œÇ$dƦ4TK´ñübÇ+—ÒɔƤì‡@^ûÍÊÝñ¨Ê¿ÒpºèñVq<*=žZÃ<¼z!yè#* ¸’7MOž‚S^>Áò²æòŠSH˜çË<©y°RÛÍCÏyÌày§òy]ϽÁzñQôºÇÑ»µ¤—ªK/Ò Î›Þ} Þõ¤^j'Õc²Õc<à¯tTJÀÕk_2R|+2ûKê à¤4­”Fš(±[½Z„ŒLiä©– ˜¢…bwŸwÔÊË I㜬GEe=*ųˆn½¬³³8™Yû™[O§Òø¶ž8ìzÆêz»t½”AÆZj3½šq=QiÌJ(†ë¹ÎzfÑdÆ8XòzýÕ2Ð[q– SøªÙÊÎë½.¥j‘Ò° ¥az J#ä)JÖ’\Ï]ч'¶N6óz®sÒØHh¼ÞÎ -òz£x½nI„N„À8†õ{nžg²çšÑoÒ¡ ÎL~‘äÝøCÒìÕ~MÀ& FŸÙ£ÏD_q•8%•âLx!{:å'&$Ž¿¼¤1£“†Œ ÙóŸQJ¨Ì^>fïâ—L“«ICVM(·ˆj6ihhÏW2ÑøÆìÑò™=X“Æ&´Gw€ê& ´GõìÉî¿ MQۤḳ7ãU¹ríaðmO ‚{' æɽ[ö(Ýsó<Û=u…Ÿš¼ÝګݤÁûï]% ˆàs«ï$‡\Ãë#>É,> þïDãCÛã+pÒH#q“ü'ß¼'÷ÿ¢—O/NښϺÉKçóÅÑ`ƒÒxÂB¡4¢H>¾( œ˜¾¹ðõ‰y€Ê&ó¬Ñåõõ)öe©³¯'¥×µo,¥q8ø!Ýg!¥ÁÌ:@fôÞS…ðûFR±à—~‹-~ç -d¶ ùö„ùuzòÛv`~xóKŽÒxUç¥1<‹ýÛùá±\*ž_å -Ÿù½Ãóãqôüh~vvK…[M(oÍÍBY~vQ³ñ·ü¸X~7¹òK|6JC5‘T a–Ÿá5?tûü¾eô³lPOb²?Ça? Ii|˜Ú/]ï-Üܯ$¾Ÿ= -ºéŽ¿µ€åÀa?úèž?hQ®R”ØßÛ”ñ2í—ï û' ˆšÒ€íKï°?Ù?(J€ -¤4Â4Ën”F¨20¥Ñ9”†6€†“ï·³]ì/Jðì+P?aA3d0JãPœW{¬0ì€è\€L}\@Ïš@8<£@˜”ƈRJCjïðv¤4šc 1 œ(¥q”à]‚©üX\ÈÑ:ðüôÀÒënãl\ëËC¼/‚¯@‚¡¥×Z 6Ȭ_ìHiŒ;½®‚ŒQçM – Þ+ ¢4/ßpY ®T*Éóh\ƒÖ•Ç`Eï½¢™ÁLŸ¡GƒÆW >²R`1è¬ÿW`Ää7Ðhz -°xI&üWÿEH˜Q¬GCþ¯ Ûî‘Ç£á=p ¦v*XØOÁœ)ƒ·&Ø uêÑäÑøtòD±*ôhÐ0Pye°Ê”ÂqF%t ›è)ƒ/¿âL'»*ƒlŸNìE4Ñd0{ÑÒ‘Á/ E 8ì£áÝLE`b(Áµˆ ÷£ð/¼þDáH Ì!ƒsßgà¿È1˜+‚ vJ2h‡”ÁB sFcñ¡¼«¤‘‡mËŒF2ë+Z¼!Ò(vJ”z$ª2øZ&B\…ø–Aì+ƒ#WUe0+Ý„4dlƒ™sÁUß)ƒéj<T‰ÀY‚4,Po“A–¡— v¬*Q˜’‚óX rma)04)‘ÁH`Ká0Pàӫ`Éàÿâ#ƒ!–É/P@3öÕ"X*+sdð äIP—H£³”Xè1¨˜Ê§åÍ(X]¤Á“t ŽAbcÐÀ^åŠ4¤œŒ)Æ #ÒPƒÅCä’ ‘Fê‘Hc¤"£V’0VDÍI¡”Á(Ò Íü;J©¡Šcðiôº1ˆøÂŒÁ¯ÅàuÅ`+Òð6YÀ%Ý¿5‰4,xÿà ΖUZÍ0ø_I‘Æ…´Ø×E0ú¿ÞIU* ƒþ _¤!‹™0èU¤q#Òœ=I¤¡›}TšE6##…Á/`K‡U©®KìÊ(††šL( (O¤qñ50àøÇÒ0 ƒyÂà ›* -h iø:&¤a_ì<”pÂàë²Bò!HÌÂà¶ú+u@OHƒ_Hn³†*ǨÀ@3_CÑÉ™ïšÅ8Q”ÿ¾-Ð[¾(@€aRI¦ˆì‡4.Qwâþ‚$Tf¬SCÃp)ݧòÈZã…Ä"Š„’DdìÇÓá@Ç j¥êHTAµyAò©,°à¿wAá%¥ÅyÁŠHÃPxÁywXP¯» *¼ l-©»`oí‚qHƒDòˆ4¾þ¢ß8“ûrÓ]°¢fr"<ii8v»`½.XiüÁ¯‰csHƒo"Ò+*tÁ—‚¡º i$ÒСö„¾ ‰4ò,ØÓš°œiÌp9ªð -D¡Q0»`?3'Ò BÂy=”ÀRqD35^ðí.¸j)‘Æ’&`†HØvÁ>¤19}]0ÚD¤áÏ!½ ^CJÓS Ó! ;킳YÈ»`{‚H#põhP+0©Á š,©%DòC¾wA"Ò¸vŠÒ@ü›èÚ;…4˜î…‡—ú.ø¯^°FH'@*ž|â³Ñ^Òhà ! '–@ÜdAêi`¨‚4ðNJ+gL¯» ÒÉ+ˆäÿï‚@/˜8û£ñ"/ȶxÁi=…¤5º ºêy‰Ë G™©¿ î_@·ã¸îó©ÒðÎvÁ½$=]p š òOüõPäÚ.˜4ê¹ ½.Èl.Ï -C ¤±Dê‚4´Ò`#HãfTâtÁ*gŠiT¡ SL³ÅBØ/cÒ¨A]pÙQ?HcL£Äš‘&¤jWH£ñÒ°sºà椬@´VÂÛù‡4`%ÆMB^ÿ -ilˆ&ÚF·.ˆ`h.¤Á˜(– i€Q„´Æ–jì3!•mi† ¤áØCdÁq$c,¤q0~€¦˜BD!rN(.ʃ„.^EŽ{YuÁM!Ž]HH#•$(+Mƒ4°AQ;Hþ= ¹ Ö+¤‘± ¶í.¨Õ¼`f,HCJ 8zpèw˜)3 -f^–ëÒ°*ñ€4f±¤áü"æ­ á¯A$DÏÖ.¸ÿ]°óPi@]Ð43ÉgPŒãÌÚ.xº?¿ÇÝxòfó]Vìdž†«>xAˆË J:\» òIèz?äa¤?ÔÖ¢î* -!%ʲ٠§ +Ö.XiYò©Û̶¼`®< -jiÄõ‚FæAbÂêç†I„€4.J6påõJ/Èi”`ýò‚ëyv„ð /¸ ¤1ÁœÒP* $šBi¸8Æ@E€4Lļ óˆ^°›éᆑbwÁ†àóÛa‰ó‚ý_¯Ùèï¹^0 Ä ¾œ ¥þh̽l_ò‚@ÓhSGgò‚ð–L¼`ûÑxݾÙÉU8بýÑ`Íýhö©b(/øú)opŽ(‰˜Úꆀ4šyAÝHƒ´^ÐJV!! š$á:<™½àÔTžÎpÆqH¥,Òûy?!Š¬ D1&½¿ ÝŽö‚4dW‰ƒÍ@dWeÊ,('Š+Ld²ÿÑØ׆¾Æ~0øbñ£Ñ‰¥>¾ýh\4²+¬ËƒAD„A-ߪ-& æó+ ª|@ÜÒ~4´¨YMìW‘p½FLeœyɤ¡a9b0Xº(h„¶ƒ WƒùàI òÑ ü^Ý´xâ£|ÆA0ÈöÁ`hÄGc -!Êz4Øç,Ö*_EˆGƒT—Op¿®’°9ÁCÞëF|¢=)¥@:Db>J«JÞ£á: AöG/P¹æ}4üh8µ* ¹%oîùш ƒÛƒAõ¤ûh̨ƒ=W08,5€Á(6ëôhDä>º2Àà=9;L -ò=Ÿ¿ º'ŒÙ -sæ%ò趥ˆìôhÈÏ ¿â„þ‚™G $’ETfüôJQ ÷£¡¯_ðóGCª¿àª ¦ fB™Ì¶‡‚(2B Wa0ühh¬E¥…+™•Ï ÊÎ`pöÑD# Êøh0…NoDDi‰=‚A ˜¡(=v°r1¡8Á`ž¡A*ó…ˆX*ýž,†p;çü«MMœƒm¡A <:©s4~’ v%9ðž"Bƒ¿Eû‰ÝJÂæB®Bãq! Ùƒý¼Ñ`|‘'ˆ0X™‡¬(Tapcå²%ÉDq4>'5ñ(‚Þh¤·n4¢=„ån4–Âà!v áö®Z¦Â Ô„A‚Á ’ëz±ìáh`%ÞhÈ‚£A›¯¤ƒ"ŽÆ/"d`pG#^0Øu´xŽâhtƒAÿ' –àhLaØwÑuD¢Gé…Aá…qü•yr4Z^QÝT¾ðÃàW¥lAêl ÀëjBj‰›n²…Á?°~ÀU•£¡Gèh츎FRk’7e²†B;©ãl<žò£’é€õHrz4| ûÒ£¡[{4üõh—¾aPr 2ωBÀæÑ€+ aXVÍa0Ï«T¬=k|“Ë£¡/ Nx‘³.P„Ÿ†GL¥JÎÉ€.ÞÕ‚ÿÆÞ¥#ûbfn~ÂGÃ'…}U¹Þ*G줚—&ŠåŸe‹©ëó#Îâ\ðÅF‚þ|4„®uÃaU+<……>ùÛJ<ê߬k¢Nz(z]§ NòX¡ÕÓƒCagЗ!ÖjsWEBè«D*V~mâøh$Z"aòzœTzèãÃdV࣑MHÉý>Ç&¡2 [¬rPA|4Ù1´÷ib7ï;ç’8>½Ù'ÝZžòý£òÑ`SÛòp¸,z¹)šaY(9;—7Sâì£{…+YàÍC~¦%9ŠŒúhØý]±œÎRÁ I úh×qÅ€(~V(u˜‡Ê‰æf0Ý\åÊ(÷ĹKg3Úq 'x ¨ŸJ®<¸¶õ¥Ðÿ2¦{XˆYµÓÆóŸ¦Å(Е†àeÀgàð„´üЗëMœ¡@ÅÂóFS¼¼ÐüÑx>ï‹gvb†ÅñàéS8 Á“b™¹]˜4üYÒ?ÓæÂQ‰íçý)¦Ùfõû’€~_<¨2‚ô͸¦[L(iåw©š˜En+ښѥÔn}ûD84ÊFa×R&yfù؈‡0íäƒo·6Ö9ûÊËg 9dâAé:ÄognôAÄ×^1ZÈa€eŽãI©½?0H)‚˜ë¨¸ -il5Eì›$òÿòrÕ(À.¤AÇJ¨Ön3e&0¯† càÐtr!¼Êß•1]ÔÒ(F€].z”ÛßxTš´M…)¤.Ÿ¯DÐò!w|Άøõ !ÆE%pŠ¤qbÖ¾ePØ]Vwº;(ZI°Xç…]¡Ñ±;ô­0ØÈ&ö5HôKšBMŠziHòWat2ÏŃ44²3<]͆ԢýÕ-±à¤QàG–Àß*ŽÔF@‘N33v^[‘™3H%!_,<9[ùè}+*Tw8^5`%›ú Ö”"Yøf>Hƒ¨ÊRl‚3ÈA}×'VýUƒ\km;¸†µ[½‡¿Lºq‡ýOo¶踃?kÚŸ&orJ¹Façûp7 Ù =!\ÍX ³ã%º%¤q|Žð6?ŠÇdª‹/-ÃÔÃó¤&ÇNAi*1…Øô,…4„Oçï`²§?H)­Æ^¥¦†q6©Ë¡ØWZÒ¨¦GK­›vXÂú6¤±„èU(Ç/;[aC%½?ÀzŒ6^K|k>ü5†4a F è‡ÍSÙ†4ž›Ølò Ú0E×wèÒ„Y(%€û i¸ŠÓIjk!Ò€kÒ9.IËääZ·,آ̢'«Ò€¦à¯56¤Á6w­fDJ)4¤‘IŸ£±ÚìlÖ¦Í4¤±~^ -dei…Ò?‰3éÒp·®Zg§¬!V£Ò˜6áÞq‡¹.ÉŠ·àšY7C˜_Ùÿèc¯ÆÁ‚†4Â0îÂÖ"¬! }ßqÒ¾2žÁÖq‡ßé%x8OCÒÉûÄqö5+–9îäÕø-ú‹Í–Ae iP&ˆDn ú–]@¦†4"¯$?ßÇiKŠ;ô±ÖÆžˆ -†4vÚ8“þ"V$–gÞ¸ÃÚæµ&mƒfH£O—ò…­]ô#Ò%ÏïŽçU -‘Æü•qi$T¤÷oˆS,ŒHã¡ ŸVy³xkDPº´Ä±‹HƒüØT2K°CçðJKªYÛK8˜é1”Ÿ4<=-15…†&0òF#æ× É:C“jÔ#CDÔ£oûDʽ³$ ©–è¥Ú´è¿³ãòD’•½BI-R$@cè iô@?Úž^H£姤ÞkÇ¡àAñ¯M -i@q:p҈ã¦!a°n@ÜSm‡îºQ_¤X¸cA)KQƒ4"•#Í$ƒ4²:MXŠ­QhŠ³)ÀoQ·Š”p‚ëäj*%GHcÀßÂ\!BéîýnœÊj;Ôx‹¯‘MÕeWm÷…ì²,%šª£”ÙNm‡ûÛë’•ÓÖ PJ*vä\pÂ-Hº—”¢ãZ‘ùÀ$Ìe» Ó¼ ñÅëN[bVãAp¼&9^eF/P˺VUÙé‚HHHCÔǒ?÷TºOH£wŽô›‘»ApÈcw¬–—bg†•” é”/ˆf_FÆ|O ·i4:ÒâÙ·‚Q - ‡³½pCiÒàt$ꤼÚÐWH#—›y¾ ܲt…4&J›ŠIæú: «ôÖ,¤¡‹ù²™9 -i#6|çÃùÙ#á?«5•Ñ‘ê 6§kc1R’ԉóè÷Cõݵ| Òˆìؤ¼“ê ¨ì8^Sx6Ò¨ûtKà‡c°4¤Q)‚5 S«dvžZiÒÀûˆék¾bxÞà3¤akƒ[3¤òAÈ4æ -ân:l6ßÔ jV1‚w™óGiLÓÓåìˆÛMæ‡7õÍCù‹ÜñüN Ó7¤QºÁ2.«Eá i ÑP¸Ç+ Ei “v¿Æ4Ÿ¯übíg!.Sk< -i`®¦Ê! Û~Äœu/¿4š_Î!¼„‡!¸Ué˜Æ$ò)†º¶á³®†aÉeìÒ8Jǹ«åå¼Xª<ï45)ñ²;¤ÑÇÆ.i}ÿC'uN„ÉÀæ på Ð>Íùq -mÿueë@¢<iøGÛij Ê`N.óÆäÉ1Ž°æC„òd.WÄ¥åçÓ†k -á6fä[eSUnPf®U@µÜú2gmDýœ< Y ›9¤É{øÂuš±wH£_`W<ëyPŒïAåPJà\wɉÚ! "›’6rÞìš"Á‚O1[ ºBj;‰*rHC -¾yi”­äóïÿEðl¸þ ÿ*"–Öcïi|&JÐsôùà“ÿ ‡NÞöå2ýÌ1Ud^Ó6®?m"y€‹ý=¿Ì Aêq•Ñ êB¥šº…ºjHc(³*dÌ6ÝØ8¥ÕãKÅ^¹Ü³œÃÂ4Ç€âø—9†4Úð§(y¹! ˜þ,û i„)*ð3u• i4¦u=¦Œ! #uð`¯FGqP@cPz£Šë•àÈàCý$wH#ÑïÒ™Öî†hïOE!¶i0¨J;¨ åæ3¹WE+!Ë1"ÒÈÊ¡3ê!‹‚€­W8 ›Kp©‹!Ò˜—¼ÀFðÊ=¨Òï%à¹>‡0}âfÙOivá 8¸Ÿ/õe^‘Æ£Âa!=_õ{ÉÔ„4ŽR=Ø4ZŒD0àÞÀ5 ZŒ‘Ù-4PÀnl J|ៃ4°ÿ -•K,HŠÂ¢j -äsƒ_Ö_fŸåA1F]<‘zùi(²Æ¸Œm5prŒƒ4Ü`ÎI¾)5>HÆ”]cµV‘® ÊCo-9žŸm%‚‚4XÖ‚MŽ_:ZÌ—AôË è ­Û²c#,zJöÎ:L‡æòþ¢.*¤1¤—´½"|þA„ªû ÒÀòeIƒþ¤Áîf»}OéŠ<–8G™Ó âåv¿Ø¾†+YnhZC®˜©ú2Ê–Ný×Óàil£OUöêñQ9Û)U²Ü ƒ(}”Ärƒû A ™0AAìøk(ÑzXº Ò€ñÎàçåP‰õ4 i7MgYã5Œå÷ãtü+¤á åGËrÃÜ>%–Q#ÑÌŒLcMééû„»Å0o29èOÿh\{Eö,v+~4ö=ɨáˆe¿…å†Rc<¬ZÐ~4@hŽDÇd.±‡\‹gY ¾TAT2V%×âå&VÊÒàl4.i÷heË …ýç$rÜþh<ÝÛêm¿å†Æ?0} Œ–Û—&ûÑxLx*X”z‘ärƒ¹¦3œNk…rø£!ùÎf|ª„ø£ÁÈÀÔ”ü1.Àå†Å¶å½ÍÿÑÈðÔSF‚M©¢Sëˆ]¥Á ¹ày÷É·°žpN\nÈ èÆ— }vû£1aÊ‚?ô«ÑÚ$)›¶nlÔ?w°)*ž2;õ44âö• -ɸHË 4~ú¦Oq¬.¡ }•\”Ü`Š¬›×•3lžÄ(ÎA5Ç ç)âÿMV('ÔmÁP&Ç M0¦‹-  Ãû7ÆAmîâa–²onèrtwyœ¸ˆ7¸Ú…@1&ìF@Y¡¨—K3‡Tdù;ý+6 ³n@ÍÍJ%}E' u[j@©^ç ¾—À9<Æ%Žrâ¼|v%<”~eÀ.©6 ®Î[Þ: ¸À(¡ñƼ‘Çr -M:–¤=«àÞ ²e‘O€4´t|Úô'»¥&÷ý¾Œ3#ãHchÒ‡;¥{rïœÌ³);¤ñ^µ0 RødÃA(úßL¢óH ÅÌHζCôÞwÅàá`„+Kæ\Qçi0Ø ò\.8‚4<ÊÞ’ˆ ä’7}‚4*¬a´àÙðµIS„ àÀÝyH+Hœ˜ÒÁ¬BAh¦ H#[š$Ø'Ч —bO§½ÇÌ*í5¸Ò¸ç탶"{ 5‰ "2S‚4j¡ÑQÜ…a8?iLƒ¢d‘uË£‹P Š®¡¸†ñëi𦜿±=ÛÐªè›`zõ :Ã_ >§¤1™·SÙ‘¬ Xöl¶8¶sr|­ÍŠ9>u—Ô‹œû÷)YíÔ%Ùk"[5+IuTsùÂ|©áe\Y êxÔ–F|zFûiT ž„4œ¥êj¬ì¶ºAª„«¡±¥±o`HƒÙ‰X”`8 i<ÿÌ–˜S·tŒé”¸±¿2¤Á|×8HÂÅ@‘Êfƒ¦R·¡ô?áÕ>e¯p:§i\ñÒ÷y“ÌFCÍD©Á \ñÓÓfk“!lÚ,¤Ñ¶× i@‘E“¤À!®* ix"&>ÜTFH®ç ,®í<äi0—÷‰c³_9 ^*¤¡ôd„C§¡(~.b -Pוy^ß4ŒÛt: Ø×?i‘.±;A!¤AìDCu8øé× -••pj0ÀÈ'¤ŸbÄçED!'~‹PÊ÷òƒ*¤±ëS<åUpv=Rip”„š‡â¯¼Rg…4B%W³ºƒQ¤ IH£ ˆ.J·U=¶õÚHƒ…­ÓËŽ6! „ÜGyÉ¥4EÒiìu -iÌ4ÌçqÐ -Ò¢6 -¯ Òõ&Ê á>%¶Óˆ=Р휆ã:ÐÀ«qã_²?Р‘AU ún|†…ûü¼Ëe.“8H. 4×õs‚4’Òf³yÙe!D3!¤1MèŠCHãy0üóu0p‘¨"BèL`¹Ÿõ‚¶ç’Sýwí‚éjÑ_ä)õÑP§`‘\ýôL74mQ«¨¦š¹>G™í©)L™"KÁ¼|4ž«&Ÿ#•üWc<¾ûÓjf¡òDÅîÍó%›æGãyv¶~¯îkâáG#wcä® ¯Þò :<}Ï@háÄþï ?©¸ÿ9nvú^Y a+ÒÈ„¢:c,_e¤ 8¼¢¯òJj”NJââÀk,ƒ -™PußüîôÏý¸Fµ± ôœjí5×Jb 9§ýñ~4ð^ñ8é%ç†SÿPöGÖX†¢VŒè®ÃÐÁâ#ÒºŒÚ…¿,6ìŠëbák,ƒî—•ïÅÔ’p5–ÁòŠŒ`ÒÀM»oëUù”L®’P*8Q ñÍ<Àð<Àðˆ:Ðòø~€³œt'ÝIwÒóC·ˆ-b‹Ø"€àøþ'LFGGGGGGGGGG—°ß¢è14Ù:þ9¶×1«P WW «tÒß,!¾uÃ)Z#"R°¸x¡ZFO^’Û«—õË´®»YÎ`çÂešÖÈeäAq -Ér9–˦X ­fjnK1KâÁ]J—Ò'õÓ¤D-!NŠÔô˜e~&wÕÇ?j¢Üu”ž¿Iâãç²c{®æV´Ë¤B&¡ÞÕß«¼ÖÓ=ÜCðÙôª'xMÁí‹~aô›Òß-ž%»5¸‰ìtŽ“GF¿"6\’Ë)½}‚דܮlY–×)N?+V]òšâ¹KøÛ…ÓÿŠêæzÝ5GöšF«4ÒcJŸØn¿ò³¬™ ÙëÒ'GKÉ•Ñoâã¬.ŬÈU}”<ɬŠnay|â_úŒ"ÚG>÷Èùõ.§ò™æe’I…L|\—cöÛºá‹þ©éŸ$KnS´KâÁCrz„šR,©h n?¦X‹_ʦK>: éSâÙM0;jÓÒ»†Ø4'ÉÙëlÐSÅ­ìŽcJ -%»í”»–Nrï´’zžâõ¦5«+Zb˜¸hZ#¨uÏýiÒ"wÚ>Š"ÕôË/õª5¬RÍê³gZò¥¨—âg5E+*Ã瑽fÅ-+na4LROIÆ÷vÜ~–ªYµ(H-Cêù£%O†$FE2!ýÿËöª)òÑ[Jž§üú -hOùõ×í¶”ü±ÕÈ~§bv/E–ì†Ü1KvKíºŸÌmFîÒ×(ŸÝEäÙiÙ§â6·¨˜ÍMq¯²ÝFÍo ^[ô{¢ã¨–¥(_’ôçÁ›¶aÜm0§Ñ_çŸ%~ü’ØT³8Øñã'³gÑG%ä£HVDŸŸ]o“¼Ë´žøö()bÑ|>Éç_éq‹æb—âß2d­”“äsËG_ñ©ßUÌ’Ü´ôª.ÚÕGïsŠ¯;–íuÈ~£^v/E-õô<¹ëËU]°ÊÚQ@< -¨'áoÕ»zÌäª)^¨·*ÚMÍ- —Eô:·)¸ý %‹~[„´Nõœš_×£X…^R!.‡àõTëú5ñä#;Í¢Û’?gÍ.iE{RL¹êºu’t(Îßw‡`ìq|)‚Ò2=›¾ê8%»ý9êeØ«¦Ÿ–¢õ,µ¨ Ÿ]õ[bOÒjzNÒ½úÛZ­óAÉW ‡ÜòÇqÃAÍ7ÃR›ŠTôô².{–á6iM[±‹jU¾wR­j z³øåcø9Í›’Ö“´žs´½.=} eoóÍÁùãæNûÍTŠzèyÊQtš¥4U¹+ NŸì6Ì–Q²ë§¥Ÿ–9 ò§ÈŸâjvIëybÑT›~NQå¦/<…¿}”,ñäªØ¥$)%_ñ*R¿!rÛrÓJî%xŠÙ—(5¿(˜¥¦iMK¬*‚Û²š¡¥‰=CòÔ¿Œ>%¼½‚ÙQj¦b–Ä¿Uò RÑ>“^uEÃ*ÙýSS”ž¿9¢\U„Çí‘ôORõ®-Îb%ZùùVƒXt¯!z‚Yßn9Vq«rUIæ`÷j˜ãdïÃÁo·":>’ß#÷JQ\ïÐ{9ù(7”ÓA9 ýò¡¤)5Qîš‹ŸÜm­Ö½/o’6ø¡à–´¢»Úžg^Hnÿ«ÊrœÊm¦XîÏI¿4e­cwÝu)§cr8±÷­šÆjZ_ŽžQüI±CWÓÚ‡ö:ÙóÒŽöŸ)èDûqü%¼m)g“v8j‡w¼ivÇ¡T•»"”ĽÍ¿Ûëp0ìË2Õ:òÇᢗÈA¨© ím¯¦½›FÞÜm:èyJ‘?üãDg*IRŠŠÚ¶Ç;ý2$©çËurÄAPö<˜ÛtRÄGî8ÔË–ÔÓ3†ù×Ñ[g´¢©¸UÉ®-‚«ÖA9 5§…À,,nC(éjyÓ䎃=n»k¶|ö[þ”â.v ´$ÅœkºÛ@æØŠY—ܦÞÕSŠs¬?®Õ6uÈ‘ÜU¤¦ “ŒÅ¯ª]=æx‡Þ^Žöªd8Fb‘J­àW”ž ó<±*ŠMaõŒ’c«²âw·(w­èH=Sp ROÞ寛Á/Ç_5÷ñó˜£(5Iꙋ__Š2" h_ñq½fÅ- ^Om:bÑÞfÙrìžKø›·~Ú^WÌuçfƒv:7Y~NÔCŽþ(þeé!GýóâM3A@¾œè0UãÐÝ–]îuzøñ"¨‡!ý}ñ硜͹q;Îäl`Ž“¹®þ¾ž$ÙŽF‚€˜N¢á†ã€ÈŸW2Í^qÜÅÑÜp8Np ÃÙÙzÓÜÅP¿¸ãÐÍæíh¸÷¥õ¾PÊê#9wÜ‚°¶µÍ!A>Èòã£åpf®»=îC†¡R低÷<ÜóÐ ‡ÜlfЛ;.ÝœXÍn*†ôÔGðåtNµÃÉCpCûóî¯ÓCoÕº*uíÁö<—ãä®ãÅÐC RìGñA–³¹­Á–ãÜŽ›?=Ói¾ZÖÅ©ÔâDúOòí6Uë¼Çâ¨$A¤(:Kjö£¸jq"n>|”D¹+è$sÜÃïcŽ£Ýǰ倴œÛÛB')JÍ«–Þt–¹ÇÉ['Ý|¸ç&Å9 C. £ÅÒÃïí:p×ùÑ“'ÉѪ†à6ë®o“4½n(EG**:ÉÔÛžæ¸Ç!UÝÉ”ž)—ýœ¥>‚wèÑaGƒŸ-Š·(Úào<?gù9K<ünЋ9-æ´Õܶê·ô®;žÜ5媡“ÜIñCzž`v´¦øçÙ^Wž»m'Hxâ#öÀ],S'æ¶ÏHú¢¸ƒ^íqçfS‚lØm£=Þ:éæDÛÙøäˆbUUËöâˆv:붱ÛVr8š'Øms·íÝ4ÚóXNgåtPGÕ:M‡tÀÑ%çi®S;œQNçûñ>@ÎŽ¶n›¹Ù°›{ÞÊᬎÊሠ,çɈv:ì¦Öuî>·£™'H«i膃‚€ NºÙÔ‡ƒž¬uâÇípTÎÆö<> i®;7'P¬N"½ïŸfýq°¦­œÎÚéÌ]·v:©Æ‰=Žþ¼¿VÇÕ´VÓÒÍî>ÙWmÓtСÜlnð‹9?Vì¶äx”¦Ÿ²ÔAoæ:)çC퀨^w;ôtÄGó&O´£'@6N¨Ú†r8*äö¾Äu81n@@SÓ~¶ý ê»mxŽÖ•M™óÞ­KµÓᄸٰÇjZÜuïÖ¹[{žËufGA@Nó«ëËy4†ÐÔ3’·÷¥œÎ§Ã P‡j‡ÓjšÚéÌžGw]¬i-gSsܼi¶÷­‡„×S±,{\Üm¯¦™› ¹Ù ëÖÉÉÐc’í¦¹›ö£¦ˆUKî{zÝ] gn£½?w먈mû2ÝÉós¦x(âd)†»8Î_ƒ©p¥Fr›/ÇûûÜM9œ³ÃáÅÐ3Š4·ýfÉ“cìq&dÜœ(7 pÇ¥\Vî6·ë˜ø4èóŠß«zDö6Øãô•Ãíprл½®æ4Ûãðð+µìÉeoÐ3;¢WÁñ}$kÏs7 CÝ,e0œE±ìt\o3­èo’ý(ò¤H^ìqëÆQ5Îòqr@pñÃÅPåpdn«=Oö¼˜ãXNÇÜlN#w†÷çÅ[§Õ:j‡³jœ=kðS;›—ÓðqÄÇ2î8UãÀwƒ"¼qî¶Ù`8wÚÙÆít⮋»ŽÕ8ü(ÂbY„žzÆ[çí€È§ö¸=üfnÛÃoµª9øÁ\÷vŸËuogs9šxâ„ ’r8â‰Þ‰0×…FÓ”¦"§íäÇý}'výG1ålÌÍFÕ´TÓÚs7íl!ˆˆ…ù“­Ã‘Õ4‘Ã!µÎÚum·Ñ£hn[϶)ºŸwœ¬mꎳÁOÃOY¾š&~|¤ÚvƒâÛÑlŽûÅÑ„ª¤t»nþ8˜ÓÔÎ惢w(¶Üfƒá.†»úb˜{ݹù8;›ÏšújJƒ,~Uô[FË£ôTµÍØùh;̓¦pâd £u‰ê¤)w]ÛÙ¬œ=‚<^VvhqùMs¿Òi†ÌòS–ªv%•#­qänáý—ãÚ­c‡Þš)×ÕE?˜Ódp{A"SaŠùàwRÉ{îb8ܺuÔ­ƒ^>Šò¦ý#èŠÙV ›Øõ7ÇkŠÜ”GKy Í­ƒ‚[Uë’Rµ/ËwãâÏ‹Á¯Á\e¯ ©¨Hnï£Ènœ³¢nE¨BÍ·Ûb‹Ñ0JUßC7 ®Ö·mö:üV‡ílôÌA0C˜ÛâmS9WÓä®s9®Ý6¶Ó±Ad–á+A>ÎͦÝ6„É$uPœ¹ŽíláLJøqâC•+ïãXZWX]ÿ¢è A> ?ãh~œX;›=a­Cw]ý}2×­Î7€„'N¤ÎÉéhÐaÓA‡µÓñÁ1÷¾ÏXæÞçv8l§ƒ‡àoš´ç±›VÞ ~!ôL™©ºé„ ã†ãŸj Š°÷µà÷WU½,û³|;­ä€”M^’%u ¡çˆ«Ðt‹Umn«9-Ö8ð¦µÛvr8â‰yÛvQÜEÒö¼¸ÛÜ­#wšÜi-·…×ópqd;yÓzQôGñSŽyÞ"{œ z#´‹ßß$çn«ÁÎôª(˜½Žìlò³©ì«qi§SƒžGUè9ZÑy´ÄEP”ž§4õðî¶ÛÛöÓ=ŽA¾,Ó'E«~ÎRC˜ÓòlÅî–'ÙåO3Å®*:=RÇ¿IÚ`BÇ<†ÙëÙëbn[µ© Û_ç1Åþv…Ôñ-†l·½ W¢ó SmµŽÜq£u½.Êuÿ4u9Íí¶Q»Žä8~ ”ŒÍ.‡W©e›ú#ÈnÜEøýOUVëð¤“eÒ‰âŸwÊÙ¼÷1ÍyãÞŽ¶r8qÇ™TÕ3’µç±š¦v:ï¶É]g^xB‡ä„Úé $È -­‡ÄrÞ8WÛR§å8úûì/¼A’Ý6˺ì{æ:YÓbM›;®9ÁjúóÚ'CWÛPÎÆÜ€Œ (‡£v:!ÈGgèNœ`µmæ¼UÛR.üŠeRzþåè“ã>Š¬¦¡NíyzúbX2QxëV‹=±Å“£½\÷záOYâá2IŸ 믣¿î=wÛä,¥*É,{°ëA¯t– RÄ?ÎÕ:çfƒr:)‡ƒv:-×É^÷£e?‚yØÙ`gv8È©i+׉ ôç}Èò'G›ŠL³½øëìð¥&OŠ¸âà2G̦ØôÁôrs¼GÑäpàÏëKÒCP9ö)©£#¨Ewst9ŽÕ4VëÈÞæ!ETz¦ÒÓõÓ)7|}“t9 ;)Êæ7È#BÑyüZÛÉ0„’)êáç1Å®ñm–úÝK‘7ÇQjŠÒ²Õ8t,¹ç•ýNµ«ˆe?«*‡Ýˆmu‘dµÎËuöðËÁ=\ 㯛CO/ÇzöåØâ¹Wˆ<.ùM*Åøõ$x‡–£·½Ç‘AÒº®`˜ŹÓêÏ“¿Oþ¼œ׎öjÝu8ŽÌSÿ@XÓÖgítX­cn@ØSÝìuç†ã `%ÈGI}ÛÎsÜIeñ0¤½næ8•³99œ$G9Ë ˆ?†!³”½ÝlÐÍæÜlÎ ˆhmß/<;üàŽS5 ítÐΆå4ùûê/D7ïã#IËzLòþºÚëæÎs·E뮋¹ vç¹HÂœ{¡ÚÑJ »mxÒŸgjUG©gþuwÇÕçr›Êqnשç7Ç•z>§þy¸Çù䘃aý…äfsjZºq1Ú WbÓV “ÜÕí:³Ó)9œ‘Ã!9Þ4Y­w’‚㦖 ±jzö®ÝV‹¡O’7è•Ô3µ¦®÷ÕE‘Ý´³5Î϶t²›&ûø/^?ñu’›æKrälÀ ÈÈÙ¸ÞF{œÝmxÇÕÜönš ~¶¾—jœ›>©iQºÚtt–"Õ¥¦ÛuÚ®#{œ ~óÇÒq‡eF;Ìè£å¾a®S‡ÞŸš½¶æ6¤¢¡UíÏ²í´·ÛæÏ‹;ŽþºxãÈ'Ä¢,»þ¨¨–¡5ýœ¦'5IzfÓ|)’ZuĦ©Ø­)>‚y)Ÿ'ƒ_†ùzP²5·';?ZY|or\µmåt\­Ãr62·é¢¸ãN’/·©N¹ùˆ¿ÎC·Ãq· Å M‡ÜlTms·Îäp`nËÃ/tš"’t¹ÙhСäpTnü9SqÒrZÌmõçÕŸ§v:#HÉÙ¼›ænÚŽÿ¶Åpî¶wÛVMs·MÝ6UÓZŽó×TdÏG«ºdý…-×äf^ËÆu²dÑt©}tý +ý.§™›ü<%ÙrœŸMY3b_ ËÍÆätÈ ÈÜq}Ú"¨—bHEû1”9mílÖNgCSÓ@ðãÍêÔƒ Œ ¿åŽ£½nE] íÏÓÅå€Ü%¸D ­Ù¦A¯½vëà£(‡a=Š±×á¤È²iÿ$á­³r6.·ífùÊïz$C™%`D(¿‰?I?%û´œGP¿_=M-[r6qØÁì™”®5èíå˜aËisè­Úwÿ>ºøw,vMfx…žîÖ™¿®'ÉßDSÎ&¦…ª@AȤT%õË/ÃÏ9’ô»G=߯C‚Ó;i3¹) ˆÑrŠmÓÔE1æ6.ÁB†äÂËq/GÏYú%ù9OËò¦ ‡\”ã#¸›# zöÒbX‹bÊÙü+*ƒ…ÔwO–5Úc˜›e.ŠóƱºµlž·Â—r8î¶Á›æ“£‰M?åˆz]Ïi¾›V‚€¼_H›(,–"§£ªg^ïÇðæ6”ÃA@Ê HºivXš­ý6&"¤U}7ÍÕ:l§£v4µÓ97›Uëüî‹›èªi’ÄAî:?_Ž+9›’Ò£æJ(„‹¡«uX­ãrÜqwŠTU/Í9 S°Ü—gÌyogc;[ïðÛÅö8¶ë´v¼Ë5Æž‡v:ñ÷Á]·r8æÝ:õøá#8BÍ»ò!èj”Ã7 áLJøqâ“ž§ÆÉ‘'IÖÊþãHo›ºI9 )¤»Ö=Ã!˜›dhEq¬ÃpÝ8³ÃA>ìQÔÏ2þ:»Âf:„ž#5íÍRñ@>Þ[;½²*^i„¨\¼T!6åÏÑ7G;þEY¼V>yÞâçšãV ó£Øcþ.‡ÓŸ )Ôc)5a¯JO~qð‹¹mÜœˆyî T¤€ÝzŠoÏ„| ›XT”švØåå7²Ó£Uýϱ¦ôác•ÔtÈ4qЛ=ÎÝ:¨™åsRâ¥â7$·Eìê›&_–¹8¶—vdTTp|jÕ‡´¢uè±[gÕ:çæä¦(V'ÿLõr ©©NŽ¶Þ(kÛÊᨎ ŽçqT7­Aüö‘ìG’G–Qh'ËüèϳÁE¼Dç%·ÎÛlFD!Èþ¼¹Ó^®ãnZÌq©ÖA5-ùÐK±‰2V±sÜ«il§Cn6âLJ¹Ù¬š6‡ Êq¨ÖùMÓþ>¶Ã5Õ8,§©[çõ¸5çлAoî¸óÄ¿ÅvÛhPìͳäp^Ž³¹îö>Qšöäh{Üq²ø±r=/Ï·óò²T5­å¸UÓȵÉÁÎÁ9ìB§™RÕûóÒ «ub¯ƒ9Níl`{=îõºEÿ‘Œ;¸Ó™·íþ¾ûór´Çðì´YütR¼Áïå8´£•œ ÉÙà$¹vÝ©qNm[rë³ÜÇþ¼uÛÞÏÓÏQ–Û:)¦Þ“F«¤âTòÍ‘¹ØÓÞ®£zÚévQ@ùE,ºÒó"tƒ Ýqñ¦¹Nýu&ؽ.å®#·ý£æìqîÆ‘9­9ͦxôЊª|ðý¡%v=ù±`U…¯eB=(=}SD!òc>}_†yØyHÕ¦¡´µgÉ'?ÅoÌžCr{7KØëÞn“=.þ:Yôd»í—d+ne<;O†ò·½œ{œ~}Z–ä÷ý<{¢\Ö?—ÓæϳÁOö¸ØÛúG‘í¶þ,cÏ“=oöº—ÛFñ¼và<Ž)8¥jÜyà†ãm6 g£vœ¯ª¶(¶[gÔ®¼IÒ ·v:áljòSŽ.YîOSÇWÓNs³i7nɸëZn9›îãDÌm*‡cn@ð0ÜG1”ž?z¶œVr@f° ‘ášÂ]çnš«q莛=Ï7O[¹·ëz‘¤¹nÝ€À['Þ´} M0Ü«,ÚÑàÏ£ÃpÝ4vÓ^Žs7 „šž’ÄEP½¾$m\7M倸Z‡þ:ÚëÚ'ålÜM£AÏ¿vÓÐ ˆÌqûçyD±ùãX­]~pÇ¡Ž>ŽúXÒ¨v:h§ó|”úëú±¼ÁÏ/Ç=U1\bבšzÌQÕ@ìsÍm -vçoó˜#%I«9bÃ+ý}j×TãèeÈ‚ßžÛ­ó1É^ ó„;­Ý:±·Éî¹$Çë¯ÃEO”–$r»R¿+wÜz×9äúSô˜¤z •±]§_ÆÏSlŠá-z%z-‚×»²b6%§k@}ë]ýSäO±=þwSd;-þ6“»–è· nÐ’'C¸ëð%¸‚W:ìZó{²Û¦· ¹-Ÿ¢¶9®Þö¯å -n믻Å»«NµîÇ$gÐk=þº{ [ms·­¿ÅM§£Ã ‘³‘?Õ:ÞÇ yCñ«Šá^$Q<¡Ú¹Q¢RÒÿwÒàs¼ml§Ãj”³a¹­AWë¸Î‚¹÷± òA‚|”œ Ìq ó„9åplðÃAÏE<[n;;üZ¯Ër]Øãúr ¡¦O’5¶Û†v:ÞÇ ØûJk«ƒa~}ò ؇!þyh‡‚|ÐaJÛ|,AçYJÓž뎳»íCŽ$v¡¨Ìq®Ö™;Nþ:VëÔŸ:Kýó~0´;n9Qn@NÎæÜ€ œÍ»iÿXšPÆ®#o+2K˜ãÈÍæ8 ]ƒ5îÁzšZ5Cs³±EfÛ$u­½îÕ8®¶¹Á/'Ã|q¤Cï=^Ͳ(5AçJÇ?%ý“ ©§éeá¯óÏ’DŽ?ch{ýuxøyÐÒÔª<ÊFBG•Z¦T2^Oê˜õ²·øyLr'C;ôVò{RQÌŠÐoÉ-»dw¤–'Öô” É^Ïx¥JôúƒŠ"uLÅ«é]WòZÑ-ßoKÉ®¬®M«êCÜÓü¡%Ë]YzÞ'G“ü¡güxVͱϢ|J’ØÓ¿xÂðùe$"±¯>’õçyP2³)w5±+Eíïó”¦>Žœ:ˆN=†þI²Çí¸»†Ð³þ¼dCn@LÎæå:%•ÝEÁPzò¡Hw»mk§órÜqí¦¥œMËáäøjZÛ騎ÉÙœ›Ûéä o«iyê"È‚ßiÖ Ç—ã(MW¯;JÓô@gYRÑ<üfëÉ‘G™ãè®›9nÞ6^cŽ«½ÿ<=üf¯S5Üq5ºç!Ç¿$ñÏ“¹íö¸Ôº¢ä{Šu?¦BÑYÒà‡v8ªÆy9-Ö:~×éžgƒŸÇík5ŽÊ±ÁÏ3–¶çN’µ¢£“äEñA™ãTM;9œûNj¿!“œ;nÕ8þIÊðûs¦l‡C{z¦4%©i vo§Í`§“¡Ç$cNãMQEäËî¸D§c´P&¹í›# z¥v¡¦O†!´lÅïk†K¬:ZÓ5=æX:ÇOØ©ø÷ •‰…ÏIð„ž»øá ·“áémûQl½,ŒGñs“¼¡¥§ y±3Ùk©ÉUS6û"$C¦r±2Ñ€>¡Ó´ÅO;ÑçGÕ:üDªibÇ$ò«RÓ(6m’ã6ø™Þö¿ðÖYÑï -èÃm”ìŽØt´¢ýIÆ H3«–gu?i›c&PŠOïjWQzúåØ¢Ç,ÕMÃIñ_Ó-ýR\µ-Š†/¥éoš’¤½涵ÃQ;œµÃQ7›UÓÈ H«i¯¶µšo›Ýuò¶¹šænÛ»msÇ…PÔS–vøÎò/Ij‚LÓ=9~Êî4úëPªŠRU>YGy;ûûÈÍ&Õ:²Çù%yƒ «i®Öy·-æ8™ÛÜç?ÛG?ÔÊŠÐt”ª'¶õ”åü}mÇ¥›Vr@V³ˆ$K)ZBÍöãç‹_/†{(®Çô²-={Ûzê!(oÛºië¦ÉwÜè,AåøŸ¦§$S®jbÕ;ÝMÛÇP¿=ûQÜÇP´¢«w¥æzì¶9ñK̈!’Û®Ù•õ)º­rWQz‚ÒS/ÃÕ »„D$8¾zÙ”»ª^÷Ô²¢³ÔÁN90Õ – &Ã$öÜzÛÔšÆä6Ã&Vµ?o”ž)V-©fŒ~Sîšr՗ܾæÖôª;:² i!GªSŠG—Õ2È$Cé JMW-ÓßÇŸãIÓ€üØU­è)=ÿ³´ÃOÔ®#×µ¿&ä§ô~*Ž=ªéŸ#-GëYÒç1Þ×UV%Ë/¼Óë±—•b_†<þg¹cÊi5$“EÛ«°\g/ËøûD’³ÉCÑC’$ôLµ«ªU?æè“âo’1ÇÝ ˆƒáÚá¤; ù²Œ9îùA>LÅxëäóÃÑÃa9”³19úóH«Ê—eìy(v™¥IE_o :K|Ý®“j›;mÐãÇd–÷÷Ñ÷jZÊÙ|'ÎÎfÝ:ô×Ýà's\¼iò¦±œ«u`n£?Ý6µÓ™»®îº=C'*BÑOY§jÚÙé¨ÛörÛìqyø}HQŦ!òK"¿!­êÝÛá¤ÒÛ®Þ×AÝëä­ó“ä>‚¸²Ü&r@üRôc~·çå_—OŠ?zî£sÚ z#UU¹nª]Cæ(*Eža¯óúÔ ¸Ñ#fß/;¦ù)F!ŸäžA¨9‡]̉¤å¤$Ï[¯ú‚[ì~J1ÿºûãrkÍð']yrtÁlÜšÈïÉü¾X5DŽ8øñãH{©M]@ž•~7ÁkÌšZ7Cy H‰ÀEèüj~[tLRU»’RTAvÛðçXâç®þÍq¤¢§U=­iH=q¬Ãç‘*–qr ±*̦EæxÕ¦ ´´ÇÑÁ]Snë—㇠C¦‹Û«ŽTt7ËVSgö¶Ð)²àVÅó÷¥in6ã$ítVM;7 öç¹æاC\5dŽ´×ÁÜ6sÚ«qÐÎ&5Ó.ûhîy¡’™djUùï+?>XMƒµ ÑűÉúqQ´Aö8·ãb1üQ4æ¶~Uêù)Åäj°ÛI1„žú–ÖtÁºãèn›¹Íþ8Óšæá×n r¢ö<™ã`­Óv83ÇyÊ2CµÓiµ-溘ëÐ gî¼]AgÙã=†vú&ù›%¬q^#wLnIî;ÁÓzÆäµKEMå(*Þüî°ÓGÐS’yîa(wœ»uàn›?Î7É\=fijÙWü¶ìyŠßÁïËiig³›äéc›AîOK(ØË¿“âTUǧx•åu‰nÿ)rÃ); ›_S›ž`vÔ®ŸôüœfOŠ£ÔL±*ìmQ)ºÝÜm1èÕáWƒÝìq=þå2KVËö¢øvÛuT5|Ò÷“ ¥¦*f_õ«ŠÙ{²nØ¥Û.|–9‰b8{Þ>†£ôüÏq¤š µ¹ª>†­ZNÁp_–q·Áö›âÊ]GiÚ›dz 6e{ܘ'Ey3ôœe‚òçµÜ{›OŠý‚ÊÐC‚,ÙÙïRÌv'tpårI$£çQš‚ÌòS’$UåÇñí:“³ÉG1'É} MfèA¾?%ioXÛ¬›öYYEMlk:ÏüûôÏ ‘â¨,íPd9Nù?>î¬=ÏÝ´ùqüOÓsšù(¦Z‡ä|üiÙ²ç1Ø%™cÉ,}1ìIAÐyÞŸ{_’8f­©kMaoû›#ýuh‡“r8'ÈÊ騎ÚáÖõµ÷ÉÇv4•Óiµö¾[ ë¼Å°Aür1¤=nÝ|¼[§ö¸˜ìšV•í´_%Qìød’$2üÇϵùÛx2ìÉÑÝ4sw>Š9Æ›örZ»uôQ,±«OŽ£“\©% ]rkÂÛ/:ÖÇѽ“Ÿ¯Q¥X>}‹ÓHE¯Q­é²Û–ý®jسžy*¦h‘p„¬r´N%7íŸ"N‚žÕKþº½G¦ù“cé4?"2ɾéðs»-Õ8uø館“!è$ûD±§ .“ØóŸ¦z9¾núÌrÓªw=­'‰=ÿöláqÊÏŸâ˜EÔÛ¢ð¹lŽOªé!?Oþ'¹’c|[Ž»ÍÒ?Íþ†ñ÷i²g¹U× !ñM”7MTü®hXÁÙã`Nƒ½í?= cŽ›=îä¦0£~…)ÔŠ]î„0TF #GÉΛVŶUðûÄ®wQT;´Ó™ÁÏí¼½Y.ú)Cün¯›5Nþyôç¹ÇnZ.Šöç¡œ O–¤çŽ&§#‚|œœíyð¶™| W­Ëzß’ªâ (‚œ(9z)Êhµ¦Ÿ1üÇT’ ÓÜGñÁ˜ÛZmëZÙÐ’ÊQ¥¢"säGæ6s¢v8NÊá”è;ÊîáÅÑþ¼˜ãꤻæ8ùóìQÜMs¿uÓb«A¯þº\o°;­§è$i°û¤$È=#è!C¿CjRÏÿ,s\µNÚáÐßg‡`ýujgw~ú(â"8^O†)ÖT±' ˆqÉæwþ¸ cÈX=NPHjzbÏ•{ºxn§J_«â–&Á\%gœÈR˜F1žý%¿?JòeZQÏiÒá'«uânãG°Á’zzLò?ôfУï?[üö4¥æËn³øûXüꤨ›£‹)äƒK‹o’zù•Ö2&·#¸Ìòë¯:ÞMö¼þ4Cj*BMÕj¦Tóõ®!sü§iÛqmÇ‘ä¹GQ•»¦Zu'Åìp±©«®sqTÅò‹¦Ci:wÜýq s<­'¨$s0t¹Nþ:TÜÆðYå²=)ºàóõ—ÓÉ䶩v5¡¨¨$G§©‡!ÛéÀÜ6{ªup ©'ýyrÇíbè!IPIâŸw‡ßüu,§‘´Ó©Åñí:úûüåÍóÇvÛZ­“r@RÈÜi{öå˜r_ËÚáwƒß.†ú¾œvƒÞo–y†Ð“¤¦ý8ö£¨‡ íq1סe -Q,zRQ=ñÄAÐþ¼”³¹m¤ª:9æd˜âû$¶½Å0æ8ûóBé™rۻƟ'ƒ -vYsl‹ ìmq§Ýa':ÇÜnáy9þ¨9bÕ?5K+ -JK}üðлÁîS’û8¶ÝöYQ_Mo“œG±å¶Øãò1ü¤¦hEíѱflva>ú o«xî˜Q?‚Û·èåä÷§#É ×ˆxÿ&Ùk{Æbç·)~Žü9ÚâGrÓíšèx -~÷q”½®Aÿsñs7ΟŽ!9]bÓÒzþ'Iž.†!´\¹éOŽ¨EÑïznÁn_Ž$ùMÙô vü)–ܳ¯1Ú…Õ° fûô|?ðܶ”Ûnñ{Á¬i5SnªzÕV ·ðº»žuµGÑsšþIîæX‹Ÿ-z{)ŽZõä²,9ö &ý}=IŠP3媧ÔüÇðc–š‚Öô£¢7)ÖâçŸ%X)@鑹!s*sÞ.í/ûº¬W¤”u¹×¥‹œßs]²`±”²¤I1Ã"GŠ €¨Rʺt[  FŠ6dFì¯çù›/ó|©´ïÛßwÛÇù}Ï÷|ßýÜ×ó¼—óÚ·÷ù®g<·{¹—ËÏó€Ìnš÷ݶû;çsÔü¾¿TÊ{/õ¼¶w»/}¾îû’ßkÛï{ûEyûyŽï}]Ϲn÷x=Òï&8oëxï÷r;ûu/çs?£÷º_׶̋]Ç뻀ŽRŸkÝÖçºæo½ßs¼Æy[ÇsÜæ}\Ÿë’¿I0€WÞ÷ºÝ—ú÷ò`e^ê([”vÙ*m €”Rî¼mÏuYÚý\—µîÛº}ã¼÷üë½ÎÛ¹^ëú=xé/¿îí»/õÞ.oÈ„”41P0=‹¤`&ùãÎw»Þë}ïy[í:~ï0ìúömÇïÞÖëžÇmÇg‡ÑÏ:Îû½ïÏþ}÷·û÷íß÷žã|ë{ÛxÞøw{îw\ÇaôýÜ÷½ýÒçžéöÌ÷¾®ãýîÛ¼ÍÛünÃØóÝÞmÞ¿y»îs›Ïõ9·u{ççÜÖï}îó>·û™·gÞ~ñ{½Ï¼í÷yî×»ó»ç5Ÿóº]÷¹ÉÛ×½ÝÛõîës}㺭÷³}ß8ŽÏ|nç< _Ÿy]çuüÖmŸñ=Ÿóßç|¯óÏû9ßgû¥ïö>ï{Þï9¿ÛùÌïûlïúîïõ^÷ö\ó&½ÎõÝ¿g»æmœÇs}¶y›·{¾ßï\æùÙæ}›·y^¿y}÷{~Æy?Çyç÷{Æù¼çq}Îy;çM9oç¼Îów.ó}nó=ów.Û;¿óü®ë3Ï¿xžçõ>¯çžõ|ÏÛõ\×öìów_û|ÝÛµ ïížßó¹çëÞ×û»îï¾·{»÷çzŸm·{ÿî÷^÷gÿîg»Ïù{Îû›Ïû}ö÷9ï}½ßû~ïí½ß}¿o|Þ{»ïq¿×÷û¶}¿õÜ¿o?Ÿï:÷ë÷ï›Ç}÷í|÷{ÞÏq¹·}·í{ö}ܾgž¯qü®qÙîíÜÎûÙ÷o>—y÷oޟ횟m÷wÛ÷ýïõ|îû¾Ïû}æû\ïïžÏç½çñþÎe¾ïy¿×_ýl÷vß×õlï~Þïvo÷u_÷6¯çx×|Ýû|ÍÏ>›|~×gŸÏe~Îyœ¿s™ßç^çm¾y¾Þ{ûæoÞžwïçÝßýçñyß{_çu>—õ½ï_¹iæw~çw¾×y}ïç]çu^×w;Ÿw=¯{~×w]×{]çM¹Œëû¾}çò|ßwÛ7ßû·=ßwmûu>÷ömß}>×¹<ß¼?Û·]ãwíë}_ßöŽßþ}Û{~ûùî禽ŸóÛŸóûž}ýîg]ïs¹ço»¿ù{¿ë<ŸûÛžûÛ¿wÜÏeÿ6é>~×;Îç²ã7ßßû\ãº]Ïvëõžã¹<û¶mãwßï³óülï¸ ÷oŸoÜÇñïqÇmŸqܾñ9Çs¿ç|çuÿ5ß3ŸÏ¸=çxŽç¸ïß³Žï³Þó=žÛ:?ïx~ç<î믺æó¹Îm½®çŸy¯wÛÇýÙ¿íÙÇ}?¯qü¾sûîñ[ç÷\ß÷¹ÎóÙ¯s?Ï÷;ÇñŸq½¯ýÜÏe<Ÿó¼çuÛžó|Ÿóüžõ½îm{Ösžåú¬çv_Ûù¾Ï»¯ë6Îßz®Ûw=û÷¼çõÎßsŸ÷7žûv­ß;î×5ïû»û·ï÷z¿÷¹Ý÷9^÷y?÷xí÷ý=ó÷Üç{Ýç}îû9?û:ÞÏ~žë~íÏõ^ϵ>ߺ®×·n×·®×÷˵ÝÏ7®×µ¿Ï9ŸÏúÍû¹]ëù®ÏºÞßµ®ëú®Û}=ïºïïýnïwíû»Û3¯÷¸­ß3ÏÛyÎï¸=ß·Î×3¯÷ö|Û9ßϼžç2~׸®ëûÜë6oë»Ýëuïóõ>×:¯×ýîëº~çº^ï¾?Û{®ã7϶]×þlï;>ß»¾û³mâw[¿÷ßíÇí¼¿q Ç{û¼_×8_ã:¾×;?ûøŽ×¼íó¹?û>Ÿ÷øÍëx®ûü¬ã½ßó}îϽ­Ï=_×·?ëõìÛ~íÛ¾}×·î×ó^Û÷^û¶íÛ½£÷ù]Ÿû¹çy}îíÞdûûìóöϾ=Ãï¶mó<Ÿï÷íï³]ó¼ïó~Íß½Íç³~ë7îϾ¾Ï»iÞëÝ×ó;¿w~Îï»®÷9¿ùݯçü¾çüÞo{æ÷|öó~÷s¼Ïû\Ÿ{=ß{}îóžÏå¹Ï휟û]÷뽿q}ßýYÇoÇížçg×ó|Öq<—û¼Ÿk=÷õ[×u}®÷¹Þí|®w?ŸwÜžw[ïñYÏ÷]çsŸyŸo½öq“ŸßµŽãýÌë}=÷~}ÛsmϽ_ëú]÷{oêçÞ¿m?¿q¾öñÛ¾k›Ï}û¾óÜ·ñ~·ù·y}Æs»¶ëÚöw÷ûzÞûÚÖm_Ÿñ=÷k¾¿ù·wÿ¾ýyçwûÎùü¾ç|çõþÖoü¾õ9ïñY×ý9¯ùúæç\ŸsŸ÷;Ÿs}ÎõÚŸûW?÷¹=ï6îë9®Ï:ïÏ|ÎóvžÛûŽïü®ó8¿ûsÎãsnóû¬Ûù=÷øÛþ¬÷µ®û÷}ß»ó¶ÎÛ6ž×ó¾óù|Ûz}Ï÷íûüŒÛü]×3~û3Îã~Îë¹ëú|ßûžß¸¯ëóîçúnÛþÍÏ{ϺÝ÷ºÝßú¾÷÷m×ó}×»îû·>ßûíïøŽß÷¼Ï÷ÎãõÎûü|óþÎû¹¿÷y¿»’âö&ÃX^“üØžÓ¤F6BZ4©¬¯óµ¬1£Â„:jLDJ{¯ª®¶³HÆ^]=†¤×…½ŽÇSÛH‡í8Þ<ýó$½mi–MtÜ„Xbˆ -Á5\äX!QÒ’ý9Þ–""¿åDRɯ é“"Šáôëu2*Ñi†Õm A@@š÷õü_5%ôA±l‚3§•œïãD,’«?Õ5«i!¹½ÄŠÐȤÔ4É4íï9›EYP+Ô|³ÎéeOD ©¤ïe´T3V©Ø›xx%|ð!VBéêʺmÐ.âã+{ö¬*~¦dgó¼±H„Ÿ¨‡uoñWWûúé{žŒ•%&¦XvÑòªžCü\¥bá6©uûµG2ÄÓ—â8?O: ]ŽÛOtô¾¿º¦Íäh,*Š b[ª‚R´®³(â%‰âÕbabâ³kŸ¯`R¨J¯½öU¤žº9¡×#…ŒŒž÷Óuå¼tãÄ §ÜpÜ“Á0'ͳ£‘›MºáÜÞ—jÙ‘=á÷KÏWúŽÚw022LRVÈ\6TH\L –SH•Ó8P°¡,hÁ80#‹µt[•Ó#ùíͲ¿¶ãXn£EÑõ¼÷ûdð«Ã/»19~Á/_–*×õ,»’Jj[ä¶,Û6ů‹žGm+âêmÿšQCà -.ÞCrÕ‘/œÉiÔˆRTþÀŸMeQd»NíºöûNŽ{EuÓ#ýžƒ¡Ým´§Í¢'‡ß,Šr(º]‡›ç+ÇU<üIŽïßkZ»iïçñç¹¢iOª¦Þ¶@GèÁ rÔ¬@… -C…0!4«PL¯oR´GÒý¾“M¿¼Xzº†âØ.Ï÷ùTÕO'Kùû€p¡¢†„„?Ï™Óh‰-t¼˜äP™9D,ëvÞû}-NH^}ÿYYÕ,³hf×¾YΟG‚€¼ß'ÃrÉ>ÿ‚(ø%Ñõ–È¥ß(6yRvÝÒmì°ƒF‹ùû+ŸKïZzÙ¿]uEå8H†Y7m‚eØûîÒ¬Gò?SQšú晓&¹áä(ª“ä(MOò¿"ù­ºiÚ$E´üƒ‹.-èUYÄL;Ì´(¡C3Xac/h`È´Ì”ÄF³¬§&È]aó,«éªÎ`¨r[Ùé´ŸƒàÊmí¦éàGBÍѪ†\÷dã'\oE1OU˜ÿáSÕS–Ÿó¤Ç°.ÇW~ï #†æ”÷£Ø]å>ÈT ˆG‘Rƒbö†LŒ‹}Ðöc¦$•½C±å6´ÃA>Tn[9Ží:÷óè/ÜÃÃ_Ec;>ƒ$äÅïwZ–ü; V‰‘ª‹V äâWeË)zÞIr'IØórTᶠè#ëuš‚ ¥¶• P0ÞG9›¯AâRÑÅòY/GuÛB-.3!$°÷¡ úç‰ä6Mjóû1!ÈŽ»^Gƒß -”è%äá¶~’<:žÞÔ…Ë/Nb+JDDrœªg(#.\nÙ1‰G—ñ6ʧG½.o’=«¾aø¿¯ë}%‡órÜ}öHšàWFIÊ®í’Ü!ãR£dU¿üZæ蘛$-Š ו~Ú<{55ñð*ZžE°ìlÊÎ&½-·â¹Õ¶—ë¬iüŸÓûò§‰—å,†sø©Œü!`´X庌ǕˆBÆkúMüþ.Koójœ}E=©ºzß—‘¨Ô¾|iÎß{‚ïçè¹ußÿyŽLÓÅÏ[´L0¥d§]¼P(¡n]^ªX¬ˆQ©h^¬2)1ZBPX¡ÔGWyx}muUõú‹‰Äšå\ ㎻IÑ&Ç»$éqL7­è7öM3E“Ûšb7Í7y5õ´ð,Ž}Y®|>!»ŽªgMû°»Ç®³/úWuœêc´^R!–SHÖã)š~C‘OWÊê"Y‡bËmí¦±Û6n6#‡óm6¤¦Ý#YjÝM·ì:5˨yÆÑ3$Ã1ªÕ¿²§xMaòQz”O>âç®ÜÞÏ“?OR<Ãá8#xü°F–Ó)¸ýÓ3ö¾•ënU»/ípBìÙå³³`¶?ÉôfÐ;;œßmÛP7´Ã™ÑJÅ`¡Rô{t–ŸR”?ÎìlJ´Û€tü节|¨ävÇJ̈•&r°x3^Fž8üd1$…v5=ÉïÌŠ4–bUâK2ípÔMÓÍòw_÷ûÜn¡å'Ò ÊôR‘ôz^ŽŸ¶]b‡#}ÿÂc"b¤hBˆ6ZLdR£hEÏpøÚÕä÷{ue¹-'EVì¢èx¬–ý’t;“_÷°ÚyZ Wvìƒ -2.(P¦#!-Z,}W´ëà -V -E×!v%½-lÇI|}„ÇíQÌÉ‘Ô¶ô÷½œw(=Mü<峓ØTÕ8ææä¦C xá‘B’â$ŠÙ°ˆ={õDá4&z áªë&°4D>àX€5Šx1ã²JÝèÚ·® -‘'$©ZvÕ0Š¿›èv(5mR”EÐõ¸?zaøóD,j„Ì -‘ •iE¿=j‡b¯²¯<×ËÒOÍ«‚ä7öë/N`>Ô´ðˆY)ɲ¬çYŒÈd ÿÕç1ÞVÑð¯ž2Ø­ÜVr6öŠôýŠå„Ü€ Z§G[çP¼E’à ëqìQ´¢(˜ ÑomÛ㘪á,JË„ö©PŠŽÝ¯ó°kŠéôY_—é_S| ÿ4­*.†xÖøYµíĪ>Âͯž²[fùsÖÜÚ¢¸éð¡¹Ís†¥ÚÑ3åp^NÛÉQöºüb»½òÙëÏ+µi.%)ÿî¢ßÖÜŽØðËȳr¹P1‘Ñ’’£æ‡UCzügSÝ}Ô¼E»/ ~?Ë’³½.Fϱº.©k(EiñãO´¢):¶Ã®†ê@|(A °ÄŽ(P¢[ÞI‘õ¶>=Q´L£=K-ûIQùãXS‡ß~’(!¾¤šÉ0ä¦=`H2 Ä ØACFHËD·}5ÃÆç#ÀÀx˜!C•ç/'Ñ’0&/¤5Ã+·í¦j[[]n‹ÕsÉ~—ìxŠŸ·hyÕ:-§¡H¡Hü¿Ã[ôBé˜"Úc°À0‘É(‰‘ü~ŒÏuĬðP#ƒB¦ªÁbƒedE‰lD×$>ùý £è÷$Ä¿pÚ䪫ù%½êIvE|þ³ªl·¡‡…Ï.\)Üf½,hEoÔÌQô4Ë"¼ÞvÛˆÿ€"Å#.#R´ ÑBæ%ÂS’GŠ˜Dj÷QÄP8Td0BX0{ÖÇ0å´³QQ•fX/kð+©è)E[­ÛjÝRª‚ÔÕ&GOëþ¯üQY “ಉ^›ÜÕ³2ß^Ù²nŽ&¾íÒWµÌ«ç~´ø¹]×BŤÅ: û½Å°Õ4¶ÓY;ZÂñM4$ÏûÒ4©« -ÔˆE*Äõ‰Ñ®»iÚN€N‰¶UR©™,É _Ž(R%ü†ÐÓÄßA(J -ê8î:vëøçø2ò˜QIâÆŠ ,ñÃ6Zô*ŠŸ%èueQŒ?/¥ÏUz|éWéoZüÀ§º^Ù¸Ûyo§CRQÜ’ì·ÊσV´Õ88^L0ÀD:bPbZ¤P¾âÉYô›ªaý~ÒTÕ´&%)¤S~žsøÝá7Òã)X&(²>5añ[Q•šà¡Æ L¥ÂeÔ¼šd_Ñÿee½ŽÄ(HBd=…ËÔ"òˆô7ÉM=©YâEeðC;œ›Q<{ˆUï1ôOÒOÑuÓdЛIL.üz\ÈMY<¶\° ÀK<`.\)ÞUP$ -0A™‘RýöÀBfCð@6RˆÀD|ý…×;Z¶öZÆ…:ÕrÈe]F* js*ífyv@ÌÎF$¿'Y¥fìŽQD½ŠèO }bN¤Õ,¯–"òØ8‘±x©^5¼"ê_N íú.ZÒjab2Šå jTzAYS™â¶&C-oõ„}ü“\Û个å“]ÿäÜuöçåbx“bŽš§ÛÎÓõõºÖüºˆ<8NDfL? ØiÆkeËŸW­ a±~{\õ.E{]¯ÓY–ý¾^]ñÒœ¿ï?ÑÒûŠØV7O]U­A6¼yŽØt¤ž%ÕôÇoÅ9sÓ,ɳ¯®õ8âãˆÂ$ò¡…ä5Çú(º§n ~&ž~Æ‰É ¢’ã,$ -°‘Â2dx°ÈfŒ¬P@ü~–¡×íÙö ÇÝ‹àsÈï@y ‘‚eÅHH¾®*(P -YÉ ÒUµâÉc}~ªeÓüšä¶Û2+Ôªžýs­æJveP?‘RB`@ŸuÓð2„IP@þ‡M}õô¤§«ž_F¢¾§S3TÇLàˆÁ†EF‰ ë„âc{ºe” ·8¡öÜ·2ªͪ¤2ú”f˜.ÉvÛl1­ë Ž/èìùH¯»îZ7Í=i’4;(R2`¤€©ˆX–„·_N¿É“xnO«<'?£äåò¤`¤¢õzÒÓ.ÉÔó<çÄï#Ÿß£¦/ýná¶jžK­K!¹ál:è`“#ëÆ]ÏûÕô»%v-µnÚÑâÔÏó&Ë ·”L.©êý}{~Êòƒž#õ”e ‚%øéùT ·hå³£h÷¤ô›”FN;ý>’<£fšäpÒMË˲äº)º¶ÉÒÔ6\UY¤¬Ä|KÇcº=bU½$áÏó°)ìŽGtÚUÃ%6mÉ/kŽ[³¬r]úûTM‹ÁÕ:$góQÓ—‘¨%ôݳˆ¯ë§É~Ëm%û Ãå—íÎ9ɤB/ýöUµí¼µëäQô¬h -–©…¬%Âß°{NÍ°KßÖ…»ŽC•m£ˆH8YÆàW{!?–ªYö¨¨–(ÙÅË‘'E§Å£›ì³Khoù«»¦Ç°‡™–$Š×ËÄ££b7¦Û­›þY½Zü<éëûùø*ÖI‘þ¼×ëÜ®ÓIq7E’‹ÆòÙÄÇ[õì§gɧùT]ϬR,»FÁ°hUE«ê£%(%I¬ªŸ)©i5)šxö~_¹íiEO¬ZjÙþ4a¯ÛO“C™MÇ„~– û¨‰›¥mšýŠÚ@¡ò -T@öBïZÂ×6HT1DV,b(/S *t¢ÝÕ #±G,r!kýð¢bÒó#uåMÓíº¤uÛ5PZ@-Ürœÿ†X>?ËÇ#Ûo›~\Gô‚E Øž‹^uU»-#þ$¯"ÝQ²ý¶×G?!‘게áò^ŽzIâe¹zŸ²ÃPCsÒ#I]M*;rç99ªšæ8ºs RÐð& wœËq3(æåÙ£i-Ž8ºž7r:èdE Ýî‹ÅCSüÂnzõ¶w¶ðš‡KÉ Y*–Ë:ùÝ 'Zј(¦$µ,Ééœ׳®M–/×±šöv\ž-b-%#öyŠfˆ,/b¬=“ØÕ&Å8üVN»Ëqe×'z.ùü#ûþ›æ¹97 æÄÜ€ŒâwOÛ³ÃÕ¡˜Év=´®5µC1¾ºÂpÛe×°Z†ÁmI5ùRT»ŽýÀßï[;äº*Ú.Á°Èmcð#9‘³A·íòxIîªÙ·ê*¿Y7>‚á~=Gsü³*ì¦S”@(>žš]Ñ»ºözU¿¢7-É,ˆ~ww]ÙthEAé9Z×Ò —ÞÉUÓrÒ¬E1½_™e’Š‚N’=yôþM@;TŒ¤¨jyEÄ·x™V¨@.ž6»sر^‡‡/?¸ˆ¡£©ÊA7òÖ¡9Mæ6_]qt9š6xóäM3åtÀSÓè0„A½Ó,ßbèIQ×¾Ó#©n\¹á ­ätÀ gí¼þ4i0üW¶E×­úvñ}l×_5-2Ïúó6¤ö]Å2»iñ÷‰^÷gW¾ý’ÄC°A» J&½^ZÏôέ×$ME,kâÛu&×åËöºtãnótC±ýBžmïÒ7 øY¢üþ>Š>)zJòݸTÛ\¯#Án ëÕ«ïnš¥–]ͳ'Uû4Gqýº“Ób>¿B*…ÔUeÏ_DžØ=‹Þ6GѵëFG.Ë߃`YÔ¶#wý¢g”ë¦ÞwIJ¶yÊ%)cæ…G 0yÊ¢¸Ÿ§Èm{5åÕô.I×Û\9£†ÆÙgY_jfK|äªöY¢Ûvv81ýVÑuž U©,ºá¸Û†“ãºm¬ÖáIðsŽª¸5éñ‘>OÉ°Ê–EòÛ’"É0‘¥€<2Þnѯ©MãÏ;9-dà »ÆOÓÜlX³|²ã!µ«eQëÒ¤Iv´SÛòm9ÏÝ:M«@•JrÜ䲿zŠZÖå6ËÖh‰Y=ñ;²n¢,|?ÅtÉuCí~€ôgzãåT秦Ý!XjWҪʔ@5F^5¬T¿®¼YŽèvJŸŸ^öÃ\yRdÉï§}ËÎö¿qÍ -ÆŸëÙÑHŽË·(Ž`6æïÎÉñåïU|>´ª9ê&ézݸá¬]—n[ºm>iªð,]Ž[;œr³?6êæù©kjœ©i»Š¢˜D$ÿWÓÙÛÜ“r@ø³ÜÏö>ÿ4Imë—äg=e‰ãªiäÇ ; iQÔO4Ô¶½Êªhn¹yàˆ÷ñÑ‚ ž¦,·Ýá§zYÏI’Ü6¦ç!8ž“d¹i¡¸•ñ{hekQ¼I’GQ_U÷4}C°ý¾¶ë\t½²i5añS½Î?Ü>tsü¤§n’¦·ýÕÔGÑS Ÿh™u:Dm»b -æXÔ®ûi’7r›¸i£Ö99œ“~Ññ’ˆԔ/Í{,]ï£Eò6Wq£½^¸ -Á˜J¯çÏ4Á¶ãÈ HŸª)%UÙáHM©em„ìXQ É÷›$׎ëN|Ü&jbZѪ«v]Êgç‘"¢‚ub­xô¯Åñíºü$ïRüYõ…ß0:~É,ªMQmA6¾³(YyE3ÍuWº'¶ï1(“k×ÏÓQ´äã‡à˜&ÉÜ$or„¿þ¾>]ËŽ¦épâÔ¶º¢Ú&n6ï÷åªë·ô§­ñ•·o%2íˆ1Ã$¥òÛ–GÏ[{s¬Aþ¼ ÕÍ«ÇÒ“ªô²ºy½îõ¼[yµ­Õ¶iο$:r Éf'’îܸ¹4i’\·ÍÔ²,ž=»ž4 ¹/>šã¦ãu8~M‡n]OS“‹Þ7UÛ©úÞU– ÃVUÏ«ËòAX ý×ÝÙµWUÝ4ñ²$;äCݶ»Ââ—«§é®w×¥SÕfݶ4Û²DáøJ·Q6,zÙ7 a²¼SÖ6SºÝQ<;ŽOU’óeù9M>5UÐkÁ¯í8ÐëŽàYU×0}µïm¦êÆ•ZçÛl¾Íæ6ËüLU®ÃKògÙUWôœ’cR Ï£xŸ#rÌXQ±Nój[™<Ù,5­Ù|:|¼ðzä÷Üh‹bˆïaí~êÞI´.¯4‹Ê·¬«B'gDú˜þüÇY9O]Y?ꚥ&Ü®3áõ&!¬»¦Ér Ç]yzyL¸í!Çdã9ZV‚¨‘i"3Í5ê¶aŸÿÛq‰ÊæéᎳl;'Å–ë°\çÃ:uÿºyJôœ³Œ°´ˆ¤´H*ÑݯüQÛ(‰êr‘N ’iÿœìܳ¾xy¨r¸á€ •óFŽÆm8l‰®FªIŒH Ì*%{ÅTB% <Š@‚‰”¨ÅúM*(WŠÆG/Ì—eìy¦¶WnÊyl÷í'Jr]?–óX^…F²‘”ßäJÉPhf\ðûhçK%Q«… - Ù¾I¾Y·>‹!òAŠÝ‚a^UïKõ–û*&“ü’§÷À°¨¼X«‘¨øý×oÿ³ÿ{<ßëê‰ãUßêú AühQ¬É± ¿ôëTð“×U$Õ¨ Éq£ÆI -‹)ÅúA§×­SÔÍk=—eO-“ò›>U˜øT# -ÐÄH,ñÃEààÁ#E -–Ó.Rí üdQ3;²y?ðg[MãT]Ád9Œ8–à0˜¡ XƒŽ…(˜€9˜@J -dÀÆHÌÀ°i…ŒzÝÆyëæjš«iï¾½ûª`(¯+ŒÅ 1‘y£FØ€ -VÐ2!HXB`0ƒÜ€&pA Š(@PÔЉXyœ»"Ù~ŸÊq¬ÇágÙ³¬<Ž®OÏ22ò"Æ "@&80‚´@( Á j0„ T ZˆB¨P á 0Á‹?°È¸(1q q¹VDdHøà4pxfûNSEýÖMñ»ÈïY^VvñCT`‚'dá -N ¦ …'Ä`?`Â0¢‰Ü¢5J©ÒEãÅ jè¸a;VÝ9ecòŒÇ’…Û( ê¶KÏ‹‹ÊAì@€% IÑ€ð°èÁÃIÌŒ -1X¼AR’Bò*i‰Z"T£í -Š«²HŸé{žpûÖ:Obµp1D%–8è±/-` ¸¼ ¨¡9aYA™X²V¬Ä%"²{®–ÈÇ3cE !ˆ b,@A¨0$0Á IhBº†-¨ jB°¼ 4xÁ dЂ4€>ðÐÃKÉÉ­ºê'Χ*‹ä-’«¦­pz*’¢Ç2#8 @Px`„"|a b ÃÌ@+H Z¸‚Ê †+pA ?(‚”Є$Üà6hÀÐEëRõ~j×YdÉTÓ!¦’8‚ÈšÀ„&XÁ -GxB¶/|a bˆÂ¨' Á gÃÌ †%8! .ˆA -J°‚T˜ƒF‰Šã‚™fZ7O:_„?GÏ$"¨€jpƒh¡ Yè‚Æ€" ¡ RhBÄÀ…5° H`‚X ƒ¤À+ -N@ h 1-01)*0Ðò´t\e×?»º<;ðè‘â%F¶zyj|t×'Ü–~+fì`<д`5 Á -ZФÐ*L¡ g0C¦p…*è ?˜tð‚äˆ#Pã‚ .R´Ä´H$êtÂRÁ>¡ŽÓ”ˆäP1sñ¼ 0p  „2”a >h€ƒáE0ŽàÀ€Ѐ0q0j´R±÷õ—æ[ø.MOš’„§q©T ”L  €Â˜6¤! -W¨Â´p…5¬á `Ã| Ax”0ƒÈ€€À`làX±ÒÒÂr…dÚ>OÕqäaxäTJb Xà`A Y€ƒâ†1„¡ Q`¶p…+h¡ -8à ‚@„L -NxB’`‚ˆÀh¢h¢Æ %¨KÏEn››¥ ‚³(²‡_ ¥ƒ´@ -K8¼ …7¸¡ b()P -M¨‚ ð' 4p -L d€M0@'^ÉvŠ*U"‚ A< …,Tá pxþ(LA -Jh`0œ8Á -D ° Ø€J 1CFŒ*T¬P¡‚Ä+ù ›mK·-ò°X!É@„$¡ ]ÈBÐ@†9ÌAdØ „!6XB„ -T¡BèA V€ €X€x!L -× …òw˜Š…JÉ Kubà*€ ƒ¤! i„pÀÀ -Sh‚| ˜À0ˆ -~Ѓè5¨@*Fу¤ÑÍ¿öŸ/OÏY¶iõPÃÅBÐäÀ\èBÒ†5P -Tx‚œ…-`A -Q€ f@ \@CÄ9vˆ‘‚‹ÌÄçq:¬Ê®a˜Èr¼ ¡ãF6P4±@ì(ÀAô˜1CÄdÅðçuóóìOÓôº&º¦Ë“í<ÚûjP(–ÏG¤ª®¦©Z'…Å2p…+Pa bÄà2„¡ 2ˆ - „G ÑC=t¸¼´ì@ã…ŒHˆˆH´âyÒ¨eß) ¶çž÷Å‘&É“-  -H€L`‚á6ÀЄh–¸€°à ¨ H "~Ø1’™¤F+H`*£ÐGUé0ÄËò4Ë¢žÅð.ÉÝ,OõìòrÕ@ÃDAø 6¨ 0!ô °@00$xÈAc¦$däÅ’¡H¯ÐÇoY•]Çð›Eצ˜ŽA/ËÜ_ÿn0!(Q$`3h И0b0Xd©‰–šA Q¡bši÷û2›;åx‘"2Twòé_J ’‡Ñ²‚ö8ºŸ÷YU>E[¯;5ÍìtDîšêI|œ6ÁTä^¤¾G  nÄàY57Å“¼ªˆvWnï©I`MŽ{š‚\ØÓÆ4‰’ ö¼’˲a•nØ^I9E;ý2ý>¬zX“«±\Vé3¬QJ ¤ŸfI~UH¡–SiG’Ó9œ: EªŠòáEü|wÏ—‰—Ñâ…Æ6òòxõ磽öi·Ò=¶L·l(ŸgœÈ\N"ÏšÂcjºEñ*ÛmO¼~ìÕÅä$##r*ñÛÕÝR”¿­Ñí'®R¯Apê2Úm”´fV§º ¸ýÄpúy¯ßs‚JímK£#J˃#}H÷ ªÛ“WiÇ‹D «¤òà©þŽ…ü—‡/ÝöÞ¶³Yº¡'zÝ'¦ë%!O ‡Y"wÙ´^Ž~z²î9„ÏGñ‹£éÙe‡ÓIÓäÂ'>Åp~’¸9ŽjùdBí9,~¤W­SÅh™NvšEøYGÉ5}víW/ËÝ4U±¼òŒàuÈ=“Zõý6%zØ0¢Gò÷.Lb,DZ›V“*­@•d@ž˜èäß'Šr ˜"ä€$™~;¯?Ï¿‡å9Ÿ²ì‚› ®šMü° IŠ=š(.¹-©eYöœR„øܺÜÖÚuÕ£ŒF1) -h/ÁmŽš0)ÊäØ~^Š,^)!P¬ AãbãDvâç*xEÁë §EoË—¦ -†U<ºÊ'Wõ*:ÎO³.GïQU¼$WsÌcåÄ…¬ÕòUq[rWSܦì…ô Åm}’¡øMÙtÌ)Ä¢eéqлzÔSÇJÉ‹×Ϧ¡Ve)…ZÈX*Z¨“¾£¦Øéœ[·ªë=cðÓOEǦN)…f„¼LòÛ¯çÊŽa9=âç©xE¹g‹H'ùè¬ýþaWCY S/l‚ç~Zê¦È£¤ivW·Œc¥¤‡(£‘0* -°ñ‚G‹‰’ jXZˆ¬Fsü†¡žš&øÕÇд¢5%‘Kè“‚ÛJzJQ7Å×é3JR,> FMf´ØÑbbDÍË –‰EÇ:J¤N+üµ¨L§S~}EëÔã%åÆŠÉÊiäq×Ïìæ qâŒPˆä÷c”¸^J¾H_|ò“Òȇ_R=ÿm{bˆMM+êâë1¥Ÿ„§O<:heW®û¸íÈŽ›ð¸ç$õÛóVÇ•,Nršá>—â¶&õÛN­s¢ã³?NÄÝ6‚Ï0ùõ!oŽIÖóPãbb:գČ vÓ®›>Å-o’1žÏ@²uø[t DŠ–(#( ^eô¹m z%{†Y™NóËš_^ÑóÑïCK‰.hLþÏGMm¤œ „B+Ù­AfP£$1P´È¬N>zž”JÀ¡c…ß#7uÍmËÏ£â‹H Ø Æä‘G/6 -%GKïùst!}b ŒÄ°R4¨Q5..`«Üe;ÓmÔüŽÚ4f³-ûíU4Ô®*?Ë<_œÄTŒÀ>nj¢Ý‘½V¹êʇgáR¹ôOË“sêyHÍaÍ0‘‘xz÷ëR«Åöºš Ùmõ9Mlec%$JÌÅ:ÍïLj¤£Åd4»ÿ‹ª”|Pn"êI@>)†a0L5 ÃÓÛîgéIMz†ìv Öv¼HÀŽ#$¾š+'¬Ï?­ Óa&-$­$.™ªo×íºx•dF> -Ÿô:,§W5¬²áè(^Z/~›ü= j4ÒÛ)Z#¬‰¨ù+¿Õ½XNËfö²'{«ß ×åØ‚ìã9Ͳ'=oñ Ùi!©«Q O§j8?M-Ãp7EÛ }7=Ñ0̇ÿO“C1- 0"ˆQ»Æ¤J>¨p)@ 7N^-#þEÌ»åÏû6Ä,¨“ §m ˆÐ8‰Õ@‰Ý8‘ðöj~ùs ñq!h\BìY”šž“T½k —M<ö Õ ”’’,“ü •‘ˆ…šQ‘Höº%Ä—øúŽš?«~T”4¿)Fb(^-Ž÷êIŠÝNË|=†UÚÓRòÿ/`¨O²Û.¡>5‚Ù²¨UYR©dÄɯJˆ—!C½„öOÞš]Q›Ž^Ô.Ã&!Iä°ºï™ÔèLeÄ -%\Ôüs’£E„¦eJÙ4ŠV -ô²µè¡(}„HiÕú:6±©oŽ4è¡ì×ð¡&ÖñØ6P\>° Ð„úRdx!3ãRÙæH#kˆþ«ŽXõ®ª¸=½ëŠŽÿM;›¯Düiâeø¿ê+—_¸¼ºã‘?O)Jô[ó2Á i™ˆø$+'°Ø¾ï(ZŠåOÿÂkÝMD¿HjÕ“¾–A¢²òZ‚jQb _oUØçŽÑ2rÆ„†Jˆ ‘T‹éÿÝ5ôª%þ—âž’$ÿîbÄUóJ¹QÁ⥠,T;½âí™ØÊ4Ã)¤ž‰,| a‰òrá*¡8‰`}λëÞ¦/ØÉwŠW²Ó3jf¬” œBÿ ·â‡§æˆÇOÅoI>¯ø÷ -H/Éíߦ& OŒ÷ýôTÁ:µh™T>üK~I,J’Ù—i&䥪é ZÔ$AãÅ -W -fÃ*¹Ùç”Ìæ制 yˆ˜‘¢(Žš †,¥šÝ;üêУy¡zÈ´œÞö¤¿‘ I)"¦dlj+G ëF‰Ë»)+ J „¨eYB» Ö(‹4c­äwÔª: -!CE„°ƒ 4À2ßWa"BÇ‹ (RZÀRµŒEÌ —ǬN"?_âÑO<{ˆŸ£rz_O•§†eJÉ« V]zÝÊé–o%ÆÍJ ËÄòñ 0qD -ëĪ.™•QrÄœÄP‘ùú‰´£¦nŠ*N"Y {Ên5ÍÆü{4»!½ÝƒEV’Û‘?DZ"â2úcù²Ó)!þµÛW•‰½HL%™•©Ÿ]°ú’ÙX ‡äõ¨M×sšÛ0-, >ˆÐHC¤Sú_H"©—©4»;TÌ ¡#‡Œ¯k ¼x¼´YÕ°L-`*«IŸ“Þ5E¡ÄŽDð‰, à!ã2H¼hq@4|¨A±Âm,%> A nÄÀ̼N6VBZP?É'W õ#y{Úë×!°ÄKðè1Òã+¡Ý…¬ÄƒE†Bj!;ÕÄR%¢FŠð°Œóí—ÓGŪ¦rñZ©ôû ;.ËpI¡!‰µ8 q!âŠQ‘Dv £#Ë×i”˜ŒÖ5…Ƀc$Õ£E¤…l¥êaù}Ÿf~’VÕO%·B @ñ*©h…R¸H+:éù(رVÓ©VEñà-^$2Ô©UClª£¤6\XÀFÀ¨J"ü Cêc¹ÓmYNÓ¬B$ŸÝ“š2$Ï+\fL ˜®Òײ½î[õуGŽ+J<ü)±R`6X¦[­ç¨EO1«Š€€450ª“ D~ÀÑ#¥E,5ó:™@({æÁÅŠT¬¨¡2"zô@ã2s¥Pd»Ý³i]†&!?EôAñ(R"”H„·Iúz‡ŠH“R¨TÇ@€0DDRp+»á0$EĘñaÅËKjTúôê9rÕ–ÿcz[Ïâ¿yœ¬€H¡²ÂeÊQÂòaEVŠ×.(h‚ $!#ž|Ä¿YHŸ”Hæç!Ùå[Õ†J -¨”’&µL½«ë–[8MŠ[WN›|zT¨‰5LÐHá‚ô¸o«ˆz’?Õ/ ™—V¨Ð‘“0Pƒ¦G‹H -Õ(壟xòN«êx‡Ì‹‹“”¤ß;ĘÀ=€Aã"$UC¹y¹pZ…ˆ*ÐÀŒ(0%j¨à!sÂvr ù2[Ž¿mÄä—à 8>¤|t!R¨A“’ÅõCLÉ-\r¼˜Œà5!€Àšìõ ¢f%ˆ”#bTŒˆQ!ù{Z® iÕ `q¢B"ò[P ‹äò:ÉF¾Jésâó õ¬1’²AÂb;¡@…R<» ¯ûvõ°©~5ù­”>)\$˜ÑžåAákÐI²˜B*D`¨ÛŽåò éWí)?^ÂÏ(WÍÉÐ6G™ ¦¥B ù(R!.Q‹•È‡–"dLdD<Ìil·­æw¥×Ivû-;Àð¨YÑ"%Eˆkµãuj¾¨J¨ñ‚…‹5JMY»˜@+b§-2"X¸èx9aÝ3LjÄ,Q#Â:ù4.Ó •ÔHæÑg^¦“-¿°J+H\&ÞŠU–’_C½ D-;F±¹œB#üEFòÑCoËÒo˜ÔH…lµb -­î9åßeø,Ëi²• -écÚ]P ’?gA‰Jq[rWÿ<[ô¼ƒÉËŨùà0#OŠ»€öRÉ(!@"!h^|I¡Y‰XÀP3FX(V$QÜîhÉŠ•))"8Í‚5zSÉ(í€9‘aKá*©êØ…Ó>¨€9†‹%±X*B±€vWNËþöó3HZ4BX3¦_壟øxHN³leÃ)¤Ïé†?oºbE -ÂÅäÔŸ„ú‘~¢[O.ãm™×( -l$´Ã Y¹IÁœ<(Pž”³a=U<=‚ÁüœÇ‰Š 1:XBTþFÌD‹—*#§N"Ç -30/N`C¬XáSRãFƒ¤Õ†" }D¯Z;±Àб‚’D ˜ T¨ÐP‘í@³âC -–`N^H ?@°!Ã…Èj‡Š¬†l–Zñ­Z¦Á®§C´PRK™Q/£5‚ñà/¾ž#…DÆ믷­ŒzœÀ0ªÓˆ=U~}E«4ƒ¡Œ|ÙÏ×£Xá¨MoÑ¥¤+fMvºõ®ª6]¡ C’’×$<Þ (€8\±‚¥ˆ,5®Ó(vY¯#É0ÌÓÓfùYK%®‘Gk4ÃdSòU~þ»Ÿõ„ñ6Œ”äxá‚ÄuƒE†ƒEd…ë„òÉKðjš[œ C,ʣŤÆe’AÒÚaE„d§U°º’ÛӻƤF,¼Žyv0+DÈ "†Œ5*+d§V —Ú4%Ôÿð"Š)GÊË…,墄eCE–Âë§5­?K_UóÓdÕ1 ×È^£8L|[¦Ë16Áè+YHßÙiƒúS~~5ÃýIΧz×¥ŸFÈÊ… å2ú¨|ö‘œÑkX ¿ì˜ä®:TJbˆ¸V¼L+`¦—ÒGuϘ½Ór•Û£¸%Á«ŒXŠ‹„òÑCtÛe˦˜õ¬¦M~²Ý~ÙòÌJ$ãÄ%“©|òÿNñà/§j¯IHŸ*#/"Fˆi†ˆÉ ŠFj%ä‹^Ö ½<-gV"~6ñÌ4§>F”Ï°D#?ÿÚïÑ›šæôʼnË(RBý‹V‹Š„¿Cz<ô²Ÿ¹iŠh/‚EKü(²€©ˆPÃBúS/šò¹k”°zh áAÒ’![¹òZ½!`¤X"²še̾€t®Ò •Ø7R$ GŒ‘ªßh&%"éíXNÃr:¤¿]xÜ‚­x>Ä¿g„˜dÀL,~Þr×9~Lð_I33(!Ô'MIíLI1fz Ä^Dý‰‡Ö³?ÇÑç…Û«…¹giS³KbÓÓ»Êø7C‘þ¢Öb…èuŠÑëÕ=‡àTeä³nY³%?¯â¥záZ‘ÜsÉž‹V¤žjþ©¹šeV]ס({à«–U>|‰~б퀀ÞÇFÕ4Ÿoð{;/A Ó F!ú­›%Üqr×ñ¢xâë?z‚Ðõ¶)žä®Yn;JѼåÐCa -ð7%Iò˜å×GòFÔ«â5¦×&w=µiÊG÷ÑR/E˜£ðµIo»ìĦ,·¥b7fôƒÐrî:=ùR2”š$7¢ß"¸}ƒß̉”5š)NxüOQþ4[õ<Ò믯KsOÑ–«ðvýºf×ôª2ØíåXâég œè$)ZÏQߢeRñÜ%xŒrÑO‹~àÕ…ô«ü~(5Qo ZWÞ4óð«Cî>ÍÛ,Mñ+jQPZ–Tsd~q°L9BV3&Žl×é65Zà`a‘éuIO“ðu*naµ²ß*[¹ªŠVi‡É‹JìE«Òa¸,zÕ^%ƒ€As22Éò<ÇIL†ˆªˆ.IÀ)¢f¥ÆHÊu¿°>bF — ¦ZÑB½€­T°L(ïºçÜ,ýÉk̆TÔô²$øœBäÃ8…Jö{/Gþ$OþÆ$Bùô!º}rї̾üzËG‡Ýóžš©Ú’êA¶££á¾ ç±ÃÓñ„ô¯œF'[áo•ŸoyRDž›Ž`•_Ëš:p¨D/;¹ãuÃQÁlŠo§xð•?ùôÖEµnÝ>ÏÊæeÙŸçNŽ!5µGþDvëÆTÛn…í| NÇjxCØë>è™òñ¨üžܾ×—%‰]Q¯*IQIŽR´?ËÕ]«äXî:·ÃA!ògJž–^sú \Ô7C]ôN®úYÓ˾ðºÄÏYrÛ¢ÛíÞå(¡ªžCtÕ6vÓJîÊ’_ÒŠ®^Ö´¢ÿiÚàgâï®zVÅo©]Y³¼’aX=ƒT/˵ëæ’ ½î«uv±[Á+«†G!o’¨™ÞÏÓ»*:öÑR´ž1ú•Ñ/‹–)«¢ÛŸôlݳëÆi‘¤Ã‘õº(¹½ºïû<_„Ão7IPŠzHQ¯cqËzÕ<–õ¸HŸÃ0)yñOzªf·ô®Ô\Í0NŠ®·‰Þuˆ)l Œ ü}*fS° -Ãe“ž¢aÕ~ë¨ÃëZLR6mòó1¦ŸKf"ák Ãv]e×)Z*“ÿ#j×Ø~¯”@&}%¿¾zúg©“bª®a9’×-?¢Û%6ýUtÔ®-›ö°ë<†ûi¦àVe¯]˜~ÿMñí:)d* Á£Æˆ¬d·GëRMS¼’ˆzÓ ß'y§cÿÚñU^—`VeÃ"X…±BÒC‹Q=Ÿæfäw8ñ9IjâcXƒŸ=ŠûÊæikŸ-ê‰åæ‰fœuï½Ê¾ŸXr´îˆ¸éè§ú¿òû…î¦åáç—£ŠÏ« …Rz½ä²ª¦'NÐh‹e ÂÉCQÅï`™Z°F#ùj§Ã ¸ûx’\5N«mô°£1T¤L2$ŠÇçÓÔ$Ï/HD>î{á¨MYH"­Öè¥ôaÑq¹áˆê<ã²7Ò7bS‘üFñð-Z*•ëÆ\Wƒa‹¦_tÝ›¦>Š ô ásÕmÿ¯[‡ãËy+£ -èßÑ'I9ºj¹f…bÝ7Ÿ¦mÇ‘œ ^’Šþjz‚å»â)Ê»ïÈiµË;[²°É‚Úø_W×óÜï³K’dÇQ¬Z‹ É٘Π~¦W­!yHpœGÓ5É®#Õ8çm¸¦Uxµ÷! ÿD$jå9ɶQyîa=UíqüU5Ī½YöèÉŸ¤ˆMUø-ªí˜‡ùô.wÝv«žCìêQU•}—æZ$Ó²h¥ï²çÅï!vµCÐ?üòT5Íõ^–>zzÎõ¾.º©­ü‰!§£~â¾Â=ºî%9jWR»žZ5=XÇPA9Ñv vYôœâï+?/»gôH­“†ÞKÉ ÈÞí•õá7&Eªa¥büþyÝzU_¢O ’¿O ý3BV$¼Þvßʉ¤ùÃÏ? ûêëŸk¢v^ƒjWgMF_QþnŽ¶¨Öm:|lÐáí>RûzÐtᨘ«ï°{hOËcÙ!T]¨‘ûÍåóõ¬®ìÎ]»ï³1¶0(~÷8ž||YŽ‹Z¸OY<Ï£)‡æ;ª¤7Òhû·ñ‡…õS¥IóIÕSÎcÉ4Yô3I³ýAÓ<yQü˜å»u榓j>¦î‡æ.~òO°Ò«R•p¾Îå&Ò)LDP¬Ìô0¾"BÙÁp”ÄL<{-‚~ŠzÒô—ã6mÙÖ¶ñR 6ã²b‡F0Æ (‘Ä@mÕz¯b¶Ò?üâ$¤ŠÕ ¦dB½®Ûq"g£vÜÿ¾®8vÎ)¢¾çå!¡ì¦•’LEŠ§)ÛÝÏ)Ì¿ò ÏIrŒ"UBa‰Ô´íºÖûⱌÉóÏtDg÷¦]Ü¿ÿÒÈå ÉàYT–o‹´BN»ÿÀµ]šoøýñkºíüЫš˜Ä‚Ú+ÛBß(øõ˜"v<îÉÑú3]Ár^¢å&jZ9ë°þ££Pä­8‹EIå -¦ûõBE3„®¢¹ý™š”¨…¿¹KªíG¾!Ù¯m‰éd£êlª4Êþ±M’ -±çѹ~ÎT{`3®ziSŒ§<¿,‚ý¡–®›Rô.K¹Mi­¯—n:ïÖÉ £ïìîw]²õWì1Iµì8ÄÈe‡˜£T<'š½8kþÈÜߧ׉„ñùTýþÝwÄã)Ýy¾ÿ?É Ë-A<@Gf Ä -‚€%dMèŠÀÀƒbˆžeœ„ÆùAcÓ?*}\oÙÆàèY]ûâå©ÇöX¶&âa|Á— `†0X!ððÀvÁd€‚¨JBRqÈ…‡Ê¤E锿³ŒE-A3O]R Ïack¢k;ÓzÉ#:™ZD+—KM!*‚P½ðøÈRÌXí³p~å¾5½?9(*™fúD×$·õœ'ošž6Îñ_ÞK: -åW‘ÁrQ„*Å'4Œè%Ñ¡}¥[Ry™ -Š}HÄmw>ÎKþQŠW¬$D¢É’ì@0,Q˜æ]-.F´ QHAŠ˜ 5£'J0@ã=8@¦àƒ1°Iø‚øÀ†j â,`ÝXÀÒƒUѨ¿‰IŸZštÛ"Ù\áu^QD:4xA º`†d OÝNpDÍ›ß[ö[ô  h1Á‚T„A :P A/(–ÐR„x‹ Ìà‡(G -Š‚Þ”V W„r` Ï)OÕU -Eå¥5ƒ£ü@Rð‚z…ä` % Â~XPL€/:P—&B Úžð¼`âMñáÛKHß„F¹È±ç5[4$7QØ“Gh0(€!ˆ8!HÀÂÊÀ†L¡ ,0`ƒh`„øÀ ("°´€†z€r€ð4BܱP ÖI kÂ/™¦¡ :…œ^ñ¢7°Á#°\| Fì` -K =^„"Ȇ0 @A :X „À %DD<\@±€—„ß]»RÉÕG–<å¯ÿ—K"IðK ¢I¨€ºÀ&Œ<°ð`ÅVÃ5 B@ À D5Çá¢ì@S3k/‚¾~ÛÚ¡ý·á»öO§–=0 ‚ , IÜà 8HÐ Á :øÂ"à+q Ô¸ l\`"F| Ÿ9ÂÁXI-°ÞjWÜ6YÙDA? -L ‡„@FB„ d@ÂC<2=ø•§=Œf|pS0ë‡-ï•08¶ã¨æî ‡dÙÙÐNÄýS‹d 6(‹ -´àÅ£‰! -OhÃ* …11#d€Nx¸$aÇb€ÚÑK‡V†˜@¨†ˆ˜Uƒ‚LΚ$¿·I÷Gx/ -©ô?uz™²¡DK ±)( [‚ô@Ášøp`-PA‰ØÑ0Qƒ!ØèÀ D.’`S1¢< -Ñz=]}ÍN$ô„?? -<¬à 0ÂpÀ€J@/$`KPaB2èÀl0„Ѐ®P§àXÕP"¦ãyÊÕC’Ò#ö€âÊâu$^¤ƒÒãaÉ€P2`ìp¸@b6š¨@ &*гÔèKf|YŒB çÐ'‡Ð\uÖ&suÞÙù؈šfŸè–Ÿ¶µžÒ¢ $š ÀF ‚#ÁK€‚‹&8à‚ÄÂ"„¢ÂCBÓ–LØVLŠzéWlè!4sIäö¤xû—Iu>Û_¤‚ÁèA&‰ ± ¡ kP€®ÐÃFð¡DЀ°@ ˆÀÒDŽ¨ -0 “€˜n4A³ô€Ilœ¾É˜â©éÚ­Œ·±éàGªýŠ$‰x’@…èà -JP)â!;–ÕâĢǩT ö˜ÎXjIG,'úJ™óJÑåR&32p0 J¨ HŠ L˜ø€ŠxଇBPÒc X"`8  ¯Ü0=!_û!W}$Û,IŽælâ³-õ%O*^!S¬{™\&¸ŸjßÑ8߇ݼrÃQ7K±Ã‘¤ -×ûtrµLhÔðÁ‡%`à b >°èሑ¦ÒIŠÞÕ"û­]$bï+TÅQ²õ¸ôÿÆðXºdÚš¬=ó*˜‰ -‹0 -P A '(Bb<À0"@‚—#,’¡Ä'F‡?³³PtVŠz­°Î¦²ÍÊ'úîÓ·ËUDѲõ?¦—ŠL Q€耀^(á€B€¤ã.Œd-*/v¤bd¨ûŠö¨ô}”*¹@TìÞ±{Ÿ§«Ã°ìóÉ2ȶ۲tS•t:Á¬Xáñ=%&'8xø€bܲŽ'Jªä¹~J+TJæû¦47œ²£™ÞwDÏcï7RãÒPTSÔd$ö€, &ÅŠ -Ê©%R×R<ˬcÛó£dæ}K&2©AóSÈêí šãÕpû¶­®|}FÿJÄoŒ¬€!³1=>HŽæŠ%²sºöqbB‰tý$Ö:­êv67Ð ÅO §lÝwåŸ÷ØùŽó½ÖÉζnÛªuÜŽ»[6×wÛÿE±ÊŠ—7p¼ÄØá£^6Èt¶4(žH²òí‡P5þ9Kµ¦w\É1^·2¨mâÆ‘ç22‚„L È°ðR åÿ"®õ®KSý¼•Q¥P ×>üÞ¡ªùX4ÉÎn60’h„õúìÿy²§yÞr\…d«Ö¨÷°)Jϱ¬¤ÄµZ:o_Z~gÔ gpÌESå<’³¹à8‡fÊádoäS…û~ Ã_ˆnžÈÑzö%ÑøÒ7AèúIÛ$Õî#;œÉö¹†^šýÈRó@N÷±97¯VÝû\i]½•ï)ÏèÔ‡öv–Å“Ó(¹†=‘Ó„;"n´9,ïREµ®ìlbG#¹„Û%¯ÖŽ÷"ì'¹rü7Ãìpà晡Ɋg_¢68¾àèÃôÇ•ßoA´ïƒcjÞÈáfµåÁc‡)D*ÁQÍZ…oÕµSW‡kVuYò ¡d ÒÚyµeÕxÈ…÷•¥MGSëÌŽf" -Ñ„Ä~8–Å1äº2.•ì÷Üiš~ -Žökƒ<%Sˆ$£©úv‰‚XØË×ûÆNg¿ÔÞ“ê\OÙÛD籬˓WQ™Öé¤ëoyæë+ªs=e{ÝMSGÑ?ŽG4}Ÿh²17­G},GìüDãmy¦äØ–¢¼¦¡ÏÇw’lyöpüú€ðõmG”-QùLGµ^»³‹²»<ËåɳíÇ}SsÝ¢J¥>"¾ÆwyÞ[÷C áP47ŽFÍ0Vð€c?ã¦Ï/Ê÷_¾áñ7œÎt¸Ï‘$¸4x|ìõÀ‘ۮ昿üªÒ#é‚ßêãÙ!GŽ_ÿóW.å{¾¶á†Ã}|x ¤ÖÕ7È•eÑäÑVôÖ·ÉšZWv´•óÚO|A1$Ó:ûvÛLq}9ïÓá#Õ:z,ýµÍËôä -ñtóì2íU˜Ïz4{ö•A’íÀÏÿ`‡JtÂ_™TçžV¾K”å¾d?:ã†S;pÝÀîŽòX¶_h“%)–M3m›iÍÆ©É‚ž˜ž©½º5Ïé;ŸëŽö™z`ÙNW²Ã¹áX›©}ª!ùžEÔIÕ{Ö%† -2h†ÎÚy!yFéû†uTÇRÔ¸apœG‘OÑ<Ÿý19fÕsÈ®‡\×.Ë=MOtýÊóOšÊ (“f\¦4ÚšžHr^;’5ÊÒeÊr]ý}ú8zXö#ˆC‘GÏ’'†Å: …^ø-òéC°«Òï0/"¼ŸÏôÕó&D×[³üŸf~ §ƒvžMžªÆ‘ 6‰Ú§‹¤-Žž.ñ>îÂ(­VJ+–Ú?»©¾ÝW“¤m¢ïh¶áÈ‚"®®*|/Ñ8Mš±H²ׯih¦W½/•hTÑöˆIÕ#ɵLŽ"œFþ=žI¼çvé8uÇÍ·®äºµÓ\œÄHF'\e}•=±.Žæ÷µd™«ëŠçIL¦”Ö«gú4ouUE“Ùœ÷Ždû.=/!…dLÏO²‚€ g¯l?×>m³ÈzžÊu%§3n6Þ‰¤?W«xÏÊÿ{”ÍGÕ8SãôÔU»Pìp¥Öí+û»¯¿²¿º‚^8Í®»H1±ËÇšTó®Ç3ÇÜLÓ­ A6³H®œgv´÷u½ï‡msµ=GtÉVé´»²–-‰â«ûÃóŽEuÝ»ð -‚0e¥’KsGÓëîfz—鎪'"Ó*÷MλU¶WÛRƒV•Ý´SÛRΣÍM³Ãé(*ò{B®û«(_–UýSTÇÓ,£ŒB>Šòe)ZÕ•ûšX6þ@rÃA@@´í©ó4$ÍÍ»Å1…¦²–Ua*¥ˆB¾ºÒ¢(û|`þgGÓÔ<ŸxzѧÅ$Ši¥\Z«œm=ð+û?£x¾Ë’Å›$÷Ó¼IÅ9$UîcÁ0WÝ]u÷SÅËsWUÚ$÷µ@KìC‡éösS=Á³ì¶Iïë³®m¦µ‰êéZ“(û‰mXÊfêaY¤Ž‘—ÒHÇ'~7¢5/Fw£¨¿¦(\)ö¾cšUÝ{Æß“KÕFÙÕ÷•åÙ•4Ï ®G’wáQ·l=Ë!  ô›îÚ_¾éuUõ,ë÷yÓ$µm_–xÚ¡x%ì}.Þá= -Š°HÆj[•¦¿†RTGOZë‘„y½hDHö4]…j˜Œœxø“h…¬úØkZÂíH_Yd9ä¾<šº\·jœªqñ¦¤R>\»à!N–þªú¬Ê§%11°‘«j}ľ¡]Ír‰Çc‚gÐêzTVKX$Eô½³pM’¨VEA±”@.O9‰„˜!cEŠ‹Ë+>áq/c„%šåµDÍò´å[%Ñ’ûÒOŒMTÇ&~Ý6ožxIÂÀ^4df@3Šß™ •#®Ñ‚_Mù••‰FŸ˜~Á±E#T Ìx¡`5M` ²y=° hâ#øÀI÷Q¤J+X¦ÖÜþ%Hwº¹Kò`€Uîa;ÐõÀ•‡ÜWä¶#=o‹b궈Á‡ŠtêŽb˜ÅzY™p Äx¨ÄT¬D*Z"PË®PAAqÁ~{ŲLÏcF¡•§Ä®ø8²ÛjYÕmëæÙ¯ëªßSú-ò÷+&Q‹‰Z[Uê‡4BN-¿mW¸|pâÆË -‰§ŸY•`L¢\ GöúdɵLžµyòë*Šc•}—âùíºz KwÚ?¡½Ý·IÇIL#%°/)2«Ó‰†Q„ÄdDJb R*ÇCq ’a¿eû•=ÉóÈuï‘ôÙ÷ãʤù®ÅqGS}eó5½±^–+·Åaè»0ßÊyÊ‚`ù”ç¡™ö´l‰è!‘D~š˜!h´ ñ‚Òòè¥Zö¼o†¾ —”J²_´§-Nš"7VÙ9lßaT§º<ß/TÕyªxYîgIƒ’öYÞ(z"}Ò45Ã2«Jžñ±œ=¯¿_U{ôtí{}¦±®P‰~)9BÆ ;^Ø` aI‘XûN—#É]Mn럥 ^E®ê†¡Žø+§à—(ÉÎ?¯LcìuvæåÈ£¥ÊèwI¥ôuM)y†ˆ‘b†JI -–ÉäßEp›§ç¢,ßçÙ6OSSû$HZÑ«ªêYÆ㬛n‘bbL¦2¿*Éóãã€Þ‰ïãã6Í Q4p¸÷v:!ô,RWœ$][9Íõ8“’ˆHbKÀ?S#¯ Ñão–222b¸@'ØTïTý¼ñjßUN£Z¼D@ \°°ÌÄV5j\bH`-­’©w}vÕ©å$„†å¤ERÒ{‘m˜R«ÿô©÷u{V}Åp.ËÏ ³ž7âgU[ùBÉ|¾Çþi¾Þ–ªc‘O¯£éGUQ<{ –©&erÑñï¶í8‚æXÆÈKäëtº$´«a…€<¦ÛþãvÅHˆé•K¬{jßZ Y®#;©i°8¾üŸ¥{Öî{ÃP?M-Ó Å­j¼J~Om–¯ÏR"•ðûÅÛ+X%­Ìit²gÞ]_üÄ/ ç÷QáñÏŽ"ê[JŸ’÷QRílØMû¤é¹ÙœœŽËuo×±Û¶jvÓÞŽ“¿Ä®©86A@Zn£GĪ-¼V9HBŸ‘ëêãH²ç±Û~åöEU±ÛâuœÄFøûÄD*Ýwª¦YˆÄò…ÁÐÇ:áÜÏóä·òüÆ Ê " 3+"?OŠ]~M=±{²i¯ü~6É.·(qÉ<9ëžClêâk%/)$@¬@Ce%Æï; `Áa2²Š]‘Šâá÷r~+LD`„>«âP‘MÀ‡;°œ„Ô¯‹nGxÛ³0TH>0±£GÉ®XÑh0Ac VËéÿ¬¦NŽ/ßÏ0ªïR-óX‘ñ2‰ð·iŽ]¯[·N0!€@d¿(»5±U™$`¨8BÅ 5- ¢‡0.¢˜XF -™$€À ,±` -@bIü0ã¥eå÷/R¼4q€¨ˆ¨´B%'$:bZPBž•Ò?óRÙæ8B­¬R-Ï'Åë?Ì~ZUUëO!òra¡Bð;òbûÓõÛšjùUBi­PR%)`b¢„Ó4%¯$xØ8¢F %")[6Õs¯ªª™îÏ´ätF§ìh³(Þ¦©£ê,’®÷¥ŒF*P*ŽOñKâã.#ŸÄÃ`WåÙ?8î©géåd:ùø(þžòGD?é¦KN%¨ZS+äd÷DÃÿšò¥wÛºinç½Þjß:çt»îõ¾>UñqôÓô³²óžÎn–¦ø]Íp«že>/‚awãìP|ízÈuEs-’ë“èöŒØJ´—h8GK-_{Þz^nž0ÛÞK3ÃýD_x½r\ ¬D 'œ–ÉeÏ/_Wåµê¦IöÜï|š9›zd·VÑ•^‹ô7ɯÓX‚Æ%E¿úYªlz¬uŠaÙëxrÄCI]v5å:MŽ$=®òó)—M©i -ÒGˆ˜”)#°|–<ª_ÂiðpÃʈL·AmòÉSJŸ‘~WÝ7MÊÉÿ¶-%/(/!^Ôª —½ÉQ/GSÈF‹Ê‰¶]uÜ„Œ Ñ£ˆ0.^)Qƒ -Á¤B#°€``Àf€ +À @ acfE† É LU2ò4àFè€3`‘ò2óZ-`Ç‹ìˆ1s¡øyKÈóaÑ ˆ,A“SªõÉMJÿLLÅæ„5< Xq1‰LD¾=ô€yÁBþëÓÏ„¼’°ã?è(€Œšô˜ñEÄFLŒ¢† -9d\ZˆÀ\P¡•nÜÖÓ¶/šÚÆzߎ ¶­ÉòA–ëÔmcá7 Ïûó¼Iq䣻€¥hT%Un§|]¯åN·´N²”ºo”†K†ÊÈŒ¬µ¢BùsM£"½ F·íÝ–DÓîÆß÷zœÙá„ mçÅ ž¹îh–uµÝÓõí<d3~lNN>šoçµrY»$G/,Ûy”ûŠÖEÓŸu%ùA+|ŸCг.¤¿K *bXŒ¸x´¬Iþ@ qQœ¿G?EK>¼)Ž=êZ%ë}5YþìÊ«§çmcýþCMŒ”‘ÐÒñÛeaôì[–.IÖãzÔ áu–~‹b8¿¡÷ÍÏÓGÓQëÊßÇjš-Š!vÕÏ3$Ït®›–ŸiÉ}Uï £á–Ÿa¡\Bd!&’Ë×oÀ°¨ôü6Ëк¾n{¤ÇCrû£¦ªâ)Úªi¿a·œšcŸ‡Ùu‰]?¨éIQ8üöR$Ém-³l¹Åêsrj€à¸ÀD¬‰É´NH€ øaÇ)`pȤļJ7`Jv¨YÁC2„8ÂYlæ4Jñà%7ÍIð½\üþÕ¬A 8 ´À É+ZÀC ðˆ±JŒFI æô{Фs L¸0 ¢…ŒŠà‰40d«š©I«¥ä! í0@Bà`ÈÐÔxA!@  b50% Ïÿº.¶ 8’g ÛæÉvmž.Å2j–C.ûÚó*(2ÏÇ»#ýÍb -Á¬L-XJv‘¢ˆ*jBb0ŸgI‘Zœ„Ì`)™‘"2#sÝl‹ÂÓ1ùåÏò„ß,ZVúw6‰^B ’=ÿÕ4ö<„£n] Bð%).(– þ‰þ¬{‚cØ<ƒÒUÕ4PëÊ ™Ëö¼Pš¦„>($ÑL µ#EDRÛ¢h: š@@ìó¯f¸„¿Gö[¦ã¥Ö½ÁÔá„‹ßc`¯~eí²´ÅÐÁÏi¢`î8|kÈÄX@ɳoš+¸Iv̬0ÁãÅ,``û^nÛÉïUZ/¾}?ok¢gÛúìÚ£hü}ãfó‚ Êh$ÓjÑÀZ"øApÝ6×óNt§«\–¯žoA|h1%ŽÀFЈÀ`’\Å0WU‘Ï/!_–#þ¾âµ*Õó]’i§C~|¬f9ÄãÿïK‹¢ECz%Ë'žFeŠÅ0gU*j\\-XŸ€ò"(ÄiI‰TPÿ8ZˆˆB®ýNá:Í0õƒ¢„Œ%`̤h¡z˜ýa7ôÂ69â&yŠß•ü¾ìÙ%·!»ìÚç“ÜÂœ@²}F½ê§ _s -ãEBñïÓ‹–fÖoM•’_C…xìÕ Ëøú¥ä³V„ pÄœôp‘"â{¤XbÌ ׊ª•×¼ŠÎãX¢é'(±Ï(?Õ ió É4«®÷rœÅ¯¤ôàÆ k¤×`!³‚,à(ÃÅš@ÂAð@)yZ¨ˆp @‚ÇŽ(Xp´”Ð@Yéù‹~m˜È\ˆ¸Büœ$Ç}ºžÞXÃü@è)wÞªq³®LvyŠ ½(ªÜv7͸óHMwâÉáÔ£‚ߧ÷}Ñq ,!„1V¤p©VDŸnóèYm€h@E˜êZ%仌~N£èØ“¢zYº·"¶raRr›gªi¬NA±ø;.†*‡s 0`¨`"ØWÖ?KªÐŠÐ‘üP„ -.o–ìç%!Ä 8"‰Ëiå@‘Õ¨J&}nrWÛM[A2‚€ ˆØÑ•õ:Z]@ž/Ö'#Ÿ¶e}>x@n¤€ñaS—É13!-ÖŽ»ö;¶ß –%A6¥YFñj©ŒB¾YzÌRE\oqÔÍ3äÿWT¬Ÿ}IrrÛý²òywUTŸó AñÏó³±—a°F†è! ˜”è·*+ŒÔm³hØ…LÕà ˎ’Ò/’aWó4…õ|¨es24Án©]QmúAǔ܊Þ6¿ý,K,;‚Ï1!~¥¿Y@<‰¯§è÷•×ûšòëÉ•FEGIl…˃ÄeÃ…D&D…¢ -=€@aC† -JÄr±pZeË»Âa8“c¿®Ÿ•59q³a9®Ä¦-ŸžÐ û«ºÊk–iJ¬@àÈ“‚Êo«µï»Šžì˜$¿$øeÝô ‘–K¿áïÓIÅïKv<·pשÎËm®=WI¥n³D!‰f”Àv@Á³JÁrºuË#·ÕOF ‰hUm˜¼fT£N‡T4þº·ãÖgEìÅD?ä'š£&Êßï â"‹.'5+”¿ª$›>‚‡Ž˜ØÈÉ]—x!ƒÀIÑÃŤ†5r!ù¦ø]9î‹ŠŒ ‚uò˜d =Kç*ËÚójð{a±ŠÀ‘ã>UÖëð1„Ù2‰GO9…PÀR,¤¿¦8ZÌ‘ㆠ$‚õ: -j¦ur1‰Z˜„È@¡‰±>0ó÷–T)ÆjI•d}.’á7e1üßVÁ9ô^ºÂ4’ñð"¶ŒŠÛY _ðËÏ'OZ U4sõ`A©Qò¢gÞ,aQÔQTEÏ)Zµ* [ˆ¬~x1ƒ!xã…7\À„¸VV#éwWP›òg‡ßÊmðçÍ xv:n×}Ê2¥ž_x{EËÔ"¦jÑqª† pCxì ¡ü¹ T+V€CÄ‹˜2'*d*WÃ@aQ•Rym“" h7ñïéoU·t_!ò’qR[±YýPò¢}föÊ[=>“ nŠ½zî)ÊzÉÙ”›Û}µXÒ sœüq7%ùä4¨Œ $c™ø~¨]]Œ°ZN O£ô4.#D¸xyQÒrù7(vóÍÓsÅòããGM•OO’ߨ×m5 ÀðQ$BF Tßৣ Ž/8Î#iv´N‡W¾»˜V¸©Â^H¡Ü}²÷}VuÔ²¥—eíùÿº4TFjb--ëçhê °†‚¸±€ nACÅ‹’‘ȬÕòᴼïÕ:óçÍbH“£Ï¾3i†\WÔ¶¿ªöeù1K~óQ„q2"A#FÔ`F ‹Ö‰D¿K«)²×"}ΓãjŽ#°D.RVJx^”ªæf#ƒá ŠuºÛÆ’ã&$®·ËrGÏ-›|v’¯rÅ<»=ŠMü cˆ - õ«(Œ ™*…*¤ò÷þª¾c8nœÛ,ÝMƒµN?Ž¡3¥é‰ï!½ïÙáØg)³:ɤL­›þÍÑs’¢Võ¤§JnYÄR2¬Óʆ)pÄàaƒ&Ä¥âíØß“Œ>©½ÖWSÍKŽ+\Z-•R¦Û¥w ­¨-]+; $"0\äf™âÙgˆÈR@ÿšw9²^÷ép‚FŠÈ6 Wˆ ¯[F¡hfv¼´´„~üzÒT?Í`°@‚Ç&Ûnáñ S *4òÑcP >%G8üà ²”K.OYc0´AqM· ¹wZ¶`QaùŸ’,£â—Ô®'¸5Å,l§{ĬœìÚóª?¬XYŒ#pÀØb…BÙtß®ÿëî«*ûA¬ºÙó»ÚXƒã ²Y5ß¼,]>”û¦[÷†äŽ²ú¹¾žè£,^¦­¾zŠ•jÄ÷€Øõ£¦$–Ýɲ&ËüLEîË›gßÂ2(*À!c‰2’˜Ñ‰*~PñR2ú¤rUm¿øÔ®¸9ªp:FKJ ”“ Ï´V0RTJ¶ ãñ'!(N¢Ø=ÿ鉓cÛu¦Öi½Îí¶–ŸÚAwqÌÃCÖ]¿‰±rÜ_S?¹íG}\7ͪe_5K~,A˜—•ˆGŠ•ð£4=^Lf¸XJ¿«ÏY ˜üÀÂÅi¦S3\Ò矴¬Ãïä€Ô GjÕ?=Cnõ¾3èÝâç³)š;)Êv[†‘ø›Fö:ñ|\vãõT«€|”/Ëm²UŠ $š]#,+"**҈ȃÂe•ýú©éòsôÀ£%v‚gÝ<ãïc7nätº §sâÄË·Mдö_Eœ c5¬òó.%PŽ’$²U=»P1)Á&f¦eu¢i•ZLžÞ>ÕðÇea1¤À–(…BlË—hý»™ÊÞWn6›'Ô;Á²^ž½ëšî7U»DßO\5ïìlì†ü-'*vóì±ôÕÕOY›,ÕÎ[¿æ[Q¹~¶5Å.ŒÏC0¬ºíW¿»<}ižQ5=£…F -ÊÈ][6ì²á›Ê£ˆ§éL–äfó¢Äd¦©î’7ò㈇¡Š°ÞÙ´'nY`.˜–‹‹Š)dBö”š):ÉoÉŽC>|Š–=*ª›dêmG繇¡ÉÙ´]‡‚e4eïû h¬®Sö½Ä¾ýÓ¼Krý¼Û$Gð<¿&øõ°«)†c{.òé[H%zБbD&Æ%|H@ŽDиä0‰±pNDþj¿[¤œ 1£Š®[@~ŒèÏIÑí¶UÛÜ wƒ\’!v¥Ã¯7I¼6ÙóTË–Òó£žr:Žx›4J@£¿Ã%-LÀ ©!›!‰jN£Ô솈ü,Q’ €‹«ƒÅDEI¬$įhù_U“M“ìz•ë®÷©Ûæ~  -†áÆœŽGE{ IzeÛ$MrËâÙU~ž…ô¿¨H0ýNѱ9dA7X¡‚âIŒ‡ŠM*ÄòCøEǸIžîœýB‘æóÛøDã8Y¦Ûöl6Nl'>º¡Xö´ðÙÙT®[¿pOYÏÚÚ¤I‹$~¢¦¶¡ÚF‚_N{NsöÀØûê0´ÃÐô¾?¨1Íò‰ôB&ƒ -ñ yÙÁÅ -Kå¯nŠ!Y¦O4ìhwyÚd9‹ãºuµ8¾ ø‚áÉ®=®¬r](~]<¿£kè}Co[‚Ý=E|ˆ*`Z.{$Eì -»i•Ÿ±lºqÞˆ„ 2X^P3¾“hÌ}Ÿõ ( ‚³8ª׿ª‚Øa…”ºG±¤·s˜´zÀ”(qƒ+ZPJŸìŽ”F9T¤x}>%vmů ¿¯ìÅtãDnš!uõÏs'I[n‹ÁÏ.ÉÒë~TvýB‘m›œN2ߟyµh¨˜˜|zEYý=Ä š#`¬`Õ²ŠˆGñ*-áC``Dà°qb"Ý(úÃ. -•éǶÚb¨zד\†É-»qDqó!ZU]ÿ”cþy ô”í7Éϯˆ¥^„ÈH³ÜBò1éAòz}`7]rÙÓÛŽÜeäÉÀh€FÌH!:–ÐC¦e"Å/M–ç¶yÔÓ… †¢çؾ›b¹OY•óÆ GÁMcQ\ñ¹ -êdšã˜”ˆ‡ J+`f¨˜¨ˆ½zPC*¯y¥V°N+¹«èUOò›—¤¯¦¸yÞ%¹z^ÙÑêr¬I±õ:•ãTm«Cq'ÉÝ$½:¼¡Øê? Ún»oÄ®)Ϭx.µnˆe×m“C°c;eG/L£2™ø½‹¦G몗$5bP€E”„þQjû#×£ÙÆMså4•ÛZôWwýB”ëÒmóU¶OWZ$ë‘,9ë}+\±îºq¾ºÂx>EK²ë¥÷åQÓÜ4CkK‡¡ ~ºYêç©—fªigÓŠb~¦ñ'z:œ05í?þ4WtÍ -±ŒB¤×C&öÚFF¤ßiT#XDp˜´`üüyS%"C¸hQ²k’¨¥4Bý¨yF7îÔ6äìtÖCµí&M½N“ïr -›¦—uÛÎå^¦¯‘q»çQ Há·/dfHÊ2å¤2¿çúÄ21‘¹!sÒ!3"³bÆ R -20Xe~³H)hdÌ°ˆaB—nŽâN‘Óä5¹½Ë53µŒŒç|.ãºBNÁËÐÌôµ[¥`27dN41Pª*€2V„˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3‹™ÅÌbf1³˜YÌ,f3›Íf³˜Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³˜Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³˜Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³Ùl6›Íf³œë¬ð¶˜Ê+`fHŸûëBkšòK®Ú“ŸíqèÇÇÚáœÞ”´¦2Ç:œð”£("1T§«’LÑÕ6o§¹j™„Ïcù}‡ _’#x­Âß"tª—¥½Ö:&tÜâãQ™g)âÜf9Ö=ÇòüÇ:YÊç›$‹Ÿë`h˜D)ÝKÑí¶Q«Âæׄ–¢RìÉ.Ôš£õ¡#“Ø®Ï!Ǫ[,T‡Dï¸ÙãÜð Å. ·?äèjÓ•zšPòc†ýøõä·“^Kn]vœ9\¼ybëI2ÇÛãh½¬ŒÇùr­)̦wX AâE&:Mò„[0{^ èO¹­Ëéć«=LX°¡Bõ²3§Ù_£eŸßΦílv2|}’P“E„¤ÏïqÄGñä÷U˜B«ôÄ9Žîu@ä·—¡éeS~O‹¦CìZÕ®¸ÇÁˆgüîNk9 ¸(®€>ú(Þ"¸’á×ã!˜r6l‡S‡ßhMM-K‡àÉÙØ!8ZÕ×üÚX‘X€x“úíK0AS»Êß×8ÁrZÈ=¯øúJ¿“à·Ç,{“Tù=,y¶Aðå´øãN@ûŽ˜”$0Ãß6_É]M¬Z{[¬mîo[É. -neûNŠçÛ$M´üÂëÏÎÂã#¹]‹ÞËqLª óÙO,š‹Ÿ'5ÿÓĽîþ¼OIºÚæô¢&{mjѾüz3äÉ°EŸ,ç®S9sóñQQ–ìŽÜs>‚l·éeXrÓzÞä‹_žŽ!{ã4¢ùð(­¿nö8ÐIòâw[>†®¹…õ=¤ˆ¨ì¹hU?ëš—$©Ue²«BÃ%q *Å5yÓÔÉp'AºÛÁëÕËzÌÑS‚¥VEɯ–(HºY¹l h…©G‘‘Òræ4ÚãL-ûv òƒ LŽ_¬ÚZÕ9zÌtš*ש+ÌmÿyŽÔ´·wˆ¼Ff¸Õ¦­—ÍËñ•ã ve9Mî4^ôVo“[ÔŠöã8{Ÿüy#ž}Ë›_ìúðû"ªEU¬H­YæMôÓº°=·q"ÓÑbBâÁwSÌËÄ¢«ù•Á„ž%8ãÑyˆ¸Z0ûQMÑ“ðÚ4ǸYÚcˆ!+vSø[fÃ"ÕÔÉPA̺lÙ=™Óòð©§_Š2¾†aÉ°§EM|¿/ÍÙëlÏ›;.æ¶ùóHqü~] z–ÝѳĖ]xœ”š¡%Ýq «”‚…²Ã/Áܪü=‰Mõ1œ¿nþ¼?EOoËš_œ–Í®ê]K/»Ÿ¥–7èõã‡ZM\Ž*ä8OŠíÖ¹ÁÏĦ.TŸ"T`4#ÿä¢û~R²Äž Õd¹Î v<è‰ÆÑ•¢¯–ýSGMÜ,I+Ëà>~s§ñ£§zÓ)ââÇv:u(ÒÀZ!>ÏŸg(MM,²ç+V#™‘«cѪꤩç>’$Ô$¥äýyð¦ébØ—å»qï¦ÁäXd¦M)‹a™ ëax‹¢ -~Mô|öºäÁÔË®àó hå5-†ÝÀ¢ëSéuÛrèådX²ã1&QÊgï˱ݴ K,Œ‹£ÛáÄŽGM-*«ãÜöOTö¼Û–ÙµO’ùçíà':Ëœ.áuO›å©iù8úåhbÕU«æ`—^~-Ù¥Fqë£$Œ–Mò[宣”DµæÈn“ôºë¶u³l½ '¿kŽèuËïÐ0jE?kêšg»òâG:ǘQßC̉1)2*‰Ÿ‹â÷wÙP˺fXd~Së)JKÙM¯^–õ®?Zâ!¨rÛZ6ÁéPjê¥H‚[^Em1ÜKSݶTÓbô¬²ã(ºýAËøój1üYVÏ­×­ŽÌi$¹¼D –*!3)ÑŠ~küÛµ¿§ø ¥'l†[òû9M¾õQü¤h -v[>:‹Gñ䥗ÕË1þº—ë|H•š¯ø=­é§oðÓÇ=üT-ª‚Õ’¾Žù*z-RËZôÖã—#þuú×Ýœ“ݘ’(E$"ñx<çùv v¾9–àsHì~Èpö6ÕÛ’ô¹ ÙjUÏ]Á°Lèã *„nAi bÕ¿uqÑ<7XÓôÏ+­©ÈA¦x‡ ¹¡?oÄ®eqŒwÝG _.›c’»¡å«²›vv:wŽÒÓt’¹Øùg™“$ùq¢¤ça=âúy*9N‘2½þW ód¸¢HMEìûø87 8ø©Z¶5Ã&wýUT/Iúûú‘¤¿OípfŽC±­Êmcs,bÏ1œVÝs¯ª4²›ænOŠvø•P“¥¢%wòÑÿ¸Á-Êm?§É“c~(üŒÄL -Œ– FÇ{I²^‡›ãG=K.‹rY’9¶Ú´æ$Rñøzæâ“]#,#¬©ì†cR#X¿ŸhùgWœ$E©BÃ-T¤,“ vA¦Ø“à¨]_³þ”¡íu$»Ž¥dCj–Ö4¿kN¥’=?ÁïŠ'Ȇ7Íœ$Í'î®Cás¯““)ThLÿˆEY­#2Qû ÇÍÙÀž‡‹¢Ç4S«ZbÛ´çý(Úò÷'6ÝÉ0ÃÝg‹9Õ8i§~|è£(RÑQzö%Y‡ ÌqèùÃn×Íb(ZWRš–Tt³"9í›$«¦i”Œ¤hYE䢦…Ç‹‰Ì)ÄŠÛRjªÞVOÍÒ£”Bûšâcxâï3&‘*†ãL7Nåº÷ûLq\‡# rÂþ4WýŠÚ³5$k–Ýï‹E‘5Ç2^¹ëªMS­ºòÙaHVß$èIÍÝ&éñ‘½V½«H5Iïz—âèuñr”¿Î“š*<&ÔÇìù“¦ñÂ`jãmcŽ³EÐô²,X'™=ÓbÈ‚ ¨i¯†Ü×Çö8ò%‰âó.£ßEÃ>Z~^×óÆ»Úúiš’ÝÔ«¶ô8“˜Œ·K󋟧M’|šúªº“$‚ ³|Õ° éµê^Š½9¢â–䶟ô”ÕsêmórÄÃoæ´üëN꥖Wlªƒé]SñKjY”ü¢`×Ã^ôFhÙõ¾Ÿ³üÓ“'Ç\=fùŠßO±é_Ž¿IædH‚$±ãeE¤ÏA)ɇ›ím¼(Æì†,s[*~kV¦ÉÄ®r×¹š6wËéÔ_XaúñAC -q ˆp!##êcFUÌâ#Xn@rPdµíìtD®›ãj¢Ò4æ²°†9NÉÓûªZçõ¸«žôx«UMªÉ“ ªihG©ªN–«¦Å¶›äç,Sí -»éœcÏkéwˆe_­#sz¸øñ¥(³ç¨’ˆMCø(1H`'¿?ƒ^ìq VÅMrEË*¿/ÇOjÎqŵDkÊjZÛm99¢`÷„ßíPütÐÁ;>ƒÖócŽ"3Ü‚[] ï­i†¼¶Üu¤ŽW~}†ô‘Ùò^†=JÆrÛ»¾Iª`·"û=bÕÑëÚc˜¡ˆE?æ(BIÒz¢â÷_×S,ÇrÔº.×áeù¯êŠ–ôÔѳwÝÝ}ù•½²¯²¶iþ+˪i›’Ø3†äIáZ¡F ÷ µlŸž"6EAúU°N"ý}¢_>Mï²´QT¿Öóôqô˜ä‹†]Bþ¯žý9æãç›#ˆU?kª’á«úh™!zu·‰Jò~ÿŽNÒåë8‘b5MzY?Eyr,©hJ~³^”š­Z>¹->Š5è飗jÑU›®Ú·¾9®^wÖ4w³ÑCÑäº-»fɲÇ,eŽOœØÍrUϲǑ: @GÔ ‡ÐôOš¶÷ÙÞs\Š“(ų÷¥xƒŸ¯®U=Áp(Mý‘l;ºëVø[TŽ.äÝ4¹ód¯“?o/ÏÝTÇ §u×8Ld(F~/zøÇá¡'Ÿ^š-`""6^;™ÏޢשõäCÏÁ—Ûbn3ù–ÍE‘„×_6RMÕ«¶âÕÄžžÔ”Ñ¢ÒD;¬t/IÓ˶„|1Õ -Hͱëm_O«ÃÏ7É9Ýn[½íŠ¯«èöKÔqíuig#rW‘ß#‡ «uꎙ¥~=øñf9ƒ`(MO¬ª“¡Êqr2 ­¨éUYü¼åÃRs?HôÎU5±ª ¯Ø󋟳8…ôð«Ãä¶!ûNjÙ“ë–Üö_S5E,‹#Üuüi†ðûÉÿAÑô¯®»iú(ºšå Ïaèr›éU[@ž‘>gÕò'=OîZÂß+?ozÛQ»ÂnÚÄïbØôº|Š¾!h—¥çDe¯k·N~§Ø=Ám©US0û¯¨Žž7jÒ¤ZQPzêbÈjœ“B݈UOn›rW¿Â*ùôüºº ø‚ßL†}Š²ìùäÓ«^˜¿vë´Üf/¿Ï9î#è—bª]Eb—Ö4i¦ˆÅBþ>Ž9~LÓô¶¤U…9®å8´ÃéÏÓUÛ¬æÃÖ¶uɵ Ež$Íä H,«ºs?eë/„µŽ«i-góAM—+Ýlô\Åïé…MkZRÍxÛÒÎFv:ò÷Åž§nšÛm$– Áu|?­k¢ì¶í¥‰záu³)A>ÜËGsåº/¸-Ùošeð­i>‚ô·yÌ0õª¤ôT¹j3.IÜñ³+KÈ“ÂJµªÌirè…ÒÓĦ´¡gý}í¦¹he×Mjjwœ¼uür,­iiMSpÛ¯ê ~»šÒ$©n~£ý¨¨š)ž~EÏ,·á&™¢cYŸ»ê¯2¹ýÏÒ$¿-PPö´µC1…ßUú]Õ¦¦sŒÅ¬-?g’ë"8ö”âÊŽ§ôy naoÛ¢ç#vm‡ j®m±D9{[²;RÏ#õ Óç(~¢yI†ÚÕGÑP«²âVÆÇU€ø¢^ËRO| ±iéee7ÝŠ[Ôš–XÖCùój¹ëߪ¬[vA…fX&™SH–ߟUÝËу–?«î(Jb]Ž}zò§y“$–$y½òû1^µlŠ–W¸=’aϪ~ÖµOSüæïó¤*ošžôÄK2CÝ,Ilƒ€œ%ÿo1½¨$S- 2˸Ãq;:}¥i­Lîëv:ú(äü6âX{Þ>†+øíUü17~Gì:RÓPŠ†ÔUíh$¼ÞòØ$ ~|¼š†ƒß^‡T”AvÛÖÎSYµHB¦R­Ïáo\»qñâä{`ë>란F$6¦»Îþ¸_ÉíQ»ŠRî¶vãœ\µåÓ—àµê]M,úAIìþý¬é ‚j§sâ §ð8 f_òû1ËwÛê´EÑÝ6Oîy‡‰ˆËï¯Üõ?I·ãÚ¯c鹦wÔlý>´¤À„>5¥…ÏýÓŒ½ÿŠâd8‡‰5En8ÅÇKt:¶ç9ªææYzßôR Dí|ìä'RÃ1¹±c¿Eç£ã‘Šê —{\ 5Ynk‡ŸIŽÓ­#7œÒË’à6¨$éŽÃÁÏ/Çj®ä7õ¶ü(ŠÜ2‹oÏ„ø—Ü’Ôò䦼–ì7IÏ¿p;EäAñwWì’RòcŽ=jögjUÓ çæ#ꇈ9Ù¡eD峿èX”¦"ô$ÑiV-›æøwYÜ®jÙE˦¶…½n½<5K÷œªç˜~£€<$¼Þ²kMﲤE1GÑ~]A­kòñQ³ü»í~š3øyÄ°»(;Nâñåï ÉõÓ ÇÛfžÐÁæ4½–)ý)¾­âësÇ™ 'HðŠçÖY®k·-¥ž2ú…Í/Š]e0l½ÏOURÛò#I{ÞÜuú(Îßw’寳 è†â^š!ô,©ã~ëÏ›?oD×xX^#2Úžœ·Ÿé~¦û‰â£Hƒámž&£Œ’”¸ûÒ'Å—Rhëd’Û'6}=î&ÃUì‚Psöº¾]2ì¢cŠîg‹#ë}£Xþ¨ªšùÞ·²ß¯ØåIQ½¶óTM¥è ^‡è¸>Šr§íâRÏÜ®ŒB}ª¾p:¦ZñZ­hÙ%»1[±éŸš§·Áílè°ƒ!ù&:-«ßØ܆ZÕ6ÍüŠô<Êi³èyNåª)»ý’[•›Þ ÷£%©eqðCµ©ÌžEhÙ¿ùrÌÍÑõ¼ÖóôRUëxÚÖE•"ÁqùññnÚž%;‚ߣUíO“å8_este;¯ålN,*³e§Ñ -IÔb:b¹FQ‘m“è:?Õ›,ÿÓl ù4§ d‚e´Ó9ÕòHèó·íz¡s4µª=ý³dÍqo–ýyž^÷Ç-8ÞIÑOÏû4ãQ$Í3M’l×í§™‚[¦ ›ÖÓc’¬¦¹÷ºo” «ZçA•»¶0}V”<->Îòìhú²BÁ¬P,^oA¯E¿DÌ°,±fé#»çÜ,ï’éyÐÛÆ_sWÌÁƌ峋èxûu!·]É1êmqôœ$ê]OãMCgùÌ L)ô£fo’ùø¡VÓ§Yrl—¤Ûu«—­ñBÅh©V®;JM~ù2ìÏ‘$ôü^RŽC Rmìj›ÜyùHþ)JÂÛ5+ËŸ£ÜW?×Û’ÔÓ¹\I«ª’_,“ŠUéäïùÓl5Í?ËR»þg™r8'Èìu<9ÎœP-|O5®A˜OJËÐ9žÚÖ6= ’øy •“÷ëÛ§+l–GrÅ¢ü¶ÛƳš,¦PH¯¿]ç9K’ý^õ+¾»(wõORÆ É+hDm+wœˆ=û°b¢#…äUË99Æ^w—$ -ë¥ïí¦­œÍìuª¸5©è ~ø(¶×ÊñÓI„ç?héAEX>Ó¼V5#0&¯•)Ħ"ø…1‰PpBÉÐ)ŽZôTÃ(Z¨fdZð“ÅÏÔ¦*9£uJQúEn9·z)ªfx7K«¾ö]Öó*ZÑñÓëæaˆ^Œ–ó³ 9›´ãF.{bË+HŸ‘Çô¶89¦^…ÇI¯+‡Ÿ‚Ô$Ñë˜Q_ò÷®¾ßÕÓEæVýœäéMKú‡ -¬&¶:Ñô]–V áïÝæÙ4»˜ cN¢(#$º}Š[ßeqÔd!…X´^$ywÚOn"5Û2ò¸x\µç¶iÞ"øƒIŒÆŠ´Â×'z<‚Ë«zfÝ6 nëðkùw$bN0CÅb¨¨A‘HòÚ¿ò(²gnNècç—¥ˆŽ{NóAWÛ^® ¡h?’!ÍÃ1Ç‘ž§Y¥Rñë9G)Þ^ošOŽ÷ç‰'à)GÐ'%ô‹â—ô²¦VõK1Á½=§I{]=_8¾›fHMWoû¢é?Mã®ëÍrEµÃÁÅPþiŠØ”¤Ç]N%Ïû~`ùãÂëƱܦ—¢'5Mnz²Ó.Z§ÔüþlZk`Xö:ôL­rË$z CÖªY­ö² ©h -Ÿ§XÕ¿ü(â!ˆzYWljÅ|õ¾Ú¢Þ8DÇE*j‡Ÿ-‚w9¨P;ÐÈÈ> ¼4cN fT” ÑB23^):æɦ•jQ±úeÕr ×X*\t¨ÈLø/C£h¡L¶ÍŸæ _Ï€™hÈV!7ÝšaÞ$Gp ãRäxä®(?¿âM-ë!I×ßf™z(ŽWw^‹£§MpºÆô«ìw -Ÿ»€<ÝQ³à ¶õÉqF´¡"æ‡2,§k~õóô¸lHŸ›ô6ʇ^å(R£“è•×®¼þa·VW›mû×UÍðÈ-§xl/ãïÑüþ¯«³íŒ²êçÉòÙ‡”Øf¤XáZý.+"NŠ©vÍÃŽ7Á–‘îCJH˜ÊïiÑ1-z(˜EÙë—ÌÂlø%·­w5µë]–k׎¨Uwq¬Ápa·ÅPºšV–ö>stream -6^bÛ—Ûðð3µ©IŸ·”@3)’ŒIT‚_ÑëÊ8!‘Y¥`úÝ¢_nés’œv! -ñxDo›Â¥²¡2Ãe™í¢ôóËvKpšc%Dˆ2'µkŠ(FË„Âã¤õOò“–+¤OŒ•ªã–O#„’ËùÒÝ&RÏT-§j9dÏ]y.$HEa@-T‰Üs^—Üud·Eüþ&Mûû‚H‘I@ÇŒð°ACÄõªc=O6ýÊï{Êô÷Ëk<^Ü0‘Áôz…Ï*ý>é: ×qv}=ÎÄš=ZD†¨Y©1Âb)Tw«ª’«8þ/ ËéÒǤÏM1KŠÝКöeÉv89 š|pªÑ )$rÓ®ùýÓÒô®­îËñGɆùô$wý§)=Ž1Ž`÷Õ¸”³¥ç·®‡u]m™fì®c6íG=AíÚ‚_<Š§y­mÜyà‰ãLJÛuxâ"hªgP]Û¬+¢kPÛê%9ÊÙз‡ -~IrìvHUQp¬—ä=Š¶Ú"ÈŸ%Éï×È`3‰¦íäçXÑâ#vä@‘¹˜B!·E;ÔL¯›vn6´Ç½`÷DÇ_FŸ-“ã渢2ÅhQÁM³»:š^¶UÓ?Šú¦éŸæ‰†k^¬R릛 ìm-Ù]ñuÃæØDÏGjwI^³(dDT̶dWõ®6ÈàV 8JH%MOpK²ß'û«a}>¹ª -¨¯a"òû7¦ÚK´Fä…ÃÄÕòïQÔO²GÍ;Eé S‘ì÷Ë¿ó "“QòRÍï*vYñ{œŸš"|^ƒ$ÖƒÅDfôൟª7ŠšæYôºžÔ4±(Œ~Mv{†LEÃUJùùü<¨y#e¤äÿ´t;¶×(¾‚×5¤Pêucps)õŽzŠ¾|Ÿ_Û–ãn1TÁîÊgWá")€‡‹,%{I²ŒB+£H=ù°û äÈUM0krWP«¢Ûæ~žÉÿQÍòìu¹þ¨¹›$–2¬Õ‹“8 S1ëš[”Ý^ÅìNŠ÷Îá'òékb/к¶Z'…ÊD#æj‘2•ØrŠEu„7Í¿"ö8ìP®ÚâÑQˆ>©VíËpOÍú,MN#¬Cü@ë)SúÈ„öÉiìX9Nò yÖÅk¢^”¤š7øÁ 'v:d§#ãwš•ê£¢7ùÔ’¤·ExfË(Øm9­»&ýŽ²ç.öO²Ôª&¸ù=/®–(–Oî -DKˆ Xjå³ÃêX¤šþIò¥˜‚Û-&&!†J‰1Z¬ü~ÊUE'y‡Ÿˆ=kX"–ѯ›$ (ÿÅI|¸¡D /}þ´§‡=?-*£$–æ:Ù3ë–S@½^³|ö'°#­˜nóéù·, ~ŸS±& —iL¡¤P jäbÕ$Ù¢e×ü’Ò1Õ¢®ÙåòÈ]K2<¢c]EM4ŒbÔ· ù7`©Ï.Óõ\ÇÉ2íhæÄÄßcL¢šÆ·—e‰¿Ï yÉœB-¦»nÙ ^ÕÂöç¹Z'¿²Õ —0• )tÂí?–gFJnÄÌÜ"™‹¡©]GkzjU'¯'2”L{PtD¿eu=JQ^ôDp¸„¯Q®ªâ•rIôÓôœ$Šggý#ú}rU?5w6ýãÅ4JÙõÃB!¹~ŠåšÞbˆâ z®ùÅC/Ö6/>D‹‰-(#|RO\Qç_Ó!b´(ű~ªWUéqüîbRU=Ecñ; õ+Z«¿$=á‡ZM/ý!>Å$Jáw-†-ZÉï×=¯f¶e¿(úåU“† K KßÊ%ø…!ù(ýMJÍwÓ`°kÃÏÁ/âñ|Üõó®žõ<Ák‰çÑkPŠÎ!èÂo•Mû'©â…‚)‰Lz]$¯]¼R1Jd§YöQ²Ç‹É‰G_Íî¨MIø;D¿Mî*BKÖ܆XFEJ{}Vô“’%Ñð “àókŽó1T ñ¯œ¹©ÉŸ»°D*%eÔ¿˜>2H^-ý6Í/ êå4JÉp’%X éç‘‹Ž\uE˯ÇÉv:‡JÈ,#:F\*=.’Ï&ŸÝ³¢&9ÎË2/Å”^C¦âq;ñè&;ý¢u"áóÒzY”«ºæ÷Eÿ+ߣÉn]ì}IÂP‘Lxœö¼P뎌H°~áñQ›â"È—å ‚#•%­­>Š¾YžÚ5–dPP@<¨Mq³ü_¸†Ä䌌GU[H¡%2—HFÃ+ž|D¯U¯;zÙ)$#žý} SlÁ"!“#¦‚õ1þîÓSf¥‚A2rŠ_ZŽØÆô×8‘µ€©Fzý[*#IÔ€±BJÝdÉ£&–z)Êöšæ¥fè$c°P5B^5«‹–ÿô±«GEU4L#…„GÏ›eHýË¿·^¶C¸ãàãSr…ôŸ€@uÇ…Jæs3áB†Ò?rWØëð1,ás• ïh Ã"ñAɳã:¹zaŸeQ>ýéU÷”¹NÌm"¿Ÿ‚Dd$ô«l™CÏŠ¾ôÛ£¦~jª”>-©Ñˆ¿«ä8–ߤ·ýU³14«ÔIŽ÷S\ùà$»m’_×~ÿðb…‰ŽW´›ÒÛ. >†Ï¼)údXbS½ [y û?~‹ºn™»)WmÉïˆU=çi‹` -铺g‘›ÚH‰% ‡‹!bLn°jX¢•ÿ·) ŸU¸N¦9µjˆMQ³‹‚EZÕo ŸU±û~Ü hbF…&E‚Ù0êUQð -»e_§Œ<&þW4ƪ)…Z¤H2;nÅ*I.¯ä7Ä×ûý¬(Š~Sþ}Ë%<¢Tš!^/[:ÅV똛M7lx@0ùü(%Áé«ÓŽ“Y=Ï×r8©Þæ%–ëqÇá᧊Ý/,;À¨¬„>0üFÉò§U{дÐÀVªzÎCÐ'C{¦Z5»5^RLD¢Òšº`¶$§W>|È-«bUä¢+úm‚‡ !\¼ñûÉß×°J5BV+N¡ÞÞËñæ0@@ˆA -`¤´ˆXUæšA²z3Í9©PP¬yCe Šì……jòÒÑrB€(bÀV«¸ ¥%’(`- TЀԴ5·-!>åß_¬B<”¨X˜>#Õ±h529\TV@ž×ܦ|n‘½Vñì2ïâÙ´LA™~ˆCF&cY©H@ýžš.èb÷äÓÃçzÛ¿¢+!—#\¤x1…òt½ ”š$;žŠãÔ,Ã0‰¹@‘½ yÁh”š>Z¦è–KÉjßé²´ËГ!hXfœÄ`V"ÔnÓ¦¢Ó&ûí9KÕìºìØEäÈ©P>|ŒÏC4ÍÃkÉèÉñM‚)¤OL+Õr*Éò;¦Û#w%µé -× Ej„’×QœÂvå×eV£&/"¯^M[¶ #úœô{‹WÊuË0\FÁì~Š*#ÞÒÑ1¦Ã=N\;F^0¢Ì)DÓ*±p:7GVn‡Þ¤–©7=émÙ-ŸÞ55¿¼Ižd¶×#ýmZÕ%PIn{Fñþ8Ÿqqôœh -J†¥’ݵŽ˜ËEêTZÕüfN“·Žíy¤Um1‘öÖCP¶ï-$‘LŠ$†rÑoN†°§½øš1+Ld"—]Ío‹•ˆFkôâ¹Yók!ìu&—•I‘øÓôÏ’d·U¨B0b&°RL(GÅo -I„‚¥JÉ° -ngN"P´ÜH1aÙ0 -hñu‘^Ÿ!sÅnz?ǽEª)Ók>£ü/.,(R3ZAÃÅK‰³éÓËžàµäª(ÙMyRD?=a„ pc¦ÙJ³à°Jûf˜"Öj4 ±›F‚ÆÄ=À@¢f…fäËæW¤–ÿ)r€ .B&²B¹>(N¿ Ù©k„z×TÛ ˆ­’ÐaÃDTºGðU»3!½I -kÔc„µÃäu‚YRÄè@‚…ã!… …šA}šØáâ@ô`í:¿¢''ÌIDc -¡(}LþÜwO‹Æò™EËpØ€|–Ôé”ß.\Võ.ªQËk#‰dÿÿqÛVNÏ°P0©“ŸÇò9æÑÿV5Å.–’¿MCüš‡¼@¡Ä‹ hV†PÁrcE¤4˯=ŸQ2r’ç¼O2{òÁw˜Än˜ÄF>¹¿¢éÖAùñÉeÓ!W•í7MËÄRÁpûT×{Š¶päǘB&~ŽŠÙ_5o2ô¤'*†û³­ié]kñóÏ’¦ôÓ€ü{&©gÏ(Æ['¤ž2»æÍrít~ÓŒÑò‰n¯ÚÖS’>»ÚçÉ¢ç+)²<Ï=N%Ÿ_ÀL0BP3DLKÄhq/v¼˜xTô…ß·Çý%x¢Ë, ~…Z![½ qµòû.Í•Õj :Dòú¤§O|šFõñ"†ŒÊ¯ó&)D ÈQCæµZLĦ»Iº˜H˜áâS’=¶bwõ®°ù…Ùó5Ç ˆ-Š%;?’ß!u\JÑwë°Ý–rÚk†gP£zÊZƪĢUjyDøù…Ô˘>.¤š*¶=Žä–‘ˆ1é!EF -$T´äX‰‘â÷£ª9bb¤åÁ"ËÁÒ£e¤G $jSß=ÀDРA’eŸÃä%„Š•&v€‘±CŠ˜Süªjù.^J#ÖüŽø¸l¯YB> hçÑBÒbv—¢ŠÈ![¹üüLHoÁÁœ>(!¦ôË”þÒ»þlš‚…jñJÑ´L4¯R™Šé7Ýṣ˴Tûšúlsј~¢ý¥§Gú¹ÅÛ"<^z[·ÛJ0kâÁU°H-\'“|†Ùïë“˨Èbd%òÙ=hù£âÈýê0QàF -!\ĨX…ZB¾È +ᦇ–”ž^ñÜ0¢žÔƒV3ÖÛ5`P^¼.Ãg‘RÇ*Áëªn]5¼âyiaB¢Ò* ‡ !Tȼi½p™v°ˆ¤`™Fü]FJ ”“¨ ʆءv ¡"¦…ËÄê?.Ê¢@‹’?ôÒg(« bF‚HÙx¡Drº³)ú…!S¹ˆú’¹c—ÌÆxÚ¥Ï'˜Qâšy±VxMó"ÝX¡ÒbäÅ2úCü}•×,PF~€AÆ﨡¢€ ‚Xºz‘b rÆ(@AÁwëîúijøE?±ŽÅ­`~²ejù‰ï–ª‰ä­ - ´Í¾ - èŒP•çÍZ¢²˜?Ýý‰ØŸ~Az[Á&ÒCjüñAèöYÞ1ð½-­X0¹+¿ƒ¯?EÉlÓ筿Юú3ô$ò»p’ûË&ËpÖ>­¼Kc¤I¾6y·î¼Øâ­‡NðÿÚ¤Üeó2‹sé˜8ÁûÛ.eòœ“[¸ËbÅÞo¶0“¿p^jå^†‘M8ß·ÅLÞÂó’•oA¬|‚û×.ÎðJ› -ük1Ò î7»,“³ø\´ò.Œ•&ø^Úåܲób‹·0L8Áÿj—fpWÍɬœ‹cÅ ïo›”ÁWsNná.‹Ox¯Ù þÚy©•{F6ÁùÞ.fxkžKV¾±òIî[›8Ã+o.´ò/ÄJ'¹Ÿì² Îúó¢Å»dLšàûi“gpË΋­¼Å0á$ÿ£=`µFF-<Ž“zµ èx'€#xOÒÀÜ -,¶3 é‡Ô-) ¯Ú‹à)ð”á€õM°sm@Æ~”а@{‘îf ࣞK9<0ÇHy½ h¼'€& œGÒÀl6æ3`ôÂÒ=) WÛŽè8Šá€÷%ØÓmÀb;’ð°@½’ú®pQžOX‡I»Ödü'€’ ´iàl>æ°´ÃæNRD'0Êõ ±]ûü±½ÕíHù¤Uœ¸†œ° -é}d÷.^n,sYQý¶Ç• áCÑíO‘Šý‰,X…èã<š’oŠ×Ý€I÷¸µÆWKIz]$ØÌ6=¼–iDw.­¹HûÁ"o4 Îcà–Ý.×T(§·©Ïó´3 ›WP¬ið<$UÅHQž-¬5pX‡u?è»A\“kö€WÙñ5r 1ÿ½¨DK¬G))ÄÍPŸð^±{`E‹ˆÏágáBÙäCFjbá[øZÉøÈðz¸–âÚtç­ü½©4ìŸbì—:(Zá¤#û›¹!ßÅõ¼päq÷:“M—çÔ¥¿T‚ÐÏl€;V ¹b•¢_‰`ô,ó{Ñò“¤b  k»ß¥Q}E¾Nµ’µI7€ Cø·X¿Q&k¼ÿ€ÛßlÝL„ ¯«ðÚñ(lYîMl’@¨7D~FS’åÊb—¹Cò1²›·Ùßýyã¿‚ÄŸ¤Àך4ÔØÆ¢w-ÞÞÓŒ(•ÕDU‘žÃó%橯¾CU`õxÙ æé—Ð Ñ aÑa´N³‚D+l–pvÇÅi%á2†³µ€³:§Ìäµ;*o§ Üé¦ÇíÄ怚J)].Ë'Ï)‡[ÅJíž ¢¥ÔñâVÚ‚5ieëìJëöjßV0M¥+¦—Ʀí‰ê î½’tŠ5‡ÓÈÀI!1ëÓ[Ÿk–d,Ex…pÿˆ"Yšù2çÔl4#âú5…ÏÌV}wêÿ÷‚¶úïé梺otõ»PÊE¥k ž\‚VWás«FÆÊ7š 1ȈԹpè/­¤èä> õävÍï?•'Ð¥¡ƒLõÚk.€¤[èFð%ru’‚‡ñ—']H@¥"éË܉p€T#"(ù@,rÊ=À³jØa-=g¦>5,²åeD^ïpÉK…ãŒg”ÌZ$gÉ XAÜúaÉy2jƒfªq¬Âs·‡B´¸é`– {böŠ…ìYŸtð¦³]Ðä4ê'ìïy>r‡V@¶X *Á¸šif¡™T[TrM+ ‡Tí ˆuºâIˆ ”Èð!‘ÃÏ/¡9ÐèfTÝ`ë 0ؾ" tk“Iº=™x8›Lìcë¿5Jö­¯ø<´5 ÁmsLNuF{zóáj@ÓTÈ(&¸´„ß;ßtÖÞ[ƒbð'{å\×øaÍÓú“ ÐS«±P´ôFÕ”ȵ<× -SNÝcy+`#@å .õ‰£¨ÔýcoüŠvbWµÐ™¢º79šÖƒPýÙ»ŒjçE0Aô¡gTpa üSÄ]0AJ.™"Y\Ë{–˜èÇ„çQ„Ê-Ïáoft饩’Ž;€µ êD;‘Qþ}Ç[×cåÐè·ÅðÉ¡ãÔ²W§ÉmP$3/‡Ë©Skvõeê m¨hj¯ã¦i—«²u3"ð;›P2©Ô²âfÃ59SHâ_¥JH×ÁhÅ $X -JzaD½Ô  g΄ ,UÎ5Pa`äFO6¬ûГU°'Ô{Ñ®xŽƒ‡Jõ‡ð×GØ°bÍ!‡o8¦¸§I»\ûØ|7u¶Ò·5 Y?£Ýö:ìy³ÍE“`ÆB\Ñ»<ˆS&lÝ µE»dë|òTÁA¦½¢“LJ¹.Q¼LÜÜ€V‰T %æÛbMúgØ—ótà§u_"3‹L#§¬ÖŽ"ÊÑ«ŽAk¢x”/7ÁYy„he °ôÁÕcll¯»Š¡ÿ¸Î“¿7±+n¡É»>þð,_)›u¨X)‡L‘ ‘[®XÒg*W›$(ÕÓ³ëª'Ë~é‹L -÷Ô`°Ïð_|#¡}ö°×¢™¿n“©\r¹YÞH“Эؽ¾IFus1É1”&rÔ?NÊZ`Ñù),|8rÀG%‹´@ÃϽÅÅ@Œ¾ÐQoâ{C¢ÝúÞ‘Í &âÁê§ ÐÈ …m@JsQP:A­•#X 4 71.DÈ `ÀŠ‚gm!Ÿf䌈Þ]®vØ ¤»Î˜cb5Ô?[CÊìJ|nØ9»ÐÖKö³›«àCì—Ç,’ÓêwP…yÆ—bÇÙ‰j¤S™^–ç¤Ìk äYÂ~åŸFB!ˆEHw&mYv¤P·&%¿7-`x’? ÄžYæi#(ò±‹cK‹ÍÁºW#HT™^½.Œ‡¿Â§”DÕ~]ý?A8­ICÖ¢³lª¼’qPÃv?—EVWEnÓ½Ð}PúÏy{_ íÛJÆ„ÈËE 4ÿ@PÑË°f„éï4J£µ -jO(Ù•eÝ@îãnÑ?ß¿ÏǾa@FºL - -Ö n³X„w7ªhÄâ¡V`„ZÅCúÍù\hì ퟉¡ž¾áå’<0C\–€žÙ¶Û4EÒ4û2ŸÂ‹Ëwðe¾…h[|ý§1wx·YðéRἂD GóÜJœœ>’ùÒp0çÛÎøj.ëàÚ¸íЩàY¥Kýd‚èjdùø7†)[ç(G6œëïë´ãkÖl¤Ð¹c~e³ŒLÍ#É* xAJåA4î}­¡ÝãFšg ¾§çˆ2K¢r©€jå8Æð¡·èŒˆØSÚD%};ýøžg„ÏêadÍâQFc›%ˆnœÖ?–e£°I„Z’ª;B÷ðXŒ7M°]”*ÏÄp†œIÎË -©¶sÄäGt\:<—¨geéòn×÷dž{`•usÒ·”‚îTŽŽÈT/l´$²« ¯RÌÀ]¹ÎT°øV Ò*qöaÛÙYãHI†Â 7õ!hj®wŠÞUYáXÐFÚOöm’@GkÙ”EPÏóÍúlF*¸Ceá¯m\ü©¸Í…bÚj¢V{:@cŠœ¿ßð2hØ»ô‹eÓó¿,a¼ÑJ`G"2½ÌÅb÷çÀÒÿ“é{Àe7 ûÉýCÜ€f>|ŒÍHÎvJ¨¦@)Øök ³e‘GVÀÙ)öçY¢A>à>ûÈzð´Œ÷ §Ì0ÀòäG¬pU?u!‘8@EäD>9 ˆì‹Â&’&ꎜŽT^¢-_¿Nÿ¥'' -—uï,Ëô±›Ôn øªŠÇÍTL Ï -†²°lrÅr? àß÷ó•[æQŽ‡t’•¨µÓeä ->Å¿Ëõ'ȸt^PÖ'+cîÔgE•Í£&äî}J©«áPªN1~ƒ°ß0àC¼8Vm¶hJÄÈÜJÓ`°D[{ûª:ö‹V7Œ|p‚ª¡,Á‰KAU@  -öÂSH‰€dwG¨º‹ Éfû¸Π7§b#´ )fÿ‘ò2¾>C1†¤$r*•H?·œEÒ*fX3úC~%!±9 -j“³s9ˆï¡VZèüöjc!íÏåùÎ.°eEÏÉ?OWn÷~=w„ôƒCODeE1@­ª˜âDAIK²€g: Ï‰c—Ô!uÍJˤ;)€Q©&ŠEßãíH¯ féSË0Øj˜ÙVDÇ.ò¶ ŒžôÒ¸Ö°}Ö2²pï6¼|Á²é,—SnÔ‰­†%ðm‹Z{ @¾`]ýœØ#Ô\懆ûŠô=rw<Ÿùî-ˆL~¨]¹èY;%Õ’•n¼|o¥U@UÊƉò» -ƨ7f;ðj ü" !™ˆ8: -²_нÂ7IHä'nÝ3á÷x>¿²t-œÃü¸ â’Ú£,«aQN$ˆäâ®FÓî;(Ù[q“J^êcFäͶn -ø°íÈXØ ¸xÕ×d˜5µ­^åÿñøátç‚.ˆ²3þø#€ëú`Ä·¯Œ;A»hì®ú,÷À{œ:¤¯H…ËÍí³ŸÛz@÷ÎÀOéÆH"M¤÷(æŠó÷jX+³ó &iE˜ÌSV^…ë:Y›ÕudˇXC†_ð8KºÐ?°†£‡“À¢L_bºì-ú[L,ü‚>@{ºA¥«ðøwê-ú!RÜô#ã1’uŸ‘ÿƇŒk{ÃbRè;™uÈFxÒ 1LŠN,G5©†69æ5îIBóp"–…H-0?’w:6 \ß"ñ,R– Å#KVjsp@E¯˜ìÖ÷lÉè¢ãm<’@&lŠ6­˜ -\„xN -~TÏÑh„YÏvðru°ÚY鯑¨0[:¾ÀÜ.;jÝöÆt¿´}½á™µsHË& Mêüû•„¸ˆñ÷dTÅTÒ­ß¿$á¿ô¨_ â—=å-‹å8úb(5ÏçÈcäKÞˆFk€ka6ŽpP €Ž®–£_®¯P°ãÙÖ/' Jü£s<=l ¨j±i[ê×õÍÅä&G„öLZÜÙ:WÄÐ[Œ =AÔ›ƒ‡/ñ&©®Þí꼇,ÚPœ)b¾[en"ˆ€@GHLüvkÜÞ·ÐúïàeÁß1ÜMyӪƿpp¤OùCA•çüB¤Äç šÙÉ9ÉÕ®°†«eMr L°ÜI^N3²c¥ÐÍC7‘$K\LÙçH|•G$?>ž›ƒUÒ•qæå¯|}?V}­À>ŠF Z¿ŸQÛ ]Üý˜{2rá1¡n b™@¯uòMdz -g´³”ÈјQü—î<ëù `†=ù{09ˆ³9ñö¾Ùö¢YþæÔ*¸¤¥óU ýƒ)¢øaø[”<ïy¿¶–ñæ‹yž¶‰5”ëWg‡ýÈ5{Cݯ%J‰–z?‡ñ†XX(%L‡MC³å¬p'e­?aƒ:ÿ S¥OBŠWÇÙM Àƒ”«|Ž©¾Æÿ¢éþÇA½â°ÇnâJeÔl~õX›ŒÖG+Wªâü¾Í(ì¦! –Ï‹¤L³KEô dh£Z ¸Úh6<Ä{šGS‘‘ -³Ü"©–"– ,‘jÍŽ¢¼2“ÄBƒêy/ ç‡õXˆo­æȈ‹¡•Ž’ë}óÆÁÙ‚iºö—o–xæH}&K@7°@Î JMÚ kä@f°ó¡a^áÕ?ÏßAV•Î(ÃçÅÒ`°J\*TØF|¼È¡GÜ’êÚƾì/§ÛèØsÓϼ*ß\7zíH8:Ôzî Ë·Š[ÞòCéÏ‚°ær¹C¯ý³à@Ùõ_g«Eo]ê\;Ø9¤iѸôM¨s®X&U¯¡ì3Í—Çn•“×I»ìäm>øÐÕ——ÛÜŸ+@ómû¤+7JÇPœûÂœÔô1"˜ÑP@˜Ù×1Œ–Ü4ƒ Ì•I¸NÔ/`Œ)U‘Âd­‚ÓÒæTýó; »§*iäEå…ý9iö /5vqÐ>_D×/®?UÜÃó%jPn‰yÛF“íÅt©èûákwYEîÑç% Å䂃ÜìjÝ]q?Úÿ3ŵ…$ V’­€Œœð7î#iX7€"9ìæíD2¾ÛUÜGƒê5Â!1qÖ:¢º¡…Ì÷Zf§?Dœ T‚Öપýï©plY'OL¬w Š>pè aÛ( 0 -jò>ø®7]-L}‹ú¯Ui¤‚5?®^O[qm;(kd¦f˛СñÒu.%LnZ©†ñÂ5eV)ç(É éu<!jrÃXµ_.›? "ÞÂY¢}ëÂghÖŠìÛÇ\Yðæ½åŽî7EꬼÁÿ‘÷ ×"|/ÜvìNÝÑW»‹¯I²¸íÂ…c6î¤#àŽÆG -Ð;:q‘´ÄÅh—¡R‡„«Õ7àD2}W*êAè 1„f®Š…5]y¯ƒhQƒØZ ›ì°½¸Ü}k^¶ñÿ±9aþPp©UÉÎù9h¢›æ7tWK1l’½a[Ñ’ò28‚ÃtÙ0ÃhÀÑÛ0u¼ÑC'wÖê -¬î¾mzš†NBRßÃ`W,52„o…–:kìIþæÉ0È~Îlk÷¬^‹À3t‡À?º0-ã~;$†Z9¹nÏùE»vËwx椈àÉð$‘¨hFƒËÉHwÄñ÷lr;¥xðÒ_Oº7‚§ Úlxyd 4sÊM "Ø€þ+°ñ?#ÊF5-œæ$UøüIG‘ÛØöKÊÐ0y£P äß&ÆšÌFx@ÃßUô¤ùñ/â$AÏ6là<Ð -ž–å•TÜã6Ïn¦¢sµZ7`ŸÂ”7—OMªñ3¼P±Èô -±Pv†b”?"e¼¡Ð.aBrÆ!~]¢¢p`AÇ#N<“Ü^^µ«Œ‘ƃÞiø Wëþ¨bÔÝ5B?X³|yä:Eª[å|'úçO«@+àSÚûï×L‰îˆ ¡ðjm£Âëä­B -Íæu2JUSØ¥ZÍûAsGoqóFZ£+éÄ’_7¬fÈÇNYYûe•ˆ†:5EÑ ‡ù7ª·Þ˜vãþgÇ—Ž8È„ÇÏÂW Š`lE­:ÛÕƒ­Ý§ƒ<Päó“pƒg€‘Ê@s„e}Õœ5ÓÇ•gUíˆç`ÄŒ,ôáI6%×y_ø ÿ·/¬TþX:#tLÂc 4`¢¶£tÐ —bE‡ÔcÄ›Jð¤ÀæÔ@ª³!3gÊk }–T}AAõv½„ª®R‘ä8ïY5ÂþJ"D0`Ñl=dþ«~¤Á ñw.“²-¥Òœ"Ûw`¬…+šã¨./nŸfÛ:ÛF!!ÅäÆ*Y˘;l4@p-Q{ÁÄú)ECšVg@®¢•Kž,0”i1y†–L¥R›b.]hI0¢KÊXë€|'ý`ÎÄÈkBmæy&,ˆ&«~˜À·Z £ñ_³fГâ;p¶—¹``ì¿<³h±†à…°„*(r@ð'lþÇÞz€ÇÑ«—w -œ¹ Ž¯àô¹–Ãz¦|é ¼kŸ3±†ž†ŒÉ ½ò6 ÌU·n“A£`}6û[™r”QáGöçzk}­ÖgvÔr^c®)€ï:[ILèÏ`—]íýï@ÉqÊjQìû ßø¯ªq€¾ï§¿‚ÉËc… Íºô}¨¶ZúÔ žúæÊ:·/ÍÇ\ª)ó ¶ÈÊ÷Ó·ûªÒ ¼z.O›¥ð1²¿5‘È3Ô˜ tãßýéZ8F0FøEŽ÷/i§fûˆr >l)¹ÔÙ·\àŠÇý³ò0ãä: 8º"u‚9¡V–BÊ6qKÔüÉës„[m;ºL~à-uNWŽm©´[ötŠ¼Kw‹M>ÌâEzï'Å@µ†‘Ñ¢{•JšHb÷M¶Šip{õ†z¡@Ø|àk1ùl1a;‚3®¸Ä ZÇ8ÐÐJf.½™,†_àø¦`'H±€èTŽ}¼wÛ`ŒûÎú†_ʼn#.çnÒä­&°j¤#êð17µ8M³ª}ŽtBÛ¦1x¤Do•3S "_Ð)'ŠÙ=xz–Tôò6¯eÅ׆›½Åf³j„bôG’Žæ¦¸A.ÀÚeÑA–ôÐŒ|2•„²AÈñÇŸ -صN¼)Í¥ÔÐ{»ÏÑ@ç<>(Q®±á¿Ü‹} -éYÞ]#~¯tV^xIn¯IÉVü¼ÌHõ^íù\,ß’œ -yKøzª“¢Ý™áh]_Fa0 Dä"(BîO0ÙDꉢúX+dqu¤ÌØÃœŒ]{kYK?m×Z-´‹|,ÕR—€ãûxHÐÃ;ò…6Îu×X§¸[iZòö,“rä.|av£Aº¬WR{ˆ6fq6nýÞ%0 åKΙ“êpÔ˜+òæˆÂ8i)×óVËF!Ÿª“˜Of¥ rœ1™@/Îü]V‹55“‹5ÂjǬË7DD½žõgÔ^u!Rcû8Ý`Ù@‘aì#lÏnÂÖi âÚŸÕ’„ 3µÿÕ -¹îË©ôÇ¢û 20†‰yZ56éÅE–["~ÉùµË9{§*sj²Òº1°Ÿ"ñ§2h–TEÐy9›K»<ÔVRÑ"iâ’™È+›I¢4è?÷c÷òó(ÿ*CNÇ6‘ÁJY×áAbÀ›ŽB ö½,q»>œC‡b…Á]^GÜñ5~­I‰“3Å"qëÊÜÇ·¥1—Y€'˜'%ÛÖð,þyþŠÁ¯ ÒÈþ÷Êsi&ëŠÂkÙA`Uqšr Öê/ˆøDùf“ÎÍj7+„á1%ZRè?0Iå.ƒÅ#.VŒ©‘c€Ì¹sÑ·Ðû›-·ûí¿úç”ìÆÅ,©x*9·ïF覱Æ1Äš †ùaÖ·œN‡ðNp: »X~¬ký†ãmò7€f"i]{ÌÍ!ŒRâÒ]̆~þ“Tã"™akE˜Éª$ùµlŸ¶Ê'†Ë6 ßó}ã<Ã…nÓþ¼IéE‰ûõ"Ž=¨½A÷£Ú©©î ‰dO€Ù„#íQRýÛÙßE"ty6Ðc1{óË£%¸ó‘¢ØU"/µ…O¨îë­¡¯V}—“2ÝϦ/¸ÈHùN¯l._Õÿ%V<­0'%[r)÷wUZJhö]Þ4lÆqÑþû¿<ÇK -lµðêå3í~í¬Ó‹¾Ù‘‚ëÓ—‡žöãpuÀÐ@CîÁ°süäþg¸AT]ÒÖó]2}þ‘GJNÏb¦Ö?7Ñ-ß•;õ ™!üB&ÄÀKðÐT¸‡T·fºÍÖT…³þ¯~4Ên»ìÚÓ4ªäTvqz4,ñûÿ4‘OTÖed ‚>QÝw pd~+jC±LÒµqËXÀ>@½ìôêMæ0”¡ €'ãòjmS݉"?W˜žs@‚%T©.'+4–ãÉq–4ß îÊÇ}«K™É&<£Q… -­‡~~±è…MøJ£°òY®‘¸ƒdz ÓÝ=‚Zl¦È.KæŒ+Þû'8°õ©Kœƒ¨_ɬÜVÄ\óPi3׎CÏÞeÆ\x­E¾pyÒ{,Ö;z(É凵âRÄ€ \ Ø/,¼™†gú§ZèÕ¸°nÄ…]¹Õ&¶vu8×ãvôßøù<±Dšm‰º±†¶gGÛÁUj*Á’аH5L ƒ“Ù[±ß´÷c•B-UÑÚD•ìˆ'‡\ô2§¡k¤ Ú7_]‚žé%‰¼ð9o «”‹çVVpÒꚤ&gŒfº ãeɱýRÓ+¢ÇÉŽW(¹U{Ó4;Ÿû|_– ¢H® þž¥á0kHkC÷æ†ÈF'…XŠ Î-3ô† C­&ñP™^¡=$‘\c*CøÔIÙ+•<%¤Ó"×úy§’ì!ªÁQÝO·þDåB]ÿ® ï} ‡"ïÞn}‚éOèN gºAÌÇB”°íÑ?:–Á]Ö{SÃ:ƒü•qB¤TõCuw":œn@š¦ÑÞ:§}¹VT”],‹ù|»‹ÔÜ\^eù½QsyŸr7Ôø¹x43Ƨ( H<›$Ѓž -JwÌ=.ø±÷0#æhÃ’ƷəޑÐ->8 •î”óÈ;ä䬄“fÑ…÷^þ6ýs·B’d¹Þ`‚J1õÎÔ)$÷ÒÁ5V k“~Ú}›Yi‘eÊÚ»£ -þ…ÚâW`5Œô|$ì'¢2ç»ïÛ¥)r}HeçkvÿƒÙç Óó´|R¢hJhËU¢cjŸÚÜSí=¾ÍÑ7Ù!­ŒÁØw¢¸Ò-Ù¡eñ'ÿòæ[ã@~Ó”D5˜Pé&‡²"CáíÆçtnRO/^/Ó€£,Äÿopë{¬ÏyDÔHE­×Ñ0Xåü\ësø¤àæz÷¸LŽ‚ßw>E -^—uÝî囆&—y}·e\&En×Ðä(fRì27 -ÅÌL.ç¾îË)ú:—q^FFÆil›÷ó™{ßqž×y½Æ®o¾¦…?sËûž…¬ËÌäòŽïº\SÏìüŽ÷)z¿îinïuY÷}¹—‘ÉeÛ®QÈ}.< ±„A†á‘–<ÔFÀütPäF³ PmC/"ú”(Cõ=xÆ v)†‚2aðø|™&Ê,Ö-BA,Ú ¤'àĆáÏ ù{ÝÒŠ™)èc3ýW1s¨áP £PÂkãæÆÈPC³‚¯¦JP¡ U¿3tߘ" )~ðGC¾8?ùƒdž€1¨í€þ霟Ơî´\O÷ 5è üÇIL‚p¨OÍáü´Pž¢Ÿ@AŸrý«K -·ãî,WT1L6c207c9f-b550-439b-a979-e55391cc944cd0253d62-db67-404c-93a4-bdddebdc43d92788m10SVGFil/ : -/XMLNode(fxmlnode-nodenam1t/ArrayeTurbulenc;childrenresult2attribute(turnodevalu; ,2numOctaves2baseFrequency20.0stitchTilnoS, /feComposite1inSourceGraphiinoped)AI_Alfa_1idw100%xxyyhobject/Def ;fractalNois44Morphologyadius1.anndilabbnOffse1d2-dyb220DisplacementMap1s2(33byChannelSelAxRxMatri10 0 144m3GaussianBlur1anim1from2beg0sd25fillfreeztotorestar2alwayadditiv2recalcModlineaaccumunonNstdDevi558ccccc108cccc1ccccccMerg1N1bBrisaSua1-5-4Desenfoquo_77nilatar_663erEros60.remov0.repeatD2(indefinNcAI_Estátic11 1;20 15;200 200; 15 20;1 1 spliRbcOukkkk1k13404arithmetJuegoDePíxeles50 5;20 20;DiffuseLighting15yellow;green;blue;indigo;violet;red;oranl-colDistantLazimu8elev2(6dConsurfaceS51feSpecular‚Ш‚­LFD‚2 „"ƒ0ÍjK)æP( 1„B‡@ Ä0c5È0RؘXMj×XfûÒ2¢Ñµ"«y¡ÊD¹QÐá2WÖe)AsŒÝOÓ—¨OˆLà Þ&:å—5|o~ÖŽsAÇ™#¬ó(=`"ú~Ü}â®äÙ›Y¹úÛ~ƒ{íÖ45¥«Èã †ÆãíÂ{´Ø€äK‰wãÔö6õ¥r¯ ¹²¬-ÃÈÂݨî2Drj¦ haA:.òá(µùµ-N"cê þ+œy*ŸÖ¯ÒkÞÝyÊ@ ¬•× èl]~´ºlAGš¦¯ß*ðáÈËÈÚ´—‹™Dðxd™¤°ÜÀ@ž÷¬bL†¨×]¯¶re0¤ŠèÎÏeV-[ ÛGsõöùÔç1Po/oË S#²n§5*á6œ¹*ó{)ŽÁ“!ô¯ g\vàQrÃÖµLN¹êJKSž§Òe–°ÛÑ ÝÈ’°ÚCí´õe¬Å6•ÕeBsíåÍý~€ëÔ,Òp¤Ä»­¥lW\&/²u¶&eØÒeWç gèE…6G#!R&ý†„ïkL}ÕK zX$Ù¨€âéÄ`raîîF˜‡þž?,°–ïà ÝŶC‘Í;»2¡‘mR\P½ß¹Ä‰Ž°ý¼È›¦Ô¼MˆòÄg¦º¡h@ÍG¿õÒç;¡åöšžã-bbÄ„RpšÕ´æN!PG7PH¨º¨:lVÍÁŒÈ±Ñ¾‹5rôkÕ‰(›úõl7©¦4© []ÌDˆ‹€.Ú‰PVO¬Çã™+]íðÈëL ¨Ä »…PJ.ÌE‚óDô¥M/nØuœ,´Rkåe¨ÒÔä6©ò.ß;~’/Ž!¬VV°ƒÈôb›uáE…Å4Tn?ÿd -¤48H,¦Πü¤ÌOÁ¯ùÉú䟂rùšÿ‚ù) ªõ”WÑ0} -×[\€{B‰2ýó/A±} ÖªJ‰-3@iÄÿ8Üÿÿÿÿ ²ÞÞ÷ï‡@‹û·û„:éyP0-R·V ¤¤¤Lù‡òÊÿÁ'yO±É+Z¦l}Ó†o–ÒÍŽp£Í?V‡´º‘eÄLyg¥ÜJ/ÇéÅÎŦ4±«`Û[îö¤*f&üÅœ÷͇~+ª ÖÍ–ŽÏM5;½{›¥-žrGð¶nОŸ‹^{‰µ—x~L7b[Hü=vi¯Ò‰0³2ÅÅËrQÊ*áÑOG0¯‡£ÄbCÿØ‹rFô†3÷:µ²#ûÏ2qÛ\—ðg¿*ë¢f:Â8H/¢˜b‚o´ÓJJVÑoKC;Â8îmLýªÕ›¢¹õ[ÙÌÝœ ß.|C?áçoªßQŽXÕßöÂ’'VFy9m9EGщa±0+æaòÛÑlÏX{ª#Œ†ü SÚ[,Ž”#øѽD^ªU¹±Ë÷¡ê™xî'y{ÑŠv'‘Y^VzÄVô‘\Õ±:»ÃûÏ«EycFâ»ÑÉÝꎤåžx„³¿åyôlägè|%¦ºaº³ÍmÄX™îöI­¹ÑŽ`ËÎ5Éß'–fú¥w™TÉîktµ¢K^ÈFì¢uKW×…ÔaÔ‘ÒÛž’"Œ†ßÑXàp@‚ @Àƒƒà˜°€ 0@¡X°v%•„qˆsŽœÍ‘N³%•œ Â8~i#Í£tŒ9Æ›GEuƒ0áEyI/={#_RÂ8FÆ¡?µ MRé§H7§L|9ü¨TWCh‚Iã„Rø† FÃoªDÐàÀ€ ,p¨Ð ³×,,`ƒE½ 8D¨   vgùCªµ¦†iKä:úfJélS -I:é+Â%DD -$þ*)…¢š0!h7ÙIEBTGTž‰?ÂH,]&ÓiQ6ŸÚ™ÙvÚZUTu,~Væ‹U[Ñ(TÓaí寎´a(„hLjV¢jV0(›¡ÂHЦìQrJg’%iU´¢#!\²—F¬×ñK>Ñøüeÿþùè}ÕÓ ñîÄ–¿‘=·è¿¨\ZåLöì§D ¾rmÚ[±à!% -â¢>§×¨&—º¦LÌr–þÈ%¦’ª‰Ùäº +õ;¡Z¦mý° ø(˩·úSëí’Y¹o/~F-Ȳʗ}(_*ë“–KâU®êæåúG›¤K´1™Âd·³8ae:£A5“>ý¹IËëíµì7üŠ2ÜÊ?ƒ¤žúd)ÕS»!ÈÝAŠÏžNÙðg¦8K79Û…ÓKM8b˜ÐƾÀ8ñÊÚ„‰¦YÉfa(ª%ÍšŠFƒtÉòi¾¯ŒµÍ -±ÑØPÁïZ›º¹FK÷ëþQÜÅ^÷1Z-â>þa0À ëoldl„a4ürZI+»Èü¥\„¡È¦Bl¹rÑ&.öîuoKMÁ;}&Wß‹jÚdËòý£š»pƒã)›£Ä=GŸ´©}î¶ÑÉÿŽJ¯·öù^Å+UåÏyõ¥hm[x`ˆàÁ @~ 0›äÝ‘ -Û–lÊUæï¶ aÃxÒŠ-váÅ·¼‘Ó~fŠ0ŽÃFß”—¿Ý‹¸:rÊÒ™©]g„ÝT#™G3üŽhßñ·m…oî“&¦Ì\S—dC%½¦Fz:“{õùô#Ä»+k²;Þ Wn¬—zÊ‘´9ããæÈžæ®|M,vcIJUËlj|9£=Ùws.·$¼Må=ñMðû—Êr>jZûÝÎÝ+ViÚfÛióóö×4îêz½Ñò‡Öig×ߎïÇÿîÙjzkÅ4eL=SÄk<äÔZV»NfDU®¶\VîÌ£’V"ßëËX™¨kiI¸\f¤lm…V¥™TwW­§¶ó혊«šuqKût«Ö¸Œ±Ž?ƒ0$ð€\J–·±ÔìÚÿf®ýû·bZªH` -Ž 4L  ah Ž‡…äÏð§ø*ö=eU -|71Þ}™Î—†˜¢P;–Ñ“8c£¸™Rã½&Q5ËG'o R ÂP J¯Álkn.­?¥âS¬:g½ÏÔÕ?Íx«’±o>‡²bB§›XkšZXTؽ‡v†‹™‹WÔèn¡âÜ çÌŸºIËãÊfUR;jÚí¸²Cµr -¦å½ËL„¡h:íï^²1r/#~ß'½ãØkª:ŽƒP#mq )¬sï÷îÇa’{|µù¼ã8˜.›ãLEÂ8n·›asIsÕ&öŠÉd)åžùDÇžÚQNÃ%(lb³‘‘UéD‘@±VJF Ý£üýø¯)G!qÜ"Œc/iQå(‡ˆ0­#Œ†Ea$äVv´\RKR5”t"Â` ºuÉGKSµlÙííZöõ¾] n½x¸eoÏŠÆy,/âpâhé#s´[Ö¶U‹%u”BO&)·t›’½)qèÓɉæ6ŠÎëê´³I›$“SÑ›Sºßtç„°‰‡ñ¸V»&gWŸ&ÔVCB›¤ ÇÁ§y¶­919ví\¶Y'ò}UÑ -‰cG´²øÈœþ|tëòÌèÍŽK¥›;:MÔOs˜29Ïà“îc<¸G‡ÍÒåÞ´&^gÎÕo6{´“˜aPHðØ ŒÄÝy_£i#i†0(œ‚"ÑV£ÉiP$(&¥Éa>3M®—,+¢÷‘µ'~ŸÃ4:ÂhÖî»®ÝRUõaÀ™¾–ªêúªª´LG·U¸8ꎳøæ.ïï¸ø?&.Zw‹ê‹²:¿«-÷õZ\MæàÎfÆv7EäßÙÝ®±™ÙœùÌܬʣ(3󔈨ˆ ^<þøúÍvûŸêýŽxøìS=ÕSUD½.¥eRf¦¥ås(3Ój)Û,Í®j§§zÚyÏ»§)žZ^ÞïÛšzÏüßoÎ}ênq÷¦¡•rêŸjiiihhiiffhff†fhffhffiif–fi™––ff––––f÷ßݧloÌÕN,¬4¾6"þz¬wffm·»wz§—¹w·È[½ÅѶ5äâ6‘²›2µ{¡‰”y”™¹”™y\¦^Q¦ê ê%/Zñôôõw;ÜÜ=½×—pP­¸Š{Ûj•ûúZ"¢+Þâî*ÈÇgŒû›²é£±.̺¿k·RãêÆÃFmÌìÌsÚ #ãà›Q —‘‘ŸŒÃ<™iolBllÅn¶£åõj‹ºÞ¥®a)**Z*²U•ªêÚÜ1sµÄêfÍ¥@|%ᮡ¡5â" q÷]³&¦ímév±¦¼¶Ù½¼èÍ»<.[Û1´ãUÍÛ3ËŸaÞâíNÒ-igÒíœ5ØŽt%îj/¢QÙ¦•ߢZiVròòq.¦båÏÏ—óǶ­6ä®<%dVÎã»3D¾1¶b'¡Yò }ž|Öx†ÛÉÚÈÖÊ×çÎ3ÃS>;¥"£%A\B°ëzÜsÍJU­ÌF¥ŠÁ¬Q±¿ö;ìâÎbä¢Bn¾|ž©.ó?kî²½Ÿ¨du „ªh £Ð8ŒÇ#²ÑHŠû€·’@h2I³(I”1ÀÈín¤BK»nÛ“š\´€ö í{-î¥ä/’ÔûSç´ }ɽ¹îÓVé—ûÚ€c´ß R±Û$”Jî÷® ÌDþ¿²ŽM¬+`KE¿©ôw*=TñR­™]5ZqÏ*¸óÜ–pÆ}_hM£S¹T¯ØæÆî^þ¯«ñ¡ÿ7óµÒkÅÄXþy b-÷>¦(äþg ãYSf §‹r˜Ž)ì* ]½m… Ö0<ô´Ð…+% X@”ÜN‹!r K*¿yC -©×ûþ¹ðAI¼HKÅ’zÿ! Eép%æU0fºGŒsñÝ`¸|Quª2Ì+€6öå~WEûY³šZœ ˆ¤\g]ªêiM¯5Œ<}7]½ºTßNta`Z¦·ìÕ¼œg°Ã˜1Ú¶^¢Y¬e±¸R”²n¡0ÏŸ}•À0(Îêw1.¦À Âö 5 —dòïým–•á^)s -ñåar Ìò‹¤·[ æLbt7kRð¢ YI-KÒò˜ŒT¢É‘ã8m‡ñ"Uϸ‚åÇ‘§ç-Ïéƒ"³ç¡Á€ žÁú”NÑ!MÓA(Sº—ŸÚš0r—²4¢ë02žÍ ¶ÆO¥=É^ óË3‰g;‘Ê{šŒ2út½#^‚‚ÿ:`c#„òœ? !gªF©Ó}±³ _¬œ iþßR7ffªƒ/•ÕÞ=TbÌ•³ÒµbuÏàþ•ï+cÕsÇò÷;]Öš4"O¼ XÄ[ëù]c'è7š£)‚äj¤$‰B ÎŸ*iH"Öš_« ÷d`²Æ„WŠ˜Ð¼óA‘¢^"` —:;‰¤wŠ}„‡¹wEœ#©Ûœ<òúQw¤• --Ÿ—‘ÿanO"*hÌÆX<õSS‹òK÷ü¸¿„ÀœîÊU걤@@=ѵ‚¸‘*ÏcAÒ[T Jv©©r\69UtKç6“ÖÈ“Qu$U__‰Ÿ,u¼jâÊ›yz|ƒ¿=nÆPû˜qÓ!#Š -Ô$^’rX×bhÍø&þ‚†_÷ëIõ8~)™|qéÌÒõ£p²õx YF~ •%ÔƒHuÔ¼§óHÂ`£´ xÖ¥4&aL(œ óúçõhàº@RŒ…5¤o8·JsÁ¤À²;ËiÚ2­µ¼ÎZÄ•˜™¹8sXâÌÃhƒ£›ËþV±›/6Íö±&Üsà0äY6¤Ïî"&*~xÛ´mˆçG·‘â8à„«u&do -É÷h+ÇÛ£‚Ô©ÜLYÀþáÙ½H{ª¼Ï‚õ ·×%ª^”xÞl"6øb¥©ôPke­OZu$V е0X…Î^wm†Dx4Þ6:qC"^†Ù\Ù -ò ŠO#)×kÞ\R_ÄWÅÇí4‚±â“¡àÀ'‡[ˆjøªX+‡&Ö • -Åoó”Õa–ÿúHðÑÆœ®î$‡ë‡Ho]4†Ôø—æŒH1,#Õs>qO´]Ö6úgÃõ> » -ŽÚË{)Èì!™Œè îü\s -Wþuq¶kÌÒ³Wi¸\5ÃZ“1N¸ÂÙ(Ú–• å¹Y¤ï©®ËåÜ¢y™3hs£kñ ô°CFBmËÕÆÖ.â?Žlû}a*Íh5x”kÿ¯W¶>›…åßÄ€kU®6YŒ$?µ¶ÇXá`‹¨Â3Ò–0[có­·Yõ³ì°¶"«ˆÏ±­Ç"×|Ñž«nŒOeœJ~R'Ž¿pƒÁeªn¨ˆ„Ø^&’N2f¢¢ú¥Âü“Ú“zLV`®`ä6b°¯ÙBÅOD"’ýÛºÅe5ñÓÝ«°uMÉÕC"šV ² ó - <ì<¨×Â6D®,E-ìªDC1NøÀ”ˆvz±+ÞÔ2@ÓN1†FQ!3UÕ9ED$w’¹¬š'‚¢?äx_‹ 0PñâÚ@zëâ­Ø…’3U{£¡4².Qxðþ©œóÊu eˆj‡Ó9o^µµ!Ô¡™PÉ!"ð„xf4) Ì©Útù`2äeÈ(Ü ÿv“ Q±9Á¿T!­!‚% f“H5˜Ý ‘6Ä!L§27¦1 ˆËo)YòPU0DÙàùõÖÎMˆŒ¸Ï_œWÚäN“AWE&ʨnˆõ'M•g fh²ÙÒ¸€”"åߢ}ÜøLÒÿZ9Bf"ð4;T^w“Ÿ/}²Þ3YÐ}·K͇„vN‚,Ô3 ® ‘,|SWsšÏ‰¬÷O߀¼]£ÝÙgOVÍ.P’Ôf.LV° {üM´y–m?­” •’…¢fðdÛ†3œsÎJfr&këQ›£Q÷ÎûéPL 3Í0Q®“Mžé ´©ì9Ý™-˜óƒ|dw8ºÉeAí\i¬³Pßl›²eó²œÍ’:ÅÁÆeÆ,˜\'ŧHh¦éËJláÜžnEˆ‘ÆüR`¦e‘ -Ð-¼|Ñïz‘~ÁµNÃv9X¦¾™Æ„<(w–hj?x£dV­ï@ÜŠ´$³Îá×£ŽßÂ`\Í–ßQõ Löå²Ý‚4¼öݺB×iíÝ‚˜%P³/3—U¡Á£4ËLþC$K4sx4 cŽ8ØQÂq+óå¹mB,êj—¿ÆZZpïBÞ±â&¶ð‚if Bþ.ÿP=v½¬$n;$J˜¢N8) t;•šÀ÷3UâBWÄOfͬÖ[Ó/. ¤ -AÇ¢ 3+²_K ®!³nñò%´fpŠ çí¸åkiE– sÑ~˜&æóÙGÚGrVB0Æ·ù¡¼qS˜-á:ñ¿¶Å-¶âJA‘I‰=zS³VÒÑrRÿÈR%õ…€C7-gf•uÞi¿·?HYBò.ìË%>“K4BŒ¿\<ð“Î@ÉV*¡¥ÔVqºÀˆ&Á´¶šÁcµª"죣q±K˜Ou¸–‹‘íìpeB`ÀEGÕÓÜ!$ ¶C¸]n‡ð 'IÁ0Q¬&óhÃ1]“'RŸW—0?ŽkÂ>ÁhêGkà5©Î±‹!•½á°»ºàõB¹ Ðïùæ%NÆËCHóS,ëâ¶FbÈûÿVþ/GF¸fG@ -‘ Bþð¥ÊÂŽ †ð ¢ÔRl ¤4#À²ˆ½*:r:„DÔv7è£öwTÆ"'äíŸ×8Œ6/“\L -õ3r-ÝääÚÑdcü%ioÕyZ ãhðŽ}ÀúENàÑ&/6Æ^ŒÃ!ЧY3‚Xªg!FÔ £ñf‘þØTëlDZœu[|Ùõ]jñBN¤1!°³/ ûÍ…ºë¿ÿ\ä“dÏ4!øu#f€UTl÷Y.®´ÔäTÆ£N?ๆ21/i–^Ëq«v³ãQòmÁ‚£¾iR“׃èH8!&-LÖ`㈠‰ÇYDóÁiN©¼î¨ïËt£K)ÌDÑc8;@Õì•S¢Ê4µýäÔ0‘-Š…É ,Œá› -Ó[jefdíÉñ¾±ùIñ¡´1ñƨäC)½á£¨IQv^å4ƒ"1!„Å\³`ºM_äÇà– ¼æ{ñGðaF©á NŽÃ*Ïó÷’*r¸¢éæ9¥­þAùª^÷ìÂ1ê{£%*þ¤­ ×Ü+áN=ì4¼·ŒŒ@Ѐ¡%Z©ÆøÅ·FŠñ©c*̆dýqÝçÞX903¦UY"¶dÎbÊsOŸšÛÀ¢Miˆ¦cÈ°Ô¡ô³TÎh· Í[£¶¬éòv3«xóv¸b¾#Çu¥šÆ€ÄõÖbÔÄEñ­¦ÁŠÇUûwxW›å΂µeRŒØBÈí"µÈ¶ç¥ðÆúY¨¬^fÑe( Ð~B¦‰W€Âý”é g„ˆ‘/iá‹g]‹é*šËŒÌA•0°IÐ|ÿ5±¯²ÔíÕtÖ'Á\ÿ áå -•aÓu’E}OuÙi~i+†E¯©àÖëK6\¿!=øQjìE¡nŠNdôùE (Š|÷Ë*wîدòÅpÊ ùéX:=3å{nfã€ô½»´VÞä"¬“Ðiq“¯"¶¹–TÝyà‘¿n‘Ö¶lëd™Ù΄›“q\ ÌŠéšp”¥ -ÕF@IÓÅ£h׫ÌNÄÑ΢hb•Ì²7Ô¦ÒÎåÈ–‡ˆÑ^ÃNë((5*—™3[13šÑÌ¡çÔ /Qˆù€¨LŽM l_l©Q “ªæá³A©uýr2Ø\‚’Z3 H}fÑ€8Z–xÖk¥lÕÑÔS‡mŒQy±_ñVÊ•†ùR ?‹SfÛLybêÜa0²”Ò¬ßA}'Æ"1×X0mé…ö$IY¾°2õ¬äPï?(×Z–¼óÿú¡š+1œaXFÌ’Û›—„ˆ¥7b¾\ø"$*[?htÁ›#ãÈHÄNGövÄBæÞÖ13ߢâO8{°hiG `H-¢}Dûo³é»îÒo,Ž¼µÐóS\vò°Lƒ±ð»ï'vJ¶U¨Õ†O’4)†ud†# ÈüÕK^‰†»xàÀmsÿ²Y´oÿ–{H{‘8Ë:/†g[zëlê?]®ì»¥)2ÕTããá”ßa–}áû°*_û¿r_6tûßåié߯Ü»ÛÆÚÆÃÔ1;™N¨Ê§oTˆ!‘¾mI%@B)F‰õ(±9˜°Á~XM¬¹A&ûCók OÌšÄ<”—ˆeÀs3CºÈ²Cø ¬‰:l'bˤ´d¡tÄ®”‰ŸLLñ„‰ÓªdÝ2¿}C@èð)š$Îoð87+‡³¿6TäÖ}– óþŒD:±È²æuÒNž _oѸñF„i"úY\qM®‡íÓš„óvfÎÏöôYhÒ®f« ^Xd/…×ß+l¿¥Q!0iš¦(ú¬HûÎ å>Ó"—ŸNµ%´r_¹¨½“7ãTwpÚ¿òWLj]ó£¼à²˜$V‘ÿØÛÄÎSÞÙ$c8]å½ g„ûtRÌ-á™Ç¡BÕ5pyß—f§¼ñ#8®*šµ+Ä>Ÿ‚õ4•NVYà—¾#+¤Ej&Y:|Ü•oê=¥`ÌÚ*þÝÏ#>3Œ—:qB=雊õ j |(Œ‡ËÙ:éW”?%´Î6Kß‚{„„4¦˜[î4.¢FÈŒ³þzhB? ðó›ÐúOf¹àLõÙùøÀýTÕ€*s|—„a@.öheîeàEÇ2*ûæ° gOßV­™GeQqñW|‚ß­i‘µS*ª¸b‘»\wÇr+>Š&°äuSì6ìÛ¡”P/ƒ²ðhTÎT B^xÏL ÀMÁ‘¤ë !ríñì Ü%UFù|`Ù_%û_Âç~é¬h#žP›/ßì:ò/ì ý£µÈœy·brì·ýƒK‹º~{ÃE–¨X±©Hì'ÄÜéÇÊ9þpÁ² ËXômÇ…o–ZIO à˜OY‰Ú›õ4óK&U™pJnßFƒãú–K TV0Õ/|ãÎí$Ì`Òeÿ^åä©_™"æêûº·¼E@¢ ”4ŽÐ¸—!7Fºj½·rôY>ð\€nHôVMšŸdYVÞff{·?í20µ` âeJfØv‚ ¥°­ŒpÚ“¤„·¶˜I Œ‘÷™”Õ¤š,†–¯ê“Mf×í¼KV–¡?bWÅ·òZ¤  -~ÐÀý¸¯(ïK槢ÇÄoþÄ2@Âè)|øõãIbpÍb|¥Ó( #+«;óÍ ¢„$EPˆ„óV—ó(  S¡Üj–ë5•/WÈÛIÐ9oó°Îc­ýË[~(y€«ù¤$”¯êžñ麡û¡T«ƒÅ‘OG´Ë<½v¬BeA„ù•–YÈR—2³Õ¸xݧãÏ°¿Š&áêR{Úì\$ˆ£§kÎ1”´§ -L9Ž‡ž–ž´bøzÚeZD‚ž–Ç$>ÙÎÀ!C*Î\ÕM¬ÌpÕo¥˜- ’Ôµ >&JûŠR¾$/}áéj5´Œž–·ãé?+Â:ÛàóôóF½SwׄOÀz <ÖehbŒ 世¯h¬pJ»â(”§_¯oxuõáé›ç» ¨CÓ³¯ ˆõÊ  £Ù[u_x1ƒ®•)Ÿè9éð[Nòô€* -­§Åpš²ø=ígjÐ/˜ééõtµfŒ_¯ž~_s¨±b9‚‰ž®‡>-N·S•»ÿ‚AI=0k…€ýJ•Uòez}Z0 -Â> ->hè>mŸê!ÓÆГ”Û~jôÓˆlÅOçA௫̰Ñã‚W™<}騨Èx¡ñ­4yÆ š~!‡Ö”Œ÷ áBTø9á—£6Lo5@ÞÌ -N,rß¡€+Uî¸ò^.~Üp~×HÊü!4Ä<`åOYEÄ4†œø,šÂu“Ô–þ‡þ$’TÚ©wDCåó|(¡Å³’&é´„¶Â(Ú3j+ÕY­^d|E\Ô¶ä®fO*h²åñ-÷Y„Ò#¦;AKØ0*wî»…-¡æ¡V2#(ˆ8Gsä -óØ2ê¿ñIB»v ©ÆpeÉhûxò.ìú ž3’ÿæ³åc 9òë…vò2e²áë½À(sÕ­qO¯Eª-Gk=ÜÞЪuiüÎŽ¹Lz ËÑ™pnüWúÍ3¾›Ô#È \sš`¢aë¼hQ(¿]»:b’q/žµO±#FÛoʪÆlˆŠ8\`‰^=Vß’S©Ž4©Xæ´Âcå}TvLjfå¶e¦S>¦ÆɃJ_cŽäÖÙ¤®Gª^»rÚL¨KËŽ9¯G`C§(¨2‘†Ó8šÃŒÀ1£ÝC9ƒ÷ ´ÓÉÊô¸fo cz$"3²gƒFx,gò‚>M ú7ÃúU¹•ÅßXuO(i딥ûN-Ÿ‚hû®›šÈk´|Ç\œ)øæÁØÚ ×ðCž°…L<ìDÃøƒcî½’o{¥°³ð@ìa5Oµ^ñ<ÈÒ™[áXé5¯§|Dp¸šßŸ™0¬kȆäÜ_òίËcJ.½á œ¸ÝS7:ªäñ\6’ƒ.šØç¤ÿŠ¬½ÉHh§íhÝÍIP®bÑè= þáz’Ý1vˆ„LVÁÈf(.XÀŸ›ŸÉ1FKBíNˆSs„Ô6Ù_B+úêßK -ØàdÝ'3¢·,…KÍûÛ{¨áV£“¤%0çB®Xø˜­bè=Ê>ù^ |Ö‡De’ƒ¡ÄV#ÃÄä¡®$ps,° mgo!S&á"#\éy¯å”8àh^¯$q}úxõ˜ðã%¡p¼Ü-nè¡œ¿€¹rz5,41_‚ñGK9>˜"² 'rcŽ @jf«Îs¿Í™õ»OFRRÀa4‚îŸ)¶‰!Ó>R”=êp©[äTÔ8ÓnrºÝxp`´D2ÂÀ/}^S²"oºÈIˆ<¨¦@®ƒ²ú‹]> ‰ ^iÚÔd÷Z"çNˆÐ :ʾú2Ð>Ïh°47ÓñmUùÚâ…öÞôÍØ`kRøèt¥22ép¢1Ü^ ÖŠ˜“ ¯)_öûœÍ$‹L<ò‡ÿÑœ'‹;6ÿtM<¤ækøÁeüQN‘IF¥¼€‰FL‚™’^„üÖÚ5=Q„P8Hä4Š€ãzf¼±‘ôÍÊ$jÖˆ E hqJ>ä§6ΑPˆtÅÅÀ|#ŒìJ¿|ò ß?ô1£ œ’bä #g…Pÿ¨¬óÝbfãÿ² gœóéîR-P.7›#eÜÙ×-ÙÛ@ïeã˜èî甂òáFš¹°‘B‰úVθ·Žj=×ÙXiÜŠpf«\¢À O¹‹Ü -KÐL”Âtsx·¹Q Ïs+¿M Ž'ŒÒ?×Îé¹ ´CóãÃ_  m3€²ܧ0K­TK‹ q—7¢¨ó0{v ­s)J­ˆXà0ÀQî ž!;A踰_ölz0‡És­]Û(‚š`Ñ1£¦þ[·ëàg» ;k_0|úÙ;X¨áØM!Úƒ”§ÈÖý¼¦ÿr;ƒ›…åoJš£™íõOòqz£: «V’®1µFðÎ{4D»¹óHtò"/mc3o†™Ù‹*²rP*Fn·ÈM• -#ýq–£eZÂ?Å~ådmx’XºRþtw¥Y‰Ðc[!”Þ‘ºpšäQ&à?#6WZ ¿Á~°•ÏÂçz@øÇÏÈÑî€! ªŸtÅ~ØÉâ…ùrÑ×€ÂVñ¶ ƒ‹ËlrwuT)‹.i -RÖI1’Ë´#àb'4Nµ¹eCñàòtO­iÌ'ó¸-ä\t´-ØB^Æóê†je¥@×Ì Ü‚ÍKÎ,y$!«#äÂG$b€T#—I)̓Ñû—oåßÜíQ‡œÂ$£°?ÃhQ_x.=l@Å6­Æié„Ø äÄ°Šÿoô{j‹-`Ó}UŒˆÞN_âÈØÏËŠ/r?ûg’Ë}õe÷ÜYÐÖ³.Þ -ïpYÇb"–f+%/G@P‚9M-¨èïÊ°Qàñ°Ðe€\äëöª¡q?c?ö¾'ÇÇ|?BwW 5͹*uyÎl5mîË—h@íW­×c=B~þlh{3sÖ…o¶áš9êÎýÿ¦ù¸É¨Êd%@±sÕלGã_Õ†—ã,ÇÖäùDZ!½/ Qa¡A9™‰,Ú­¶Í¥Ãîm»Â^,À!˜5KiCZrîÚ*&…¤lL€Çœ<ݲ~‡~ã ’ý%²>šõ´H’#i²Ë‘ …Ж,?“©@;½¶ œ† -™OŒìˆû#­ÏMÁуèŠõmŠ5$PÈÁÅŽØ’BïО"LQ笛h=FxÀµÄSÒŠëàøQpã•¡veË”Z¼Ïö¿ÿ‰¼'_n*ö«’í6€¶û³•*|°x·„P>K¼ú³¢ß­ …žu0n䛓†ùXîz­uwWx—©‰â«HBãNøû˜îÇö_»¡‚­uZû?,`d?V)Rš*oec~ì"¦º1²=LTŠôŒkÛËSëâ”KÉ=¥¯e3#b”PöÈíçªnD,\{êÌœáMÖÓR"ù„¯˜ÐQæÎöuõ’k©ÒJ2²’Á:Ä”4ï¯&òñ" -c_I0¼”ŠÙOigŸ’ÊÑCs«á¦Ã̸CÖ×$õ•”úJ€…iz’)! WaVÿ(¦ )‚ÛïF)@T#ª3sŒC?þŒSž]æ83’¤£M¥ÊÿüÀ9$ÞZd™+üج—#±pk~%*°òö«çÀÆ2}êçÍÙnÉÍÿ«Úõ|övX­[JåíU]šó_ÏH‰6-#‚“¶æ˜v-üµ_d/*Ú]âiÍQ»ùµ-ŽÆJ”ðs•#׸G)^–k ç¯~ýØVÅ›_ -ʺ(Jt*¥íOÆÎfOÚ ©*’O63ÊJ·AO½vvDþ§`¼JˆáZÀdSŽØS-×&A­×ÍõôñjqÍpÐU£_”d€ß ÿ窣ùáAóO´ÑøÍ°Ši{‰øÞü†ù›m<‘aÔÅÐÙ”þþŸ°õF¡œú)"~ä]ET'ê…Ê"ËÆ©–V¶3 Lþ7%¿)+ÑfÞHŽ¯9` H\‚@G °?™Øš÷â<‡‰¯1ÉÓ 4j^Aîh«VsŒÍm“å¾9_B[¸$ñÿ»æbzµ´ó¹X58[ËðZÂ0ÍR¤ÜKÄ°M‘ÛUél—VT lìGMÆzêµF7ëŒ.à'x6¶ö5%£½h{Œ¥Âì´B I(hÞ¢ƒ_bCENˆ£‘û2ˆ9tõkGšH¼ãñ«Ðâ&3™mb,È=À4œöÛPŠTWœÁláÀçsÇ  JïÉhfŽÞ ¹a–’ª9f¬‚ €ÁDèèJ"# ».awR²§üjh%‡A~ŠfOÕfÂ@³|1‘{ ¶öª-/Å¥°\€—Q¾÷¿VWR'úÛå#'¬¦âHøJp‘†;Ž”¯c«¾q; vˆæåáÄ:ÉÚ¼¦y° -Ú  §¾UA]5Á¡Ö|ÿ Ác½oãÈ(ýnÏq[PxF­‰·!´¢oKLìr³†wkŽWÞ˜XŽŒJ“•ÐæU‰™rùuhMKïŠLÎe!iã n^8¨}…-BÔ®…-r§+G\)çevdý_0;€Ø¼o­‘D\æU4lèwöµ -·ðìbH’?"Nï‹ëôCלǔٗ»µeïEÀïo>‹þs­F5C€Ó¬EÑدÊÒηîeø¤Ò¦²þžúÅ°ÜüƒS¹ë’øÂ&^E.íS4/a©¥x™°TÚtcÛ\ }ñšPY#‚ù³˜s_ÓæÉ€ñà¢s É_âdUS#o§¸¡*Gµhù7­¿âë£îg`Å6–‘‹ðEØ{çîÄ°”û,ÜžÍþk¾`Ì!Þû”RA¶uw­ð”ÖÇÃÞ¬«ÉÚùCh3`˽G·)ª=A¶DÌž9ìd s×ÿ˜ -á> Àϸ7â]³ R -ûÒ1Æ=asPKKÌ“‚“q—÷ %HŒ -WU®§šçYªÎgüâÞ$øÞZ×/¼ÔSõCÂAç³a#!-5Æ‘‚&Þ}ü.à 9J¢J1ÁŸägk™â+PøÔ¥û€šHÇ—<ÕÒ'ZÙßÏ;“šXÔ -—P2Ã|‰qy jTÕðIY CjúJ£­e³™H6ý@'D<%«råiZž_õ »šUOLá.†Érn@Qæ5'Ùˆ•rý0Xi‚ª6ÝžÎOê(72¿ª$æ ÜÍ$Ágƒ2¯«^ªeâÒ™|qÐÔ XÚ”ÉØ l%Ç#ñ™ãä»|æ–ü­z7 Æ÷>I¬a0àêfDÚÄà?m'&Ñ¥©X¬ŸÇz;âYmòJ£X)eJ†Jœ´qCk\à @ÇÁ†ª5Ŧ ?ÕÔTh’,„Æ•D¥iùÏùµu'ë)Šœ âÈ …εÍÙŠ&µ*÷qTõhŠš#úFÔäÓ†ML8:(yjvè -XÕtÁ¥È#¼¹¦ „@¸XTcIŠX‘#ŒÊõ_|¦¬ AÔÛWÿAJÙhÇŽ…R—уºa±ˆ.ÏÃMÈL›a4(í)§zêSwc–`Ä Ô7aû®ûQpr"BG9žLÏ}ó‡Cti"ç–ŽHC­Óý;)mNøÇ’ýx³Ú|ëõUëñ[“Ç·üÇ*—œ¨®V tˆ¥…ÒéÈPÚiXâ`kƒ0bë”!/MŒL_KÊFjÐÍ+®/fUß6‰/˜kwAšôÄ`jÓ -2âEZsÔ$$©f>6í`3w…Œ¯¹³$äŒO¿¸Ó•=92:IÆ ŸœÝZzCMî“]âˆOuã°Ñðšc= Ý0¹$ó`R—.ú­e*žfú‰‘Æå¿p JëžÖ¾… =°)ÞxeˆZ½qÃ× îç_E>›½‘†^ð#ÌSáìÏÞlrÁ%ʸÑ;BæfuMµ~¹3]å&ÞDieþœ)~ãL_V*êɃÏÛ¸%ì0¥®Ø”on+u¨:7Qód·Y€ÕÒ‰ë×9ýHú  vVÑ<ÖÓ¾*4/W+ÈQî: -»4>ý®Õ™pÄå‚|e/ÿÙ%Rít>þsß3?ëŸÚ^ÏÛŸ· -èx9 ÷ K“:˜ª«nBà‚IzÒ#ñÑS"B¯6·œu'뤫Tž,ð-’Õeˆg»Tœy<‡ÎØâ"ØkDXwMŒù¹‰_.pùu>.û"³"î·šX•¿&Ú|‚»™bæs¦ a»"’ñ‹Nn§‹´,q{êÝæ%zÐ%[¬á}•L˜'ZŒâhÕÓ.‚|ÏÚÑÿó‘Åï¶$#©Æjf©û\ Ò`€f¢Ì‡f¸WVüs½»¢õL°CDäÅPmw™’a+ìjÙ/ûõÝnüI“W,[öŒ¶'dIßXA-1"ß:]Š¦ÐwÁ./+‡ÌMà¹u÷Eÿ(ª6`s3¯'¨ì<;i*zìÿ»‘²&$ÁÐ -þ…XÑÜ…-½øc]±P\T#F3[fY‹ldS|.5V$qô•>|F¸[AÍù(Œd´(Èâíýs)DÀòÓ[L\Ï=MÖ,ø} ­&ÿpË¡ýpl·˜ä¹1L?Ë!/¾ rÑ=¸䡧›^Hp+ØUKGôØÿTÈRùѾî¦È¡ê«çªdqÀ`Ä”©F¹âVG5Ùeç1S!Jl J|:uk"Öš4kOˆå”»Ú9«Ñd… Í)qQHÊ-Kt$Ð$5 K@ê'ß0ÅÊš)öb9@nŸJ¬œŽÅE5 ¢eº,4£$ëªVAûJ1%äŘXÙS3”Ï•·,ëM@yh±Jž‚ñb| qå °µÂ—ܾ,7J«[›°˜4CõðÍ–—Ät,žþ Àä³á€Ýã_´ ”Y«r|:}­@¸2Ý}UmÉÚBs@DBÌ@»IÃâ©øiš?áÛ‘QšQ”Š¦{úRASa¥>1FëÍI³ÁA ÀÝXÄh Várœ‹×6ƒ)Ë®4K ZD§OK›¨~߶.|¬º¢äoÀ‘_»À° Qü”©!ŒÇžDpCÑN@Ö&"“)”˜Q¬ÁU -‚U{RáSÁñQ+yÃkñž'uã2 -êfæ÷Ž-ˆGò.J–fUâ ˆ…DsÍ]áôÏîzPe¡ÿ cBÿŽ©ò&µ>`Úö{ÎÒ.²q«$nª€g‡àÂì½:óÉ|ý¬@/¥ÜµfŽÔöˆr€Ú‡ØÇ;áòw°ê”òtÄA 0*M½5`h4 ÅQp¢ÑÛÝÖãZ ¥Ùƒ†9BZ!~1¬6ÜL] s¬dìÚÄ{Ç›&«Ô4ÜÓLJ¹\!ÖSÐÒƒÆX„If·èk²â#=·¶ÒVù‰å#Q°Ø›ä$Uç ¡†ôkµîŸɆp”C½æqòí\T† ­{-ÿûx9€R‚«I%+úFùæ˜kñQmPë b$rµ«tW#7¥Ò÷Ńr°@õÚÅÅíˆ#ßÈ›Üc¿T€ÈÓ€`é‰=&_<4ÑNhëq¡E¹RÀqÁÑ€¿”î®X]Úø#D9:¯|ånÌ×7ÛyWòæ$N¢.­Ð+ü†ªýÛhת~µÝô@M/”¢ ·¦ñCN÷ üðIQCpWá;ÏvS`€8'Ú¼ YÓ|¦rÖÄ8˜Ývì ®£”ã‰ý³êH}x¡æÃ"À13±®ïœ4/Ñá¬d#âXåk1%§gkó–™v—K7ÔéýŠ7[Âæ|7MÍI(³X Ê<…•'å~óõ1PºLzCü™Ü|òœ¬¨èF™)¨žæp‹c‚–ã‘¡aê¦Û§I­eF¯€t0ŠOHÎ+v¾t‰:¼CãO¹í‘Á{žùðÅ飧ÖSºxy„‘†œ’¨]¶ŒñCY®xvç|à(BîDSØW†j´,+«Esg‘ü/Á•:Å#7Ë ºËz1Kîè¸ã$‡'Í·å:×:èµWK1MQÎÍÃR)k»?fí¡S%·.tÄy¨.Æ„¨aæBK˜þøÉ,†15 &ó)/¬9¨.O g úˆT ß Cn¯›Þ OëüÛ°@àV h|ù½×œ¹7¾ ältI¸¹I>BKoXÙ©pǬGøž7}¦@lEfGª¥p_µ¹`é{I ¨ãË¿ƒh䩹˜a/Ô:Áéž%ä ²Ã#fm%<ô’@soõ­*ªøÖ›ÔÚó1fÓY(¥1èZ\’L©ò&…¯³œvhýÆ5£eéëÌ„VXw—im:iÃC¬òÄ 1~UºRµtR¢BqiYÅdXzA -²˜ñSBŠQÅ̽_b7'˃0Á"’à¼|0`ÿÞÜ ñ9ý›jxζä‚Ñ(y‡§Š5¿Fðë E ŸÖÖÒ˜pég"‹>„¼Æˆ¥¿CÀ¾XoØ™áØ›µÃ¤+qh Q• "¹ºg‘cãN‰¥ÝB ]„|xwø[aÄ?/+§A:P—ßåµÑmÞPo:x m‡ã¿qÊb¥æçÊÒ %cïÞq‰6žówF IÈhköiPW§˜áÏen„h"º-¯:ªmKxc€ÙÆãl¯êë+øÎ.d¡¾xNC¯ªu`,> -;³¶Î˜/§È©oðÖ…ÀûXVv;ñG -,uFér*þcÙIÔ·džùvb¸’ ¸h]‘ÕÌ•¡BêÐàɆGç»A禧¤Kœ¶?i¬k*{zð¼PÙvs&ËdÁNÈ!™°éú@õ¼p+¹aYV~ܽUãiûöÖVPxžQš±ÁbÞìú¡ÚØiÉ• ×Á¶»íª­×?Òµ¬4O¿¤,_i¨` èÓo)æ Fý-³[•?uîØÑÂÚµŒýrþ:ÔÜŽZ â@ìwŸÙ=§„¿´MªÌ[·5ÃÔMnyåÚQ™·cvÐazFÄ¿þÀYŠ?'ð!ˆw Atgúá·ï´ -¦oî§e´}Q§]Ìòym×~£º š°‰”c‰–›“+d±;TNº„aù¢;¶·…MgíçìÈ´Õke'pfôÑíä,´Ñ^à©ÞàªÁÉ™6¢ìÒ zÖ‹âô¤¿ ê1)¯þp Ü°öeÿM¡FÊ`Za"h2y0EžS2œ—Å9#%´8^8C‡eÝ;uìCÉå1Ô[!¢½ÿÑ`&öÉé%IGŠdL] ©±Ù§*³¤ÿyå9<¡£ x^¢…+— ásŠˆ[}íP€_ó½.š‡§½ôŽ¯ £V¨VHòÃjÉŸÜh(yð>ÞR/ù*§U[t[ÏE‘f‘C­'ùp—GIÂm¸ÐN’EKH›2¤b’R`—ÃH¥ïÕ|\ú#ø0Œî LÏyy$b£ -ÓÐáӼɈhÚŽ†™Û ã:¤Ÿ`‚ϦO:nkeÖ9Wz¸zM÷©G•ù;r$TýyÁÃ(>¦tkaa‘ü-͈ÛT5ËL¥»µLø?À0Å]–|Cgû šNe=ÖJX Œû6ü‡h´Kç\nçRù;8x"¡é÷Ê1É5”ÌŸXº¢}%ì(Ÿb¼hÈáp\a“!À펻Bݹ‘­ëJuðƒþd½ L„¢iUè6ÃUP­Žª: Ö¯›‹3EÒr,åÅÀ"nƒœÓ7e)›h9 êÔÁ6–›ÞãØ\Mù¸–”ëø²hcL™†1ÐÆûåÞjâOŒŽŸ+á,j·!ÏÂåö×ÛßþE¨£·}š*joˆ—Kß¿S™M}Z8„5Ÿ’)6ø;$¦Ò™Ñô¯?¸¦“rh/„³Î0Z2ºàÁõï¼.&ú•‡äL z|r* ³y‰Ò0vsÜvm»2Í銦߱¥"1ú6ÒT"0º³ g÷g"½Tš—ƒL½Íî]xÆEÄ›ÿ[7ÌìÏ¥ü©½®„Î[¼µNNÜã%* ã]†œ’—]9À„w²¯¬l™ªÛ·ò ->ÎûÊÍcaTIàÙV¡+YEö#{ŒÂàð‰w^qÈ–1¤R×àKñSd ô…wþ'doxâè>ú ÿ…µ;kù¹¢ð î˜æTï-ÌFµ Yé '7Ìî|iÿ”éLF°²~ü0ÊÜcðwP„&iTyPfÇ –¹8§Æ{1ù\+b…1]Gk( SY6¬Û H%$R„ g²îjÊÑ<ù°ÓÖ¸SmD–LMaHì\ô•Ô”ÃVÁ¼®3×$‡oúÅŠŒ7À4Àîع‡øÑ=‰6ª(52eE7ë>c³a¶¾ MUé Áþ+ñdÆ¡éˇõç4·V¯\Ž‚Ë%ÓË=À!‹f¾½šN‚ƒÍ[{j| ­ÕªÒâ`w,¹9æ¼Oþa•)ÿüíý`ï`?çÇï 8|®qõýŽÖ‹­Òp7.X´i$Ð f¨÷À¼1CÁ˜ÿnä”唫4æ=ýÖam"hRp|îû - !“Ä•«pw°·Õ\§0X?‡è›7µ ±á Ç3ô÷-uRq:wuuÀ9~<4µ^º-¦@|0m U§wn5šh+ȃÃuõm*Úæ@sF²uðpŠPëWÌê—kÙoôÚ´Òø¯¿".²¬0'ç—rXa’²¶Èþ‘“˜‡½ ŽOÄ4‰J7Ωâ\ âŽZd•¡Ð+„84zŸí—S"àë¡P1‡€‹<æÀŠ TC8·‹V«b  Æä&\u Ë¢$zói•ËÖgP€R&ÍâØÅÃs¦7Iÿª8G3&óFjÎ:=Iì8CzO)¼ „¿ÒÄ¿mepaµôFç'ë'7¡ eñªOd‚èüaA&lOŒêþ ßþvWvSÊ¥HýãÕÃŒgŽ)$)ž¨Àó<7>ÙÆ®†«Œ¿B2M€…sŸQóŽ¬×ýý¡·Øor]›ÇÑ+ï$w•WþÞ+²­Æ“šã «œôw‰FÎrâÁ_È£F ø×Êq„ÍÅE±I‡!xü9‹öÜÞ|0¼–ŠvzpŒ_Ìm1=A•à5éF§¿±À4(í¾¬ZC¤SÐÊ0t{A”:%I=Äeœsç<í 4¯¡úY!ËÆ®øâŒ>Kѳu’aŸ V^öjQËã$™2EK-dšn†çEÈÆR98€s!ªSFG-ìÑ>+EÀùË.á „ &½âW$4 NVÎbÀìµ.Ö׸äØ»s_1˜ÐÞÀe˜$xº2ØßÇõ¾¼`b£´àLû>·Ðå•Õ‹‰»Ñ øãOÄ9J¥…ŦSZoª.ët8‘²?âß5"Ìpo‘O*{’½‹~'pßâ‹U®Î¾ðÚ/lZ$gFKÅw1ýviDC’$¿(oq¢ñ2¨ícЦ}þÎv£0n( =àé¯_gÇ ¶>Ì™áèÁäaVmn¹§µ`†H–£·sX*/¸œ¸i¶~£ýÑÓ1WÞøŠAø·ÉI"¥¥XA‹äÖƒŽªQ½{ø%õÖ —ú73e=¼_frÅ·ŠÏ€1fÕŧ__‚HÒ÷ìgäOXuüÈ>©äò<9,F³?±"‡\X]¤£6ÑD…ÿqö^d‰|lÚç؅fº]Âi–%Ö¼Ù×oùãê8/ ã!ƒÍk(芲Tÿ9†«ŠÐ ß}Æ?!èÀkÛ²,¨!"î“#Œê—I}‹#ç'²•EáÓ16T}™C³¿™¥â1sY[ï&cER+á(Äž3:H:¢uó-€9 -oNÚ7âÔ ¯ÊP Ë;Gâÿÿ,bF&ÜMï Lm*1U4GÊ1Q™´ä/ù¸í¨QåŠUßÇ»µõvIz¼‡SâÖ‰ë§MΉF_Á q³U~ø0i§v¹ÁÛJ$/Šâ5%íÅð%‹z íÔ¥]ùâ~‹¦K¼—Š˜ªyYVUl1gœ0âQiz`Nê{ó“c)$r¨0s-”E– äS`¹þJ$DÑÒõa­ÿ-Ú>ÐÄ5µŽ˜Í×ß$aªHŸ0a m~¡4é¡û"ºß à:\QõÃùnp†/µ ü…ûß°D"2\† ÊÂ$ :£Š²3´(P†÷ØAË¡†aKø„Ãé_¨?( j‚Ï…¨IÛ|Óöö‚’Å9·9Ècœ´òvS04B3ÇGÎ#`p -è“÷±DûŠ¢L¬ LAàwÏ¡j0T!ðån‚…ú†…_˜"FLïÅ -é›hݺ| ÌWc§*!ÈÔn¹4f&SLÌâ!^1–€ö„säaWMÝéœ4ðã“Q€Ã±Á¿3é…p«Ý*ÕBy>ææR8ëúèm!»ÞYˆÒºà@Z‘CT(Ü -B*aˆ‹˜tz­£ñkB‡±Í¿°ù˜ xóûý"ëO9Sö³ÐI\]Õ–l™áÿ‘dÖ 3QBþ«17©3ðõ«Ýãbú#mH—‚·C¦NûðúÙ1Àž<—&°A’;¹ÙÙíìŽpí@ »¢ Wk^v·ƒ!Ø#xeX(¡õ6‡ï(+=˜¨GJb !³A]¯1爙‘×–ñH0+ãRaÉà °íÏ`=Ì3y®p jý!~Š_—m)}„ZHžÃðÄÙœk"¿±ƒk·rÙµ²xÐ+›¼ÀQ ÿ#:8l¾#é»Ê«·ï‹ƒ Ï+t­ÊQp\®Z«,T‰Dœz„8g[„Àͯ€åì樂@ Z|ð%‡1nDðñN©À³ð…9‹Øw2N°T§WH!Y,`LüÙZI¹fè Nï€(H¦îMIéÝÐ’¸ìIÊ]®"lc÷"\4ä•·lƒÞ’`ÑUÝÍÿ®ôt_ÿ‚¨t—ÎJÆÚÏWæ–C -ö¦YNÿ0€-Q”ó× ¡y¼@™gw|½êÒâilILú“Äê)°¢ÿÁ¯ËC<'XϲˆÅȲšCpµJ€ô¹ê¾:z·g´öß°„{ôR9†n%榭«Œ‹átš?§ýy+&v»Ã†’$DÎ -ü]-›Fãå4½‘ìn¡ê †hÊ*ôæö({WB|± (z-kÓߎUµƒVŽóäÃN3ŠHò¢ ÄP^¹&-ucÒ`Ü ÌTÙjÃzt»–Áà'‰Àe±âØŠBÎaÔ¼UµÅ€É—Q±8qèËùˆ›A³ ®Ê¦ž¹Ï´“ðÍJ@kˆFõ0â‘&ê ?ea¢£}`ÜëÔo‘°Ü™Ü´’Ï¿ 2E¦0,Œ͵üÀÂ×,È ‘VÞd­T[zþ5“ž¦¨H) ž-l½TgXàÌÔÃüÁOçŸæ·$¡;1¶Æ³š¢MC£gU­º}ñïáŒC‡ ˆ¯kð·“ ‡a_Œ -+'á´)‘ ºv¨jÿÀ¥Ùt®gƒ¿ù†á•ÊïƒB>¸c¹ Sœ2ì  ß}…ÄÀ€Ïø]´‰'‹ñ“GH †bH ^]TñÂbŸR¡¿aZê2‡rz%‡¨B…o$ª{E‡ÒªÑÆL¥Éª{ÊcÅÎR‘´P£ƒ.{¸ W8¼ šWœôdÊÃX³¹_Ž”4c.zf¸T$¢Bgå"⨥n^ë]ñÐk¼„°¶‰%êƒ7_ o@15Ÿ#KfÇÒ(X›÷œ«À>#ª¡ÿH„¶o-‡4ŽWy½”#ºDüá6}&¯äÂÍX!ˆÝkÎ8àž‘ÛÉíQ'Ê\ÌjcPgìºVi”ÅW:ÿÏxVíÝÒb‡=Çü2!Óym“ÑŒv)702{—a‡·øyo CnƒºÞƒ0™ºÚ tä†:ÕV6b$3ÉE‡—-{º$‰H£½|Mí‘ÕgŽèµ1jëmsd87%%9ÀsµÓVöv‚*è4‚6Á5bqB‘ù€Úòb`9E¤{Ò÷ñlù¯šÐËíd;[] £¸A~Å ã¯ZJ”0Ât€L¤Õ?Å:Û>I¼2obƒ}Âl곪ñã’°×_WEâ¢NŽ F‹ÊU}N[´^žŸ¾F£¦è6‚P„­ÁÔ k“GŽ­Q¶J°#õ7ĪIÒ·šªÃŽ‹ï-DD-ÆîÖHø¦æ+â}ˆrŸå„^ºp×#ý48¼´÷J¼‹¾í®»÷ #x¬¨}í.>~é¤ÜHëv·bpF¤’DÞô_g±Ìmµz¥¼õÐ¥âb1Ç]<À(R"q/|¿»¼­Â‰xtÌ%Ÿ©‰í‹ÁÏ´sé¨]‡oø^Ëÿâ§úÚ,^½Ê·Œ jQu1qo$…Þ KÔ:ò†4ÍDÊá i SÞä>ŒÏºÅÉj€`÷pÉ˨ý{Ûrº…u¹µºxéʃ[t£(X9•¼M:%¿zkV&D@JYäuêšfŽˆ¤*Mêûp£­’÷¹“ß$b±ßïR)õG¸Î˜®Õ…ýœþ×礖ÁGY”zžc…èΰP%¾8†õÀèGé8ä?˜>µ¹q«a…Dãëèõ»Úþéºw|ŒÁÓ/é©zéN=޾ЉcD\4DÅ ´ÐÆ[ãUt;ä¢lQX]7~#²v¨ -´^õ:#ö>Ïw\Ì”«¤ ’dVÒKTG(úþ|2à7¡ºÅT¹¯Í¡NOÍ¡}ª’ÖþD®o¦2¼üµ»É´:=ÌW²ÐxòÏö÷r^L™ÿW{Ÿÿ‘´¯»®m®­ŠUò¿ºB·fk(µd]åª+¶¦09UˆÉŠÆMýHùÌ%ôMq1¹'—@ŒPo¥'°W{H•Ç+§M2¢,ؤýF4F<W-!uM"ÆGб½.6Þå3½hÁ~±8†Z@ µR2ùí$ÅzúG4Êñ¥d舴2„U—ŠÅD®¾¾ Ã È} š‡ í <5Zº5­ÛFÍù¯”ŒËíÿÍ5 \ÖNZƒû®AnÄYÛ¯*i#=4öo,!ødÍô#ºhþ÷÷!F¦}¶) ¶h{(tëÿÕ„Œèæ]ËŸL³Ò½·³Üœñ=ÞT#, -WêPï9=N»uʇBDØôI\ÈÜ!dj6Ç¢Ç0V½-qoW…$w¹LÝU©OUöw‹ŸèñrÔ·lMãÆVxŸ6e/s6Y¢ÛÉù×;¸ç5ôêEÈY^4ùDÙ³Až¸ø1I,¯åÚµÑè²_zNÊxhŽUƒËÐpu˜¶êÅ;¢”Gˆ@hÃ7xæ}¾OÙE„¬Ký˜Rè^R¼ÊzOam­Dù_m˜%”£V™á –‚ ‘ÍŠÜ<Éâêø”èVŠð}’Cã±E1‘U¼XKÇkƒB?!F¨û牋»¬Ò:] ¶r€þ`+^3П‘ -Ñ Ø­•È\áŒÁ<$&`¿Ä6iϳâ<Ù‡ØÒ1ä”ÒY1’(5Ø*’=Ì ±Î‚^¦‰´3¶,Ÿ[¡‡n¶ˆ‹ ‹ p{.ÕíuLÔjçñØ)`¼¸¨°r?!û~¥F/@bì…›1±í`2:ïÉÉDª²¥2)º'´Õ_‘üº¼gE©ÊÆ ‹aгV -@Xn/~òáóÄg5 “s×n@õÒ}N"6j²Íá@Ï -)øå'´ŠìvÐÿ4 (ËW‹Â`E“×ùë"¦RtN”ñ$F¶çÍÜÑÕ 2Ûõm±bJ¡ë*N‚þÖît©ÚÂÑ7‚šVbh¬zBéâ§Bv¬ÞÉ¡®[‰³^C Eì¤Ó?ÿȪzÅ!méu®½Ú4¾Óͺ ¬‡ríöíyèÛÆ‚°gå+uõp£Èâ¡+%º|³ -‰‡ÞÛ•÷ôTVžKWûÜ“¥=d9³5&÷÷MœïÚ)G Hó¹³Y †q¯CúƒŽQïž‚C7jEðùÕfààDu·À7I#?7ÔÁ'Ì©[³%«oÎBï 1ËM¯Žža½_‹8!‹Ý†»{KoVü”5ŠèMzx}ÐõçìR/éõ:KïÔò!h$‚ |€æžÚ‹å  õ‡îÞëÙøÕ#Ý8*?ãzl¢‹9(wƒÀbÙW—|¢P®ß€Ì!‰`)"]JÎûÐ.ë&  VÓ•ðËÁÈ°'Ã㙨u¹¢}AŒb¢ Æ€ê“åq42Ê£W,´ëÅØÃÍ&‘6HÓ·©6{5……2Ù‡ßpÀ9ÂÐ{²¼²šµŒmr|ÁN6q–4h–»RR¡Bô¦ªfyzÀ1Á4«½7+Ôr€8 –á( S8çïw¾¹í½om­íšó{oçþÓ:_Œµ½W[Ìý×Þúo9Çfuà¹ç[ûÆžgª•¨B.›:1LLÏ»sÀz‚!z†äYvR_jV\Q0†gEAR¼I l=½oŠÊJ3%#lâh£¥ Š–‚¨z1ÿØZ|7ZÇ9ïÏV›qϺû¿Û»¿[¶^Ü=þì¾ýúm?+¹º6…C¯†‚¦ZÀÄÄ Ä -”¶pB´•1<HPŒ)VÚJaá( OR,e -A¶ÉJQ.Q8 ´‰ì ÏYèq…)˜–§%EÓv–¿J´……±L7cÓÛ)²íð±(ÇÆQÅNd8ࢫqA129ˆ(9Šøï^K•”à™¦d(ÚÀ p4ÑÐc»:7b¬–),”}"á(‚HqvQ–*1E𻵦0Ñc©‘ªXT*‹Ùz±œ§‡µòLUé ¢,U±HÅ[Œ,a" -rj00U/Y–JŠ ­Š‘7K8@La›ÐX‹K%(I’E±@ñ€T•ž›ÿwÝßz#Šà溹Wí¯öÖ]÷¾µr\sÍõF ‚\1òV¦\ÛÖ­ê¸ -8Á—X -Ç´òº¿[wÿl­6¢XH"Š…Äæš1®)ˆÚ_Œ#Š…dãºq½¶cîýgEÏ­¶Ú[«Åb«­^-G ÉX–_•XÀ3¼I€*8†'§ÒREžÀYx‚JT zÎ’à4ôT¯–ã(ÂÈòu‚2s O³‚¸![ v+HpDí\Ë8‚NõF ¯J,_jÖ]ËYÆÂTµTÉÆÎS=ÃH‚¦JCo'çdyÎÜrm«¡ ÒÐ#oÕÚÎùÆý³ück·÷2¿_ëmqÆo/V,l¾~̯ïX{dwk¯~·Çëïb¼µÿ®åÞwW¬¹µºf­õ½›çì}ÖXw‹;Æìþ¬wæõîÞu߯?®=çÍõýøzŒ»ÍçÞóÆ_®Xt2¯Þ÷›{ÿµ_ŸsÎUkžëÕºwrÕÙ{Œ3ïU{›ý¾Ûf®÷¯<×û÷¶þÞïÌsæ:÷­­þøsž‹ŽçµêuåVs«¹þ¾{ž+÷ºÃ{å}{Û½Åÿ~1Ͽߌ·ö×Ï}îßýõ_ûõžmÿÚßûgû®ÚòÛ}çõÛœW®¹æü»ÿóïr¾=ö}{üÝ]yçŸûìõ½?ÿÏ曹½yãϱÖ_ŒoÇgÿköŸû{·æþêíõ̱çöû_×»­½šÚ˶7ÿïfí}v{9ïü÷¿|ßï{ÚûíáͽË?÷¸ý<ïÿܳ}<{¹Ûïç‹=ïî¸_Þ½œ¿ŽñíÿûcܹÏÜûYãï]ûwÆÞöú÷°ÇÛ»y{l·ÇùÍÙÃëžqöz¾žÏ×jÇ{o­µ‡½ïþ›=ïáÿùl=›µW7ÖUkïz}k×^{]q÷´þßͶóéìaüáܱ7ï¯ç_qW,:;ç‹oö<¾ÿóY±èt̳Î^ízל3ÿú·Ûê»ñ¾xcíÝ}«ÚÞŒ1®›×}Õ\±°ùÊóÕV[m}åøóçÚ·Ï8ÿË;ÿ»ãîsW,:½zÝ­÷¬õ*ï^'ó¿5×üb¯â«+Þšã»­þ;}×û³w{½™s^wÖ=Ûîëå¸kmù­?÷ªíݶæÌ»îUkÝ{½ùþïkïãÝn¬ýÞÿööúæÛË÷úû®û{·ó«»åškÎÿÆ|cïý®œ{ŠE'ïí¹‡ûþç®íö´ýìÖÝÿ¬;×Ún[±ö‹ÎÏvÿìÕþö8¿[g¯Þëíß‹Îþc¯+¶ÿaÞmÇÍ·Ýž÷.¿¾çžuÿýó[÷½½ª?ÏÛ«œW¬/×_çÏn¯â½½ê?Þ^½ú+½½zùöªÿÛÛ˜{—{š{ÕgÅ¢“±îzûÍwç~¿?¿?¿Ÿåùc^;þ>ßÜû:ÿœoÅ¢Ó+Öœ_nñÇùí×~ûöÛµÇ{ok¯zíõ÷t÷ßåÝ«zïÛ½|ÿÿ{¯zïµÏÙgïÕ}µÏ{5co½z»w?~»WmÏŸö\W¯õǹWs÷ºçñ·¹Woçý{usïæ«XÈt÷Þóí½úqïáÉ€Æj Œ…"ì¦ÚÿÖ’«su®n…}éöA¥‹³ÕŸ­9on·µ=_üqÿÙvÞ¿Çœ“íþÞÞ[{¾Z»·Ç=Ö¿ÛjóÖ¿û³ÿÒ8¸ÿk­ývïÙÛŽmûÞ}Ï?ïŽõ×›ßÏíÎ{Œ{þzæ]_muÆŸ­Üý‡Îúk¯wÿ¬ÎÿÚ½m¾ŸçíkÞØö–Jzßkõö¿týÿú㎾_ßl·¿¼ó=ö;óìÖÖúž­åšçý¾ÙÛñ6#P€žõ-Y’ÒÕ¹:W‡.LõÖ*ö™ïo÷õßbï·ÞØ^þu:Û¶)Ž­»çêñÆÛãßÞú|­öún¼¿Ýöþëíý~s°¾ØëþzË=Ï«¶…ÏVܵÅö™_œýµq8Ú^¬qö|÷Žw½œþÿ·ÛâŽ?[9^ãzaœÊm -U[ïUì]<ãÔû%X׫X¼8Š f=Ì7çÿðµ§2’¢í6Š5&ÞB7=K“€OJŽjáøÉO - egˆCDÔ¾öLQq¦bâš‘¢8ª~¾£M¯×ö«÷ÞY۶λsŸ1ìïËyÖ|ó|½»}·°‹¹ÝºÚlmÖ›ÿŽuþ¶ÖøÞ\÷Õwaõ‚öÆZkë±¾ž -ÇtÇ3‡¾Aà8Ž;ÇÝÑÁI€9Žã&NŸÒöbÁ(ˆp2á8„„ã&&&ÌRè¢ÝZ'?Ñ`‰?%8]R"ýàlÂÉq¹Ô0ÉTÌÙ /:Y<9“iq.Nêß>Çu±z¶:ª¥^*Ç‚ï8nHÐü£ÍMy7²¯Å¢h€’¶ICôCMô3 Å”ÏÏ$`ö™˜`ƒÑÒ²”fˆŽj~&âûLH¼ÅÈ› =cçi‚³DC2GÙ‡š—’eJ–°5OÓŒcy¦d +cžÈûRRvÂ^7ôKIìŽjžægû°Çù¿¼óUN(…F¾Ó4í«Œ8Gmv–áŽ& ƒ¡_ìüLÒ/v¾šmv‚¤øúPó³ÁÎ0ÒÐ5afù™„))~6XˆÞNûâ±0_2Y‰ÖNÐ6†±Ò3ÍoLÑØ7¦¨iŽ)šö~Oþÿ~Ùk?Àø…3Ð&~§iÒ¾Ó4ÏïUFØRñ…‚¯ÒDSØwŽ°” Å÷s„•±ïUF˜â(ûb'ŒöÅNX*¦¯2bÀg‚ã(¿Ø Iq”…1QŠá 4¿šmf¦(Xª¤XK²þT‡Ã²„¤XŠ‘`½¶› M ‘«B}TU…ú œêhSñEAqÜT1%7u´©üŽ6¶”‘£WYPÁñeŠ54œ#ø½Êˆ2DÏp@x~¯2â{•ãX¾W1Š´$UáhŠéx3…@TÕKµFŽê½°/EÇ)vR©µ4¡Œ…3U€’/Û†¦à’aH#ØQDÑ6ņ†ž¯´¡¢­Ža¬Ž )Êj‰ÞêÖV’%¬–d% P°Šh-+9ÑÐCŽJ DÅX c`É[%ÃZŽ'S a!YE´VÈp ë ¦b,¬`=Ãc9 ‚(ŠfÑ°†0qÓUý@Ti+au€Hƒ`%oõc'x›ÕDýE€-ÇJ–hEËýD -Ïi‚'&Å =ø†£ˆ°qBŒS9—K³0eEÖ+LHQtmíM6ñD€•-‚&Ø™‘b*Æ>W”‰)ÆF1²ì\YX*q,‡à ¿Ì p” ±3^¢S, -8JiB¸T(³q²ØȼheB”é×+%ÆZ`dÃ…|HÈ@È~°ÙT¶ŒMa ï­5úƒÏÀšh­o<¬Zl|üf43#l”UĆâb)"Ãeu -H´xžµ‘ƲYP4ò Ó¸­Í\Õi6Ê8Ï2¬&»)$œd0 Q–¥:cÈYÀ Âm t(a`Ùb§…Ä"fG¤ÆpQ¬S,X©‡¥^“ó…bÅX/*%ð:@n  -E°&°4`Ãkäa)ÃDí’ˆÛHK (4˜«ßÈÈõY­>×jÒÅÙwzhpP?ô¡t(©V¯‹€C§X<>Î!c¾Ä®ÓÀÁ0’†Ìë!Æð0Ë$† *» %ÉǶP^* ší² AnÁc‡Ökåàiu¥3Õf -ÊI!ÂAÄ>Ù™ÀèüBÂJ6Û$tŠ…Vq$ Ÿ‡ŒeÊÐL¬‹yجšÂ¹: P-¬.$ΪÁ‚MV/Y:C8E.(„ ‚G 408SrzP½R–jõ-ª‚•-¥±xVªGdMÊ¢,‘”„SdbÑEþé€Q‚üÁMæÀ¤© ukÐŒP †QÚGâT¹1NØ>xN Ówò4 Ø ;Á€áÃ7´Y§pœW¦G̘XÜ•˜"X´ÒdQ•:Å‚ƒ]˜Rëô‘R*:h¤†)ëaCBNR&dÑ -hªJ#Ìà›¤à ýˆQÆ°EH$›Q†„PÍƉM”ùÐDµåuHߊN E"d‚u¡N± HF¡ïíFráBhzzVµÐôi‘µlñ³áVÉÄs>bæaù¨L¦gCKpð|ß©Àƒœº'vSpxX¡—¬S¦ªN¦„7<1ø:bA&§âi0<¾ EÂÓM¶%$b¡AȈWBH: -’XíCIPDHò¡I¦Tê¥c‘ÀBD qÒ·œ1R2 bØÐy¨H„HÆC1E@ŸHê#0‘ ÿ<¢ðe_„Ãd ‘N±ÐÔRˆkT²A(-.ƒ˜h·ˆ šL -SF]’8ÈçÀÒKèA¼ôIx·Ç—à! ;œ=´hÁÇ+t°ðÀT²¦`zX<ôè‹ÈF$x0\Ôå!ÀèúaÚßã Vƒ<4ã6˜ÌìP®ˆŽ‹±N¢6>t -)£Õ|]ÕI0$SG; …:•ÌrºÌÃ` £lRÞ‘ Áí 7JW2Pxtb¹ pÝJMÇ …¨9h$“ÌÁи€ËÒà]¾­¤;brx›,r@®§ãàLRÆ!ájøÛŠÛŽ’€uÐBǬS8dšÃ1Û<Э“"bA ›j6N6æwh@$VÃÃD 4ôAª©%” «5NžÆBDŠ !€h  Í7(ù±¾•oCÄU^#á%J4~4§ŠÑà+HÊè‹‘G™ ³acH´V"d ¶½.Nåb0ÆMC´-+]1ȃ1ÅЦ؉q5”ãÈaÄФC•¢u­“€1B2Œò"Àˆ@ <£à±ba3ÝÌM–Ñ¡Ãj:ÆJa<œÃÄ1Œ8â"\I9‰˜úN%'ѺØ8‘}Ô¸,i\)“qS!Æ©R¬WÙ\ÃxðÀõ•B×)4ŒkûTJŽqcq+»â´i¤âÄÍë€ñŠ“P4œ«KÜæ摸†yq f'â$P Îq>>œ«ÁÐá<“ ‡£\’€›aXîTÉp=áá:Å"…Á¸nuáDô¹l"ðÜéº{hT8W0ðØ_Ý2çH™ ;z¹”Írqfá$Þëã"> Çz`U8ã€Â}¤ Wª>ŽaÔD¸½@¸N±Ø'̃ãh½ã^ìà <•wqx0¸Çq\çq7ág”€2z |Âú2jpÇ9D¸ ÇMþeÂI(H8†ÃDÂà8ŽK 4×9?§<!Š18ÌÒà¼+ip“‰ãÉ žÌÃø<¿yA:ï¼› 8wSmÊREµ)8`pÜĄïQîvn² µôþêöÈÉ#ÁÈé È(6ò0|C‰@ØÈ-ÒæV±¯ÏI„ŽL«Ë`ëš"#YjH¶ðé4ô|™[ï‹46;$AEµ¹ýL3ŽTP³LLÀnŽÌ @¥¥Ã4·dúP."ŒØaÁHœŸF ÐmVÚ6µG¬S,N±%AP‰]jÞÀ MÊÇSËx(³/Ò)ºaùpšXj“ZhqB÷3hÈ^£:àôÔÂq®Çq†Xã8îḳÀÁqbá¢pwb48.ŸŽ…ÚD¶’pÜÄÄÄÄD§XP26š…ãq¼ÐòøL,àœàt˜‰‰ÔeAØ ƒÃƒMyäÁ4®±¡tŠE~È7’§Ad†‹ãõqˆœ.xÂù€:Taƒò,œ<Ñ”ò·¹y@ ‹ðúÐL¾À'0²ȶ9Áþ狆9ûsF$2o%q†ÐçzÇ¡^êóìÓ‚€ŠÇqœA…ã¸lPëB)Çqæ„ã¸Ê惄:Å#á8Nò›ÇqŒÇqf>ðض€@pÒøÌ(Á >Çq Áæ8Ž£=B!'ä4 åŠD¢JÆ×~Ý—(1À¿>³ÒÊP>b‘?ŸSÃç~*­¯A—dÖz(›Éx-Ãíò0œ—ÍäÚ¨®æºæħØÍ»«Ê}Œ@ŒÊêbC`ëŲÔ:;kis’@0¡mƒÕ(@!8ðè‡áÀ 4ܸD#o.ôÐr dÒÑàÞˆÑ ѵ”ã¡m³t@¬ájžZ‰ÉP¶‹„Š¹*ß L8„˜«Â©X.!å©pW€4á\ž÷¸R-CáT´ -ש—.@Èì´(™¤aàN±=Œð†ÑÐÔt(´™Éâ‘âŠàdºȃ“+.Å¢¯P‹Ñâà¯#Û_Gf¿Ž¬S,Z–¯#ó¾ŽÌ~‘˹œ.WÈF.2OÒI®ý< OÃçv 2k¶ÌV+ĪH@d ˆÌ‚)5Ôâ l&w"°™ÜN Í%+T²B%+´R˜ÔÐÐJjhhÓN'RyÄ,ÄD±X‰ s–¸ÀÐÚP¡ŒJ¥ Rø D¶Ci$›"hr­@K|G.ˆ®¦-9ßÅ‘¤«)ȶÏDÑ´Q„d4Š¥£ÔÑ 4“–&4“Z© -e(¢™h&‚xÀø>`FMCSà`‘×RààÓ×p(büZææC±Ð -Á¦¯Ià—‰^F~e@ ~™÷ó±x>·òy5¼é~X Ÿ[ie(!¯•¡|>Íä -L"/Œ€µÂ•¡xJSÅù"›†Íärhû¤ðy m·[l¡#ù¡7Y:Å¢æAð¸ç2+ô„”@Œ õHaATB1ZØ–r4¸ý ‹1·³%Ñ6‡D&§BZãñˆ©8Á\÷Ñà*ÈÞ]hi†Ñ\5fx€â}ÆÀ¿`†>»‹žÇ/å/!å©p”§Âj -×)_­Â!DÐ*\ëx\§–¡pŸ_àqyãqŸV…s7Cq–HHDD#Ac$ÞbHP -¦,«Ê¥]’¡Á›ˆû -íã~øóH.îXÐW‰t5”–B«¥@©˜"œÊý:2ô…¾NW(óE.2{º(Ž‚;bÑÑ0Üya ¸#Ê/…Ó¥à%H4H4H4H4$4^ ð*0ÀÛ±0®L¢A¢!”¡°X††Ïíd,‘I@dÖl…X - „¹R88•¬’U²JÖJCm&÷Vêx5´d•¬P†Bª&aDhÈІ¡„¡]ˆ\d6TȆ -©R „Èvº „HCˆl‡âCkC…R*m±6T(CâÝJ“3wpÑPH&©[ir&™—•&wŠäࢡÌe¥É™d†~Ær+¸š…ÈEÖÊP -²Äwä|+¸J-¢/ŽÜ)¶Gäâȶ›ù-¸:õD: -™-Y¡ eDC° ¥É£ˆG$uˆhF ÔsRà("¡¸Ã‰ÙÓѤ*šò -e("—wŠ…bq;ÅÂ¥ÀÁ+Ú‡&M8M*šqš4C9¸Å8øBbV4«d|-‹ÅÂ@°Çúµ å u -¡%‡€Nn®ÐíÁ©¯e@œÉ ÅBJ‰M P’_–UZ‚N±8]¡ ”b¸àå¤ÀÊT. ÑrïN±QB °à/p°ÄÅbÂD8³ÒzH ZŒ+³Ÿ‡”'¤Yf+”ñ4|îƒÊfÅ£ð@˜.¯•Iœ›þêð¹eB í„F„Ö† -e^Ñ€tŸL‰$àÈbáQIŸˆ†â91ÜUåVîªr Tš*Ý'“Aàí Cèg& OH³tžfá %‡‚%6“‹‹˜™®Û–@e>P™ÉÍ%²ÝBdQ«ÐÏp¡ Ń–ÉÞLîAgâu*ŸJ†r`Ê*m±#«àŽBèg X·0Ÿ´¼P:Åbs™@XÛÉ·Ó‚™Ü¼ - -Á Z}>,’Oµ4hOÈ/4B–;B W Âc »G @1ÐN±pè‘A‘Ðv>Òxàò•–pchö½F_-4B¶S,² b  -Iª;Ü4± {/·s@VÊŸ‚DŸçMc±Ò›,-†Î%Ó)"Z>HndP-VõPfœ)G?ŒÍäJ^ÑÒ€4 DÖÃÈ@p Ô ê@R *DÑxnÎó*ŠÆ£*ž„ §skŒh†Jjq¯?‰ÎC‡d»²aÚ„l¦ÉÂ"øÔlŠ£ n(¨çäN±˜P\„ÈF8D?cJ:ܶx jsmÎÓbãœFŒ9Ï/9 È.Ìyj ¸+vÐ1Fšƒ•…'F -2PA½ÂÀ`°S,X.†‰Ê¡Åð|XóJ ›¶ Ù¡@ù¸ÐZÊÀ“d &´15 ðŽ«"∧#aÂ!Hè°"™¸ê‹/1PÏaKMDr <Åcõ JF"1PÈ-C`àâ·M¡”,‰RÐFÁˆ$ŽèÁ'áDÀ=F}!s}šn‘éŸdæ’wŠ…I1ð#f¯Ô9ù˜õ88We `JiÙ¼4”V-ˆçœç@î(+òµ9O ~Äìè U`<¾·(†×F¥ÒJ“g%ÚßÁE#ш7Ð#f#¥îÝÄí´`D”•D\R 96\ƒW>Í/Ð%xÄ,ˆ7¸¯bx‚z~¢H‚MöÑ)´=ù5Gjqb1ë²Ý$“§h†„Û©áB),YƒNä¹ñé †SBp8pÙN±)<((ÛÁ—:L< -³“í ÂÉÁꆄtãrM^š„ D«S,$‚l²,i YB«ò–X¶S,|ì5SÝ%¯aÙ§@Ô`Ð)—*­„1RƒGBËÊJ6W ÁÅsbâZG%D t²? %K° Aµ†ÏC›U+©xƒG¼V‹ÓKÖì˜5q]3xtâ@™èiáN³bp«„T,K­@A ´S,R"uh œ,•£Á3Ÿ²à$`"Á@ÜÎNèÙN±0X”–D/\kD ŽÙ@M7.ј| ®8a kÀ D¦C§Xx«/Õ:äQ Šåq8>¯ÍäÒ,¬3C ¨‹ RêGÌv/„^I€<Ú:C!kéOKãGƒ£–¯S,D0È¢2éð zâ]héN±Ø ¬Fƒ{Jx€Òr¼"Žâvš¥‚>çÙ)µM÷µè&x{`Š¿:!vŠÅ*•p8!ÎZ>ؾr8ÝGÌN.˜¡(!vŠE'tETÚbM‰Ã©€ -œ'Zò´1;†v†ò‚hÝpÈ›PŒêÊPn¾”?Í6œ4žÂP°Zr(b/º×,VôèóDK‹}ŒB×BZeR&]Ô¨3mP…‡”¥cš¯K¢ '[ÊpäæÆÏÙMx•0ÁI"›8i´­À˜™œÒR¯C ˆ›<²Œ¿Á&€’ý %‡2i@ˆ¬­`g(Œ¢ñT4¤®ÂEãé.[´mЂGâów§X¬Dr¶‰àÐ#K¤å&Ø`*–Q|dDnFŠ ãq›ÌÐ÷Š_&udTwŠÅ¤Ãm²o&¤@0|<ãÈ¡£zØ$œÏ_MãYð|Êá20C-©“ðÁ„ ¾h£–¯æÙŠ¦Bd(¼ÖàM×uœÎ*‹£6œw¨4³I„M:fjd@ $ÅR±<Í pj4L26 -Ãñ`$Ç‘ÇQÄ ƒŒ1†„©!"ùZáõK~>Ë^“ƒj@<[GRM…Ø€†RM-IIÅ·çËjr\OÉW1È+ßr¨%Ö)¸UÈDqî#§²—¹ÑqR‰^gÈÿZc°p(ðÏÊcD”ïö¶øqœ» º£54` ÷†|Y¨r^{Ö%pXDqx[4Ûiå‰Å\²=„Ç!Àä‚éˆ •ؾo×QÕ<´?Y€ucݩä ÷9¶õÀVI~?ÖîF€/@Éšs"À"à 5^\iöæÃlúÆ -`Ù'äÔÀ(ó\ñ,Ѥ¢‡Ô€‚¤í}àLÀ[%‡ˆ·ªQ’cŽqCöélÖ¨½£ž&1Ç”3çÒŽ…Ü:b£~A7!xj€Ø@åۃ䛰z?î5 -FGy£Ï¸Fe¬VKØ. „:>C””¨ú—KhEûÂ÷ÏJ"r°Ë6l]ÆÙ8qSÙqY°iðIîòjXx6NhJ¢;b·Q¿”â¨ëØG‘Ó𖪟VÞZeÉêòÃWø?Àd1^þ -f9R™Ñ„;áüòSÇ™w‡íW< '»pC@p£ß(7˜kèãøZ•ÇfÏ·)uªúsÎ5—–os5ý2ØôgÞ»š~ ,݉vcl’ß ¥ˆ=UdÌiÙô»N¡§éÄÕôT¹:‹¸¬\@¼¶óh0Z+º•?ê23\¾RÝú¹TáÊÎ8ßaüŒ†çpSr’œË™ãí½—̽x -Ï€Ðq' -e¤ ˜¢Î'_hÇ•Š²ŠqÎcc>Öäm`|ÀŒTô®ÀÇ À°ÿöR— &YE¿ô}ª!Ç/s_V®¢zs‚¢ú; ‹#œ¬ûúo 8GÓèí½ð`²~aóWg)YÚ¬…? ÙrwÂí!AVURƒ@üÁ!¼l‹ Vªù>h‡‡êÝîàd÷ž0›î3á¡;ª©u74Ÿ2¬½>ÔècamT„C¬²Ãþ’©É[(‹ït™(¥ܵÓd6â{‹Ò]hÎÔKc€SjT!Áþ‘tsììfcFq•EÎüÐ"Ò˜?R®à2“û|ãR'ó¸4!#fÕ{¼]z À|L<ÔÉ=¢ì&Cé[׈az“ë_&ÒWÐQ£ç­Ôû!c+„h_o ;¤ï1ºNXÁ%}t7IpçÔëÇOr‚æí,ÑP)µÂójð\…•¾‡«>û<çeÇT›ôUáJ:×|5·ž/µ×䎥ob¨÷ç]ècµÓ„ÖTJÖàJa “?ŽÑöOLfûëÿ²t“ÌÆ¥®Ìk#ü™(]“]ñlîÈ xqVܸ‹’ƒtšvÌW†Àu3 f óÉ™3/¶PºÉ-£ï{é_ÑÛú]ƒO™Émí>çI>úfcÚ%Ï“û ÷J0‚7ÛE<ù8‚pž‚Óˆ÷^M·ñÈÄ\+a!¡}þŒµãk‚5à’C -@ß À1‘¹wÄÏgªx6„¤3‹T+8@bîGy²ú~äû<Ñ +3 É±ÍÔbúpåÍÒñÀèw–ÆÙpEelañɉgØ…AÒˆF÷ëã§Ý¤2"x·°AR†š ÉwÖãä«ê¨w¤_i¢3çjQ‘ ¦5îëÆŠ‹Eh¾¼ê¥¹Nˆ™×šÇ°ãJ4g¶-HÄöîºu•’ÝÄ0 o"Gdœþ¹B’Êd.ðLæ‘a"Qu!kñ¨•ÚÉ®-[ÓfFè6Ö&ä=ŒÔr/è IiEÜ)mr’jó¢q{V™Ž´¦›ÑFggŽ¢ž¿0£×—GÓ1UÈó„vj§1@O™êñzFJ4'ë .G}ÂEæú¾=+‰3ǽ¾ ³Bƒ ¨ï'ë{ï³Â}ã×÷S­/ÔÉ…ú>»¾×g'p©pð¹ãú*¢åZÓ‹¬ÝÞ×7ô¯QDx/R]3E¸˜i9<ï{’SàµlVp€òÅ|Ÿ\ª Æààu`æ̈»:Lì7©…ýŽÁ¡–­äÀ¢S/w ’Î&)Þ ¢HûàhM-¶ekÃÄø,×Ãjˆ2‚m²Á±"÷ãXCù†NªàXÔÂ$Δj”á‹'^lIÂuy/ÚºŽšì²&›ùÝîy›(¶‹úر<Çj#ÉÎ],¨døݼËÈÀ}¨‘êgå¢6Qè/%²ÂIW"«¡#Ö EÃz¬ó ˆ9…‡$o~Ûlœ½­ -˜TV=«£)°2aÓÔ; ²ÏÒVõ—ÍEØEø7+ÔVB #ôYaSs~X¦ô,. pDì`LÌI]jàöpèò¼Nž1ï@—ñ»˜¤’ÃŽV|5á¼WæÖj³è²ñ<¥‘&Ka\ÕÁg°KvÞ»ÔYx«§ýZÓð˜&ø½¯]Ôß;dŒÿqÊÿ‹3h/X°=á˜PfõŸH¦+QG÷ð«îê`µÁ”vl°|Ð A’±…Qþ£éJ0 ÿeöbKsŠÿÁû¯ ±>½…‡·R%€Áh­û­"kÏDù¿ ~¥Ý!¬"M‹3•>Æѽ¿äÿÅsIx'„èm`†s^ZC”heUÜ–ð¼Æ«òY51Éhá ûDùŸ„%ÌgX†`ðÏtûž!*z JÐOÑ:¯F‚ÑzÈDìêÛrê<,b©´²í¸«K¿‰˜bÈÑßÒnË­õÖ†2õI¼ÜOSû0¬,jM ‹õ§yØG,´¡ ;žµn>ñ·8À/kãSŠ"ÂÆZ%'樓š&ºÍ+A$o[ÚL(µZ€íbΛæ77&ø=¦ˆün•ÅåÉ ¶|fP°¿©gYtŠIz$ÔEBèß]WÝÁ ÉÅ´]`ç7 ¨¦U]R+-’ç°† ñÈȃƒh´ý¿÷ˆ}úqôÚx "çíB'ŸóDì…Cþò<¯ÇVL€™ÒçL+èm• ?„'Ñ £Ôl !«Ð|îùRC³Éðl»ïeE¾+wVB”§â'À%ŠûdìX÷Õ¼»&¡ÝÉ£î;ò¿GpLË»)+H—5`%dŒ91@‚5ÄPê‹7%~àóuh4ª Õàsù -ÏíFÕÆ+òZ4TU×É•–'·¢qÆÎ÷ÁEêÒu«-·ÁÕ2N7ë\ÂÊÿ",…\³üŒ5´SHMQv3#ƒvãüíScQŠŒÃYk•G¢8WÐW5Â)n‡µ†3Ÿûb•Ûq ͳ…Sü¨ÀGGœh›Ô õD²²g+s7PcNÁST;Z>¹ª‡£Èíh  ðy «£JY“ Ê aj¢ _<¡Ÿ¨3ÍîÁH.ÖÖ<:>ÓE¿¹žAGuÙlÎiücðŸÁõ!Ù÷•ë¥ ¶ð¶´…Âõ:’å½Dù\\ÄãÃ’ºá ?*ø_b]¶Í=xº¢ðß«W¾&¯9"ëÒrè´üæg> 1HbH¶0øXþ$C¤„#Ëãüíft%2`x, ¬95(D¿ƒÌªºNô{4Ï=õÐ8G>_‹«FBõ8tp=—÷ƾ^=¯‹®S/sGo«À#%Ù9w)¹·pûìÁ ¾£1‘âåá…X¯Ù«‘"ðÕÜ}”„Z‹U@@€â£‚;à;å8ÓüzŽv5ʸ™Òbºk‡Dºµü¶ÇWU I%\ ¨êô,DTqHz¬Ýc3¸4ÞL-óñÉÔ ®ç‹ŽézÑ.AíYm¶6ˆ#ÔÑ„üvG­QÉúÄtGÎH…¼ÑÞ‰lÌí  àápŠ³Èi~ìEÊÖ…öôËnîPñ[´¤jëf—r*œŒ‘ã´+Ÿ†ÿÂXeñ×`ñØÒ‘Z¦.‹(sÍ~ò¬8¦>sÅusЊ­ x~tqntÞ¸Ö¦aºÍ¤«mˆd¨NsxIªgV«Íæ™tT­3‚Ÿ–™nk„`ªÜ<±³´Bh1Í@‘ýö¬ É¢÷W¸j€þæé¦ ÒN„±–ÌäÙ3¶¸&K‘µ)näÈ‹ÑQ“Ú·äIÂòŒMå~%L/’–·ýTÞ|A–í¡Î–µ(A_äÍœ\T†–h¿ÆI+æFtÄ®æÓ#Ê%Z? HN.Œ"0ºb§¹œ# „²žøÑDœèw˜v„­TÕžãÜ Éûõ0Ê~EÇËx¯¿/ª„u-¥ž_  #OAl°‚;3¢µòw‚\á )A(Qîmí1néƒ#á 6>{°|¶Fò$*üêCŒÞ±¢5‹9ÈÌ# 3|‹n74ñs€8!DÁß=ø50q”¾‡ÙÜÌÙÐf{òñ8›1È”=‡ÜP!%@!òéJ;Œ:éGSüƒ> IÔkxÓŒ[ -Ö ëÀr¯&Rï cüª¤ïÍÏ;@“”ùt"uÞ†PYÚ‚Æ7Ž²×aÜ#ßõNÓƒ™g –¸(Ÿ‚æc‰µèÀodvGk_¶{8 `bÙ‘wÁ ïg“JΦHb˜L)~Ò¦á¹RˆËm@¾°Q³»ÆŠ»Æ×-SV":ÔOiJœÂmI÷¯(Y†E«!.SÍ–BT: Ò¼–´@òi6Q*Õu?ÉÂZm¶ 8øyâ6¾1Rð» ßvbº”Û;øTŽ_5ýaÙ‹xÌó -ç8ëw›J>ã–1'¯êxR2‘׉âvYÑ•mQ™ªEg·þ}?Øü,ÁsÁ³OþòÎUx¢ænTºŽ¾ž\£–•JGª§ëë‚ļš¶1S;>¶Áù²VÚ¾~`ÞJÿn=éŒc95#fqÀÀÅóäöLjxÕ$ÂÐòíGgNwÕ›Á~©|¿~(aŒ§Sk~h? LïµÙ?Ö–ðéí¿Ë½iR§¨§OeÒ—tƽ ÙñjŽXóèñw»Æ[vÐN ¸ìÜgj6‡f MU·üR…<¡dÖRÜî+ùiߢzAVdô5ÃZ+ŸGMjU=ÊÃÙÓ\Š§QtÊ¡î‚j}>»@hîþžo€–r 4"1ɾèøÅYâvM\G4)[!{Q@}3^N(Êå-gQ¸f÷$wÕÌuè &¢ õqëÈ¥Ìïií‰Ì/xFC}B½‰)HT±QØAî'‰„ ©\µ& D‡Âê‰ÍõïM -À±þôîÐ*%º Û%ãqÈÁù|»£½OŒ Ù«/Â@Èœ^ï¤awM€¿+Þ4ÆØî’ÞËÇk†F$"’|D »ƒà¼Í3VÁõfðÍÓxà)õÏM  -8Þ ÷õõúžæWhsÏŸš8Íþd™/ˆIæ«°mg)•g¹x¸€ÛÛàHÞ÷Ö¥Âã³ÝmôЃ´0m.[Ý6¡…¸é00p×Kn½tå87þ°¼·P Õ>îë¶?ëŽ'ΑìúhºöĈAzuR¬ÛÊûñVÿm |;À¢uŸócÁFgecµoª¨8Ô¶–þŒì1n.„Åe¼#(Ç‚X¾’«ÿ„Ã8mtØêß-Ìïõüh’Ñal \\ÎŽŸx‘rz‡4=×¹ãÛ9>â®Ûd³6DßråÒç{{w] ßœ¬¼:u=T-a’e€ sŒŸ 3ü}…Ö»2ÓJõr¢Íß¹/ÜJ¿3pÉ›Ÿð‹8'G#~#’[ôÕ´5á[ÁeL${ô„V¡ŽCc„.jYax¨ô™ð½­È¢­T¿¬dgz¯_"cNŸL!ß)r¸-û &wh€ˆp‹ˆYy« ³¹…)ñ€«ôû͆Æ!({.ÒÞLÈxýŠwËÍ»?^9ð¢&Ì•ñ°l±œ*#žL›ÖÄ@Qg©˜×A¿ËlfSþÊvˆ©yœFì—øYKi@J[|ÀWÓ]J¹Qµš`y?Äʨ«ÒfAðƒ­bmÜ­,þ¤A±‡‰Bv¾Ü.% àRŸÉp0{cþVQ´¾Uþ&Šx…ÌkN<§¢•wú8 7ȵ@Pá{מ¨ýøˆzëby;-¨—SÜÁº0Xi‘™‰5ØD`Ö sž5µz¨ö*’È•ve»X1gµÐb|¿DÞÅùõ"W Uô±$ <´% ¾Å#sÄ'Ü õRhTÞì…xí^רß …4¿¬×÷¶¢‚nÂ[Yj6GÆλo›¸µËßarPÉE¼ {_Ô%RÊé(êÉá£wYxœC_ðUQ×:‹4žyœ€’?lÍ#J xrÐx$KNèøio*ñ§¢>"ˆýã ¡ç Sø4rÊ.± -–øb½ƒ`¢.\gFäQâÚš„¨f¬»Inݨ#1³Z•^Iú"‘i©@Õ -1ÑRsilMí¡=TfD œ‚?R8‡Øãð¨„D€ÓÄrÆèd« WÍ^¾Œ”`ÛˆÉËØBö¤3?V*£9…ù -À¸bcûä#eÛgN4U¸âá+tµ wLÙåä\ÕmFªñ¼ò-äyŠ$YXñaoÃË›ÆÈN ˆlËRÛ °øˆ “^][ß%%ÿU‰ã«QbÕÍ…[J,gË”w0ÃuŠìÅéèßÚx§vÓ*>H­ <ò%À@sžD‹ )뇵(‚Èa -ªN“ÆúÐåØT˜å¼`ô|°,ì–åüW€p<똜Œ¦=c‰1““ÑàZÀ!€Ó0P@FTdÈçÂP0)ÑiŒB/Äè#dê!ÛÈP"»ÎQ¬V\”`což„•5„z5Ö¥RäІ#®®½ÿÙmåGA|¬¹½âÔO¸)É’qQÎTxƒÜ¿#7'Õ½ €TÐõ@m(.ÑW¤ ãüV)c,Z·áó@k ÍpHTŒ”F ¼m9²ƒWäwÞâ„…›cÜ8¯r gxK]‰åM÷EAKÛMÜI“ù%ñóÁdÐÀ‡¨ªÞgàWÉ/ÖjÙb{_m¿“_·¬vÛ(DãGœqvqÞZìocL‡>ƒuŸ^šÙ‘=ÿ3³P¶ß0¥>Sü 1‚‡çÒ…ñ© CÐ6!wëó4Œ ³!+³ÕNñ”`„cÑ üÜVÈáñ”휋XÌm‡ÂP‡©!Ê«À„ÉbœÊ1¥v.cêQ˜0G¨6ÃT[R”‹Bñ­ŠÑŽå— m³’-]­—O~_}¼ -¤:øý…C3#,øÑ_`-@Òœ ©_dódJ6‰¥f¨‹_g{|9XåF§‹Ó‡½L^#¯q’QÜú˜øYÂvo —Jì™xôÙÝÐ~naÏù‹:ûåà™zày!6#IUBA1Q>ÊjµÉÆ¿¸(÷›d` ôõ¸‹‹m´«8¤BBa7E4h ãUWšX{oyÉL³RFدÄEd¡ -Ìy§zÞmëL?ƒzßc1ùQ¸gÊÒL—^¿ä»ÕzF0¨½éyJÓ¥e„|–ãl ŸÚIiJB¤^ÕÊ#0ÿ¸¨}zŠvˆˆ›† ){âùó²Õi5[ˆþˆ%$ÆU¯,c¡å8Ô1È7,ç¶GCÅí*ð{.•"‹Iu§ í±d±V¤Ý õB‹ÔÎôÑ?ÉBŽtìœhHà¥êÚuX¯»‰7DTß/w7j -†‚µý\]FøN*;VɲíÖ9»bÄ:Œ­Á>ÄÔÐÓF*F±J1ÊÉ×:ÊG`ôÝG(rɸFˆ (µ_ó:OG‡¤ùFÆU[“°n$?ÎAºb'Q÷Íç¦Q7€o@NSpÝÕBNkÎÆŸÉ=aýÖÉ[YZvpaqºË$ýa1F”­îbÖƒ¥¬t"L®®`Vc¢Gµ‰'µ¬-)ÈøÀªƒYYNöâ}˜ºƒ#TU¼'¶*WHò {ÛSÈš¬w -ðÇ>@{J*‰XsÊEÇMÍúFŠUw;¬atj—qàlUܽO Š¦3芷ᬤ5)1 -~ § ÐgÞ¨¶ - Œ¾†tÉé|û=”Lô>vläJ²…¿ç'ù89¦Z7°µký Ì$žÔ%…ÎvÂ"iGÎ6!€åN8Jó±Ô×'Ÿ9REŠ_ý²1oHVǃÍlk–êZ±Žgć].jœÃ¶¤éèÙ”ÛÄP AeFƒ•î¬] ùzÏ(ùË2ÿx×P÷Œ‡l-cLù}ˆãEã±Ò (Bäˆ-ß¹i—E¡ñÕÊj& cwn·râ<³Ý/óM“T…0W}ˆI| ª(k†ºÄD3àbpÍ Bïbžðõc¦¼xõg[LhLÇ,oá*ñ¤''õFŒ¼c*’8LQˆ„—•¯,"†€Q~—ÒªåÂÉß´«cxˆtÉ8åþ|e¢-C,°¡šýÙbŒ´‘c ãßú]Hmœ©ŽfÈÞ_§E§Oº üwu×+Pñ[4ÄÙÛ·'«»SLˆ9!/„w…˜Iõÿè¾$Š—Êë­,X_Ñ¿ŽÈ¶½*ê2';3Q^N¹©‚7I°Ñ7ù.é€ÅÁøZiÍÊq´†tél-kÍúK'Ž¸á«ÎåY>)dI¯Ù7´p\ŽH¹{' :ÊL¯Bb—è-ã²ä7Ôr÷øÆ–æ|4ó²ÜÐ9ùfa¢6VØ”ë‘õl”‹Nò¤ÌhÐ -÷°3TRÏD’– úˆGìä”ê SËGWïVÚ+äÇ)òú Îê%(¸¡à^Ë`ñO,Lᯊy­Þ,ž«¦šÀN$ñ½jQÀzhŠO ØCÃ=¹n½[`¥f!»YY³ùUÐd{–kqd/A0@ç}£7HÊE¯aŸo<šfË7rd cêþ½áâ¥ì%â ÃУÓ'-e9qÃQÓó\“…¹¼°ïÜê3ü'½üì;ñ*=¦Þ@üµo¢Rͯz¦˜)éáðÞá%¯½ë# ÍÉ „Ëññ¡À@Ù¤q1ì×$.ÍãýÐø‘ó(.6ƒß‹gU#h+±Ïáª\ãÏ·£˜ú¸i»ùc"ÍÔ·ñmeÒë¸qÄ­S釸AS¡×üºž>c³•JÆÆÚö÷ìËÂE?ÙÒZv/‘T?Þ¬ti`rofy† *ã„4þaú@~¤u)©l›µmÑõcóçá–z¾Ö5ñ-°Gâ~J}f<•TBÛd -¡àPÑ¥™ž;“’îâ0oÑYAø!”.ʵ7l˜µHŸnÀEÅ}ÌR9k³ÌX ¨… -¬kWµb°÷[¾^yß_'{@üö#Hý`H5À¦‰Šé,ú¹!çøl¾D"!zMö0xƒð§¡Äšþ%==XÁ5Èv- ²á àäZ©2îIV9FâCC·CÇÿÁ~Ô¯s°úkëÙ_ý„IÐÕ €J"ÿÑ‘¬QkìVv8j ¼¼—`RŠ5וÙfá¬9Vd¯DB¬~l’üx—G|¼& øøë#;ø°!5‘E½Y“Rm•9F¢_…oÕ¼WûR‚b»Ú<è ßòþµPrÈõqf8d ³¼z§}6 “Yñ´þ¹´¶®ñ÷C&bB4PzïßEÍTÞ™TÿÏ´‰k9Çe—üt%Ä#¡Ž€cÁ/SWïü¿;°–IÏc'ìOM–“®Lžº«R[RHªXÖƒ¯Ãr›.Œ}]TZn°fEŠþâ:Š5nOaëKÒÀUI˜x¸MRdH%G•2{¯(–?aǪÃÄ AŒ´VÓ©Np*†3w¥xÇBmØ¥ÃÁ‡W‡¿«³{B쪕[Ä•ßã}´›mÖz/t.dÉü9ëî¨RþcZ+);=(å)5l¥<â+7üB?é‰îœ#–a~©Î`虸ýÔ#HQßö¨ààí¨ò 3-©Îè,Àûÿ'›3;÷©0p‡'Î+’/ÿEñ¬éÂÿ·Ç€B©›Äœ«ußllÊé` ‡ç߀þzÓ¹²¼R%¶Ðé_ìúàö*[CKå°Œ5>¾ÖX‹Ø»èÚ©m÷4!—ü’›û´8 -\4>8{c8eBÚ5ÎF™eÿ×µ¨nÙ†ÜEM%—sb¨4Ýúý¿­Xýcd´iš¹Qú:iã?ùLÆ äl³+ðEH­Õã_ÔÍÌ`zF Sü&©º„]ÓŠ|x·°X;Vuçv!©æ…rÈ -/’šÝ¥«Ì-¾¼rÆ“èî—#f'™H‚ó‘Èz#'횊¦¯(‰=0.œåÜÃ<±Vãµ}¤oûàÅ2Œ*¡q›;µ¦­ò­x6‚Z‚œ^C¨{îÀþSõMW"ásb±Ú€@_1üYæÔšæHU›±%hO|£Nƒlfÿ_µ7W+•`9zªAOe*7y÷Y>þ'@D^(eƒ0ZÉfÎúxáâÜ}êÓ¯?ÌYÃKnGLÌ ó'yÝ\µŠ½ Ê6èÉoî-‚àÎy8_ã*Î]ÇD %d+ߤê"ú µ‡ï}#…áúñ’B>¼ur:wj†ÓS -½>_=Ùq~+$Á.GÏ`¯»±ÃÎô‚šËìF­å?,^ä]DM*‰JzÏG·•ÂFo®Ë0ž…ïÍ{Ûo_:AÍV'Î\e±ãiÁhj£wBògA^söWWCæ™Ô ò[‹ûï_rº 5Ž ¬sø@Ö¼“úÝBS|bµBºÎÆô2·DñYîå{,&µQ Bă×,ºdï¶sÒp²zJ-âà¼à¡Hö:¨XLn†ÞºVKCýÚ8û¬ç0hÊâd¤ŠØm‡L£X&ªÕï ¯ÀŸÁ°øùæíLÎuúp¥ÃÔ²$-©0Æ"Þ -šü„øN\ {¡oÔšQ€|ÕØ"ˆÊXŸªSÉR“TÀ£þ½ooü¤ŽÛ½h0oˆ„ÎÎA Ýi/Ä&:ß©ügä>[x¥…f*Ká„Vv­Ó!˜©‹~øzþhJϘV{†©Bøm¶ ºe4ÌÙuö] -Öƒð&×I“÷ˆ2MúÜ—D&M¹Ÿ¦ìÊóФ±5ç€ÄK‰ -`ã\‘ý§kÓšœ¼ÍÎ@þõÂ`$Ó&æf§Ÿvê¾Çã2{EZ3‹`bL@—(§>°ÎqÀ¾³ Jƒ¯æœ h»Ñ°û3Äw‰sÊ{·‚¿':0)w-n—:êŽhÄ9Ðõ´F÷Ç{² éý`süÁ ß^­«ÚI|´L(²é -endstream endobj 21 0 obj <>stream -2w•Í|p_nW¼í»•R#ýq‹ž”AºôIH9¾E4ºÜ©d¢i¤&ü'bq>ÀR‰'Ÿ·¡]‡ÇöÍ !üYxoâËn°Q%ÓÂÇ–×…ôÜaS)ép9ïÁÏÏ;ñÔã#Afå&|û+¾{ïôÊXW´ønFáÛ§ØyγÖà¸<Û\£•ÇúÖs;þøBIuòˆ#)|'hOüb¸7ÒZæd’PÔŠ±¦ñ5hðJ–±{‰²{“FäÈvóÒ`°þ“ñcš×wòQ/#N²­èEé’aR||¢ý¢Uã/¸&ç\û OáoßÙZÏ.…_Ô²2¶†„˜‹’vÑZ¡Ã/h®^_Ú -qO”_[7MhW'"ìpu&¹!„Í|z{Áa%«—e9¢Òøs̉Âù}ª7Dm/iZe¹æÜà¼h™x)Ù›”<þ?oèvIkôÛD@×lHùoûƒ5Í{P¥Ÿ~ø¸hÀš‰yÛ—()–Á韖XP „˜`&8þíœmyPŒÜ£ÂŠ’èÆŸ% ¦%ÎÈq‹9ÖeÕ7“r¬â™îŠ" -JPg€t3­Z5Ñ„¨¶–E2¦«;&·_x³^ÀîÁÖ ôhÂpôl;´ïÚÕëVÑÓpŠNÿ ~}8­½]lLA÷P?Ò­ðcS›ø‚!iëåÊc)¤ŠÈ¬‘)€rå„ üÑÍ¥ø8PšuCGš2–.BˆË&Òyì‰Gö9g›…0)(`O0‘Ñ?ºÎª£Ï•À¶Jf†$¯“3‘Ðq@ÔYVf%³u"øŧ5 Á‚ZŠ?t¬-A,éiÄÚÞy8n½N =Wú B‰D¥,D¯(Ô?Þ¥E‹ª€Z„@$É_ÔgXí(q¥ì<Ó³©èA«€~á†Và¤éÌ) -YÅÞ¦­÷Fˆ?Ÿ'$–qîÍ&šcÄšÆ -e"VÞŒ_Æ0b›Ö: Úqûº:˜œj¤Ýjý€tô]¨Z-^+º¯oøqóÆ““$ô·&½&@0Ȫ¯s—;RQ½.%$ÓÃÏÀ'‘ïX¹½!OпEƒÊ{þ¬G\wYAtXL -xþ®($}Ž$¨&…0¶••¶^·™* 5Dv!¸ªÝ¢%û‹ÅNP:”H;¦4·Jh'™ÕEIR#m͇:¡+àÞL/¼…k¨[cJ.[ñŠ> ׶¯ åÞ1•#>Âutþßé3FTŸb–ÝHdEcÉdW~•>ó/ͨùmÇ3á—eùñVh<<îókãçÆú°y‘ô¾æÓ·`5À×ç @õV‹Jì‘p?äPŠ•¹³z}FåG/?kÁ›#ˆFlÿ#{츮U7‰=^ æÕ–h -¨]l>­'¥Ÿõ»-`éC"Þßñôø -gÕÊñÿa&‚,„ -vŸ {÷-þ‘/˜øQ-§‡š6?o*yúØç$cˆ2n4ù’{â¿):bÐmÅ+XRê¼µGÒôÄ\ßÖI{î:è,Amª#úŠîCÞdáÖ&íÊ!šÂäMá{I/~©ß¨¸ú£ÝéR’H·´ÞM&8²ÎMT£ŽÝ¸ól¡:Ž$Ò+Âü4Ü{ÞÞªJsLˆÇGçé›V Ž‘ÜIDKðÿPž™Ä¥¢¢÷B–4,£¬3‘B¤ÓL¯ôNéw9þÕ }ÿÏ,Á˜Ò‚¹ËCMúö%âDðĬŸ“j² L¦H°[Pû´‡Þõãá£<€ß"B"if&¥ªZÄQwŸƒP¹Ï ŸŠ%€‚è xØ|Bšc ¡j·l–A=(‡íÞbŒ”Ò+TµjžåYö 4ÉñBg@}ŸV¤ÆpšËR]3.>P×\dz ¨Óâ±eæj$ÊÃÊ›å]sJjø5›°©öñTSÊå2ÁÜu©È®À$˜ Ã@a®†-LcS¦17 ÛUé#”Š 1`!Þ&D‰j¾­9µß»â£ÎVU"i°]Õ:Žñg*d_fJ”qWMfrYŠúÛ¶ßl‹¦/0@ÄÒàtC‹PHÿc’k„ݞ‡¿UQpñ´“Ô¢‘Œ€Öì¥.¹=½ƒŽþ@e«HcZOÅÌ ¦”&íAhGÊ‘-yÿg§ç EÛ£,’?·m¬[Yñÿ á17‡ü:èþÜ’æôq"Îð{Àå3; =£UI»B5µÓTƒ¸/å–íԫɨoOÅe]ã(÷¹PáB‚orÖtß$)UCSvYè0R"RVÿïÓ†>Ñ~IÒ°ãf:Á=àÁØ“;FÔ=LSÿ3þ¸)Èœè× -XM¤uÂw¯hù˜+|î–µB¸ýé7å¢~Éj‘Cüf|DÐ[] KiÏeÒûðOõõØÁ”dhæ¦#bÎÙô?Œ#ôŽK‡[Q¸Æ@&,nŽ¹ñ·^ÓÙ&—(ÑSƪ¬¤lu"tñ,±uPt=ý&ÈvL˜'íPF+G¶·žâÁ5a·¥KŸâ#‡+í‘òDZŒµÞÐàd*Çî=‚˜²oƒ –[šH•ëŒÏÓä¬7¾”}-vâdŨ‘xGž{n†Ë·…1–ØØèSŠÐ[™¯.ÚË2œ…„½.ÎU_e^XJ´ÄuÀ•ëoÍ(½–"\†‰•Õ*ØÂPq™ræŸQ ÎÚ¿TÊ ›½‡ŸÓ§ÅÏLXÄ(Æ7LØGId ¦†.+35Pá„Çý {ÚV7H2+ ŽµßeŒS%/øb“íÂÿ°Sn0"¢ ¬˜œF¾’+zj‡Ò\ÈÓs÷¨¬>ð–žC-Ý8f/ w©‚@^Î0𘤿 ÷ûͤV–…U&Ú”ÆøTDBŒS£˜x¬(áfp-÷MvøZ5Ãx‡B–ãæ;4Y4+©½ZíÁØ|GËöâO¬Ú{Ÿ4úiÿ_Fº»€Þ™kn³hTfJð¼ÇG[þ‡Rx LÓsvr$½á27ª[——®SÑŠBýv‚^6™Ày’nDõÐ< 8ó„Cã‚K? -b+EF§¨1=ÂUòî‡y}ÆTÉÞ“36]we0Há²*{øu֌ûÀiþÓC{#²î$sú̇ |t½ZŒ¢#Ä[¢œÜ|ÝŸáˆm°(4M}!֠˳‡ŒéZÁD~Ž•*@u„!߉²h>cRŠ0ª_Í–§ª·\»‹Ê)'ùeÝüZ0´ü (qÑ]r¦Ôc­oÆL‚`p©ôI¶ºöN$\1Ž6ëš5 Ljf¬ -SJá&Á %ûI“‘c½ýr¡Œ‘VRGgò_]Ü|“Æ´(1¡$ûÑEª[aT¸¼x„+”‚,X%ù7yÌŽàe\¸8ñ6)Bõ§šòÓïo=º>F¼u¬ -Ÿ°;k†*Í89gÔÀ˜Þþ‘D¿ô€|–Ž›Ö¨_¥˜SŸân´@q±†Š¸$“ Ïf@Kgyjo´ž#z~ñ.œ° l‡B’<Œ"¥Á 8ÒX¸R5Ñ$¬Á{Ï­rGª>5a€,Òzv¬_÷µ¨D»7|»ò}lª‰ÅÖ\6R3ó!t†Å»ÐÑ]¸ìWÐÄB¶¤ü ÜeÉw§5áoŽ«”–;o¬—Ô[)aƒl„¯ö¼YF`Ó{Á¥b®%H>ž™@³–$ HÔK·@)Ç™{ƒu?á`?8ŽLðÅi}¾´Š¼IˆË*¢DÒƒuäÇWjV~ nB|ŒXÙÖÏ K’ìdÁ8b¥£û"ȳ%’è!Q½æúÕ(AáÑg¯ï41G‹ÊâáQAMŒûm•Zb,m²Ý±²ŒPC¤N®*ßí[ãSá0ù$IyçE(_zCØñr™p#ª³´'ý¢¸IÒSݘôîļŽW¤ =ÈÕ8ѹS© 72…¢Ý²ü>F&oïP¹RAa½o\̺ofÏÒÿ¨oÅU¢WÐ93J÷vu -‡ëggUˆGÜ+ ¤Ì£ý†‹½ÀpYøÄÌ[/€Èø+4j‰Ðk…ŸZð`¡Zÿ‚„WYí…ôÇ¢ -Fwù?úØšÍ,9ë¤x7mI§wé³ñZ‡¡³ tOÝàš,iä‚ópÖµi#)Öòðo&žãð¨霖Hbzñy3|uÚÌ߈|øí#­PºÒë62Ë'90âôÁ€ôkða(·Ï XZZÕSŽ2/RÊÍÂg‰Ù¹casUCáºó÷"±ZÀVÿÞÎsTÖâ?yÝŠ=Ậ®E:¹¼¹M• ÐS†ÈG( äú]æ -ÔãÞáJóœO쌅fÎÙÀTÒ]ý©Ÿôs VÕ±¤—ãꇒ\X,Êì@tZ‘Ü,ÿÙ´+HêLÝÝæ¾à¯À†Zìþé!Ò(ϬG{Ù¬UzqËÁ¢p… ¸±+HDGb³Æ'(ÛÄÝ°\2 6UñÇæ7ÞV=êƒxítàõùép± -‰Ôs?AÒQù$̆3³Ëu ®púTæylÒe1?ç¿Ü(ˆsµ·ËÒÝOInÇ/jŒy(p9¡Î ÙÕA*‰›£òƉr‚8âʡƳä+ÔÔ]~'¥ÓøÓͺµÔÒ;ßd`ÃÁ.xWË‘&MÀ'ê#ën»õpŽÚÄ¥±£zKCç·C‰U“åv²µÉ%ðû9ÒÚbƒcÊ´Ü\¤æ9Ò.´´Jqùr{¶÷˜ÖÃö¾™’’Z\Æ\ g Æ°•¨¸XÊBæŒÚÈì„E¡ÂEÄt>h&:6ë«ñ¶P_{Ârq}<±ØÞ„‘axbâ_‹%XÇñà-6G Ðï4Ôz/IÁ׿ -OB—ªiËa—LÎ ߯0‹JcŸ¤p v‡GvUp¶sÖùˆÞª*¾)£*†“cÈëHOéÉÔŠØŠ•ÇdA‰ÄŸ[½¡ |ö¹—p°™9ˆxé«?vhÿ1Òa‚05:„ˆæŽÏ‚ÓܯA9†JäÖ!òbt8 4ÿÑ^èg¦{#hqÝÏüy^Á-Ì#£™´ÓOÝöXÏ4Òz.܃A^‡žZÓ…]óþ `*bkpÏŸíüY×ñŒ3€`&ëHÓL棞ÓçÙèºúTÉ鼡¯·6r]QŸL/'4§ø³/_ -@Jjp´Q{îµá£‰ü“á^æÄã&Ò%‚…ÑÈ£A‡!«$Q§Dö! Š÷ H¡€+äYH–‹«#+"æ¡ð!^996:°§3w‘ÂdÜ#UÍŸâdè½Þ\(mÆX鶰Πh º: -úLÐ*ôx–oÔâ¶Ã[“ë*1Ço숬á±ÍäÝ FsB®°‰ž@¡.îB¶úi‡Ø½Ü’e +o˜!Á­ÓÔšP¿!L5·9¨†}ÜÔ¹¸0ŽOY~ŸžSV$±å²›“!±&w ñÃÌ.(V¸w¹:@Õ‚Æyÿ‡Œö¬?È–x/¯Àg?5÷Îàó3Šš8%ÄL‡è:àT´S<ÿ¹ðôÕÏóä+åïY¯pìÕ_ý -«9ûôéß6–ÆLdúâCÞH çkt™èKF°‚-ÉD:Ò‰VÓ’´ükÖë8‰*Ëæ ¯ç+'õ†ùC4\ÏÆ2[…橱ÕãôÖpüÁà`¹PHtÂ*l©,‡-—'7õÉïìÐxîœS½æ£v±{kFÙ4ºS[&`¾®ìð6:ÍœQzz7çÔœH§ -äkИ¨Rä&™'Ÿ‹Äë#ƬTþ^Pí#§5ò‚ O1Š$¢ùÈúP´%m»veJê霎¬ÄÑVD|û>z•p!R·äÁÂUùÆ7Ü^)+og+«&©åñ1lTM6Ÿ.›‡1 MÄûM@–P¤’©´Í¹’„ ¨ä‹˜‘eû/©j\ˆÕQÚ£’¿ð…e ¹ô'õÔ^tõ#4˜oªípÿí[œÕMù,M;¼÷ÜÝfhÅ=þ¸¼ƒžapj%Èxþ“Ù#ñ9b¢ð§¼Ð\tík!Pô@­L£âDºˆptÃPñ°Sš“t¤EPAnžÉƒ"h”’!’Éù–=rì›?­>µj™â÷˜`–F-Å⥠£ICg¢tþ㣡Ž‘ VOò;¼K“ç+ ùpM·Áù ‘$¾,K™7‘Œ5³5“‰ÀàÉÖÏíM…Á;\5ÿ’ŒKfäóðcøŠ\bšQdâ4Zé(Hš×—· -iYT«& u!+šPn&Fû;‘øòç3¾ÎN9:ɯ!…˜m¯´Õ^MÖl±f3”Gùü¶Ã§“R®ë$ò!Êä!èüjR ¾[ÂÊÙ÷õŠÑ<°Nÿ®°áÑ·<,ø!wV¹)ú¾é;i½GtWp¶€M¡Ï_‹ê&9µ5v³bŠ­˜-B÷Nš”ËûÆ®uÔmwV³]NÒs\žS\ÆÉËRÂG”—Ø’æHߣr¬ÆA@ŽòsÇ“•2‹Ü‘B?zŸŽ«°£råUÃKQ3c;‰ÄP½ã×î÷…¦Ý€ßùäKè¦9G_tû.’ÈQÕ –Öà I@àóÍ9ªÅÌÄô_ݬÑ@ʜ㠔@’z™2’ß}tŽ„)½^i"šüMp†à Mnž9©µ*4làÀ È" ÏxKÕ@'K²òö’~2FÐï–é{cPåEÛ~t$B9€iŠ°Ì¹\ãƒeúô^‚×Ň*ïého‚uÏ8XcZ Úðpe.(̾7ÛõÙim%½h'Jž/gÉü‹‰Áål{. 46hbQ½6(PÃêŒóTl£™˜6÷(¯ÇRÍ^Τ§÷Z%DÜ»â1/…¯Âšäç6õ)Oï`hIjšB - Ä ‘*xŸ¼` £ •œ1ì«VJX¢Å‚¬Dª®0å*xØ–Ü~Päðb0iφî—9B/?ÙÑ`5xÚbtË4éÐ( -»™•‚YH< ¢B°¡Ýlè ‹®ÊøcœN‡íTýµ¦03 EÓH#ö[Äd–›LpßbWw[öç¸ÐÈÀ„ÔU'i#«øY—’;c.TòBÑÛ‚ì#õŒê -4mûÆÅçù!ðp“Í“•Ó{xû>ýÌŠÇêÈ9°[ö&d"f\A Z¯e(¶tÕ–ÌXLsa,ôs‰ú¶F‡Ã×,ºI?¢"cäàÌt6> ž½×Âôª)©Êëeâ<‚ø7]Æ GÝ+ÈÖ,ÆÞ,ŒËXŽÍÇZR#ÄS;?§ÊO—À&ï‡l „êßÒÄøzÆaä bÂ6nØT· Ã§{Ô8Úߦßȶ3Tj¿Kœrø6¬NÔ%€›ëL7@­=>×ÂJ^pû#\)´†‚ò˜¨!=ÛæKEàc :σŽZ#„ oæ²|, ROҬЃ¢Ã ‘.6²ú+d}ŠŠ:9CdÙ D…^‹ŽZÒHª¼EæíEɸ.$akæƒß47e \BI^¸&¯>[œ?B˜†¼Ù¡£öT·gEÞ gCù“u…mJk¥ú7å¡bàM›ãHšƒaÞþÈÌVEŒôâƒ3âú²õx&iÁD/œ¹&&BoRrlµuί[¥Q827øGí. 7*{að¢ëcβ±)êŃŒ lTàõ‡î«áqpøImD×-EVlW#è´½F„Ø3'²ÈRZ4l›²)㿼ùz>Rš1¡–FÕœ[ÍF¹A¿|K`É=jœ>ýH ÞŒ°³Û<ð¿G+„ t¯Æ–“°÷º„pFn+?£p?(vBf׶#Æ‹–5‰­\†%ÞÍë„ö3¸«+Õh,ÎÊ<=ùR/w16å@¿ßìRÿ.j<¹ÌÑKöÆÛõµ{½à:Yàèg_—öSú…¶õt[H¼hÞ/šƒwî¹*©»?®þaF4Ü#>/H—îr”Ãæ–קÉô$”—c™`!ÇMü -­¤a3@¦ÉW#?e¶L\Ct[k@'$]ÏjÉñMuÒ&žIkŽÂ (O'&3‹zAÛK/ó䀥6ûðîbʇÈ’@ w!gÊ…Ç‚¢#Çœ~? c¾èhp#­”,÷FgéëÞ˜Ðrzn‰@ctœl±À‚s£YJñú@MÒ¹-™`±¿ O94ÕY¼3ù6•Ú¦,ÃÐÐpxS…V!¼§4$`°aÌþ€ÐÌĽÈJpÛ¸TFh œQ³AüTn>é‹—äÍ\Ägƒé”1½8’𠯘›ñƒsí&è«ây*ø¼Ç-f½mœ¹%ÉBzWŠà¼”äÔô‡Ç ¡‹ílå;<…’ÚB„vH`jE‘çÇņ8w-ÛW㤀´s*'©ñCË|(•Éþ¤–Y]7f£àêøÚY=AšÛc„äßhbÀžE ÞÝ«'ñÆÔªa<Kì¢>&›?uሙoz…è?Æ<\¤©õÕ,2îÄ–<­ˆý@×# `™®ugŠQYB' É<øàI‘"æþÑGs j¸’ì&f$ùþä]³cL-B‘IŒ ä¥F"cN᪂*8´°Å’**=PœXÕh„ìT\Ä|ðb÷«š|2")ø™ÌÉáÓ/ûi -ž¢?BÇ~ñe?Ž99|RFü@2~eCñ!x‰“i•G³Ñ!åIûѼª)s­™ WR Œ#}ѽs=¹KÃvV"cq~ZXìpA¨ùn~Z–fçÄÞw9I'ìƒÙ ½ß•$#†Âí“ Z,'ØQ…>|½®ž_éF=óñè68 ¤&¬žÎ a-ÔwQˆY=0×yAþJ5 Ôn ˆåBüHŘΊÐiÁa’)\¦-š•5.}ƒ€‚¥±,ª…ödh°LÑÖo´T -»ŠEQ0K¼Ç:g‚SÙñuLƇ•ÍjgD¥\o‡d8±DKá3 e¾D?9¸Ùâ#螆,’3ìNyé&Ÿ< O›Îr:Û¼Õ³vÆe—]T2r«‰U+vuëôzZz$E ;l9Œ¸6!ñ•äLl;iÍ@ ”ˆxÁû".!ÙµÜZŒ˜1’¡2•bÂâ´Ûß×˼8 ŒàâVc8À¡Ü¬oÔSg–Uè.´0êTŠ¬”÷‘ -±M᫚Ľ\Ûxãðsr³á«Jy¿Ïó`ìmC+×’Nt2DZI ´²€DÀ.FI\F^É Ô¥¯ÈifXW\c]'7v é&ÑÅæìòNÁû0æ 1î:»¼®<Ï./WQ_$”|ܲ,+½9„ÞÍÅ \&åãbRÃOKîªá§ÝÌ:ÛT„Pl"`7ÃÚ8vÈ@aK’ŠüioåV°Ej®]*+ ¬ôŽ’³¼9K¡egyS¡?C0EîÄhDŽ Eà -C¤‘<­´ ôRY$%²›ú‰œ0°ÒKâJ§µº„ì†)?­мÓ&RÞŠŸ–TðÊ«ØœØ]Kü´£®•ûðSAQ°¢Ô(Õm³ß%QŽ_÷ýeNßCa²ß‰F ~j%‹Ÿj4ÇÏVI-HÓ÷T4¢Ej™ÁŸòÝ ¢ÁAC; (:ó”‹Û)Ct–‹bK‘sÓt -WÖÀi`¥·3\±Ë xå5EJ¥šv")‰X•ÎNñÓîY&ã?­bT:íMñs"4™âçAtªð‹ðcË×<„·›x€Zy¿®ö¢jm¢©2 ›®ÉÄO«+¯•‰Ÿ¶PòÖ#~ZÜøiÔë´wTŽøiKIg’Ç‘wLòiUé¡ê¥2 ƒøi/f¢Ð½dfšRhìÀáñHCí„9TÒ0G$ŸÏ‚™¨²²˜‘¶ˆGàá3ˆŸvÜc˜ë*½ÖÀJ¯aÀpZê¼0îðÓšÇ  8g‡Ÿ7ÆŽdÄ“á/Üá§%í̵èðÓj#Å؃–·`—Ê¡•^‹"EòBDÀ.iA’CK” X²À‹Š7™ÀA§Jp@ˆyÕø²ªÅðÓ®Ÿ*ðhñ¾bøiÍL¦Tû,/.[4I$'rhÔh„¤$…$I‰˜òÓŠ,»‹”ŸvQÛʼn”—Vzw(~ŽVzÅ)/nñÊ«x`_¯¼/¯€º +»4¬æRÕî©Fª•wôÔD+½¦[®òâ²åŸYåÂ'WyC‹zI®2äÚ¸Z»U2¬laaR©¼0Ë@±Ä£‚š¿c^BɭП¥–HÌ‚øiuí“)õ‰S⧼)Rn8å]7…6Õ¼Û¦«A+NyWNy{_È¡C+U•–3%9-;E¤½Ü¡l(÷’M†e± -¤ˆ²Üc`]×ƺv&š ¦¼ä…Ø P6Ô‚ƒÎpII`žÃ¯8üÛ §Õ›\2‘őە˯| lþídÁ+"]dDÙ‡`$¼G³xˆJ•Ì ˆÉöX×\¦T5,„¦€h­«‰8 hˆÞœ¼íqó'OcêZå-O<Ë! |7h©„±‚ªì èUÏôøäË~¨ÎmüN-üTˆrü82~µÓ~—ÚYhŠ4êUR Q”…YÒ ´a`eœÎ!¹«ègõÆñД¸œms ÖæÉ[¦Œ~©„É~J?Wç6~¼ë 3IàÉM‡–#MHÁR¸dÓŠ—ÛyŸLi³(D,¢­âHÍXJ/²Æ&†Åj  V%–uƒ¦D˜9þXÁIh„žlñrAÛ'ÌÊ‹ÅÖ -v b@9 œ€|T¹°Ú¯†ŸÖqñ[ªh8VPû@ËkOã$“ ,‡ÑVû ~ÚÑ– KP•ìÄÉü*Okڪ솮­Ô)²»?…Nx^Þ\²À -ÌQ - zZRDÀ®Nd/…V¸ª”—H EÁ†ÐŠzZžâ§5\²IŽhÊ&¶´ÀÔõŒG^PLB LXé‰7 fD‡„þ3`S*¡ÄmÆ@ ´ÊÉhê§5Yü´i%äÐ.nÚ³š#dŠdWnÕÊ;&LÈc´ÐÂd¨Æg.^Á?èL‘;SmŠdqñi$²(*´°NP,z\-ÕÅ0p@Ð éfÕâÉ_Í»=ºA@ÆHXˆDÂh„ú •Ê[zJå5 ¦-²©t‰,TÅLmF4¹)YK© ÉC˜7C“8åÅ®ëá”wGj$2©rÊÛ-‘CØJ8Ÿ×šBeCAb³V.8‚]@lÅñv±u›µr1^+ €Ön6 ¬1­µ‚b³„qTý×¥Û·ÿ^›·ó|óÞ8@ëÿqÆûã>¾|^÷ÿ»w¾kµù3לãÜ·ß›s¯‰Í}M­Iýÿï·Ý3Öšü7›þ÷kbͳ'¯÷Úüó¿ý¾ýv~?‰5ǽsïqÿw_~M1×æïØäwžMìqÏþë«¿ö¸›Ÿçí¿éÉ«¯7uß·ô7ö=o|³îg¯¾ç¿güº{oÎù^üÿ~IÝw€ÏÝÄû|µÇÜ›<ï½çdßWo³SÏM2çý¿Û_¬¯Î×Ì÷fü¿é}æ×ìýrorÒÌZïnzíµÉ3¾›ä[êîÜÌæí9çÛý5õêÌÍ®uÎ7kóbß÷ߤof¼½Ç]®5ÉwßÚwŽýøÒyû¯}Ïdæ~@x™žÜÝ3®·÷þn¯é3&¿ï}“ÞôæÞØï|»éÍ«yÖ™4ß[c3g¾;Ïg½õæ½ã«=i^Ü{ß[óžµiróþÌ/é¯ß¦î\ê5¹yÉ{¿yû¿8_œIï±ç·÷­ÉÍ»ïwwnbüsïä6»¹ÿþ~÷±ÇœïîIÝ_Ûû­ñ€ð2;Ïë¾;Æ›ä=çÛÿõ;ç{uÇýê‹¿öY²›ãÏy&{ÇÍ»¿ÜäÛÄwÿ­ùÅ{ç~Ç€~ûåæÍø^²ç‹±éïÆØü‚úóî]ïì/ï7“ؼoݯÆæÍ™ÄãÎïýÝ“~çŸÉ¿1Î}5fƒÝZ)ƒMe0h­Ö -kõ:¶G»Y`7 -omñ>1‡äMœMnîÒãÝbSóËi¨½p6 ƒÛåh6…Á µ¾Ö}kÞñkÿî}×úõóöf¿Ü›?{íI¯Þ;kÿ¿·g“;oîùÕ®sÎX›Y玱þüû¬·æ™_­Õþ}î8ß÷Î9wògSÓgM¯5ÆæþŸìýc¬ÉMM5s¼9ö|ïõÞ;kònž=æÿÍùõ&7GsÜqÖ8fã­Õ ñ*€0±„Ô ©¤¨!håZÅ€àRnÀåfÆßãa  ¥Ân`7Ê -<€+c DŠä´ ¡ ûUK ‰P"b ëvEŒAHR~–)?­‰T¡˜Ôýƒ~¤ü´WD:Rœ wN¶S‘"¹F*qœ0ñ¹ezŠŸ–[ôrýn…Ð`†UÉF‘8ÃEEÄãà€°ðŠ¨¨”“YU2‡ÐȳH0@(¥Òá$-¸€o@"BBD(> ‘Hã¡8†‚IA…Q!‡œa¨ŠÑéþÉo ™ª•l]¶L%™yš·LA™½ì¸J3n–Cor‡ òç|Ðùr_¦ò›’ü€míX±üyéB ·í„£ -jÉzÝÀ…j“ÆÿM€$$TÙ‰Ûzépdd?ŒC—‹v®õä#%QmžOŽ ù Rp™}GZØÀžHù•êÊ¿’¤ÕËI¿à([”ãœ%5–†öm@—úKx–Ó6’䃢ÛaD¢NnùK’^£ÏöJ¼( Ó'ÃÚ‘WÓ'™†fêÉ&ý.1V6çÑ̓·ÝÅXÚ0PrtD-PÔ.&8iœˆg;¤i—ÎœÏsúb:FºŠ>­JŸP¹‚£øKU¿rZ@Èa *¼™´ù£sËÐSl5 &%^í9á,a¬r6ßt`+“(aò5“a!é.s@¶£çÔó\4Czé8J7lÔœƒXcÊb¶¸bÐÂúR7›a†öæÉ€`Þ÷ì3gc雦&¹ñ¦Â‡9Ñ€6a„Ve+«â—ó`Þ¶¦[ÆåìÈ VáèlŽ¢îòLõí„Æatâ.=‚'Aw3n„Åþùë2,BPv )“Ø•+R‘ÙêÙœƒD[jʤF#å2ÍmÕÊe øÁŠÌ',Ír"ô±,I \-s T’ ¬™åd—E”ïð;Ú0% -…†G³ÒMžÇA¸2ÝîB”eaiíJÙ€8¦Îi3õ©-àbýw¹%Ç_rðë×àÂ5ÕÆsw‚d=J+/­Ü‚.;K`x‰Æ">­rýcK2±rjv9Дø!*¥ù×gëÇḙ2A·‰T6ze99lÍòø½¼¦(ÈùN¾pJ»\¢51¯×/èz¸„„DËæwÝ5!¿Ì¸ieBàp' {Ù¶%(.džͤ¡›Nó^OO °ðøÇmð¢ý(ùæyI¼ê)“y’Ñ$³ï[,3žPCS§ÕUµï¬QMq´J¢ß_gÑÚKY¼‚±T‡!§@‹&—F4ýÇ°ôCËÑ£.ùGU® -3ÙˆàÒ¹QŸ±.ø¸çÆóW³Ñ¶ïA-%Š¥Ê*ð(bl¥ÖèV’á ̉~Þ: Ô}¶ L$óAÎ4ÙŸdKŒq›fÓÅs¡J#™¤«TäR‡°ô—g p«[f5”L}3ÅÉ¢Þñ€•j3Ÿ÷£¶„Fþ p å•ù?ï“,u²c¢Œ/ÚÔÓÄì崚+‰xz‹(Ëi¹»¦ŸuÅ¿¡èØ0Zºõ³…Pƒî— £W[ì=î¸)V9Þ{œ÷k’É qª–QwlPºDÎ ÕØ!#Àzxf¢C´Ý~Ñ3hÇð<‰ž=C]‹—‰dÙ#ît²ÅÅMãÛZÜ×o™3M•Ý5¿ÓŪ+©½Ð|f$o?§+Ãç6(DRŠXÂÔ·JQ眲$ ´µf>Èu¯:ævª\ØÛ–% šE艜`3©3»ôêÍŒeL©1¨YYE Íæ9~“›\Vù]àX”†¾¦JÊNl4@*Q´þ¤Ù|#ÂP÷iMvbêcg0t‘1÷zFyÓê?‚x”J¡1“÷Yò)&^–Ô.™·ûÂ!“x™L7m*£ÏQàŸ!7íä½cYª/!Ûè^plj‚CJª´Õ[ˆZ`u|ž„pÍ+OˆÃÓ Gx1/n„£oÖÀŽþåR+é`0 -Ð àÞ¦Þ~ 4ß—d‹%†ñ¡¤¶%nÚ·oTIuiãZùõí«oƒ„Mça´0?ÆO2±Ž¶K·¿u.fÛó¡hÀ0jàLÔ.„lo™,†äBð%°¡%'Ÿ¬´Ú£Ñí*®¤¦Ï9_éÁj´ì€&bÙ¤'Sæ½8T„‰…LÂkºQ9†˜ãgÀô£ŠûŒ×ªñQN “=“’K¢SUbâfµXòˆ{.À•Îd'ÚèYYeÚW­ó Í/ñÿµ›¨y¥RõàÅÝD1GLâ´Ã•CiÒëRرîj–ÆbU<žÏ+w-a -• °tòtT›žn¤ñ&c‹N¯4[콈˜Q!¿QB-3†² ½ -ò¬Ò–Ë}MžÊ×F¢uÉÛ”‘LMÌܦük„ƒz&B7 (f¯|ní¬e”3ÖɆ¨_ ³dµÌýAô©QcHä.‘9£SYPiJÔÊŸ5ˆ<æA• 8=øWáʸ7æïÁÑ–SBdLJy¶Y!cA »·J¾ -d›§ Qæë•bš–õþlL%Ö52–&_éß„÷óZÅÿGµ ¥ÿϳº²Va(kˆò•~"B†DÈহª˜<œ™ù;Êj)NMÏö@ ·=`!j+¨M‹6‚H8˜öÉÇÓlÀˤçj.HO¿€ð“ÏOj8§×›¨dNC°¥€¯ |À™`›³Áúä»$V»<ʧADö•²pÈ÷ÞpñÉ v!7Ûã~uÚ6ò³Ëæ;{÷›å#h‡ªºÚ|ïqnãšÁdä©ÞòŠïòÛ5Ž>,VkDåÊ}Œ<Ý|/‹°0ÒXbg¿Kçp™Luf»]x 6“ò;ú~/ðœ<’G°Áòá·“élmxu1¢r|ª0s¢¤Îì›ätá:ˆ®£úZ/xtÿÞQ¾ü“’>ùDy[ ä,ç͵_MUpqŠ2¿ŸÃCš[0Ò96‘?Z;<å˜ÐUzÓˆ¦é"”áas©þû?Ì0ÅFT`”R í·VÉ=\ˆÇ¶‡á0! -˜Y‰;o‰òV‚Ï,E¼eÌÑA¹2 eº©n· :Š9o›#üG!à¹Ú9‰âsé!&9¹€ð`¤[^­yy#_ „ìÀ)!1 ¤ª,Z¡'¡ÓælÈÂ%&Б|’õ’ãQå¼¥"½N…ZøKëOÂY7E0\\žK *ý?”iGw¢;©ÆnK6õ¯¥;&1ìP££=ƒëk(Ì…¿}‹õrE‡R7L@\Òƒäd]û±\úÞ6è M{P¨é¬Äß+Û:-Ù }¤(r‚ļ› ¨ƒª½æ³êﲈýÇ:å¯x‚Çéi’ ÷zJdØÜa¢Ff3)¸µÃnEÂð“S}²L­ªïÏL<š C÷™¹¤GUvv¢Ê€äߪ7O™¦Yý 6 l§ÔRNÑû¨‘rƒ ­#À¤À¯Ó'Moq……A:lZ´ |î-î÷ñµA€2Yüè+á,Ü;Q?aí£3Y/ -f^HÛ)eôÃljè -ÀO(60¥L™°$A[í…ÃPoœMOŠlROõ3nÊ¥³Ï‹+E´Ü`CPÎ^èÁµOZ˜ Ç ÔÓ} ‚ØqêÈÝ-‚+‹y¼6r¯ÿ‹–1éþQ¾Ð’o8ÇüG”ñÊ\£&Å5!b/ 2ý(B„襣âv÷¦u.t`  5‹Bw ºc‰s€UW„b A8F÷ºMwG°æ€¢²Úˆ.‘ñ¶Â›žRdÒr^ €9šàÛÇ0Åãa^+×Ôä^ ùÃY½©à[`y ·Â¹¥ª|ÌIU›ê2'C' ñêŽýß´L3CײíߥòÊÙ šÂƒŽô‘8Œ•r²pëk?á ¡ÖᚪRå¸G¿|à ]7Lè)Z)rý´rÿ-h!ë'…–íNK%¸CÝå¤j'3M0ºj7& -ÎÅÏÁnÙ GxÈ[è;^7¶>iœ®&? ]V¦§ŠI{õg9~²OÍgŸ›áb9"dEªÊs 1ŸÅZ+w±™¬AoRtMA½Ö{PäüëŒZäu…¹ÏE}±6U*®P[®hdg¼’? ©¶CcDƒe‚Æú>'ª;Œ0KêÐ#Ü,øfI³Íœ!ƒÎß" §±Ž÷Èø¿¤ºö<ˆª%å GaÚbI©Näéå=^RjC=Ö7š -g €51‘û%vkË'ZXmE¹jq˜ ²6¢5ðlOÕÇ/ÝiŠ,Æ'ú•Sê»ë«¸¿)N-ÆÖ#J·w"‚}Ù÷êÞ¼.NÿÿˆQ}bÍB!Ž -ƒx@ -v¬_ÏÊ|©­hñW¯I “¢[¾W>"³)lF–Fýج‹Q‰>;);€?:ɤï†Ø‘Rô>Y"Ùàv-|Âm—žm­µLÃ2K°à^¤xr1\Ùç."Uûfsù YUYB¬¥‚GEƒif_v{÷ÓÐd‡½†#F¥¸Ä[u>Û«M`@ƒí®Ú ·˜)þTÿ¯…MJÀªÆí‰]¾¶¦CnÁ<}1)ß^zm̘Tá®–iRöMÌ"R@ÌQ¯n€³Ên¹X0å8}¾ÌYXÏ°I.²(Ô}˜•Ž3ê¬à¦‡¯¡Á)[¡^sNëéeóÛ¸ :'x!µnèGcP>¸>LvÈéùƒ?zª‹×Ö‰ÄêJêí´v¹@Aá&#¿R-t+Ë%«@ÌÏ9“úÌ`‚º–òÛË‹ÖWè«‚iõÊ‚¹ºê×¼‡Á¶ìR¢‰ƒ'Š¿¸:!|¯ÔRºoËh1 -=@T+¥«[åÒæ5ƒž™Ñ"S˜ŽÃ»”ôA?æØ#2OÀ‚i&[t𵚂5vI· EŒ‰¨ú)Š´ŒK))®s󥹧t仞9;ˆöï3<$.]D -J…ƒ)e³æAAi+\(=}mJË¢'±Š‘fÀq”^T ¢·±·Ô’Cºað5AB®‡‡Ÿ„ðúÀ­Wö[±±i‡8S°fßÌ­µÊY¶vèÑ(ºïAüV’IÀˆäXYr…M -B‡‡²güw~^„¯—dU9_Ò‰Óåcó<3f±«Ç˜7­|Äž_f¯:b!…ºyÅXd²Ë”®H ØwÍáuM.ÕÿNÿîÿ#Ã=ž™]6Š‘`š””šÚEIx“ÜcÙ2è¼x@ÆÄORii•9då/S—£ˆ ÀFmizßúÔ -[¿sÿ -²¼!§Üüq„+¯ôœjœAÔöòK†÷® ûž¨‘äôÅiÍ)¹D¿ôáH@¬©ø°HˆÂA¼oîÉ ‡SB=s[jIðcÐWSFýÿÛî?£…DBB/ÜÆõÙ¾5^…LJڭÓ2†”ÀÄ,öµXÊ>ÿ3ô¨/‡œÍë›Òî‚wBÿ\\H¾¤ßÌ à²âZÐ쎘˜ˆ:_O š%®œfúþHqfû!Á6L}€8CTnä°Aäàfñ’Ñ_û”à˜.&¢¸fx0Cáá]B\;ìC|úMeK?C”l¥-ëJ”ãZ,Üb5+%$7@ˆÿe& ˆµ`BßEâšOá ļ¬Ã!Þ­- Ðä„8Çhâ¡Zäyáte bQK¤®M•%/¬• !¦‚çTÆsý!^b~» ã 4?`ñŽÓ%ñ€ãŽÇR=!¶ÄÖ,ý>!f³9l1GÊaa\&âm­(â!†=Ñ©OÄ!ŽIë+nZcNâÅ´ê=Ä°¡ì:ÎÁrƒu†#‚ä" eW‰;s>}ÄYæèR.${:û&|1ZÛh?c–KÕ!dvÌNGîÃ;¥a¶½> FJA)a³ý¢LˆÖ§›;ëjª£‹pÐàPi„#u.í|ÿ¬ðàá1Ɇ -¯óÏ€X±»Ã×®HvWê^%ƒ°Åt.ó5 c'YOÆ‚ kJŽR4M~ª´iÏuÌX8B ÅäR½&­õ€ÂŸ ƒÉNÇøÈ€Œ¡·i²doŸ 9$ -)G½cƒÖ4qô0^Ô…·J·6èe/6a~LfÃÂ|ûŠbššþî·%Ç$ÀýO]a¬ïͼl¯@PRq¿U)”¡!ÒŽ×Ç#ªT°§vÄQ¶h­?šÀ Ÿ„ÒaÙÎÞz+T΢ÞO\{Dô³‰CacnÒª‹û)­áb?Ôyê[•Ü½Í) -endstream endobj 34 0 obj <>stream -H‰dQ»nÃ0 ÜùüÓ¤DJò·èA‡~€ÑÇÐHýÿ@)G…DÞñN$5>Ï8gÆÃÃŒ0Î/ŒËŠ²\— ŒO}¬pu€ý8‘•RQE(¥„Ë*q†!2EI82§¿`0¥`ÒEÉròjEÜ'”Ê&Ù t“ßrBVÔˆKªH6šbì—„¢h…&Ù€B9KW!‘,M`™ÔlïÉ›æ®çOx‡\}$1Æ(ŒC ¾ßà/ÝBvŸlŠA)Ö·ïk¨Š@üb-8„à‹ú/¾1#)yg¼ËÓÝ ¥\K[\ñyšòåîÜÞnÿêx3«#>ýÃOð#Àšÿd? -endstream endobj 33 0 obj <>stream -H‰dQKnÄ0Ýs -.6Æö¶™ª«Q5ꢈúYÌŒ4Íý¥ÁI”Dª-x¼÷ïöçñå4 ôÃã8¡Ì§ñý›C?<`Ÿ¾Sõ"•Bֈ㠚ãÁ(IÆ®•ð -ÊÄ¢À˜¢v!R-ê@aJ5U‰k8˜Œ v«)„‘Òf—D¥EH•R‘–#SʶùS$‘•r‹¿ÑÅÈ¢yýWø…o¸ÀÃ_#iY]Ûþ¾à–Ö‚Œª¤AêÞWxvórŒ$z‰d5ý;Gè‚P°Ý2ÅV×*_Mž™Ë½y¼—‹n–íòÕtò’wµyñ¨=îõì¿|§Åaò -endstream endobj 32 0 obj <>stream -H‰\QKnÄ0Ýs -.Æø³mZu5ªF]ôQ?‹ÎHÓÜ_*NÒÆ!Ûðàñóø2áxš'„qzeœ”Up™¯0>;ô¹ÀÍvñ›Œ9¢H¤œsÅùÍq`”¤âP”J)ø Z(%í+¤œqJ’Õœ©dé"*S•ž"’ÈÔ&ÖÚöâa—@µz -Ëd©1’Q¨á0!íLUï2wñ^€½võ >à 7ŸGb\ÏЮŸwxÃk·‰J†1P4“cŒCö}F5˜“•BëýîamˆpxB¢˜ò?7y Ýô?ÏF¼Ëx$Þ*ï6ï,^3µÙžNþÍgø`|ýaá -endstream endobj 29 0 obj <>stream -H‰LQËnà ¼ïWð^ï¸Æ­zŠª¨‡~€ÕÇ!‰”úÿ¥.¶[#lÃÌά_§0ž' -§§)À8½Q˜—ÀëË|‡ñÅ©¯NÿbÔd!%T ó Ôbaˆ„)I¸´Úa)ÈMÀŒBÐŒc§ˆŠ5ö–d¨ê -BâÚÞ’´Ã„ì‹A2i„2&ë ±P=0JâÎ1ç–ì -ßð xxš¼>ƒ¿?ðî]x«Þ_SBMdGz×+&õ½ óÉw^ó6Ùša¨X¢Y®ñß¹Cjº}½WVW×ÊvàÂíw¤]Okçùì×z_^× -endstream endobj 27 0 obj [26 0 R] endobj 39 0 obj <> endobj xref -0 40 -0000000004 65535 f -0000000016 00000 n -0000000147 00000 n -0000034386 00000 n -0000000000 00000 f -0000034465 00000 n -0000000000 00000 f -0000039649 00000 n -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000000000 00000 f -0000039722 00000 n -0000039962 00000 n -0000041237 00000 n -0000106826 00000 n -0000172415 00000 n -0000238004 00000 n -0000303593 00000 n -0000000000 00000 f -0000034835 00000 n -0000035208 00000 n -0000035581 00000 n -0000036666 00000 n -0000323675 00000 n -0000035959 00000 n -0000323353 00000 n -0000036965 00000 n -0000036852 00000 n -0000323027 00000 n -0000322693 00000 n -0000322362 00000 n -0000036338 00000 n -0000036736 00000 n -0000036767 00000 n -0000037000 00000 n -0000323700 00000 n -trailer -<<8E2A76D0EF38E64196E664C6D45C708A>]>> -startxref -323889 -%%EOF diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/android-chrome-192x192.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/android-chrome-192x192.png deleted file mode 100644 index 5ae1721bad2ff956d5b94aaa09c1f3815459e24b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6424 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 z≰6?pcG;PMk<%8P{FsD*TGeSZMdiXVSm7{Z}=Xu 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 diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/browserconfig.xml b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/browserconfig.xml deleted file mode 100644 index 5aecc916b9..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #00aba9 - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-16x16.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-16x16.png deleted file mode 100644 index 5fde446e856a7871ec5579a8fb1e5d6826457860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nAI{vB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!`(P&e7Yz(B#=QZF?n z(J09{EiqX~!N|bKP~Q-U%ykXTt&EJV3@sI)KnZAJQA(Oskc%7CIv~$hDWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~ zr2NtnTP2`lA->2hfE$}v3=Jt@nCVv}7U&!58Gw8RQ|Rl9UukYGTy=3tP%6T`SPd=? zsVqp<4@xc0FD*(2#$B2+$f^P>=c3falKi5O{QMkPKn7&wm*f{`uGI2FCH8(VLb#^i~vvfAG zbTl_HcQ$f$HHYbS$xklLP0cHT=}kfCHN~kHlpJykfHu3N7G;*DrnnX5=PH2xY?X=I zEk-!agX&Ge?G|I4di8;h(FesWQcS~yfXN5MgeP4f2cGy-^MEP72$;0@>1D5EU|>x4 zba4!+xRqp*`}d>+XTl*RHNGQj9cnl`_B(x4T`_}YSCW`XorJ)7)+9NT!dQ)S%#TDA z;yTYZ6ez^;9qFlvIl~-!n8BFk8EdA(JZA@E9s{SVUdqxF*o(hClL=#!&2(cETX1F_ zlNp=2ZpWn1muq;IarvCkJLzh6fLm?z_h0sG>bzcNxyeA8*jNmxIibf22r)DuP^J_ z%+lD{s!i3}_BtHyyYuh7Kd~XM1Df z@vHSb`u2a>t^fc1>dSNf+g2lm*NH95j_@hysT&HGF%`0&VV&IYgPU`fW0tyd^+QPk zb>~_Kjz8_IYP;r%hcOni2-K@36tjfrUOU4wDWI|Kq^SZMoAP0Eg?$`neNLU2HIaE@ b4ue1fgE?PHS%D+C6l3so^>bP0l+XkKy@RcB diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-32x32.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/favicon-32x32.png deleted file mode 100644 index 7d8e7ac2e9f1ab6e66cc7a6a0cb7a6e94c6c4bd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1751 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 diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-150x150.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-150x150.png deleted file mode 100644 index 32afe9a267e26aa7d95223b6b95a7f7993eb7e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14138 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 diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x150.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x150.png deleted file mode 100644 index e6d3ee3cce9df2692e7d02beda7cadf42cfbb088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3411 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 diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x310.png b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/mstile-310x310.png deleted file mode 100644 index 55aa51f1a264643c71b56423ae8931aa96177f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9844 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 diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/safari-pinned-tab.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/safari-pinned-tab.svg deleted file mode 100644 index 71f62271ca..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/Favicons/safari-pinned-tab.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/google_groups.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/google_groups.svg deleted file mode 100644 index 934cf1d86d..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/google_groups.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_dark.svg deleted file mode 100644 index 966e74def8..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_dark.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_light.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_light.svg deleted file mode 100644 index cc9df8577f..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/icon_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch.svg deleted file mode 100644 index 7445c31da2..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark.svg deleted file mode 100644 index 7445c31da2..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark_dark.svg deleted file mode 100644 index 902e504f75..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_center_mark_dark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_dark.svg deleted file mode 100644 index ea25e5d2f9..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_dark.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_light.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_light.svg deleted file mode 100644 index a931095bb7..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_dashboards_on_light.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark.svg deleted file mode 100644 index 7445c31da2..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_dark.svg deleted file mode 100644 index 902e504f75..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_dark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_light.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_light.svg deleted file mode 100644 index 7445c31da2..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_mark_on_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_dark.svg deleted file mode 100644 index 902e504f75..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_dark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_light.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_light.svg deleted file mode 100644 index 7445c31da2..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_on_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner.svg deleted file mode 100644 index 605f05e17f..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_dark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_dark.svg deleted file mode 100644 index 528236b80c..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_dark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_light.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_light.svg deleted file mode 100644 index 605f05e17f..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/opensearch_spinner_on_light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_background.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_background.svg deleted file mode 100644 index ebe5663263..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_background.svg +++ /dev/null @@ -1,758 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_mark.svg b/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_mark.svg deleted file mode 100644 index b741260938..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/Assets/default_branding/wazuh_dashboard_login_mark.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - Layer 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/stack/dashboard/base/files/etc/custom_welcome/light_theme.style.css b/stack/dashboard/base/files/etc/custom_welcome/light_theme.style.css deleted file mode 100644 index f25261c6b8..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/light_theme.style.css +++ /dev/null @@ -1,4481 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -/* @notice - * This product bundles bootstrap@3.3.6 which is available under a - * "MIT" license. - * - * The MIT License (MIT) - * - * Copyright (c) 2011-2015 Twitter, Inc - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, -.col-sm-1, -.col-md-1, -.col-lg-1, -.col-xs-2, -.col-sm-2, -.col-md-2, -.col-lg-2, -.col-xs-3, -.col-sm-3, -.col-md-3, -.col-lg-3, -.col-xs-4, -.col-sm-4, -.col-md-4, -.col-lg-4, -.col-xs-5, -.col-sm-5, -.col-md-5, -.col-lg-5, -.col-xs-6, -.col-sm-6, -.col-md-6, -.col-lg-6, -.col-xs-7, -.col-sm-7, -.col-md-7, -.col-lg-7, -.col-xs-8, -.col-sm-8, -.col-md-8, -.col-lg-8, -.col-xs-9, -.col-sm-9, -.col-md-9, -.col-lg-9, -.col-xs-10, -.col-sm-10, -.col-md-10, -.col-lg-10, -.col-xs-11, -.col-sm-11, -.col-md-11, -.col-lg-11, -.col-xs-12, -.col-sm-12, -.col-md-12, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11, - .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11, - .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11, - .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; - font-size: 14px; -} -.table thead { - font-size: 12px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #D3DAE6; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 1px solid #D3DAE6; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #D3DAE6; -} -.table .table { - background-color: #FFF; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; - font-size: 12px; -} -.table-bordered { - border: 1px solid #D3DAE6; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #D3DAE6; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #D3DAE6; -} -.table-hover > tbody > tr:hover { - background-color: #D3DAE6; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #D3DAE6; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #c3ccdd; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #017D73; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #01645c; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #006BB4; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #005c9b; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #F5A700; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #dc9600; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #BD271E; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #a7221b; -} -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #D3DAE6; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -.form-control { - display: block; - width: 100%; - height: 32px; - padding: 5px 15px; - font-size: 14px; - line-height: 1.42857143; - color: #343741; - background-color: #fafbfd; - background-image: none; - border: 1px solid #D3DAE6; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #006BB4; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 107, 180, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 107, 180, 0.6); -} -.form-control::-moz-placeholder { - color: #98A2B3; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #98A2B3; -} -.form-control::-webkit-input-placeholder { - color: #98A2B3; -} -.form-control::-ms-expand { - border: 0; - background-color: transparent; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #D3DAE6; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -.form-group:not(:empty) { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 6px; - padding-bottom: 6px; - margin-bottom: 0; - min-height: 34px; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -select.input-sm { - height: 32px; - line-height: 32px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -.form-group-sm select.form-control { - height: 32px; - line-height: 32px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 32px; - min-height: 32px; - padding: 7px 9px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -select.input-lg { - height: 62px; - line-height: 62px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -.form-group-lg select.form-control { - height: 62px; - line-height: 62px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 62px; - min-height: 38px; - padding: 19px 27px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 40px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 32px; - height: 32px; - line-height: 32px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 62px; - height: 62px; - line-height: 62px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 32px; - height: 32px; - line-height: 32px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #FFF; -} -.has-success .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-success .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #017D73; -} -.has-success .form-control-feedback { - color: #FFF; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #FFF; -} -.has-warning .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-warning .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #F5A700; -} -.has-warning .form-control-feedback { - color: #FFF; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #FFF; -} -.has-error .form-control { - border-color: #FFF; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #e6e6e6; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff; -} -.has-error .input-group-addon { - color: #FFF; - border-color: #FFF; - background-color: #BD271E; -} -.has-error .form-control-feedback { - color: #FFF; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #6d7388; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 6px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 26px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 6px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 19px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 7px; - font-size: 12px; - } -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-muted { - color: #b2bac6; -} -.text-primary { - color: #343741; -} -a.text-primary:hover, -a.text-primary:focus { - color: #1d1f25; -} -.text-success { - color: #FFF; -} -a.text-success:hover, -a.text-success:focus { - color: #e6e6e6; -} -.text-info { - color: #FFF; -} -a.text-info:hover, -a.text-info:focus { - color: #e6e6e6; -} -.text-warning { - color: #FFF; -} -a.text-warning:hover, -a.text-warning:focus { - color: #e6e6e6; -} -.text-danger { - color: #FFF; -} -a.text-danger:hover, -a.text-danger:focus { - color: #e6e6e6; -} -.bg-info { - background-color: #006BB4; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #004d81; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -@media (min-width: 0) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - transition-timing-function: ease; -} -/** - * ui/angular-ui-select depends upon these styles. Don't use them in your markup. - * Please use the UI Framework styles instead. - */ -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 5px 15px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - box-shadow: 0 0 0 1px white, 0 0 0 2px #0079a5; - /* 3 */ -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #FFF; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #FFF; - background-color: #006BB4; - border-color: #006BB4; -} -.btn-default:focus, -.btn-default.focus { - color: #FFF; - background-color: #004d81; - border-color: #001f35; -} -.btn-default:hover { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #FFF; - background-color: #00375d; - border-color: #001f35; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #006BB4; - border-color: #006BB4; -} -.btn-default .badge { - color: #006BB4; - background-color: #FFF; -} -.btn-primary { - color: #FFF; - background-color: #006BB4; - border-color: #006BB4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #FFF; - background-color: #004d81; - border-color: #001f35; -} -.btn-primary:hover { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #FFF; - background-color: #004d81; - border-color: #004777; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #FFF; - background-color: #00375d; - border-color: #001f35; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #006BB4; - border-color: #006BB4; -} -.btn-primary .badge { - color: #006BB4; - background-color: #FFF; -} -.btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -.navbar { - position: relative; - min-height: 45px; - margin-bottom: 0px; - border: 1px solid transparent; -} -@media (min-width: 0) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 0) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 10px; - padding-left: 10px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 0) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -10px; - margin-left: -10px; -} -@media (min-width: 0) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1050; -} -@media (min-width: 0) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 12.5px 10px; - font-size: 18px; - line-height: 20px; - height: 45px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 0) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -10px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 10px; - padding: 9px 10px; - margin-top: 5.5px; - margin-bottom: 5.5px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 0) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 6.25px -10px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: -1) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 0) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 12.5px; - padding-bottom: 12.5px; - } -} -.navbar-form { - margin-left: -10px; - margin-right: -10px; - padding: 10px 10px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 6.5px; - margin-bottom: 6.5px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: -1) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 0) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-text { - margin-top: 12.5px; - margin-bottom: 12.5px; -} -@media (min-width: 0) { - .navbar-text { - float: left; - margin-left: 10px; - margin-right: 10px; - } -} -@media (min-width: 0) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -10px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #F5F7FA; - border-color: transparent; -} -.navbar-default .navbar-brand { - color: #69707D; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #69707D; -} -.navbar-default .navbar-nav > li > a { - color: #69707D; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #343741; - background-color: transparent; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #69707D; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #d3dce9; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #d3dce9; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #FFF; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: transparent; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: transparent; - color: #343741; -} -@media (max-width: -1) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #69707D; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #69707D; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #343741; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #69707D; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #69707D; -} -.navbar-default .navbar-link:hover { - color: #69707D; -} -.navbar-inverse { - background-color: #343741; - border-color: #1d1f25; -} -.navbar-inverse .navbar-brand { - color: #FFF; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #FFF; - background-color: #4b4f5d; -} -.navbar-inverse .navbar-text { - color: #FFF; -} -.navbar-inverse .navbar-nav > li > a { - color: #D3DAE6; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #FFF; - background-color: #61677a; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #FFF; - background-color: #69707D; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #b2bac6; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #1d1f25; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #1d1f25; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #FFF; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #24262d; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #69707D; - color: #FFF; -} -@media (max-width: -1) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #1d1f25; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #1d1f25; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #D3DAE6; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #FFF; - background-color: #61677a; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #FFF; - background-color: #69707D; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #b2bac6; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #D3DAE6; -} -.navbar-inverse .navbar-link:hover { - color: #FFF; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: none; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1070; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #FFF; - border: 1px solid #98A2B3; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1060; - background-color: #000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #b8bec8; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #FFF; - text-align: center; - background-color: #54B399; - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #017D73; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #006BB4; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #F5A700; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #BD271E; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #FFF; - border: 1px solid #D3DAE6; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.list-group-item--noBorder { - border-top: 0; -} -a.list-group-item, -button.list-group-item { - color: #69707D; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #343741; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - text-decoration: none; - color: #69707D; - background-color: #F5F7FA; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #D3DAE6; - color: #b2bac6; - cursor: not-allowed; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #b2bac6; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #343741; - background-color: #343741; - border-color: #343741; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #969bab; -} -.list-group-item-success { - color: #FFF; - background-color: #017D73; -} -a.list-group-item-success, -button.list-group-item-success { - color: #FFF; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #FFF; - background-color: #01645c; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-info { - color: #FFF; - background-color: #006BB4; -} -a.list-group-item-info, -button.list-group-item-info { - color: #FFF; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #FFF; - background-color: #005c9b; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-warning { - color: #FFF; - background-color: #F5A700; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #FFF; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #FFF; - background-color: #dc9600; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-danger { - color: #FFF; - background-color: #BD271E; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #FFF; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #FFF; - background-color: #a7221b; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #FFF; - border-color: #FFF; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #D3DAE6; -} -.nav > li.disabled > a { - color: #b2bac6; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #b2bac6; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #D3DAE6; - border-color: #006BB4; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #D3DAE6; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #D3DAE6; - background-color: #FFF; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #343741; - background-color: #FFF; - border: 1px solid #D3DAE6; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #FFF; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #FFF; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #FFF; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #FFF; - background-color: #006BB4; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #FFF; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #FFF; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #FFF; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #017D73; - border-color: #014a44; - color: #FFF; -} -.alert-success hr { - border-top-color: #00312d; -} -.alert-success .alert-link { - color: #e6e6e6; -} -.alert-info { - background-color: #006BB4; - border-color: #004d81; - color: #FFF; -} -.alert-info hr { - border-top-color: #003e68; -} -.alert-info .alert-link { - color: #e6e6e6; -} -.alert-warning { - background-color: #F5A700; - border-color: #c28400; - color: #FFF; -} -.alert-warning hr { - border-top-color: #a97300; -} -.alert-warning .alert-link { - color: #e6e6e6; -} -.alert-danger { - background-color: #BD271E; - border-color: #911e17; - color: #FFF; -} -.alert-danger hr { - border-top-color: #7b1914; -} -.alert-danger .alert-link { - color: #e6e6e6; -} -.bsTooltip { - position: absolute; - z-index: 1040; - display: block; - font-family: 'Open Sans', Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 12px; - opacity: 0; - filter: alpha(opacity=0); -} -.bsTooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.bsTooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.bsTooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.bsTooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.bsTooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.bsTooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.bsTooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.bsTooltip.top .bsTooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.top-left .bsTooltip-arrow { - bottom: 0; - right: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.top-right .bsTooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.bsTooltip.right .bsTooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.bsTooltip.left .bsTooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.bsTooltip.bottom .bsTooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.bsTooltip.bottom-left .bsTooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.bsTooltip.bottom-right .bsTooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #FFF; - border: 1px solid #D3DAE6; - border-radius: 4px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #D3DAE6; -} -.dropdown-menu > li > a, -.dropdown-menu > li > button { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #7b7b7b; - white-space: nowrap; -} -.dropdown-menu > li > button { - appearance: none; - background: none; - border: none; - width: 100%; - text-align: left; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > button:hover, -.dropdown-menu > li > a:focus, -.dropdown-menu > li > button:focus { - text-decoration: none; - color: #FFF; - background-color: #343741; -} -.dropdown-menu > .active > button, -.dropdown-menu > .active > a, -.dropdown-menu > .active > button:hover, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > button:focus, -.dropdown-menu > .active > a:focus { - color: #FFF; - text-decoration: none; - outline: 0; - background-color: #343741; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #98A2B3; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #98A2B3; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 0) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon { - height: 62px; - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 4px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon { - height: 62px; - line-height: 62px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon { - height: 32px; - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; - border-radius: 4px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon { - height: 32px; - line-height: 32px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon { - height: auto; -} -.input-group-addon, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 5px 15px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #343741; - text-align: center; - background-color: #D3DAE6; - border: 1px solid #D3DAE6; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 6px 9px; - font-size: 12px; - border-radius: 4px; -} -.input-group-addon.input-lg { - padding: 18px 27px; - font-size: 18px; - border-radius: 4px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 5px 15px; - line-height: 1.42857143; - text-decoration: none; - color: #006BB4; - background-color: transparent; - border: 1px solid transparent; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #006BB4; - background-color: rgba(0, 0, 0, 0); - border-color: transparent; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #343741; - background-color: rgba(0, 0, 0, 0); - border-color: transparent; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #343741; - background-color: rgba(38, 38, 38, 0); - border-color: transparent; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 18px 27px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 6px 9px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: rgba(0, 0, 0, 0); -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #FFF; - background-color: transparent; - cursor: not-allowed; -} -.label { - display: inline; - padding: 0.2em 0.6em 0.3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #FFF; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25em; -} -a.label:hover, -a.label:focus { - color: #FFF; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.label-default { - background-color: #006BB4; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #004d81; -} -.label-primary { - background-color: #343741; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #1d1f25; -} -.label-success { - background-color: #017D73; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #014a44; -} -.label-info { - background-color: #006BB4; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #004d81; -} -.label-warning { - background-color: #F5A700; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #c28400; -} -.label-danger { - background-color: #BD271E; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #911e17; -} -.panel { - margin-bottom: 20px; - background-color: #FFF; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #F5F7FA; - border-top: 1px solid #D3DAE6; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-left: 15px; - padding-right: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #D3DAE6; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #D3DAE6; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #D3DAE6; -} -.panel-default { - border-color: #D3DAE6; -} -.panel-default > .panel-heading { - color: #7b7b7b; - background-color: #F5F7FA; - border-color: #D3DAE6; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #D3DAE6; -} -.panel-default > .panel-heading .badge { - color: #F5F7FA; - background-color: #7b7b7b; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #D3DAE6; -} -.panel-primary { - border-color: #343741; -} -.panel-primary > .panel-heading { - color: #FFF; - background-color: #343741; - border-color: #343741; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #343741; -} -.panel-primary > .panel-heading .badge { - color: #343741; - background-color: #FFF; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #343741; -} -.panel-success { - border-color: #014a44; -} -.panel-success > .panel-heading { - color: #FFF; - background-color: #017D73; - border-color: #014a44; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #014a44; -} -.panel-success > .panel-heading .badge { - color: #017D73; - background-color: #FFF; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #014a44; -} -.panel-info { - border-color: #004d81; -} -.panel-info > .panel-heading { - color: #FFF; - background-color: #006BB4; - border-color: #004d81; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #004d81; -} -.panel-info > .panel-heading .badge { - color: #006BB4; - background-color: #FFF; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #004d81; -} -.panel-warning { - border-color: #c28400; -} -.panel-warning > .panel-heading { - color: #FFF; - background-color: #F5A700; - border-color: #c28400; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #c28400; -} -.panel-warning > .panel-heading .badge { - color: #F5A700; - background-color: #FFF; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #c28400; -} -.panel-danger { - border-color: #911e17; -} -.panel-danger > .panel-heading { - color: #FFF; - background-color: #BD271E; - border-color: #911e17; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #911e17; -} -.panel-danger > .panel-heading .badge { - color: #BD271E; - background-color: #FFF; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #911e17; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - font-family: 'Open Sans', Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: normal; - letter-spacing: normal; - line-break: auto; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - white-space: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - font-size: 14px; - background-color: #FFF; - background-clip: padding-box; - border: 1px solid #D3DAE6; - border-radius: 4px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 3px 3px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #92a3c1; - border-top-color: #d3dae6; - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #FFF; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #92a3c1; - border-right-color: #d3dae6; -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #FFF; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #92a3c1; - border-bottom-color: #d3dae6; - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #FFF; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #92a3c1; - border-left-color: #d3dae6; -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #FFF; - bottom: -10px; -} -.clearfix:before, -.clearfix:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after, -.nav:before, -.nav:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after { - content: " "; - display: table; -} -.clearfix:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.dl-horizontal dd:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.modal-header:after, -.modal-footer:after, -.nav:after, -.pager:after, -.panel-body:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -.navbar > .container-fluid > .navbar-nav:not(.pull-right):first-child, -.navbar > .container-fluid > .navbar-form:not(.pull-right):first-child { - margin-left: -15px; - margin-top: 4px; -} -.navbar { - border-width: 0; -} -.navbar-btn-link { - margin: 0; - border-radius: 0; -} -@media (max-width: 768px) { - .navbar-btn-link { - width: 100%; - text-align: left; - } -} -.navbar-default .badge { - background-color: #FFF; - color: #F5F7FA; -} -.navbar-inverse .osdGlobalNav__logoBrand { - height: 45px; - width: 252px; - background-color: #4b4f5d; -} -.navbar-inverse .osdGlobalNav__smallLogoBrand { - height: 45px; - width: 45px; - background-color: #4b4f5d; -} -.navbar-inverse .badge { - background-color: #FFF; - color: #4b4f5d; -} -.navbar-brand { - cursor: default; - font-size: 1.8em; - user-select: none; -} -.navbar-nav { - font-size: 12px; -} -.navbar-nav > .active > a { - border-bottom-color: #7b7b7b; - background-color: transparent; -} -.navbar-toggle { - margin-top: 4px; -} -.text-primary, -.text-primary:hover { - color: #343741; -} -.text-success, -.text-success:hover { - color: #017D73; -} -.text-danger, -.text-danger:hover { - color: #BD271E; -} -.text-warning, -.text-warning:hover { - color: #F5A700; -} -.text-info, -.text-info:hover { - color: #006BB4; -} -table .success, -.table .success, -table .warning, -.table .warning, -table .danger, -.table .danger, -table .info, -.table .info { - color: #FFF; -} -table .success a, -.table .success a, -table .warning a, -.table .warning a, -table .danger a, -.table .danger a, -table .info a, -.table .info a { - color: #FFF; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #D3DAE6; -} -.form-control, -input { - border-width: 1px; - -webkit-box-shadow: none; - box-shadow: none; -} -.form-control:focus, -input:focus { - -webkit-box-shadow: none; - box-shadow: none; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning .form-control-feedback { - color: #F5A700; -} -.has-warning .form-control, -.has-warning .form-control:focus { - border: 1px solid; - border-color: #F5A700; -} -.has-warning .input-group-addon { - border-color: #F5A700; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error .form-control-feedback { - color: #BD271E; -} -.has-error .form-control, -.has-error .form-control:focus { - border: 1px solid; - border-color: #BD271E; -} -.has-error .input-group-addon { - border-color: #BD271E; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success .form-control-feedback { - color: #017D73; -} -.has-success .form-control, -.has-success .form-control:focus { - border: solid #017D73; -} -.has-success .input-group-addon { - border-color: #017D73; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - border-color: transparent; -} -.pager a, -.pager a:hover { - color: #FFF; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - background-color: rgba(38, 38, 38, 0); -} -.panel { - border-radius: 0; - -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - box-shadow: 0 0 0 rgba(0, 0, 0, 0); -} -.progress { - -webkit-box-shadow: none; - box-shadow: none; -} -.progress .progress-bar { - font-size: 10px; - line-height: 10px; -} -.well { - -webkit-box-shadow: none; - box-shadow: none; -} - - -/*------------- WAZUH -------------*/ -.wz-login { - background: url(./logos/wazuh_dashboard_login_background.svg) !important; - width: 100% !important; - height: 100% !important; - background-size: cover !important; -} - -.login-wrapper { - text-align: center; - width: 430px!important; - top: 55px; - border-radius: 1px; - padding: 1em; -} - -#opensearch-dashboards-body > div > div.app-wrapper.hidden-chrome > div > div.application > div > ul > div.euiText.euiText--medium > div { - text-align: center; - padding-bottom: 10px; - color: #ffffff !important; - font-size: 35px !important; - font-weight: 300; -} - -#opensearch-dashboards-body > div > div.app-wrapper.hidden-chrome > div > div.application > div > ul > div.euiText.euiText--small > div { - text-align: center; - padding-bottom: 15px; - color: #ffffff !important; - font-size: 16px !important; -} - -#opensearch-dashboards-body > div > div.app-wrapper.hidden-chrome > div > div.application > div > ul > form { - padding: 16px; - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - background-color: #FFF; - border: 1px solid #D3DAE6; - border-radius: 4px; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - margin-top: 32px; -} - -div.euiFormRow > div.euiFormRow__fieldWrapper > button { - background-color: #3595F9!important; - border-color: #3595F9!important; - color: #fff; -} - diff --git a/stack/dashboard/base/files/etc/custom_welcome/template.js.hbs b/stack/dashboard/base/files/etc/custom_welcome/template.js.hbs deleted file mode 100644 index 412fb08c61..0000000000 --- a/stack/dashboard/base/files/etc/custom_welcome/template.js.hbs +++ /dev/null @@ -1,111 +0,0 @@ -var osdCsp = JSON.parse(document.querySelector('osd-csp').getAttribute('data')); -window.__osdStrictCsp__ = osdCsp.strictCsp; -window.__osdThemeTag__ = "{{themeTag}}"; -window.__osdPublicPath__ = {{publicPathMap}}; -window.__osdBundles__ = {{osdBundlesLoaderSource}} - -if (window.__osdStrictCsp__ && window.__osdCspNotEnforced__) { - var legacyBrowserError = document.getElementById('osd_legacy_browser_error'); - legacyBrowserError.style.display = 'flex'; -} else { - if (!window.__osdCspNotEnforced__ && window.console) { - window.console.log("^ A single error about an inline script not firing due to content security policy is expected!"); - } - var loadingMessage = document.getElementById('osd_loading_message'); - loadingMessage.style.display = 'flex'; - - window.onload = function () { -//WAZUH - var interval = setInterval(() => { - var title = document.querySelector("#opensearch-dashboards-body > div > div.app-wrapper.hidden-chrome > div > div.application > div > ul > div.euiText.euiText--medium > div") - if (!!title) { - clearInterval(interval); - var content = document.querySelector("#opensearch-dashboards-body > div"); - content.classList.add("wz-login") - - // Don't force custom logo to have 100% width. It should be handled in the svg properties if needed - document - .querySelector('#opensearch-dashboards-body .wz-login figure.euiImage--fullWidth') - .classList.remove('euiImage--fullWidth') - - } - }) - // - - function failure() { - // make subsequent calls to failure() noop - failure = function () {}; - - var err = document.createElement('h1'); - err.style['color'] = 'white'; - err.style['font-family'] = 'monospace'; - err.style['text-align'] = 'center'; - err.style['background'] = '#F44336'; - err.style['padding'] = '25px'; - err.innerText = document.querySelector('[data-error-message]').dataset.errorMessage; - - document.body.innerHTML = err.outerHTML; - } - - var stylesheetTarget = document.querySelector('head meta[name="add-styles-here"]') - function loadStyleSheet(url, cb) { - var dom = document.createElement('link'); - dom.rel = 'stylesheet'; - dom.type = 'text/css'; - dom.href = url; - dom.addEventListener('error', failure); - dom.addEventListener('load', cb); - document.head.insertBefore(dom, stylesheetTarget); - } - - var scriptsTarget = document.querySelector('head meta[name="add-scripts-here"]') - function loadScript(url, cb) { - var dom = document.createElement('script'); - {{!-- NOTE: async = false is used to trigger async-download/ordered-execution as outlined here: https://www.html5rocks.com/en/tutorials/speed/script-loading/ --}} - dom.async = false; - dom.src = url; - dom.addEventListener('error', failure); - dom.addEventListener('load', cb); - document.head.insertBefore(dom, scriptsTarget); - } - - function load(urls, cb) { - var pending = urls.length; - urls.forEach(function (url) { - var innerCb = function () { - pending = pending - 1; - if (pending === 0 && typeof cb === 'function') { - cb(); - } - } - - if (typeof url !== 'string') { - load(url, innerCb); - } else if (url.slice(-4) === '.css') { - loadStyleSheet(url, innerCb); - } else { - loadScript(url, innerCb); - } - }); - } - - load([ - {{#each jsDependencyPaths}} - '{{this}}', - {{/each}} - ], function () { - {{#unless legacyBundlePath}} - __osdBundles__.get('entry/core/public').__osdBootstrap__(); - {{/unless}} - - load([ - {{#if legacyBundlePath}} - '{{legacyBundlePath}}', - {{/if}} - {{#each styleSheetPaths}} - '{{this}}', - {{/each}} - ]); - }); - } -} diff --git a/stack/dashboard/base/files/etc/http_service.js b/stack/dashboard/base/files/etc/http_service.js deleted file mode 100644 index 0620e12bb4..0000000000 --- a/stack/dashboard/base/files/etc/http_service.js +++ /dev/null @@ -1,182 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.HttpService = void 0; - -var _rxjs = require("rxjs"); - -var _operators = require("rxjs/operators"); - -var _std = require("@osd/std"); - -var _csp = require("../csp"); - -var _router = require("./router"); - -var _http_config = require("./http_config"); - -var _http_server = require("./http_server"); - -var _https_redirect_server = require("./https_redirect_server"); - -var _lifecycle_handlers = require("./lifecycle_handlers"); - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/** @internal */ -class HttpService { - constructor(coreContext) { - this.coreContext = coreContext; - - _defineProperty(this, "httpServer", void 0); - - _defineProperty(this, "httpsRedirectServer", void 0); - - _defineProperty(this, "config$", void 0); - - _defineProperty(this, "configSubscription", void 0); - - _defineProperty(this, "logger", void 0); - - _defineProperty(this, "log", void 0); - - _defineProperty(this, "env", void 0); - - _defineProperty(this, "notReadyServer", void 0); - - _defineProperty(this, "internalSetup", void 0); - - _defineProperty(this, "requestHandlerContext", void 0); - - const { - logger, - configService, - env - } = coreContext; - this.logger = logger; - this.env = env; - this.log = logger.get('http'); - this.config$ = (0, _rxjs.combineLatest)([configService.atPath(_http_config.config.path), configService.atPath(_csp.config.path)]).pipe((0, _operators.map)(([http, csp]) => new _http_config.HttpConfig(http, csp))); - this.httpServer = new _http_server.HttpServer(logger, 'OpenSearchDashboards'); - this.httpsRedirectServer = new _https_redirect_server.HttpsRedirectServer(logger.get('http', 'redirect', 'server')); - } - - async setup(deps) { - this.requestHandlerContext = deps.context.createContextContainer(); - this.configSubscription = this.config$.subscribe(() => { - if (this.httpServer.isListening()) { - // If the server is already running we can't make any config changes - // to it, so we warn and don't allow the config to pass through. - this.log.warn('Received new HTTP config after server was started. Config will **not** be applied.'); - } - }); - const config = await this.config$.pipe((0, _operators.first)()).toPromise(); - - if (this.shouldListen(config)) { - await this.runNotReadyServer(config); - } - - const { - registerRouter, - ...serverContract - } = await this.httpServer.setup(config); - (0, _lifecycle_handlers.registerCoreHandlers)(serverContract, config, this.env); - this.internalSetup = { ...serverContract, - createRouter: (path, pluginId = this.coreContext.coreId) => { - const enhanceHandler = this.requestHandlerContext.createHandler.bind(null, pluginId); - const router = new _router.Router(path, this.log, enhanceHandler); - registerRouter(router); - return router; - }, - registerRouteHandlerContext: (pluginOpaqueId, contextName, provider) => this.requestHandlerContext.registerContext(pluginOpaqueId, contextName, provider) - }; - return this.internalSetup; - } // this method exists because we need the start contract to create the `CoreStart` used to start - // the `plugin` and `legacy` services. - - - getStartContract() { - return { ...(0, _std.pick)(this.internalSetup, ['auth', 'basePath', 'getServerInfo']), - isListening: () => this.httpServer.isListening() - }; - } - - async start() { - const config = await this.config$.pipe((0, _operators.first)()).toPromise(); - - if (this.shouldListen(config)) { - if (this.notReadyServer) { - this.log.debug('stopping NotReady server'); - await this.notReadyServer.stop(); - this.notReadyServer = undefined; - } // If a redirect port is specified, we start an HTTP server at this port and - // redirect all requests to the SSL port. - - - if (config.ssl.enabled && config.ssl.redirectHttpFromPort !== undefined) { - await this.httpsRedirectServer.start(config); - } - - await this.httpServer.start(); - } - - return this.getStartContract(); - } - /** - * Indicates if http server has configured to start listening on a configured port. - * We shouldn't start http service in two cases: - * 1. If `server.autoListen` is explicitly set to `false`. - * 2. When the process is run as dev cluster master in which case cluster manager - * will fork a dedicated process where http service will be set up instead. - * @internal - * */ - - - shouldListen(config) { - return !this.coreContext.env.isDevClusterMaster && config.autoListen; - } - - async stop() { - if (this.configSubscription === undefined) { - return; - } - - this.configSubscription.unsubscribe(); - this.configSubscription = undefined; - - if (this.notReadyServer) { - await this.notReadyServer.stop(); - } - - await this.httpServer.stop(); - await this.httpsRedirectServer.stop(); - } - - async runNotReadyServer(config) { - this.log.debug('starting NotReady server'); - const httpServer = new _http_server.HttpServer(this.logger, 'NotReady'); - const { - server - } = await httpServer.setup(config); - this.notReadyServer = server; // use hapi server while OpenSearchDashboardsResponseFactory doesn't allow specifying custom headers - // https://github.com/elastic/kibana/issues/33779 - - this.notReadyServer.route({ - path: '/{p*}', - method: '*', - handler: (req, responseToolkit) => { - this.log.debug(`Wazuh dashboard server is not ready yet ${req.method}:${req.url.href}.`); // If server is not ready yet, because plugins or core can perform - // long running tasks (build assets, saved objects migrations etc.) - // we should let client know that and ask to retry after 30 seconds. - - return responseToolkit.response('Wazuh dashboard server is not ready yet').code(503).header('Retry-After', '30'); - } - }); - await this.notReadyServer.start(); - } - -} - -exports.HttpService = HttpService; \ No newline at end of file diff --git a/stack/dashboard/base/files/etc/node.options b/stack/dashboard/base/files/etc/node.options deleted file mode 100644 index 5328b44728..0000000000 --- a/stack/dashboard/base/files/etc/node.options +++ /dev/null @@ -1,9 +0,0 @@ -## Node command line options -## See `node --help` and `node --v8-options` for available options -## Please note you should specify one option per line - -## max size of old space in megabytes -#--max-old-space-size=4096 - -## do not terminate process on unhandled promise rejection - --unhandled-rejections=warn \ No newline at end of file diff --git a/stack/dashboard/base/files/etc/opensearch_dashboards.yml b/stack/dashboard/base/files/etc/opensearch_dashboards.yml deleted file mode 100644 index b5a48982de..0000000000 --- a/stack/dashboard/base/files/etc/opensearch_dashboards.yml +++ /dev/null @@ -1,15 +0,0 @@ -server.host: 0.0.0.0 -server.port: 443 -opensearch.hosts: https://localhost:9200 -opensearch.ssl.verificationMode: certificate -#opensearch.username: -#opensearch.password: -opensearch.requestHeadersAllowlist: ["securitytenant","authorization"] -opensearch_security.multitenancy.enabled: false -opensearch_security.readonly_mode.roles: ["kibana_read_only"] -server.ssl.enabled: true -server.ssl.key: "/etc/wazuh-dashboard/certs/dashboard-key.pem" -server.ssl.certificate: "/etc/wazuh-dashboard/certs/dashboard.pem" -opensearch.ssl.certificateAuthorities: ["/etc/wazuh-dashboard/certs/root-ca.pem"] -uiSettings.overrides.defaultRoute: /app/wz-home - diff --git a/stack/dashboard/base/files/etc/services/default b/stack/dashboard/base/files/etc/services/default deleted file mode 100644 index 250239f4c8..0000000000 --- a/stack/dashboard/base/files/etc/services/default +++ /dev/null @@ -1,8 +0,0 @@ -user="wazuh-dashboard" -group="wazuh-dashboard" -chroot="/" -chdir="/" -nice="" -KILL_ON_STOP_TIMEOUT=0 - -OSD_PATH_CONF="/etc/wazuh-dashboard" diff --git a/stack/dashboard/base/files/etc/services/wazuh-dashboard b/stack/dashboard/base/files/etc/services/wazuh-dashboard deleted file mode 100644 index d0c590ee30..0000000000 --- a/stack/dashboard/base/files/etc/services/wazuh-dashboard +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/sh -# chkconfig: 2345 95 20 -# description: Wazuh dashboard -# -# Source function libraries if present. -# (It improves integration with systemd) -# -# Red Hat -if [ -f /etc/rc.d/init.d/functions ]; then - . /etc/rc.d/init.d/functions - -# Debian -elif [ -f /lib/lsb/init-functions ]; then - . /lib/lsb/init-functions - -# SUSE -elif [ -f /etc/rc.status ]; then - . /etc/rc.status - rc_reset -fi - -name=wazuh-dashboard -program=/usr/share/wazuh-dashboard/bin/opensearch-dashboards -args=-c\\\ /etc/wazuh-dashboard/opensearch_dashboards.yml -PID_DIR="/run/wazuh-dashboard" -pidfile="$PID_DIR/$name.pid" - -[ -r /etc/default/$name ] && . /etc/default/$name -[ -r /etc/sysconfig/$name ] && . /etc/sysconfig/$name - -export NODE_OPTIONS - -[ -z "$nice" ] && nice=0 - -trace() { - logger -t "/etc/init.d/wazuh-dashboard" "$@" -} - -emit() { - trace "$@" - echo "$@" -} - -start() { - - - # Setup any environmental stuff beforehand - - # Ensure that the PID_DIR exists (it is cleaned at OS startup time) - if [ -n "$PID_DIR" ] && [ ! -e "$PID_DIR" ]; then - mkdir -p "$PID_DIR" && chown "$user":"$group" "$PID_DIR" - fi - if [ -n "$pidfile" ] && [ ! -e "$pidfile" ]; then - touch "$pidfile" && chown "$user":"$group" "$pidfile" - fi - - - # Run the program! - - chroot --userspec "$user":"$group" "$chroot" sh -c "cd \"$chdir\";exec \"$program\" $args" & - - - - # Generate the pidfile from here. If we instead made the forked process - # generate it there will be a race condition between the pidfile writing - # and a process possibly asking for status. - echo $! > $pidfile - - emit "$name started" - return 0 -} - -stop() { - # Try a few times to kill TERM the program - if status ; then - pid=$(cat "$pidfile") - trace "Killing $name (pid $pid) with SIGTERM" - kill -TERM $pid - # Wait for it to exit. - for i in 1 2 3 4 5 ; do - trace "Waiting $name (pid $pid) to die..." - status || break - sleep 1 - done - if status ; then - if [ "$KILL_ON_STOP_TIMEOUT" -eq 1 ] ; then - trace "Timeout reached. Killing $name (pid $pid) with SIGKILL. This may result in data loss." - kill -KILL $pid - emit "$name killed with SIGKILL." - else - emit "$name stop failed; still running." - fi - else - emit "$name stopped." - fi - fi -} - -status() { - if [ -f "$pidfile" ] ; then - pid=$(cat "$pidfile") - if ps -p $pid > /dev/null 2> /dev/null ; then - # process by this pid is running. - # It may not be our pid, but that's what you get with just pidfiles. - # TODO(sissel): Check if this process seems to be the same as the one we - # expect. It'd be nice to use flock here, but flock uses fork, not exec, - # so it makes it quite awkward to use in this case. - return 0 - else - return 2 # program is dead but pid file exists - fi - else - return 3 # program is not running - fi -} - -force_stop() { - if status ; then - stop - status && kill -KILL $(cat "$pidfile") - fi -} - - -case "$1" in - force-start|start|stop|force-stop|restart) - trace "Attempting '$1' on wazuh-dashboard" - ;; -esac - -case "$1" in - force-start) - PRESTART=no - exec "$0" start - ;; - start) - status - code=$? - if [ $code -eq 0 ]; then - emit "$name is already running" - exit $code - else - start - exit $? - fi - ;; - stop) stop ;; - force-stop) force_stop ;; - status) - status - code=$? - if [ $code -eq 0 ] ; then - emit "$name is running" - else - emit "$name is not running" - fi - exit $code - ;; - restart) - - stop && start - ;; - *) - echo "Usage: $SCRIPTNAME {start|force-start|stop|force-start|force-stop|status|restart}" >&2 - exit 3 - ;; -esac - -exit $? - diff --git a/stack/dashboard/base/files/etc/services/wazuh-dashboard.service b/stack/dashboard/base/files/etc/services/wazuh-dashboard.service deleted file mode 100644 index ef1d2afd42..0000000000 --- a/stack/dashboard/base/files/etc/services/wazuh-dashboard.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=wazuh-dashboard - -[Service] -Type=simple -User=wazuh-dashboard -Group=wazuh-dashboard -EnvironmentFile=-/etc/default/wazuh-dashboard -EnvironmentFile=-/etc/sysconfig/wazuh-dashboard -ExecStart=/usr/share/wazuh-dashboard/bin/opensearch-dashboards -WorkingDirectory=/usr/share/wazuh-dashboard - -[Install] -WantedBy=multi-user.target - diff --git a/stack/dashboard/base/files/etc/styles.js b/stack/dashboard/base/files/etc/styles.js deleted file mode 100644 index 0d179fb933..0000000000 --- a/stack/dashboard/base/files/etc/styles.js +++ /dev/null @@ -1,189 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Styles = void 0; - -var _react = _interopRequireDefault(require("react")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/* - * Modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* eslint-disable react/no-danger */ -const Styles = ({ - darkMode -}) => { - return /*#__PURE__*/_react.default.createElement("style", { - dangerouslySetInnerHTML: { - __html: ` - - *, *:before, *:after { - box-sizing: border-box; - } - - html, body, div, span, svg { - margin: 0; - padding: 0; - border: none; - vertical-align: baseline; - } - - body, html { - width: 100%; - height: 100%; - margin: 0; - display: block; - } - - .osdWelcomeView { - line-height: 1.5; - background-color: ${darkMode ? '#1D1E24' : '#FFF'}; - height: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 1; - -webkit-flex: 1 0 auto; - -ms-flex: 1 0 auto; - flex: 1 0 auto; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -webkit-flex-direction: column; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - } - - .osdWelcomeTitle { - color: #000; - font-size: 20px; - font-family: sans-serif; - margin: 16px 0; - animation: fadeIn 1s ease-in-out; - animation-fill-mode: forwards; - opacity: 0; - animation-delay: 1.0s; - } - - .osdWelcomeText { - font-family: - display: inline-block; - font-size: 24px; - font-family: sans-serif; - line-height: 40px !important; - height: 40px !important; - color: #98a2b3; - color: ${darkMode ? '#98A2B3' : '#69707D'}; - } - - .osdLoaderWrap { - text-align: center; - line-height: 1; - text-align: center; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial !important; - letter-spacing: -.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - font-kerning: normal; - font-weight: 400; - } - - .osdLoaderWrap svg, .osdLoaderWrap img { - width: 384px; - height: 112px; - margin: auto; - line-height: 1; - } - - .osdLoader path { - stroke: white; - } - - .osdProgress { - display: inline-block; - position: relative; - width: 256px; - height: 10px; - overflow: hidden; - background-color: ${darkMode ? '#25262E' : '#F5F7FA'}; - line-height: 1; - } - - .osdProgress:before { - position: absolute; - content: ''; - height: 10px; - width: 100%; - top: 0; - bottom: 0; - left: 0; - transform: scaleX(0) translateX(0%); - animation: osdProgress 1s cubic-bezier(.694, .0482, .335, 1) infinite; - background-color: ${darkMode ? '#1BA9F5' : '#006DE4'}; - } - - .loadingLogoContainer { - height: 150px; - padding: 10px 10px 10px 10px; - } - - .loadingLogo { - height: 100%; - max-width: 100%; - } - - @keyframes osdProgress { - 0% { - transform: scaleX(1) translateX(-100%); - } - - 100% { - transform: scaleX(1) translateX(100%); - } - } - ` - } - }); -}; - -exports.Styles = Styles; \ No newline at end of file diff --git a/stack/dashboard/base/files/etc/template.js b/stack/dashboard/base/files/etc/template.js deleted file mode 100644 index bda0cdf0ce..0000000000 --- a/stack/dashboard/base/files/etc/template.js +++ /dev/null @@ -1,260 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Template = void 0; - -var _react = _interopRequireWildcard(require("react")); - -var _fonts = require("./fonts"); - -var _styles = require("./styles"); - -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } - -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } - -/* - * SPDX-License-Identifier: Apache-2.0 - * - * The OpenSearch Contributors require contributions made to - * this file be licensed under the Apache-2.0 license or a - * compatible open source license. - * - * Any modifications Copyright OpenSearch Contributors. See - * GitHub history for details. - */ - -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -const Template = ({ - metadata: { - uiPublicUrl, - locale, - darkMode, - injectedMetadata, - i18n, - bootstrapScriptUrl, - strictCsp - } -}) => { - var _injectedMetadata$bra, _injectedMetadata$bra2, _injectedMetadata$bra3, _injectedMetadata$bra4; - - const openSearchLogo = _react.default.createElement("img", { - alt: 'Loading logo', - className: 'loadingLogo', - src: `${uiPublicUrl}/logos/opensearch.svg` - }); - - const openSearchLogoSpinner = _react.default.createElement("img", { - alt: 'Loading logo', - className: 'loadingLogo', - src: `${uiPublicUrl}/logos/opensearch_spinner_on_light.svg` - }); - - const openSearchLogoSpinnerDark = _react.default.createElement("img", { - alt: 'Loading logo', - className: 'loadingLogo', - src: `${uiPublicUrl}/logos/opensearch_spinner_on_dark.svg` - }); - - - const loadingLogoDefault = (_injectedMetadata$bra = injectedMetadata.branding.loadingLogo) === null || _injectedMetadata$bra === void 0 ? void 0 : _injectedMetadata$bra.defaultUrl; - const loadingLogoDarkMode = (_injectedMetadata$bra2 = injectedMetadata.branding.loadingLogo) === null || _injectedMetadata$bra2 === void 0 ? void 0 : _injectedMetadata$bra2.darkModeUrl; - const markDefault = (_injectedMetadata$bra3 = injectedMetadata.branding.mark) === null || _injectedMetadata$bra3 === void 0 ? void 0 : _injectedMetadata$bra3.defaultUrl; - const markDarkMode = (_injectedMetadata$bra4 = injectedMetadata.branding.mark) === null || _injectedMetadata$bra4 === void 0 ? void 0 : _injectedMetadata$bra4.darkModeUrl; - const favicon = injectedMetadata.branding.faviconUrl; - const applicationTitle = injectedMetadata.branding.applicationTitle; - /** - * Use branding configurations to check which URL to use for rendering - * loading logo in default mode. In default mode, loading logo will - * proritize default loading logo URL, and then default mark URL. - * If both are invalid, default opensearch logo and spinner will be rendered. - * - * @returns a valid custom URL or undefined if no valid URL is provided - */ - - const customLoadingLogoDefaultMode = () => { - var _ref; - - return (_ref = loadingLogoDefault !== null && loadingLogoDefault !== void 0 ? loadingLogoDefault : markDefault) !== null && _ref !== void 0 ? _ref : undefined; - }; - /** - * Use branding configurations to check which URL to use for rendering - * loading logo in default mode. In dark mode, loading logo will proritize - * loading logo URLs, then mark logo URLs. - * Within each type, the dark mode URL will be proritized if provided. - * - * @returns a valid custom URL or undefined if no valid URL is provided - */ - - - const customLoadingLogoDarkMode = () => { - var _ref2, _ref3, _ref4; - - return (_ref2 = (_ref3 = (_ref4 = loadingLogoDarkMode !== null && loadingLogoDarkMode !== void 0 ? loadingLogoDarkMode : loadingLogoDefault) !== null && _ref4 !== void 0 ? _ref4 : markDarkMode) !== null && _ref3 !== void 0 ? _ref3 : markDefault) !== null && _ref2 !== void 0 ? _ref2 : undefined; - }; - /** - * Render custom loading logo for both default mode and dark mode - * - * @returns a valid custom loading logo URL, or undefined - */ - - - const customLoadingLogo = () => { - return darkMode ? customLoadingLogoDarkMode() : customLoadingLogoDefaultMode(); - }; - /** - * Check if a horizontal loading is needed to be rendered. - * Loading bar will be rendered only when a default mode mark URL or - * dark mode mark URL is rendered as the loading logo. We add the - * horizontal loading bar on the bottom of the static mark logo to have - * some loading effect for the loading page. - * - * @returns a loading bar component or no loading bar component - */ - - - const renderBrandingEnabledOrDisabledLoadingBar = () => { - if (customLoadingLogo() && !loadingLogoDefault) { - return /*#__PURE__*/_react.default.createElement("div", { - className: "osdProgress" - }); - } - }; - /** - * Check if we render a custom loading logo or the default opensearch spinner. - * If customLoadingLogo() returns undefined(no valid custom URL is found), we - * render the default opensearch logo spinenr - * - * @returns a image component with custom logo URL, or the default opensearch logo spinner - */ - - - const renderBrandingEnabledOrDisabledLoadingLogo = () => { - if (customLoadingLogo()) { - return /*#__PURE__*/_react.default.createElement("div", { - className: "loadingLogoContainer" - }, /*#__PURE__*/_react.default.createElement("img", { - className: "loadingLogo", - src: customLoadingLogo(), - alt: applicationTitle + ' logo' - })); - } - - return darkMode ? openSearchLogoSpinnerDark : openSearchLogoSpinner; - }; - - return /*#__PURE__*/_react.default.createElement("html", { - lang: locale - }, /*#__PURE__*/_react.default.createElement("head", null, /*#__PURE__*/_react.default.createElement("meta", { - charSet: "utf-8" - }), /*#__PURE__*/_react.default.createElement("meta", { - httpEquiv: "X-UA-Compatible", - content: "IE=edge,chrome=1" - }), /*#__PURE__*/_react.default.createElement("meta", { - name: "viewport", - content: "width=device-width" - }), /*#__PURE__*/_react.default.createElement("title", null, applicationTitle), /*#__PURE__*/_react.default.createElement(_fonts.Fonts, { - url: uiPublicUrl - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "apple-touch-icon", - sizes: "180x180", - href: favicon !== null && favicon !== void 0 ? favicon : `${uiPublicUrl}/favicons/apple-touch-icon.png` - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "icon", - type: "image/png", - sizes: "32x32", - href: favicon !== null && favicon !== void 0 ? favicon : `${uiPublicUrl}/favicons/favicon-32x32.png` - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "icon", - type: "image/png", - sizes: "16x16", - href: favicon !== null && favicon !== void 0 ? favicon : `${uiPublicUrl}/favicons/favicon-16x16.png` - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "manifest", - href: favicon ? `` : `${uiPublicUrl}/favicons/manifest.json` - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "mask-icon", - href: favicon !== null && favicon !== void 0 ? favicon : `${uiPublicUrl}/favicons/safari-pinned-tab.svg` - }), /*#__PURE__*/_react.default.createElement("link", { - rel: "shortcut icon", - href: favicon !== null && favicon !== void 0 ? favicon : `${uiPublicUrl}/favicons/favicon.ico` - }), /*#__PURE__*/_react.default.createElement("meta", { - name: "msapplication-config", - content: favicon ? `` : `${uiPublicUrl}/favicons/browserconfig.xml` - }), /*#__PURE__*/_react.default.createElement("meta", { - name: "theme-color", - content: "#ffffff" - }), /*#__PURE__*/_react.default.createElement(_styles.Styles, { - darkMode: darkMode - }), /*#__PURE__*/_react.default.createElement("meta", { - name: "add-styles-here" - }), /*#__PURE__*/_react.default.createElement("meta", { - name: "add-scripts-here" - })), /*#__PURE__*/_react.default.createElement("body", null, /*#__PURE__*/(0, _react.createElement)('osd-csp', { - data: JSON.stringify({ - strictCsp - }) - }), /*#__PURE__*/(0, _react.createElement)('osd-injected-metadata', { - data: JSON.stringify(injectedMetadata) - }), /*#__PURE__*/_react.default.createElement("div", { - className: "osdWelcomeView", - id: "osd_loading_message", - style: { - display: 'none' - }, - "data-test-subj": "osdLoadingMessage" - }, /*#__PURE__*/_react.default.createElement("div", { - className: "osdLoaderWrap", - "data-test-subj": "loadingLogo" - }, renderBrandingEnabledOrDisabledLoadingLogo(), /*#__PURE__*/_react.default.createElement("div", { - className: "osdWelcomeText", - "data-error-message": i18n('core.ui.welcomeErrorMessage', { - defaultMessage: `${injectedMetadata.branding.applicationTitle} did not load properly. Check the server output for more information.` - }) - }, i18n('core.ui.welcomeMessage', { - defaultMessage: `Loading ...` - })), renderBrandingEnabledOrDisabledLoadingBar())), /*#__PURE__*/_react.default.createElement("div", { - className: "osdWelcomeView", - id: "osd_legacy_browser_error", - style: { - display: 'none' - } - }, openSearchLogo, /*#__PURE__*/_react.default.createElement("h2", { - className: "osdWelcomeTitle" - }, i18n('core.ui.legacyBrowserTitle', { - defaultMessage: 'Please upgrade your browser' - })), /*#__PURE__*/_react.default.createElement("div", { - className: "osdWelcomeText" - }, i18n('core.ui.legacyBrowserMessage', { - defaultMessage: 'This OpenSearch installation has strict security requirements enabled that your current browser does not meet.' - }))), /*#__PURE__*/_react.default.createElement("script", null, ` - // Since this is an unsafe inline script, this code will not run - // in browsers that support content security policy(CSP). This is - // intentional as we check for the existence of __osdCspNotEnforced__ in - // bootstrap. - window.__osdCspNotEnforced__ = true; - `), /*#__PURE__*/_react.default.createElement("script", { - src: bootstrapScriptUrl - }))); -}; - -exports.Template = Template; \ No newline at end of file diff --git a/stack/dashboard/base/generate_base.sh b/stack/dashboard/base/generate_base.sh deleted file mode 100755 index 9904e6d397..0000000000 --- a/stack/dashboard/base/generate_base.sh +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - - -reference="" -current_path="$( cd $(dirname $0) ; pwd -P )" -dockerfile_path="${current_path}/docker" -container_name="dashboard_base_builder" -architecture="x64" -outdir="${current_path}/output" -revision="1" -future="no" -url="" - -# ----------------------------------------------------------------------------- - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.xz,*-dashboards-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -# ----------------------------------------------------------------------------- - -build() { - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - if [ "${repository}" ];then - url="${repository}" - fi - - # Build the Docker image - docker build -t ${container_name} ${dockerfile_path} || return 1 - - if [ "${reference}" ];then - docker run -t --rm -v ${outdir}/:/tmp/output:Z \ - ${container_name} ${architecture} ${revision} ${future} ${url} ${reference} || return 1 - else - docker run -t --rm -v ${outdir}/:/tmp/output:Z \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} ${revision} ${future} ${url} || return 1 - fi - - echo "Base file $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -# ----------------------------------------------------------------------------- - -help() { - echo -e "" - echo -e "NAME" - echo -e " $(basename "$0") - Build Wazuh dashboard base file." - echo -e "" - echo -e "SYNOPSIS" - echo -e " $(basename "$0") -a | -s | -b | -f | -r | -h" - echo -e "" - echo -e "DESCRIPTION" - echo -e " --app-url " - echo -e " [Optional] Set the repository from where the Wazuh plugin should be downloaded." - echo -e "" - echo -e " -s, --store " - echo -e " [Optional] Set the destination path of package. By default, an output folder will be created." - echo -e "" - echo -e " --reference " - echo -e " [Optional] wazuh-packages branch or tag." - echo -e "" - echo -e " --future" - echo -e " [Optional] Build test future package. Used for development purposes." - echo -e "" - echo -e " -r, --revision " - echo -e " [Optional] Package revision." - echo -e "" - echo -e " -h, --help" - echo -e " Show this help." - echo -e "" - exit $1 -} - -# ----------------------------------------------------------------------------- - -main() { - while [ -n "${1}" ] - do - case "${1}" in - "-h"|"--help") - help 0 - ;; - "--app-url") - if [ -n "$2" ]; then - repository="$2" - shift 2 - else - help 1 - fi - ;; - "-s"|"--store") - if [ -n "${2}" ]; then - outdir="${2}" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "${2}" ]; then - reference="${2}" - shift 2 - else - help 1 - fi - ;; - "--future") - future="yes" - shift 1 - ;; - "-r"|"--revision") - if [ -n "${2}" ]; then - revision="${2}" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - build || clean 1 - - clean 0 -} - -main "$@" \ No newline at end of file diff --git a/stack/dashboard/deb/build_package.sh b/stack/dashboard/deb/build_package.sh deleted file mode 100755 index 0b1da825b4..0000000000 --- a/stack/dashboard/deb/build_package.sh +++ /dev/null @@ -1,275 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -current_path="$( cd $(dirname $0) ; pwd -P )" -architecture="amd64" -outdir="${current_path}/output" -revision="1" -build_docker="yes" -deb_amd64_builder="deb_dashboard_builder_amd64" -deb_builder_dockerfile="${current_path}/docker" -future="no" -base_cmd="" -plugin_main="" -plugin_updates="" -plugin_core="" -build_base="yes" -have_main=false -have_updates=false -have_core=false -version="" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.gz,wazuh-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -set_version() { - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat ${current_path}/../../../VERSION) - fi -} - -build_deb() { - container_name="$1" - dockerfile_path="$2" - - if [ "${plugin_main_reference}" ];then - plugin_main="${plugin_main_reference}" - fi - if [ "${plugin_updates_reference}" ];then - plugin_updates="${plugin_updates_reference}" - fi - if [ "${plugin_core_reference}" ];then - plugin_core="${plugin_core_reference}" - fi - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - if [ "${build_base}" == "yes" ];then - # Base generation - if [ "${future}" == "yes" ];then - base_cmd+="--future " - fi - if [ "${reference}" ];then - base_cmd+="--reference ${reference}" - fi - if [ "${plugin_main_reference}" ];then - base_cmd+="--app-url ${plugin_main_reference}" - fi - ../base/generate_base.sh -s ${outdir} -r ${revision} ${base_cmd} - else - basefile="${outdir}/wazuh-dashboard-base-${version}-${revision}-linux-x64.tar.xz" - if ! test -f "${basefile}"; then - echo "Did not find expected Wazuh dashboard base file: ${basefile} in output path. Exiting..." - exit 1 - fi - fi - - # Build the Docker image - if [[ ${build_docker} == "yes" ]]; then - docker build -t ${container_name} ${dockerfile_path} || return 1 - fi - - # Build the Debian package with a Docker container - volumes="-v ${outdir}/:/tmp:Z" - if [ "${reference}" ];then - docker run -t --rm ${volumes} \ - ${container_name} ${architecture} ${revision} \ - ${future} ${plugin_main} ${plugin_updates} ${plugin_core} ${reference} || return 1 - else - docker run -t --rm ${volumes} \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} ${revision} \ - ${future} ${plugin_main} ${plugin_updates} ${plugin_core} || return 1 - fi - - echo "Package $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -build() { - build_name="" - file_path="" - if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="amd64" - build_name="${deb_amd64_builder}" - file_path="${deb_builder_dockerfile}/${architecture}" - else - echo "Invalid architecture. Choose: amd64 (x86_64 is accepted too)" - return 1 - fi - build_deb ${build_name} ${file_path} || return 1 - - return 0 -} - -help() { - echo -e "" - echo -e "NAME" - echo -e " $(basename "$0") - Build Wazuh dashboard base file." - echo -e "" - echo -e "SYNOPSIS" - echo -e " $(basename "$0") -a | -m | -u | -c | -s | -b | -f | -r | -h" - echo -e "" - echo -e "DESCRIPTION" - echo -e " -a, --architecture " - echo -e " [Optional] Target architecture of the package [amd64]." - echo -e "" - echo -e " -m, --main-app " - echo -e " [Optional] Wazuh main plugin URL." - echo -e "" - echo -e " -u, --updates-app " - echo -e " [Optional] Wazuh Check Updates plugin URL." - echo -e "" - echo -e " -c, --core-app " - echo -e " [Optional] Wazuh Core plugin URL." - echo -e "" - echo -e " -b, --build-base " - echo -e " [Optional] Build a new base or use a existing one. By default, yes." - echo -e "" - echo -e " -r, --revision " - echo -e " [Optional] Package revision. By default: 1." - echo -e "" - echo -e " -s, --store " - echo -e " [Optional] Set the destination path of package. By default, an output folder will be created." - echo -e "" - echo -e " --reference " - echo -e " [Optional] wazuh-packages branch to download SPECs, not used by default." - echo -e "" - echo -e " --dont-build-docker" - echo -e " [Optional] Locally built docker image will be used instead of generating a new one." - echo -e "" - echo -e " --future" - echo -e " [Optional] Build test future package 99.99.0 Used for development purposes." - echo -e "" - echo -e " -h, --help" - echo -e " Show this help." - echo -e "" - exit $1 -} - - -main() { - while [ -n "${1}" ] - do - case "${1}" in - "-h"|"--help") - help 0 - ;; - "-a"|"--architecture") - if [ -n "${2}" ]; then - architecture="${2}" - shift 2 - else - help 1 - fi - ;; - "-m"|"--main-app-url") - if [ -n "$2" ]; then - plugin_main_reference="$2" - have_main=true - shift 2 - else - help 1 - fi - ;; - "-u"|"--updates-app-url") - if [ -n "$2" ]; then - plugin_updates_reference="$2" - have_updates=true - shift 2 - else - help 1 - fi - ;; - "-c"|"--core-app-url") - if [ -n "$2" ]; then - plugin_core_reference="$2" - have_core=true - shift 2 - else - help 1 - fi - ;; - "-b"|"--build-base") - if [ -n "${2}" ]; then - build_base="${2}" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "${2}" ]; then - revision="${2}" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "${2}" ]; then - reference="${2}" - shift 2 - else - help 1 - fi - ;; - "--dont-build-docker") - build_docker="no" - shift 1 - ;; - "--future") - future="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "${2}" ]; then - outdir="${2}" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - set_version - - if [ ! "${plugin_main_reference}" ] && [ ! "${plugin_updates_reference}" ] && [ ! "${plugin_core_reference}" ]; then - echo "No Wazuh plugins have been defined, ${version} pre-release development packages with revision ${revision} will be used." - elif [[ ${have_main} != ${have_updates} ]] || [[ ${have_updates} != ${have_core} ]]; then - echo "The -m, -u, and -c options must be used together." - exit 1 - fi - - build || clean 1 - - clean 0 -} - -main "$@" diff --git a/stack/dashboard/deb/builder.sh b/stack/dashboard/deb/builder.sh deleted file mode 100755 index fafd97ada0..0000000000 --- a/stack/dashboard/deb/builder.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e -# Script parameters to build the package -target="wazuh-dashboard" -architecture=$1 -revision=$2 -future=$3 -plugin_main=$4 -plugin_updates=$5 -plugin_core=$6 -reference=$7 -directory_base="/usr/share/wazuh-dashboard" - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${future}" = "yes" ];then - version="99.99.0" -else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat /root/VERSION) - fi -fi - -if [ "${plugin_main}" ] && [ "${plugin_updates}" ] && [ "${plugin_core}" ] ;then - valid_url='(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]' - if [[ "${plugin_main}" =~ $valid_url ]];then - url_main="${plugin_main}" - if ! curl --output /dev/null --silent --head --fail "${url_main}"; then - echo "The given URL to download the Wazuh main plugin ZIP does not exist: ${url_main}" - exit 1 - fi - else - url_main="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuh-${version}-${revision}.zip" - fi - if [[ "${plugin_updates}" =~ $valid_url ]];then - url_updates="${plugin_updates}" - if ! curl --output /dev/null --silent --head --fail "${url_updates}"; then - echo "The given URL to download the Wazuh Check Updates plugin ZIP does not exist: ${url_updates}" - exit 1 - fi - else - url_updates="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuhCheckUpdates-${version}-${revision}.zip" - fi - if [[ "${plugin_core}" =~ $valid_url ]];then - url_core="${plugin_core}" - if ! curl --output /dev/null --silent --head --fail "${url_core}"; then - echo "The given URL to download the Wazuh Core plugin ZIP does not exist: ${url_core}" - exit 1 - fi - else - url_core="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuhCore-${version}-${revision}.zip" - fi -else - url_main="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuh-${version}-${revision}.zip" - url_updates="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuhCheckUpdates-${version}-${revision}.zip" - url_core="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuhCore-${version}-${revision}.zip" -fi - -# Build directories -build_dir=/build -pkg_name="${target}-${version}" -pkg_path="${build_dir}/${target}" -source_dir="${pkg_path}/${pkg_name}" -mkdir -p ${source_dir}/debian - -# Including spec file -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${reference} | tar zx - cp -r ./wazuh*/stack/dashboard/deb/debian/* ${source_dir}/debian/ - cp -r ./wazuh*/* /root/ -else - cp -r /root/stack/dashboard/deb/debian/* ${source_dir}/debian/ -fi - - -# Generating directory structure to build the .deb package -cd ${build_dir}/${target} && tar -czf ${pkg_name}.orig.tar.gz "${pkg_name}" - -# Configure the package with the different parameters -sed -i "s:VERSION:${version}:g" ${source_dir}/debian/changelog -sed -i "s:RELEASE:${revision}:g" ${source_dir}/debian/changelog -sed -i "s:export INSTALLATION_DIR=.*:export INSTALLATION_DIR=${directory_base}:g" ${source_dir}/debian/rules - -# Installing build dependencies -cd ${source_dir} -mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y" - -# Build package -debuild --no-lintian -eINSTALLATION_DIR="${directory_base}" -eVERSION="${version}" -eREVISION="${revision}" -eURLPLUGINMAIN="${url_main}" -eURLPLUGINUPDATES="${url_updates}" -eURLPLUGINCORE="${url_core}" -b -uc -us - -deb_file="${target}_${version}-${revision}_${architecture}.deb" - -cd ${pkg_path} && sha512sum ${deb_file} > /tmp/${deb_file}.sha512 - -mv ${pkg_path}/${deb_file} /tmp/ diff --git a/stack/dashboard/deb/debian/changelog b/stack/dashboard/deb/debian/changelog deleted file mode 100644 index 9b48af5d66..0000000000 --- a/stack/dashboard/deb/debian/changelog +++ /dev/null @@ -1,197 +0,0 @@ -wazuh-dashboard (4.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html - - -- Wazuh, Inc Thu, 15 Aug 2024 00:00:00 +0000 - -wazuh-dashboard (4.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html - - -- Wazuh, Inc Thu, 18 Jul 2024 00:00:00 +0000 - -wazuh-dashboard (4.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html - - -- Wazuh, Inc Wed, 12 Jun 2024 00:00:00 +0000 - -wazuh-dashboard (4.7.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html - - -- Wazuh, Inc Thu, 30 May 2024 00:00:00 +0000 - -wazuh-dashboard (4.7.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html - - -- Wazuh, Inc Thu, 25 Apr 2024 00:00:00 +0000 - -wazuh-dashboard (4.7.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html - - -- Wazuh, Inc Tue, 27 Feb 2024 00:00:00 +0000 - -wazuh-dashboard (4.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html - - -- Wazuh, Inc Tue, 09 Jan 2024 00:00:00 +0000 - -wazuh-dashboard (4.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html - - -- Wazuh, Inc Wed, 13 Dec 2023 00:00:00 +0000 - -wazuh-dashboard (4.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html - - -- Wazuh, Inc Tue, 05 Nov 2023 00:00:00 +0000 - -wazuh-dashboard (4.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html - - -- Wazuh, Inc Tue, 31 Oct 2023 00:00:00 +0000 - -wazuh-dashboard (4.5.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html - - -- Wazuh, Inc Tue, 24 Oct 2023 00:00:00 +0000 - -wazuh-dashboard (4.5.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html - - -- Wazuh, Inc Tue, 10 Oct 2023 00:00:00 +0000 - -wazuh-dashboard (4.5.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html - - -- Wazuh, Inc Thu, 31 Aug 2023 00:00:00 +0000 - -wazuh-dashboard (4.5.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-1.html - - -- Wazuh, Inc Thu, 24 Aug 2023 15:56:43 +0000 - -wazuh-dashboard (4.5.0-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html - - -- Wazuh, Inc Thu, 10 Aug 2023 13:45:36 +0000 - -wazuh-dashboard (4.4.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html - - -- Wazuh, Inc Mon, 10 Jul 2023 13:45:36 +0000 - -wazuh-dashboard (4.4.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html - - -- Wazuh, Inc Tue, 13 Jun 2023 12:31:50 +0000 - -wazuh-dashboard (4.4.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html - - -- Wazuh, Inc Thu, 25 May 2023 12:31:50 +0000 - -wazuh-dashboard (4.4.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html - - -- Wazuh, Inc Mon, 24 Apr 2023 12:31:50 +0000 - -wazuh-dashboard (4.4.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html - - -- Wazuh, Inc Mon, 17 Apr 2023 12:31:50 +0000 - -wazuh-dashboard (4.4.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html - - -- Wazuh, Inc Wed, 18 Jan 2023 12:31:50 +0000 - -wazuh-dashboard (4.3.10-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html - - -- Wazuh, Inc Thu, 10 Nov 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.9-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html - - -- Wazuh, Inc Mon, 03 Oct 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.8-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html - - -- Wazuh, Inc Mon, 19 Sep 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.7-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html - - -- Wazuh, Inc Mon, 08 Aug 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.6-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html - - -- Wazuh, Inc Thu, 07 Jul 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.5-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html - - -- Wazuh, Inc Wed, 29 Jun 2022 15:00:00 +0000 - -wazuh-dashboard (4.3.4-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html - - -- Wazuh, Inc Tue, 07 Jun 2022 15:41:39 +0000 - -wazuh-dashboard (4.3.3-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html - - -- Wazuh, Inc Tue, 31 May 2022 15:41:39 +0000 - -wazuh-dashboard (4.3.2-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html - - -- Wazuh, Inc Mon, 30 May 2022 15:41:39 +0000 - -wazuh-dashboard (4.3.1-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html - - -- Wazuh, Inc Wed, 18 May 2022 12:14:41 +0000 - -wazuh-dashboard (4.3.0-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html - - -- Wazuh, Inc Thu, 05 May 2022 12:15:57 +0000 - -wazuh-dashboard (4.2.5-1) UNRELEASED; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/ - - -- Wazuh, Inc Mon, 15 Nov 2021 16:47:07 +0000 diff --git a/stack/dashboard/deb/debian/compat b/stack/dashboard/deb/debian/compat deleted file mode 100644 index 301160a930..0000000000 --- a/stack/dashboard/deb/debian/compat +++ /dev/null @@ -1 +0,0 @@ -8 \ No newline at end of file diff --git a/stack/dashboard/deb/debian/control b/stack/dashboard/deb/debian/control deleted file mode 100644 index b55e6180d7..0000000000 --- a/stack/dashboard/deb/debian/control +++ /dev/null @@ -1,12 +0,0 @@ -Source: wazuh-dashboard -Section: admin -Priority: extra -Maintainer: Wazuh, Inc -Build-Depends: debhelper (>= 9), libcap2-bin -Standards-Version: 4.0.0 -Homepage: https://www.wazuh.com - -Package: wazuh-dashboard -Architecture: any -Depends: debconf, adduser, curl, tar, libcap2-bin -Description: Wazuh dashboard is a user interface and visualization tool for security-related data. This Wazuh central component enables exploring, visualizing, and analyzing the stored security alerts generated by the Wazuh server. Wazuh dashboard enables inspecting the status and managing the configurations of the Wazuh cluster and agents as well as creating and managing users and roles. In addition, it allows testing the ruleset and making calls to the Wazuh API. Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-dashboard.html diff --git a/stack/dashboard/deb/debian/copyright b/stack/dashboard/deb/debian/copyright deleted file mode 100644 index 4ec03228c1..0000000000 --- a/stack/dashboard/deb/debian/copyright +++ /dev/null @@ -1,22 +0,0 @@ -This work was packaged for Debian by: - - Wazuh, Inc on Thu, 15 Aug 2024 00:00:00 +0000 - -It was downloaded from: - - https://www.wazuh.com - -Copyright: - - GNU General Public License version 2. - -License: - - GNU General Public License version 2. - -The Debian packaging is: - - Copyright (C) 2021 Wazuh, Inc - -and is licensed under the GPL version 2, -see "/usr/share/common-licenses/GPL-2". diff --git a/stack/dashboard/deb/debian/postinst b/stack/dashboard/deb/debian/postinst deleted file mode 100644 index bd4afd0999..0000000000 --- a/stack/dashboard/deb/debian/postinst +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -# postinst script for wazuh-dashboard -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export NAME=wazuh-dashboard -export CONFIG_DIR=/etc/"${NAME}" -export INSTALLATION_DIR=/usr/share/"${NAME}" -export PID_DIR=/run/"${NAME}" - - -# Setting Owner and group of own folders -mkdir -p "${PID_DIR}" -chown -R "${NAME}":"${NAME}" "${PID_DIR}" - - -case "$1" in - configure) - chmod 750 "${TARGET_DIR}""${CONFIG_DIR}" - chown -R "${NAME}":"${NAME}" "${TARGET_DIR}""${CONFIG_DIR}" - chmod 750 "${TARGET_DIR}""${INSTALLATION_DIR}" - chown -R "${NAME}":"${NAME}" "${TARGET_DIR}""${INSTALLATION_DIR}" - setcap 'cap_net_bind_service=+ep' "${INSTALLATION_DIR}"/node/bin/node - setcap 'cap_net_bind_service=+ep' "${INSTALLATION_DIR}"/node/fallback/bin/node - if [ -f "${INSTALLATION_DIR}"/"${NAME}".restart ]; then - rm -f "${INSTALLATION_DIR}"/"${NAME}".restart - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 ; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-dashboard.service > /dev/null 2>&1 - elif command -v service > /dev/null 2>&1 && service wazuh-dashboard status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service wazuh-dashboard restart > /dev/null 2>&1 - fi - fi - # Move keystore file if upgrade (file exists in install dir in <= 4.6.0) - if [ -f "${INSTALLATION_DIR}"/config/opensearch_dashboards.keystore ]; then - mv "${INSTALLATION_DIR}"/config/opensearch_dashboards.keystore "${CONFIG_DIR}"/opensearch_dashboards.keystore - elif [ ! -f "${CONFIG_DIR}"/opensearch_dashboards.keystore ]; then - runuser "${NAME}" --shell="/bin/bash" --command="${INSTALLATION_DIR}/bin/opensearch-dashboards-keystore create" > /dev/null 2>&1 - runuser "${NAME}" --shell="/bin/bash" --command="echo kibanaserver | ${INSTALLATION_DIR}/bin/opensearch-dashboards-keystore add opensearch.username --stdin" > /dev/null 2>&1 - runuser "${NAME}" --shell="/bin/bash" --command="echo kibanaserver | ${INSTALLATION_DIR}/bin/opensearch-dashboards-keystore add opensearch.password --stdin" > /dev/null 2>&1 - chmod 640 "${CONFIG_DIR}"/opensearch_dashboards.keystore - fi - - if ! grep -q "/app/wz-home" "${CONFIG_DIR}"/opensearch_dashboards.yml; then - sed -i 's/\/app\/wazuh/\/app\/wz-home/g' "${CONFIG_DIR}"/opensearch_dashboards.yml - fi - ;; - - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 1 - ;; - -esac - -exit 0 diff --git a/stack/dashboard/deb/debian/postrm b/stack/dashboard/deb/debian/postrm deleted file mode 100644 index 2dc589bdb8..0000000000 --- a/stack/dashboard/deb/debian/postrm +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh -# postinst script for wazuh-dashboard -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export NAME=wazuh-dashboard -export CONFIG_DIR=/etc/"${NAME}" -export INSTALLATION_DIR=/usr/share/"${NAME}" -export PID_DIR=/run/${NAME} - -# -# This script is executed in the post-removal phase -# -# On Debian, -# $1=remove : indicates a removal -# $1=purge : indicates an upgrade - -# source the default env file -if [ -f "/etc/default/${NAME}" ]; then - . "/etc/default/${NAME}" -fi - - -REMOVE_DIRS=false -REMOVE_CONFIG_DIRECTORY=false -REMOVE_USER_AND_GROUP=false - - -case "$1" in - remove) - REMOVE_DIRS=true - ;; - - purge) - REMOVE_DIRS=true - REMOVE_CONFIG_DIRECTORY=true - REMOVE_USER_AND_GROUP=true - ;; - failed-upgrade|abort-install|upgrade|abort-upgrade|disappear) - ;; - - *) - - echo "post remove script called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - - -if [ "$REMOVE_DIRS" = "true" ]; then - - if [ -d ${PID_DIR} ]; then - echo -n "Deleting PID directory..." - rm -rf ${PID_DIR} > /dev/null 2>&1 - echo " OK" - fi - - if [ -d "${INSTALLATION_DIR}" ]; then - echo -n "Deleting installation directory..." - rm -rf "${INSTALLATION_DIR}" - echo " OK" - fi - - # Delete the config directory if we are purging - if [ "$REMOVE_CONFIG_DIRECTORY" = "true" ]; then - rm -rf "${CONFIG_DIR}" - echo " OK" - fi - -fi - - -if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then - if id "${NAME}" > /dev/null 2>&1 ; then - userdel "${NAME}" - fi - - if getent group "${NAME}" > /dev/null 2>&1 ; then - groupdel "${NAME}" - fi -fi diff --git a/stack/dashboard/deb/debian/preinst b/stack/dashboard/deb/debian/preinst deleted file mode 100644 index caddac8f82..0000000000 --- a/stack/dashboard/deb/debian/preinst +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# postinst script for wazuh-dashboard -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -# -# This script is executed in the pre-installation phase -# -# On Debian, -# $1=install : indicates an new install -# $1=upgrade : indicates an upgrade - -# configuration variables -export NAME=wazuh-dashboard -export CONFIG_DIR=/etc/"${NAME}" -export INSTALLATION_DIR=/usr/share/"${NAME}" - - -case "$1" in - # Debian #################################################### - install) - # environment configuration - mkdir -p "${CONFIG_DIR}" - mkdir -p "${INSTALLATION_DIR}" - - - # Create wazuh-dashboard group if not existing - if ! getent group "${NAME}" > /dev/null 2>&1 ; then - echo -n "Creating ${NAME} group..." - addgroup --quiet --system "${NAME}" - echo " OK" - fi - # Create wazuh-dashboard user if not existing - if ! id "${NAME}" > /dev/null 2>&1 ; then - echo -n "Creating ${NAME} user..." - adduser --quiet \ - --system \ - --no-create-home \ - --home /nonexistent \ - --ingroup "${NAME}" \ - --disabled-password \ - --shell /bin/false \ - "${NAME}" - echo " OK" - fi - - ;; - upgrade) - # Stop the services to upgrade the package - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet "${NAME}" > /dev/null 2>&1; then - systemctl stop "${NAME}".service > /dev/null 2>&1 - touch "${INSTALLATION_DIR}"/"${NAME}".restart - # Check for SysV - elif command -v service > /dev/null 2>&1 && service "${NAME}" status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service "${NAME}" stop > /dev/null 2>&1 - touch "${INSTALLATION_DIR}"/"${NAME}".restart - fi - ;; - abort-deconfigure|abort-upgrade|abort-remove) - ;; - - *) - echo "preinst called with unknown argument \`$1'" >&2 - exit 1 - - ;; - -esac - -exit 0 diff --git a/stack/dashboard/deb/debian/prerm b/stack/dashboard/deb/debian/prerm deleted file mode 100644 index 59423f960e..0000000000 --- a/stack/dashboard/deb/debian/prerm +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# postinst script for wazuh-dashboard -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export NAME=wazuh-dashboard -export CONFIG_DIR=/etc/"${NAME}" -export INSTALLATION_DIR=/usr/share/"${NAME}" - -# -# This script is executed in the pre-remove phase -# -# On Debian, -# $1=remove : indicates a removal -# $1=upgrade : indicates an upgrade - -# source the default env file -if [ -f "/etc/default/${NAME}" ]; then - . "/etc/default/${NAME}" -fi - -STOP_REQUIRED=false -REMOVE_SERVICE=false - -case "$1" in - - - # Debian #################################################### - remove) - STOP_REQUIRED=true - REMOVE_SERVICE=true - ;; - upgrade|deconfigure|failed-upgrade) - ;; - - *) - echo "prerm called with unknown argument \`$1'" >&2 - exit 1 - ;; - -esac - -# Stops the service -if [ "$STOP_REQUIRED" = "true" ]; then - echo -n "Stopping wazuh-dashboard service..." - if command -v systemctl >/dev/null; then - systemctl --no-reload stop "${NAME}".service - - elif [ -x /etc/init.d/"${NAME}" ]; then - if command -v invoke-rc.d >/dev/null; then - invoke-rc.d "${NAME}" stop - else - /etc/init.d/"${NAME}" stop - fi - - # older suse linux distributions do not ship with systemd - # but do not have an /etc/init.d/ directory - # this tries to start the wazuh-dashboard service on these - # as well without failing this script - elif [ -x /etc/rc.d/init.d/"${NAME}" ] ; then - /etc/rc.d/init.d/"${NAME}" stop - fi - echo " OK" -fi - -if [ "$REMOVE_SERVICE" = "true" ]; then - if command -v systemctl >/dev/null; then - systemctl disable "${NAME}".service > /dev/null 2>&1 || true - fi - - if command -v chkconfig >/dev/null; then - chkconfig --del "${NAME}" 2> /dev/null || true - fi - - if command -v update-rc.d >/dev/null; then - update-rc.d "${NAME}" remove >/dev/null || true - fi -fi \ No newline at end of file diff --git a/stack/dashboard/deb/debian/rules b/stack/dashboard/deb/debian/rules deleted file mode 100644 index a25a426555..0000000000 --- a/stack/dashboard/deb/debian/rules +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 -# -# Modified by Wazuh -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - -export TARGET_DIR=${CURDIR}/debian/wazuh-dashboard -export NAME=wazuh-dashboard -export CONFIG_DIR=/etc/$(NAME) -export INSTALLATION_DIR=$(INSTALLATION_DIR) -export USER=$(NAME) -export GROUP=$(NAME) -export DASHBOARD_FILE=wazuh-dashboard-base-$(VERSION)-$(REVISION)-linux-x64.tar.xz - -# ----------------------------------------------------------------------------- - -%: - dh $@ - -# ----------------------------------------------------------------------------- - -override_dh_shlibdeps: - -# ----------------------------------------------------------------------------- - -override_dh_auto_configure: - -# ----------------------------------------------------------------------------- - -override_dh_auto_install: - -# ----------------------------------------------------------------------------- - -override_dh_install: - cp /tmp/$(DASHBOARD_FILE) ./ - - groupadd $(GROUP) - useradd -g $(GROUP) $(USER) - - tar -xf $(DASHBOARD_FILE) - sed -i 's/OSD_NODE_OPTS_PREFIX/OSD_PATH_CONF="\/etc\/wazuh-dashboard" OSD_NODE_OPTS_PREFIX/g' "wazuh-dashboard-base/bin/opensearch-dashboards" - sed -i 's/OSD_USE_NODE_JS_FILE_PATH/OSD_PATH_CONF="\/etc\/wazuh-dashboard" OSD_USE_NODE_JS_FILE_PATH/g' "wazuh-dashboard-base/bin/opensearch-dashboards-keystore" - - mkdir -p $(TARGET_DIR)$(CONFIG_DIR) - mkdir -p $(TARGET_DIR)$(INSTALLATION_DIR) - mkdir -p $(TARGET_DIR)/etc/systemd/system - mkdir -p $(TARGET_DIR)/etc/default - - cp wazuh-dashboard-base/etc/node.options $(TARGET_DIR)$(CONFIG_DIR) - cp wazuh-dashboard-base/etc/opensearch_dashboards.yml $(TARGET_DIR)$(CONFIG_DIR) - mv wazuh-dashboard-base/* $(TARGET_DIR)$(INSTALLATION_DIR) - - mkdir -p $(TARGET_DIR)$(INSTALLATION_DIR)/config - - cp $(TARGET_DIR)$(INSTALLATION_DIR)/etc/services/wazuh-dashboard.service $(TARGET_DIR)/etc/systemd/system/wazuh-dashboard.service - cp $(TARGET_DIR)$(INSTALLATION_DIR)/etc/services/wazuh-dashboard $(TARGET_DIR)/etc/systemd/system/$(NAME) - cp $(TARGET_DIR)$(INSTALLATION_DIR)/etc/services/default $(TARGET_DIR)/etc/default/$(NAME) - - rm -rf $(TARGET_DIR)$(INSTALLATION_DIR)/etc - - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(INSTALLATION_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(CONFIG_DIR) - - if [ "$(VERSION)" = "99.99.0" ]; then \ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuh-99.99.0-$(REVISION).zip" ;\ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuhCheckUpdates-99.99.0-$(REVISION).zip" ;\ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuhCore-99.99.0-$(REVISION).zip" ;\ - else \ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install $(URLPLUGINMAIN)" ;\ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install $(URLPLUGINUPDATES)" ;\ - runuser $(USER) --shell="/bin/bash" --command="$(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-dashboards-plugin install $(URLPLUGINCORE)" ;\ - fi - - find $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/wazuh/ -exec chown $(USER):$(GROUP) {} \; - -# ----------------------------------------------------------------------------- - -override_dh_fixperms: - - chmod 750 $(TARGET_DIR)$(CONFIG_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(CONFIG_DIR) - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(INSTALLATION_DIR) - chown root:root $(TARGET_DIR)/etc/systemd/system/wazuh-dashboard.service - chown root:root $(TARGET_DIR)/etc/systemd/system/"$(NAME)" - chown $(USER):$(GROUP) $(TARGET_DIR)/etc/default/"$(NAME)" - chown $(USER):$(GROUP) $(TARGET_DIR)$(INSTALLATION_DIR)/VERSION - chmod 440 $(TARGET_DIR)$(INSTALLATION_DIR)/VERSION - chmod 750 $(TARGET_DIR)/etc/systemd/system/wazuh-dashboard - chmod 750 $(TARGET_DIR)/etc/default/wazuh-dashboard - chmod 640 "$(TARGET_DIR)$(CONFIG_DIR)"/opensearch_dashboards.yml - chmod 640 "$(TARGET_DIR)$(CONFIG_DIR)"/node.options - chmod 640 "$(TARGET_DIR)"/etc/systemd/system/wazuh-dashboard.service - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type d -exec chmod 750 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 644 -exec chmod 640 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 755 -exec chmod 750 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 744 -exec chmod 740 {} \; - -# ----------------------------------------------------------------------------- - -override_dh_strip: - dh_strip --no-automatic-dbgsym -XlibGLESv2.so -XlibEGL.so - -# ----------------------------------------------------------------------------- - -.PHONY: override_dh_strip override_dh_auto_clean override_dh_auto_build override_dh_auto_configure diff --git a/stack/dashboard/deb/docker/amd64/Dockerfile b/stack/dashboard/deb/docker/amd64/Dockerfile deleted file mode 100644 index f3ca3b9811..0000000000 --- a/stack/dashboard/deb/docker/amd64/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM debian:10 - -ENV DEBIAN_FRONTEND noninteractive - -# Installing necessary packages -RUN apt-get update && apt-get install -y --allow-change-held-packages apt-utils && \ - apt-get install -y --allow-change-held-packages \ - curl sudo wget expect gnupg build-essential \ - devscripts equivs selinux-basics procps gawk - -# Add the script to build the Debian package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] \ No newline at end of file diff --git a/stack/dashboard/rpm/build_package.sh b/stack/dashboard/rpm/build_package.sh deleted file mode 100755 index a4d1b55046..0000000000 --- a/stack/dashboard/rpm/build_package.sh +++ /dev/null @@ -1,276 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -current_path="$( cd $(dirname $0) ; pwd -P )" -architecture="x86_64" -outdir="${current_path}/output" -revision="1" -build_docker="yes" -rpm_x86_builder="rpm_dashboard_builder_x86" -rpm_builder_dockerfile="${current_path}/docker" -future="no" -base_cmd="" -plugin_main="" -plugin_updates="" -plugin_core="" -build_base="yes" -have_main=false -have_updates=false -have_core=false -version="" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.gz,wazuh-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -set_version() { - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat ${current_path}/../../../VERSION) - fi -} - -build_rpm() { - container_name="$1" - dockerfile_path="$2" - - if [ "${plugin_main_reference}" ];then - plugin_main="${plugin_main_reference}" - fi - if [ "${plugin_updates_reference}" ];then - plugin_updates="${plugin_updates_reference}" - fi - if [ "${plugin_core_reference}" ];then - plugin_core="${plugin_core_reference}" - fi - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - if [ "${build_base}" == "yes" ];then - # Base generation - if [ "${future}" == "yes" ];then - base_cmd+="--future " - fi - if [ "${reference}" ];then - base_cmd+="--reference ${reference}" - fi - if [ "${plugin_main_reference}" ];then - base_cmd+="--app-url ${plugin_main_reference}" - fi - ../base/generate_base.sh -s ${outdir} -r ${revision} ${base_cmd} - else - basefile="${outdir}/wazuh-dashboard-base-${version}-${revision}-linux-x64.tar.xz" - if ! test -f "${basefile}"; then - echo "Did not find expected Wazuh dashboard base file: ${basefile} in output path. Exiting..." - exit 1 - fi - fi - - # Build the Docker image - if [[ ${build_docker} == "yes" ]]; then - docker build -t ${container_name} ${dockerfile_path} || return 1 - fi - - # Build the RPM package with a Docker container - volumes="-v ${outdir}/:/tmp:Z" - if [ "${reference}" ];then - docker run -t --rm ${volumes} \ - ${container_name} ${architecture} ${revision} \ - ${future} ${plugin_main} ${plugin_updates} ${plugin_core} ${reference} || return 1 - else - docker run -t --rm ${volumes} \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} \ - ${revision} ${future} ${plugin_main} ${plugin_updates} ${plugin_core} || return 1 - fi - - echo "Package $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -build() { - build_name="" - file_path="" - if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="x86_64" - build_name="${rpm_x86_builder}" - file_path="${rpm_builder_dockerfile}/${architecture}" - else - echo "Invalid architecture. Choose: x86_64 (amd64 is accepted too)" - return 1 - fi - build_rpm ${build_name} ${file_path} || return 1 - - return 0 -} - -help() { - echo -e "" - echo -e "NAME" - echo -e " $(basename "$0") - Build Wazuh dashboard base file." - echo -e "" - echo -e "SYNOPSIS" - echo -e " $(basename "$0") -a | -m | -u | -c | -s | -b | -f | -r | -h" - echo -e "" - echo -e "DESCRIPTION" - echo -e " -a, --architecture " - echo -e " [Optional] Target architecture of the package [x86_64]." - echo -e "" - echo -e " -m, --main-app " - echo -e " [Optional] Wazuh main plugin URL." - echo -e "" - echo -e " -u, --updates-app " - echo -e " [Optional] Wazuh Check Updates plugin URL." - echo -e "" - echo -e " -c, --core-app " - echo -e " [Optional] Wazuh Core plugin URL." - echo -e "" - echo -e " -b, --build-base " - echo -e " [Optional] Build a new base or use a existing one. By default, yes." - echo -e "" - echo -e " -r, --revision " - echo -e " [Optional] Package revision. By default: 1." - echo -e "" - echo -e " -s, --store " - echo -e " [Optional] Set the destination path of package. By default, an output folder will be created." - echo -e "" - echo -e " --reference " - echo -e " [Optional] wazuh-packages branch to download SPECs, not used by default." - echo -e "" - echo -e " --dont-build-docker" - echo -e " [Optional] Locally built docker image will be used instead of generating a new one." - echo -e "" - echo -e " --future" - echo -e " [Optional] Build test future package 99.99.0 Used for development purposes." - echo -e "" - echo -e " -h, --help" - echo -e " Show this help." - echo -e "" - exit $1 -} - - -main() { - while [ -n "$1" ] - do - case "$1" in - "-h"|"--help") - help 0 - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - architecture="$2" - shift 2 - else - help 1 - fi - ;; - "-m"|"--main-app-url") - if [ -n "$2" ]; then - plugin_main_reference="$2" - have_main=true - shift 2 - else - help 1 - fi - ;; - "-u"|"--updates-app-url") - if [ -n "$2" ]; then - plugin_updates_reference="$2" - have_updates=true - shift 2 - else - help 1 - fi - ;; - "-c"|"--core-app-url") - if [ -n "$2" ]; then - plugin_core_reference="$2" - have_core=true - shift 2 - else - help 1 - fi - ;; - "-b"|"--build-base") - if [ -n "${2}" ]; then - build_base="${2}" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - revision="$2" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "$2" ]; then - reference="$2" - shift 2 - else - help 1 - fi - ;; - "--dont-build-docker") - build_docker="no" - shift 1 - ;; - "--future") - future="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "$2" ]; then - outdir="$2" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - - set_version - - if [ ! "${plugin_main_reference}" ] && [ ! "${plugin_updates_reference}" ] && [ ! "${plugin_core_reference}" ]; then - echo "No Wazuh plugins have been defined, ${version} pre-release development packages with revision ${revision} will be used." - elif [[ ${have_main} != ${have_updates} ]] || [[ ${have_updates} != ${have_core} ]]; then - echo "The -m, -u, and -c options must be used together." - exit 1 - fi - - build || clean 1 - - clean 0 -} - -main "$@" diff --git a/stack/dashboard/rpm/builder.sh b/stack/dashboard/rpm/builder.sh deleted file mode 100755 index 0f19d1e3fb..0000000000 --- a/stack/dashboard/rpm/builder.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e -# Script parameters to build the package -target="wazuh-dashboard" -architecture=$1 -revision=$2 -future=$3 -plugin_main=$4 -plugin_updates=$5 -plugin_core=$6 -reference=$7 -directory_base="/usr/share/wazuh-dashboard" - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${future}" = "yes" ];then - version="99.99.0" -else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat /root/VERSION) - fi -fi - -if [ "${plugin_main}" ] && [ "${plugin_updates}" ] && [ "${plugin_core}" ] ;then - valid_url='(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]*[-[:alnum:]\+&@#/%=~_|]' - if [[ "${plugin_main}" =~ $valid_url ]];then - url_main="${plugin_main}" - if ! curl --output /dev/null --silent --head --fail "${url_main}"; then - echo "The given URL to download the Wazuh main plugin ZIP does not exist: ${url_main}" - exit 1 - fi - else - url_main="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuh-${version}-${revision}.zip" - fi - if [[ "${plugin_updates}" =~ $valid_url ]];then - url_updates="${plugin_updates}" - if ! curl --output /dev/null --silent --head --fail "${url_updates}"; then - echo "The given URL to download the Wazuh Check Updates plugin ZIP does not exist: ${url_updates}" - exit 1 - fi - else - url_updates="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuhCheckUpdates-${version}-${revision}.zip" - fi - if [[ "${plugin_core}" =~ $valid_url ]];then - url_core="${plugin_core}" - if ! curl --output /dev/null --silent --head --fail "${url_core}"; then - echo "The given URL to download the Wazuh Core plugin ZIP does not exist: ${url_core}" - exit 1 - fi - else - url_core="https://packages-dev.wazuh.com/${app_url}/ui/dashboard/wazuhCore-${version}-${revision}.zip" - fi -else - url_main="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuh-${version}-${revision}.zip" - url_updates="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuhCheckUpdates-${version}-${revision}.zip" - url_core="https://packages-dev.wazuh.com/pre-release/ui/dashboard/wazuhCore-${version}-${revision}.zip" -fi - -# Build directories -build_dir=/build -rpm_build_dir=${build_dir}/rpmbuild -file_name="${target}-${version}-${revision}" -pkg_path="${rpm_build_dir}/RPMS/${architecture}" -rpm_file="${file_name}.${architecture}.rpm" -mkdir -p ${rpm_build_dir}/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} - -# Prepare the sources directory to build the source tar.gz -pkg_name=${target}-${version} -mkdir ${build_dir}/${pkg_name} - -# Including spec file -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${reference} | tar zx - cp ./wazuh*/stack/dashboard/rpm/${target}.spec ${rpm_build_dir}/SPECS/${pkg_name}.spec - cp -r ./wazuh*/* /root/ -else - cp /root/stack/dashboard/rpm/${target}.spec ${rpm_build_dir}/SPECS/${pkg_name}.spec -fi - -# Generating source tar.gz -cd ${build_dir} && tar czf "${rpm_build_dir}/SOURCES/${pkg_name}.tar.gz" "${pkg_name}" - -# Building RPM -/usr/bin/rpmbuild --define "_topdir ${rpm_build_dir}" --define "_version ${version}" \ - --define "_release ${revision}" --define "_localstatedir ${directory_base}" \ - --define "_url_plugin_main ${url_main}" --define "_url_plugin_updates ${url_updates}" --define "_url_plugin_core ${url_core}" \ - --target ${architecture} -ba ${rpm_build_dir}/SPECS/${pkg_name}.spec - -cd ${pkg_path} && sha512sum ${rpm_file} > /tmp/${rpm_file}.sha512 - -find ${pkg_path}/ -maxdepth 3 -type f -name "${file_name}*" -exec mv {} /tmp/ \; diff --git a/stack/dashboard/rpm/docker/x86_64/Dockerfile b/stack/dashboard/rpm/docker/x86_64/Dockerfile deleted file mode 100644 index e7635a2d64..0000000000 --- a/stack/dashboard/rpm/docker/x86_64/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM amd64/centos:7 - -# Enable EPEL -RUN yum install -y http://packages.wazuh.com/utils/pkg/epel-release-latest-7.noarch.rpm - -# Install all the necessary tools to build the packages -RUN yum clean all && yum update -y -RUN yum install -y openssh-clients sudo gnupg \ - yum-utils redhat-rpm-config rpm-devel \ - zlib zlib-devel rpm-build autoconf automake \ - glibc-devel libtool perl - -RUN yum install -y https://repo.ius.io/ius-release-el$(rpm -E '%{rhel}').rpm - -RUN yum update -y && yum install -y python3 - -RUN ln -fs /usr/bin/python3.6 /usr/bin/python - -# Add the scripts to build the RPM package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/stack/dashboard/rpm/wazuh-dashboard.spec b/stack/dashboard/rpm/wazuh-dashboard.spec deleted file mode 100644 index 451785bd9e..0000000000 --- a/stack/dashboard/rpm/wazuh-dashboard.spec +++ /dev/null @@ -1,412 +0,0 @@ -# Wazuh dashboard SPEC -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -Summary: Wazuh dashboard is a user interface and visualization tool for security-related data. Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-dashboard.html -Name: wazuh-dashboard -Version: %{_version} -Release: %{_release} -License: GPL -Group: System Environment/Daemons -Source0: %{name}-%{version}.tar.gz -URL: https://www.wazuh.com/ -buildroot: %{_tmppath}/%{name}-%{version}-%{release}-wazuh-dashboard-%(%{__id_u} -n) -Vendor: Wazuh, Inc -Packager: Wazuh, Inc -Requires(pre): /usr/sbin/groupadd /usr/sbin/useradd -Requires(preun): /sbin/service -Requires(postun): /sbin/service -AutoReqProv: no -Requires: libcap -ExclusiveOS: linux - -# ----------------------------------------------------------------------------- - -%global USER %{name} -%global GROUP %{name} -%global CONFIG_DIR /etc/%{name} -%global PID_DIR /run/%{name} -%global INSTALL_DIR /usr/share/%{name} -%global DASHBOARD_FILE wazuh-dashboard-base-%{version}-%{release}-linux-x64.tar.xz -%define _source_payload w9.gzdio -%define _binary_payload w9.gzdio - -# ----------------------------------------------------------------------------- - - -%description -Wazuh dashboard is a user interface and visualization tool for security-related data. This Wazuh central component enables exploring, visualizing, and analyzing the stored security alerts generated by the Wazuh server. Wazuh dashboard enables inspecting the status and managing the configurations of the Wazuh cluster and agents as well as creating and managing users and roles. In addition, it allows testing the ruleset and making calls to the Wazuh API. Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-dashboard.html - -# ----------------------------------------------------------------------------- - -%prep - -cp /tmp/%{DASHBOARD_FILE} ./ - -groupadd %{GROUP} -useradd -g %{GROUP} %{USER} - -# ----------------------------------------------------------------------------- - -%build - -tar -xf %{DASHBOARD_FILE} - -# Set custom config dir -sed -i 's/OSD_NODE_OPTS_PREFIX/OSD_PATH_CONF="\/etc\/wazuh-dashboard" OSD_NODE_OPTS_PREFIX/g' "wazuh-dashboard-base/bin/opensearch-dashboards" -sed -i 's/OSD_USE_NODE_JS_FILE_PATH/OSD_PATH_CONF="\/etc\/wazuh-dashboard" OSD_USE_NODE_JS_FILE_PATH/g' "wazuh-dashboard-base/bin/opensearch-dashboards-keystore" - -# ----------------------------------------------------------------------------- - -%install - -mkdir -p %{buildroot}%{CONFIG_DIR} -mkdir -p %{buildroot}%{INSTALL_DIR} -mkdir -p %{buildroot}/etc/systemd/system -mkdir -p %{buildroot}%{_initrddir} -mkdir -p %{buildroot}/etc/default - -cp wazuh-dashboard-base/etc/node.options %{buildroot}%{CONFIG_DIR} -cp wazuh-dashboard-base/etc/opensearch_dashboards.yml %{buildroot}%{CONFIG_DIR} -cp wazuh-dashboard-base/VERSION %{buildroot}%{INSTALL_DIR} - -mv wazuh-dashboard-base/* %{buildroot}%{INSTALL_DIR} - -# Set custom welcome styles - -mkdir -p %{buildroot}%{INSTALL_DIR}/config - -cp %{buildroot}%{INSTALL_DIR}/etc/services/wazuh-dashboard.service %{buildroot}/etc/systemd/system/wazuh-dashboard.service -cp %{buildroot}%{INSTALL_DIR}/etc/services/default %{buildroot}/etc/default/wazuh-dashboard - -chmod 640 %{buildroot}/etc/systemd/system/wazuh-dashboard.service -chmod 640 %{buildroot}/etc/default/wazuh-dashboard - -rm -rf %{buildroot}%{INSTALL_DIR}/etc/ - -find %{buildroot}%{INSTALL_DIR} -exec chown %{USER}:%{GROUP} {} \; -find %{buildroot}%{CONFIG_DIR} -exec chown %{USER}:%{GROUP} {} \; - -chown root:root %{buildroot}/etc/systemd/system/wazuh-dashboard.service - -if [ "%{version}" = "99.99.0" ];then - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuh-99.99.0-%{release}.zip" - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuhCheckUpdates-99.99.0-%{release}.zip" - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install https://packages-dev.wazuh.com/futures/ui/dashboard/wazuhCore-99.99.0-%{release}.zip" -else - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install %{_url_plugin_main}" - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install %{_url_plugin_updates}" - runuser %{USER} --shell="/bin/bash" --command="%{buildroot}%{INSTALL_DIR}/bin/opensearch-dashboards-plugin install %{_url_plugin_core}" -fi - -find %{buildroot}%{INSTALL_DIR}/plugins/wazuh/ -exec chown %{USER}:%{GROUP} {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuh/ -type f -perm 644 -exec chmod 640 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuh/ -type f -perm 755 -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuh/ -type d -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuh/ -type f -perm 744 -exec chmod 740 {} \; - -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCheckUpdates/ -exec chown %{USER}:%{GROUP} {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCheckUpdates/ -type f -perm 644 -exec chmod 640 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCheckUpdates/ -type f -perm 755 -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCheckUpdates/ -type d -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCheckUpdates/ -type f -perm 744 -exec chmod 740 {} \; - -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCore/ -exec chown %{USER}:%{GROUP} {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCore/ -type f -perm 644 -exec chmod 640 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCore/ -type f -perm 755 -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCore/ -type d -exec chmod 750 {} \; -find %{buildroot}%{INSTALL_DIR}/plugins/wazuhCore/ -type f -perm 744 -exec chmod 740 {} \; -# ----------------------------------------------------------------------------- - -%pre -# Create the wazuh-dashboard group if it doesn't exists -if [ $1 = 1 ]; then - if command -v getent > /dev/null 2>&1 && ! getent group %{GROUP} > /dev/null 2>&1; then - groupadd -r %{GROUP} - elif ! getent group %{GROUP} > /dev/null 2>&1; then - groupadd -r %{GROUP} - fi - # Create the wazuh-dashboard user if it doesn't exists - if ! getent passwd %{USER} > /dev/null 2>&1; then - useradd -g %{GROUP} -G %{USER} -d %{INSTALL_DIR}/ -r -s /sbin/nologin wazuh-dashboard - fi -fi -# Stop the services to upgrade the package -if [ $1 = 2 ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-dashboard > /dev/null 2>&1; then - systemctl stop wazuh-dashboard.service > /dev/null 2>&1 - touch %{INSTALL_DIR}/wazuh-dashboard.restart - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-dashboard status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service wazuh-dashboard stop > /dev/null 2>&1 - touch %{INSTALL_DIR}/wazuh-dashboard.restart - fi -fi - -# ----------------------------------------------------------------------------- - -%post -setcap 'cap_net_bind_service=+ep' %{INSTALL_DIR}/node/bin/node -setcap 'cap_net_bind_service=+ep' %{INSTALL_DIR}/node/fallback/bin/node - -# ----------------------------------------------------------------------------- - -%preun -if [ $1 = 0 ];then # Remove - echo -n "Stopping wazuh-dashboard service..." - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl stop wazuh-dashboard.service > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1; then - service wazuh-dashboard stop > /dev/null 2>&1 - fi -fi - -# ----------------------------------------------------------------------------- - -%postun -if [ $1 = 0 ];then - # If the package is been uninstalled - # Remove the wazuh-dashboard user if it exists - if getent passwd %{USER} > /dev/null 2>&1; then - userdel %{USER} >/dev/null 2>&1 - fi - # Remove the wazuh-dashboard group if it exists - if command -v getent > /dev/null 2>&1 && getent group %{GROUP} > /dev/null 2>&1; then - groupdel %{GROUP} >/dev/null 2>&1 - elif getent group %{GROUP} > /dev/null 2>&1; then - groupdel %{GROUP} >/dev/null 2>&1 - fi - - # Remove /etc/wazuh-dashboard and /usr/share/wazuh-dashboard dirs - rm -rf %{INSTALL_DIR} - if [ -d %{PID_DIR} ]; then - rm -rf %{PID_DIR} - fi -fi - -# ----------------------------------------------------------------------------- - -# posttrans code is the last thing executed in a install/upgrade -%posttrans -if [ ! -d %{PID_DIR} ]; then - mkdir -p %{PID_DIR} - chown %{USER}:%{GROUP} %{PID_DIR} -fi - -# Move keystore file if upgrade (file exists in install dir in <= 4.6.0) -if [ -f "%{INSTALL_DIR}"/config/opensearch_dashboards.keystore ]; then - mv "%{INSTALL_DIR}"/config/opensearch_dashboards.keystore "%{CONFIG_DIR}"/opensearch_dashboards.keystore -elif [ ! -f %{CONFIG_DIR}/opensearch_dashboards.keystore ]; then - runuser %{USER} --shell="/bin/bash" --command="%{INSTALL_DIR}/bin/opensearch-dashboards-keystore create" > /dev/null 2>&1 - runuser %{USER} --shell="/bin/bash" --command="echo kibanaserver | %{INSTALL_DIR}/bin/opensearch-dashboards-keystore add opensearch.username --stdin" > /dev/null 2>&1 - runuser %{USER} --shell="/bin/bash" --command="echo kibanaserver | %{INSTALL_DIR}/bin/opensearch-dashboards-keystore add opensearch.password --stdin" > /dev/null 2>&1 - chmod 640 "%{CONFIG_DIR}"/opensearch_dashboards.keystore -fi - -if ! grep -q "/app/wz-home" %{CONFIG_DIR}/opensearch_dashboards.yml; then - sed -i 's/\/app\/wazuh/\/app\/wz-home/g' %{CONFIG_DIR}/opensearch_dashboards.yml -fi - -if [ -f %{INSTALL_DIR}/wazuh-dashboard.restart ]; then - rm -f %{INSTALL_DIR}/wazuh-dashboard.restart - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl restart wazuh-dashboard.service > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1; then - service wazuh-dashboard restart > /dev/null 2>&1 - fi - -fi - - -# ----------------------------------------------------------------------------- - -%clean -rm -fr %{buildroot} - -# ----------------------------------------------------------------------------- - -%files -%defattr(-,%{USER},%{GROUP}) - -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR} -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR} -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/node" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/node_modules" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/data" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/plugins" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/bin" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/config" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/core" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/remove" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/list" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/lib" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/downloaders" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/__fixtures__" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/__fixtures__/replies" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_keystore" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_keystore/utils" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env/root" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env/harden" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/__fixtures__" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/__fixtures__/plugin" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/__fixtures__/plugin/foo" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/plugins" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/integration_tests" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/integration_tests/__fixtures__" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/integration_tests/__fixtures__/reload_logging_config" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/utils" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/logging" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/logging/rotate" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/core" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/i18n" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/i18n/localization" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/warnings" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/http" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/config" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/keystore" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/apm" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/ui_render" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/ui_render/bootstrap" -%dir %attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/docs" - -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/*.json" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/*.yml" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/*.txt" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/remove/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/list/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/downloaders/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/__fixtures__/replies/*.zip" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/install/__fixtures__/replies/*.jpg" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_keystore/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_keystore/utils/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env/root/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/setup_node_env/harden/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/__fixtures__/plugin/foo/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/optimize/bundles_route/__fixtures__/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/integration_tests/__fixtures__/*.yml" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli/serve/integration_tests/__fixtures__/reload_logging_config/*.yml" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/cli_plugin/lib/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/utils/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/logging/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/logging/rotate/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/core/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/i18n/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/i18n/localization/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/warnings/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/http/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/config/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/server/keystore/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/ui_render/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/ui_render/bootstrap/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/ui_render/bootstrap/*.hbs" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/legacy/ui/apm/*.js" -%attr(640, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/docs/*.js" - -%attr(-, %{USER}, %{GROUP}) "%{INSTALL_DIR}/node/*" -%attr(-, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/core/*" -%attr(-, %{USER}, %{GROUP}) "%{INSTALL_DIR}/src/plugins/* -%attr(-, %{USER}, %{GROUP}) "%{INSTALL_DIR}/node_modules/*" -%attr(-, %{USER}, %{GROUP}) "%{INSTALL_DIR}/plugins/*" - -%attr(440, %{USER}, %{GROUP}) "%{INSTALL_DIR}/VERSION" -%attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/node_modules/.yarn-integrity" -%attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/bin/use_node" -%attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/bin/opensearch-dashboards" -%attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/bin/opensearch-dashboards-plugin" -%attr(750, %{USER}, %{GROUP}) "%{INSTALL_DIR}/bin/opensearch-dashboards-keystore" -%attr(750, %{USER}, %{GROUP}) "/etc/default/wazuh-dashboard" -%attr(640, %{USER}, %{GROUP}) "%{CONFIG_DIR}/node.options" -%attr(640, root, root) "/etc/systemd/system/wazuh-dashboard.service" -%config(noreplace) %attr(640, %{USER}, %{GROUP}) "%{CONFIG_DIR}/opensearch_dashboards.yml" - -%changelog -* Thu Aug 15 2024 support - 4.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html -* Thu Jul 18 2024 support - 4.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html -* Wed Jun 12 2024 support - 4.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html -* Thu May 30 2024 support - 4.7.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html -* Thu Apr 25 2024 support - 4.7.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html -* Tue Feb 27 2024 support - 4.7.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html -* Tue Jan 09 2024 support - 4.7.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html -* Wed Dec 13 2023 support - 4.7.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html -* Tue Nov 21 2023 support - 4.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html -* Tue Oct 31 2023 support - 4.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html -* Tue Oct 24 2023 support - 4.5.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html -* Tue Oct 10 2023 support - 4.5.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html -* Thu Aug 31 2023 support - 4.5.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html -* Thu Aug 24 2023 support - 4.5.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5.1.html -* Thu Aug 10 2023 support - 4.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html -* Mon Jul 10 2023 support - 4.4.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html -* Tue Jun 13 2023 support - 4.4.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html -* Thu May 25 2023 support - 4.4.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html -* Mon Apr 24 2023 support - 4.4.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html -* Mon Apr 17 2023 support - 4.4.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html -* Wed Jan 18 2023 support - 4.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html -* Thu Nov 10 2022 support - 4.3.10 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html -* Mon Oct 03 2022 support - 4.3.9 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html -* Mon Sep 19 2022 support - 4.3.8 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html -* Mon Aug 08 2022 support - 4.3.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html -* Thu Jul 07 2022 support - 4.3.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html -* Wed Jun 29 2022 support - 4.3.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html -* Tue Jun 07 2022 support - 4.3.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html -* Tue May 31 2022 support - 4.3.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html -* Mon May 30 2022 support - 4.3.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html -* Wed May 18 2022 support - 4.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html -* Thu May 05 2022 support - 4.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html diff --git a/stack/indexer/base/builder.sh b/stack/indexer/base/builder.sh deleted file mode 100644 index 7dad4505fd..0000000000 --- a/stack/indexer/base/builder.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash - -set -x - -# Wazuh-indexer base builder -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex - -architecture="$1" -revision="$2" -future="$3" -reference="$4" -opensearch_version="2.10.0" -base_dir=/opt/wazuh-indexer-base - -# ----------------------------------------------------------------------------- - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="x64" -fi - -# Including files -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/"${reference}" | tar xz - cp -r ./wazuh*/* /root/ - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) -else - version=$(cat /root/VERSION) -fi - -if [ "${future}" = "yes" ];then - version="99.99.0" -fi - - - -# ----------------------------------------------------------------------------- - -mkdir -p /tmp/output -cd /opt - -curl -sL https://artifacts.opensearch.org/releases/bundle/opensearch/"${opensearch_version}"/opensearch-"${opensearch_version}"-linux-${architecture}.tar.gz | tar xz - -# Remove unnecessary files and set up configuration -mv opensearch-"${opensearch_version}" "${base_dir}" -cd "${base_dir}" -find -type l -exec rm -rf {} \; -find -name "*.bat" -exec rm -rf {} \; -rm -rf README.md manifest.yml opensearch-tar-install.sh logs -sed -i 's|OPENSEARCH_DISTRIBUTION_TYPE=tar|OPENSEARCH_DISTRIBUTION_TYPE=rpm|g' bin/opensearch-env -sed -i 's|"$OPENSEARCH_HOME"/config|/etc/wazuh-indexer|g' bin/opensearch-env -cp -r /root/stack/indexer/base/files/systemd-entrypoint bin/ -mkdir -p ./etc/wazuh-indexer/ -cp -r ./config/* ./etc/wazuh-indexer/ -rm -rf ./config -cp -r /root/stack/indexer/base/files/etc/wazuh-indexer/* ./etc/wazuh-indexer/ -cp -r /root/stack/indexer/base/files/etc/sysconfig ./etc/ -cp -r /root/stack/indexer/base/files/etc/init.d ./etc/ -cp -r /root/stack/indexer/base/files/usr ./ -rm -rf ./plugins/opensearch-security/tools/install_demo_configuration.sh -cp /root/VERSION . - -# ----------------------------------------------------------------------------- - -# Compile systemD module -git clone https://github.com/opensearch-project/OpenSearch.git --branch="${opensearch_version}" --depth=1 -cd OpenSearch/modules/systemd -export JAVA_HOME=/etc/alternatives/java_sdk_11 -../../gradlew build || true -mkdir -p "${base_dir}"/modules/systemd -cp build/distributions/systemd-"${opensearch_version}"-SNAPSHOT.jar "${base_dir}"/modules/systemd/systemd-"${opensearch_version}".jar -cp build/resources/test/plugin-security.policy "${base_dir}"/modules/systemd/ -cp build/generated-resources/plugin-descriptor.properties "${base_dir}"/modules/systemd/ -sed -i 's|-SNAPSHOT||g' "${base_dir}"/modules/systemd/plugin-descriptor.properties -cd "${base_dir}" -rm -rf OpenSearch - -find -type d -exec chmod 750 {} \; -find -type f -perm 644 -exec chmod 640 {} \; -find -type f -perm 664 -exec chmod 660 {} \; -find -type f -perm 755 -exec chmod 750 {} \; -find -type f -perm 744 -exec chmod 740 {} \; - -# ----------------------------------------------------------------------------- - -# Base output -cd /opt -tar -Jcvf wazuh-indexer-base-"${version}"-"${revision}"-linux-${architecture}.tar.xz wazuh-indexer-base -cp wazuh-indexer-base-"${version}"-"${revision}"-linux-${architecture}.tar.xz /tmp/output diff --git a/stack/indexer/base/docker/Dockerfile b/stack/indexer/base/docker/Dockerfile deleted file mode 100644 index 5283bdec08..0000000000 --- a/stack/indexer/base/docker/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM rockylinux:8.5 - -# Install all the necessary tools -RUN yum clean all && yum update -y -RUN yum install -y \ - findutils \ - git \ - java-11-openjdk-devel - -# Add the script -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] \ No newline at end of file diff --git a/stack/indexer/base/files/etc/init.d/wazuh-indexer b/stack/indexer/base/files/etc/init.d/wazuh-indexer deleted file mode 100644 index 563d93a081..0000000000 --- a/stack/indexer/base/files/etc/init.d/wazuh-indexer +++ /dev/null @@ -1,162 +0,0 @@ -#!/bin/bash -# -# wazuh-indexer -# -# chkconfig: 2345 80 20 -# description: Starts and stops a single wazuh-indexer instance on this system -# - -### BEGIN INIT INFO -# Provides: Wazuh-indexer -# Required-Start: $network $named -# Required-Stop: $network $named -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: This service manages the wazuh-indexer daemon -# Description: Wazuh-indexer is a very scalable, schema-free and high-performance search solution supporting multi-tenancy and near realtime search. -### END INIT INFO - -# -# init.d / servicectl compatibility (openSUSE) -# -if [ -f /etc/rc.status ]; then - . /etc/rc.status - rc_reset -fi - -# -# Source function library. -# -if [ -f /etc/rc.d/init.d/functions ]; then - . /etc/rc.d/init.d/functions -fi - -# Sets the default values for wazuh-indexer variables used in this script -OPENSEARCH_HOME="/usr/share/wazuh-indexer" -MAX_OPEN_FILES=65535 -MAX_MAP_COUNT=262144 -OPENSEARCH_PATH_CONF="/etc/wazuh-indexer" - -PID_DIR="/run/wazuh-indexer" - -# Source the default env file -WI_ENV_FILE="/etc/sysconfig/wazuh-indexer" -if [ -f "$WI_ENV_FILE" ]; then - . "$WI_ENV_FILE" -fi - -exec="$OPENSEARCH_HOME/bin/opensearch" -prog="wazuh-indexer" -pidfile="$PID_DIR/${prog}.pid" - -export WI_JAVA_OPTS -export JAVA_HOME -export OPENSEARCH_PATH_CONF -export WI_STARTUP_SLEEP_TIME - -lockfile=/var/lock/subsys/$prog - -if [ ! -x "$exec" ]; then - echo "The wazuh-indexer startup script does not exists or it is not executable, tried: $exec" - exit 1 -fi - -start() { - [ -x $exec ] || exit 5 - - if [ -n "$MAX_OPEN_FILES" ]; then - ulimit -n $MAX_OPEN_FILES - fi - if [ -n "$MAX_LOCKED_MEMORY" ]; then - ulimit -l $MAX_LOCKED_MEMORY - fi - if [ -n "$MAX_MAP_COUNT" -a -f /proc/sys/vm/max_map_count ] && [ "$MAX_MAP_COUNT" -gt $(cat /proc/sys/vm/max_map_count) ]; then - sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT - fi - - # Ensure that the PID_DIR exists (it is cleaned at OS startup time) - if [ -n "$PID_DIR" ] && [ ! -e "$PID_DIR" ]; then - mkdir -p "$PID_DIR" && chown wazuh-indexer:wazuh-indexer "$PID_DIR" - fi - if [ -n "$pidfile" ] && [ ! -e "$pidfile" ]; then - touch "$pidfile" && chown wazuh-indexer:wazuh-indexer "$pidfile" - fi - - cd $OPENSEARCH_HOME - echo -n $"Starting $prog: " - # if not running, start it up here, usually something like "daemon $exec" - if command -v systemctl; then - daemon --user wazuh-indexer --pidfile $pidfile $exec -p $pidfile -d - else - runuser wazuh-indexer --shell="/bin/bash" --command="$exec -p $pidfile -d" - fi - retval=$? - echo - [ $retval -eq 0 ] && touch $lockfile > /dev/null 2>&1 - return $retval -} - -stop() { - echo -n $"Stopping $prog: " - # stop it here, often "killproc $prog" - killproc -p $pidfile -d 86400 $prog - retval=$? - echo - [ $retval -eq 0 ] && rm -f $lockfile - return $retval -} - -restart() { - stop - start -} - -reload() { - restart -} - -force_reload() { - restart -} - -rh_status() { - # run checks to determine if the service is running or use generic status - status -p $pidfile $prog -} - -rh_status_q() { - rh_status >/dev/null 2>&1 -} - - -case "$1" in - start) - rh_status_q && exit 0 - $1 - ;; - stop) - rh_status_q || exit 0 - $1 - ;; - restart) - $1 - ;; - reload) - rh_status_q || exit 7 - $1 - ;; - force-reload) - force_reload - ;; - status) - rh_status - ;; - condrestart|try-restart) - rh_status_q || exit 0 - restart - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" - exit 2 -esac -exit $? \ No newline at end of file diff --git a/stack/indexer/base/files/etc/sysconfig/wazuh-indexer b/stack/indexer/base/files/etc/sysconfig/wazuh-indexer deleted file mode 100644 index b0934891c9..0000000000 --- a/stack/indexer/base/files/etc/sysconfig/wazuh-indexer +++ /dev/null @@ -1,55 +0,0 @@ -################################ -# Wazuh-indexer -################################ - -# Wazuh-indexer home directory -#OPENSEARCH_HOME=/usr/share/wazuh-indexer - -# Wazuh-indexer Java path -#JAVA_HOME= - -# Wazuh-indexer configuration directory -# Note: this setting will be shared with command-line tools -OPENSEARCH_PATH_CONF=/etc/wazuh-indexer - -# Wazuh-indexer PID directory -#PID_DIR=/run/wazuh-indexer - -# Additional Java OPTS -#WI_JAVA_OPTS= - -# Configure restart on package upgrade (true, every other setting will lead to not restarting) -#RESTART_ON_UPGRADE=true - -################################ -# Wazuh-indexer service -################################ - -# SysV init.d -# -# The number of seconds to wait before checking if Wazuh-indexer started successfully as a daemon process -WI_STARTUP_SLEEP_TIME=5 - -# Notification for systemd -OPENSEARCH_SD_NOTIFY=true - -################################ -# System properties -################################ - -# Specifies the maximum file descriptor number that can be opened by this process -# When using Systemd, this setting is ignored and the LimitNOFILE defined in -# /usr/lib/systemd/system/wazuh-indexer.service takes precedence -#MAX_OPEN_FILES=65535 - -# The maximum number of bytes of memory that may be locked into RAM -# Set to "unlimited" if you use the 'bootstrap.memory_lock: true' option -# in opensearch.yml. -# When using systemd, LimitMEMLOCK must be set in a unit file such as -# /etc/systemd/system/wazuh-indexer.service.d/override.conf. -#MAX_LOCKED_MEMORY=unlimited - -# Maximum number of VMA (Virtual Memory Areas) a process can own -# When using Systemd, this setting is ignored and the 'vm.max_map_count' -# property is set at boot time in /usr/lib/sysctl.d/wazuh-indexer.conf -#MAX_MAP_COUNT=262144 \ No newline at end of file diff --git a/stack/indexer/base/files/etc/wazuh-indexer/jvm.options b/stack/indexer/base/files/etc/wazuh-indexer/jvm.options deleted file mode 100644 index 150cff2e8c..0000000000 --- a/stack/indexer/base/files/etc/wazuh-indexer/jvm.options +++ /dev/null @@ -1,86 +0,0 @@ -## JVM configuration - -################################################################ -## IMPORTANT: JVM heap size -################################################################ -## -## You should always set the min and max JVM heap -## size to the same value. For example, to set -## the heap to 4 GB, set: -## -## -Xms4g -## -Xmx4g -## -## See https://opensearch.org/docs/opensearch/install/important-settings/ -## for more information -## -################################################################ - -# Xms represents the initial size of total heap space -# Xmx represents the maximum size of total heap space - --Xms1g --Xmx1g - -################################################################ -## Expert settings -################################################################ -## -## All settings below this section are considered -## expert settings. Don't tamper with them unless -## you understand what you are doing -## -################################################################ - -## GC configuration -8-10:-XX:+UseConcMarkSweepGC -8-10:-XX:CMSInitiatingOccupancyFraction=75 -8-10:-XX:+UseCMSInitiatingOccupancyOnly - -## G1GC Configuration -# NOTE: G1 GC is only supported on JDK version 10 or later -# to use G1GC, uncomment the next two lines and update the version on the -# following three lines to your version of the JDK -# 10:-XX:-UseConcMarkSweepGC -# 10:-XX:-UseCMSInitiatingOccupancyOnly -11-:-XX:+UseG1GC -11-:-XX:G1ReservePercent=25 -11-:-XX:InitiatingHeapOccupancyPercent=30 - -## JVM temporary directory --Djava.io.tmpdir=${OPENSEARCH_TMPDIR} - -## heap dumps - -# generate a heap dump when an allocation from the Java heap fails -# heap dumps are created in the working directory of the JVM --XX:+HeapDumpOnOutOfMemoryError - -# specify an alternative path for heap dumps; ensure the directory exists and -# has sufficient space --XX:HeapDumpPath=/var/lib/wazuh-indexer - -# specify an alternative path for JVM fatal error logs --XX:ErrorFile=/var/log/wazuh-indexer/hs_err_pid%p.log - -## JDK 8 GC logging -8:-XX:+PrintGCDetails -8:-XX:+PrintGCDateStamps -8:-XX:+PrintTenuringDistribution -8:-XX:+PrintGCApplicationStoppedTime -8:-Xloggc:/var/log/wazuh-indexer/gc.log -8:-XX:+UseGCLogFileRotation -8:-XX:NumberOfGCLogFiles=32 -8:-XX:GCLogFileSize=64m - -# JDK 9+ GC logging -9-:-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/wazuh-indexer/gc.log:utctime,pid,tags:filecount=32,filesize=64m - -# Explicitly allow security manager (https://bugs.openjdk.java.net/browse/JDK-8270380) -18-:-Djava.security.manager=allow - -## OpenSearch Performance Analyzer --Dclk.tck=100 --Djdk.attach.allowAttachSelf=true --Djava.security.policy=file:///etc/wazuh-indexer/opensearch-performance-analyzer/opensearch_security.policy ---add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED diff --git a/stack/indexer/base/files/etc/wazuh-indexer/opensearch.yml b/stack/indexer/base/files/etc/wazuh-indexer/opensearch.yml deleted file mode 100644 index e81528cea5..0000000000 --- a/stack/indexer/base/files/etc/wazuh-indexer/opensearch.yml +++ /dev/null @@ -1,42 +0,0 @@ -network.host: "0.0.0.0" -node.name: "node-1" -cluster.initial_master_nodes: -- "node-1" -#- "node-2" -#- "node-3" -cluster.name: "wazuh-cluster" -#discovery.seed_hosts: -# - "node-1-ip" -# - "node-2-ip" -# - "node-3-ip" -node.max_local_storage_nodes: "3" -path.data: /var/lib/wazuh-indexer -path.logs: /var/log/wazuh-indexer - -plugins.security.ssl.http.pemcert_filepath: /etc/wazuh-indexer/certs/indexer.pem -plugins.security.ssl.http.pemkey_filepath: /etc/wazuh-indexer/certs/indexer-key.pem -plugins.security.ssl.http.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem -plugins.security.ssl.transport.pemcert_filepath: /etc/wazuh-indexer/certs/indexer.pem -plugins.security.ssl.transport.pemkey_filepath: /etc/wazuh-indexer/certs/indexer-key.pem -plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/wazuh-indexer/certs/root-ca.pem -plugins.security.ssl.http.enabled: true -plugins.security.ssl.transport.enforce_hostname_verification: false -plugins.security.ssl.transport.resolve_hostname: false - -plugins.security.authcz.admin_dn: -- "CN=admin,OU=Wazuh,O=Wazuh,L=California,C=US" -plugins.security.check_snapshot_restore_write_privileges: true -plugins.security.enable_snapshot_restore_privilege: true -plugins.security.nodes_dn: -- "CN=node-1,OU=Wazuh,O=Wazuh,L=California,C=US" -#- "CN=node-2,OU=Wazuh,O=Wazuh,L=California,C=US" -#- "CN=node-3,OU=Wazuh,O=Wazuh,L=California,C=US" -plugins.security.restapi.roles_enabled: -- "all_access" -- "security_rest_api_access" - -plugins.security.system_indices.enabled: true -plugins.security.system_indices.indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opensearch-notifications-*", ".opensearch-notebooks", ".opensearch-observability", ".opendistro-asynchronous-search-response*", ".replication-metadata-store"] - -### Option to allow Filebeat-oss 7.10.2 to work ### -compatibility.override_main_response_version: true \ No newline at end of file diff --git a/stack/indexer/base/files/systemd-entrypoint b/stack/indexer/base/files/systemd-entrypoint deleted file mode 100644 index b87e37a31a..0000000000 --- a/stack/indexer/base/files/systemd-entrypoint +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -# Wazuh-indexer base file -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -# This wrapper script allows SystemD to feed a file containing a passphrase into -# the main Wazuh-indexer startup script - -if [ -n "$WI_KEYSTORE_PASSPHRASE_FILE" ] ; then - exec /usr/share/wazuh-indexer/bin/opensearch "$@" < "$WI_KEYSTORE_PASSPHRASE_FILE" -else - exec /usr/share/wazuh-indexer/bin/opensearch "$@" -fi \ No newline at end of file diff --git a/stack/indexer/base/files/usr/lib/sysctl.d/wazuh-indexer.conf b/stack/indexer/base/files/usr/lib/sysctl.d/wazuh-indexer.conf deleted file mode 100644 index 32da2c91cf..0000000000 --- a/stack/indexer/base/files/usr/lib/sysctl.d/wazuh-indexer.conf +++ /dev/null @@ -1 +0,0 @@ -vm.max_map_count=262144 \ No newline at end of file diff --git a/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer-performance-analyzer.service b/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer-performance-analyzer.service deleted file mode 100644 index d759f92022..0000000000 --- a/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer-performance-analyzer.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=Wazuh-indexer Performance Analyzer -PartOf=wazuh-indexer.service -After=wazuh-indexer.service - -[Service] -ExecStart=/usr/share/wazuh-indexer/bin/opensearch-performance-analyzer/performance-analyzer-agent-cli -Restart=on-failure -User=wazuh-indexer -Group=wazuh-indexer -Environment=OPENSEARCH_HOME=/usr/share/wazuh-indexer -Environment=OPENSEARCH_PATH_CONF=/etc/wazuh-indexer/ -WorkingDirectory=/usr/share/wazuh-indexer - -[Install] -WantedBy=wazuh-indexer.service \ No newline at end of file diff --git a/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer.service b/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer.service deleted file mode 100644 index 043f0f854c..0000000000 --- a/stack/indexer/base/files/usr/lib/systemd/system/wazuh-indexer.service +++ /dev/null @@ -1,64 +0,0 @@ -[Unit] -Description=Wazuh-indexer -Documentation=https://documentation.wazuh.com -Wants=network-online.target -After=network-online.target - -[Service] -Type=notify -RuntimeDirectory=wazuh-indexer -PrivateTmp=yes -Environment=OPENSEARCH_HOME=/usr/share/wazuh-indexer -Environment=OPENSEARCH_PATH_CONF=/etc/wazuh-indexer -Environment=PID_DIR=/run/wazuh-indexer -Environment=OPENSEARCH_SD_NOTIFY=true -EnvironmentFile=-/etc/sysconfig/wazuh-indexer - -WorkingDirectory=/usr/share/wazuh-indexer - -User=wazuh-indexer -Group=wazuh-indexer - -ExecStart=/usr/share/wazuh-indexer/bin/systemd-entrypoint -p ${PID_DIR}/wazuh-indexer.pid --quiet - -# StandardOutput is configured to redirect to journalctl since -# some error messages may be logged in standard output before -# wazuh-indexer logging system is initialized. Elasticsearch -# stores its logs in /var/log/wazuh-indexer and does not use -# journalctl by default. If you also want to enable journalctl -# logging, you can simply remove the "quiet" option from ExecStart. -StandardOutput=journal -StandardError=inherit - -# Specifies the maximum file descriptor number that can be opened by this process -LimitNOFILE=65535 - -# Specifies the maximum number of processes -LimitNPROC=4096 - -# Specifies the maximum size of virtual memory -LimitAS=infinity - -# Specifies the maximum file size -LimitFSIZE=infinity - -# Disable timeout logic and wait until process is stopped -TimeoutStopSec=0 - -# SIGTERM signal is used to stop the Java process -KillSignal=SIGTERM - -# Send the signal only to the JVM rather than its control group -KillMode=process - -# Java process is never killed -SendSIGKILL=no - -# When a JVM receives a SIGTERM signal it exits with code 143 -SuccessExitStatus=143 - -# Allow a slow startup before the systemd notifier module kicks in to extend the timeout -TimeoutStartSec=180 - -[Install] -WantedBy=multi-user.target diff --git a/stack/indexer/base/files/usr/lib/tmpfiles.d/wazuh-indexer.conf b/stack/indexer/base/files/usr/lib/tmpfiles.d/wazuh-indexer.conf deleted file mode 100644 index 690543c9e4..0000000000 --- a/stack/indexer/base/files/usr/lib/tmpfiles.d/wazuh-indexer.conf +++ /dev/null @@ -1 +0,0 @@ -d /run/wazuh-indexer 0750 wazuh-indexer wazuh-indexer - - \ No newline at end of file diff --git a/stack/indexer/base/generate_base.sh b/stack/indexer/base/generate_base.sh deleted file mode 100755 index 8124510bbc..0000000000 --- a/stack/indexer/base/generate_base.sh +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/bash - -# Wazuh-indexer base builder launcher -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -reference="" -current_path="$( cd $(dirname $0) ; pwd -P )" -outdir="${current_path}/output" -dockerfile_path="${current_path}/docker" -container_name="indexer_base_builder" -architecture="x64" -future="no" -revision="1" - -# ----------------------------------------------------------------------------- - -trap ctrl_c INT - -clean() { - exit_code="${1}" - - # Clean the files - rm -rf "${dockerfile_path}"/{*.sh,*.tar.gz} - - exit "${exit_code}" -} - -ctrl_c() { - clean 1 -} - -# ----------------------------------------------------------------------------- - -build_base() { - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - # Build the Docker image - docker build -t ${container_name} ${dockerfile_path} || return 1 - - # Build the RPM package with a Docker container - if [ "${reference}" ];then - docker run -t --rm -v ${outdir}/:/tmp/output:Z \ - ${container_name} ${architecture} ${revision} ${future} ${reference} || return 1 - else - docker run -t --rm -v ${outdir}/:/tmp/output:Z \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} ${revision} ${future} || return 1 - fi - - echo "Base file $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -# ----------------------------------------------------------------------------- - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " --reference [Optional] wazuh-packages branch or tag." - echo " --future [Optional] Build test future package 99.99.0 Used for development purposes." - echo " -r, --revision [Optional] Package revision. By default ${revision}" - echo " -h, --help Show this help." - echo - exit "${1}" -} - -# ----------------------------------------------------------------------------- - -main() { - while [ -n "${1}" ] - do - case "${1}" in - "-h"|"--help") - help 0 - ;; - "-s"|"--store") - if [ -n "${2}" ]; then - outdir="${2}" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "${2}" ]; then - reference="${2}" - shift 2 - else - help 1 - fi - ;; - "--future") - future="yes" - shift 1 - ;; - "-r"|"--revision") - if [ -n "${2}" ]; then - revision="${2}" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - build_base || clean 1 - - clean 0 -} - -main "$@" diff --git a/stack/indexer/deb/build_package.sh b/stack/indexer/deb/build_package.sh deleted file mode 100755 index c8c9eade6f..0000000000 --- a/stack/indexer/deb/build_package.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -current_path="$( cd $(dirname $0) ; pwd -P )" -architecture="amd64" -outdir="${current_path}/output" -revision="1" -build_docker="yes" -deb_amd64_builder="deb_indexer_builder_amd64" -deb_builder_dockerfile="${current_path}/docker" -future="no" -base_cmd="" -build_base="yes" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.gz,wazuh-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_deb() { - container_name="$1" - dockerfile_path="$2" - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - if [ "${build_base}" == "yes" ];then - # Base generation - if [ "${future}" == "yes" ];then - base_cmd+="--future " - fi - if [ "${reference}" ];then - base_cmd+="--reference ${reference}" - fi - ../base/generate_base.sh -s ${outdir} -r ${revision} ${base_cmd} - else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat ${current_path}/../../../VERSION) - fi - basefile="${outdir}/wazuh-indexer-base-${version}-${revision}-linux-x64.tar.xz" - if ! test -f "${basefile}"; then - echo "Did not find expected Wazuh indexer base file: ${basefile} in output path. Exiting..." - exit 1 - fi - fi - - # Build the Docker image - if [[ ${build_docker} == "yes" ]]; then - docker build -t ${container_name} ${dockerfile_path} || return 1 - fi - - - # Build the Debian package with a Docker container - volumes="-v ${outdir}/:/tmp:Z" - if [ "${reference}" ];then - docker run -t --rm ${volumes} \ - ${container_name} ${architecture} ${revision} \ - ${future} ${reference} || return 1 - else - docker run -t --rm ${volumes} \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} \ - ${revision} ${future} || return 1 - fi - - echo "Package $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -build() { - build_name="" - file_path="" - if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="amd64" - build_name="${deb_amd64_builder}" - file_path="${deb_builder_dockerfile}/${architecture}" - else - echo "Invalid architecture. Choose: amd64 (x86_64 is accepted too)" - return 1 - fi - build_deb ${build_name} ${file_path} || return 1 - - return 0 -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -a, --architecture [Optional] Target architecture of the package [amd64]." - echo " -b, --build-base [Optional] Build a new base or use a existing one. By default, yes." - echo " -r, --revision [Optional] Package revision. By default: 1." - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " --reference [Optional] wazuh-packages branch to download SPECs, not used by default." - echo " --dont-build-docker [Optional] Locally built docker image will be used instead of generating a new one." - echo " --future [Optional] Build test future package 99.99.0 Used for development purposes." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - while [ -n "${1}" ] - do - case "${1}" in - "-h"|"--help") - help 0 - ;; - "-a"|"--architecture") - if [ -n "${2}" ]; then - architecture="${2}" - shift 2 - else - help 1 - fi - ;; - "-b"|"--build-base") - if [ -n "${2}" ]; then - build_base="${2}" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "${2}" ]; then - revision="${2}" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "${2}" ]; then - reference="${2}" - shift 2 - else - help 1 - fi - ;; - "--dont-build-docker") - build_docker="no" - shift 1 - ;; - "--future") - future="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "${2}" ]; then - outdir="${2}" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - build || clean 1 - - clean 0 -} - -main "$@" diff --git a/stack/indexer/deb/builder.sh b/stack/indexer/deb/builder.sh deleted file mode 100755 index fa3495313d..0000000000 --- a/stack/indexer/deb/builder.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# Wazuh indexer builder -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -# Script parameters to build the package -target="wazuh-indexer" -architecture=$1 -revision=$2 -future=$3 -reference=$4 -directory_base="/usr/share/wazuh-indexer" - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${future}" = "yes" ];then - version="99.99.0" -else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat /root/VERSION) - fi -fi - -# Build directories -build_dir=/build -pkg_name="${target}-${version}" -pkg_path="${build_dir}/${target}" -source_dir="${pkg_path}/${pkg_name}" - -mkdir -p ${source_dir}/debian - -# Including spec file -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${reference} | tar zx - cp -r ./wazuh*/stack/indexer/deb/debian/* ${source_dir}/debian/ - cp -r ./wazuh*/* /root/ -else - cp -r /root/stack/indexer/deb/debian/* ${source_dir}/debian/ -fi - -# Generating directory structure to build the .deb package -cd ${build_dir}/${target} && tar -czf ${pkg_name}.orig.tar.gz "${pkg_name}" - -# Configure the package with the different parameters -sed -i "s:VERSION:${version}:g" ${source_dir}/debian/changelog -sed -i "s:RELEASE:${revision}:g" ${source_dir}/debian/changelog - -# Installing build dependencies -cd ${source_dir} -mk-build-deps -ir -t "apt-get -o Debug::pkgProblemResolver=yes -y" - -# Build package -debuild --no-lintian -eINSTALLATION_DIR="${directory_base}" -eVERSION="${version}" -eREVISION="${revision}" -b -uc -us - -deb_file="${target}_${version}-${revision}_${architecture}.deb" - -cd ${pkg_path} && sha512sum ${deb_file} > /tmp/${deb_file}.sha512 - -mv ${pkg_path}/${deb_file} /tmp/ diff --git a/stack/indexer/deb/debian/changelog b/stack/indexer/deb/debian/changelog deleted file mode 100644 index e945a75f23..0000000000 --- a/stack/indexer/deb/debian/changelog +++ /dev/null @@ -1,197 +0,0 @@ -wazuh-indexer (4.9.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html - - -- Wazuh, Inc Thu, 15 Aug 2024 00:00:00 +0000 - -wazuh-indexer (4.8.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html - - -- Wazuh, Inc Thu, 18 Jul 2024 00:00:00 +0000 - -wazuh-indexer (4.8.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html - - -- Wazuh, Inc Wed, 12 Jun 2024 00:00:00 +0000 - -wazuh-indexer (4.7.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html - - -- Wazuh, Inc Thu, 30 May 2024 00:00:00 +0000 - -wazuh-indexer (4.7.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html - - -- Wazuh, Inc Thu, 25 Apr 2024 00:00:00 +0000 - -wazuh-indexer (4.7.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html - - -- Wazuh, Inc Tue, 27 Feb 2024 00:00:00 +0000 - -wazuh-indexer (4.7.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html - - -- Wazuh, Inc Tue, 09 Jan 2024 00:00:00 +0000 - -wazuh-indexer (4.7.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html - - -- Wazuh, Inc Wed, 13 Dec 2023 00:00:00 +0000 - -wazuh-indexer (4.7.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html - - -- Wazuh, Inc Tue, 05 Nov 2023 00:00:00 +0000 - -wazuh-indexer (4.6.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html - - -- Wazuh, Inc Tue, 31 Oct 2023 00:00:00 +0000 - -wazuh-indexer (4.5.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html - - -- Wazuh, Inc Tue, 24 Oct 2023 00:00:00 +0000 - -wazuh-indexer (4.5.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html - - -- Wazuh, Inc Tue, 10 Oct 2023 00:00:00 +0000 - -wazuh-indexer (4.5.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html - - -- Wazuh, Inc Thu, 31 Aug 2023 00:00:00 +0000 - -wazuh-indexer (4.5.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-1.html - - -- Wazuh, Inc Thu, 24 Aug 2023 15:56:43 +0000 - -wazuh-indexer (4.5.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html - - -- Wazuh, Inc Thu, 10 Aug 2023 15:56:43 +0000 - -wazuh-indexer (4.4.5-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html - - -- Wazuh, Inc Mon, 10 Jul 2023 12:31:50 +0000 - -wazuh-indexer (4.4.4-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html - - -- Wazuh, Inc Tue, 13 Jun 2023 12:31:50 +0000 - -wazuh-indexer (4.4.3-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html - - -- Wazuh, Inc Thu, 25 May 2023 12:31:50 +0000 - -wazuh-indexer (4.4.2-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html - - -- Wazuh, Inc Mon, 24 Apr 2023 12:31:50 +0000 - -wazuh-indexer (4.4.1-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html - - -- Wazuh, Inc Mon, 17 Apr 2023 12:31:50 +0000 - -wazuh-indexer (4.4.0-RELEASE) stable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html - - -- Wazuh, Inc Wed, 18 Jan 2023 12:31:50 +0000 - -wazuh-indexer (4.3.10-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html - - -- Wazuh, Inc Thu, 10 Nov 2022 15:00:00 +0000 - -wazuh-indexer (4.3.9-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html - - -- Wazuh, Inc Mon, 03 Oct 2022 15:00:00 +0000 - -wazuh-indexer (4.3.8-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html - - -- Wazuh, Inc Mon, 19 Sep 2022 15:00:00 +0000 - -wazuh-indexer (4.3.7-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html - - -- Wazuh, Inc Mon, 08 Aug 2022 15:00:00 +0000 - -wazuh-indexer (4.3.6-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html - - -- Wazuh, Inc Thu, 07 Jul 2022 15:00:00 +0000 - -wazuh-indexer (4.3.5-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html - - -- Wazuh, Inc Wed, 29 Jun 2022 15:00:00 +0000 - -wazuh-indexer (4.3.4-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html - - -- Wazuh, Inc Tue, 07 Jun 2022 15:41:39 +0000 - -wazuh-indexer (4.3.3-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html - - -- Wazuh, Inc Tue, 31 May 2022 15:41:39 +0000 - -wazuh-indexer (4.3.2-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html - - -- Wazuh, Inc Mon, 30 May 2022 15:41:39 +0000 - -wazuh-indexer (4.3.1-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html - - -- Wazuh, Inc Wed, 18 May 2022 12:14:41 +0000 - -wazuh-indexer (4.3.0-RELEASE) unstable; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html - - -- Wazuh, Inc Thu, 05 May 2022 12:15:57 +0000 - - wazuh-indexer (4.2.5-1) UNRELEASED; urgency=low - - * More info: https://documentation.wazuh.com/current/release-notes/ - - -- Wazuh, Inc Mon, 15 Nov 2021 16:47:07 +0000 diff --git a/stack/indexer/deb/debian/compat b/stack/indexer/deb/debian/compat deleted file mode 100644 index 301160a930..0000000000 --- a/stack/indexer/deb/debian/compat +++ /dev/null @@ -1 +0,0 @@ -8 \ No newline at end of file diff --git a/stack/indexer/deb/debian/control b/stack/indexer/deb/debian/control deleted file mode 100644 index a2d853cfee..0000000000 --- a/stack/indexer/deb/debian/control +++ /dev/null @@ -1,15 +0,0 @@ -Source: wazuh-indexer -Section: admin -Priority: extra -Maintainer: Wazuh, Inc -Build-Depends: debhelper (>=9) -Standards-Version: 4.0.0 -Homepage: https://www.wazuh.com - -Package: wazuh-indexer -Architecture: any -Depends: ${shlibs:Depends}, debconf, adduser, procps -Description: Wazuh indexer is a near real-time full-text search and analytics engine that gathers security-related data into one platform. - This Wazuh central component indexes and stores alerts generated by the Wazuh server. - Wazuh indexer can be configured as a single-node or multi-node cluster, providing scalability and high availability. - Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-indexer.html diff --git a/stack/indexer/deb/debian/copyright b/stack/indexer/deb/debian/copyright deleted file mode 100644 index 4ec03228c1..0000000000 --- a/stack/indexer/deb/debian/copyright +++ /dev/null @@ -1,22 +0,0 @@ -This work was packaged for Debian by: - - Wazuh, Inc on Thu, 15 Aug 2024 00:00:00 +0000 - -It was downloaded from: - - https://www.wazuh.com - -Copyright: - - GNU General Public License version 2. - -License: - - GNU General Public License version 2. - -The Debian packaging is: - - Copyright (C) 2021 Wazuh, Inc - -and is licensed under the GPL version 2, -see "/usr/share/common-licenses/GPL-2". diff --git a/stack/indexer/deb/debian/postinst b/stack/indexer/deb/debian/postinst deleted file mode 100644 index 0972bec1d9..0000000000 --- a/stack/indexer/deb/debian/postinst +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh -# postinst script for Wazuh-indexer -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -#DEBHELPER# - -export NAME=wazuh-indexer -export USER=${NAME} -export GROUP=${NAME} -export CONFIG_DIR=/etc/${NAME} -export INSTALLATION_DIR=/usr/share/${NAME} -export BACKUP_DIR="${CONFIG_DIR}/upgrade_backup" -export LOG_DIR=/var/log/${NAME} -export PID_DIR=/run/${NAME} -export LIB_DIR=/var/lib/${NAME} -export SYS_DIR=/usr/lib - -set -e - -# -# This script is executed in the post-installation phase -# -# On Debian, -# $1=configure : is set to 'configure' and if $2 is set, it is an upgrade - -# Source the default env file -if [ -f "/etc/default/wazuh-indexer" ]; then - . "/etc/default/wazuh-indexer" -fi - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-${CONFIG_DIR}} - -if [ -d /run/systemd/system ]; then - rm -f /etc/init.d/wazuh-indexer -fi - -# To pick up /usr/lib/sysctl.d/wazuh-indexer.conf -if command -v systemctl > /dev/null 2>&1; then - systemctl restart systemd-sysctl.service > /dev/null 2>&1 || true -fi - -case "$1" in - configure) - # The codeblock below is using the fact that postinst script is called with the most-recently configured version. - # In other words, a fresh installed will be called like "postinst configure" with no previous version ($2 is null) - if [ -z "$2" ]; then - # If $2 is null, this is an install - - # Setting owner and group - chown -R ${USER}:${GROUP} ${CONFIG_DIR} - chown -R ${USER}:${GROUP} ${INSTALLATION_DIR} - chown -R ${USER}:${GROUP} ${LOG_DIR} - - # Prepare the RCA reader process for execution - mkdir -p "/var/lib/wazuh-indexer" - echo 'true' > ${LIB_DIR}/performance_analyzer_enabled.conf - echo 'true' > ${LIB_DIR}/rca_enabled.conf - # This is needed by the performance-analyzer service - echo 'false' > ${LIB_DIR}/batch_metrics_enabled.conf - chown ${USER}:${GROUP} ${LIB_DIR}/performance_analyzer_enabled.conf - chown ${USER}:${GROUP} ${LIB_DIR}/rca_enabled.conf - chown ${USER}:${GROUP} ${LIB_DIR}/batch_metrics_enabled.conf - chown ${USER}:${GROUP} ${LIB_DIR} - - # --------------------------------------------------------------------------- - - # Setting performance analyzer options - CLK_TCK=$(getconf CLK_TCK) - echo >> /etc/wazuh-indexer/jvm.options - echo '## OpenDistro Performance Analyzer' >> /etc/wazuh-indexer/jvm.options - echo "-Dclk.tck=$CLK_TCK" >> /etc/wazuh-indexer/jvm.options - echo "-Djdk.attach.allowAttachSelf=true" >> /etc/wazuh-indexer/jvm.options - echo "-Djava.security.policy=file:///usr/share/wazuh-indexer/plugins/opendistro-performance-analyzer/pa_config/es_security.policy" >> /etc/wazuh-indexer/jvm.options - - # --------------------------------------------------------------------------- - - # Setting Indexer default configuration - echo "${USER} hard nproc 4096" >> /etc/security/limits.conf - echo "${USER} soft nproc 4096" >> /etc/security/limits.conf - echo "${USER} hard nofile 65535" >> /etc/security/limits.conf - echo "${USER} soft nofile 65535" >> /etc/security/limits.conf - - else # Otherwise it is an upgrade - - # If the backup of securityconfig files is done (4.3.x), restore them - if [ -d "${BACKUP_DIR}/securityconfig" ]; then - cp "${BACKUP_DIR}"/securityconfig/* "${CONFIG_DIR}/opensearch-security" - rm -rf "${BACKUP_DIR}" - fi - - if [ -f "${INSTALLATION_DIR}/${NAME}.restart" ]; then - echo -n "Restarting wazuh-indexer service..." - rm -f "${INSTALLATION_DIR}/${NAME}.restart" - if command -v systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-indexer.service > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1; then - service wazuh-indexer restart > /dev/null 2>&1 - - elif [ -x /etc/init.d/wazuh-indexer ]; then - if command -v invoke-rc.d >/dev/null; then - invoke-rc.d wazuh-indexer restart > /dev/null 2>&1 - else - /etc/init.d/wazuh-indexer restart > /dev/null 2>&1 - fi - elif [ -x /etc/rc.d/init.d/wazuh-indexer ]; then - /etc/rc.d/init.d/wazuh-indexer restart > /dev/null 2>&1 - fi - echo " OK" - fi - fi - - if [ ! -f "${CONFIG_DIR}"/opensearch.keystore ]; then - "${INSTALLATION_DIR}"/bin/opensearch-keystore create - chown "${USER}:${GROUP}" "${CONFIG_DIR}"/opensearch.keystore - chmod 660 "${CONFIG_DIR}"/opensearch.keystore - md5sum "${CONFIG_DIR}"/opensearch.keystore > "${CONFIG_DIR}"/.opensearch.keystore.initial_md5sum - chown "${USER}:${GROUP}" "${CONFIG_DIR}"/.opensearch.keystore.initial_md5sum - chmod 600 "${CONFIG_DIR}"/.opensearch.keystore.initial_md5sum - else - chown "${USER}:${GROUP}" "${CONFIG_DIR}"/opensearch.keystore - chmod 660 "${CONFIG_DIR}"/opensearch.keystore - if "${INSTALLATION_DIR}"/bin/opensearch-keystore has-passwd --silent ; then - echo "### Warning: unable to upgrade encrypted keystore" 1>&2 - echo " Please run opensearch-keystore upgrade and enter password" 1>&2 - else - "${INSTALLATION_DIR}"/bin/opensearch-keystore upgrade - fi - fi - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - - ;; - - *) - echo "pre remove script called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac \ No newline at end of file diff --git a/stack/indexer/deb/debian/postrm b/stack/indexer/deb/debian/postrm deleted file mode 100644 index f3a64a2983..0000000000 --- a/stack/indexer/deb/debian/postrm +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/sh -# postinst script for Wazuh-indexer -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export NAME=wazuh-indexer -export CONFIG_DIR="/etc/${NAME}" -export INSTALLATION_DIR="/usr/share/${NAME}" -export PID_DIR="/run/${NAME}" -export LOG_DIR="/var/log/${NAME}" - -# -# This script is executed in the post-removal phase -# -# On Debian, -# $1=remove : indicates a removal -# $1=purge : indicates an upgrade - -# Source the default env file -if [ -f "/etc/default/${NAME}" ]; then - . "/etc/default/${NAME}" -fi - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-${CONFIG_DIR}} - -REMOVE_DIRS=false -REMOVE_CONFIG_DIRECTORY=false -REMOVE_USER_AND_GROUP=false - -case "$1" in - - # Debian #################################################### - remove) - REMOVE_DIRS=true - ;; - - purge) - REMOVE_DIRS=true - REMOVE_CONFIG_DIRECTORY=true - REMOVE_USER_AND_GROUP=true - ;; - - failed-upgrade|abort-install|abort-upgrade|upgrade|disappear) - ;; - - *) - echo "post remove script called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -if [ "$REMOVE_DIRS" = "true" ]; then - if [ -d "${INSTALLATION_DIR}" ]; then - echo -n "Deleting installation directory..." - rm -rf "${INSTALLATION_DIR}" > /dev/null 2>&1 - echo " OK" - fi - - if [ -d "${PID_DIR}" ]; then - echo -n "Deleting PID directory..." - rm -rf "${PID_DIR}" > /dev/null 2>&1 - echo " OK" - fi - - # Delete the config directory if we are purging - if [ "$REMOVE_CONFIG_DIRECTORY" = "true" ]; then - echo -n "Deleting configuration directory..." - rm -rf "${CONFIG_DIR}" > /dev/null 2>&1 - echo " OK" - fi - - # Delete the data directory if and only if empty - if [ -d "${LOG_DIR}" ]; then - rmdir --ignore-fail-on-non-empty "${LOG_DIR}" - fi - - # Delete performanceanalyzer directory - if [ -d "/dev/shm/performanceanalyzer" ]; then - rm -rf "/dev/shm/performanceanalyzer" > /dev/null 2>&1 - fi -fi - - -if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then - # Remove the user if it exists - if getent passwd "${NAME}" > /dev/null 2>&1; then - userdel "${NAME}" > /dev/null 2>&1 - fi - - # Remove the group if it exists - if command -v getent > /dev/null 2>&1 && getent group "${NAME}" > /dev/null 2>&1; then - groupdel "${NAME}" > /dev/null 2>&1 - elif getent group "${NAME}" > /dev/null 2>&1; then - groupdel "${NAME}" > /dev/null 2>&1 - fi -fi - diff --git a/stack/indexer/deb/debian/preinst b/stack/indexer/deb/debian/preinst deleted file mode 100644 index 310e6367ac..0000000000 --- a/stack/indexer/deb/debian/preinst +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# postinst script for Wazuh-indexer -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export NAME=wazuh-indexer -export CONFIG_DIR="/etc/${NAME}" -export BACKUP_DIR="${CONFIG_DIR}/upgrade_backup" -export INSTALLATION_DIR="/usr/share/${NAME}" - -# -# This script is executed in the pre-installation phase -# -# On Debian, -# $1=install : indicates an new install -# $1=upgrade : indicates an upgrade - -err_exit() { - echo "$@" >&2 - exit 1 -} - -# Source the default env file -if [ -f "/etc/default/wazuh-indexer" ]; then - . "/etc/default/wazuh-indexer" -fi - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-${CONFIG_DIR}} - -case "$1" in - - # Debian #################################################### - install) - - # Create wazuh-indexer group if not existing - if ! getent group ${NAME} > /dev/null 2>&1 ; then - echo -n "Creating ${NAME} group..." - addgroup --quiet --system ${NAME} - echo " OK" - fi - - # Create wazuh-indexer user if not existing - if ! id ${NAME} > /dev/null 2>&1 ; then - echo -n "Creating ${NAME} user..." - adduser --quiet \ - --system \ - --no-create-home \ - --home /nonexistent \ - --ingroup ${NAME} \ - --disabled-password \ - --shell /bin/false \ - ${NAME} - echo " OK" - fi - ;; - - upgrade) - # Move the securityconfig files if they exist (4.3.x versions) - if [ -d "${INSTALLATION_DIR}/plugins/opensearch-security/securityconfig" ]; then - mkdir "${BACKUP_DIR}" - cp -r "${INSTALLATION_DIR}/plugins/opensearch-security/securityconfig/" "${BACKUP_DIR}" - fi - - # Stop the services to upgrade - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet "${NAME}" > /dev/null 2>&1; then - systemctl stop "${NAME}".service > /dev/null 2>&1 - touch "${INSTALLATION_DIR}/${NAME}.restart" - # Check for SysV - elif command -v service > /dev/null 2>&1 && service "${NAME}" status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service "${NAME}" stop > /dev/null 2>&1 - touch "${INSTALLATION_DIR}/${NAME}.restart" - elif [ -x /etc/init.d/wazuh-indexer ]; then - if command -v invoke-rc.d >/dev/null && invoke-rc.d --quiet wazuh-indexer status > /dev/null 2>&1; then - invoke-rc.d wazuh-indexer stop > /dev/null 2>&1 - touch "${INSTALLATION_DIR}/${NAME}.restart" - fi - elif [ -x /etc/rc.d/init.d/wazuh-indexer ] ; then - /etc/rc.d/init.d/wazuh-indexer stop > /dev/null 2>&1 - touch "${INSTALLATION_DIR}/${NAME}.restart" - fi - ;; - - abort-deconfigure|abort-upgrade|abort-remove) - ;; - - *) - err_exit "pre install script called with unknown argument \`$1'" - ;; -esac - diff --git a/stack/indexer/deb/debian/prerm b/stack/indexer/deb/debian/prerm deleted file mode 100644 index 863ddabea2..0000000000 --- a/stack/indexer/deb/debian/prerm +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# postinst script for Wazuh-indexer -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -export CONFIG_DIR=/etc/wazuh-indexer - -# -# This script is executed in the pre-remove phase -# -# On Debian, -# $1=remove : indicates a removal -# $1=upgrade : indicates an upgrade - -# Source the default env file -if [ -f "/etc/default/wazuh-indexer" ]; then - . "/etc/default/wazuh-indexer" -fi - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-${CONFIG_DIR}} - -STOP_REQUIRED=false -REMOVE_SERVICE=false - -case "$1" in - - # Debian #################################################### - remove|purge) - STOP_REQUIRED=true - REMOVE_SERVICE=true - ;; - - upgrade|deconfigure|failed-upgrade) - ;; - - *) - echo "pre remove script called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -# Stops the service -if [ "$STOP_REQUIRED" = "true" ]; then - echo -n "Stopping wazuh-indexer service..." - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet wazuh-indexer > /dev/null 2>&1; then - systemctl --no-reload stop wazuh-indexer.service > /dev/null 2>&1 - - # Check for SysV - elif command -v service > /dev/null 2>&1 && service wazuh-indexer status 2>/dev/null | grep "running" > /dev/null 2>&1; then - service wazuh-indexer stop > /dev/null 2>&1 - - elif [ -x /etc/init.d/wazuh-indexer ]; then - if command -v invoke-rc.d >/dev/null; then - invoke-rc.d wazuh-indexer stop > /dev/null 2>&1 - else - /etc/init.d/wazuh-indexer stop > /dev/null 2>&1 - fi - - # Older Suse linux distributions do not ship with systemd - # but do not have an /etc/init.d/ directory - # this tries to stop the wazuh-indexer service on these - # as well without failing this script - elif [ -x /etc/rc.d/init.d/wazuh-indexer ] ; then - /etc/rc.d/init.d/wazuh-indexer stop > /dev/null 2>&1 - else # Anything else - kill -15 `pgrep -f opensearch` > /dev/null 2>&1 || true - fi - echo " OK" -fi - -if [ "$REMOVE_SERVICE" = "true" ]; then - if command -v systemctl >/dev/null; then - systemctl disable wazuh-indexer.service > /dev/null 2>&1 || true - fi - - if command -v chkconfig >/dev/null; then - chkconfig --del wazuh-indexer 2> /dev/null || true - fi - - if command -v update-rc.d >/dev/null; then - update-rc.d wazuh-indexer remove >/dev/null || true - fi -fi diff --git a/stack/indexer/deb/debian/rules b/stack/indexer/deb/debian/rules deleted file mode 100644 index e0127c10ba..0000000000 --- a/stack/indexer/deb/debian/rules +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. -# -# Modified to make a template file for a multi-binary package with separated -# build-arch and build-indep targets by Bill Allombert 2001 -# -# Modified by Wazuh -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -# Uncomment this to turn on verbose mode. -export DH_VERBOSE=1 - -# This has to be exported to make some magic below work. -export DH_OPTIONS - -export NAME=wazuh-indexer -export TARGET_DIR=${CURDIR}/debian/${NAME} - -# Package build options -export USER=${NAME} -export GROUP=${NAME} -export CONFIG_DIR=/etc/${NAME} -export LOG_DIR=/var/log/${NAME} -export LIB_DIR=/var/lib/${NAME} -export PID_DIR=/run/${NAME} -export SYS_DIR=/usr/lib -export BASE_DIR=${NAME}-* -export INDEXER_FILE=wazuh-indexer-base-$(VERSION)-$(REVISION)-linux-x64.tar.xz -export REPO_DIR=/root/unattended_installer - -# ----------------------------------------------------------------------------- - -%: - dh $@ - -# ----------------------------------------------------------------------------- - -override_dh_shlibdeps: - -# ----------------------------------------------------------------------------- - -override_dh_auto_configure: - -# ----------------------------------------------------------------------------- - -override_dh_auto_install: - -# ----------------------------------------------------------------------------- - -override_dh_install: - rm -rf $(INSTALLATION_DIR)/ - cp /tmp/$(INDEXER_FILE) ./ - - tar -xf $(INDEXER_FILE) - - # Copy to the target - mkdir -p $(TARGET_DIR)$(INSTALLATION_DIR) - mkdir -p $(TARGET_DIR)$(CONFIG_DIR) - mkdir -p $(TARGET_DIR)$(LIB_DIR) - mkdir -p $(TARGET_DIR)$(LOG_DIR) - mkdir -p $(TARGET_DIR)/etc/init.d - mkdir -p $(TARGET_DIR)/etc/default - mkdir -p $(TARGET_DIR)/usr/lib/tmpfiles.d - mkdir -p $(TARGET_DIR)/usr/lib/sysctl.d - mkdir -p $(TARGET_DIR)/usr/lib/systemd/system - - # Move configuration files for wazuh-indexer - mv -f $(BASE_DIR)/etc/init.d/$(NAME) $(TARGET_DIR)/etc/init.d/$(NAME) - mv -f $(BASE_DIR)/etc/wazuh-indexer/* $(TARGET_DIR)$(CONFIG_DIR) - mv -f $(BASE_DIR)/etc/sysconfig/$(NAME) $(TARGET_DIR)/etc/default/ - mv -f $(BASE_DIR)/usr/lib/tmpfiles.d/* $(TARGET_DIR)/usr/lib/tmpfiles.d/ - mv -f $(BASE_DIR)/usr/lib/sysctl.d/* $(TARGET_DIR)/usr/lib/sysctl.d/ - mv -f $(BASE_DIR)/usr/lib/systemd/system/* $(TARGET_DIR)/usr/lib/systemd/system/ - rm -rf $(BASE_DIR)/etc - rm -rf $(BASE_DIR)/usr - - # Copy installation files to final location - cp -pr $(BASE_DIR)/* $(TARGET_DIR)$(INSTALLATION_DIR) - - # Build wazuh-certs-tool - $(REPO_DIR)/builder.sh -c - - # Build wazuh-passwords-tool - $(REPO_DIR)/builder.sh -p - - # Copy the security tools - cp $(REPO_DIR)/wazuh-certs-tool.sh $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/ - cp $(REPO_DIR)/wazuh-passwords-tool.sh $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/ - cp /root/documentation-templates/wazuh/config.yml $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/config.yml - - # Copy Wazuh's config files for the security plugin - cp -pr $(REPO_DIR)/config/indexer/roles/roles_mapping.yml $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/ - cp -pr $(REPO_DIR)/config/indexer/roles/roles.yml $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/ - cp -pr $(REPO_DIR)/config/indexer/roles/internal_users.yml $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/ - - cp /root/stack/indexer/indexer-security-init.sh $(TARGET_DIR)$(INSTALLATION_DIR)/bin/ - - # Create group and user in chroot environment - groupadd -r $(GROUP) - useradd --system \ - --no-create-home \ - --home-dir /nonexistent \ - --gid $(GROUP) \ - --shell /sbin/nologin \ - --comment "$(USER) user" \ - $(USER) - - chown $(USER):$(GROUP) -R $(TARGET_DIR) - chmod ug+x $(TARGET_DIR)$(INSTALLATION_DIR)/* - - chown $(USER):$(GROUP) $(TARGET_DIR)$(INSTALLATION_DIR)/VERSION - chmod 440 $(TARGET_DIR)$(INSTALLATION_DIR)/VERSION - -# ----------------------------------------------------------------------------- - -override_dh_fixperms: - - # Set files permissions - chmod 750 $(TARGET_DIR)$(CONFIG_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(CONFIG_DIR) - chmod 750 $(TARGET_DIR)$(LIB_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(LIB_DIR) - chmod 750 $(TARGET_DIR)$(LOG_DIR) - chown -R $(USER):$(GROUP) $(TARGET_DIR)$(LOG_DIR) - - - chmod 660 $(TARGET_DIR)/etc/default/$(NAME) - chown root:$(GROUP) $(TARGET_DIR)/etc/default/$(NAME) - chmod 750 $(TARGET_DIR)/etc/init.d/$(NAME) - chown root:root $(TARGET_DIR)/etc/init.d/$(NAME) - chmod 640 $(TARGET_DIR)$(SYS_DIR)/sysctl.d/$(NAME).conf - chown root:root $(TARGET_DIR)$(SYS_DIR)/sysctl.d/$(NAME).conf - chmod 640 $(TARGET_DIR)$(SYS_DIR)/systemd/system/$(NAME).service - chown root:root $(TARGET_DIR)$(SYS_DIR)/systemd/system/$(NAME).service - chmod 640 $(TARGET_DIR)$(SYS_DIR)/systemd/system/$(NAME)-performance-analyzer.service - chown root:root $(TARGET_DIR)$(SYS_DIR)/systemd/system/$(NAME)-performance-analyzer.service - chmod 640 $(TARGET_DIR)$(SYS_DIR)/tmpfiles.d/$(NAME).conf - chown root:root $(TARGET_DIR)$(SYS_DIR)/tmpfiles.d/$(NAME).conf - - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR) - chmod 660 $(TARGET_DIR)$(CONFIG_DIR)/jvm.options - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR)/modules/aggs-matrix-stats - chmod 660 $(TARGET_DIR)$(CONFIG_DIR)/opensearch.yml - chmod 640 $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/roles_mapping.yml - chmod 640 $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/internal_users.yml - chmod 640 $(TARGET_DIR)$(CONFIG_DIR)/opensearch-security/roles.yml - chmod 750 $(TARGET_DIR)$(CONFIG_DIR)/jvm.options.d - chmod 440 $(TARGET_DIR)$(INSTALLATION_DIR)/VERSION - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR)/bin/indexer-security-init.sh - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR)/bin/systemd-entrypoint - chmod 740 $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/audit_config_migrater.sh - chmod 740 $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/hash.sh - chmod 740 $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/securityadmin.sh - chmod 740 $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/wazuh-certs-tool.sh - chmod 740 $(TARGET_DIR)$(INSTALLATION_DIR)/plugins/opensearch-security/tools/wazuh-passwords-tool.sh - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-performance-analyzer/performance-analyzer-agent-cli - chmod 750 $(TARGET_DIR)$(INSTALLATION_DIR)/bin/opensearch-performance-analyzer/performance-analyzer-agent - - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type d -exec chmod 750 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 644 -exec chmod 640 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 664 -exec chmod 660 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 755 -exec chmod 750 {} \; - find "$(TARGET_DIR)$(INSTALLATION_DIR)" -type f -perm 744 -exec chmod 740 {} \; - -# ----------------------------------------------------------------------------- - -override_dh_strip: - dh_strip - -# ----------------------------------------------------------------------------- - -.PHONY: override_dh_strip override_dh_auto_clean override_dh_auto_build override_dh_auto_configure diff --git a/stack/indexer/deb/docker/amd64/Dockerfile b/stack/indexer/deb/docker/amd64/Dockerfile deleted file mode 100644 index b93d24c9c8..0000000000 --- a/stack/indexer/deb/docker/amd64/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM debian:8 - -ENV DEBIAN_FRONTEND noninteractive - -RUN echo 'Acquire::Check-Valid-Until "false";' >> /etc/apt/apt.conf && \ - echo "deb http://archive.debian.org/debian jessie contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security jessie/updates main" >> /etc/apt/sources.list - -RUN apt-get update && apt-get install -y --force-yes apt-utils && \ - apt-get install -y --force-yes \ - curl sudo wget expect gnupg build-essential \ - devscripts equivs selinux-basics procps gawk - -# Add the script to build the Debian package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/stack/indexer/indexer-security-init.sh b/stack/indexer/indexer-security-init.sh deleted file mode 100644 index 1704ecb5a2..0000000000 --- a/stack/indexer/indexer-security-init.sh +++ /dev/null @@ -1,189 +0,0 @@ -#!/bin/bash - -# Wazuh-indexer securityadmin wrapper -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CONFIG_PATH="/etc/wazuh-indexer" - -if [ ! -d "${CONFIG_PATH}" ]; then - echo "ERROR: it was not possible to find ${CONFIG_PATH}" - exit 1 -fi - -CONFIG_FILE="${CONFIG_PATH}/opensearch.yml" - -if [ ! -f "${CONFIG_FILE}" ]; then - echo "ERROR: it was not possible to find ${CONFIG_FILE}" - exit 1 -fi - -INSTALL_PATH="/usr/share/wazuh-indexer" - -if [ ! -d "${INSTALL_PATH}" ]; then - echo "ERROR: it was not possible to find ${INSTALL_PATH}" - exit 1 -fi - -HOST="" -OPTIONS="-icl -nhnv" -WAZUH_INDEXER_ROOT_CA="$(cat ${CONFIG_FILE} 2>&1 | grep http.pemtrustedcas | sed 's/.*: //' | tr -d "[\"\']")" -WAZUH_INDEXER_ADMIN_PATH="$(dirname "${WAZUH_INDEXER_ROOT_CA}" 2>&1)" -SECURITY_PATH="${INSTALL_PATH}/plugins/opensearch-security" -SECURITY_CONFIG_PATH="${CONFIG_PATH}/opensearch-security" - -# ----------------------------------------------------------------------------- - -trap ctrl_c INT - -clean(){ - - exit_code=$1 - indexer_process_id=$(pgrep -f wazuh-indexer -c) - if [ "${indexer_process_id}" -gt 1 ]; then - pkill -n -f wazuh-indexer - fi - exit "${exit_code}" - -} - -ctrl_c() { - clean 1 -} - -# ----------------------------------------------------------------------------- - -getNetworkHost() { - - HOST=$(grep -hr "network.host:" "${CONFIG_FILE}" 2>&1) - NH="network.host: " - HOST="${HOST//$NH}" - HOST=$(echo "${HOST}" | tr -d "[\"\']") - - isIP=$(echo "${HOST}" | grep -P "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$") - isDNS=$(echo "${HOST}" | grep -P "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$") - - # Allow to find ip with an interface - if [ -z "${isIP}" ] && [ -z "${isDNS}" ]; then - interface="${HOST//_}" - HOST=$(ip -o -4 addr list "${interface}" | awk '{print $4}' | cut -d/ -f1) - fi - - if [ "${HOST}" = "0.0.0.0" ]; then - HOST="127.0.0.1" - fi - - if [ -z "${HOST}" ]; then - echo "ERROR: network host not valid, check ${CONFIG_FILE}" - exit 1 - fi - -} - -# ----------------------------------------------------------------------------- -getPort() { - - PORT=$(grep -hr 'transport.tcp.port' "${CONFIG_FILE}" 2>&1) - if [ "${PORT}" ]; then - PORT=$(echo "${PORT}" | cut -d' ' -f2 | cut -d'-' -f1) - else - PORT="9200" - fi - PORT=$(echo "${PORT}" | tr -d "[\"\']") - -} -# ----------------------------------------------------------------------------- - -securityadmin() { - - if [ ! -d "${SECURITY_PATH}" ]; then - echo "ERROR: it was not possible to find ${SECURITY_PATH}" - exit 1 - elif [ ! -d "${INSTALL_PATH}/jdk" ]; then - echo "ERROR: it was not possible to find ${INSTALL_PATH}/jdk" - exit 1 - fi - - if [ -f "${WAZUH_INDEXER_ADMIN_PATH}/admin.pem" ] && [ -f "${WAZUH_INDEXER_ADMIN_PATH}/admin-key.pem" ] && [ -f "${WAZUH_INDEXER_ROOT_CA}" ]; then - OPENSEARCH_CONF_DIR="${CONFIG_PATH}" JAVA_HOME="${INSTALL_PATH}/jdk" runuser wazuh-indexer --shell="/bin/bash" --command="${SECURITY_PATH}/tools/securityadmin.sh -cd ${SECURITY_CONFIG_PATH} -cacert ${WAZUH_INDEXER_ROOT_CA} -cert ${WAZUH_INDEXER_ADMIN_PATH}/admin.pem -key ${WAZUH_INDEXER_ADMIN_PATH}/admin-key.pem -h ${HOST} -p ${PORT} ${OPTIONS}" - else - echo "ERROR: this tool try to find admin.pem and admin-key.pem in ${WAZUH_INDEXER_ADMIN_PATH} but it couldn't. In this case, you must run manually the Indexer security initializer by running the command: JAVA_HOME="/usr/share/wazuh-indexer/jdk" runuser wazuh-indexer --shell="/bin/bash" --command="/usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -cd /etc/wazuh-indexer/opensearch-security -cacert /path/to/root-ca.pem -cert /path/to/admin.pem -key /path/to/admin-key.pem -h ${HOST} -p ${PORT} ${OPTIONS}" replacing /path/to/ by your certificates path." - exit 1 - fi - -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -ho, --host [Optional] Target IP or DNS to configure security." - echo " -p, --port [Optional] wazuh-indexer security port." - echo " --options [Optional] Custom securityadmin options." - echo " -h, --help Show this help." - echo - exit "$1" -} - - -main() { - - getNetworkHost - getPort - - while [ -n "$1" ] - do - case "$1" in - "-h"|"--help") - help 0 - ;; - "-ho"|"--host") - if [ -n "$2" ]; then - HOST="$2" - HOST=$(echo "${HOST}" | tr -d "[\"\']") - isIP=$(echo "${2}" | grep -P "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$") - isDNS=$(echo "${2}" | grep -P "^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$") - if [[ -z "${isIP}" ]] && [[ -z "${isDNS}" ]]; then - echo "The given information does not match with an IP address or a DNS." - exit 1 - fi - shift 2 - else - help 1 - fi - ;; - "-p"|"--port") - if [ -n "$2" ]; then - PORT="$2" - PORT=$(echo "${PORT}" | tr -d "[\"\']") - if [[ -z $(echo "${2}" | grep -P "^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$") ]]; then - echo "The given information does not match with a valid PORT number." - exit 1 - fi - shift 2 - else - help 1 - fi - ;; - "--options") - if [ -n "$2" ]; then - OPTIONS="$2" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - securityadmin - -} - -main "$@" diff --git a/stack/indexer/rpm/build_package.sh b/stack/indexer/rpm/build_package.sh deleted file mode 100755 index 444c563979..0000000000 --- a/stack/indexer/rpm/build_package.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -current_path="$( cd $(dirname $0) ; pwd -P )" -architecture="x86_64" -outdir="${current_path}/output" -revision="1" -build_docker="yes" -rpm_x86_builder="rpm_indexer_builder_x86" -rpm_builder_dockerfile="${current_path}/docker" -future="no" -base_cmd="" -build_base="yes" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.gz,wazuh-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_rpm() { - container_name="$1" - dockerfile_path="$2" - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - if [ "${build_base}" == "yes" ];then - # Base generation - if [ "${future}" == "yes" ];then - base_cmd+="--future " - fi - if [ "${reference}" ];then - base_cmd+="--reference ${reference}" - fi - ../base/generate_base.sh -s ${outdir} -r ${revision} ${base_cmd} - else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat ${current_path}/../../../VERSION) - fi - basefile="${outdir}/wazuh-indexer-base-${version}-${revision}-linux-x64.tar.xz" - if ! test -f "${basefile}"; then - echo "Did not find expected Wazuh indexer base file: ${basefile} in output path. Exiting..." - exit 1 - fi - fi - - # Build the Docker image - if [[ ${build_docker} == "yes" ]]; then - docker build -t ${container_name} ${dockerfile_path} || return 1 - fi - - # Build the RPM package with a Docker container - volumes="-v ${outdir}/:/tmp:Z" - if [ "${reference}" ];then - docker run -t --rm ${volumes} \ - ${container_name} ${architecture} ${revision} \ - ${future} ${reference} || return 1 - else - docker run -t --rm ${volumes} \ - -v ${current_path}/../../..:/root:Z \ - ${container_name} ${architecture} \ - ${revision} ${future} || return 1 - fi - - echo "Package $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -build() { - build_name="" - file_path="" - if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="x86_64" - build_name="${rpm_x86_builder}" - file_path="${rpm_builder_dockerfile}/${architecture}" - else - echo "Invalid architecture. Choose: x86_64 (amd64 is accepted too)" - return 1 - fi - build_rpm ${build_name} ${file_path} || return 1 - - return 0 -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -a, --architecture [Optional] Target architecture of the package [x86_64]." - echo " -b, --build-base [Optional] Build a new base or use a existing one. By default, yes." - echo " -r, --revision [Optional] Package revision. By default: 1." - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " --reference [Optional] wazuh-packages branch to download SPECs, not used by default." - echo " --dont-build-docker [Optional] Locally built docker image will be used instead of generating a new one." - echo " --future [Optional] Build test future package 99.99.0 Used for development purposes." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - while [ -n "$1" ] - do - case "$1" in - "-h"|"--help") - help 0 - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - architecture="$2" - shift 2 - else - help 1 - fi - ;; - "-b"|"--build-base") - if [ -n "${2}" ]; then - build_base="${2}" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - revision="$2" - shift 2 - else - help 1 - fi - ;; - "--reference") - if [ -n "$2" ]; then - reference="$2" - shift 2 - else - help 1 - fi - ;; - "--dont-build-docker") - build_docker="no" - shift 1 - ;; - "--future") - future="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "$2" ]; then - outdir="$2" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - build || clean 1 - - clean 0 -} - -main "$@" diff --git a/stack/indexer/rpm/builder.sh b/stack/indexer/rpm/builder.sh deleted file mode 100755 index 412befe003..0000000000 --- a/stack/indexer/rpm/builder.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -set -x - -# Wazuh package builder -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -e - -# Script parameters to build the package -target="wazuh-indexer" -architecture=$1 -revision=$2 -future=$3 -reference=$4 -directory_base="/usr/share/wazuh-indexer" - -if [ -z "${revision}" ]; then - revision="1" -fi - -if [ "${future}" = "yes" ];then - version="99.99.0" -else - if [ "${reference}" ];then - version=$(curl -sL https://raw.githubusercontent.com/wazuh/wazuh-packages/${reference}/VERSION | cat) - else - version=$(cat /root/VERSION) - fi -fi - -# Build directories -build_dir=/build -rpm_build_dir=${build_dir}/rpmbuild -file_name="${target}-${version}-${revision}" -pkg_path="${rpm_build_dir}/RPMS/${architecture}" -rpm_file="${file_name}.${architecture}.rpm" -mkdir -p ${rpm_build_dir}/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} - -# Prepare the sources directory to build the source tar.gz -pkg_name=${target}-${version} -mkdir ${build_dir}/${pkg_name} - -# Including spec file -if [ "${reference}" ];then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${reference} | tar zx - cp ./wazuh*/stack/indexer/rpm/${target}.spec ${rpm_build_dir}/SPECS/${pkg_name}.spec - cp -r ./wazuh*/* /root/ -else - cp /root/stack/indexer/rpm/${target}.spec ${rpm_build_dir}/SPECS/${pkg_name}.spec -fi - -# Generating source tar.gz -cd ${build_dir} && tar czf "${rpm_build_dir}/SOURCES/${pkg_name}.tar.gz" "${pkg_name}" - -# Building RPM -/usr/bin/rpmbuild --define "_topdir ${rpm_build_dir}" --define "_version ${version}" \ - --define "_release ${revision}" --define "_localstatedir ${directory_base}" \ - --target ${architecture} -ba ${rpm_build_dir}/SPECS/${pkg_name}.spec - -cd ${pkg_path} && sha512sum ${rpm_file} > /tmp/${rpm_file}.sha512 - - -find ${pkg_path}/ -maxdepth 3 -type f -name "${file_name}*" -exec mv {} /tmp/ \; diff --git a/stack/indexer/rpm/docker/x86_64/Dockerfile b/stack/indexer/rpm/docker/x86_64/Dockerfile deleted file mode 100644 index 4c0588798c..0000000000 --- a/stack/indexer/rpm/docker/x86_64/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM rockylinux:8.5 - -# Install all the necessary tools to build the packages -RUN yum clean all && yum update -y -RUN yum install -y openssh-clients sudo gnupg \ - yum-utils epel-release redhat-rpm-config rpm-devel \ - zlib zlib-devel rpm-build - -# Add the scripts to build the RPM package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] \ No newline at end of file diff --git a/stack/indexer/rpm/wazuh-indexer.spec b/stack/indexer/rpm/wazuh-indexer.spec deleted file mode 100755 index 991c70fdae..0000000000 --- a/stack/indexer/rpm/wazuh-indexer.spec +++ /dev/null @@ -1,747 +0,0 @@ -# Wazuh package SPEC -# Copyright (C) 2021, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -Summary: Wazuh indexer is a search and analytics engine for security-related data. Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-indexer.html -Name: wazuh-indexer -Version: %{_version} -Release: %{_release} -License: GPL -Group: System Environment/Daemons -Source0: %{name}-%{version}.tar.gz -URL: https://www.wazuh.com/ -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -Vendor: Wazuh, Inc -Packager: Wazuh, Inc -AutoReqProv: no -Requires: coreutils -ExclusiveOS: linux -BuildRequires: tar shadow-utils - -# ----------------------------------------------------------------------------- - -%global USER %{name} -%global GROUP %{name} -%global CONFIG_DIR /etc/%{name} -%global LOG_DIR /var/log/%{name} -%global LIB_DIR /var/lib/%{name} -%global SYS_DIR /usr/lib -%global INSTALL_DIR /usr/share/%{name} -%global REPO_DIR /root/unattended_installer -%global INDEXER_FILE wazuh-indexer-base-%{version}-%{release}-linux-x64.tar.xz - -# ----------------------------------------------------------------------------- - -%description -Wazuh indexer is a near real-time full-text search and analytics engine that gathers security-related data into one platform. This Wazuh central component indexes and stores alerts generated by the Wazuh server. Wazuh indexer can be configured as a single-node or multi-node cluster, providing scalability and high availability. Documentation can be found at https://documentation.wazuh.com/current/getting-started/components/wazuh-indexer.html - -# ----------------------------------------------------------------------------- - -%prep -# Clean BUILDROOT -rm -fr %{buildroot} - -# Create package group -getent group %{GROUP} || groupadd -r %{GROUP} - -# Create package user -if ! id %{USER} &> /dev/null; then - useradd --system \ - --no-create-home \ - --home-dir %{INSTALL_DIR} \ - --gid %{GROUP} \ - --shell /sbin/nologin \ - --comment "%{USER} user" \ - %{USER} -fi - -# ----------------------------------------------------------------------------- - -%install -# Create directories -mkdir -p ${RPM_BUILD_ROOT}%{INSTALL_DIR} -mkdir -p ${RPM_BUILD_ROOT}/etc -mkdir -p ${RPM_BUILD_ROOT}%{LOG_DIR} -mkdir -p ${RPM_BUILD_ROOT}%{LIB_DIR} -mkdir -p ${RPM_BUILD_ROOT}%{SYS_DIR} - -# Set up required files -cp /tmp/%{INDEXER_FILE} ./ - -tar -xf %{INDEXER_FILE} && rm -f %{INDEXER_FILE} -chown -R %{USER}:%{GROUP} wazuh-indexer-*/* - -# Copy base files into RPM_BUILD_ROOT directory -mv wazuh-indexer-*/etc ${RPM_BUILD_ROOT}/ -mv wazuh-indexer-*%{SYS_DIR}/* ${RPM_BUILD_ROOT}%{SYS_DIR}/ -rm -rf wazuh-indexer-*/etc -rm -rf wazuh-indexer-*/usr -cp -pr wazuh-indexer-*/* ${RPM_BUILD_ROOT}%{INSTALL_DIR}/ - -# Build wazuh-certs-tool -%{REPO_DIR}/builder.sh -c - -# Build wazuh-passwords-tool -%{REPO_DIR}/builder.sh -p - -# Copy the security tools -cp %{REPO_DIR}/wazuh-certs-tool.sh ${RPM_BUILD_ROOT}%{INSTALL_DIR}/plugins/opensearch-security/tools/ -cp %{REPO_DIR}/wazuh-passwords-tool.sh ${RPM_BUILD_ROOT}%{INSTALL_DIR}/plugins/opensearch-security/tools/ -cp /root/documentation-templates/wazuh/config.yml ${RPM_BUILD_ROOT}%{INSTALL_DIR}/plugins/opensearch-security/tools/config.yml - -# Copy Wazuh's config files for the security plugin -cp %{REPO_DIR}/config/indexer/roles/internal_users.yml ${RPM_BUILD_ROOT}%{CONFIG_DIR}/opensearch-security -cp %{REPO_DIR}/config/indexer/roles/roles.yml ${RPM_BUILD_ROOT}%{CONFIG_DIR}/opensearch-security -cp %{REPO_DIR}/config/indexer/roles/roles_mapping.yml ${RPM_BUILD_ROOT}%{CONFIG_DIR}/opensearch-security - -cp /root/stack/indexer/indexer-security-init.sh ${RPM_BUILD_ROOT}%{INSTALL_DIR}/bin/ - -chmod 750 ${RPM_BUILD_ROOT}/etc/init.d/wazuh-indexer - -# ----------------------------------------------------------------------------- - -%pre -if [ $1 = 1 ];then # Install - # Create package group - getent group %{GROUP} > /dev/null 2>&1 || groupadd -r %{GROUP} - - if ! id %{USER} &> /dev/null; then - useradd --system \ - --no-create-home \ - --home-dir %{INSTALL_DIR} \ - --gid %{GROUP} \ - --shell /sbin/nologin \ - --comment "%{USER} user" \ - %{USER} > /dev/null 2>&1 - fi -fi - -# Stop the services to upgrade the package -if [ $1 = 2 ]; then - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1 && systemctl is-active --quiet %{name} > /dev/null 2>&1; then - systemctl stop %{name}.service > /dev/null 2>&1 - touch %{INSTALL_DIR}/%{name}.restart - # Check for SysV - elif command -v service > /dev/null 2>&1 && service %{name} status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - service %{name} stop > /dev/null 2>&1 - touch %{INSTALL_DIR}/%{name}.restart - elif [ -x /etc/init.d/%{name} ]; then - if command -v invoke-rc.d >/dev/null && invoke-rc.d --quiet wazuh-indexer status > /dev/null 2>&1; then - invoke-rc.d %{name} stop > /dev/null 2>&1 - touch %{INSTALL_DIR}/%{name}.restart - fi - - # Older Suse linux distributions do not ship with systemd - # but do not have an /etc/init.d/ directory - # this tries to stop the %{name} service on these - # as well without failing this script - elif [ -x /etc/rc.d/init.d/%{name} ] ; then - /etc/rc.d/init.d/%{name} stop > /dev/null 2>&1 - touch %{INSTALL_DIR}/%{name}.restart - fi -fi - -# ----------------------------------------------------------------------------- - -%post - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-%{CONFIG_DIR}} - -if [ $1 = 1 ];then # Install - echo "%{USER} hard nproc 4096" >> /etc/security/limits.conf - echo "%{USER} soft nproc 4096" >> /etc/security/limits.conf - echo "%{USER} hard nofile 65535" >> /etc/security/limits.conf - echo "%{USER} soft nofile 65535" >> /etc/security/limits.conf - - # To pick up /usr/lib/sysctl.d/wazuh-indexer.conf - if command -v systemctl > /dev/null 2>&1; then - systemctl restart systemd-sysctl > /dev/null 2>&1 || true - fi - -fi - - -if [[ -d /run/systemd/system ]] ; then - rm -f /etc/init.d/%{name} -fi - -# If is an upgrade, move the securityconfig files if they exist (4.3.x versions) -if [ ${1} = 2 ]; then - if [ -d "%{INSTALL_DIR}"/plugins/opensearch-security/securityconfig ]; then - - if [ ! -d "%{CONFIG_DIR}"/opensearch-security ]; then - mkdir "%{CONFIG_DIR}"/opensearch-security - fi - - cp -r "%{INSTALL_DIR}"/plugins/opensearch-security/securityconfig/* "%{CONFIG_DIR}"/opensearch-security - fi -fi - -# ----------------------------------------------------------------------------- - -%preun - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-%{CONFIG_DIR}} - -if [ $1 = 0 ];then # Remove - echo -n "Stopping wazuh-indexer service..." - if command -v systemctl > /dev/null 2>&1 && systemctl is-active --quiet %{name} > /dev/null 2>&1; then - systemctl --no-reload stop %{name}.service > /dev/null 2>&1 - - # Check for SysV - elif command -v service > /dev/null 2>&1; then - service %{name} stop > /dev/null 2>&1 - elif [ -x /etc/init.d/%{name} ]; then - if command -v invoke-rc.d >/dev/null; then - invoke-rc.d %{name} stop > /dev/null 2>&1 - else - /etc/init.d/%{name} stop > /dev/null 2>&1 - fi - elif [ -x /etc/rc.d/init.d/%{name} ] ; then - /etc/rc.d/init.d/%{name} stop > /dev/null 2>&1 - else # Anything else - kill -15 `pgrep -f opensearch` > /dev/null 2>&1 - fi - echo " OK" - - # Check for systemd - if command -v systemctl > /dev/null 2>&1 && systemctl > /dev/null 2>&1; then - systemctl disable %{name} > /dev/null 2>&1 - systemctl daemon-reload > /dev/null 2>&1 - # Check for SysV - elif command -v service > /dev/null 2>&1 && command -v chkconfig > /dev/null 2>&1; then - chkconfig %{name} off > /dev/null 2>&1 - chkconfig --del %{name} > /dev/null 2>&1 - fi -fi - -# ----------------------------------------------------------------------------- - -%postun - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-%{CONFIG_DIR}} - -if [ $1 = 0 ];then - # Cleaning limits file - sed -i '/%{USER}/d' /etc/security/limits.conf - - # Remove the user if it exists - if getent passwd %{USER} > /dev/null 2>&1; then - userdel %{USER} >/dev/null 2>&1 - fi - - # Remove the group if it exists - if command -v getent > /dev/null 2>&1 && getent group %{GROUP} > /dev/null 2>&1; then - groupdel %{GROUP} >/dev/null 2>&1 - elif getent group %{GROUP} > /dev/null 2>&1; then - groupdel %{GROUP} >/dev/null 2>&1 - fi - - # Remove lingering folders and files - if [ -d /dev/shm/performanceanalyzer ]; then - rm -rf /dev/shm/performanceanalyzer - fi - rm -rf %{INSTALL_DIR} -fi - -# ----------------------------------------------------------------------------- - -%posttrans - -export OPENSEARCH_PATH_CONF=${OPENSEARCH_PATH_CONF:-%{CONFIG_DIR}} - -if [ -f %{INSTALL_DIR}/%{name}.restart ]; then - echo -n "Starting wazuh-indexer service..." - rm -f %{INSTALL_DIR}/%{name}.restart - if command -v systemctl > /dev/null 2>&1; then - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart %{name}.service > /dev/null 2>&1 - - # Check for SysV - elif command -v service > /dev/null 2>&1; then - service %{name} restart > /dev/null 2>&1 - elif [ -x /etc/init.d/%{name} ]; then - if command -v invoke-rc.d >/dev/null; then - invoke-rc.d %{name} restart > /dev/null 2>&1 - else - /etc/init.d/%{name} restart > /dev/null 2>&1 - fi - elif [ -x /etc/rc.d/init.d/%{name} ] ; then - /etc/rc.d/init.d/%{name} restart > /dev/null 2>&1 - fi - echo " OK" -fi - -if [ ! -f "%{CONFIG_DIR}"/opensearch.keystore ]; then - "%{INSTALL_DIR}"/bin/opensearch-keystore create - chown %{USER}:%{GROUP} "%{CONFIG_DIR}"/opensearch.keystore - chmod 660 "%{CONFIG_DIR}"/opensearch.keystore - md5sum "%{CONFIG_DIR}"/opensearch.keystore > "%{CONFIG_DIR}"/.opensearch.keystore.initial_md5sum - chown %{USER}:%{GROUP} "%{CONFIG_DIR}"/.opensearch.keystore.initial_md5sum - chmod 600 "%{CONFIG_DIR}"/.opensearch.keystore.initial_md5sum -else - chown %{USER}:%{GROUP} "%{CONFIG_DIR}"/opensearch.keystore - chmod 660 "%{CONFIG_DIR}"/opensearch.keystore - if "%{INSTALL_DIR}"/bin/opensearch-keystore has-passwd --silent ; then - echo "### Warning: unable to upgrade encrypted keystore" 1>&2 - echo " Please run opensearch-keystore upgrade and enter password" 1>&2 - else - "%{INSTALL_DIR}"/bin/opensearch-keystore upgrade - fi -fi - -# ----------------------------------------------------------------------------- - -%clean -rm -fr %{buildroot} - -# ----------------------------------------------------------------------------- - -%files -%defattr(-, %{USER}, %{GROUP}) -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR} -%dir %attr(750, %{USER}, %{GROUP}) %{LIB_DIR} -%dir %attr(750, %{USER}, %{GROUP}) %{LOG_DIR} - -%config(noreplace) %attr(0660, root, %{GROUP}) "/etc/sysconfig/%{name}" - -%config(missingok) /etc/init.d/%{name} -%attr(0640, root, root) %{SYS_DIR}/sysctl.d/%{name}.conf -%attr(0640, root, root) %{SYS_DIR}/systemd/system/%{name}.service -%attr(0640, root, root) %{SYS_DIR}/systemd/system/%{name}-performance-analyzer.service -%attr(0640, root, root) %{SYS_DIR}/tmpfiles.d/%{name}.conf - - -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/*.txt -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-job-scheduler/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-job-scheduler/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-job-scheduler/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-ml/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-ml/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-ml/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-ml/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/*.jar -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/ -%attr(740, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/*.sh -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/*.md -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/*.yml -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-index-management/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-index-management/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-index-management/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-index-management/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-index-management/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-neural-search/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-neural-search/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-neural-search/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-neural-search/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-neural-search/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-asynchronous-search/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-asynchronous-search/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-asynchronous-search/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-asynchronous-search/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-alerting/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-alerting/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-alerting/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-alerting/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-sql/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-sql/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-sql/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-sql/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-sql/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-geospatial/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-geospatial/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-geospatial/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-geospatial/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-geospatial/*.policy -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-reports-scheduler/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-reports-scheduler/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-reports-scheduler/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-reports-scheduler/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-cross-cluster-replication/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-cross-cluster-replication/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-cross-cluster-replication/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-custom-codecs/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-custom-codecs/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-custom-codecs/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-custom-codecs/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-custom-codecs/*.policy -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/*.txt -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/lib/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/lib/*.so.1 -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-knn/lib/*.so -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-anomaly-detection/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-anomaly-detection/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-anomaly-detection/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-anomaly-detection/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications-core/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications-core/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications-core/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-notifications-core/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security-analytics/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security-analytics/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security-analytics/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security-analytics/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-observability/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-observability/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-observability/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-observability/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-performance-analyzer/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-performance-analyzer/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-performance-analyzer/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-performance-analyzer/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-common/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-common/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-common/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/repository-url/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/repository-url/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/repository-url/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/repository-url/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/percolator/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/percolator/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/percolator/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/search-pipeline-common/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/search-pipeline-common/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/search-pipeline-common/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/opensearch-dashboards/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/opensearch-dashboards/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/opensearch-dashboards/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-painless/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-painless/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-painless/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-painless/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/analysis-common/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/analysis-common/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/analysis-common/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/rank-eval/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/rank-eval/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/rank-eval/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/aggs-matrix-stats/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/aggs-matrix-stats/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/aggs-matrix-stats/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/geo/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/geo/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/geo/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/mapper-extras/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/mapper-extras/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/mapper-extras/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-user-agent/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-user-agent/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-user-agent/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/systemd/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/systemd/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/systemd/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/systemd/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/transport-netty4/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/transport-netty4/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/transport-netty4/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/transport-netty4/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/parent-join/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/parent-join/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/parent-join/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-mustache/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-mustache/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-mustache/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-mustache/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-geoip/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-geoip/*.mmdb -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-geoip/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-geoip/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/ingest-geoip/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/transport-netty4/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/transport-netty4/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/transport-netty4/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/parent-join/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/reindex/parent-join/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-expression/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-expression/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-expression/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/modules/lang-expression/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/upgrade-cli/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/upgrade-cli/*.jar -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/plugin-cli/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/plugin-cli/*.jar -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/keystore-cli/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/tools/keystore-cli/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/lib/*.jar -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/man/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/man/man1/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/man/man1/*.1 -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/jmods/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/jmods/*.jmod -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/NOTICE -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/include/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/include/*.h -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/include/linux/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/include/linux/*.h -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.cfg -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.so -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/jspawnhelper -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.properties.ja -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.dat -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.sym -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/classlist -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/*.jar -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/jexec -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/security/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/security/*.certs -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/security/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/security/cacerts -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/security/*.dat -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/modules -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/server/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/server/*.so -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/server/*.jsa -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/jfr/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/lib/jfr/*.jfc -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/bin/ -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/bin/* -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/release -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.instrument/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.net/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.crypto.cryptoki/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.crypto.cryptoki/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.security.auth/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.smartcardio/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.smartcardio/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.zipfs/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.localedata/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.localedata/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.prefs/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.dynalink/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.dynalink/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jpackage/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.management/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.jvmstat/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.xml.crypto/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.xml.crypto/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.net.http/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.unsupported/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.datatransfer/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jdi/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.incubator.vector/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.charsets/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.management.jfr/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.accessibility/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jartool/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.security.sasl/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.ed/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.editpad/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.httpserver/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.base/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.base/*.md -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.base/ASSEMBLY_EXCEPTION -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.base/ADDITIONAL_LICENSE_INFO -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.base/LICENSE -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jcmd/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.opt/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.opt/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.scripting/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.xml/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.xml/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jdeps/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jstatd/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.management.agent/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.random/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.sctp/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.sql/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.nio.mapmode/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.hotspot.agent/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.attach/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.naming/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.management/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.sql.rowset/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.rmi/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.vm.compiler/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.unsupported.desktop/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.logging/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.security.jgss/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.vm.compiler.management/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jfr/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.transaction.xa/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.crypto.ec/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.vm.ci/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.naming.rmi/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.xml.dom/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.le/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.internal.le/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jsobject/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jdwp.agent/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.se/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.compiler/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.incubator.foreign/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jshell/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.javadoc/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.javadoc/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.compiler/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.security.jgss/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jconsole/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.naming.dns/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.management.rmi/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.desktop/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/java.desktop/*.md -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/legal/jdk.jlink/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/*.security -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/limited/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/limited/*.policy -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/unlimited/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/unlimited/*.policy -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/security/policy/*.txt -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/sdp/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/sdp/*.template -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/management/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/management/*.access -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/management/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/jdk/conf/management/*.template -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-security/ -%config(noreplace) %attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-security/*.yml -%config(noreplace) %attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-security/*.example -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-notifications/ -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-notifications/*.yml -%config(noreplace) %attr(660, %{USER}, %{GROUP}) %{CONFIG_DIR}/jvm.options -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/jvm.options.d/ -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-reports-scheduler/ -%attr(660, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-reports-scheduler/*.yml -%config(noreplace) %attr(660, %{USER}, %{GROUP}) %{CONFIG_DIR}/*.properties -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-notifications-core/ -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-notifications-core/*.yml -%config(noreplace) %attr(660, %{USER}, %{GROUP}) %{CONFIG_DIR}/*.yml -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-observability/ -%attr(660, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-observability/*.yml -%dir %attr(750, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/ -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/agent-stats-metadata -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/*.conf -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/*.xml -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/*.properties -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/plugin-stats-metadata -%attr(640, %{USER}, %{GROUP}) %{CONFIG_DIR}/opensearch-performance-analyzer/*.policy -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/ -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/agent-stats-metadata -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/*.conf -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/*.xml -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/*.properties -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/plugin-stats-metadata -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/config/*.policy -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/lib/ -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/lib/*.jar -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/bin/ -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/bin/performance-analyzer-agent -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/performance-analyzer-rca/bin/performance-analyzer-rca -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/ -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-cli -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/systemd-entrypoint -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-upgrade -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-shard -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-plugin -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-node -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-env -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-env-from-file -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/indexer-security-init.sh -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-keystore -%dir %attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-performance-analyzer/ -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-performance-analyzer/performance-analyzer-agent-cli -%attr(750, %{USER}, %{GROUP}) %{INSTALL_DIR}/bin/opensearch-performance-analyzer/performance-analyzer-agent -%attr(440, %{USER}, %{GROUP}) %{INSTALL_DIR}/VERSION -%attr(640, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/config.yml -%attr(740, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/wazuh-certs-tool.sh -%attr(740, %{USER}, %{GROUP}) %{INSTALL_DIR}/plugins/opensearch-security/tools/wazuh-passwords-tool.sh - - -%changelog -* Thu Aug 15 2024 support - 4.9.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html -* Thu Jul 18 2024 support - 4.8.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html -* Wed Jun 12 2024 support - 4.8.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-0.html -* Thu May 30 2024 support - 4.7.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-5.html -* Thu Apr 25 2024 support - 4.7.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-4.html -* Tue Feb 27 2024 support - 4.7.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-3.html -* Tue Jan 09 2024 support - 4.7.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-2.html -* Wed Dec 13 2023 support - 4.7.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-1.html -* Tue Nov 21 2023 support - 4.7.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-7-0.html -* Tue Oct 31 2023 support - 4.6.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-6-0.html -* Tue Oct 24 2023 support - 4.5.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-4.html -* Tue Oct 10 2023 support - 4.5.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-3.html -* Thu Aug 31 2023 support - 4.5.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-2.html -* Thu Aug 24 2023 support - 4.5.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5.1.html -* Thu Aug 10 2023 support - 4.5.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-5-0.html -* Mon Jul 10 2023 support - 4.4.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-5.html -* Tue Jun 13 2023 support - 4.4.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-4.html -* Thu May 25 2023 support - 4.4.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-3.html -* Mon May 08 2023 support - 4.4.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-2.html -* Mon Apr 17 2023 support - 4.4.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-1.html -* Wed Jan 18 2023 support - 4.4.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-4-0.html -* Thu Nov 10 2022 support - 4.3.10 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-10.html -* Mon Oct 03 2022 support - 4.3.9 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-9.html -* Mon Sep 19 2022 support - 4.3.8 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-8.html -* Mon Aug 08 2022 support - 4.3.7 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-7.html -* Thu Jul 07 2022 support - 4.3.6 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-6.html -* Wed Jun 29 2022 support - 4.3.5 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-5.html -* Tue Jun 07 2022 support - 4.3.4 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-4.html -* Tue May 31 2022 support - 4.3.3 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-3.html -* Mon May 30 2022 support - 4.3.2 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-2.html -* Wed May 18 2022 support - 4.3.1 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-1.html -* Thu May 05 2022 support - 4.3.0 -- More info: https://documentation.wazuh.com/current/release-notes/release-4-3-0.html diff --git a/wazuhapp/kibana/Docker/Dockerfile b/wazuhapp/kibana/Docker/Dockerfile deleted file mode 100644 index 567ca7caf6..0000000000 --- a/wazuhapp/kibana/Docker/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM centos:8 - -RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* -RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-* - -# Install dependencies -RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting && \ - curl -sL https://rpm.nodesource.com/setup_10.x | bash - && \ - yum install nodejs git gcc gcc-c++ make sudo zip python3 -y && \ - alternatives --set python /usr/bin/python3 && \ - npm install -g n - -ADD build.sh / -RUN chmod +x /build.sh - -# Add the volumes -RUN mkdir /wazuh_app /source - -# Set the entrypoint/ -ENTRYPOINT ["/build.sh"] diff --git a/wazuhapp/kibana/Docker/build.sh b/wazuhapp/kibana/Docker/build.sh deleted file mode 100755 index 3da77df88c..0000000000 --- a/wazuhapp/kibana/Docker/build.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/bin/bash - -set -ex - -# Script parameters -wazuh_branch=$1 -checksum=$2 -app_revision=$3 - -# Paths -kibana_dir="/tmp/source" -source_dir="${kibana_dir}/plugins/wazuh" -build_dir="${source_dir}/build" -destination_dir="/wazuh_app" -checksum_dir="/var/local/checksum" -git_clone_tmp_dir="/tmp/wazuh-app" - -# Repositories URLs -wazuh_app_clone_repo_url="https://github.com/wazuh/wazuh-dashboard-plugins.git" -wazuh_app_raw_repo_url="https://raw.githubusercontent.com/wazuh/wazuh-dashboard-plugins" -kibana_app_repo_url="https://github.com/elastic/kibana.git" -kibana_app_raw_repo_url="https://raw.githubusercontent.com/elastic/kibana" -wazuh_app_package_json_url="${wazuh_app_raw_repo_url}/${wazuh_branch}/plugins/main/package.json" - -# Script vars -wazuh_version="" -kibana_version="" -kibana_yarn_version="" -kibana_node_version="" -aux_kibana_version="" - - -change_node_version () { - installed_node_version="$(node -v)" - node_version=$1 - - n ${node_version} - - if [[ "${installed_node_version}" != "v${node_version}" ]]; then - mv /usr/local/bin/node /usr/bin - mv /usr/local/bin/npm /usr/bin - mv /usr/local/bin/npx /usr/bin - fi - - echo "Using $(node -v) node version" -} - - -prepare_env() { - echo "Downloading package.json from wazuh-dashboard-plugins repository" - if ! curl $wazuh_app_package_json_url -o "/tmp/package.json" ; then - echo "Error downloading package.json from GitHub." - exit 1 - fi - - wazuh_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - print(pkg["version"])') - kibana_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - plugin_platform_version=pkg.get("pluginPlatform", {}).get("version") or pkg.get("kibana", {}).get("version");\ - print(plugin_platform_version)') - aux_kibana_version=$kibana_version - - if [ "${wazuh_version}" \< "4.2.2" ] && [ "${kibana_version}" \> "7.10.2" ]; then - aux_kibana_version="7.10.2" - fi - - kibana_package_json_url="${kibana_app_raw_repo_url}/v${aux_kibana_version}/package.json" - - echo "Downloading package.json from elastic/kibana repository" - if ! curl $kibana_package_json_url -o "/tmp/package.json" ; then - echo "Error downloading package.json from GitHub." - exit 1 - fi - - kibana_node_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - print(pkg["engines"]["node"])') - - kibana_yarn_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - print(pkg["engines"]["yarn"])') -} - - -download_kibana_sources() { - if ! git clone $kibana_app_repo_url --branch "v${aux_kibana_version}" --depth=1 kibana_source; then - echo "Error downloading Kibana source code from elastic/kibana GitHub repository." - exit 1 - fi - - mkdir -p kibana_source/plugins - mv kibana_source ${kibana_dir} -} - - -install_dependencies () { - cd ${kibana_dir} - change_node_version $kibana_node_version - npm install -g "yarn@${kibana_yarn_version}" - if [ "${aux_kibana_version}" \< "7.11.0" ]; then - sed -i 's/node scripts\/build_ts_refs/node scripts\/build_ts_refs --allow-root/' ${kibana_dir}/package.json - sed -i 's/node scripts\/register_git_hook/node scripts\/register_git_hook --allow-root/' ${kibana_dir}/package.json - fi - yarn kbn bootstrap --skip-kibana-plugins --oss #--allow-root -} - - -download_wazuh_app_sources() { - if ! git clone $wazuh_app_clone_repo_url --branch ${wazuh_branch} --depth=1 ${git_clone_tmp_dir} ; then - echo "Error downloading the source code from wazuh-dashboard-plugins GitHub repository." - exit 1 - fi - - cp -r ${git_clone_tmp_dir}/plugins/main ${kibana_dir}/plugins/wazuh -} - - -build_package(){ - - cd $source_dir - - # Set pkg name - if [ -z "${app_revision}" ]; then - wazuh_app_pkg_name="wazuh_kibana-${wazuh_version}_${kibana_version}.zip" - else - wazuh_app_pkg_name="wazuh_kibana-${wazuh_version}_${kibana_version}-${app_revision}.zip" - fi - - # Build the package - yarn - if [ "${aux_kibana_version}" \< "7.11.0" ]; then - KIBANA_VERSION=${kibana_version} yarn build --allow-root - else - KIBANA_VERSION=${kibana_version} yarn build - fi - - find ${build_dir} -name "*.zip" -exec mv {} ${destination_dir}/${wazuh_app_pkg_name} \; - - if [ "${checksum}" = "yes" ]; then - cd ${destination_dir} && sha512sum "${wazuh_app_pkg_name}" > "${checksum_dir}/${wazuh_app_pkg_name}".sha512 - fi - - exit 0 -} - - -prepare_env -download_kibana_sources -install_dependencies -download_wazuh_app_sources -build_package diff --git a/wazuhapp/kibana/README.md b/wazuhapp/kibana/README.md deleted file mode 100644 index e6cfedbe5a..0000000000 --- a/wazuhapp/kibana/README.md +++ /dev/null @@ -1,31 +0,0 @@ -Wazuh Kibana App package -======================== - -In this repository, you can find the necessary tools to build a Wazuh Kibana App package. - -## Building Wazuh Kibana app packages - -Please, visit the following link for the full Wazuh Kibana plugin packages building documentation: [Generate Wazuh Kibana plugin.](https://documentation.wazuh.com/current/development/packaging/generate-wazuh-kibana-app.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/wazuhapp/kibana/generate_wazuh_app.sh b/wazuhapp/kibana/generate_wazuh_app.sh deleted file mode 100755 index a357784b59..0000000000 --- a/wazuhapp/kibana/generate_wazuh_app.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash - -# Program to build the Wazuh App for Kibana -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CURRENT_PATH=$( cd $(dirname $0) ; pwd -P ) - -REVISION="" -BRANCH_TAG="" -CHECKSUMDIR="" -CONTAINER_NAME="wazuh-kibana-app-builder" -SOURCES_DIRECTORY="${CURRENT_PATH}/repository" -OUTDIR="${CURRENT_PATH}/output/" - -trap ctrl_c INT - -help() { - - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch or tag e.g. 3.8-6.7 or v3.7.2-6.5.4" - echo " -s, --store [Optional] Set the destination path of package, by default /tmp/wazuh-app." - echo " -r, --revision [Optional] Package revision that append to version e.g. x.x.x-rev" - echo " -c, --checksum [Optional] Generate checksum" - echo " -h, --help Show this help." - echo - exit $1 -} - -build_package(){ - - # Build the Docker image - docker build -t ${CONTAINER_NAME} ./Docker/ - # Build the Wazuh Kibana app package using the build docker image - docker run --rm -t -v "${OUTDIR}":/wazuh_app:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - ${CONTAINER_NAME} ${BRANCH_TAG} ${CHECKSUM} ${REVISION} - - return $? -} - -clean(){ - - exit_code=$1 - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -main(){ - CHECKSUM="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - HAVE_BRANCH=true - BRANCH_TAG="$(echo "$2" | cut -d "/" -f2)" - shift 2 - else - help 1 - fi - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - *) - help 0 - esac - done - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ ${HAVE_BRANCH} == true ]]; then - build_package || clean 1 - clean 0 - else - help 1 - fi -} - -main "$@" diff --git a/wazuhapp/opensearch-dashboards/Docker/Dockerfile b/wazuhapp/opensearch-dashboards/Docker/Dockerfile deleted file mode 100644 index fb0ca1ddf3..0000000000 --- a/wazuhapp/opensearch-dashboards/Docker/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM centos:8 - -RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* -RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-* - -# Install dependencies -RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting && \ - curl -sL https://rpm.nodesource.com/setup_10.x | bash - && \ - yum install nodejs git gcc gcc-c++ make sudo zip python3 -y && \ - alternatives --set python /usr/bin/python3 && \ - npm install -g n - -RUN yum install -y \ - jq - -ADD build.sh / -RUN chmod +x /build.sh - -# Add the volumes -RUN mkdir /wazuh_app /source - -# Set the entrypoint/ -ENTRYPOINT ["/build.sh"] diff --git a/wazuhapp/opensearch-dashboards/Docker/build.sh b/wazuhapp/opensearch-dashboards/Docker/build.sh deleted file mode 100755 index 997a94d151..0000000000 --- a/wazuhapp/opensearch-dashboards/Docker/build.sh +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/bash - -set -ex - -# Script parameters -wazuh_branch=$1 -checksum=$2 -app_revision=$3 - -# Paths -plugin_platform_dir="/tmp/source" -source_dir="${plugin_platform_dir}/plugins" -packages_list=( "main_wazuh" "wazuh-check-updates_wazuhCheckUpdates" "wazuh-core_wazuhCore" ) -destination_dir="/wazuh_app" -checksum_dir="/var/local/checksum" -git_clone_tmp_dir="/tmp/wazuh-app" - -# Repositories URLs -wazuh_app_clone_repo_url="https://github.com/wazuh/wazuh-dashboard-plugins.git" -wazuh_app_raw_repo_url="https://raw.githubusercontent.com/wazuh/wazuh-dashboard-plugins" -plugin_platform_app_repo_url="https://github.com/opensearch-project/OpenSearch-Dashboards.git" -plugin_platform_app_raw_repo_url="https://raw.githubusercontent.com/opensearch-project/OpenSearch-Dashboards" -wazuh_app_package_json_url="${wazuh_app_raw_repo_url}/${wazuh_branch}/plugins/main/package.json" -wazuh_app_nvmrc_url="${wazuh_app_raw_repo_url}/${wazuh_branch}/.nvmrc" - -# Script vars -wazuh_version="" -plugin_platform_version="" -plugin_platform_yarn_version="" -plugin_platform_node_version="" - - -change_node_version () { - installed_node_version="$(node -v)" - node_version=$1 - - n ${node_version} - - if [[ "${installed_node_version}" != "v${node_version}" ]]; then - mv /usr/local/bin/node /usr/bin - mv /usr/local/bin/npm /usr/bin - mv /usr/local/bin/npx /usr/bin - fi - - echo "Using $(node -v) node version" -} - - -prepare_env() { - echo "Downloading package.json and .nvmrc from wazuh-dashboard-plugins repository" - if ! curl $wazuh_app_package_json_url -o "/tmp/package.json" ; then - echo "Error downloading package.json from GitHub." - exit 1 - fi - - if ! curl $wazuh_app_nvmrc_url -o "/tmp/.nvmrc" ; then - echo "Error downloading .nvmrc from GitHub." - exit 1 - fi - wazuh_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - print(pkg["version"])') - plugin_platform_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - plugin_platform_version=pkg.get("pluginPlatform", {}).get("version");\ - print(plugin_platform_version)') - - plugin_platform_package_json_url="${plugin_platform_app_raw_repo_url}/${plugin_platform_version}/package.json" - - echo "Downloading package.json from opensearch-project/OpenSearch-Dashboards repository" - if ! curl $plugin_platform_package_json_url -o "/tmp/package.json" ; then - echo "Error downloading package.json from GitHub." - exit 1 - fi - - plugin_platform_node_version=$(cat /tmp/.nvmrc) - - plugin_platform_yarn_version=$(python -c 'import json, os; f=open("/tmp/package.json"); pkg=json.load(f); f.close();\ - print(str(pkg["engines"]["yarn"]).replace("^",""))') -} - - -download_plugin_platform_sources() { - if ! git clone $plugin_platform_app_repo_url --branch "${plugin_platform_version}" --depth=1 plugin_platform_source; then - echo "Error downloading OpenSearch-Dashboards source code from opensearch-project/OpenSearch-Dashboards GitHub repository." - exit 1 - fi - - mkdir -p plugin_platform_source/plugins - mv plugin_platform_source ${plugin_platform_dir} -} - - -install_dependencies () { - cd ${plugin_platform_dir} - change_node_version $plugin_platform_node_version - npm install -g "yarn@${plugin_platform_yarn_version}" - - sed -i 's/node scripts\/build_ts_refs/node scripts\/build_ts_refs --allow-root/' ${plugin_platform_dir}/package.json - sed -i 's/node scripts\/register_git_hook/node scripts\/register_git_hook --allow-root/' ${plugin_platform_dir}/package.json - - yarn osd bootstrap --skip-opensearch-dashboards-plugins -} - - -download_wazuh_app_sources() { - if ! git clone $wazuh_app_clone_repo_url --branch ${wazuh_branch} --depth=1 ${git_clone_tmp_dir}; then - echo "Error downloading the source code from wazuh-dashboard-app GitHub repository." - exit 1 - fi - - for item in ${packages_list[@]}; do - array=(${item//_/ }) - cp -r "${git_clone_tmp_dir}/plugins/${array[0]}" "${source_dir}/${array[0]}" - done -} - -check_revisions() { - dirs=() - for item in ${packages_list[@]}; do - dirs+=(${item//_/ }) - done - - main_revision=$(jq -r '.revision' ${source_dir}/${dirs[0]}/package.json) - check_update_revision=$(jq -r '.revision' ${source_dir}/${dirs[2]}/package.json) - core_revision=$(jq -r '.revision' ${source_dir}/${dirs[4]}/package.json) - - if [ "${main_revision}" != "${check_update_revision}" ] || [ "${check_update_revision}" != "${core_revision}" ]; then - echo "The package.json revisions do not match. All revisions must be equal." - exit 1 - else - echo "The package.json revision match." - fi -} - -build_package(){ - - for item in ${packages_list[@]}; do - - array=(${item//_/ }) - - if [ -z "${app_revision}" ]; then - wazuh_app_pkg_name="${array[1]}-${wazuh_version}.zip" - else - wazuh_app_pkg_name="${array[1]}-${wazuh_version}-${app_revision}.zip" - fi - - cd "${source_dir}/${array[0]}" - yarn - OPENSEARCH_DASHBOARDS_VERSION=${plugin_platform_version} yarn build --allow-root - - find "${source_dir}/${array[0]}" -name "*.zip" -exec mv {} ${destination_dir}/${wazuh_app_pkg_name} \; - - if [ "${checksum}" = "yes" ]; then - cd ${destination_dir} && sha512sum "${wazuh_app_pkg_name}" > "${checksum_dir}/${wazuh_app_pkg_name}".sha512 - fi - - done - - exit 0 -} - - -prepare_env -download_plugin_platform_sources -install_dependencies -download_wazuh_app_sources -check_revisions -build_package diff --git a/wazuhapp/opensearch-dashboards/README.md b/wazuhapp/opensearch-dashboards/README.md deleted file mode 100644 index 0b14340569..0000000000 --- a/wazuhapp/opensearch-dashboards/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh OpenSearch Dashboards plugin package - -In this repository, you can find the necessary tools to build a Wazuh OpenSearch Dashboards plugin package. - -## Building Wazuh plugin for OpenSearch Dashboards packages - -Please, visit the following link for the full Wazuh Kibana plugin packages building documentation: [Generate Wazuh Kibana plugin.](https://documentation.wazuh.com/current/development/packaging/generate-wazuh-kibana-app.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/wazuhapp/opensearch-dashboards/generate_wazuh_app.sh b/wazuhapp/opensearch-dashboards/generate_wazuh_app.sh deleted file mode 100755 index 7c799b67ca..0000000000 --- a/wazuhapp/opensearch-dashboards/generate_wazuh_app.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash - -# Program to build the Wazuh App for OpenSearch Dashboards -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CURRENT_PATH=$( cd $(dirname $0) ; pwd -P ) - -REVISION="" -BRANCH_TAG="" -CHECKSUMDIR="" -CONTAINER_NAME="wazuh-plugin-for-opensearch-dashboards-builder" -SOURCES_DIRECTORY="${CURRENT_PATH}/repository" -OUTDIR="${CURRENT_PATH}/output/" - -trap ctrl_c INT - -help() { - echo -e "" - echo -e "NAME" - echo -e " $(basename "$0") - Build Wazuh plugin files." - echo -e "" - echo -e "SYNOPSIS" - echo -e " $(basename "$0") -b | -s | -r | -c | -h" - echo -e "" - echo -e "DESCRIPTION" - echo -e " -b, --branch " - echo -e " [Required] Select Git branch or tag." - echo -e "" - echo -e " -s, --store " - echo -e " [Optional] Set the destination path of package, by default /tmp/wazuh-app." - echo -e "" - echo -e " -r, --revision " - echo -e " [Optional] Package revision." - echo -e "" - echo -e " -c, --checksum " - echo -e " [Optional] Generate checksum." - echo -e "" - echo -e " -h, --help" - echo -e " Show this help." - echo -e "" - exit $1 -} - -build_package(){ - - # Build the Docker image - docker build -t ${CONTAINER_NAME} ./Docker/ - # Build the Wazuh plugin for OpenSearch Dashboards package using the build docker image - docker run --rm -t -v "${OUTDIR}":/wazuh_app:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - ${CONTAINER_NAME} ${BRANCH_TAG} ${CHECKSUM} ${REVISION} - - return $? -} - -clean(){ - - exit_code=$1 - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -main(){ - CHECKSUM="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - HAVE_BRANCH=true - BRANCH_TAG="$(echo "$2" | cut -d "/" -f2)" - shift 2 - else - help 1 - fi - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - *) - help 0 - esac - done - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ ${HAVE_BRANCH} == true ]]; then - build_package || clean 1 - clean 0 - else - help 1 - fi -} - -main "$@" diff --git a/windows/Dockerfile b/windows/Dockerfile deleted file mode 100644 index 79fd0b2f0f..0000000000 --- a/windows/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM ubuntu:22.04 - -# Installing necessary packages -RUN apt-get update && \ - apt-get install -y --allow-change-held-packages gcc g++ gcc-mingw-w64 g++-mingw-w64 nsis make wget unzip \ - curl perl binutils zip libssl-dev - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxvf cmake-3.18.3.tar.gz && \ - cd cmake-3.18.3 && \ - ./bootstrap && make -j$(nproc) && make install && \ - ln -s /usr/local/bin/cmake /usr/bin/cmake && cd / && rm -rf cmake-* - -ADD entrypoint.sh / - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/windows/README.md b/windows/README.md deleted file mode 100644 index 6819d7aee1..0000000000 --- a/windows/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh Windows packages - -In this repository, you can find the necessary tools to build a Wazuh msi package for Windows. - -## Building Windows packages - -Please, visit the following link for the full Windows packages building documentation: [Generate Wazuh Windows packages.](https://documentation.wazuh.com/current/development/packaging/generate-windows-package.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/windows/entrypoint.sh b/windows/entrypoint.sh deleted file mode 100755 index 171ffaa406..0000000000 --- a/windows/entrypoint.sh +++ /dev/null @@ -1,32 +0,0 @@ -#! /bin/bash - -set -ex - -BRANCH=$1 -JOBS=$2 -DEBUG=$3 -REVISION=$4 -TRUST_VERIFICATION=$5 -CA_NAME=$6 -ZIP_NAME="windows_agent_${REVISION}.zip" - -URL_REPO=https://github.com/wazuh/wazuh/archive/${BRANCH}.zip - -# Download the wazuh repository -wget -O wazuh.zip ${URL_REPO} && unzip wazuh.zip - -# Compile the wazuh agent for Windows -FLAGS="-j ${JOBS} IMAGE_TRUST_CHECKS=${TRUST_VERIFICATION} CA_NAME=\"${CA_NAME}\" " - -if [[ "${DEBUG}" = "yes" ]]; then - FLAGS+="-d " -fi - -bash -c "make -C /wazuh-*/src deps TARGET=winagent ${FLAGS}" -bash -c "make -C /wazuh-*/src TARGET=winagent ${FLAGS}" - -rm -rf /wazuh-*/src/external - -# Zip the compiled agent and move it to the shared folder -zip -r ${ZIP_NAME} wazuh-* -cp ${ZIP_NAME} /shared diff --git a/windows/generate_compiled_windows_agent.sh b/windows/generate_compiled_windows_agent.sh deleted file mode 100755 index 113a2b3660..0000000000 --- a/windows/generate_compiled_windows_agent.sh +++ /dev/null @@ -1,120 +0,0 @@ -#! /bin/bash - -BRANCH="master" -JOBS="4" -REVISION="1" -DEBUG="no" -OUTDIR="$(pwd)" -REVISION="1" -TRUST_VERIFICATION="1" -CA_NAME="DigiCert Assured ID Root CA" - -DOCKERFILE_PATH="./" -DOCKER_IMAGE_NAME="compile_windows_agent" -TAG=$1 - - -generate_compiled_win_agent() { - - if [ ! -d "${OUTDIR}" ]; then - echo "Creating building directory at ${OUTDIR}" - mkdir -p ${OUTDIR} - fi - - docker build -t ${DOCKER_IMAGE_NAME} ./ || exit 1 - docker run --rm -v ${OUTDIR}:/shared ${DOCKER_IMAGE_NAME} ${BRANCH} ${JOBS} ${DEBUG} ${REVISION} ${TRUST_VERIFICATION} "${CA_NAME}" || exit 1 - echo "Package $(ls -Art ${OUTDIR} | tail -n 1) added to ${OUTDIR}." -} - - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch [${BRANCH}]. By default: master." - echo " -j, --jobs [Optional] Change number of parallel jobs when compiling the Windows agent. By default: 4." - echo " -r, --revision [Optional] Package revision. By default: 1." - echo " -s, --store [Optional] Set the directory where the package will be stored. By default the current path." - echo " -d, --debug [Optional] Build the binaries with debug symbols. By default: no." - echo " -t, --trust_verification [Optional] Build the binaries with trust load images verification. By default: 1 (only warnings)." - echo " -c, --ca_name [Optional] CA name to be used to verify the trust of the agent. By default: DigiCert Assured ID Root CA." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - BUILD="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH="$2" - BUILD="yes" - shift 2 - else - help 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - JOBS="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-d"|"--debug") - DEBUG="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "-t"|"--trust_verification") - if [ -n "$2" ]; then - TRUST_VERIFICATION="$2" - shift 2 - else - help 1 - fi - ;; - "-c"|"--ca_name") - if [ -n "$2" ]; then - CA_NAME="$2" - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - if [[ "$BUILD" != "no" ]]; then - generate_compiled_win_agent || exit 1 - fi - - exit 0 -} - -main "$@" diff --git a/windows/generate_wazuh_msi.ps1 b/windows/generate_wazuh_msi.ps1 deleted file mode 100644 index 8ddcf569e4..0000000000 --- a/windows/generate_wazuh_msi.ps1 +++ /dev/null @@ -1,104 +0,0 @@ -# Created by Wazuh, Inc. . -# This program is a free software; you can redistribute it and/or modify it under the terms of GPLv2 - -param ( - [string]$OPTIONAL_REVISION = "", - [string]$SIGN = "", - [string]$WIX_TOOLS_PATH = "", - [string]$SIGN_TOOLS_PATH = "", - [switch]$help - ) - -$MSI_NAME = "" -$VERSION = "" -$CANDLE_EXE = "candle.exe" -$LIGHT_EXE = "light.exe" -$SIGNTOOL_EXE = "signtool.exe" - -if(($help.isPresent)) { - " - This tool can be used to generate the Windows Wazuh agent msi package. - - PARAMETERS TO BUILD WAZUH-AGENT MSI: - 1. OPTIONAL_REVISION: 1 or different - 2. SIGN: yes or no. - OPTIONAL PARAMETERS: - 3. WIX_TOOLS_PATH: Wix tools path - 4. SIGN_TOOLS_PATH: sign tools path - - USAGE: - - * WAZUH: - $ ./generate_wazuh_msi.ps1 -OPTIONAL_REVISION {{ REVISION }} -SIGN {{ yes|no }} -WIX_TOOLS_PATH {{ PATH }} -SIGN_TOOLS_PATH {{ PATH }} - - Build a devel msi: $ ./generate_wazuh_msi.ps1 -OPTIONAL_REVISION 2 -SIGN no - Build a prod msi: $ ./generate_wazuh_msi.ps1 -OPTIONAL_REVISION 1 -SIGN yes - - " - Exit -} - -# Get Power Shell version. -$PSversion = $PSVersionTable.PSVersion.Major -if ($PSversion -eq $null) { - $PSversion = 1 # $PSVersionTable is new with Powershell 2.0 -} - -function ComputeMsiName() { - - ## Checking arguments - if($OPTIONAL_REVISION -eq ""){ - Write-Host "-OPTIONAL_REVISION empty. Using default value." - $OPTIONAL_REVISION = "1" - } - $VERSION = Get-Content VERSION - $VERSION = $VERSION -replace '[v]','' - - $MSI_NAME="wazuh-agent-$VERSION-$OPTIONAL_REVISION.msi" - return $MSI_NAME -} - -function BuildWazuhMsi(){ - $MSI_NAME = ComputeMsiName - Write-Host "MSI_NAME = $MSI_NAME" - - if($WIX_TOOLS_PATH -ne ""){ - $CANDLE_EXE = $WIX_TOOLS_PATH + "/" + $CANDLE_EXE - $LIGHT_EXE = $WIX_TOOLS_PATH + "/" + $LIGHT_EXE - } - - if($SIGN_TOOLS_PATH -ne ""){ - $SIGNTOOL_EXE = $SIGN_TOOLS_PATH + "/" + $SIGNTOOL_EXE - } - - if($SIGN -eq "yes"){ - # Sign .exe files and the InstallerScripts.vbs - Write-Host "Signing .exe files..." - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 ".\*.exe" - Write-Host "Signing .vbs files..." - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 ".\InstallerScripts.vbs" - Write-Host "Signing .dll files..." - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\*.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 ".\*.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\data_provider\build\bin\sysinfo.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\shared_modules\dbsync\build\bin\dbsync.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\shared_modules\rsync\build\bin\rsync.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\wazuh_modules\syscollector\build\bin\syscollector.dll" - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /fd SHA256 /td SHA256 "..\syscheckd\build\bin\libfimdb.dll" - } - - Write-Host "Building MSI installer..." - - & $CANDLE_EXE -nologo .\wazuh-installer.wxs -out "wazuh-installer.wixobj" -ext WixUtilExtension -ext WixUiExtension - & $LIGHT_EXE ".\wazuh-installer.wixobj" -out $MSI_NAME -ext WixUtilExtension -ext WixUiExtension - - if($SIGN -eq "yes"){ - Write-Host "Signing $MSI_NAME..." - & $SIGNTOOL_EXE sign /a /tr http://timestamp.digicert.com /d $MSI_NAME /fd SHA256 /td SHA256 $MSI_NAME - } -} - -############################ -# MAIN -############################ - -BuildWazuhMsi diff --git a/wpk/README.md b/wpk/README.md deleted file mode 100644 index 1f9d433c6a..0000000000 --- a/wpk/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# WPK package - -In this repository, you can find the necessary tools to build a WPK package. - -## Building WPK packages - -Please, visit the following link for the full WPK packages building documentation: [Generate Wazuh WPK packages automatically.](https://documentation.wazuh.com/current/development/packaging/generate-wpk-package.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/wpk/common/Dockerfile b/wpk/common/Dockerfile deleted file mode 100644 index cf76ec51e0..0000000000 --- a/wpk/common/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM debian:9 -RUN echo "deb http://archive.debian.org/debian stretch contrib main non-free" > /etc/apt/sources.list && \ - echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list && \ - apt-get update && \ - apt-get -y install --allow-change-held-packages python git curl jq python3 python3-pip libffi-dev && \ - pip3 install --upgrade cryptography==2.9.2 awscli - -ADD wpkpack.py /usr/local/bin/wpkpack -ADD run.sh /usr/local/bin/run -VOLUME /var/local/wazuh -VOLUME /etc/wazuh -VOLUME /etc/wazuh/checksum -ENTRYPOINT ["/usr/local/bin/run"] diff --git a/wpk/generate_wpk_package.sh b/wpk/generate_wpk_package.sh deleted file mode 100755 index a96aba56b2..0000000000 --- a/wpk/generate_wpk_package.sh +++ /dev/null @@ -1,351 +0,0 @@ -#!/bin/bash - -# Program to build the Wazuh WPK packages -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -CURRENT_PATH="$( cd $(dirname ${0}) ; pwd -P )" -LINUX_BUILDER_X86_64="linux_wpk_builder_x86_64" -LINUX_BUILDER_X86_64_DOCKERFILE="${CURRENT_PATH}/linux/x86_64" -LINUX_BUILDER_AARCH64="linux_wpk_builder_aarch64" -LINUX_BUILDER_AARCH64_DOCKERFILE="${CURRENT_PATH}/linux/aarch64" -LINUX_BUILDER_ARMV7HL="linux_wpk_builder_armv7hl" -LINUX_BUILDER_ARMV7HL_DOCKERFILE="${CURRENT_PATH}/linux/armv7hl" -COMMON_BUILDER="common_wpk_builder" -COMMON_BUILDER_DOCKERFILE="${CURRENT_PATH}/common" -CHECKSUM="no" -INSTALLATION_PATH="/var/ossec" - -trap ctrl_c INT - - -function pack_wpk() { - local BRANCH="${1}" - local DESTINATION="${2}" - local CONTAINER_NAME="${3}" - local JOBS="${4}" - local PACKAGE_NAME="${5}" - local OUT_NAME="${6}" - local CHECKSUM="${7}" - local CHECKSUMDIR="${8}" - local INSTALLATION_PATH="${9}" - local AWS_REGION="${10}" - local WPK_KEY="${11}" - local WPK_CERT="${12}" - - if [ -n "${CHECKSUM}" ]; then - CHECKSUM_FLAG="-c" - fi - if [ -n "${WPK_KEY}" ]; then - WPK_KEY_FLAG="--aws-wpk-key ${WPK_KEY}" - fi - if [ -n "${WPK_CERT}" ]; then - WPK_CERT_FLAG="--aws-wpk-cert ${WPK_CERT}" - fi - - docker run -t --rm -v ${KEYDIR}:/etc/wazuh:Z -v ${DESTINATION}:/var/local/wazuh:Z -v ${PKG_PATH}:/var/pkg:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - ${CONTAINER_NAME} -b ${BRANCH} -j ${JOBS} -o ${OUT_NAME} -p ${INSTALLATION_PATH} --aws-wpk-key-region ${AWS_REGION} ${WPK_KEY_FLAG} ${WPK_CERT_FLAG} -pn ${PACKAGE_NAME} ${CHECKSUM_FLAG} - - return $? -} - - -function build_wpk_linux() { - local BRANCH="${1}" - local DESTINATION="${2}" - local CONTAINER_NAME="${3}" - local JOBS="${4}" - local OUT_NAME="${5}" - local CHECKSUM="${6}" - local CHECKSUMDIR="${7}" - local INSTALLATION_PATH="${8}" - local AWS_REGION="${9}" - local WPK_KEY="${10}" - local WPK_CERT="${11}" - - if [ -n "${CHECKSUM}" ]; then - CHECKSUM_FLAG="-c" - fi - if [ -n "${WPK_KEY}" ]; then - WPK_KEY_FLAG="--aws-wpk-key ${WPK_KEY}" - fi - if [ -n "${WPK_CERT}" ]; then - WPK_CERT_FLAG="--aws-wpk-cert ${WPK_CERT}" - fi - - docker run -t --rm -v ${KEYDIR}:/etc/wazuh:Z -v ${DESTINATION}:/var/local/wazuh:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - ${CONTAINER_NAME} -b ${BRANCH} -j ${JOBS} -o ${OUT_NAME} -p ${INSTALLATION_PATH} --aws-wpk-key-region ${AWS_REGION} ${WPK_KEY_FLAG} ${WPK_CERT_FLAG} ${CHECKSUM_FLAG} - - return $? -} - - -function build_container() { - local CONTAINER_NAME="${1}" - local DOCKERFILE_PATH="${2}" - - cp run.sh wpkpack.py ${DOCKERFILE_PATH} - docker build -t ${CONTAINER_NAME} ${DOCKERFILE_PATH} -} - - -function help() { - echo - echo "Usage: ${0} [OPTIONS]" - echo "It is required to use -k or --aws-wpk-key, --aws-wpk-cert parameters" - echo - echo " -t, --target-system [Required] Select target wpk to build [linux/windows/macos]" - echo " -b, --branch [Required] Select Git branch or tag e.g. $BRANCH" - echo " -d, --destination [Required] Set the destination path of package." - echo " -pn, --package-name [Required for windows and macos] Package name to pack on wpk." - echo " -o, --output [Required] Name to the output package." - echo " -k, --key-dir [Optional] Set the WPK key path to sign package." - echo " --aws-wpk-key [Optional] AWS Secrets manager Name/ARN to get WPK private key." - echo " --aws-wpk-cert [Optional] AWS secrets manager Name/ARN to get WPK certificate." - echo " --aws-wpk-key-region [Optional] AWS Region where secrets are stored." - echo " -a, --architecture [Optional] Target architecture of the package [x86_64]." - echo " -j, --jobs [Optional] Number of parallel jobs when compiling." - echo " -p, --path [Optional] Installation path for the package. By default: /var/ossec." - echo " -c, --checksum [Optional] Generate checksum on the desired path." - echo " -h, --help Show this help." - echo - exit ${1} -} - - -function clean() { - local DOCKERFILE_PATH="${1}" - local exit_code="${2}" - - rm -f ${DOCKERFILE_PATH}/*.sh ${DOCKERFILE_PATH}/wpkpack.py - - return 0 -} - - -ctrl_c() { - clean 1 -} - - -function main() { - local TARGET="" - local BRANCH="" - local DESTINATION="${CURRENT_PATH}/output" - local ARCHITECTURE="x86_64" - local JOBS="4" - local CONTAINER_NAME="" - local PKG_NAME="" - local OUT_NAME="" - local NO_COMPILE=false - local CHECKSUMDIR="" - local WPK_KEY="" - local WPK_CERT="" - local AWS_REGION="us-east-1" - - local HAVE_BRANCH=false - local HAVE_DESTINATION=false - local HAVE_TARGET=false - local HAVE_KEYDIR=false - local HAVE_PKG_NAME=false - local HAVE_OUT_NAME=false - local HAVE_WPK_KEY=false - local HAVE_WPK_CERT=false - local LINUX_BUILDER="${LINUX_BUILDER_X86_64}" - local LINUX_BUILDER_DOCKERFILE="${LINUX_BUILDER_X86_64_DOCKERFILE}" - - while [ -n "${1}" ] - do - case "${1}" in - "-t"|"--target-system") - if [ -n "${2}" ]; then - if [[ "${2}" == "linux" || "${2}" == "windows" || "${2}" == "macos" ]]; then - local TARGET="${2}" - local HAVE_TARGET=true - shift 2 - else - echo "Target system must be linux, windows or macos" - help 1 - fi - else - echo "ERROR: Missing target system." - help 1 - fi - ;; - "-b"|"--branch") - if [ -n "${2}" ]; then - local BRANCH="$(echo ${2} | cut -d'/' -f2)" - local HAVE_BRANCH=true - shift 2 - else - echo "ERROR: Missing branch." - help 1 - fi - ;; - "-d"|"--destination") - if [ -n "${2}" ]; then - local DESTINATION="${2}" - local HAVE_DESTINATION=true - shift 2 - else - echo "ERROR: Missing destination directory." - help 1 - fi - ;; - "-k"|"--key-dir") - if [ -n "${2}" ]; then - if [[ "${2: -1}" != "/" ]]; then - KEYDIR="${2}/" - local HAVE_KEYDIR=true - else - KEYDIR="${2}" - local HAVE_KEYDIR=true - fi - shift 2 - fi - ;; - "-a"|"--architecture") - if [ -n "${2}" ]; then - if [[ "${2}" == "x86_64" ]] || [[ "${2}" == "amd64" ]]; then - local ARCHITECTURE="x86_64" - local LINUX_BUILDER="${LINUX_BUILDER_X86_64}" - local LINUX_BUILDER_DOCKERFILE="${LINUX_BUILDER_X86_64_DOCKERFILE}" - shift 2 - elif [[ "${2}" == "aarch64" ]]; then - local ARCHITECTURE="${2}" - local LINUX_BUILDER="${LINUX_BUILDER_AARCH64}" - local LINUX_BUILDER_DOCKERFILE="${LINUX_BUILDER_AARCH64_DOCKERFILE}" - shift 2 - elif [[ "${2}" == "armv7hl" ]]; then - local ARCHITECTURE="${2}" - local LINUX_BUILDER="${LINUX_BUILDER_ARMV7HL}" - local LINUX_BUILDER_DOCKERFILE="${LINUX_BUILDER_ARMV7HL_DOCKERFILE}" - shift 2 - else - echo "Architecture must be x86_64/amd64, aarch64 or armv7hl" - help 1 - fi - else - echo "ERROR: Missing architecture." - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "${2}" ]; then - local JOBS="${2}" - shift 2 - else - echo "ERROR: Missing jobs." - help 1 - fi - ;; - "-p"|"--path") - if [ -n "${2}" ]; then - INSTALLATION_PATH="${2}" - shift 2 - else - help 1 - fi - ;; - "-pn"|"--package-name") - if [ -n "${2}" ]; then - local HAVE_PKG_NAME=true - local PKG_NAME="${2}" - PKG_PATH=`echo ${PKG_NAME}| rev|cut -d'/' -f2-|rev` - PKG_NAME=`basename ${PKG_NAME}` - shift 2 - else - echo "ERROR: Missing package name" - help 1 - fi - ;; - "-o"|"--output") - if [ -n "${2}" ]; then - local HAVE_OUT_NAME=true - local OUT_NAME="${2}" - shift 2 - else - echo "ERROR: Missing output name." - help 1 - fi - ;; - "--aws-wpk-key") - if [ -n "${2}" ]; then - local HAVE_WPK_KEY=true - local WPK_KEY="${2}" - shift 2 - fi - ;; - "--aws-wpk-cert") - if [ -n "${2}" ]; then - local HAVE_WPK_CERT=true - local WPK_CERT="${2}" - shift 2 - fi - ;; - "--aws-wpk-key-region") - if [ -n "${2}" ]; then - local AWS_REGION="${2}" - shift 2 - fi - ;; - "-c"|"--checksum") - if [ -n "${2}" ]; then - local CHECKSUMDIR="${2}" - local CHECKSUM="yes" - shift 2 - else - local CHECKSUM="yes" - shift 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - *) - help 1 - esac - done - - if [[ "${HAVE_KEYDIR}" == false && ("${HAVE_WPK_KEY}" == false || "${HAVE_WPK_CERT}" == false) ]]; then - echo "ERROR: Option -k or -wk, -wc must be set." - help 1 - fi - - if [ -z "${CHECKSUMDIR}" ]; then - local CHECKSUMDIR="${DESTINATION}" - fi - - if [[ "${HAVE_TARGET}" == true ]] && [[ "${HAVE_BRANCH}" == true ]] && [[ "${HAVE_DESTINATION}" == true ]] && [[ "${HAVE_OUT_NAME}" == true ]]; then - if [[ "${TARGET}" == "windows" || "${TARGET}" == "macos" ]]; then - if [[ "${HAVE_PKG_NAME}" == true ]]; then - build_container ${COMMON_BUILDER} ${COMMON_BUILDER_DOCKERFILE} || clean ${COMMON_BUILDER_DOCKERFILE} 1 - local CONTAINER_NAME="${COMMON_BUILDER}" - pack_wpk ${BRANCH} ${DESTINATION} ${CONTAINER_NAME} ${JOBS} ${PKG_NAME} ${OUT_NAME} ${CHECKSUM} ${CHECKSUMDIR} ${INSTALLATION_PATH} ${AWS_REGION} ${WPK_KEY} ${WPK_CERT} || clean ${COMMON_BUILDER_DOCKERFILE} 1 - clean ${COMMON_BUILDER_DOCKERFILE} 0 - else - echo "ERROR: No MSI/PKG package name specified for Windows or macOS WPK" - help 1 - fi - else - build_container ${LINUX_BUILDER} ${LINUX_BUILDER_DOCKERFILE} || clean ${LINUX_BUILDER_DOCKERFILE} 1 - local CONTAINER_NAME="${LINUX_BUILDER}" - build_wpk_linux ${BRANCH} ${DESTINATION} ${CONTAINER_NAME} ${JOBS} ${OUT_NAME} ${CHECKSUM} ${CHECKSUMDIR} ${INSTALLATION_PATH} ${AWS_REGION} ${WPK_KEY} ${WPK_CERT} || clean ${LINUX_BUILDER_DOCKERFILE} 1 - clean ${LINUX_BUILDER_DOCKERFILE} 0 - fi - else - echo "ERROR: Need more parameters" - help 1 - fi - - return 0 -} - -main "$@" diff --git a/wpk/linux/aarch64/Dockerfile b/wpk/linux/aarch64/Dockerfile deleted file mode 100644 index bb7d30ac59..0000000000 --- a/wpk/linux/aarch64/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM arm64v8/centos:7 - -# Enable EPEL -RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm - -# Install all the necessary tools to build the packages -RUN yum install -y gcc make git sudo gnupg openssl \ - automake autoconf libtool policycoreutils-python \ - findutils gcc-c++ glibc-devel gnupg2 openssl openssl-devel \ - libffi-devel pkgconfig readline-devel \ - sqlite-devel gdb tar tcl-devel tix-devel tk-devel \ - valgrind-devel python-rpm-macros python36 python36-devel jq - -RUN curl https://bootstrap.pypa.io/get-pip.py | python3 - - -RUN pip3 install --upgrade cryptography awscli - -ADD wpkpack.py /usr/local/bin/wpkpack -ADD run.sh /usr/local/bin/run -ENTRYPOINT ["/usr/local/bin/run"] \ No newline at end of file diff --git a/wpk/linux/armv7hl/Dockerfile b/wpk/linux/armv7hl/Dockerfile deleted file mode 100644 index 49ee81b437..0000000000 --- a/wpk/linux/armv7hl/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM arm32v7/centos:7 - -ADD build_deps.sh /build_deps.sh -RUN sh build_deps.sh - -RUN curl https://bootstrap.pypa.io/get-pip.py | python2.7 - -RUN pip2 install cryptography awscli - - -ADD wpkpack.py /usr/local/bin/wpkpack -ADD run.sh /usr/local/bin/run -ADD entrypoint.sh /usr/local/bin/entrypoint - -ENTRYPOINT ["/usr/local/bin/entrypoint"] \ No newline at end of file diff --git a/wpk/linux/armv7hl/build_deps.sh b/wpk/linux/armv7hl/build_deps.sh deleted file mode 100644 index da571e94aa..0000000000 --- a/wpk/linux/armv7hl/build_deps.sh +++ /dev/null @@ -1,315 +0,0 @@ -rpm_url="https://packages.wazuh.com/utils/armv7hl" -rpm -ivh --force --ignorearch --nodeps \ -${rpm_url}/iproute-4.11.0-25.el7_7.2.armv7hl.rpm \ -${rpm_url}/dhclient-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/audit-libs-python-2.8.5-4.el7.armv7hl.rpm \ -${rpm_url}/audit-libs-2.8.5-4.el7.armv7hl.rpm \ -${rpm_url}/autoconf-2.69-11.el7.noarch.rpm \ -${rpm_url}/automake-1.13.4-3.el7.noarch.rpm \ -${rpm_url}/bash-4.2.46-34.el7.armv7hl.rpm \ -${rpm_url}/binutils-2.27-43.base.el7.armv7hl.rpm \ -${rpm_url}/bison-3.0.4-2.el7.armv7hl.rpm \ -${rpm_url}/bluez-libs-devel-5.44-6.el7.armv7hl.rpm \ -${rpm_url}/bluez-libs-5.44-6.el7.armv7hl.rpm \ -${rpm_url}/bzip2-devel-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/bzip2-libs-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/bzip2-1.0.6-13.el7.armv7hl.rpm \ -${rpm_url}/ca-certificates-2019.2.32-76.el7_7.noarch.rpm \ -${rpm_url}/checkpolicy-2.5-8.el7.armv7hl.rpm \ -${rpm_url}/chkconfig-1.7.4-1.el7.armv7hl.rpm \ -${rpm_url}/coreutils-8.22-24.el7.armv7hl.rpm \ -${rpm_url}/cpio-2.11-27.el7.armv7hl.rpm \ -${rpm_url}/cpp-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/desktop-file-utils-0.23-2.el7.armv7hl.rpm \ -${rpm_url}/diffutils-3.3-5.el7.armv7hl.rpm \ -${rpm_url}/dracut-network-033-568.el7.armv7hl.rpm \ -${rpm_url}/dracut-033-568.el7.armv7hl.rpm \ -${rpm_url}/dwz-0.11-3.el7.armv7hl.rpm \ -${rpm_url}/e2fsprogs-devel-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/e2fsprogs-libs-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/elfutils-devel-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libelf-devel-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libelf-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-libs-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/elfutils-0.176-4.el7.armv7hl.rpm \ -${rpm_url}/emacs-filesystem-24.3-23.el7.noarch.rpm \ -${rpm_url}/ethtool-4.8-10.el7.armv7hl.rpm \ -${rpm_url}/expat-devel-2.1.0-11.el7.armv7hl.rpm \ -${rpm_url}/expat-2.1.0-11.el7.armv7hl.rpm \ -${rpm_url}/file-devel-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/file-libs-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/file-5.11-36.el7.armv7hl.rpm \ -${rpm_url}/findutils-4.5.11-6.el7.armv7hl.rpm \ -${rpm_url}/fipscheck-lib-1.4.1-6.el7.armv7hl.rpm \ -${rpm_url}/gawk-4.0.2-4.el7_3.1.armv7hl.rpm \ -${rpm_url}/gcc-c%2B%2B-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/gcc-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/gdb-7.6.1-119.el7.armv7hl.rpm \ -${rpm_url}/gdbm-devel-1.10-8.el7.armv7hl.rpm \ -${rpm_url}/gdbm-1.10-8.el7.armv7hl.rpm \ -${rpm_url}/gettext-libs-0.19.8.1-3.el7.armv7hl.rpm \ -${rpm_url}/gettext-0.19.8.1-3.el7.armv7hl.rpm \ -${rpm_url}/git-1.8.3.1-21.el7_7.armv7hl.rpm \ -${rpm_url}/glib2-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/glibc-devel-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/glibc-headers-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/glibc-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/gmp-devel-6.0.0-15.el7.armv7hl.rpm \ -${rpm_url}/gmp-6.0.0-15.el7.armv7hl.rpm \ -${rpm_url}/gnupg2-2.0.22-5.el7_5.armv7hl.rpm \ -${rpm_url}/grep-2.20-3.el7.armv7hl.rpm \ -${rpm_url}/gzip-1.5-10.el7.armv7hl.rpm \ -${rpm_url}/info-5.1-5.el7.armv7hl.rpm \ -${rpm_url}/json-glib-1.4.2-2.el7.armv7hl.rpm \ -${rpm_url}/kexec-tools-2.0.15-43.el7.armv7hl.rpm \ -${rpm_url}/krb5-devel-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/krb5-libs-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/less-458-9.el7.armv7hl.rpm \ -${rpm_url}/libX11-devel-1.6.7-2.el7.armv7hl.rpm \ -${rpm_url}/libX11-1.6.7-2.el7.armv7hl.rpm \ -${rpm_url}/libXft-devel-2.3.2-2.el7.armv7hl.rpm \ -${rpm_url}/libacl-devel-2.2.51-15.el7.armv7hl.rpm \ -${rpm_url}/libacl-2.2.51-15.el7.armv7hl.rpm \ -${rpm_url}/libappstream-glib-0.7.8-2.el7.armv7hl.rpm \ -${rpm_url}/libarchive-devel-3.1.2-14.el7_7.armv7hl.rpm \ -${rpm_url}/libarchive-3.1.2-14.el7_7.armv7hl.rpm \ -${rpm_url}/libassuan-2.1.0-3.el7.armv7hl.rpm \ -${rpm_url}/libattr-devel-2.4.46-13.el7.armv7hl.rpm \ -${rpm_url}/libattr-2.4.46-13.el7.armv7hl.rpm \ -${rpm_url}/libcgroup-0.41-21.el7.armv7hl.rpm \ -${rpm_url}/libcom_err-devel-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/libcom_err-1.42.9-17.el7.armv7hl.rpm \ -${rpm_url}/libcroco-0.6.12-4.el7.armv7hl.rpm \ -${rpm_url}/libcurl-7.29.0-57.el7.armv7hl.rpm \ -${rpm_url}/libdb-devel-5.3.21-25.el7.armv7hl.rpm \ -${rpm_url}/libdb-5.3.21-25.el7.armv7hl.rpm \ -${rpm_url}/libedit-3.0-12.20121213cvs.el7.armv7hl.rpm \ -${rpm_url}/libffi-devel-3.0.13-19.el7.armv7hl.rpm \ -${rpm_url}/libffi-3.0.13-19.el7.armv7hl.rpm \ -${rpm_url}/libgcab1-0.7-4.el7_4.armv7hl.rpm \ -${rpm_url}/libgcc-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libgcrypt-devel-1.5.3-14.el7.armv7hl.rpm \ -${rpm_url}/libgcrypt-1.5.3-14.el7.armv7hl.rpm \ -${rpm_url}/libgomp-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libgpg-error-devel-1.12-3.el7.armv7hl.rpm \ -${rpm_url}/libgpg-error-1.12-3.el7.armv7hl.rpm \ -${rpm_url}/libicu-50.2-3.el7.armv7hl.rpm \ -${rpm_url}/libmpc-1.0.1-3.el7.armv7hl.rpm \ -${rpm_url}/libselinux-python-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libsemanage-python-2.5-14.el7.armv7hl.rpm \ -${rpm_url}/libsepol-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libsoup-2.62.2-2.el7.armv7hl.rpm \ -${rpm_url}/libstdc%2B%2B-devel-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libstdc%2B%2B-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/libtirpc-devel-0.2.4-0.16.el7.armv7hl.rpm \ -${rpm_url}/libtirpc-0.2.4-0.16.el7.armv7hl.rpm \ -${rpm_url}/libtool-2.4.2-22.el7_3.armv7hl.rpm \ -${rpm_url}/libunistring-0.9.3-9.el7.armv7hl.rpm \ -${rpm_url}/libuuid-devel-2.23.2-63.el7.armv7hl.rpm \ -${rpm_url}/libuuid-2.23.2-63.el7.armv7hl.rpm \ -${rpm_url}/libuv-1.37.0-1.el7.armv7hl.rpm \ -${rpm_url}/libxcb-devel-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/libxml2-devel-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/libxml2-python-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/libxml2-2.9.1-6.el7.4.armv7hl.rpm \ -${rpm_url}/lua-5.1.4-15.el7.armv7hl.rpm \ -${rpm_url}/lzo-devel-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/lzo-minilzo-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/lzo-2.06-8.el7.armv7hl.rpm \ -${rpm_url}/m4-1.4.16-10.el7.armv7hl.rpm \ -${rpm_url}/make-3.82-24.el7.armv7hl.rpm \ -${rpm_url}/man-db-2.6.3-11.el7.armv7hl.rpm \ -${rpm_url}/mpfr-3.1.1-4.el7.armv7hl.rpm \ -${rpm_url}/ncurses-devel-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/ncurses-libs-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/nodejs-6.17.1-1.el7.armv7hl.rpm \ -${rpm_url}/npm-3.10.10-1.6.17.1.1.el7.armv7hl.rpm \ -${rpm_url}/nspr-devel-4.21.0-1.el7.armv7hl.rpm \ -${rpm_url}/nspr-4.21.0-1.el7.armv7hl.rpm \ -${rpm_url}/nss-devel-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/nss-pem-1.0.3-7.el7.armv7hl.rpm \ -${rpm_url}/nss-softokn-devel-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-softokn-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-sysinit-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/nss-util-devel-3.44.0-4.el7_7.armv7hl.rpm \ -${rpm_url}/nss-util-3.44.0-4.el7_7.armv7hl.rpm \ -${rpm_url}/nss-3.44.0-7.el7_7.armv7hl.rpm \ -${rpm_url}/openldap-2.4.44-21.el7_6.armv7hl.rpm \ -${rpm_url}/openssh-clients-7.4p1-21.el7.armv7hl.rpm \ -${rpm_url}/openssh-7.4p1-21.el7.armv7hl.rpm \ -${rpm_url}/openssl-devel-1.0.2k-19.el7.armv7hl.rpm \ -${rpm_url}/openssl-libs-1.0.2k-19.el7.armv7hl.rpm \ -${rpm_url}/pam-1.1.8-23.el7.armv7hl.rpm \ -${rpm_url}/patch-2.7.1-12.el7_7.armv7hl.rpm \ -${rpm_url}/patchelf-0.9-10.el7.armv7hl.rpm \ -${rpm_url}/pcre-8.32-17.el7.armv7hl.rpm \ -${rpm_url}/perl-Carp-1.26-244.el7.noarch.rpm \ -${rpm_url}/perl-Data-Dumper-2.145-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Error-0.17020-2.el7.noarch.rpm \ -${rpm_url}/perl-Exporter-5.68-3.el7.noarch.rpm \ -${rpm_url}/perl-File-Path-2.09-2.el7.noarch.rpm \ -${rpm_url}/perl-File-Temp-0.23.01-3.el7.noarch.rpm \ -${rpm_url}/perl-Getopt-Long-2.40-3.el7.noarch.rpm \ -${rpm_url}/perl-Git-1.8.3.1-21.el7_7.noarch.rpm \ -${rpm_url}/perl-PathTools-3.40-5.el7.armv7hl.rpm \ -${rpm_url}/perl-TermReadKey-2.30-20.el7.armv7hl.rpm \ -${rpm_url}/perl-Test-Harness-3.28-3.el7.noarch.rpm \ -${rpm_url}/perl-Text-ParseWords-3.29-4.el7.noarch.rpm \ -${rpm_url}/perl-Thread-Queue-3.02-2.el7.noarch.rpm \ -${rpm_url}/perl-constant-1.27-2.el7.noarch.rpm \ -${rpm_url}/perl-srpm-macros-1-8.el7.noarch.rpm \ -${rpm_url}/perl-threads-1.87-4.el7.armv7hl.rpm \ -${rpm_url}/perl-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/pinentry-0.8.1-17.el7.armv7hl.rpm \ -${rpm_url}/pkgconfig-0.27.1-4.el7.armv7hl.rpm \ -${rpm_url}/policycoreutils-python-2.5-34.el7.armv7hl.rpm \ -${rpm_url}/policycoreutils-2.5-34.el7.armv7hl.rpm \ -${rpm_url}/popt-devel-1.13-16.el7.armv7hl.rpm \ -${rpm_url}/popt-1.13-16.el7.armv7hl.rpm \ -${rpm_url}/pth-2.0.7-23.el7.armv7hl.rpm \ -${rpm_url}/python-IPy-0.75-6.el7.noarch.rpm \ -${rpm_url}/python-kitchen-1.1.1-5.el7.noarch.rpm \ -${rpm_url}/python-libs-2.7.5-88.el7.armv7hl.rpm \ -${rpm_url}/python-rpm-macros-3-32.el7.noarch.rpm \ -${rpm_url}/python-srpm-macros-3-32.el7.noarch.rpm \ -${rpm_url}/python-2.7.5-88.el7.armv7hl.rpm \ -${rpm_url}/python34-libs-3.4.10-4.el7.armv7hl.rpm \ -${rpm_url}/python34-3.4.10-4.el7.armv7hl.rpm \ -${rpm_url}/readline-devel-6.2-11.el7.armv7hl.rpm \ -${rpm_url}/readline-6.2-11.el7.armv7hl.rpm \ -${rpm_url}/redhat-rpm-config-9.1.0-88.el7.centos.noarch.rpm \ -${rpm_url}/rpm-build-libs-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-build-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-devel-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-libs-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rpm-4.11.3-43.el7.armv7hl.rpm \ -${rpm_url}/rsync-3.1.2-10.el7.armv7hl.rpm \ -${rpm_url}/sed-4.2.2-6.el7.armv7hl.rpm \ -${rpm_url}/setools-libs-3.3.8-4.el7.armv7hl.rpm \ -${rpm_url}/sharutils-4.13.3-8.el7.armv7hl.rpm \ -${rpm_url}/snappy-1.1.0-3.el7.armv7hl.rpm \ -${rpm_url}/sqlite-devel-3.7.17-8.el7_7.1.armv7hl.rpm \ -${rpm_url}/sqlite-3.7.17-8.el7_7.1.armv7hl.rpm \ -${rpm_url}/sudo-1.8.23-9.el7.armv7hl.rpm \ -${rpm_url}/systemd-219-73.el7.1.armv7hl.rpm \ -${rpm_url}/tar-1.26-35.el7.armv7hl.rpm \ -${rpm_url}/tcl-devel-8.5.13-8.el7.armv7hl.rpm \ -${rpm_url}/tcl-8.5.13-8.el7.armv7hl.rpm \ -${rpm_url}/tix-devel-8.4.3-12.el7.armv7hl.rpm \ -${rpm_url}/tix-8.4.3-12.el7.armv7hl.rpm \ -${rpm_url}/tk-devel-8.5.13-6.el7.armv7hl.rpm \ -${rpm_url}/tk-8.5.13-6.el7.armv7hl.rpm \ -${rpm_url}/unzip-6.0-21.el7.armv7hl.rpm \ -${rpm_url}/valgrind-devel-3.15.0-11.el7.armv7hl.rpm \ -${rpm_url}/valgrind-3.15.0-11.el7.armv7hl.rpm \ -${rpm_url}/vim-minimal-7.4.629-6.el7.armv7hl.rpm \ -${rpm_url}/xorg-x11-proto-devel-2018.4-1.el7.noarch.rpm \ -${rpm_url}/xz-devel-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/xz-libs-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/xz-5.2.2-1.el7.armv7hl.rpm \ -${rpm_url}/yum-utils-1.1.31-53.el7.noarch.rpm \ -${rpm_url}/yum-3.4.3-167.el7.centos.noarch.rpm \ -${rpm_url}/zip-3.0-11.el7.armv7hl.rpm \ -${rpm_url}/zlib-devel-1.2.7-18.el7.armv7hl.rpm \ -${rpm_url}/zlib-1.2.7-18.el7.armv7hl.rpm \ -${rpm_url}/fipscheck-1.4.1-6.el7.armv7hl.rpm \ -${rpm_url}/libatomic-4.8.5-39.el7.armv7hl.rpm \ -${rpm_url}/jasper-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-devel-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-libs-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/jasper-utils-1.900.1-33.el7.armv7hl.rpm \ -${rpm_url}/kernel-headers-5.4.28-200.el7.armv7hl.rpm \ -${rpm_url}/glibc-common-2.17-307.el7.1.armv7hl.rpm \ -${rpm_url}/keyutils-libs-devel-1.5.8-3.el7.armv7hl.rpm \ -${rpm_url}/libmnl-1.0.3-7.el7.armv7hl.rpm \ -${rpm_url}/iptables-1.4.21-34.el7.armv7hl.rpm \ -${rpm_url}/iptables-devel-1.4.21-34.el7.armv7hl.rpm \ -${rpm_url}/hostname-3.13-3.el7_7.1.armv7hl.rpm \ -${rpm_url}/initscripts-9.49.49-1.el7.armv7hl.rpm \ -${rpm_url}/dhcp-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-devel-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-libs-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/dhcp-common-4.2.5-79.el7.centos.armv7hl.rpm \ -${rpm_url}/bind-export-devel-9.11.4-16.P2.el7.armv7hl.rpm \ -${rpm_url}/bind-export-libs-9.11.4-16.P2.el7.armv7hl.rpm \ -${rpm_url}/libkadm5-1.15.1-46.el7.armv7hl.rpm \ -${rpm_url}/libselinux-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libselinux-devel-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/libverto-0.2.5-4.el7.armv7hl.rpm \ -${rpm_url}/libverto-devel-0.2.5-4.el7.armv7hl.rpm \ -${rpm_url}/groff-base-1.22.2-8.el7.armv7hl.rpm \ -${rpm_url}/libX11-common-1.6.7-2.el7.noarch.rpm \ -${rpm_url}/libxcb-devel-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/libXft-2.3.2-2.el7.armv7hl.rpm \ -${rpm_url}/pkgconfig-0.27.1-4.el7.armv7hl.rpm \ -${rpm_url}/glib-networking-2.56.1-1.el7.armv7hl.rpm \ -${rpm_url}/libxcb-1.13-1.el7.armv7hl.rpm \ -${rpm_url}/groff-base-1.22.2-8.el7.armv7hl.rpm \ -${rpm_url}/libpipeline-1.2.3-3.el7.armv7hl.rpm \ -${rpm_url}/ncurses-5.9-14.20130511.el7_4.armv7hl.rpm \ -${rpm_url}/ncurses-base-5.9-14.20130511.el7_4.noarch.rpm \ -${rpm_url}/nss-softokn-freebl-devel-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/nss-softokn-freebl-3.44.0-8.el7_7.armv7hl.rpm \ -${rpm_url}/perl-libs-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/perl-Scalar-List-Utils-1.27-248.el7.armv7hl.rpm \ -${rpm_url}/perl-Pod-Usage-1.63-3.el7.noarch.rpm \ -${rpm_url}/perl-Time-Local-1.2300-2.el7.noarch.rpm \ -${rpm_url}/perl-Pod-Simple-3.28-4.el7.noarch.rpm \ -${rpm_url}/perl-threads-shared-1.43-6.el7.armv7hl.rpm \ -${rpm_url}/perl-macros-5.16.3-295.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-devel-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/libjpeg-turbo-utils-1.2.90-8.el7.armv7hl.rpm \ -${rpm_url}/freetype-2.8-14.el7.armv7hl.rpm \ -${rpm_url}/freetype-devel-2.8-14.el7.armv7hl.rpm \ -${rpm_url}/fontconfig-2.13.0-4.3.el7.armv7hl.rpm \ -${rpm_url}/fontconfig-devel-2.13.0-4.3.el7.armv7hl.rpm \ -${rpm_url}/libXrender-0.9.10-1.el7.armv7hl.rpm \ -${rpm_url}/libXrender-devel-0.9.10-1.el7.armv7hl.rpm \ -${rpm_url}/libXau-1.0.8-2.1.el7.armv7hl.rpm \ -${rpm_url}/libXau-devel-1.0.8-2.1.el7.armv7hl.rpm \ -${rpm_url}/perl-Filter-1.49-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Socket-2.010-5.el7.armv7hl.rpm \ -${rpm_url}/perl-Storable-2.45-3.el7.armv7hl.rpm \ -${rpm_url}/perl-Time-HiRes-1.9725-3.el7.armv7hl.rpm \ -${rpm_url}/libselinux-utils-2.5-15.el7.armv7hl.rpm \ -${rpm_url}/systemd-libs-219-73.el7.1.armv7hl.rpm \ -${rpm_url}/libglvnd-glx-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGLU-9.0.0-4.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGLU-devel-9.0.0-4.el7.armv7hl.rpm \ -${rpm_url}/freeglut-3.0.0-8.el7.armv7hl.rpm \ -${rpm_url}/freeglut-devel-3.0.0-8.el7.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-devel-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnfnetlink-1.0.1-4.el7.armv7hl.rpm \ -${rpm_url}/libnfnetlink-devel-1.0.1-4.el7.armv7hl.rpm \ -${rpm_url}/sysvinit-tools-2.88-14.dsf.el7.armv7hl.rpm \ -${rpm_url}/libcap-devel-2.22-11.el7.armv7hl.rpm \ -${rpm_url}/libcap-2.22-11.el7.armv7hl.rpm \ -${rpm_url}/libsepol-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libsepol-devel-2.5-10.el7.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/libnetfilter_conntrack-devel-1.0.6-1.el7_3.armv7hl.rpm \ -${rpm_url}/glib2-devel-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/glib2-2.56.1-5.el7.armv7hl.rpm \ -${rpm_url}/gsettings-desktop-schemas-devel-3.28.0-3.el7.armv7hl.rpm \ -${rpm_url}/gsettings-desktop-schemas-3.28.0-3.el7.armv7hl.rpm \ -${rpm_url}/gnutls-3.3.29-9.el7_6.armv7hl.rpm \ -${rpm_url}/libproxy-0.4.11-11.el7.armv7hl.rpm \ -${rpm_url}/libproxy-devel-0.4.11-11.el7.armv7hl.rpm \ -${rpm_url}/perl-podlators-2.5.1-3.el7.noarch.rpm \ -${rpm_url}/perl-Pod-Perldoc-3.20-4.el7.noarch.rpm \ -${rpm_url}/perl-Encode-2.51-7.el7.armv7hl.rpm \ -${rpm_url}/perl-Pod-Escapes-1.04-295.el7.noarch.rpm \ -${rpm_url}/dejavu-sans-fonts-2.33-6.el7.noarch.rpm \ -${rpm_url}/fontpackages-filesystem-1.44-8.el7.noarch.rpm \ -${rpm_url}/libglvnd-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/libXext-1.3.3-3.el7.armv7hl.rpm \ -${rpm_url}/libXext-devel-1.3.3-3.el7.armv7hl.rpm \ -${rpm_url}/libglvnd-1.0.1-0.8.git5baa1e5.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGL-18.3.4-7.el7.armv7hl.rpm \ -${rpm_url}/mesa-libGL-devel-18.3.4-7.el7.armv7hl.rpm \ -${rpm_url}/gl-manpages-1.1-7.20130122.el7.noarch.rpm \ -${rpm_url}/libICE-1.0.9-9.el7.armv7hl.rpm \ -${rpm_url}/libICE-devel-1.0.9-9.el7.armv7hl.rpm \ -${rpm_url}/jq-1.6-2.el7.armv7hl.rpm \ No newline at end of file diff --git a/wpk/linux/armv7hl/entrypoint.sh b/wpk/linux/armv7hl/entrypoint.sh deleted file mode 100755 index 018e2f9634..0000000000 --- a/wpk/linux/armv7hl/entrypoint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -/usr/bin/linux32 /usr/local/bin/run "$@" \ No newline at end of file diff --git a/wpk/linux/x86_64/CentOS-Base.repo b/wpk/linux/x86_64/CentOS-Base.repo deleted file mode 100644 index 42bbb92497..0000000000 --- a/wpk/linux/x86_64/CentOS-Base.repo +++ /dev/null @@ -1,54 +0,0 @@ -# CentOS-Base.repo -# -# The mirror system uses the connecting IP address of the client and the -# update status of each mirror to pick mirrors that are updated to and -# geographically close to the client. You should use this for CentOS updates -# unless you are manually picking other mirrors. -# -# If the mirrorlist= does not work for you, as a fall back you can try the -# remarked out baseurl= line instead. -# -# - -[base] -name=CentOS-$releasever - Base -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/os/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#released updates -[updates] -name=CentOS-$releasever - Updates -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/updates/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that may be useful -[extras] -name=CentOS-$releasever - Extras -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/extras/$basearch/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that extend functionality of existing packages -[centosplus] -name=CentOS-$releasever - Plus -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/centosplus/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#contrib - packages by Centos Users -[contrib] -name=CentOS-$releasever - Contrib -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/contrib/$basearch/ -gpgcheck=1 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -# SCLO - packages -[centos-sclo-sclo] -name=CentOS-$releasever - SCLO -baseurl=http://mirror.nsc.liu.se/centos-store/6.10/sclo/$basearch/rh/ -gpgcheck=1 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 \ No newline at end of file diff --git a/wpk/linux/x86_64/Dockerfile b/wpk/linux/x86_64/Dockerfile deleted file mode 100644 index fc66af8f51..0000000000 --- a/wpk/linux/x86_64/Dockerfile +++ /dev/null @@ -1,67 +0,0 @@ -FROM centos:6 - -RUN rm /etc/yum.repos.d/* && echo "exactarch=1" >> /etc/yum.conf -COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo - -RUN yum -y install epel-release && \ - yum -y install gcc make git gcc-c++ \ - jq sudo gnupg automake \ - autoconf wget libtool policycoreutils-python \ - yum-utils epel-release redhat-rpm-config rpm-devel \ - autopoint gettext nspr nspr-devel \ - nss nss-devel kenel-headers magic magic-devel \ - db4 db4-devel zlib zlib-devel rpm-build bison \ - sharutils bzip2-devel xz-devel lzo-devel \ - e2fsprogs-devel libacl-devel libattr-devel \ - openssl-devel libxml2-devel kexec-tools elfutils \ - libarchive-devel elfutils-libelf-devel \ - elfutils-libelf patchelf elfutils-devel libgcrypt-devel - -RUN curl -OL http://packages.wazuh.com/utils/perl/perl-5.10.1.tar.gz && \ - gunzip perl-5.10.1.tar.gz && tar -xf perl*.tar && \ - cd /perl-5.10.1 && ./Configure -des -Dcc='gcc' -Dusethreads && \ - make -j2 && make install && ln -fs /usr/local/bin/perl /bin/perl && \ - cd / && rm -rf /perl-5.10.1* - -RUN curl -OL http://packages.wazuh.com/utils/gcc/gcc-9.4.0.tar.gz && \ - tar xzf gcc-9.4.0.tar.gz && cd gcc-9.4.0/ && \ - ./contrib/download_prerequisites && \ - ./configure --prefix=/usr/local/gcc-9.4.0 --enable-languages=c,c++ \ - --disable-multilib --disable-libsanitizer && \ - make -j$(nproc) && make install && \ - ln -fs /usr/local/gcc-9.4.0/bin/g++ /usr/bin/c++ && \ - ln -fs /usr/local/gcc-9.4.0/bin/gcc /usr/bin/cc && cd / && rm -rf gcc-* - -ENV CPLUS_INCLUDE_PATH "/usr/local/gcc-9.4.0/include/c++/9.4.0/" -ENV LD_LIBRARY_PATH "/usr/local/gcc-9.4.0/lib64/" -ENV PATH "/usr/local/gcc-9.4.0/bin:${PATH}" - -RUN curl -OL http://packages.wazuh.com/utils/cmake/cmake-3.18.3.tar.gz && \ - tar -zxf cmake-3.18.3.tar.gz && cd cmake-3.18.3 && \ - ./bootstrap --no-system-curl CC=/usr/local/gcc-9.4.0/bin/gcc \ - CXX=/usr/local/gcc-9.4.0/bin/g++ && \ - make -j$(nproc) && make install && cd / && rm -rf cmake-* - -RUN curl -OL http://packages.wazuh.com/utils/openssl/openssl-1.1.1a.tar.gz && \ - tar xf openssl-1.1.1a.tar.gz && cd openssl-1.1.1a && \ - ./config --prefix=/usr/ --openssldir=/usr/ shared zlib && \ - make -j$(nproc) && make install && echo "/usr/lib" > /etc/ld.so.conf.d/openssl-1.1.1a.conf && \ - ldconfig -v && cd / && rm -rf openssl-1.1.1a* - -RUN yum install zlib-devel libffi-devel -y - -RUN wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tgz - -RUN tar xvf Python-3.7.16.tgz - -RUN cd Python-3.7.16 && \ - ./configure && \ - make && \ - make install - -RUN pip3 install cryptography==2.9.2 typing awscli -RUN pip3 install --upgrade botocore==1.33.9 - -ADD wpkpack.py /usr/local/bin/wpkpack -ADD run.sh /usr/local/bin/run -ENTRYPOINT ["/usr/local/bin/run"] diff --git a/wpk/run.sh b/wpk/run.sh deleted file mode 100755 index 5b3ec89150..0000000000 --- a/wpk/run.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/bin/bash -set -x -DIRECTORY="wazuh*" -REPOSITORY="https://github.com/wazuh/wazuh" -REFERENCE="" -JOBS="4" -OUT_NAME="" -CHECKSUM="no" -INSTALLATION_PATH="/var/ossec" -PKG_NAME="" -HAVE_PKG_NAME_WIN=false -HAVE_PKG_NAME_MAC=false -AWS_REGION="us-east-1" -KEYPATH="/etc/wazuh" -WPKCERT="${KEYPATH}/wpkcert.pem" -WPKKEY="${KEYPATH}/wpkcert.key" -OUTDIR="/var/local/wazuh" -CHECKSUMDIR="/var/local/checksum" -REVISION="1" - -if command -v python3 > /dev/null ; then - PYTHON="python3" -else - PYTHON="" -fi - -help() { - echo - echo "Usage: ${0} [OPTIONS]" - echo "It is required to use -k or --aws-wpk-key, --aws-wpk-cert parameters" - echo - echo " -b, --branch [Required] Select Git branch or tag e.g. master" - echo " -o, --output [Required] Name to the output package." - echo " -pn, --package-name [Required for windows and macos] Package name to pack on wpk." - echo " -r, --revision [Optional] Revision of the package. By default: 1." - echo " -p, --path [Optional] Installation path for the package. By default: /var." - echo " -j, --jobs [Optional] Number of parallel jobs when compiling." - echo " -c, --checksum [Optional] Whether Generate checksum or not." - echo " --aws-wpk-key [Optional] AWS Secrets manager Name/ARN to get WPK private key." - echo " --aws-wpk-cert [Optional] AWS secrets manager Name/ARN to get WPK certificate." - echo " --aws-wpk-key-region [Optional] AWS Region where secrets are stored." - echo " -h, --help Show this help." - echo - exit ${1} -} - -main() { - while [ -n "${1}" ] - do - case "${1}" in - "-b"|"--branch") - if [ -n "${2}" ]; then - REFERENCE="$(echo ${2} | cut -d'/' -f2)" - shift 2 - else - echo "ERROR: Missing branch." - help 1 - fi - ;; - "-o"|"--output") - if [ -n "${2}" ]; then - OUT_NAME="${2}" - shift 2 - else - echo "ERROR: Missing output name." - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "${2}" ]; then - REVISION="${2}" - shift 2 - fi - ;; - "-p"|"--path") - if [ -n "${2}" ]; then - INSTALLATION_PATH="${2}" - shift 2 - fi - ;; - "-pn"|"--package-name") - if [ -n "${2}" ]; then - PKG_NAME="${2}" - if [ "${PKG_NAME: -4}" == ".msi" ]; then - HAVE_PKG_NAME_WIN=true - elif [ "${PKG_NAME: -4}" == ".pkg" ]; then - HAVE_PKG_NAME_MAC=true - fi - shift 2 - fi - ;; - "-j"|"--jobs") - if [ -n "${2}" ]; then - JOBS="${2}" - shift 2 - fi - ;; - "-c"|"--checksum") - CHECKSUM="yes" - shift 1 - ;; - "--aws-wpk-key") - if [ -n "${2}" ]; then - AWS_WPK_KEY="${2}" - shift 2 - fi - ;; - "--aws-wpk-cert") - if [ -n "${2}" ]; then - AWS_WPK_CERT="${2}" - shift 2 - fi - ;; - "--aws-wpk-key-region") - if [ -n "${2}" ]; then - AWS_REGION="${2}" - shift 2 - fi - ;; - "-h"|"--help") - help 0 - ;; - *) - help 1 - esac - done - - if [ -n "${AWS_WPK_CERT}" ] && [ -n "${AWS_WPK_KEY}" ]; then - mkdir -p ${KEYPATH} - aws --region=${AWS_REGION} secretsmanager get-secret-value --secret-id ${AWS_WPK_CERT} | jq . > wpkcert.pem.json - jq .SecretString wpkcert.pem.json | tr -d '"' | sed 's|\\n|\n|g' > ${WPKCERT} - rm -f wpkcert.pem.json - aws --region=${AWS_REGION} secretsmanager get-secret-value --secret-id ${AWS_WPK_KEY} | jq . > wpkcert.key.json - jq .SecretString wpkcert.key.json | tr -d '"' | sed 's|\\n|\n|g' > ${WPKKEY} - rm -f wpkcert.key.json - fi - - - NO_COMPILE=false - # Get Wazuh - curl -sL ${REPOSITORY}/tarball/${REFERENCE} | tar zx - cd ${DIRECTORY} - - # Get info - . src/init/dist-detect.sh - VERSION=$(cat src/VERSION) - SHORT_VERSION=$(cat src/VERSION | cut -dv -f2) - ARCH=$(uname -m) - - # Create package - if [ -z "${OUTPUT}" ] - then - if [ "${DIST_NAME}" = "centos" ] - then - BUILD_TARGET="agent" - NO_COMPILE=false - else - BUILD_TARGET="winagent" - NO_COMPILE=true - fi - OUTPUT="${OUTDIR}/${OUT_NAME}" - - mkdir -p ${OUTDIR} - fi - - WAZUH_VERSION=$(cat src/VERSION) - MAJOR=$(echo ${WAZUH_VERSION} | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo ${WAZUH_VERSION} | cut -d. -f2) - - if [ "${NO_COMPILE}" == false ]; then - # Execute gmake deps if the version is greater or equal to 3.5 - if [[ ${MAJOR} -ge 4 || (${MAJOR} -ge 3 && ${MINOR} -ge 5) ]]; then - make -C src deps TARGET=${BUILD_TARGET} - fi - - # Compile agent - make -C src -j ${JOBS} TARGET=${BUILD_TARGET} || exit 1 - # Clean unuseful files - clean - # Preload vars for installer - preload - fi - - # Compress and sign package - if [ "${DIST_NAME}" = "centos" ]; then - ${PYTHON} /usr/local/bin/wpkpack ${OUTPUT} ${WPKCERT} ${WPKKEY} * - else - - if [ "${HAVE_PKG_NAME_WIN}" == true ]; then - CURRENT_DIR=$(pwd) - echo "wpkpack ${OUTPUT} ${WPKCERT} ${WPKKEY} ${PKG_NAME} upgrade.bat do_upgrade.ps1" - cd ${OUTDIR} - cp ${CURRENT_DIR}/src/win32/{upgrade.bat,do_upgrade.ps1} . - cp /var/pkg/${PKG_NAME} ${OUTDIR} 2>/dev/null - wpkpack ${OUTPUT} ${WPKCERT} ${WPKKEY} ${PKG_NAME} upgrade.bat do_upgrade.ps1 - rm -f upgrade.bat do_upgrade.ps1 ${PKG_NAME} - elif [ "${HAVE_PKG_NAME_MAC}" == true ]; then - CURRENT_DIR=$(pwd) - echo "wpkpack ${OUTPUT} ${WPKCERT} ${WPKKEY} ${PKG_NAME} upgrade.sh pkg_installer_mac.sh" - cd ${OUTDIR} - cp ${CURRENT_DIR}/src/init/pkg_installer_mac.sh . - cp ${CURRENT_DIR}/upgrade.sh . - cp /var/pkg/${PKG_NAME} ${OUTDIR} 2>/dev/null - wpkpack ${OUTPUT} ${WPKCERT} ${WPKKEY} ${PKG_NAME} upgrade.sh pkg_installer_mac.sh - rm -f upgrade.sh pkg_installer_mac.sh ${PKG_NAME} - else - echo "ERROR: MSI/PKG package is needed to build the Windows or macOS WPK" - help 1 - fi - fi - echo "PACKED FILE -> ${OUTPUT}" - cd ${OUTDIR} - if [[ ${CHECKSUM} == "yes" ]]; then - mkdir -p ${CHECKSUMDIR} - sha512sum "${OUT_NAME}" > "${CHECKSUMDIR}/${OUT_NAME}.sha512" - fi -} - -clean() { - rm -rf ./{api,framework} - rm -rf doc gen_ossec.sh add_localfiles.sh Jenkinsfile* - rm -rf src/{addagent,analysisd,client-agent,config,error_messages,external/*} - rm -rf src/{headers,logcollector,monitord,os_auth,os_crypto,os_csyslogd} - rm -rf src/{os_dbd,os_execd,os_integrator,os_maild,os_net,os_regex,os_xml,os_zlib} - rm -rf src/{remoted,reportd,shared,unit_tests,wazuh_db} - - # Clean syscheckd folder - find src/syscheckd -type f -not -name "wazuh-syscheckd" -not -name "libfimdb.dylib" -not -name "libfimdb.so" -delete - - - if [[ "${BUILD_TARGET}" != "winagent" ]]; then - rm -rf src/win32 - fi - - rm -rf src/*.a - - find etc/templates/config -not -name "sca.files" -delete 2>/dev/null - find etc/templates/* -maxdepth 0 -not -name "en" -not -name "config" | xargs rm -rf -} - -preload() { - echo 'USER_UPDATE="y"' > etc/preloaded-vars.conf - echo 'USER_LANGUAGE="en"' >> etc/preloaded-vars.conf - echo 'USER_NO_STOP="y"' >> etc/preloaded-vars.conf - echo 'USER_BINARYINSTALL="y"'>> etc/preloaded-vars.conf - if [[ "${BUILD_TARGET}" != "winagent" ]]; then - echo 'USER_INSTALL_TYPE="agent"' >> etc/preloaded-vars.conf - else - echo 'USER_INSTALL_TYPE="winagent"' >> etc/preloaded-vars.conf - fi -} - -if [ "${BASH_SOURCE[0]}" = "${0}" ] -then - main "$@" -fi diff --git a/wpk/wpkpack.py b/wpk/wpkpack.py deleted file mode 100755 index 8ae6a90021..0000000000 --- a/wpk/wpkpack.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 - -# Tool to build and compress the WPK package -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -from io import SEEK_SET, SEEK_END -from sys import argv, stderr, exit -from tempfile import mkstemp -from os import listdir, remove, close -from os.path import isfile, isdir -import gzip -from shutil import copyfileobj -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives.asymmetric import padding, utils -from cryptography.hazmat.primitives import serialization, hashes - -MAGIC = b'WPK256\0' -HASH = hashes.SHA256() -PADDING = padding.PKCS1v15() -BUFLEN = 4096 - - -def mergecreate(path, tag = None): - with open(path, 'w') as f: - if tag: - f.write('#{0}\n'.format(tag)) - - -def mergeappend(merged, sources): - with open(merged, 'ab') as f: - for s in sources: - _mergeappend(f, s) - -def _mergeappend(fm, source): - if isfile(source): - with open(source, 'rb') as fs: - fs.seek(0, SEEK_END) - size = fs.tell() - fs.seek(0, SEEK_SET) - fm.write('!{0} {1}\n'.format(size, source).encode()) - copyfileobj(fs, fm) - elif isdir(source): - for d in listdir(source): - _mergeappend(fm, '{0}/{1}'.format(source, d)) - else: - raise Exception - - -def compress(source, target): - with open(source, 'rb') as fin: - with gzip.open(target, 'wb') as fout: - copyfileobj(fin, fout) - - -def sign(source_path, target_path, cert_path, priv_path): - hasher = hashes.Hash(HASH, default_backend()) - - with open(priv_path, 'rb') as fkey: - key = serialization.load_pem_private_key(fkey.read(), password=None, backend=default_backend()) - - with open(source_path, 'rb') as filein: - buf = filein.read(BUFLEN) - - while buf: - hasher.update(buf) - buf = filein.read(BUFLEN) - - digest = hasher.finalize() - signature = key.sign(digest, PADDING, utils.Prehashed(HASH)) - - with open(target_path, 'wb') as fileout: - fileout.write(MAGIC) - - with open(cert_path, 'rb') as filecert: - copyfileobj(filecert, fileout) - - fileout.write(b'\0' + signature) - filein.seek(0, SEEK_SET) - copyfileobj(filein, fileout) - - -if __name__ == '__main__': - if len(argv) < 4: - stderr.write('Syntax: {0} [ ... ]\n'.format(argv[0])) - exit(1) - - pack = argv[1] - fd, merged = mkstemp() - close(fd) - - try: - mergecreate(merged, pack) - mergeappend(merged, argv[4:]) - except Exception as error: - remove(merged) - raise error - - fd, zipped = mkstemp() - close(fd) - compress(merged, zipped) - remove(merged) - - try: - sign(zipped, pack, argv[2], argv[3]) - finally: - remove(zipped) From 171f48ce958aaaad69e42d73e683e99c4e546877 Mon Sep 17 00:00:00 2001 From: Raul Del Pozo Moreno Date: Wed, 7 Aug 2024 13:28:21 +0200 Subject: [PATCH 03/17] Removed deprecated code --- alpine/SPECS/wazuh-agent/APKBUILD | 74 ----- .../wazuh-agent/wazuh-agent.post-deinstall | 21 -- .../wazuh-agent/wazuh-agent.post-install | 17 -- .../wazuh-agent/wazuh-agent.post-upgrade | 15 - .../wazuh-agent/wazuh-agent.pre-deinstall | 11 - .../SPECS/wazuh-agent/wazuh-agent.pre-install | 18 -- .../SPECS/wazuh-agent/wazuh-agent.pre-upgrade | 14 - alpine/build_package.sh | 278 ------------------ alpine/builder.sh | 92 ------ alpine/docker/aarch64/Dockerfile | 14 - alpine/docker/armhf/Dockerfile | 14 - alpine/docker/armv7/Dockerfile | 14 - alpine/docker/ppc64le/Dockerfile | 14 - alpine/docker/x86/Dockerfile | 14 - alpine/docker/x86_64/Dockerfile | 14 - arch/Arch/Dockerfile | 16 - arch/README.md | 21 -- arch/SPECS/wazuh-agent/arch/PKGBUILD | 128 -------- arch/SPECS/wazuh-agent/arch/wazuh.install | 134 --------- arch/SPECS/wazuh-agent/arch/wazuh.sysusers | 2 - arch/build.sh | 149 ---------- arch/generate_arch_package.sh | 239 --------------- splunkapp/Docker/Dockerfile | 14 - splunkapp/Docker/build.sh | 54 ---- splunkapp/README.md | 30 -- splunkapp/generate_wazuh_splunk_app.sh | 128 -------- 26 files changed, 1539 deletions(-) delete mode 100644 alpine/SPECS/wazuh-agent/APKBUILD delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.post-deinstall delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.post-install delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.post-upgrade delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.pre-deinstall delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.pre-install delete mode 100644 alpine/SPECS/wazuh-agent/wazuh-agent.pre-upgrade delete mode 100755 alpine/build_package.sh delete mode 100644 alpine/builder.sh delete mode 100644 alpine/docker/aarch64/Dockerfile delete mode 100644 alpine/docker/armhf/Dockerfile delete mode 100644 alpine/docker/armv7/Dockerfile delete mode 100644 alpine/docker/ppc64le/Dockerfile delete mode 100644 alpine/docker/x86/Dockerfile delete mode 100644 alpine/docker/x86_64/Dockerfile delete mode 100644 arch/Arch/Dockerfile delete mode 100644 arch/README.md delete mode 100644 arch/SPECS/wazuh-agent/arch/PKGBUILD delete mode 100644 arch/SPECS/wazuh-agent/arch/wazuh.install delete mode 100644 arch/SPECS/wazuh-agent/arch/wazuh.sysusers delete mode 100755 arch/build.sh delete mode 100755 arch/generate_arch_package.sh delete mode 100644 splunkapp/Docker/Dockerfile delete mode 100755 splunkapp/Docker/build.sh delete mode 100644 splunkapp/README.md delete mode 100755 splunkapp/generate_wazuh_splunk_app.sh diff --git a/alpine/SPECS/wazuh-agent/APKBUILD b/alpine/SPECS/wazuh-agent/APKBUILD deleted file mode 100644 index fe18cafb07..0000000000 --- a/alpine/SPECS/wazuh-agent/APKBUILD +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor: Wazuh, Inc -# Maintainer: Wazuh, Inc -pkgname="wazuh-agent" -pkgver="${version}" -pkgrel="${revision}" -pkgdesc="Wazuh helps you to gain security visibility into your infrastructure." -url="https://www.wazuh.com/" -arch="${architecture}" -license="GPL" -depends="busybox procps" -makedepends="make cmake git openssl-dev libgcc gcc automake autoconf libtool" -checkdepends="" -install="${pkgname}.pre-install ${pkgname}.post-install ${pkgname}.pre-upgrade ${pkgname}.post-upgrade ${pkgname}.pre-deinstall ${pkgname}.post-deinstall" -subpackages="" -source="" -builddir="${srcdir}" -options="!check" - -build() { - set -x - cp -r /wazuh* ./ - cd wazuh*/src - - make deps TARGET=agent EXTERNAL_SRC_ONLY=yes - make -j"${jobs}" TARGET=agent DEBUG="${debug}" - - cd .. - echo 'USER_LANGUAGE="en"' > ./etc/preloaded-vars.conf - echo 'USER_NO_STOP="y"' >> ./etc/preloaded-vars.conf - echo 'USER_INSTALL_TYPE="agent"' >> ./etc/preloaded-vars.conf - echo 'USER_DIR="${directory_base}"' >> ./etc/preloaded-vars.conf - echo 'USER_DELETE_DIR="y"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_ACTIVE_RESPONSE="y"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_SYSCHECK="y"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_ROOTCHECK="y"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_OPENSCAP="n"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_SYSCOLLECTOR="y"' >> ./etc/preloaded-vars.conf - echo 'USER_ENABLE_CISCAT="y"' >> ./etc/preloaded-vars.conf - echo 'USER_UPDATE="n"' >> ./etc/preloaded-vars.conf - echo 'USER_AGENT_SERVER_IP="MANAGER_IP"' >> ./etc/preloaded-vars.conf - echo 'USER_CA_STORE="/path/to/my_cert.pem"' >> ./etc/preloaded-vars.conf - echo 'USER_AUTO_START="n"' >> ./etc/preloaded-vars.conf - ./install.sh -} - -package() { - set -x - rootdir="${builddir}/.." - - install -d "${pkgdir}/${directory_base}" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.pre-install" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.post-install" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.pre-upgrade" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.post-upgrade" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.pre-deinstall" - sed -i "s|DIRECTORY_BASE|${directory_base}|g" "${rootdir}/${pkgname}.post-deinstall" - cp -a "${directory_base}"/* "${pkgdir}${directory_base}" - - package_files_dir="${pkgdir}${directory_base}/packages_files" - mkdir -p "${pkgdir}${directory_base}/packages_files/src/init" - mkdir -p "${pkgdir}${directory_base}/packages_files/etc/templates/config/generic/localfile-logs" - mkdir -p "${pkgdir}${directory_base}/packages_files/etc/templates/config/alpine" - cp -a /wazuh-wazuh*/gen_ossec.sh "${package_files_dir}" - cp -a /wazuh-wazuh*/add_localfiles.sh "${package_files_dir}" - cp -a /wazuh-wazuh*/src/init/dist-detect.sh "${package_files_dir}/src/init" - cp -a /wazuh-wazuh*/src/init/shared.sh "${package_files_dir}/src/init" - cp -a /wazuh-wazuh*/src/init/inst-functions.sh "${package_files_dir}/src/init" - cp -a /wazuh-wazuh*/src/init/template-select.sh "${package_files_dir}/src/init" - cp -a /wazuh-wazuh*/src/VERSION "${package_files_dir}/src" - cp -a /wazuh-wazuh*/src/REVISION "${package_files_dir}/src" - cp -a /wazuh-wazuh*/etc/templates/config/generic/* "${package_files_dir}/etc/templates/config/generic" - cp -a /wazuh-wazuh*/etc/templates/config/alpine/* "${package_files_dir}/etc/templates/config/alpine" -} - diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.post-deinstall b/alpine/SPECS/wazuh-agent/wazuh-agent.post-deinstall deleted file mode 100644 index 16e291a485..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.post-deinstall +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# add something which happens after deinstall - -directory_base="DIRECTORY_BASE" - -# Remove the wazuh user if it exists -if id -u wazuh > /dev/null 2>&1; then - deluser wazuh > /dev/null 2>&1 -fi -# Remove the wazuh group if it exists -if command -v getent > /dev/null 2>&1 && getent group wazuh > /dev/null 2>&1; then - delgroup wazuh > /dev/null 2>&1 -elif id -g wazuh > /dev/null 2>&1; then - delgroup wazuh > /dev/null 2>&1 -fi - -# Remove lingering folders and files -rm -rf ${directory_base} - -exit 0 diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.post-install b/alpine/SPECS/wazuh-agent/wazuh-agent.post-install deleted file mode 100644 index 7b581bb705..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.post-install +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -# add something which happens after install - -directory_base="DIRECTORY_BASE" - -touch ${directory_base}/logs/active-responses.log - -. ${directory_base}/packages_files/src/init/dist-detect.sh - -# Generating ossec.conf file -${directory_base}/packages_files/gen_ossec.sh conf agent ${DIST_NAME} ${DIST_VER}.${DIST_SUBVER} ${directory_base} > ${directory_base}/etc/ossec.conf - -# Add default local_files to ossec.conf -${directory_base}/packages_files/add_localfiles.sh ${directory_base} >> ${directory_base}/etc/ossec.conf - -exit 0 diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.post-upgrade b/alpine/SPECS/wazuh-agent/wazuh-agent.post-upgrade deleted file mode 100644 index b08a4626f6..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.post-upgrade +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -# add something which happens after upgrade - -directory_base="DIRECTORY_BASE" - -cp -a ${directory_base}/tmp/etc/* ${directory_base}/etc/ -rm -rf ${directory_base}/tmp/etc - -if [ -f ${directory_base}/tmp/wazuh.restart ]; then - rm -f ${directory_base}/tmp/wazuh.restart - ${directory_base}/bin/wazuh-control restart > /dev/null 2>&1 -fi - -exit 0 diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-deinstall b/alpine/SPECS/wazuh-agent/wazuh-agent.pre-deinstall deleted file mode 100644 index e15dae1113..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-deinstall +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -# add something which happens before deinstall - -directory_base="DIRECTORY_BASE" - -if [ -f /var/ossec/var/run/wazuh-agentd-*.pid ]; then - ${directory_base}/bin/wazuh-control stop > /dev/null 2>&1 -fi - -exit 0 diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-install b/alpine/SPECS/wazuh-agent/wazuh-agent.pre-install deleted file mode 100644 index 05cccbf798..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-install +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -# add something which happens before install - -directory_base="DIRECTORY_BASE" - -# Create the wazuh group if it doesn't exists -if command -v getent > /dev/null 2>&1 && ! getent group wazuh > /dev/null 2>&1; then - addgroup -S wazuh -elif ! id -g wazuh > /dev/null 2>&1; then - addgroup -S wazuh -fi -# Create the wazuh user if it doesn't exists -if ! id -u wazuh > /dev/null 2>&1; then - adduser -S -G wazuh -h ${directory_base} -s /sbin/nologin wazuh -fi - -exit 0 diff --git a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-upgrade b/alpine/SPECS/wazuh-agent/wazuh-agent.pre-upgrade deleted file mode 100644 index 909168c9d5..0000000000 --- a/alpine/SPECS/wazuh-agent/wazuh-agent.pre-upgrade +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# add something which happens before upgrade - -directory_base="DIRECTORY_BASE" - -if [ -f /var/ossec/var/run/wazuh-execd-*.pid ]; then - touch ${directory_base}/tmp/wazuh.restart - ${directory_base}/bin/wazuh-control stop > /dev/null 2>&1 -fi - -cp -a ${directory_base}/etc ${directory_base}/tmp/ - -exit 0 diff --git a/alpine/build_package.sh b/alpine/build_package.sh deleted file mode 100755 index b00cb64406..0000000000 --- a/alpine/build_package.sh +++ /dev/null @@ -1,278 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -current_path="$( cd $(dirname $0) ; pwd -P )" -architecture="x86_64" -outdir="${current_path}/output" -revision="1" -build_docker="yes" -apk_x86_64_builder="apk_agent_builder_x86_64" -apk_aarch64_builder="apk_agent_builder_aarch64" -apk_x86_builder="apk_agent_builder_x86" -apk_armhf_builder="apk_agent_builder_armhf" -apk_armv7_builder="apk_agent_builder_armv7" -apk_ppc64le_builder="apk_agent_builder_ppc64le" -apk_builder_dockerfile="${current_path}/docker" -future="no" -jobs="2" -debug="no" -spec_reference="master" -installation_path="/var/ossec" -aws_region="us-east-1" -local_spec="no" -local_source="no" -private_key_id="" -public_key_id="" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${dockerfile_path}/{*.sh,*.tar.gz,wazuh-*} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_apk() { - container_name="$1" - dockerfile_path="$2" - docker_flags="-t --rm" - - # Copy the necessary files - cp ${current_path}/builder.sh ${dockerfile_path} - - # Build the Docker image - if [[ ${build_docker} == "yes" ]]; then - docker build -t ${container_name} ${dockerfile_path} || return 1 - fi - - # Build the Alpine package with a Docker container - volumes="-v ${outdir}/:/var/local/wazuh:Z" - if [ "${local_spec}" = "yes" ];then - volumes="${volumes} -v ${current_path}/..:/root/repository:Z" - #packages_private_key packages_public_key us-east-1 - fi - - if [ "${local_source}" != "no" ];then - volumes="${volumes} -v ${local_source}:/wazuh:Z" - fi - - if [ "${architecture}" = "armhf" ] || [ "${architecture}" = "armv7" ]; then - docker_flags="${docker_flags} --security-opt seccomp=unconfined" - fi - - docker run ${docker_flags} ${volumes} \ - ${container_name} ${reference} ${architecture} ${revision} ${jobs} \ - ${installation_path} ${debug} ${spec_reference} ${local_spec} \ - ${local_source} ${future} ${aws_region} ${private_key_id} \ - ${public_key_id} || return 1 - - - echo "Package $(ls -Art ${outdir} | tail -n 1) added to ${outdir}." - - return 0 -} - -build() { - build_name="" - file_path="" - if [ "${architecture}" = "x86_64" ] || [ "${architecture}" = "amd64" ]; then - architecture="x86_64" - build_name="${apk_x86_64_builder}" - elif [ "${architecture}" = "arm64" ] || [ "${architecture}" = "aarch64" ] || \ - [ "${architecture}" = "arm64v8" ]; then - architecture="aarch64" - build_name="${apk_aarch64_builder}" - elif [ "${architecture}" = "i386" ] || [ "${architecture}" = "x86" ]; then - architecture="x86" - build_name="${apk_x86_builder}" - elif [ "${architecture}" = "armhf" ] || [ "${architecture}" = "arm32" ]; then - architecture="armhf" - build_name="${apk_armhf_builder}" - elif [ "${architecture}" = "armv7" ] || [ "${architecture}" = "arm32v7" ]; then - architecture="armv7" - build_name="${apk_armv7_builder}" - elif [ "${architecture}" = "ppc64le" ] || [ "${architecture}" = "ppc" ]; then - architecture="ppc64le" - build_name="${apk_ppc64le_builder}" - else - echo "Invalid architecture. Choose: x86_64 (amd64 is accepted too)" - return 1 - fi - file_path="${apk_builder_dockerfile}/${architecture}" - build_apk ${build_name} ${file_path} || return 1 - - return 0 -} - -help() { - echo -e "" - echo -e "NAME" - echo -e " $(basename "$0") - Build Alpine package on different architectures." - echo -e "" - echo -e "SYNOPSYS" - echo -e " $(basename "$0") [OPTIONS]" - echo -e "" - echo -e "OPTIONS" - echo -e " -b, --reference " - echo -e " [Required] Select Git branch or tag from wazuh repository." - echo -e "" - echo -e " -a, --architecture " - echo -e " [Optional] Target architecture of the package [x86_64/x86/armhf/armv7/aarch64/ppc64le]." - echo -e "" - echo -e " -j, --jobs " - echo -e " [Optional] Change number of parallel jobs when compiling the manager or agent. By default: 2." - echo -e "" - echo -e " -r, --revision " - echo -e " [Optional] Package revision [Only numeric values allowed]. By default: 1." - echo -e "" - echo -e " -s, --store " - echo -e " [Optional] Set the destination path of package. By default, an output folder will be created." - echo -e "" - echo -e " -p, --path " - echo -e " [Optional] Installation path for the package. By default: /var/ossec." - echo -e "" - echo -e " -d, --debug" - echo -e " [Optional] Build the binaries with debug symbols. By default: no." - echo -e "" - echo -e " --dont-build-docker" - echo -e " [Optional] Locally built docker image will be used instead of generating a new one." - echo -e "" - echo -e " --sources " - echo -e " [Optional] Absolute path containing wazuh source code. This option will use local source code instead of downloading it from GitHub." - echo -e "" - echo -e " --packages-reference " - echo -e " [Optional] Select Git branch or tag from wazuh-packages repository. e.g ${spec_reference}" - echo -e "" - echo -e " --dev" - echo -e " [Optional] Use the SPECS files stored in the host instead of downloading them from GitHub." - echo -e "" - echo -e " --future" - echo -e " [Optional] Build test future package {MAJOR}.30.0 Used for development purposes." - echo -e "" - echo -e " -h, --help" - echo -e " Show this help." - echo -e "" - exit $1 -} - - -main() { - while [ -n "$1" ] - do - case "$1" in - "-h"|"--help") - help 0 - ;; - "-b"|"--reference") - if [ -n "$2" ]; then - reference="$2" - shift 2 - else - help 1 - fi - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - architecture="$2" - shift 2 - else - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - jobs="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - revision="$2" - shift 2 - else - help 1 - fi - ;; - "-p"|"--path") - if [ -n "$2" ]; then - installation_path="$2" - shift 2 - else - help 1 - fi - ;; - "-d"|"--debug") - debug="yes" - shift 1 - ;; - "--packages-reference"|"--packages-branch") - if [ -n "$2" ]; then - spec_reference="$2" - shift 2 - else - help 1 - fi - ;; - "--dev") - local_spec="yes" - shift 1 - ;; - "--sources") - if [ -n "$2" ]; then - local_source="$2" - shift 2 - else - help 1 - fi - ;; - "--dont-build-docker") - build_docker="no" - shift 1 - ;; - "--future") - future="yes" - shift 1 - ;; - "-s"|"--store") - if [ -n "$2" ]; then - outdir="$2" - shift 2 - else - help 1 - fi - ;; - "-t"|"--target") - if [ -n "$2" ]; then - echo "-t|--target has been disabled, It will set as agent by default." - shift 2 - else - help 1 - fi - ;; - *) - help 1 - esac - done - - build || clean 1 - - clean 0 -} - -main "$@" diff --git a/alpine/builder.sh b/alpine/builder.sh deleted file mode 100644 index c97470b725..0000000000 --- a/alpine/builder.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2022, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex - -# Script parameters to build the package -keypath="/root/.abuild" -export target="wazuh-agent" -export reference=$1 -export architecture=$2 -export revision=$3 -export jobs=$4 -export directory_base=$5 -export debug=$6 -spec_reference=$7 -local_spec=$8 -local_source=$9 -future=${10} -aws_region=${11} -private_key_id=${12} -public_key_id=${13} -# Build directories -build_dir=/build -spec_path="${build_dir}/SPECS" -mkdir -p ${spec_path} - -if [ -z "${revision}" ]; then - export revision="1" -fi - -if [ "${local_source}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh/tarball/${reference} | tar zx -fi -export version="$(cat wazuh*/src/VERSION | cut -d 'v' -f 2)" - -if [ "${future}" = "yes" ]; then - old_version=$version - MAJOR=$(echo $version | cut -dv -f2 | cut -d. -f1) - export version="${MAJOR}.30.0" - sed -i "s/${old_version}/${version}/g" "/wazuh"*"/src/init/wazuh-server.sh" - sed -i "s/${old_version}/${version}/g" "/wazuh"*"/src/init/wazuh-client.sh" - sed -i "s/${old_version}/${version}/g" "/wazuh"*"/src/init/wazuh-local.sh" -fi - - -# Getting the signing key -if [ -n "${private_key_id}" ] && [ -n "${public_key_id}" ]; then - mkdir -p ${keypath} - aws --region=${aws_region} secretsmanager get-secret-value --secret-id ${public_key_id} | jq . > public.key.json - jq .SecretString public.key.json | tr -d '"' | sed 's|\\n|\n|g' > ${keypath}/priv.rsa.pub - aws --region=${aws_region} secretsmanager get-secret-value --secret-id ${private_key_id} | jq . > private.key.json - jq .SecretString private.key.json | tr -d '"' | sed 's|\\n|\n|g' > ${keypath}/priv.rsa - echo 'PACKAGER_PRIVKEY="/root/.abuild/priv.rsa"' > ${keypath}/abuild.conf - rm -f private.key.json public.key.json -else - # Use an auto-generated key to sign Alpine package - abuild-keygen -a -i -n -fi - -# Output variables -file_name="${target}-${version}-r${revision}" -pkg_path="/root/packages/SPECS/${architecture}" -pkg_file="${file_name}.apk" - -# Including spec file -if [ "${local_spec}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${spec_reference} | tar zx - cp -r ./wazuh*/alpine/SPECS/${target} ${spec_path}/ -else - cp -r /root/repository/alpine/SPECS/${target} ${spec_path}/ -fi - -# Building APK -cd ${spec_path}/${target} -if [ "${architecture}" = "x86" ] || [ "${architecture}" = "armhf" ] || \ - [ "${architecture}" = "armv7" ]; then - linux32 abuild -F checksum - linux32 abuild -F -r -else - abuild -F checksum - abuild -F -r -fi - -cd ${pkg_path} && sha512sum ${pkg_file} > /var/local/wazuh/${pkg_file}.sha512 -find ${pkg_path}/ -maxdepth 3 -type f -name "${file_name}*" -exec mv {} /var/local/wazuh/ \; diff --git a/alpine/docker/aarch64/Dockerfile b/alpine/docker/aarch64/Dockerfile deleted file mode 100644 index fac5013467..0000000000 --- a/alpine/docker/aarch64/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM arm64v8/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/alpine/docker/armhf/Dockerfile b/alpine/docker/armhf/Dockerfile deleted file mode 100644 index 3a1cc06197..0000000000 --- a/alpine/docker/armhf/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM arm32v6/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN linux32 apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/alpine/docker/armv7/Dockerfile b/alpine/docker/armv7/Dockerfile deleted file mode 100644 index 236e4cc04a..0000000000 --- a/alpine/docker/armv7/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM arm32v7/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN linux32 apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/alpine/docker/ppc64le/Dockerfile b/alpine/docker/ppc64le/Dockerfile deleted file mode 100644 index 061f590e0d..0000000000 --- a/alpine/docker/ppc64le/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM ppc64le/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/alpine/docker/x86/Dockerfile b/alpine/docker/x86/Dockerfile deleted file mode 100644 index cd3ba51aad..0000000000 --- a/alpine/docker/x86/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM i386/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN linux32 apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/alpine/docker/x86_64/Dockerfile b/alpine/docker/x86_64/Dockerfile deleted file mode 100644 index 67ddd76c47..0000000000 --- a/alpine/docker/x86_64/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM amd64/alpine:3.12.12 - -# Install all the necessary tools to build the packages -RUN apk add ca-certificates curl alpine-sdk sudo less openssh \ - openssl openssl-dev libgcc bash make gcc g++ cmake automake \ - linux-headers autoconf libtool python3 aws-cli jq gettext-dev procps && \ - mkdir /var/local/wazuh && mkdir /wazuh - -# Add the scripts to build the Alpine package -ADD builder.sh /usr/local/bin/builder -RUN chmod +x /usr/local/bin/builder - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/builder"] diff --git a/arch/Arch/Dockerfile b/arch/Arch/Dockerfile deleted file mode 100644 index bd6c09f597..0000000000 --- a/arch/Arch/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM archlinux:latest - -# Installing necessary packages -RUN pacman --noconfirm -Syu && \ - pacman --noconfirm -S \ - curl gcc make sudo wget expect gnupg perl-base perl fakeroot python brotli \ - automake autoconf libtool gawk libsigsegv nodejs base-devel inetutils cmake \ - lsb-release - -RUN useradd -ms /bin/bash user - -# Add the script to build the Debian package -ADD build.sh /usr/local/bin/build_package - -# Set the entrypoint -ENTRYPOINT ["/usr/local/bin/build_package"] diff --git a/arch/README.md b/arch/README.md deleted file mode 100644 index 39861a7007..0000000000 --- a/arch/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Wazuh Pacman packages - -In this repository, you can find the necessary tools to build a Wazuh package for Arch based OS. - -## More Packages - -- [AIX](/aix/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. diff --git a/arch/SPECS/wazuh-agent/arch/PKGBUILD b/arch/SPECS/wazuh-agent/arch/PKGBUILD deleted file mode 100644 index 15560b0e9e..0000000000 --- a/arch/SPECS/wazuh-agent/arch/PKGBUILD +++ /dev/null @@ -1,128 +0,0 @@ -pkgname=wazuh-agent -pkgver=PARAM_VERSION -pkgrel=PARAM_RELEASE -pkgdesc="Wazuh agent" -arch=(x86_64) -url='https://github.com/wazuh/wazuh' -license=(GPL2) -source=('PARAM_SOURCE_FILE' - 'wazuh.sysusers') -sha512sums=('SKIP' - 'f677eff94751d7ac485511cac8a19a2fb0294cce3434f77b38c3ad62d7a63c1ed76d2fa6f48a18fdbe3a11f498625b1ce3c8e73dc3db768572b257c0dbeb594a') -depends=('python' 'brotli') -noextract=('PARAM_SOURCE_FILE') -backup=('PARAM_INSTALLATION_BACKUP_DIR/etc/client.keys' - 'PARAM_INSTALLATION_BACKUP_DIR/etc/local_internal_options.conf' - 'PARAM_INSTALLATION_BACKUP_DIR/etc/ossec.conf') -install=wazuh.install - -build() { - mkdir -p ${srcdir}/wazuh - tar xzf ${srcdir}/"PARAM_SOURCE_FILE" -C ${srcdir}/wazuh - cd ${srcdir}/wazuh - make -C src deps - make -jPARAM_JOBS -C src TARGET=agent DEBUG=PARAM_DEBUG PREFIX="PARAM_INSTALLATION_DIR" - - rm -f /tmp/fake-install.saved - USER_LANGUAGE="en" \ - USER_NO_STOP="y" \ - USER_INSTALL_TYPE="agent" \ - USER_DIR="PARAM_INSTALLATION_DIR" \ - USER_DELETE_DIR="n" \ - USER_ENABLE_ACTIVE_RESPONSE="y" \ - USER_ENABLE_SYSCHECK="y" \ - USER_ENABLE_ROOTCHECK="y" \ - USER_ENABLE_OPENSCAP="y" \ - USER_ENABLE_CISCAT="y" \ - USER_ENABLE_SYSCOLLECTOR="y" \ - USER_UPDATE="n" \ - USER_AGENT_SERVER_IP="MANAGER_IP" \ - USER_CA_STORE="/path/to/my_cert.pem" \ - USER_AUTO_START="n" \ - fakeroot ./install.sh - - echo "#!/bin/sh" > ${srcdir}/wazuh/fix_owner.sh - cat /tmp/fake-install.saved >> ${srcdir}/wazuh/fix_owner.sh - chmod +x ${srcdir}/wazuh/fix_owner.sh -} - -package() { - install -Dm0644 ${srcdir}/wazuh.sysusers ${pkgdir}/usr/lib/sysusers.d/wazuh.conf - cd ${srcdir}/wazuh - - # Copying systemd file - mkdir -p ${pkgdir}/usr/lib/systemd/system/ - install -m 0644 src/init/templates/wazuh-agent.service ${pkgdir}/usr/lib/systemd/system/ - sed -i 's:WAZUH_HOME_TMP:PARAM_INSTALLATION_DIR:g' ${pkgdir}/usr/lib/systemd/system/wazuh-agent.service - - # Generating permission restoration file for postinstall - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR" - - # Remove preinstalled log files - rm -rf "PARAM_INSTALLATION_DIR"/logs/*.log - rm -rf "PARAM_INSTALLATION_DIR"/logs/*.json - - # Clean the preinstalled configuration assesment files - rm -rf ${pkgdir}/"PARAM_INSTALLATION_DIR"/ruleset/sca - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_DIR"/ruleset/sca - - # Copying to target - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_DIR"/ - cp -rp "PARAM_INSTALLATION_DIR"/. ${pkgdir}/"PARAM_INSTALLATION_DIR"/ - - # Copying install scripts to /usr/share - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/ - cp -p gen_ossec.sh ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/ - cp -p add_localfiles.sh ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/ - cp -p fix_owner.sh ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR" - - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/src - - # Install configuration assesment files and files templates - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/applications - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/generic - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/amzn/1 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/amzn/2 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/centos/5 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/centos/6 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/centos/7 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/darwin/15 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/darwin/16 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/darwin/17 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/darwin/18 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/debian/7 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/debian/8 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/debian/9 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/rhel/5 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/rhel/6 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/rhel/7 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/sles/11 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/sles/12 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/sunos - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/suse/11 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/suse/12 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/ubuntu/12/04 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/ubuntu/14/04 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/ubuntu/16/04 - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/windows - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sunos/5/11 - - cp -r ruleset/sca/* ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca - - cp etc/templates/config/generic/sca.files ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/generic - cp etc/templates/config/generic/sca.manager.files ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/sca/generic - - cp -r src/{REVISION,VERSION} ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/src - - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/src/init - cp -r src/init/* ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/src/init - - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/generic - cp -r etc/templates/config/generic ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/ - - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/debian - cp -r etc/templates/config/debian ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/ - - mkdir -p ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/ubuntu - cp -r etc/templates/config/ubuntu ${pkgdir}/"PARAM_INSTALLATION_SCRIPTS_DIR"/etc/templates/config/ -} diff --git a/arch/SPECS/wazuh-agent/arch/wazuh.install b/arch/SPECS/wazuh-agent/arch/wazuh.install deleted file mode 100644 index 43bba91c35..0000000000 --- a/arch/SPECS/wazuh-agent/arch/wazuh.install +++ /dev/null @@ -1,134 +0,0 @@ -DIR="PARAM_INSTALLATION_DIR" -SCRIPTS_DIR="PARAM_INSTALLATION_SCRIPTS_DIR" -WAZUH_TMP_DIR="${DIR}/packages_files/agent_config_files" -SCA_BASE_DIR="${SCRIPTS_DIR}/sca" -USER="wazuh" -GROUP="wazuh" - -common() { - # Install the SCA files - if [ -d "${SCA_BASE_DIR}" ]; then - - . ${SCRIPTS_DIR}/src/init/dist-detect.sh - - SCA_DIR="${DIST_NAME}/${DIST_VER}" - - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - mkdir -p ${DIR}/ruleset/sca - - # Install the configuration files needed for this hosts - if [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/${DIST_SUBVER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}/${DIST_VER}" - elif [ -r "${SCA_BASE_DIR}/${DIST_NAME}/sca.files" ]; then - SCA_TMP_DIR="${SCA_BASE_DIR}/${DIST_NAME}" - else - SCA_TMP_DIR="${SCA_BASE_DIR}/generic" - fi - - SCA_TMP_FILE="${SCA_TMP_DIR}/sca.files" - - if [ -r ${SCA_TMP_FILE} ]; then - - for sca_file in $(cat ${SCA_TMP_FILE}); do - cp ${SCA_BASE_DIR}/${sca_file} ${DIR}/ruleset/sca - done - fi - - # Set correct permissions, owner and group - chmod 640 ${DIR}/ruleset/sca/* - chown root:${GROUP} ${DIR}/ruleset/sca/* - - fi - - touch ${DIR}/logs/active-responses.log - chown ${USER}:${GROUP} ${DIR}/logs/active-responses.log - chmod 0660 ${DIR}/logs/active-responses.log - - # Register and configure agent if Wazuh environment variables are defined - if [ -z "$2" ] ; then - ${SCRIPTS_DIR}/src/init/register_configure_agent.sh ${DIR} > /dev/null || : - fi - - # Restoring file permissions - ${SCRIPTS_DIR}/restore-permissions.sh > /dev/null 2>&1 || : - - # Remove the deprecated /etc/ossec-init.conf file - if [ -f /etc/ossec-init.conf ] ; then - rm -f /etc/ossec-init.conf - fi - - ${SCRIPTS_DIR}/fix_owner.sh 2>/dev/null -} - -pre_upgrade() { - if [ ! -d ${WAZUH_TMP_DIR} ]; then - mkdir -p ${WAZUH_TMP_DIR} - fi - if systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent.service > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - elif ${DIR}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - touch ${WAZUH_TMP_DIR}/wazuh.restart - fi -} - -post_upgrade() { - ${SCRIPTS_DIR}/gen_ossec.sh conf agent Arch rolling > ${DIR}/etc/ossec.conf.new - chmod 660 ${DIR}/etc/ossec.conf.new - - common - - if [ -f ${WAZUH_TMP_DIR}/wazuh.restart ] ; then - rm -f ${WAZUH_TMP_DIR}/wazuh.restart - systemctl daemon-reload > /dev/null 2>&1 - systemctl restart wazuh-agent.service > /dev/null 2>&1 - fi -} - -post_install() { - if ! getent group | grep -q "^${GROUP}" ; then - systemd-sysusers - fi - - if [ -f ${SCRIPTS_DIR}/ossec-init.conf ] ; then - cp ${SCRIPTS_DIR}/ossec-init.conf /etc/ossec-init.conf - fi - - ${SCRIPTS_DIR}/gen_ossec.sh conf agent Arch rolling > ${DIR}/etc/ossec.conf - ${SCRIPTS_DIR}/add_localfiles.sh >> ${DIR}/etc/ossec.conf - - common -} - -pre_remove() { - systemctl disable wazuh-agent.service 2>/dev/null || true - if systemctl is-active --quiet wazuh-agent > /dev/null 2>&1; then - systemctl stop wazuh-agent.service > /dev/null 2>&1 - elif ${DIR}/bin/wazuh-control status 2>/dev/null | grep "is running" > /dev/null 2>&1; then - ${DIR}/bin/wazuh-control stop > /dev/null 2>&1 - fi -} - -post_remove() { - - if [ -d ${WAZUH_TMP_DIR} ]; then - rm -rf ${WAZUH_TMP_DIR} - fi - - # If the directory is not empty, copy the files into ${DIR}/etc - if ls -A ${DIR}/tmp/conffiles > /dev/null 2>&1 ; then - if [ ! -d ${DIR}/etc ]; then - mkdir -p ${DIR}/etc - fi - mv ${DIR}/tmp/conffiles/* ${DIR}/etc - fi - - rm -rf ${DIR}/tmp - rm -rf ${DIR}/ruleset - rm -rf ${DIR}/var - rm -rf ${DIR}/logs - -} diff --git a/arch/SPECS/wazuh-agent/arch/wazuh.sysusers b/arch/SPECS/wazuh-agent/arch/wazuh.sysusers deleted file mode 100644 index 8a371775cc..0000000000 --- a/arch/SPECS/wazuh-agent/arch/wazuh.sysusers +++ /dev/null @@ -1,2 +0,0 @@ -u wazuh - - - -g wazuh - - - diff --git a/arch/build.sh b/arch/build.sh deleted file mode 100755 index ffd74d30d8..0000000000 --- a/arch/build.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/bin/bash - -# Wazuh package builder -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -set -ex - -# Script parameters to build the package -build_target=${1} -wazuh_branch=${2} -architecture_target=${3} -package_release=${4} -jobs=${5} -dir_path=${6} -debug=${7} -checksum=${8} -wazuh_packages_branch=${9} -use_local_specs=${10} -local_source_code=${11} -future=${12} - -if [ -z "${package_release}" ]; then - package_release="1" -fi - -if [ "${local_source_code}" = "no" ]; then - curl -sL https://github.com/wazuh/wazuh/tarball/${wazuh_branch} | tar zx -fi -wazuh_version="$(cat wazuh*/src/VERSION | cut -d 'v' -f 2)" - -# Build directories -build_dir=/build_wazuh -package_full_name="wazuh-${build_target}-${wazuh_version}" -sources_dir=`pwd`/"wazuh*" -pacman_dir="${build_dir}/${build_target}/build" - -tmp_dir=${build_dir}/tmp -tmp_sources_dir=${tmp_dir}/source - -mkdir -p "${pacman_dir}" - -if [[ "${use_local_specs}" == "no" ]]; then - tmp_specs_path=${tmp_dir}/specs - mkdir -p ${tmp_specs_path} - cd ${tmp_specs_path} - specs_path=${tmp_specs_path} - curl -sL https://github.com/wazuh/wazuh-packages/tarball/${wazuh_packages_branch} | tar zx - specs_path=`pwd`/$(find . -type d -name "SPECS" -path "*arch*") - tmp_specs_path=${specs_path} -else - specs_path="/specs/SPECS" -fi - -if [[ "${future}" == "yes" ]]; then - # MODIFY VARIABLES - base_version=${wazuh_version} - MAJOR=$(echo ${base_version} | cut -dv -f2 | cut -d. -f1) - MINOR=$(echo ${base_version} | cut -d. -f2) - wazuh_version="${MAJOR}.30.0" - package_full_name=wazuh-${build_target}-${wazuh_version} - - # PREPARE FUTURE SPECS AND SOURCES - mkdir -p ${tmp_dir} - cp -r ${sources_dir} "${tmp_sources_dir}" - sources_dir="${tmp_sources_dir}" - find "${sources_dir}" "${specs_path}" \( -name "*VERSION*" -o -name "*changelog*" \) -exec sed -i "s/${base_version}/${wazuh_version}/g" {} \; - sed -i "s/\$(VERSION)/${MAJOR}.${MINOR}/g" "${sources_dir}/src/Makefile" - sed -i "s/${base_version}/${wazuh_version}/g" "${sources_dir}/src/init/wazuh-server.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${sources_dir}/src/init/wazuh-client.sh" - sed -i "s/${base_version}/${wazuh_version}/g" "${sources_dir}/src/init/wazuh-local.sh" -fi - -cd ${sources_dir} && tar -czf ${pacman_dir}/${package_full_name}.tar.gz . -cp -pr ${specs_path}/wazuh-${build_target}/arch/* ${pacman_dir} - -# Configure the package with the different parameters -sed -i "s:PARAM_VERSION:${wazuh_version}:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_RELEASE:${package_release}:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_SOURCE_FILE:${package_full_name}.tar.gz:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_DEBUG:${debug}:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_INSTALLATION_DIR:${dir_path}:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_INSTALLATION_BACKUP_DIR:`echo ${dir_path} | cut -c 2-`:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_INSTALLATION_SCRIPTS_DIR:${dir_path}/packages_files/agent_installation_scripts:g" ${pacman_dir}/PKGBUILD -sed -i "s:PARAM_JOBS:${jobs}:g" ${pacman_dir}/PKGBUILD - -sed -i "s:PARAM_INSTALLATION_DIR:${dir_path}:g" ${pacman_dir}/wazuh.install -sed -i "s:PARAM_INSTALLATION_SCRIPTS_DIR:${dir_path}/packages_files/agent_installation_scripts:g" ${pacman_dir}/wazuh.install - -if [[ "${debug}" == "yes" ]]; then - sed -i "s:dh_strip --no-automatic-dbgsym::g" ${pacman_dir}/PKGBUILD -fi - -cd ${pacman_dir} -mkdir ${dir_path} -chmod -R 777 /tmp -chown -R user:user ${dir_path} -chown -R user:user . - -# this is an ugly hack -# install.sh will fail in all the user manipulation stuff, but because we changed the user of /var/ossec to be our user, we'll get all the files we need to build the package -# we have to do it that way because install.sh must run as root, and makepkg cannot run as root -mv /usr/bin/{install,real_install} -cat >/usr/bin/install <> /tmp/fake-install.saved -fi - -exec real_install "\$@" -EOF -chmod +x /usr/bin/install - -#build the package -su user -c "makepkg -s" -mv /usr/bin/{real_install,install} - -# copy the package out -pkg_file="wazuh-${build_target}-${wazuh_version}-${package_release}-${architecture_target}.pkg.tar.zst" -pkg_path="${pacman_dir}" - -if [[ "${checksum}" == "yes" ]]; then - cd ${pkg_path} && sha512sum ${pkg_file} > /var/local/checksum/${pkg_file}.sha512 -fi -install -o root -g root ${pkg_path}/${pkg_file} /var/local/wazuh/${pkg_file} diff --git a/arch/generate_arch_package.sh b/arch/generate_arch_package.sh deleted file mode 100755 index b63a006f58..0000000000 --- a/arch/generate_arch_package.sh +++ /dev/null @@ -1,239 +0,0 @@ -#!/bin/bash - -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. -CURRENT_PATH="$( cd $(dirname $0) ; pwd -P )" -ARCHITECTURE="x86_64" -OUTDIR="${CURRENT_PATH}/output/" -BRANCH="" -REVISION="1" -TARGET="agent" -JOBS="2" -DEBUG="no" -BUILD_DOCKER="yes" -INSTALLATION_PATH="/var/ossec" -ARCH_BUILDER="arch_builder" -ARCH_BUILDER_DOCKERFILE="${CURRENT_PATH}/Arch" -CHECKSUMDIR="" -CHECKSUM="no" -PACKAGES_BRANCH="master" -USE_LOCAL_SPECS="no" -LOCAL_SPECS="${CURRENT_PATH}" -LOCAL_SOURCE_CODE="" -USE_LOCAL_SOURCE_CODE="no" -FUTURE="no" - -trap ctrl_c INT - -clean() { - exit_code=$1 - - # Clean the files - rm -rf ${DOCKERFILE_PATH}/{*.sh,*.tar.gz,wazuh-*} ${SOURCES_DIRECTORY} - - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -build_arch() { - CONTAINER_NAME="$1" - DOCKERFILE_PATH="$2" - - # Copy the necessary files - cp build.sh ${DOCKERFILE_PATH} - - # Create an optional parameter to share the local source code as a volume - if [ ! -z "${LOCAL_SOURCE_CODE}" ]; then - CUSTOM_CODE_VOL="-v ${LOCAL_SOURCE_CODE}:/wazuh-local-src:Z" - USE_LOCAL_SOURCE_CODE="yes" - fi - - # Build the Docker image - if [[ ${BUILD_DOCKER} == "yes" ]]; then - docker build -t ${CONTAINER_NAME} ${DOCKERFILE_PATH} || return 1 - fi - - # Build the Arch package with a Docker container - docker run -t --rm -v ${OUTDIR}:/var/local/wazuh:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - -v ${LOCAL_SPECS}:/specs:Z \ - ${CUSTOM_CODE_VOL} \ - ${CONTAINER_NAME} ${TARGET} ${BRANCH} ${ARCHITECTURE} \ - ${REVISION} ${JOBS} ${INSTALLATION_PATH} ${DEBUG} \ - ${CHECKSUM} ${PACKAGES_BRANCH} ${USE_LOCAL_SPECS} \ - ${USE_LOCAL_SOURCE_CODE} ${FUTURE}|| return 1 - - echo "Package $(ls -Art ${OUTDIR} | tail -n 1) added to ${OUTDIR}." - - return 0 -} - -build() { - - if [[ "${TARGET}" == "agent" ]]; then - - build_arch ${ARCH_BUILDER} ${ARCH_BUILDER_DOCKERFILE} || return 1 - - else - echo "Invalid target. Only agent is supported." - return 1 - fi - - return 0 -} - -help() { - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch [${BRANCH}]. By default: master." - echo " -j, --jobs [Optional] Change number of parallel jobs when compiling the manager or agent. By default: 2." - echo " -r, --revision [Optional] Package revision. By default: 1." - echo " -s, --store [Optional] Set the destination path of package. By default, an output folder will be created." - echo " -p, --path [Optional] Installation path for the package. By default: /var/ossec." - echo " -d, --debug [Optional] Build the binaries with debug symbols. By default: no." - echo " -c, --checksum [Optional] Generate checksum on the desired path (by default, if no path is specified it will be generated on the same directory than the package)." - echo " --dont-build-docker [Optional] Locally built docker image will be used instead of generating a new one." - echo " --sources [Optional] Absolute path containing wazuh source code. This option will use local source code instead of downloading it from GitHub." - echo " --packages-branch [Required] Select Git branch or tag from wazuh-packages repository. e.g ${PACKAGES_BRANCH}" - echo " --dev [Optional] Use the SPECS files stored in the host instead of downloading them from GitHub." - echo " --future [Optional] Build test future package {MAJOR}.30.0 Used for development purposes." - echo " -h, --help Show this help." - echo - exit $1 -} - - -main() { - BUILD="no" - PBRANCH="no" - while [ -n "$1" ] - do - case "$1" in - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH="$2" - BUILD="yes" - shift 2 - else - help 1 - fi - ;; - "-h"|"--help") - help 0 - ;; - "-a"|"--architecture") - if [ -n "$2" ]; then - ARCHITECTURE="$2" - shift 2 - else - help 1 - fi - ;; - "-j"|"--jobs") - if [ -n "$2" ]; then - JOBS="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-p"|"--path") - if [ -n "$2" ]; then - INSTALLATION_PATH="$2" - shift 2 - else - help 1 - fi - ;; - "-d"|"--debug") - DEBUG="yes" - shift 1 - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - "--dont-build-docker") - BUILD_DOCKER="no" - shift 1 - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "--packages-branch") - if [ -n "$2" ]; then - PACKAGES_BRANCH="$2" - PBRANCH="yes" - shift 2 - else - help 1 - fi - ;; - "--dev") - USE_LOCAL_SPECS="yes" - shift 1 - ;; - "--sources") - if [ -n "$2" ]; then - LOCAL_SOURCE_CODE="$2" - shift 2 - else - help 1 - fi - ;; - "--future") - FUTURE="yes" - shift 1 - ;; - *) - help 1 - esac - done - - if [[ "${BUILD}" == "no" ]] || [[ "${PBRANCH}" == "no" ]]; then - echo "It is required to use the (-b or --branch) and --packages-branch parameters" - clean 1 - fi - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ "$BUILD" != "no" ]]; then - build || clean 1 - else - clean 1 - fi - - clean 0 -} - -main "$@" diff --git a/splunkapp/Docker/Dockerfile b/splunkapp/Docker/Dockerfile deleted file mode 100644 index cc8b57ff05..0000000000 --- a/splunkapp/Docker/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM centos:7 - -RUN yum install -y curl - -# Create the build directory and add file -ADD build.sh / -RUN mkdir /wazuh_splunk_app && \ - chmod +x /build.sh - -# Add the volumes -RUN mkdir -p /wazuh_splunk_app - -# Set the entrypoint/ -ENTRYPOINT ["/build.sh"] \ No newline at end of file diff --git a/splunkapp/Docker/build.sh b/splunkapp/Docker/build.sh deleted file mode 100755 index 405c2c830e..0000000000 --- a/splunkapp/Docker/build.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -wazuh_branch=$1 -checksum=$2 -revision=$3 - -wazuh_version="" -splunk_version="" - -build_dir="/pkg" -destination_dir="/wazuh_splunk_app" -checksum_dir="/var/local/checksum" -package_json="${build_dir}/package.json" - -download_sources() { - if ! curl -L https://github.com/wazuh/wazuh-splunk/tarball/${wazuh_branch} | tar zx ; then - echo "Error downloading the source code from GitHub." - exit 1 - fi - mv wazuh-* ${build_dir} - wazuh_version=$(python -c "import json, os; f=open(\""${package_json}"\"); pkg=json.load(f); f.close(); print(pkg[\"version\"])") - splunk_version=$(python -c "import json, os; f=open(\""${package_json}"\"); pkg=json.load(f); f.close(); print(pkg[\"splunk\"])")} -} - -remove_execute_permissions() { - chmod -R -x+X * ./SplunkAppForWazuh/appserver -} - -build_package() { - - download_sources - - cd ${build_dir} - - remove_execute_permissions - - if [ -z ${revision} ]; then - wazuh_splunk_pkg_name="wazuh_splunk-${wazuh_version}_${splunk_version}.tar.gz" - else - wazuh_splunk_pkg_name="wazuh_splunk-${wazuh_version}_${splunk_version}-${revision}.tar.gz" - fi - - tar -zcf ${wazuh_splunk_pkg_name} SplunkAppForWazuh - - mv ${wazuh_splunk_pkg_name} ${destination_dir} - - if [ ${checksum} = "yes" ]; then - cd ${destination_dir} && sha512sum "${wazuh_splunk_pkg_name}" > "${checksum_dir}/${wazuh_splunk_pkg_name}".sha512 - fi - - exit 0 -} - -build_package \ No newline at end of file diff --git a/splunkapp/README.md b/splunkapp/README.md deleted file mode 100644 index afa94b6c49..0000000000 --- a/splunkapp/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wazuh Splunk App package - -In this repository, you can find the necessary tools to build a Wazuh Splunk App package. - -## Building Wazuh Splunk app packages - -Please, visit the following link for the full Splunk App packages building documentation: [Generate Wazuh Splunk App packages.](https://documentation.wazuh.com/current/development/packaging/generate-wazuh-splunk-app.html) - -## More Packages - -- [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - -## Contribute - -If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com)or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. - -## License and copyright - -WAZUH -Copyright (C) 2015 Wazuh Inc. (License GPLv2) diff --git a/splunkapp/generate_wazuh_splunk_app.sh b/splunkapp/generate_wazuh_splunk_app.sh deleted file mode 100755 index cb9a95e5bc..0000000000 --- a/splunkapp/generate_wazuh_splunk_app.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash - -# Program to build the Wazuh App for Splunk -# Wazuh package generator -# Copyright (C) 2015, Wazuh Inc. -# -# This program is a free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public -# License (version 2) as published by the FSF - Free Software -# Foundation. - -# -# CONFIGURATION VARIABLES -# - -CURRENT_PATH=$( cd $(dirname $0) ; pwd -P ) - -BRANCH_TAG="" -SPLUNK_VERSION="" -CONTAINER_NAME="wazuh-splunk-app-builder" -OUTDIR="${CURRENT_PATH}/output" -CHECKSUMDIR="" -REVISION="" -REPOSITORY="wazuh-splunk" - -trap ctrl_c INT - -help() { - - echo - echo "Usage: $0 [OPTIONS]" - echo - echo " -b, --branch [Required] Select Git branch or tag e.g. 3.8 or v3.8.1-7.2.3" - echo " -s, --store [Optional] Destination directory by default ${CURRENT_PATH}/output" - echo " -r, --revision [Optional] Package revision that append to version e.g. x.x.x-y.y.y_rev" - echo " -c, --checksum [Optional] Generate checksum" - echo " -h, --help Show this help." - echo - exit $1 - -} - -build_package() { - - # Build the Docker image - docker build -t ${CONTAINER_NAME} ./Docker/ - - # Build the Splunk package - docker run -t --rm -v ${OUTDIR}:/wazuh_splunk_app:Z \ - -v ${CHECKSUMDIR}:/var/local/checksum:Z \ - ${CONTAINER_NAME} ${BRANCH_TAG} ${CHECKSUM} ${REVISION} - - return $? -} - -clean(){ - - exit_code=$1 - rm -rf ${SOURCES_DIRECTORY} - exit ${exit_code} -} - -ctrl_c() { - clean 1 -} - -main() { - CHECKSUM="no" - # Reading command line arguments - while [ -n "$1" ] - do - case "$1" in - "-h"|"--help") - help 0 - ;; - "-b"|"--branch") - if [ -n "$2" ]; then - BRANCH_TAG="$2" - HAVE_BRANCH=true - shift 2 - else - help 1 - fi - ;; - "-s"|"--store") - if [ -n "$2" ]; then - OUTDIR="$2" - shift 2 - else - help 1 - fi - ;; - "-r"|"--revision") - if [ -n "$2" ]; then - REVISION="$2" - shift 2 - else - help 1 - fi - ;; - "-c"|"--checksum") - if [ -n "$2" ]; then - CHECKSUMDIR="$2" - CHECKSUM="yes" - shift 2 - else - CHECKSUM="yes" - shift 1 - fi - ;; - *) - help 1 - esac - done - - if [ -z "${CHECKSUMDIR}" ]; then - CHECKSUMDIR="${OUTDIR}" - fi - - if [[ "$HAVE_BRANCH" == true ]] ; then - build_package || clean 1 - clean 0 - else - help 1 - fi -} - -main "$@" From d0419b56b5fc41f4d87d9f2ff52acdd4e6a22462 Mon Sep 17 00:00:00 2001 From: Raul Del Pozo Moreno Date: Wed, 7 Aug 2024 13:39:53 +0200 Subject: [PATCH 04/17] Removed old actions and workflows --- .../build_and_push_image_to_ghcr.sh | 22 ---- .../pull_image_from_ghcr.sh | 20 ---- .../install_component.sh | 35 ------ .github/actions/upgrade-indexer/common.sh | 112 ------------------ .../upgrade-indexer/upgrade-indexer.sh | 42 ------- .github/workflows/build-deb-packages.yml | 81 ------------- .github/workflows/build-rpm-packages.yml | 88 -------------- .github/workflows/test-indexer-debian.yml | 36 ------ .github/workflows/test-indexer-rpm.yml | 32 ----- .github/workflows/test-install-deb.yml | 93 --------------- .github/workflows/test-install-rpm.yml | 102 ---------------- .github/workflows/upload-deb-images.yml | 70 ----------- .github/workflows/upload-rpm-images.yml | 70 ----------- 13 files changed, 803 deletions(-) delete mode 100644 .github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh delete mode 100644 .github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh delete mode 100644 .github/actions/test-install-components/install_component.sh delete mode 100644 .github/actions/upgrade-indexer/common.sh delete mode 100644 .github/actions/upgrade-indexer/upgrade-indexer.sh delete mode 100644 .github/workflows/build-deb-packages.yml delete mode 100644 .github/workflows/build-rpm-packages.yml delete mode 100644 .github/workflows/test-indexer-debian.yml delete mode 100644 .github/workflows/test-indexer-rpm.yml delete mode 100644 .github/workflows/test-install-deb.yml delete mode 100644 .github/workflows/test-install-rpm.yml delete mode 100644 .github/workflows/upload-deb-images.yml delete mode 100644 .github/workflows/upload-rpm-images.yml diff --git a/.github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh b/.github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh deleted file mode 100644 index 83b32e8fce..0000000000 --- a/.github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh +++ /dev/null @@ -1,22 +0,0 @@ -GITHUB_PUSH_SECRET=$1 -GITHUB_USER=$2 -DOCKER_IMAGE_NAME=$3 -BUILD_CONTEXT=$4 -DOCKERFILE_PATH="$BUILD_CONTEXT/Dockerfile" -if [ -n "$5" ]; then - DOCKER_IMAGE_TAG=$5 -else - DOCKER_IMAGE_TAG="latest" -fi -GITHUB_REPOSITORY="wazuh/wazuh-packages" -GITHUB_OWNER="wazuh" -IMAGE_ID=ghcr.io/${GITHUB_OWNER}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} -IMAGE_ID=$(echo ${IMAGE_ID} | tr '[A-Z]' '[a-z]') - -# Login to GHCR -echo ${GITHUB_PUSH_SECRET} | docker login https://ghcr.io -u $GITHUB_USER --password-stdin - -# Build image -echo build -t ${IMAGE_ID} -f ${DOCKERFILE_PATH} ${BUILD_CONTEXT} -docker build -t ${IMAGE_ID} -f ${DOCKERFILE_PATH} ${BUILD_CONTEXT} -docker push ${IMAGE_ID} \ No newline at end of file diff --git a/.github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh b/.github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh deleted file mode 100644 index ffc41ecce2..0000000000 --- a/.github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh +++ /dev/null @@ -1,20 +0,0 @@ -set -x -GITHUB_PUSH_SECRET=$1 -GITHUB_USER=$2 -DOCKER_IMAGE_NAME=$3 -if [ -n "$4" ]; then - DOCKER_IMAGE_TAG="$4" -else - DOCKER_IMAGE_TAG="latest" -fi -GITHUB_REPOSITORY="wazuh/wazuh-packages" -GITHUB_OWNER="wazuh" -IMAGE_ID=ghcr.io/${GITHUB_OWNER}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} -IMAGE_ID=$(echo ${IMAGE_ID} | tr '[A-Z]' '[a-z]') - -# Login to GHCR -echo ${GITHUB_PUSH_SECRET} | docker login https://ghcr.io -u $GITHUB_USER --password-stdin - -# Pull and rename image -docker pull ${IMAGE_ID} -docker image tag ghcr.io/${GITHUB_OWNER}/${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} ${DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_TAG} diff --git a/.github/actions/test-install-components/install_component.sh b/.github/actions/test-install-components/install_component.sh deleted file mode 100644 index 2d8ea93cc5..0000000000 --- a/.github/actions/test-install-components/install_component.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -echo "Installing Wazuh $2." - -if [ -f /etc/os-release ]; then - source /etc/os-release - if [ "$ID" = "centos" ] && [ "$VERSION_ID" = "8" ]; then - find /etc/yum.repos.d/ -type f -exec sed -i 's/mirrorlist/#mirrorlist/g' {} \; - find /etc/yum.repos.d/ -type f -exec sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' {} \; - fi - - if [ "$ID" = "debian" ] && [ "$VERSION_ID" = "9" ]; then - echo "deb http://archive.debian.org/debian stretch contrib main non-free" > /etc/apt/sources.list - echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list - fi -fi - -if [ -f /etc/redhat-release ]; then - VERSION=$(cat /etc/redhat-release) - if [ "$VERSION" = "CentOS release 6.9 (Final)" ]; then - curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo - fi -fi - -if [ -n "$(command -v yum)" ]; then - sys_type="yum" -elif [ -n "$(command -v apt-get)" ]; then - sys_type="apt-get" - apt-get update - apt-get install -y systemd -else - common_logger -e "Couldn't find type of system" - exit 1 -fi - -$sys_type install -y "/packages/$1" \ No newline at end of file diff --git a/.github/actions/upgrade-indexer/common.sh b/.github/actions/upgrade-indexer/common.sh deleted file mode 100644 index e9be978e93..0000000000 --- a/.github/actions/upgrade-indexer/common.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -FILES_OLD="/usr/share/wazuh-indexer/plugins/opensearch-security/securityconfig" -FILES_NEW="/etc/wazuh-indexer/opensearch-security" -declare -A files_old -declare -A files_new -PACKAGE_NAME="${1}" -MAJOR_MINOR_RELEASE=$((${2})) - -# Check the system to differ between DEB and RPM -function check_system() { - - if [ -n "$(command -v yum)" ]; then - sys_type="rpm" - elif [ -n "$(command -v apt-get)" ]; then - sys_type="deb" - else - echo "Error: could not detect the system." - exit 1 - fi - -} - -# Checks the version of Wazuh with 4.3 version, where path is different. -function check_version() { - - if [ -z "${MAJOR_MINOR_RELEASE}" ]; then - echo "Error: second argument expected." - exit 1 - fi - - # 43 represents the threshold where the path of the securityconfig - # files changes (major and minor) - if [ "${MAJOR_MINOR_RELEASE}" -gt "43" ]; then - FILES_OLD="${FILES_NEW}" - echo "New path detected (/etc)." - else - echo "Old path detected (/usr/share)." - fi - -} - -# Compare the arrays, the loop ends if a different checksum is detected -function compare_arrays() { - - for file in "${!files_old[@]}"; do - echo "Comparing $file file checksum..." - echo "Old: ${files_old[$file]}" - echo "New: ${files_new[$file]}" - if [[ "${files_old[$file]}" == "${files_new[$file]}" ]]; then - echo "${file} - Same checksum." - else - echo "${file} - Different checksum." - exit 1 - fi - done - -} - -# Steps before installing the RPM release package. -function add_production_repository() { - - rpm --import https://packages.wazuh.com/key/GPG-KEY-WAZUH - echo -e '[wazuh]\ngpgcheck=1\ngpgkey=https://packages.wazuh.com/key/GPG-KEY-WAZUH\nenabled=1\nname=EL-$releasever - Wazuh\nbaseurl=https://packages.wazuh.com/4.x/yum/\nprotect=1' | tee /etc/yum.repos.d/wazuh.repo - -} - -# Reads the files passed by param and store their checksum in the array -function read_files() { - - if [ ! -d "${1}" ]; then - echo "Error: the directory does not exist. ${1}." - exit 1 - fi - - for file in ${1}/*; do - if [ -f "${file}" ]; then - echo "Processing ${file} file..." - - # Change only the old files - if [ "${2}" == "old" ]; then - echo "# Adding a new line to force changed checksum" >> ${file} - echo "Changed file." - fi - checksum=`md5sum ${file} | cut -d " " -f1` - basename=`basename ${file}` - if [ "${2}" == "old" ]; then - files_old["${basename}"]="${checksum}" - elif [ "${2}" == "new" ]; then - files_new["${basename}"]="${checksum}" - fi - fi - done - -} - -# Prints associative array of the files passed by params -function print_files() { - - aux=$(declare -p "$1") - eval "declare -A arr="${aux#*=} - - if [ "${#arr[@]}" -eq 0 ]; then - echo "Error: the array didn't scan correctly." - exit 1 - fi - - for KEY in "${!arr[@]}"; do - echo "Key: ${KEY}" - echo "Value: ${arr[${KEY}]}" - done - -} diff --git a/.github/actions/upgrade-indexer/upgrade-indexer.sh b/.github/actions/upgrade-indexer/upgrade-indexer.sh deleted file mode 100644 index 6a50bad4c4..0000000000 --- a/.github/actions/upgrade-indexer/upgrade-indexer.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -# Gets the absolute path of the script, used to load the common.sh file -ABSOLUTE_PATH="$( cd $(dirname ${0}) ; pwd -P )" -. ${ABSOLUTE_PATH}/common.sh - -check_system -check_version - -echo "Installing old version of Wazuh indexer..." -if [ ${sys_type} == "deb" ]; then - apt-get -y install wazuh-indexer -elif [ ${sys_type} == "rpm" ]; then - add_production_repository - yum -y install wazuh-indexer -else - echo "Error: No system detected." - exit 1 -fi - -read_files "${FILES_OLD}" "old" -echo "Old files..." -print_files "files_old" - -echo "Installing new version of Wazuh indexer..." -if [ ${sys_type} == "deb" ]; then - apt-get install $PACKAGE_NAME -elif [ ${sys_type} == "rpm" ]; then - yum -y localinstall $PACKAGE_NAME -fi - -read_files "${FILES_NEW}" "new" -echo "New files..." -print_files "files_new" - -compare_arrays -if [ "$?" -eq 0 ]; then - echo "Same checksums - Test passed correctly." - exit 0 -fi -echo "Error: different checksums detected." -exit 1 diff --git a/.github/workflows/build-deb-packages.yml b/.github/workflows/build-deb-packages.yml deleted file mode 100644 index 69e478697c..0000000000 --- a/.github/workflows/build-deb-packages.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Build Wazuh Packages - DEB - amd64 and i386 -on: - pull_request: - paths: - - 'debs/SPECS/**' - - 'debs/generate_debian_package.sh' - workflow_dispatch: - workflow_call: - -jobs: - Wazuh-agent-deb-package-build: - runs-on: ubuntu-latest - strategy: - matrix: - TYPE: [agent, manager] - ARCHITECTURE : [amd64, i386] - exclude: - - TYPE: manager - ARCHITECTURE: i386 - fail-fast: false - - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - deb_images: - - 'debs/Debian/**' - - 'debs/build.sh' - deb_images_agent_i386: - - 'debs/Debian/7/i386/**' - - 'debs/build.sh' - deb_images_manager_amd64: - - 'debs/Debian/8/amd64/**' - - 'debs/build.sh' - deb_images_agent_amd64: - - 'debs/Debian/7/amd64/**' - - 'debs/build.sh' - deb_packages: - - 'debs/SPECS/**' - - 'debs/generate_debian_package.sh' - - - name: Set tag and container name - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.deb_images_manager_amd64 == 'true' || steps.changes.outputs.deb_images_agent_amd64 == 'true') && matrix.ARCHITECTURE == 'amd64') - run: | - MAJOR=$(sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/' $GITHUB_WORKSPACE/VERSION) - if [ "${{ steps.changes.outputs.deb_images }}" == "true" ]; then echo "TAG=${{ github.head_ref }}" >> $GITHUB_ENV; else echo "TAG=$MAJOR" >> $GITHUB_ENV ; fi - if [ $MAJOR == "5.0" ]; then echo "VERSION=master" >> $GITHUB_ENV ; else echo "VERSION=$(cat $GITHUB_WORKSPACE/VERSION)" >> $GITHUB_ENV; fi - echo "CONTAINER_NAME=deb_${{ matrix.TYPE }}_builder_${{ matrix.ARCHITECTURE }}" >> $GITHUB_ENV - if [ "${{ matrix.ARCHITECTURE }}" == "amd64" ]; then echo "CONTAINER_NAME=deb_${{ matrix.TYPE }}_builder_${{ matrix.ARCHITECTURE }}" >> $GITHUB_ENV ; else echo "CONTAINER_NAME=deb_${{ matrix.TYPE }}_builder_${{ matrix.ARCHITECTURE }}" >> $GITHUB_ENV ; fi - - - name: Download docker image for package building - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.deb_images_manager_amd64 == 'true' || steps.changes.outputs.deb_images_agent_amd64 == 'true') && matrix.ARCHITECTURE == 'amd64') - run: | - bash $GITHUB_WORKSPACE/.github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.actor}} $CONTAINER_NAME ${{ env.TAG }} - - - name: Build the ${{ matrix.ARCHITECTURE }} deb Wazuh ${{ matrix.TYPE }} package - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.deb_images_manager_amd64 == 'true' || steps.changes.outputs.deb_images_agent_amd64 == 'true') && matrix.ARCHITECTURE == 'amd64') - working-directory: ./debs - run: | - REVISION=$( echo ${{ github.head_ref }} | sed 's/-/./g; s/\//./g' ) - bash generate_debian_package.sh -b ${{ env.VERSION }} -t ${{ matrix.TYPE }} -a ${{ matrix.ARCHITECTURE }} --dev -j 2 --dont-build-docker --tag ${{ env.TAG }} -r $REVISION - echo "PACKAGE_NAME=$(ls ./output | grep .deb | head -n 1)" >> $GITHUB_ENV - - - name: Upload Wazuh ${{ matrix.TYPE }} ${{ matrix.ARCHITECTURE }} package as artifact - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.deb_images_manager_amd64 == 'true' || steps.changes.outputs.deb_images_agent_amd64 == 'true') && matrix.ARCHITECTURE == 'amd64') - uses: actions/upload-artifact@v2 - with: - name: ${{ env.PACKAGE_NAME }} - path: ${{github.workspace}}/debs/output/${{ env.PACKAGE_NAME }} - if-no-files-found: error diff --git a/.github/workflows/build-rpm-packages.yml b/.github/workflows/build-rpm-packages.yml deleted file mode 100644 index 838d0c57c5..0000000000 --- a/.github/workflows/build-rpm-packages.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Build Wazuh Packages - RPM - x86_64 and i386 -on: - pull_request: - paths: - - 'rpms/SPECS/*' - - 'rpms/generate_rpm_package.sh' - workflow_dispatch: - workflow_call: - - -jobs: - Wazuh-agent-rpm-package-build: - env: - BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - runs-on: ubuntu-latest - strategy: - matrix: - TYPE: [agent, manager] - ARCHITECTURE : [x86_64, i386] - exclude: - - TYPE: manager - ARCHITECTURE: i386 - fail-fast: false - - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - rpm_images: - - 'rpms/CentOS/**' - - 'rpms/build.sh' - rpm_images_agent_i386: - - 'rpms/CentOS/6/i386/**' - - 'rpms/build.sh' - rpm_images_agent_x86_64: - - 'rpms/CentOS/6/x86_64/**' - - 'rpms/build.sh' - rpm_images_manager_x86_64: - - 'rpms/CentOS/7/x86_64/**' - - 'rpms/build.sh' - rpm_packages: - - 'rpms/SPECS/**' - - 'rpms/generate_rpm_package.sh' - - - name: Set tag and container name - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.rpm_images_manager_x86_64 == 'true' || steps.changes.outputs.rpm_images_agent_x86_64 == 'true') && matrix.ARCHITECTURE == 'x86_64') - run: | - MAJOR=$(sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/' $GITHUB_WORKSPACE/VERSION) - if [ "${{ steps.changes.outputs.rpm_images }}" == "true" ]; then echo "TAG=${{ github.head_ref }}" >> $GITHUB_ENV; else echo "TAG=$MAJOR" >> $GITHUB_ENV ; fi - if [ $MAJOR == "5.0" ]; then echo "VERSION=master" >> $GITHUB_ENV ; else echo "VERSION=$(cat $GITHUB_WORKSPACE/VERSION)" >> $GITHUB_ENV; fi - if [ "${{ matrix.ARCHITECTURE }}" == "x86_64" ]; then echo "CONTAINER_NAME=rpm_${{ matrix.TYPE }}_builder_x86" >> $GITHUB_ENV ; else echo "CONTAINER_NAME=rpm_${{ matrix.TYPE }}_builder_${{ matrix.ARCHITECTURE }}" >> $GITHUB_ENV ; fi - - - name: Download docker image for package building - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.rpm_images_manager_x86_64 == 'true' || steps.changes.outputs.rpm_images_agent_x86_64 == 'true') && matrix.ARCHITECTURE == 'x86_64') - run: | - bash $GITHUB_WORKSPACE/.github/actions/ghcr-pull-and-push/pull_image_from_ghcr.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.actor}} $CONTAINER_NAME ${{ env.TAG }} - - - name: Build the ${{ matrix.ARCHITECTURE }} rpm Wazuh ${{ matrix.TYPE }} package - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.rpm_images_manager_x86_64 == 'true' || steps.changes.outputs.rpm_images_agent_x86_64 == 'true') && matrix.ARCHITECTURE == 'x86_64') - working-directory: ./rpms - run: | - if [ "X`git ls-remote --heads https://github.com/wazuh/wazuh.git ${BRANCH_NAME}`" != "X" ]; then - W_BRANCH=${BRANCH_NAME} - else - W_BRANCH=${{ env.VERSION }} - fi - REVISION=$( echo ${{ github.head_ref }} | sed 's/-/./g; s/\//./g' ) - bash generate_rpm_package.sh -b ${W_BRANCH} -t ${{ matrix.TYPE }} -a ${{ matrix.ARCHITECTURE }} --dev -j 2 --dont-build-docker --tag ${{ env.TAG }} -r $REVISION - echo "PACKAGE_NAME=$(ls ./output | grep .rpm | head -n 1)" >> $GITHUB_ENV - - - name: Upload Wazuh ${{ matrix.TYPE }} ${{ matrix.ARCHITECTURE }} package as artifact - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || ((steps.changes.outputs.rpm_images_manager_x86_64 == 'true' || steps.changes.outputs.rpm_images_agent_x86_64 == 'true') && matrix.ARCHITECTURE == 'x86_64') - uses: actions/upload-artifact@v2 - with: - name: ${{ env.PACKAGE_NAME }} - path: ${{github.workspace}}/rpms/output/${{ env.PACKAGE_NAME }} - if-no-files-found: error diff --git a/.github/workflows/test-indexer-debian.yml b/.github/workflows/test-indexer-debian.yml deleted file mode 100644 index 7506fde912..0000000000 --- a/.github/workflows/test-indexer-debian.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Test the preserving of security config files upon upgrade - Wazuh indexer - Debian -on: - pull_request: - paths: - - 'stack/indexer/deb/debian/*' - workflow_dispatch: - -jobs: - Test-security-config-files-preservation-Debian: - runs-on: ubuntu-latest - steps: - - name: Preinstall the latest stable version of the Wazuh indexer package - run: | - curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && chmod 644 /usr/share/keyrings/wazuh.gpg - echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee -a /etc/apt/sources.list.d/wazuh.list - sudo apt-get update - - - name: Get the latest stable Wazuh version (all components) - run: echo "LATEST_STABLE_VERSION=$(jq -r 'map(select(.prerelease == false and .draft == false)) | .[] | .tag_name' <<< $(curl --silent https://api.github.com/repos/wazuh/wazuh/releases) | sed "s|v||g" | sort -rV | head -n 1)" >> $GITHUB_ENV - - - name: Get the major and minor of the latest stable version - run: echo "MAJOR_MINOR=$(echo $LATEST_STABLE_VERSION | cut -d '.' -f1-2 | sed "s|\.||")" >> $GITHUB_ENV - - - uses: actions/checkout@v3 - - name: Build the Wazuh indexer package and set environment variable - working-directory: ./stack/indexer/deb - run: | - sudo ./build_package.sh - echo "PACKAGE_NAME=$(ls ./output | grep .deb | head -n 1)" >> $GITHUB_ENV - - - name: Move the built package - working-directory: ./stack/indexer/deb - run: sudo cp ./output/$PACKAGE_NAME $GITHUB_WORKSPACE/$PACKAGE_NAME - - - name: Run script - run: sudo bash $GITHUB_WORKSPACE/.github/actions/upgrade-indexer/upgrade-indexer.sh $GITHUB_WORKSPACE/$PACKAGE_NAME $MAJOR_MINOR diff --git a/.github/workflows/test-indexer-rpm.yml b/.github/workflows/test-indexer-rpm.yml deleted file mode 100644 index 5cf1bb00af..0000000000 --- a/.github/workflows/test-indexer-rpm.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Test the preserving of security config files upon upgrade - Wazuh indexer - RPM -on: - pull_request: - paths: - - 'stack/indexer/rpm/wazuh-indexer.spec' - workflow_dispatch: - -jobs: - Test-security-config-files-preservation-RPM: - runs-on: ubuntu-latest - steps: - - name: Get the latest stable Wazuh version (all components) - run: echo "LATEST_STABLE_VERSION=$(jq -r 'map(select(.prerelease == false and .draft == false)) | .[] | .tag_name' <<< $(curl --silent https://api.github.com/repos/wazuh/wazuh/releases) | sed "s|v||g" | sort -rV | head -n 1)" >> $GITHUB_ENV - - - name: Get the major and minor of the latest stable version - run: echo "MAJOR_MINOR=$(echo $LATEST_STABLE_VERSION | cut -d '.' -f1-2 | sed "s|\.||")" >> $GITHUB_ENV - - - uses: actions/checkout@v3 - - name: Build the Wazuh indexer package and set environment variable - working-directory: ./stack/indexer/rpm - run: | - sudo ./build_package.sh - echo "PACKAGE_NAME=$(ls ./output | grep .rpm | head -n 1)" >> $GITHUB_ENV - - - name: Move the built package - working-directory: ./stack/indexer/rpm - run: | - mkdir $GITHUB_WORKSPACE/packages - sudo cp ./output/$PACKAGE_NAME $GITHUB_WORKSPACE/packages/$PACKAGE_NAME - - - name: Launch docker - run: sudo docker run -v $GITHUB_WORKSPACE/.github/actions/upgrade-indexer/:/tests -v $GITHUB_WORKSPACE/packages/:/packages centos:centos7 bash /tests/upgrade-indexer.sh /packages/$PACKAGE_NAME $MAJOR_MINOR diff --git a/.github/workflows/test-install-deb.yml b/.github/workflows/test-install-deb.yml deleted file mode 100644 index 8ce9a46921..0000000000 --- a/.github/workflows/test-install-deb.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Test install Wazuh agent and manager - DEB -on: - pull_request: - paths: - - 'debs/SPECS/**' - - 'debs/generate_debian_package.sh' - workflow_dispatch: - workflow_call: - -jobs: - - Wait-for-package-building: - runs-on: ubuntu-latest - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - name: Wait for the package to be built - uses: ArcticLampyrid/action-wait-for-workflow@v1.0.4 - id: wait-for-build - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - workflow: build-deb-packages.yml - sha: ${{ github.event.pull_request.head.sha || github.sha }} - wait-interval: 60 - - Test-install-deb-systems: - needs: Wait-for-package-building - runs-on: ubuntu-latest - strategy: - matrix: - distro_name: ['ubuntu:xenial', 'ubuntu:bionic', 'ubuntu:focal', 'ubuntu:jammy', 'debian:stretch', 'debian:buster', 'debian:bullseye'] - type: [agent, manager] - arch: [amd64, i386] - exclude: - - type: manager - arch: i386 - - distro_name: 'ubuntu:jammy' - arch: i386 - fail-fast: false - steps: - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - deb_images: - - 'debs/Debian/**' - - 'debs/build.sh' - deb_images_agent_i386: - - 'debs/Debian/7/i386/**' - - 'debs/build.sh' - deb_images_amd64: - - 'debs/Debian/7/amd64/**' - - 'debs/Debian/8/amd64/**' - - 'debs/build.sh' - deb_packages: - - 'debs/SPECS/**' - - 'debs/generate_debian_package.sh' - - - name: Setup directories and variables - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.deb_images_amd64 == 'true' && matrix.ARCHITECTURE == 'amd64') - run: | - VERSION=$(cat $GITHUB_WORKSPACE/VERSION) - REVISION=$( echo ${{ github.head_ref }} | sed 's/-/./g; s/\//./g' ) - echo "PACKAGE_NAME=wazuh-${{ matrix.type }}_${VERSION}-${REVISION}_${{ matrix.arch }}.deb" >> $GITHUB_ENV - - - name: Download the Wazuh ${{ matrix.type }} package for ${{ matrix.system.NAME }} - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.deb_images_amd64 == 'true' && matrix.ARCHITECTURE == 'amd64') - id: download-artifact - continue-on-error: true - uses: dawidd6/action-download-artifact@v2 - with: - workflow: build-deb-packages.yml - workflow_conclusion: success - name: ${{env.PACKAGE_NAME}} - if_no_artifact_found: fail - - - name: Move the Wazuh ${{ matrix.type }} package for ${{ matrix.distro_name }} to the packages directory - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.deb_images_amd64 == 'true' && matrix.ARCHITECTURE == 'amd64') - run: | - mkdir $GITHUB_WORKSPACE/packages - mv ${{env.PACKAGE_NAME}} $GITHUB_WORKSPACE/packages - - - name: Launch docker - if: steps.changes.outputs.deb_packages == 'true' || (steps.changes.outputs.deb_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.deb_images_amd64 == 'true' && matrix.ARCHITECTURE == 'amd64') - run: sudo docker run -v $GITHUB_WORKSPACE/.github/actions/test-install-components/:/tests -v $GITHUB_WORKSPACE/packages/:/packages ${{ matrix.arch }}/${{ matrix.distro_name }} bash /tests/install_component.sh $PACKAGE_NAME ${{ matrix.type }} diff --git a/.github/workflows/test-install-rpm.yml b/.github/workflows/test-install-rpm.yml deleted file mode 100644 index 58f3d56f76..0000000000 --- a/.github/workflows/test-install-rpm.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Test install Wazuh agent and manager - RPM -on: - pull_request: - paths: - - 'rpms/SPECS/*' - - 'rpms/generate_rpm_package.sh' - workflow_dispatch: - workflow_call: - -jobs: - Wait-for-package-building: - runs-on: ubuntu-latest - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - name: Wait for the package to be built - uses: ArcticLampyrid/action-wait-for-workflow@v1.0.4 - id: wait-for-build - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - workflow: build-rpm-packages.yml - sha: ${{ github.event.pull_request.head.sha || github.sha }} - wait-interval: 60 - - Test-install-rpm-systems: - needs: Wait-for-package-building - runs-on: ubuntu-latest - strategy: - matrix: - system: - - {NAME: 'oraclelinux:9', ARCH: "x86_64"} - - {NAME: 'almalinux:9', ARCH: "x86_64"} - - {NAME: 'rockylinux:9', ARCH: "x86_64"} - - {NAME: 'centos:7', ARCH: "x86_64"} - - {NAME: 'centos:8', ARCH: "x86_64"} - - {NAME: 'i386/centos:7', ARCH: "i386"} - - {NAME: 'redhat/ubi8:latest', ARCH: "x86_64"} - - {NAME: 'redhat/ubi9:latest', ARCH: "x86_64"} - - {NAME: 'amazonlinux:2', ARCH: "x86_64"} - - {NAME: 'fedora:34', ARCH: "x86_64"} - - {NAME: 'centos:6.9', ARCH: "x86_64", INIT: "initd"} - type: [agent, manager] - exclude: - - system: {ARCH: "i386"} - type: manager - - system: {INIT: "initd"} - type: manager - fail-fast: false - steps: - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - rpm_images: - - 'rpms/CentOS/**' - - 'rpms/build.sh' - rpm_images_agent_i386: - - 'rpms/CentOS/6/i386/**' - - 'rpms/build.sh' - rpm_images_x86_64: - - 'rpms/CentOS/6/x86_64/**' - - 'rpms/CentOS/7/x86_64/**' - - 'rpms/build.sh' - rpm_packages: - - 'rpms/SPECS/**' - - 'rpms/generate_rpm_package.sh' - - - name: Setup directories and variables - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.rpm_images_x86_64 == 'true' && matrix.ARCHITECTURE == 'x86_64') - run: | - VERSION=$(cat $GITHUB_WORKSPACE/VERSION) - REVISION=$( echo ${{ github.head_ref }} | sed 's/-/./g; s/\//./g' ) - echo "PACKAGE_NAME=wazuh-${{ matrix.type }}-${VERSION}-${REVISION}.${{matrix.system.ARCH}}.rpm" >> $GITHUB_ENV - - - name: Download the Wazuh ${{ matrix.type }} package for ${{ matrix.system.NAME }} - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.rpm_images_x86_64 == 'true' && matrix.ARCHITECTURE == 'x86_64') - id: download-artifact - continue-on-error: true - uses: dawidd6/action-download-artifact@v2 - with: - workflow: build-rpm-packages.yml - workflow_conclusion: success - name: ${{env.PACKAGE_NAME}} - if_no_artifact_found: fail - - - name: Move the Wazuh ${{ matrix.type }} package for ${{ matrix.system.NAME }} to the packages directory - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.rpm_images_x86_64 == 'true' && matrix.ARCHITECTURE == 'x86_64') - run: | - mkdir $GITHUB_WORKSPACE/packages - mv ${{env.PACKAGE_NAME}} $GITHUB_WORKSPACE/packages - - - name: Launch docker - if : steps.changes.outputs.rpm_packages == 'true' || (steps.changes.outputs.rpm_images_agent_i386 == 'true' && matrix.ARCHITECTURE == 'i386') || (steps.changes.outputs.rpm_images_x86_64 == 'true' && matrix.ARCHITECTURE == 'x86_64') - run: sudo docker run -v $GITHUB_WORKSPACE/.github/actions/test-install-components/:/tests -v $GITHUB_WORKSPACE/packages/:/packages ${{ matrix.system.NAME }} bash /tests/install_component.sh $PACKAGE_NAME ${{ matrix.type }} diff --git a/.github/workflows/upload-deb-images.yml b/.github/workflows/upload-deb-images.yml deleted file mode 100644 index 319981e65a..0000000000 --- a/.github/workflows/upload-deb-images.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Upload package creation Docker images - DEB - amd64 and i386 -on: - pull_request: - paths: - - 'debs/Debian/**' - - 'debs/build.sh' - types: - - opened - - synchronize - - closed - workflow_dispatch: - -jobs: - Upload-deb-package-building-images: - runs-on: ubuntu-latest - strategy: - matrix: - image: [ {CONTAINER_NAME: deb_manager_builder_amd64, DOCKERFILE_PATH: debs/Debian/8/amd64}, {CONTAINER_NAME: deb_agent_builder_amd64, DOCKERFILE_PATH: debs/Debian/7/amd64}, {CONTAINER_NAME: deb_agent_builder_i386, DOCKERFILE_PATH: debs/Debian/7/i386}] - fail-fast: false - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - i386: - - 'debs/Debian/7/i386/**' - - 'debs/build.sh' - manager_amd64: - - 'debs/Debian/8/amd64/**' - - 'debs/build.sh' - agent_amd64: - - 'debs/Debian/7/amd64/**' - - 'debs/build.sh' - generation_script: - - 'debs/generate_debian_package.sh' - - - name: Copy build.sh to Dockerfile path - run: - cp $GITHUB_WORKSPACE/debs/build.sh $GITHUB_WORKSPACE/${{ matrix.image.DOCKERFILE_PATH }} - - - name: Set tag as version - run: - if [ "${{ github.event.pull_request.merged }}" == "false" ]; then echo "TAG=${{ github.head_ref }}" >> $GITHUB_ENV; else echo "TAG=$(sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/' $GITHUB_WORKSPACE/VERSION)" >> $GITHUB_ENV; fi - - - name: Build and push image ${{ matrix.image.CONTAINER_NAME }} with tag ${{ env.TAG }} to Github Container Registry - if: (steps.changes.outputs.generation_script == 'true' ) || ( steps.changes.outputs.i386 == 'true' && matrix.image.CONTAINER_NAME == 'deb_agent_builder_i386' ) || ( steps.changes.outputs.manager_amd64 == 'true' && matrix.image.CONTAINER_NAME == 'deb_manager_builder_amd64') || ( steps.changes.outputs.agent_amd64 == 'true' && matrix.image.CONTAINER_NAME == 'deb_agent_builder_amd64' ) - run: - bash $GITHUB_WORKSPACE/.github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.actor}} ${{matrix.image.CONTAINER_NAME}} ${{ matrix.image.DOCKERFILE_PATH }} ${{ env.TAG }} - - Build-packages-deb: - needs: Upload-deb-package-building-images - if: github.event_name == 'pull_request' - uses: ./.github/workflows/build-deb-packages.yml - secrets: inherit - - Test-packages-deb: - needs: Build-packages-deb - if: github.event_name == 'pull_request' - uses: ./.github/workflows/test-install-deb.yml - secrets: inherit \ No newline at end of file diff --git a/.github/workflows/upload-rpm-images.yml b/.github/workflows/upload-rpm-images.yml deleted file mode 100644 index a73d2849c7..0000000000 --- a/.github/workflows/upload-rpm-images.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Upload package creation Docker images - RPM - x86 and i386 -on: - pull_request: - paths: - - 'rpms/CentOS/**' - - 'rpms/build.sh' - types: - - opened - - synchronize - - closed - workflow_dispatch: - -jobs: - Upload-rpm-package-building-images: - runs-on: ubuntu-latest - strategy: - matrix: - image: [ {CONTAINER_NAME: rpm_manager_builder_x86, DOCKERFILE_PATH: rpms/CentOS/7/x86_64}, {CONTAINER_NAME: rpm_agent_builder_x86, DOCKERFILE_PATH: rpms/CentOS/6/x86_64}, {CONTAINER_NAME: rpm_agent_builder_i386, DOCKERFILE_PATH: rpms/CentOS/6/i386}] - fail-fast: false - steps: - - name: Cancel previous runs - uses: fkirc/skip-duplicate-actions@master - with: - cancel_others: 'true' - github_token: ${{ secrets.GITHUB_TOKEN }} - skip_after_successful_duplicate: 'false' - - - uses: actions/checkout@v3 - - - name: Get changed files - uses: dorny/paths-filter@v2 - id: changes - with: - filters: | - i386: - - 'rpms/CentOS/6/i386/**' - - 'rpms/build.sh' - manager_x86_64: - - 'rpms/CentOS/7/x86_64/**' - - 'rpms/build.sh' - agent_x86_64: - - 'rpms/CentOS/6/x86_64/**' - - 'rpms/build.sh' - generation_script: - - 'rpms/generate_rpm_package.sh' - - - name: Copy build.sh to Dockerfile path - run: - cp $GITHUB_WORKSPACE/rpms/build.sh $GITHUB_WORKSPACE/${{ matrix.image.DOCKERFILE_PATH }} - - - name: Set tag as version - run: - if [ "${{ github.event.pull_request.merged }}" == "false" ]; then echo "TAG=${{ github.head_ref }}" >> $GITHUB_ENV; else echo "TAG=$(sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/' $GITHUB_WORKSPACE/VERSION)" >> $GITHUB_ENV; fi - - - name: Build and push image ${{ matrix.image.CONTAINER_NAME }} with tag ${{ env.TAG }} to Github Container Registry - if: (steps.changes.outputs.generation_script == 'true' ) || ( steps.changes.outputs.i386 == 'true' && matrix.image.CONTAINER_NAME == 'rpm_agent_builder_i386' ) || ( steps.changes.outputs.manager_x86_64 == 'true' && matrix.image.CONTAINER_NAME == 'rpm_manager_builder_x86' ) || ( steps.changes.outputs.agent_x86_64 == 'true' && matrix.image.CONTAINER_NAME == 'rpm_agent_builder_x86' ) - run: - bash $GITHUB_WORKSPACE/.github/actions/ghcr-pull-and-push/build_and_push_image_to_ghcr.sh ${{ secrets.GITHUB_TOKEN }} ${{ github.actor}} ${{matrix.image.CONTAINER_NAME}} ${{ matrix.image.DOCKERFILE_PATH }} ${{ env.TAG }} - - Build-packages-rpm: - needs: Upload-rpm-package-building-images - if: github.event_name == 'pull_request' - uses: ./.github/workflows/build-rpm-packages.yml - secrets: inherit - - Test-packages-rpm: - needs: Build-packages-rpm - if: github.event_name == 'pull_request' - uses: ./.github/workflows/test-install-rpm.yml - secrets: inherit \ No newline at end of file From 742e40347b6c23b6c546cf95d093392e0dc3d765 Mon Sep 17 00:00:00 2001 From: Raul Del Pozo Moreno Date: Wed, 7 Aug 2024 13:40:07 +0200 Subject: [PATCH 05/17] Removed migrated references --- README.md | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/README.md b/README.md index cc74389571..0947f1303f 100644 --- a/README.md +++ b/README.md @@ -10,16 +10,9 @@ Wazuh is an Open Source Host-based Intrusion Detection System that performs log In this repository, you can find the necessary tools to build a Wazuh package for Debian based OS, RPM based OS package, Arch based OS, macOS, RPM packages for IBM AIX, the OVA, and the apps for Kibana and Splunk: - [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [SplunkApp](/splunkapp/README.md) - [Solaris](/solaris/README.md) -- [Windows](/windows/README.md) ## Branches @@ -30,26 +23,6 @@ In this repository, you can find the necessary tools to build a Wazuh package fo The following table shows the references for the versions of each component. -### Wazuh dashboard - -| Wazuh dashboard | Opensearch dashboards | -|-----------------|-----------------------| -| 4.3.x | 1.2.0 | -| 4.4.0 | 2.4.1 | -| 4.4.1 - 4.5.x | 2.6.0 | -| 4.6.x - 4.7.x | 2.8.0 | -| 4.8.x - current | 2.10.0 | - -### Wazuh indexer - -| Wazuh indexer | Opensearch | -|-----------------|-----------------------| -| 4.3.x | 1.2.4 | -| 4.4.0 | 2.4.1 | -| 4.4.1 - 4.5.x | 2.6.0 | -| 4.6.x - 4.7.x | 2.8.0 | -| 4.8.x - current | 2.10.0 | - ## Contribute If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh) by sending an email to [wazuh+subscribe@googlegroups.com](mailto:wazuh+subscribe@googlegroups.com) or join to our Slack channel by filling this [form](https://wazuh.com/community/join-us-on-slack/) to ask questions and participate in discussions. From 62694f3faf4517cd70433f73b3880a9a96fe9c6f Mon Sep 17 00:00:00 2001 From: Raul Del Pozo Moreno Date: Wed, 7 Aug 2024 13:47:36 +0200 Subject: [PATCH 06/17] Removed migrated references --- .github/pull_request_template.md | 19 ------------------- .gitignore | 5 ----- README.md | 2 +- aix/README.md | 8 -------- hp-ux/README.md | 10 +--------- ova/README.md | 8 -------- solaris/README.md | 8 -------- solaris/package_generation/README.md | 8 -------- solaris/packer/README.md | 6 ------ 9 files changed, 2 insertions(+), 72 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index f34536f542..4917e90260 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -28,9 +28,6 @@ Paste here related logs - Build the package in any supported platform - - [ ] Linux - - [ ] Windows - - [ ] macOS - [ ] Solaris - [ ] AIX - [ ] HP-UX @@ -42,22 +39,6 @@ Paste here related logs - [ ] Change added to CHANGELOG.md -- Tests for Linux RPM - - [ ] Build the package for x86_64 - - [ ] Build the package for i386 - - [ ] Build the package for armhf - - [ ] Build the package for aarch64 - - [ ] `%files` section is correctly updated if necessary -- Tests for Linux deb - - [ ] Build the package for x86_64 - - [ ] Build the package for i386 - - [ ] Build the package for armhf - - [ ] Build the package for aarch64 - - [ ] Package install/remove/install - - [ ] Package install/purge/install - - [ ] Check file permissions after installing the package -- Tests for macOS - - [ ] Test the package from macOS Sierra to Mojave - Tests for Solaris - [ ] Test the package on Solaris 10 - [ ] Test the package on Solaris 11 diff --git a/.gitignore b/.gitignore index 9b7c195b3c..b61f58e4f4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,6 @@ ova/Config_files/filebeat.yml *.ovf *.vmdk *.wpk -*.deb -*.rpm *.zip *.tar.gz *.pkg @@ -19,11 +17,8 @@ ova/Config_files/filebeat.yml *.pkg.tar.zst .gradle .java -stack/indexer/rpm/output -stack/indexer/deb/output .cache .m2 -wpk/versions solaris/packer/builds/ solaris/packer/packer-solaris11_3-virtualbox/ solaris/packer/packer-solaris10-virtualbox/ diff --git a/README.md b/README.md index 0947f1303f..4d8d35e644 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Wazuh is an Open Source Host-based Intrusion Detection System that performs log analysis, file integrity monitoring, policy monitoring, rootkit detection, real-time alerting, active response, vulnerability detector, etc. -In this repository, you can find the necessary tools to build a Wazuh package for Debian based OS, RPM based OS package, Arch based OS, macOS, RPM packages for IBM AIX, the OVA, and the apps for Kibana and Splunk: +In this repository, you can find the necessary tools to build a Wazuh package for IBM AIX, HP-UX, Solaris Intel/SPARC, OVA, Puppet module, and Wazuh installation scripts. - [AIX](/aix/README.md) - [HP-UX](/hp-ux/README.md) diff --git a/aix/README.md b/aix/README.md index fc5b3508cf..742707a725 100644 --- a/aix/README.md +++ b/aix/README.md @@ -9,17 +9,9 @@ Please, visit the following link for the full AIX packages building documentatio ## More Packages -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) -- [RPM](/rpms/README.md) - [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) ## Contribute diff --git a/hp-ux/README.md b/hp-ux/README.md index 16e0a44136..2d8e952c7a 100644 --- a/hp-ux/README.md +++ b/hp-ux/README.md @@ -9,13 +9,5 @@ Please, visit the following link for the full HPUX packages building documentati ## More Packages - [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) \ No newline at end of file +- [Solaris](/solaris/README.md) \ No newline at end of file diff --git a/ova/README.md b/ova/README.md index be731410ad..645576b351 100644 --- a/ova/README.md +++ b/ova/README.md @@ -9,16 +9,8 @@ Please, visit the following link for the full OVA building documentation: [Gener ## More Packages - [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) -- [RPM](/rpms/README.md) - [Solaris](/solaris/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) ## Contribute diff --git a/solaris/README.md b/solaris/README.md index 2b20a08f85..43ac10ffe1 100644 --- a/solaris/README.md +++ b/solaris/README.md @@ -12,16 +12,8 @@ Please, visit the following link for the full Solaris packages building document ## More Packages - [AIX](/aix/README.md) -- [Arch](/arch/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) ## Contribute diff --git a/solaris/package_generation/README.md b/solaris/package_generation/README.md index d840158a76..6bca3bcedc 100644 --- a/solaris/package_generation/README.md +++ b/solaris/package_generation/README.md @@ -98,16 +98,8 @@ To build a Solaris package using vagrant, you need to download this repository c ## More Packages - [AIX](/aix/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) -- [RPM](/rpms/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) - ## Contribute diff --git a/solaris/packer/README.md b/solaris/packer/README.md index a4c0487103..806bca97a8 100644 --- a/solaris/packer/README.md +++ b/solaris/packer/README.md @@ -21,15 +21,9 @@ To build a Wazuh package you need to install the following tools: ## More Packages - [AIX](/aix/README.md) -- [Debian](/debs/README.md) - [HP-UX](/hp-ux/README.md) -- [KibanaApp](/wazuhapp/README.md) -- [macOS](/macos/README.md) - [OVA](/ova/README.md) - [RPM](/rpms/README.md) -- [SplunkApp](/splunkapp/README.md) -- [Windows](/windows/README.md) -- [WPK](/wpk/README.md) ## References From 3b1b09220e9ea7a03e513a1a1e70388c2da240ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Correa=20Rodr=C3=ADguez?= Date: Wed, 14 Aug 2024 14:30:47 +0200 Subject: [PATCH 07/17] Filebeat template insertion fixed in Offline installation --- unattended_installer/install_functions/indexer.sh | 3 +++ unattended_installer/install_functions/installVariables.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/unattended_installer/install_functions/indexer.sh b/unattended_installer/install_functions/indexer.sh index d7aaa11ca0..ce7389c9b0 100644 --- a/unattended_installer/install_functions/indexer.sh +++ b/unattended_installer/install_functions/indexer.sh @@ -187,6 +187,9 @@ function indexer_startCluster() { fi # Wazuh alerts template injection + if [ -n "${offline_install}" ]; then + filebeat_wazuh_template="${offline_files_path}/wazuh-template.json" + fi eval "common_curl --silent ${filebeat_wazuh_template} --max-time 300 --retry 5 --retry-delay 5 ${debug}" | eval "common_curl -X PUT 'https://${indexer_node_ips[pos]}:9200/_template/wazuh' -H 'Content-Type: application/json' -d @- -uadmin:admin -k --silent --max-time 300 --retry 5 --retry-delay 5 ${debug}" if [ "${PIPESTATUS[0]}" != 0 ]; then common_logger -e "The wazuh-alerts template could not be inserted into the Wazuh indexer cluster." diff --git a/unattended_installer/install_functions/installVariables.sh b/unattended_installer/install_functions/installVariables.sh index 5e8be4c893..b3c6d13cb6 100644 --- a/unattended_installer/install_functions/installVariables.sh +++ b/unattended_installer/install_functions/installVariables.sh @@ -22,7 +22,7 @@ config_file="${base_path}/config.yml" readonly tar_file_name="wazuh-install-files.tar" tar_file="${base_path}/${tar_file_name}" -readonly filebeat_wazuh_template="https://raw.githubusercontent.com/wazuh/wazuh/${source_branch}/extensions/elasticsearch/7.x/wazuh-template.json" +filebeat_wazuh_template="https://raw.githubusercontent.com/wazuh/wazuh/${source_branch}/extensions/elasticsearch/7.x/wazuh-template.json" readonly dashboard_cert_path="/etc/wazuh-dashboard/certs" readonly filebeat_cert_path="/etc/filebeat/certs" From 1905dc21bbf0c2984f6cfc61fa4f621ee9b46360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Correa=20Rodr=C3=ADguez?= Date: Wed, 14 Aug 2024 14:46:53 +0200 Subject: [PATCH 08/17] Fixed dependencies installation trial --- .../install_functions/checks.sh | 18 +++--- .../install_functions/installCommon.sh | 60 ++++++++++++++----- .../install_functions/installMain.sh | 4 -- .../wazuh-offline-installation.sh | 22 ++++++- 4 files changed, 76 insertions(+), 28 deletions(-) diff --git a/unattended_installer/install_functions/checks.sh b/unattended_installer/install_functions/checks.sh index 662cb2fd8c..aa6862d3b2 100644 --- a/unattended_installer/install_functions/checks.sh +++ b/unattended_installer/install_functions/checks.sh @@ -378,15 +378,17 @@ function checks_specifications() { function checks_ports() { - dep="lsof" - if [ "${sys_type}" == "yum" ]; then - installCommon_yumInstallList "${dep}" - elif [ "${sys_type}" == "apt-get" ]; then - installCommon_aptInstallList "${dep}" - fi + if [ -z "${offline_install}" ]; then + dep="lsof" + if [ "${sys_type}" == "yum" ]; then + installCommon_yumInstallList "${dep}" + elif [ "${sys_type}" == "apt-get" ]; then + installCommon_aptInstallList "${dep}" + fi - if [ "${#not_installed[@]}" -gt 0 ]; then - wia_dependencies_installed+=("${dep}") + if [ "${#not_installed[@]}" -gt 0 ]; then + wia_dependencies_installed+=("${dep}") + fi fi common_logger -d "Checking ports availability." diff --git a/unattended_installer/install_functions/installCommon.sh b/unattended_installer/install_functions/installCommon.sh index ddb68bf223..6bbd2c9e49 100644 --- a/unattended_installer/install_functions/installCommon.sh +++ b/unattended_installer/install_functions/installCommon.sh @@ -390,35 +390,65 @@ function installCommon_installPrerequisites() { if [ "${sys_type}" == "yum" ]; then if [ "${1}" == "AIO" ]; then deps=($(echo "${indexer_yum_dependencies[@]}" "${dashboard_yum_dependencies[@]}" | tr ' ' '\n' | sort -u)) - common_logger -d "${message}" - installCommon_yumInstallList "${deps[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_yumInstallList "${deps[@]}" + else + offline_checkPrerequisites "${deps[@]}" + fi fi if [ "${1}" == "indexer" ]; then - common_logger -d "${message}" - installCommon_yumInstallList "${indexer_yum_dependencies[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_yumInstallList "${indexer_yum_dependencies[@]}" + else + offline_checkPrerequisites "${indexer_yum_dependencies[@]}" + fi fi if [ "${1}" == "dashboard" ]; then - common_logger -d "${message}" - installCommon_yumInstallList "${dashboard_yum_dependencies[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_yumInstallList "${dashboard_yum_dependencies[@]}" + else + offline_checkPrerequisites "${dashboard_yum_dependencies[@]}" + fi fi elif [ "${sys_type}" == "apt-get" ]; then - eval "apt-get update -q ${debug}" + if [ -z "${offline_install}" ]; then + eval "apt-get update -q ${debug}" + fi if [ "${1}" == "AIO" ]; then deps=($(echo "${wazuh_apt_dependencies[@]}" "${indexer_apt_dependencies[@]}" "${dashboard_apt_dependencies[@]}" | tr ' ' '\n' | sort -u)) - common_logger -d "${message}" - installCommon_aptInstallList "${deps[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_aptInstallList "${deps[@]}" + else + offline_checkPrerequisites "${deps[@]}" + fi fi if [ "${1}" == "indexer" ]; then - common_logger -d "${message}" - installCommon_aptInstallList "${indexer_apt_dependencies[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_aptInstallList "${indexer_apt_dependencies[@]}" + else + offline_checkPrerequisites "${indexer_apt_dependencies[@]}" + fi fi if [ "${1}" == "dashboard" ]; then - common_logger -d "${message}" - installCommon_aptInstallList "${dashboard_apt_dependencies[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_aptInstallList "${dashboard_apt_dependencies[@]}" + else + offline_checkPrerequisites "${dashboard_apt_dependencies[@]}" + fi fi if [ "${1}" == "wazuh" ]; then - common_logger -d "${message}" - installCommon_aptInstallList "${wazuh_apt_dependencies[@]}" + if [ -z "${offline_install}" ]; then + common_logger -d "${message}" + installCommon_aptInstallList "${wazuh_apt_dependencies[@]}" + else + offline_checkPrerequisites "${wazuh_apt_dependencies[@]}" + fi fi fi diff --git a/unattended_installer/install_functions/installMain.sh b/unattended_installer/install_functions/installMain.sh index 7a809bf61b..f6e15d8d11 100755 --- a/unattended_installer/install_functions/installMain.sh +++ b/unattended_installer/install_functions/installMain.sh @@ -251,10 +251,6 @@ function main() { # -------------- Preliminary checks and Prerequisites -------------------------------- - if [ -z "${uninstall}" ]; then - installCommon_installCheckDependencies - fi - if [ -z "${configurations}" ] && [ -z "${AIO}" ] && [ -z "${download}" ]; then checks_previousCertificate fi diff --git a/unattended_installer/install_functions/wazuh-offline-installation.sh b/unattended_installer/install_functions/wazuh-offline-installation.sh index 73a24d1c5b..dab1f82a27 100644 --- a/unattended_installer/install_functions/wazuh-offline-installation.sh +++ b/unattended_installer/install_functions/wazuh-offline-installation.sh @@ -11,7 +11,7 @@ # Checks the necessary dependencies for the installation function offline_checkDependencies() { - dependencies=( curl tar gnupg openssl ) + dependencies=( curl tar gnupg openssl lsof ) common_logger "Checking installed dependencies for Offline installation." for dep in "${dependencies[@]}"; do @@ -30,6 +30,26 @@ function offline_checkDependencies() { } +# Checks the necessary packages needed for a Wazuh component +function offline_checkPrerequisites(){ + + dependencies=("$@") + common_logger "Checking prerequisites for Offline installation." + for dep in "${dependencies[@]}"; do + if [ "${sys_type}" == "yum" ]; then + eval "yum list installed 2>/dev/null | grep -q -E ^"${dep}"\\." + elif [ "${sys_type}" == "apt-get" ]; then + eval "apt list --installed 2>/dev/null | grep -q -E ^"${dep}"\/" + fi + + if [ "${PIPESTATUS[0]}" != 0 ]; then + common_logger -e "${dep} is necessary for the offline installation." + exit 1 + fi + done + common_logger -d "Offline prerequisites are installed." +} + # Checks the necessary files for the installation function offline_checkPreinstallation() { From 009ddb72ee1121ca7fd3f4eded15b9847c8ccba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Correa=20Rodr=C3=ADguez?= Date: Wed, 14 Aug 2024 14:56:26 +0200 Subject: [PATCH 09/17] Added `-s` option compatibility to the `-of` option --- unattended_installer/install_functions/checks.sh | 4 ++-- unattended_installer/install_functions/installMain.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/unattended_installer/install_functions/checks.sh b/unattended_installer/install_functions/checks.sh index aa6862d3b2..0d42d2a3fb 100644 --- a/unattended_installer/install_functions/checks.sh +++ b/unattended_installer/install_functions/checks.sh @@ -31,8 +31,8 @@ function checks_arguments() { # -------------- Offline installation --------------------- if [ -n "${offline_install}" ]; then - if [ -z "${AIO}" ] && [ -z "${dashboard}" ] && [ -z "${indexer}" ] && [ -z "${wazuh}" ]; then - common_logger -e "The -of|--offline-installation option must be used with -a, -ws, -wi, or -wd." + if [ -z "${AIO}" ] && [ -z "${dashboard}" ] && [ -z "${indexer}" ] && [ -z "${wazuh}" ] && [ -z "${start_indexer_cluster}" ]; then + common_logger -e "The -of|--offline-installation option must be used with -a, -ws, -s, -wi, or -wd." exit 1 fi fi diff --git a/unattended_installer/install_functions/installMain.sh b/unattended_installer/install_functions/installMain.sh index f6e15d8d11..517d246bb3 100755 --- a/unattended_installer/install_functions/installMain.sh +++ b/unattended_installer/install_functions/installMain.sh @@ -41,7 +41,7 @@ function getHelp() { echo -e " Overwrites previously installed components. This will erase all the existing configuration and data." echo -e "" echo -e " -of, --offline-installation" - echo -e " Perform an offline installation. This option must be used with -a, -ws, -wi, or -wd." + echo -e " Perform an offline installation. This option must be used with -a, -ws, -s, -wi, or -wd." echo -e "" echo -e " -p, --port" echo -e " Specifies the Wazuh web user interface port. By default is the 443 TCP port. Recommended ports are: 8443, 8444, 8080, 8888, 9000." From 418f13f7da1e1e8de95f9ab00dca1dce1b406b6c Mon Sep 17 00:00:00 2001 From: c-bordon Date: Thu, 15 Aug 2024 12:50:32 -0300 Subject: [PATCH 10/17] Fixed wazuh-template.json inject in Wazuh indexer --- .../install_functions/indexer.sh | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/unattended_installer/install_functions/indexer.sh b/unattended_installer/install_functions/indexer.sh index ce7389c9b0..3f3ce0ff79 100644 --- a/unattended_installer/install_functions/indexer.sh +++ b/unattended_installer/install_functions/indexer.sh @@ -186,12 +186,28 @@ function indexer_startCluster() { common_logger "Wazuh indexer cluster security configuration initialized." fi + # Validate Wazuh indexer security admin it is initialized + indexer_security_admin_comm="common_curl -XGET https://"${indexer_node_ips[pos]}":9200/ -uadmin:admin -k --max-time 120 --silent -w \"%{http_code}\" --output /dev/null" + http_status=$(eval "${indexer_security_admin_comm}") + retries=0 + max_retries=5 + while [ "${http_status}" -ne 200 ]; do + common_logger -d "Waiting for Wazuh indexer to be ready. wazuh-indexer status: ${http_status}" + sleep 5 + retries=$((retries+1)) + if [ "${retries}" -eq "${max_retries}" ]; then + common_logger -e "The Wazuh indexer cluster security configuration could not be initialized." + exit 1 + fi + http_status=$(eval "${indexer_security_admin_comm}") + done + # Wazuh alerts template injection if [ -n "${offline_install}" ]; then - filebeat_wazuh_template="${offline_files_path}/wazuh-template.json" + filebeat_wazuh_template="file://${offline_files_path}/wazuh-template.json" fi - eval "common_curl --silent ${filebeat_wazuh_template} --max-time 300 --retry 5 --retry-delay 5 ${debug}" | eval "common_curl -X PUT 'https://${indexer_node_ips[pos]}:9200/_template/wazuh' -H 'Content-Type: application/json' -d @- -uadmin:admin -k --silent --max-time 300 --retry 5 --retry-delay 5 ${debug}" - if [ "${PIPESTATUS[0]}" != 0 ]; then + http_status=$(eval "common_curl --silent '${filebeat_wazuh_template}' --max-time 300 --retry 5 --retry-delay 5 ${debug}" | eval "common_curl -X PUT 'https://${indexer_node_ips[pos]}:9200/_template/wazuh' -H \'Content-Type: application/json\' -d @- -uadmin:admin -k --max-time 300 --retry 5 --retry-delay 5 -w "%{http_code}" -o /dev/null") + if [ "${http_status}" -ne 200 ]; then common_logger -e "The wazuh-alerts template could not be inserted into the Wazuh indexer cluster." exit 1 else From f14d6148b666fc76108698679ae79d1b014b7516 Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Fri, 16 Aug 2024 09:47:37 +0200 Subject: [PATCH 11/17] chore: bump version to 4.8.2 --- CHANGELOG.md | 4 ++++ VERSION | 2 +- aix/SPECS/wazuh-agent-aix.spec | 4 +++- debs/SPECS/wazuh-agent/debian/changelog | 6 ++++++ debs/SPECS/wazuh-agent/debian/copyright | 2 +- debs/SPECS/wazuh-manager/debian/changelog | 6 ++++++ debs/SPECS/wazuh-manager/debian/copyright | 2 +- hello | 0 macos/specs/wazuh-agent-arm64.pkgproj | 4 ++-- macos/specs/wazuh-agent-intel64.pkgproj | 4 ++-- rpms/SPECS/wazuh-agent.spec | 4 +++- rpms/SPECS/wazuh-manager.spec | 4 +++- solaris/solaris10/pkginfo | 4 ++-- stack/dashboard/deb/debian/changelog | 6 ++++++ stack/dashboard/deb/debian/copyright | 2 +- stack/dashboard/rpm/wazuh-dashboard.spec | 2 ++ stack/indexer/deb/debian/changelog | 6 ++++++ stack/indexer/deb/debian/copyright | 2 +- stack/indexer/rpm/wazuh-indexer.spec | 2 ++ tests/unattended/unit/suites/test-common.sh | 4 ++-- tests/unattended/unit/suites/test-dashboard.sh | 10 +++++----- tests/unattended/unit/suites/test-indexer.sh | 8 ++++---- .../install_functions/installVariables.sh | 2 +- 23 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 hello diff --git a/CHANGELOG.md b/CHANGELOG.md index 1067f76637..39a4a73497 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.8.2] + +- https://github.com/wazuh/wazuh-packages/releases/tag/v4.8.2 + ## [4.8.1] - https://github.com/wazuh/wazuh-packages/releases/tag/v4.8.1 diff --git a/VERSION b/VERSION index 697e993915..326ec6355f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.8.1 +4.8.2 diff --git a/aix/SPECS/wazuh-agent-aix.spec b/aix/SPECS/wazuh-agent-aix.spec index a07f81597c..7d6b995a53 100644 --- a/aix/SPECS/wazuh-agent-aix.spec +++ b/aix/SPECS/wazuh-agent-aix.spec @@ -1,6 +1,6 @@ # Spec file for AIX systems Name: wazuh-agent -Version: 4.8.1 +Version: 4.8.2 Release: 1 License: GPL URL: https://www.wazuh.com/ @@ -290,6 +290,8 @@ rm -fr %{buildroot} %attr(750, root, wazuh) %{_localstatedir}/wodles/* %changelog +* Tue Aug 20 2024 support - 4.8.2 +- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html * Thu Jul 18 2024 support - 4.8.1 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html * Wed Jun 12 2024 support - 4.8.0 diff --git a/debs/SPECS/wazuh-agent/debian/changelog b/debs/SPECS/wazuh-agent/debian/changelog index b18b28cc85..ef8489b438 100644 --- a/debs/SPECS/wazuh-agent/debian/changelog +++ b/debs/SPECS/wazuh-agent/debian/changelog @@ -1,3 +1,9 @@ +wazuh-agent (4.8.2-RELEASE) stable; urgency=low + + * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html + + -- Wazuh, Inc Tue, 20 Aug 2024 00:00:00 +0000 + wazuh-agent (4.8.1-RELEASE) stable; urgency=low * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html diff --git a/debs/SPECS/wazuh-agent/debian/copyright b/debs/SPECS/wazuh-agent/debian/copyright index 4965179819..c412349ef2 100644 --- a/debs/SPECS/wazuh-agent/debian/copyright +++ b/debs/SPECS/wazuh-agent/debian/copyright @@ -1,6 +1,6 @@ This work was packaged for Debian by: - Wazuh, Inc on Thu, 18 Jul 2024 00:00:00 +0000 + Wazuh, Inc on Tue, 20 Aug 2024 00:00:00 +0000 It was downloaded from: diff --git a/debs/SPECS/wazuh-manager/debian/changelog b/debs/SPECS/wazuh-manager/debian/changelog index fe1d73af83..f1e1371a2a 100644 --- a/debs/SPECS/wazuh-manager/debian/changelog +++ b/debs/SPECS/wazuh-manager/debian/changelog @@ -1,3 +1,9 @@ +wazuh-manager (4.8.2-RELEASE) stable; urgency=low + + * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html + + -- Wazuh, Inc Tue, 20 Aug 2024 00:00:00 +0000 + wazuh-manager (4.8.1-RELEASE) stable; urgency=low * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html diff --git a/debs/SPECS/wazuh-manager/debian/copyright b/debs/SPECS/wazuh-manager/debian/copyright index 76b9c7928c..705eb3e5ef 100644 --- a/debs/SPECS/wazuh-manager/debian/copyright +++ b/debs/SPECS/wazuh-manager/debian/copyright @@ -1,6 +1,6 @@ This work was packaged for Debian by: - Wazuh, Inc on Thu, 18 Jul 2024 00:00:00 +0000 + Wazuh, Inc on Tue, 20 Aug 2024 00:00:00 +0000 It was downloaded from: diff --git a/hello b/hello new file mode 100644 index 0000000000..e69de29bb2 diff --git a/macos/specs/wazuh-agent-arm64.pkgproj b/macos/specs/wazuh-agent-arm64.pkgproj index bc1fe8d2b8..982764e2ba 100644 --- a/macos/specs/wazuh-agent-arm64.pkgproj +++ b/macos/specs/wazuh-agent-arm64.pkgproj @@ -812,7 +812,7 @@ USE_HFS+_COMPRESSION VERSION - 4.8.1-1 + 4.8.2-1 TYPE 0 @@ -1240,7 +1240,7 @@ NAME - wazuh-agent-4.8.1-1.arm64 + wazuh-agent-4.8.2-1.arm64 PAYLOAD_ONLY TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING diff --git a/macos/specs/wazuh-agent-intel64.pkgproj b/macos/specs/wazuh-agent-intel64.pkgproj index d6fc49771c..88efee875a 100644 --- a/macos/specs/wazuh-agent-intel64.pkgproj +++ b/macos/specs/wazuh-agent-intel64.pkgproj @@ -812,7 +812,7 @@ USE_HFS+_COMPRESSION VERSION - 4.8.1-1 + 4.8.2-1 TYPE 0 @@ -1239,7 +1239,7 @@ NAME - wazuh-agent-4.8.1-1.intel64 + wazuh-agent-4.8.2-1.intel64 PAYLOAD_ONLY TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING diff --git a/rpms/SPECS/wazuh-agent.spec b/rpms/SPECS/wazuh-agent.spec index 544be1a28d..a739d7a406 100644 --- a/rpms/SPECS/wazuh-agent.spec +++ b/rpms/SPECS/wazuh-agent.spec @@ -7,7 +7,7 @@ Summary: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring Name: wazuh-agent -Version: 4.8.1 +Version: 4.8.2 Release: %{_release} License: GPL Group: System Environment/Daemons @@ -610,6 +610,8 @@ rm -fr %{buildroot} %attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud/* %changelog +* Tue Aug 20 2024 support - 4.8.2 +- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html * Thu Jul 18 2024 support - 4.8.1 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html * Wed Jun 12 2024 support - 4.8.0 diff --git a/rpms/SPECS/wazuh-manager.spec b/rpms/SPECS/wazuh-manager.spec index b36a64b21a..7a3348c013 100644 --- a/rpms/SPECS/wazuh-manager.spec +++ b/rpms/SPECS/wazuh-manager.spec @@ -7,7 +7,7 @@ Summary: Wazuh helps you to gain security visibility into your infrastructure by monitoring hosts at an operating system and application level. It provides the following capabilities: log analysis, file integrity monitoring, intrusions detection and policy and compliance monitoring Name: wazuh-manager -Version: 4.8.1 +Version: 4.8.2 Release: %{_release} License: GPL Group: System Environment/Daemons @@ -855,6 +855,8 @@ rm -fr %{buildroot} %attr(750, root, wazuh) %{_localstatedir}/wodles/gcloud/* %changelog +* Tue Aug 20 2024 support - 4.8.2 +- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html * Thu Jul 18 2024 support - 4.8.1 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html * Wed Jun 12 2024 support - 4.8.0 diff --git a/solaris/solaris10/pkginfo b/solaris/solaris10/pkginfo index 4659e689cd..7eec1b283a 100644 --- a/solaris/solaris10/pkginfo +++ b/solaris/solaris10/pkginfo @@ -1,11 +1,11 @@ NAME=Wazuh - Wazuh unifies historically separate functions into a single agent and platform architecture. Providing protection for public clouds, private clouds, and on-premise data centers. PKG="wazuh-agent" -VERSION="4.8.1" +VERSION="4.8.2" ARCH="i386" CLASSES="none" CATEGORY="system" VENDOR="Wazuh, Inc " -PSTAMP="18Jul2024" +PSTAMP="20Aug2024" EMAIL="info@wazuh.com" ISTATES="S s 1 2 3" RSTATES="S s 1 2 3" diff --git a/stack/dashboard/deb/debian/changelog b/stack/dashboard/deb/debian/changelog index fadea5a2e5..f57300d50f 100644 --- a/stack/dashboard/deb/debian/changelog +++ b/stack/dashboard/deb/debian/changelog @@ -1,3 +1,9 @@ +wazuh-dashboard (4.8.2-RELEASE) stable; urgency=low + + * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html + + -- Wazuh, Inc Tue, 20 Aug 2024 00:00:00 +0000 + wazuh-dashboard (4.8.1-RELEASE) stable; urgency=low * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html diff --git a/stack/dashboard/deb/debian/copyright b/stack/dashboard/deb/debian/copyright index d835415cee..9cb552bc9f 100644 --- a/stack/dashboard/deb/debian/copyright +++ b/stack/dashboard/deb/debian/copyright @@ -1,6 +1,6 @@ This work was packaged for Debian by: - Wazuh, Inc on Thu, 18 Jul 2024 00:00:00 +0000 + Wazuh, Inc on Tue, 20 Aug 2024 00:00:00 +0000 It was downloaded from: diff --git a/stack/dashboard/rpm/wazuh-dashboard.spec b/stack/dashboard/rpm/wazuh-dashboard.spec index 244c861c16..e27389cc8a 100644 --- a/stack/dashboard/rpm/wazuh-dashboard.spec +++ b/stack/dashboard/rpm/wazuh-dashboard.spec @@ -346,6 +346,8 @@ rm -fr %{buildroot} %config(noreplace) %attr(640, %{USER}, %{GROUP}) "%{CONFIG_DIR}/opensearch_dashboards.yml" %changelog +* Tue Aug 20 2024 support - 4.8.2 +- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html * Thu Jul 18 2024 support - 4.8.1 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html * Wed Jun 12 2024 support - 4.8.0 diff --git a/stack/indexer/deb/debian/changelog b/stack/indexer/deb/debian/changelog index f0fe2bcfc1..fd14bfea28 100644 --- a/stack/indexer/deb/debian/changelog +++ b/stack/indexer/deb/debian/changelog @@ -1,3 +1,9 @@ +wazuh-indexer (4.8.2-RELEASE) stable; urgency=low + + * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html + + -- Wazuh, Inc Tue, 20 Aug 2024 00:00:00 +0000 + wazuh-indexer (4.8.1-RELEASE) stable; urgency=low * More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html diff --git a/stack/indexer/deb/debian/copyright b/stack/indexer/deb/debian/copyright index d835415cee..9cb552bc9f 100644 --- a/stack/indexer/deb/debian/copyright +++ b/stack/indexer/deb/debian/copyright @@ -1,6 +1,6 @@ This work was packaged for Debian by: - Wazuh, Inc on Thu, 18 Jul 2024 00:00:00 +0000 + Wazuh, Inc on Tue, 20 Aug 2024 00:00:00 +0000 It was downloaded from: diff --git a/stack/indexer/rpm/wazuh-indexer.spec b/stack/indexer/rpm/wazuh-indexer.spec index 95eefcc1aa..34dcb4ccd2 100755 --- a/stack/indexer/rpm/wazuh-indexer.spec +++ b/stack/indexer/rpm/wazuh-indexer.spec @@ -681,6 +681,8 @@ rm -fr %{buildroot} %changelog +* Tue Aug 20 2024 support - 4.8.2 +- More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html * Thu Jul 18 2024 support - 4.8.1 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-1.html * Wed Jun 12 2024 support - 4.8.0 diff --git a/tests/unattended/unit/suites/test-common.sh b/tests/unattended/unit/suites/test-common.sh index fc8b89ba06..62fdd896af 100644 --- a/tests/unattended/unit/suites/test-common.sh +++ b/tests/unattended/unit/suites/test-common.sh @@ -61,7 +61,7 @@ test-04-common_checkInstalled-all-installed-yum() { @mocktrue yum list installed - @mock grep wazuh-manager === @echo wazuh-manager.x86_64 4.8.1-1 @wazuh + @mock grep wazuh-manager === @echo wazuh-manager.x86_64 4.8.2-1 @wazuh @mkdir /var/ossec @mock grep wazuh-indexer === @echo wazuh-indexer.x86_64 1.13.2-1 @wazuh @@ -105,7 +105,7 @@ test-04-common_checkInstalled-all-installed-yum() { } test-05-common_checkInstalled-all-installed-yum-assert() { - @echo "wazuh-manager.x86_64 4.8.1-1 @wazuh" + @echo "wazuh-manager.x86_64 4.8.2-1 @wazuh" @echo 1 @echo "wazuh-indexer.x86_64 4.6.0-1 @wazuh" diff --git a/tests/unattended/unit/suites/test-dashboard.sh b/tests/unattended/unit/suites/test-dashboard.sh index 862c061218..16e343ba5f 100644 --- a/tests/unattended/unit/suites/test-dashboard.sh +++ b/tests/unattended/unit/suites/test-dashboard.sh @@ -6,7 +6,7 @@ source "${base_dir}"/bach.sh @setup-test { @ignore common_logger k_certs_path="/etc/wazuh-dashboard/certs/" - wazuh_version="4.8.1" + wazuh_version="4.8.2" elasticsearch_oss_version="7.10.2" wazuh_kibana_plugin_revision="1" repobaseurl="https://packages.wazuh.com/4.x" @@ -55,7 +55,7 @@ test-03-dashboard_install-yum() { load-dashboard_install sys_type="yum" sep="-" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" dashboard_install } @@ -68,7 +68,7 @@ test-ASSERT-FAIL-04-dashboard_install-yum-error() { load-dashboard_install sys_type="yum" sep="-" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" @mockfalse yum install wazuh-dashboard-1.13.2-1 -y dashboard_install @@ -78,7 +78,7 @@ test-05-dashboard_install-apt() { load-dashboard_install sys_type="apt-get" sep="=" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" dashboard_install } @@ -91,7 +91,7 @@ test-ASSERT-FAIL-06-dashboard_install-apt-error() { load-dashboard_install sys_type="apt-get" sep="=" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" @mockfalse apt install wazuh-dashboard=1.13.2-1 -y dashboard_install diff --git a/tests/unattended/unit/suites/test-indexer.sh b/tests/unattended/unit/suites/test-indexer.sh index 4e7434ae9f..63668a6c3b 100644 --- a/tests/unattended/unit/suites/test-indexer.sh +++ b/tests/unattended/unit/suites/test-indexer.sh @@ -49,7 +49,7 @@ test-03-indexer_install-yum() { load-indexer_install sys_type="yum" sep="-" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" indexer_install } @@ -63,7 +63,7 @@ test-ASSERT-FAIL-04-indexer_install-yum-error() { load-indexer_install sys_type="yum" sep="-" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" @mockfalse yum install wazuh-indexer-1.13.2-1 -y indexer_install @@ -73,7 +73,7 @@ test-05-indexer_install-apt() { load-indexer_install sys_type="apt-get" sep="=" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" indexer_install } @@ -87,7 +87,7 @@ test-ASSERT-FAIL-06-indexer_install-apt-error() { load-indexer_install sys_type="apt-get" sep="=" - wazuh_version="4.8.1" + wazuh_version="4.8.2" wazuh_revision="1" @mockfalse apt install wazuh-indexer=1.13.2-1 -y indexer_install diff --git a/unattended_installer/install_functions/installVariables.sh b/unattended_installer/install_functions/installVariables.sh index fdcc4f9257..0262207e57 100644 --- a/unattended_installer/install_functions/installVariables.sh +++ b/unattended_installer/install_functions/installVariables.sh @@ -8,7 +8,7 @@ ## Package vars readonly wazuh_major="4.8" -readonly wazuh_version="4.8.1" +readonly wazuh_version="4.8.2" readonly filebeat_version="7.10.2" readonly wazuh_install_vesion="0.1" readonly source_branch="v${wazuh_version}" From 22117883b7897a0bcf47d81349c0703d43ef623d Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Mon, 19 Aug 2024 13:43:43 +0200 Subject: [PATCH 12/17] ci: add unattended_installer/build.sh to bump version tool --- bump_version.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/bump_version.py b/bump_version.py index 2dddb27176..44f2b1228a 100644 --- a/bump_version.py +++ b/bump_version.py @@ -29,7 +29,7 @@ version=Version(args.version) ## Find files to bump .spec, changelog, pkginfo, .pkgproj, test-*.sh, -## installVariables.sh, CHANGELOG.md +## installVariables.sh, unattended_installer/builder.sh, CHANGELOG.md spec_files=glob.glob('**/*.spec', recursive=True) changelog_files=glob.glob('**/changelog', recursive=True) copyright_files=glob.glob('**/copyright', recursive=True) @@ -37,6 +37,7 @@ pkgproj_files=glob.glob('**/*.pkgproj', recursive=True) test_files=glob.glob('**/test-*.sh', recursive=True) install_variables_files=glob.glob('**/installVariables.sh', recursive=True) +unattended_builder_files=glob.glob('**/unattended_installer/builder.sh', recursive=True) changelog_md_files=glob.glob('**/CHANGELOG.md', recursive=True) VERSION_files=glob.glob('**/VERSION', recursive=True) @@ -171,6 +172,19 @@ with open(install_variables_file, 'w', encoding="utf-8") as file: file.write(filedata) +## Bump version in unattended installer build file + +for builder_file in unattended_builder_files: + with open(builder_file, 'r', encoding="utf-8") as file: + print('Bumping version in ' + builder_file) + filedata=file.read() + # Replace version and revision + REGEX=r'source_branch="(\d+\.\d+\.\d+)"' + filedata=re.sub(REGEX, f'source_branch="{version}"', filedata) + + with open(builder_file, 'w', encoding="utf-8") as file: + file.write(filedata) + ## Bump version in CHANGELOG.md files for changelog_md_file in changelog_md_files: From 5b33d16bf8fb3bd9eebd4337bab2582413d54d93 Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Mon, 19 Aug 2024 13:44:28 +0200 Subject: [PATCH 13/17] chore: delete empty file --- hello | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 hello diff --git a/hello b/hello deleted file mode 100644 index e69de29bb2..0000000000 From 58c510eb1eb8c541302dab1189c9adea9bc35dfd Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Mon, 19 Aug 2024 13:45:26 +0200 Subject: [PATCH 14/17] ci: make bump_version tool executable --- bump_version.py | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 bump_version.py diff --git a/bump_version.py b/bump_version.py old mode 100644 new mode 100755 index 44f2b1228a..d0e8dac8db --- a/bump_version.py +++ b/bump_version.py @@ -1,3 +1,5 @@ +#! /usr/bin/env python3 + """ This script is used to bump the version of the Wazuh packages repository. Copyright (C) 2015-2020, Wazuh Inc. From e515920d0201c2c6ccfc24af93cfec9d95ce9d58 Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Mon, 19 Aug 2024 13:46:00 +0200 Subject: [PATCH 15/17] chore: bump builder.sh version to 4.8.2 --- unattended_installer/builder.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unattended_installer/builder.sh b/unattended_installer/builder.sh index 870d7e4bc9..f0819fa22b 100755 --- a/unattended_installer/builder.sh +++ b/unattended_installer/builder.sh @@ -16,7 +16,7 @@ readonly resources_certs="${base_path_builder}/cert_tool" readonly resources_passwords="${base_path_builder}/passwords_tool" readonly resources_common="${base_path_builder}/common_functions" readonly resources_download="${base_path_builder}/downloader" -source_branch="4.8.1" +source_branch="4.8.2" function getHelp() { From 141faf2576c26cc00dba038941f3fae667656afa Mon Sep 17 00:00:00 2001 From: c-bordon Date: Tue, 20 Aug 2024 16:50:12 -0300 Subject: [PATCH 16/17] Fixed Filebeat template insert --- unattended_installer/install_functions/indexer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unattended_installer/install_functions/indexer.sh b/unattended_installer/install_functions/indexer.sh index 3f3ce0ff79..5345fd2d54 100644 --- a/unattended_installer/install_functions/indexer.sh +++ b/unattended_installer/install_functions/indexer.sh @@ -206,7 +206,7 @@ function indexer_startCluster() { if [ -n "${offline_install}" ]; then filebeat_wazuh_template="file://${offline_files_path}/wazuh-template.json" fi - http_status=$(eval "common_curl --silent '${filebeat_wazuh_template}' --max-time 300 --retry 5 --retry-delay 5 ${debug}" | eval "common_curl -X PUT 'https://${indexer_node_ips[pos]}:9200/_template/wazuh' -H \'Content-Type: application/json\' -d @- -uadmin:admin -k --max-time 300 --retry 5 --retry-delay 5 -w "%{http_code}" -o /dev/null") + http_status=$(eval "common_curl --silent '${filebeat_wazuh_template}' --max-time 300 --retry 5 --retry-delay 5" | eval "common_curl -X PUT 'https://${indexer_node_ips[pos]}:9200/_template/wazuh' -H \'Content-Type: application/json\' -d @- -uadmin:admin -k --max-time 300 --silent --retry 5 --retry-delay 5 -w "%{http_code}" -o /dev/null") if [ "${http_status}" -ne 200 ]; then common_logger -e "The wazuh-alerts template could not be inserted into the Wazuh indexer cluster." exit 1 From 77dee151d868430bef0beff37ee469aa2607008c Mon Sep 17 00:00:00 2001 From: Vikman Fernandez-Castro Date: Wed, 21 Aug 2024 11:47:44 +0200 Subject: [PATCH 17/17] chore: update 4.9.0 release date --- aix/SPECS/wazuh-agent-aix.spec | 2 +- solaris/solaris10/pkginfo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aix/SPECS/wazuh-agent-aix.spec b/aix/SPECS/wazuh-agent-aix.spec index cdf89f6f22..cda4100254 100644 --- a/aix/SPECS/wazuh-agent-aix.spec +++ b/aix/SPECS/wazuh-agent-aix.spec @@ -291,7 +291,7 @@ rm -fr %{buildroot} %attr(750, root, wazuh) %{_localstatedir}/wodles/* %changelog -* Thu Aug 15 2024 support - 4.9.0 +* Thu Aug 29 2024 support - 4.9.0 - More info: https://documentation.wazuh.com/current/release-notes/release-4-9-0.html * Tue Aug 20 2024 support - 4.8.2 - More info: https://documentation.wazuh.com/current/release-notes/release-4-8-2.html diff --git a/solaris/solaris10/pkginfo b/solaris/solaris10/pkginfo index 6826366149..2d8d1e1be5 100644 --- a/solaris/solaris10/pkginfo +++ b/solaris/solaris10/pkginfo @@ -5,7 +5,7 @@ ARCH="i386" CLASSES="none" CATEGORY="system" VENDOR="Wazuh, Inc " -PSTAMP="15Aug2024" +PSTAMP="29Aug2024" EMAIL="info@wazuh.com" ISTATES="S s 1 2 3" RSTATES="S s 1 2 3"