Merge branch '2.4' into feature/modulerework

pull/1380/head
Iglocska 2016-06-30 14:39:20 +02:00
commit 28af0d1bd4
60 changed files with 34696 additions and 320 deletions

View File

@ -10,27 +10,25 @@ Install a minimal CentOS 7.x system with the software:
- LAMP server (actually, this is done below)
- Mail server
# Make sure you set your hostname CORRECTLY vs. like an animal (manually in /etc/hostname)
hostnamectl set-hostname misp # or whatever you want it to be
# Make sure your system is up2date:
yum update
2/ Dependencies *
----------------
Once the system is installed you can perform the following steps as root:
# We need some packages from the Extra Packages for Enterprise Linux repository
curl -o epel.rpm http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm
rpm -Uvh epel.rpm
yum install epel-release
# Since MISP 2.4 PHP 5.5 is a minimal requirement, so we need a newer version than CentOS base provides
# Software Collections is a way do to this, see https://wiki.centos.org/AdditionalResources/Repositories/SCL
yum install centos-release-scl
# Because vim is just so practical
yum install vim
# Install the dependencies:
yum install gcc git httpd zip redis mysql-server python-devel python-pip libxslt-devel zlib-devel
yum install gcc git httpd zip redis mariadb mariadb-server python-devel python-pip libxslt-devel zlib-devel
# Install PHP 5.6 from SCL, see https://www.softwarecollections.org/en/scls/rhscl/rh-php56/
yum install rh-php56 rh-php56-php-fpm rh-php56-php-devel rh-php56-php-mysqlnd rh-php56-php-mbstring
@ -40,9 +38,6 @@ yum install rh-php56 rh-php56-php-fpm rh-php56-php-devel rh-php56-php-mysqlnd rh
systemctl enable rh-php56-php-fpm.service
systemctl start rh-php56-php-fpm.service
# php-fpm is accessed using the fcgi interface
yum install mod_fcgid
# Start a new shell with rh-php56 enabled
scl enable rh-php56 bash
@ -70,7 +65,8 @@ cd /var/www/MISP
git config core.filemode false
# install Mitre's STIX and its dependencies by running the following commands:
yum install python-importlib python-lxml python-dateutil python-six
pip install importlib
yum install python-lxml python-dateutil python-six
cd /var/www/MISP/app/files/scripts
git clone https://github.com/CybOXProject/python-cybox.git
git clone https://github.com/STIXProject/python-stix.git
@ -104,8 +100,8 @@ php composer.phar require kamisama/cake-resque:4.1.2
php composer.phar config vendor-dir Vendor
php composer.phar install
# CakeResque normally uses phpredis to connect to redis, but it has a (buggy) fallback connector through Redisent. It is highly advised to install phpredis
pecl install redis
# CakeResque normally uses phpredis to connect to redis, but it has a (buggy) fallback connector through Redisent. It is highly advised to install phpredis using "yum install php-redis"
pecl install redis-2.2.8
echo "extension=redis.so" > /etc/opt/rh/rh-php56/php-fpm.d/redis.ini
ln -s ../php-fpm.d/redis.ini /etc/opt/rh/rh-php56/php.d/99-redis.ini
systemctl restart rh-php56-php-fpm.service
@ -134,8 +130,6 @@ chown -R apache:apache /var/www/MISP/app/webroot/img/custom
6/ Create a database and user
-----------------------------
yum install mariadb-server
# Enable, start and secure your mysql database server
systemctl enable mariadb.service
systemctl start mariadb.service
@ -201,7 +195,7 @@ cp -a core.default.php core.php
cp -a config.default.php config.php
# Configure the fields in the newly created files:
# config.php : baseurl
# config.php : baseurl (example: 'baseurl' => 'http://msip',) - don't use "localhost" it causes issues when browsing externally
# database.php : login, port, password, database
# Important! Change the salt key in /var/www/MISP/app/Config/config.php
@ -236,7 +230,7 @@ su -s /bin/bash apache -c 'scl enable rh-php56 /var/www/MISP/app/Console/worker/
# and make sure it will execute
chmod +x /etc/rc.local
# Now log in using the webinterface:
# Now log in using the webinterface: http://misp/users/login
# The default user/pass = admin@admin.test/admin
# Using the server settings tool in the admin interface (Administration -> Server Settings), set MISP up to your preference

View File

@ -1,10 +1,10 @@
INSTALLATION INSTRUCTIONS
------------------------- for debian-server
------------------------- for Debian 7 "wheezy" server
1/ Minimal debian install
-------------------------
Install a minimal debian-server system with the software:
Install a minimal Debian 7 "wheezy" server system with the software:
- OpenSSH server
- LAMP server (don't forget php5-mysql)

268
INSTALL/INSTALL.debian8.txt Normal file
View File

@ -0,0 +1,268 @@
INSTALLATION INSTRUCTIONS
------------------------- for Debian 8 "jessie" server
1/ Minimal Debian install
-------------------------
# Install a minimal Debian 8 "jessie" server system with the software:
- OpenSSH server
# Make sure your system is up2date:
sudo apt-get update
sudo apt-get upgrade
# install postfix, there will be some questions.
sudo apt-get install postfix
# Postfix Configuration: Satellite system
# change the relay server later with:
sudo postconf -e 'relayhost = example.com'
sudo postfix reload
2/ Install LAMP & dependencies
------------------------------
Once the system is installed you can perform the following steps:
# Install the dependencies: (some might already be installed)
sudo apt-get install curl gcc git gnupg-agent make python openssl redis-server sudo vim zip
# Install MariaDB (a MySQL fork/alternative)
sudo apt-get install mariadb-client mariadb-server
# Secure the MariaDB installation (especially by setting a strong root password)
sudo mysql_secure_installation
# Install Apache2
sudo apt-get install apache2 apache2-doc apache2-utils
# Enable modules, settings, and default of SSL in Apache
sudo a2dismod status
sudo a2enmod ssl rewrite
sudo a2dissite 000-default
sudo a2ensite default-ssl
# Install PHP and dependencies
sudo apt-get install libapache2-mod-php5 php5 php5-cli php-crypt-gpg php5-dev php5-json php5-mysql php5-readline php5-redis
# Apply all changes
sudo systemctl restart apache2
3/ MISP code
------------
# Download MISP using git in the /var/www/ directory.
sudo mkdir /var/www/MISP
sudo chown www-data:www-data /var/www/MISP
cd /var/www/MISP
sudo -u www-data git clone https://github.com/MISP/MISP.git /var/www/MISP
# Make git ignore filesystem permission differences
sudo -u www-data git config core.filemode false
# install Mitre's STIX and its dependencies by running the following commands:
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev
cd /var/www/MISP/app/files/scripts
sudo -u www-data git clone https://github.com/CybOXProject/python-cybox.git
sudo -u www-data git clone https://github.com/STIXProject/python-stix.git
cd /var/www/MISP/app/files/scripts/python-cybox
sudo -u www-data git checkout v2.1.0.12
sudo python setup.py install
cd /var/www/MISP/app/files/scripts/python-stix
sudo -u www-data git checkout v1.1.1.4
sudo python setup.py install
4/ CakePHP
-----------
# CakePHP is included as a submodule of MISP, execute the following commands to let git fetch it:
cd /var/www/MISP
sudo -u www-data git submodule init
sudo -u www-data git submodule update
# Once done, install CakeResque along with its dependencies if you intend to use the built in background jobs:
cd /var/www/MISP/app
sudo -u www-data wget https://getcomposer.org/download/1.1.2/composer.phar -O composer.phar
sudo -u www-data php composer.phar require kamisama/cake-resque:4.1.2
sudo -u www-data php composer.phar config vendor-dir Vendor
sudo -u www-data php composer.phar install
# Enable CakeResque with php-redis
sudo php5enmod redis
# To use the scheduler worker for scheduled tasks, do the following:
sudo -u www-data cp -fa /var/www/MISP/INSTALL/setup/config.php /var/www/MISP/app/Plugin/CakeResque/Config/config.php
5/ Set the permissions
----------------------
# Check if the permissions are set correctly using the following commands:
sudo chown -R www-data:www-data /var/www/MISP
sudo chmod -R 750 /var/www/MISP
sudo chmod -R g+ws /var/www/MISP/app/tmp
sudo chmod -R g+ws /var/www/MISP/app/files
sudo chmod -R g+ws /var/www/MISP/app/files/scripts/tmp
6/ Create a database and user
-----------------------------
# Enter the mysql shell
sudo mysql -u root -p
MariaDB [(none)]> create database misp;
MariaDB [(none)]> grant usage on *.* to misp@localhost identified by 'XXXXdbpasswordhereXXXXX';
MariaDB [(none)]> grant all privileges on misp.* to misp@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
# Import the empty MISP database from MYSQL.sql
sudo -u www-data sh -c "mysql -u misp -p misp < /var/www/MISP/INSTALL/MYSQL.sql"
# enter the password you set previously
7/ Apache configuration
-----------------------
# Now configure your Apache webserver with the DocumentRoot /var/www/MISP/app/webroot/
sudo cp /var/www/MISP/INSTALL/apache.misp.ssl /etc/apache2/sites-available/misp-ssl.conf
# Be aware that the configuration files for Apache 2.4 and up have changed.
# The configuration file has to have the .conf extension in the sites-available directory
# For more information, visit http://httpd.apache.org/docs/2.4/upgrading.html
# If a valid SSL certificate is not already created for the server, create a self-signed certificate:
openssl req -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=<Country>/ST=<State>/L=<Locality>/O=<Organization>/OU=<Organizational Unit Name>/CN=<QDN.here>/emailAddress=admin@<your.FQDN.here>" \
-keyout /etc/ssl/private/misp.local.key -out /etc/ssl/private/misp.local.crt
# Otherwise, copy the SSLCertificateFile, SSLCertificateKeyFile, and SSLCertificateChainFile to /etc/ssl/private/. (Modify path and config to fit your environment)
============================================= Begin sample working SSL config for MISP
<VirtualHost <IP, FQDN, or *>:80>
ServerName <your.FQDN.here>
Redirect permanent / https://<your.FQDN.here>
LogLevel warn
ErrorLog /var/log/apache2/misp.local_error.log
CustomLog /var/log/apache2/misp.local_access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost <IP, FQDN, or *>:443>
ServerAdmin admin@<your.FQDN.here>
ServerName <your.FQDN.here>
DocumentRoot /var/www/MISP/app/webroot
<Directory /var/www/MISP/app/webroot>
Options -Indexes
AllowOverride all
Order allow,deny
allow from all
</Directory>
SSLEngine On
SSLCertificateFile /etc/ssl/private/misp.local.crt
SSLCertificateKeyFile /etc/ssl/private/misp.local.key
# SSLCertificateChainFile /etc/ssl/private/misp-chain.crt
LogLevel warn
ErrorLog /var/log/apache2/misp.local_error.log
CustomLog /var/log/apache2/misp.local_access.log combined
ServerSignature Off
</VirtualHost>
============================================= End sample working SSL config for MISP
# activate new vhost
sudo a2dissite default-ssl
sudo a2ensite misp-ssl
# Restart apache
sudo systemctl restart apache2
8/ MISP configuration
---------------------
# There are 4 sample configuration files in /var/www/MISP/app/Config that need to be copied
sudo -u www-data cp -a /var/www/MISP/app/Config/bootstrap.default.php /var/www/MISP/app/Config/bootstrap.php
sudo -u www-data cp -a /var/www/MISP/app/Config/database.default.php /var/www/MISP/app/Config/database.php
sudo -u www-data cp -a /var/www/MISP/app/Config/core.default.php /var/www/MISP/app/Config/core.php
sudo -u www-data cp -a /var/www/MISP/app/Config/config.default.php /var/www/MISP/app/Config/config.php
# Configure the fields in the newly created files:
sudo -u www-data vim /var/www/MISP/app/Config/database.php
# login, port, password, database
# Important! Change the salt key in /var/www/MISP/app/Config/config.php
# The salt key must be a string at least 32 bytes long.
# The admin user account will be generated on the first login, make sure that the salt is changed before you create that user
# If you forget to do this step, and you are still dealing with a fresh installation, just alter the salt,
# delete the user from mysql and log in again using the default admin credentials (admin@admin.test / admin)
# Change base url in config.php
sudo -u www-data vim /var/www/MISP/app/Config/config.php
# example: 'baseurl' => 'https://<your.FQDN.here>',
# alternatively, you can leave this field empty if you would like to use relative pathing in MISP
# 'baseurl' => '',
# and make sure the file permissions are still OK
sudo chown -R www-data:www-data /var/www/MISP/app/Config
sudo chmod -R 750 /var/www/MISP/app/Config
# Generate a GPG encryption key.
sudo -u www-data mkdir /var/www/MISP/.gnupg
sudo chmod 700 /var/www/MISP/.gnupg
sudo -u www-data gpg --homedir /var/www/MISP/.gnupg --gen-key
# The email address should match the one set in the config.php / set in the configuration menu in the administration menu configuration file
# And export the public key to the webroot
sudo -u www-data sh -c "gpg --homedir /var/www/MISP/.gnupg --export --armor YOUR-KEYS-EMAIL-HERE > /var/www/MISP/app/webroot/gpg.asc"
# To make the background workers start on boot
sudo chmod +x /var/www/MISP/app/Console/worker/start.sh
sudo vim /etc/rc.local
# Add the following line before the last line (exit 0). Make sure that you replace www-data with your apache user:
sudo -u www-data bash /var/www/MISP/app/Console/worker/start.sh
# Now log in using the webinterface:
# The default user/pass = admin@admin.test/admin
# Using the server settings tool in the admin interface (Administration -> Server Settings), set MISP up to your preference
# It is especially vital that no critical issues remain!
# start the workers by navigating to the workers tab and clicking restart all workers
# Don't forget to change the email, password and authentication key after installation.
# Once done, have a look at the diagnostics
# If any of the directories that MISP uses to store files is not writeable to the apache user, change the permissions
# you can do this by running the following commands:
sudo chmod -R 750 /var/www/MISP/<directory path with an indicated issue>
sudo chown -R www-data:www-data /var/www/MISP/<directory path with an indicated issue>
# Make sure that the STIX libraries and GnuPG work as intended, if not, refer to INSTALL.txt's paragraphs dealing with these two items
# If anything goes wrong, make sure that you check MISP's logs for errors:
# /var/www/MISP/app/tmp/logs/error.log
# /var/www/MISP/app/tmp/logs/resque-worker-error.log
# /var/www/MISP/app/tmp/logs/resque-scheduler-error.log
# /var/www/MISP/app/tmp/logs/resque-2015-01-01.log // where the actual date is the current date
Recommended actions
-------------------
- By default CakePHP exposes its name and version in email headers. Apply a patch to remove this behavior.
- You should really harden your OS
- You should really harden the configuration of Apache
- You should really harden the configuration of MySQL/MariaDB
- Keep your software up2date (OS, MISP, CakePHP and everything else)
- Log and audit
Optional features
-------------------
# MISP has a new pub/sub feature, using ZeroMQ. To enable it, simply run the following command
sudo pip install pyzmq
# ZeroMQ depends on the Python client for Redis
sudo pip install redis

View File

@ -1,10 +0,0 @@
MAINTENANCE INSTRUCTION
-----------------------
To supply the NATO STANAG AACP-2 VOLUME 9
MISP writes (audit) log lines to syslog.
The log lines are of level LOG_NOTICE.
The format is 'description' and 'change'
conform the MISP MySQL log table format.

View File

@ -0,0 +1,268 @@
INSTALLATION INSTRUCTIONS
------------------------- for Ubuntu 16.04-server
1/ Minimal Ubuntu install
-------------------------
# Install a minimal Ubuntu 16.04-server system with the software:
- OpenSSH server
# Make sure your system is up2date:
sudo apt-get update
sudo apt-get upgrade
# install postfix, there will be some questions.
sudo apt-get install postfix
# Postfix Configuration: Satellite system
# change the relay server later with:
sudo postconf -e 'relayhost = example.com'
sudo postfix reload
2/ Install LAMP & dependencies
------------------------------
Once the system is installed you can perform the following steps:
# Install the dependencies: (some might already be installed)
sudo apt-get install curl gcc git gnupg-agent make python openssl redis-server sudo vim zip
# Install MariaDB (a MySQL fork/alternative)
sudo apt-get install mariadb-client mariadb-server
# Secure the MariaDB installation (especially by setting a strong root password)
sudo mysql_secure_installation
# Install Apache2
sudo apt-get install apache2 apache2-doc apache2-utils
# Enable modules, settings, and default of SSL in Apache
sudo a2dismod status
sudo a2enmod ssl rewrite
sudo a2dissite 000-default
sudo a2ensite default-ssl
# Install PHP and dependencies
sudo apt-get install libapache2-mod-php php php-cli php-crypt-gpg php-dev php-json php-mysql php-opcache php-readline php-redis
# Apply all changes
sudo systemctl restart apache2
3/ MISP code
------------
# Download MISP using git in the /var/www/ directory.
sudo mkdir /var/www/MISP
sudo chown www-data:www-data /var/www/MISP
sudo -u www-data git clone https://github.com/MISP/MISP.git /var/www/MISP
cd /var/www/MISP
# Make git ignore filesystem permission differences
sudo -u www-data git config core.filemode false
# install Mitre's STIX and its dependencies by running the following commands:
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev
cd /var/www/MISP/app/files/scripts
sudo -u www-data git clone https://github.com/CybOXProject/python-cybox.git
sudo -u www-data git clone https://github.com/STIXProject/python-stix.git
cd /var/www/MISP/app/files/scripts/python-cybox
sudo -u www-data git checkout v2.1.0.12
sudo python setup.py install
cd /var/www/MISP/app/files/scripts/python-stix
sudo -u www-data git checkout v1.1.1.4
sudo python setup.py install
4/ CakePHP
-----------
# CakePHP is included as a submodule of MISP, execute the following commands to let git fetch it:
cd /var/www/MISP
sudo -u www-data git submodule init
sudo -u www-data git submodule update
# Once done, install CakeResque along with its dependencies if you intend to use the built in background jobs:
cd /var/www/MISP/app
sudo -u www-data wget https://getcomposer.org/download/1.1.2/composer.phar -O composer.phar
sudo -u www-data php composer.phar require kamisama/cake-resque:4.1.2
sudo -u www-data php composer.phar config vendor-dir Vendor
sudo -u www-data php composer.phar install
# Enable CakeResque with php-redis
sudo phpenmod redis
# To use the scheduler worker for scheduled tasks, do the following:
sudo -u www-data cp -fa /var/www/MISP/INSTALL/setup/config.php /var/www/MISP/app/Plugin/CakeResque/Config/config.php
5/ Set the permissions
----------------------
# Check if the permissions are set correctly using the following commands:
sudo chown -R www-data:www-data /var/www/MISP
sudo chmod -R 750 /var/www/MISP
sudo chmod -R g+ws /var/www/MISP/app/tmp
sudo chmod -R g+ws /var/www/MISP/app/files
sudo chmod -R g+ws /var/www/MISP/app/files/scripts/tmp
6/ Create a database and user
-----------------------------
# Enter the mysql shell
sudo mysql -u root -p
MariaDB [(none)]> create database misp;
MariaDB [(none)]> grant usage on *.* to misp@localhost identified by 'XXXXdbpasswordhereXXXXX';
MariaDB [(none)]> grant all privileges on misp.* to misp@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
# Import the empty MISP database from MYSQL.sql
sudo -u www-data sh -c "mysql -u misp -p misp < /var/www/MISP/INSTALL/MYSQL.sql"
# enter the password you set previously
7/ Apache configuration
-----------------------
# Now configure your Apache webserver with the DocumentRoot /var/www/MISP/app/webroot/
sudo cp /var/www/MISP/INSTALL/apache.misp.ssl /etc/apache2/sites-available/misp-ssl.conf
# Be aware that the configuration files for apache 2.4 and up have changed.
# The configuration file has to have the .conf extension in the sites-available directory
# For more information, visit http://httpd.apache.org/docs/2.4/upgrading.html
# If a valid SSL certificate is not already created for the server, create a self-signed certificate:
openssl req -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=<Country>/ST=<State>/L=<Locality>/O=<Organization>/OU=<Organizational Unit Name>/CN=<QDN.here>/emailAddress=admin@<your.FQDN.here>" \
-keyout /etc/ssl/private/misp.local.key -out /etc/ssl/private/misp.local.crt
# Otherwise, copy the SSLCertificateFile, SSLCertificateKeyFile, and SSLCertificateChainFile to /etc/ssl/private/. (Modify path and config to fit your environment)
============================================= Begin sample working SSL config for MISP
<VirtualHost <IP, FQDN, or *>:80>
ServerName <your.FQDN.here>
Redirect permanent / https://<your.FQDN.here>
LogLevel warn
ErrorLog /var/log/apache2/misp.local_error.log
CustomLog /var/log/apache2/misp.local_access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost <IP, FQDN, or *>:443>
ServerAdmin admin@<your.FQDN.here>
ServerName <your.FQDN.here>
DocumentRoot /var/www/MISP/app/webroot
<Directory /var/www/MISP/app/webroot>
Options -Indexes
AllowOverride all
Order allow,deny
allow from all
</Directory>
SSLEngine On
SSLCertificateFile /etc/ssl/private/misp.local.crt
SSLCertificateKeyFile /etc/ssl/private/misp.local.key
# SSLCertificateChainFile /etc/ssl/private/misp-chain.crt
LogLevel warn
ErrorLog /var/log/apache2/misp.local_error.log
CustomLog /var/log/apache2/misp.local_access.log combined
ServerSignature Off
</VirtualHost>
============================================= End sample working SSL config for MISP
# activate new vhost
sudo a2dissite default-ssl
sudo a2ensite misp-ssl
# Restart apache
sudo systemctl restart apache2
8/ MISP configuration
---------------------
# There are 4 sample configuration files in /var/www/MISP/app/Config that need to be copied
sudo -u www-data cp -a /var/www/MISP/app/Config/bootstrap.default.php /var/www/MISP/app/Config/bootstrap.php
sudo -u www-data cp -a /var/www/MISP/app/Config/database.default.php /var/www/MISP/app/Config/database.php
sudo -u www-data cp -a /var/www/MISP/app/Config/core.default.php /var/www/MISP/app/Config/core.php
sudo -u www-data cp -a /var/www/MISP/app/Config/config.default.php /var/www/MISP/app/Config/config.php
# Configure the fields in the newly created files:
sudo -u www-data vim /var/www/MISP/app/Config/database.php
# login, port, password, database
# Important! Change the salt key in /var/www/MISP/app/Config/config.php
# The salt key must be a string at least 32 bytes long.
# The admin user account will be generated on the first login, make sure that the salt is changed before you create that user
# If you forget to do this step, and you are still dealing with a fresh installation, just alter the salt,
# delete the user from mysql and log in again using the default admin credentials (admin@admin.test / admin)
# Change base url in config.php
sudo -u www-data vim /var/www/MISP/app/Config/config.php
# example: 'baseurl' => 'https://<your.FQDN.here>',
# alternatively, you can leave this field empty if you would like to use relative pathing in MISP
# 'baseurl' => '',
# and make sure the file permissions are still OK
sudo chown -R www-data:www-data /var/www/MISP/app/Config
sudo chmod -R 750 /var/www/MISP/app/Config
# Generate a GPG encryption key.
sudo -u www-data mkdir /var/www/MISP/.gnupg
sudo chmod 700 /var/www/MISP/.gnupg
sudo -u www-data gpg --homedir /var/www/MISP/.gnupg --gen-key
# The email address should match the one set in the config.php / set in the configuration menu in the administration menu configuration file
# And export the public key to the webroot
sudo -u www-data sh -c "gpg --homedir /var/www/MISP/.gnupg --export --armor YOUR-KEYS-EMAIL-HERE > /var/www/MISP/app/webroot/gpg.asc"
# To make the background workers start on boot
sudo chmod +x /var/www/MISP/app/Console/worker/start.sh
sudo vim /etc/rc.local
# Add the following line before the last line (exit 0). Make sure that you replace www-data with your apache user:
sudo -u www-data bash /var/www/MISP/app/Console/worker/start.sh
# Now log in using the webinterface:
# The default user/pass = admin@admin.test/admin
# Using the server settings tool in the admin interface (Administration -> Server Settings), set MISP up to your preference
# It is especially vital that no critical issues remain!
# start the workers by navigating to the workers tab and clicking restart all workers
# Don't forget to change the email, password and authentication key after installation.
# Once done, have a look at the diagnostics
# If any of the directories that MISP uses to store files is not writeable to the apache user, change the permissions
# you can do this by running the following commands:
sudo chmod -R 750 /var/www/MISP/<directory path with an indicated issue>
sudo chown -R www-data:www-data /var/www/MISP/<directory path with an indicated issue>
# Make sure that the STIX libraries and GnuPG work as intended, if not, refer to INSTALL.txt's paragraphs dealing with these two items
# If anything goes wrong, make sure that you check MISP's logs for errors:
# /var/www/MISP/app/tmp/logs/error.log
# /var/www/MISP/app/tmp/logs/resque-worker-error.log
# /var/www/MISP/app/tmp/logs/resque-scheduler-error.log
# /var/www/MISP/app/tmp/logs/resque-2015-01-01.log // where the actual date is the current date
Recommended actions
-------------------
- By default CakePHP exposes its name and version in email headers. Apply a patch to remove this behavior.
- You should really harden your OS
- You should really harden the configuration of Apache
- You should really harden the configuration of MySQL/MariaDB
- Keep your software up2date (OS, MISP, CakePHP and everything else)
- Log and audit
Optional features
-------------------
# MISP has a new pub/sub feature, using ZeroMQ. To enable it, simply run the following command
sudo pip install pyzmq
# ZeroMQ depends on the Python client for Redis
sudo pip install redis

View File

@ -269,7 +269,7 @@ CREATE TABLE `organisations` (
`nationality` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`sector` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`created_by` int(11) NOT NULL DEFAULT '0',
`uuid` varchar(40) COLLATE utf8_bin NOT NULL,
`uuid` varchar(40) COLLATE utf8_bin DEFAULT NULL,
`contacts` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`local` tinyint(1) NOT NULL DEFAULT '0',
`landingpage` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,

View File

@ -34,8 +34,10 @@ cd /var/www/MISP/app
vim composer.json
php composer.phar self-update
# if behind a proxy use HTTP_PROXY="http://yourproxy:port" php composer.phar self-update
php composer.phar update
# To use the scheduler worker for scheduled tasks, do the following:
cp -fa /var/www/MISP/INSTALL/setup/config.php /var/www/MISP/app/Plugin/CakeResque/Config/config.php

View File

@ -173,3 +173,4 @@ CREATE TABLE IF NOT EXISTS `news` (
ALTER TABLE `users` CHANGE `newsread` `newsread` int(11) unsigned;
ALTER TABLE `organisations` CHANGE `uuid` `uuid` varchar(40) COLLATE utf8_bin DEFAULT NULL;

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -0,0 +1,287 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 212.6 212.6" style="enable-background:new 0 0 212.6 212.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#456D81;stroke-width:0.8329;stroke-linecap:square;stroke-miterlimit:10;}
.st1{fill:#DF2E39;}
.st2{display:none;fill:none;stroke:#456D81;stroke-width:0.8301;stroke-linecap:square;stroke-miterlimit:10;stroke-dasharray:0.1876,1.8762;}
.st3{fill:#FFFFFF;}
.st4{fill:#456D81;}
.st5{opacity:0.3;fill:none;stroke:#456D81;stroke-width:0.535;stroke-miterlimit:10;}
</style>
<path class="st0" d="M19.2,99.7c3-45.5,40.9-81.5,87.1-81.5c46.2,0,84.1,36,87.1,81.4"/>
<g>
<path class="st1" d="M193.1,109.5c-2.1,46.1-40.2,82.9-86.8,82.9c-46.6,0-84.7-36.8-86.8-82.9H-19c2.1,67.3,57.5,121.4,125.3,121.4
c67.8,0,123.2-54.1,125.3-121.4H193.1z"/>
</g>
<circle class="st2" cx="106.3" cy="106.8" r="87"/>
<g>
<path class="st3" d="M38.9,168.2l1.8,1.7l-2.6,4.1l4.2-2.6l1.8,1.7l-2.3,4.3l3.9-2.8l1.8,1.7l-7.2,4.9l-1.9-1.8l2.6-4.9l-4.7,2.9
l-1.9-1.8L38.9,168.2z"/>
<path class="st3" d="M48.4,176.9l5.6,4.2l-1.1,1.4l-3.5-2.6l-0.8,1.1l3.3,2.4l-1,1.4l-3.3-2.4l-1,1.3l3.6,2.7L49,188l-5.7-4.3
L48.4,176.9z"/>
<path class="st3" d="M59.2,184.5l3.4,1.9c0.7,0.4,1.2,0.8,1.5,1.2c0.3,0.4,0.5,0.9,0.6,1.3s0.1,1-0.1,1.5c-0.1,0.5-0.3,1-0.6,1.5
c-0.4,0.8-0.9,1.4-1.3,1.7c-0.4,0.3-0.9,0.6-1.4,0.7c-0.5,0.1-0.9,0.1-1.4,0c-0.6-0.1-1.1-0.3-1.5-0.5l-3.4-1.9L59.2,184.5z
M60.6,187.4l-2.2,4.1l0.6,0.3c0.5,0.3,0.9,0.4,1.1,0.4c0.3,0,0.5-0.1,0.8-0.3c0.3-0.2,0.6-0.6,0.9-1.2c0.4-0.8,0.6-1.4,0.5-1.8
c-0.1-0.4-0.4-0.8-1-1.1L60.6,187.4z"/>
<path class="st3" d="M65.5,192.7c0.5-1.3,1.3-2.1,2.3-2.6c1-0.4,2.1-0.4,3.4,0.2c1.3,0.5,2.2,1.3,2.6,2.3c0.4,1,0.4,2.1-0.2,3.4
c-0.4,0.9-0.8,1.6-1.4,2.1c-0.5,0.5-1.2,0.7-1.9,0.8c-0.7,0.1-1.5,0-2.4-0.4c-0.9-0.4-1.6-0.8-2-1.3c-0.5-0.5-0.7-1.2-0.9-1.9
S65.2,193.6,65.5,192.7z M67.9,193.7c-0.3,0.8-0.4,1.4-0.3,1.9c0.2,0.5,0.5,0.8,1,1c0.5,0.2,1,0.2,1.4,0c0.4-0.2,0.8-0.8,1.2-1.6
c0.3-0.7,0.4-1.3,0.2-1.8c-0.2-0.5-0.5-0.8-1-1c-0.5-0.2-1-0.2-1.4,0C68.7,192.4,68.3,192.9,67.9,193.7z"/>
<path class="st3" d="M80.4,193.7l7.7,1.9l-0.5,2l-2.6-0.6l-1.5,6.2l-2.5-0.6l1.5-6.2l-2.6-0.6L80.4,193.7z"/>
<path class="st3" d="M88.3,200c0.2-1.4,0.7-2.4,1.6-3c0.9-0.7,2-0.9,3.3-0.7c1.4,0.2,2.4,0.7,3.1,1.6c0.6,0.9,0.9,2,0.7,3.3
c-0.1,1-0.4,1.8-0.8,2.3c-0.4,0.6-1,1-1.6,1.3c-0.7,0.3-1.5,0.3-2.4,0.2c-0.9-0.1-1.7-0.4-2.3-0.8c-0.6-0.4-1-0.9-1.3-1.6
C88.2,201.8,88.1,201,88.3,200z M90.9,200.3c-0.1,0.8,0,1.5,0.2,1.9c0.3,0.4,0.7,0.7,1.2,0.7c0.6,0.1,1,0,1.4-0.4
c0.4-0.3,0.6-0.9,0.7-1.9c0.1-0.8,0-1.4-0.2-1.8c-0.3-0.4-0.7-0.7-1.2-0.7c-0.5-0.1-1,0.1-1.3,0.4C91.2,198.9,91,199.5,90.9,200.3z
"/>
<path class="st3" d="M98.7,201.3c0-1.4,0.5-2.5,1.2-3.2c0.8-0.8,1.9-1.1,3.2-1.1c1.4,0,2.5,0.4,3.2,1.2c0.7,0.8,1.1,1.9,1.1,3.2
c0,1-0.2,1.8-0.6,2.4c-0.4,0.6-0.8,1.1-1.5,1.4c-0.6,0.3-1.4,0.5-2.4,0.5c-1,0-1.7-0.2-2.4-0.5c-0.6-0.3-1.1-0.8-1.5-1.5
C98.8,203.2,98.7,202.3,98.7,201.3z M101.3,201.4c0,0.9,0.1,1.5,0.4,1.9c0.3,0.4,0.7,0.6,1.3,0.6c0.6,0,1-0.2,1.3-0.5
c0.3-0.4,0.5-1,0.5-2c0-0.8-0.1-1.4-0.4-1.8c-0.3-0.4-0.7-0.6-1.3-0.6c-0.5,0-1,0.2-1.3,0.5C101.5,199.9,101.3,200.5,101.3,201.4z"
/>
<path class="st3" d="M113.5,201.4l3.4-0.3l0.2,1.8l-3.4,0.3L113.5,201.4z"/>
<path class="st3" d="M125.7,195l2.6-0.6l1,4.5c0.2,0.9,0.3,1.7,0.2,2.2s-0.3,1-0.7,1.5c-0.4,0.5-1,0.8-1.8,0.9
c-0.8,0.2-1.5,0.2-2,0.1c-0.5-0.1-0.9-0.4-1.3-0.8c-0.3-0.4-0.6-0.9-0.8-1.5l2.4-0.9c0.1,0.4,0.2,0.6,0.3,0.8
c0.1,0.2,0.2,0.3,0.4,0.4c0.1,0,0.3,0.1,0.4,0c0.3-0.1,0.5-0.2,0.6-0.5c0.1-0.2,0.1-0.6,0-1.1L125.7,195z"/>
<path class="st3" d="M131.2,198.1c-0.4-1.3-0.4-2.5,0.1-3.4s1.4-1.7,2.7-2.1c1.3-0.4,2.5-0.4,3.4,0.1c1,0.5,1.7,1.4,2.1,2.7
c0.3,0.9,0.4,1.8,0.3,2.5s-0.4,1.3-0.9,1.9c-0.5,0.5-1.2,0.9-2.1,1.2c-0.9,0.3-1.7,0.4-2.4,0.3c-0.7-0.1-1.3-0.4-1.9-0.9
C132,199.8,131.5,199,131.2,198.1z M133.7,197.3c0.3,0.8,0.6,1.3,1,1.6c0.4,0.3,0.9,0.3,1.4,0.1c0.5-0.2,0.9-0.5,1.1-0.9
c0.2-0.4,0.1-1.1-0.2-2c-0.2-0.8-0.6-1.3-1-1.5c-0.4-0.2-0.9-0.3-1.4-0.1c-0.5,0.2-0.8,0.5-1,0.9
C133.4,195.8,133.5,196.5,133.7,197.3z"/>
<path class="st3" d="M139.9,190.6l2.4-1l3.3,7.8l-2.4,1L139.9,190.6z"/>
<path class="st3" d="M144.4,188.7l2.2-1.1l5,2.7l-2.2-4.2l2.2-1.1l3.9,7.5l-2.2,1.1l-5-2.7l2.2,4.1l-2.2,1.1L144.4,188.7z"/>
<path class="st3" d="M161.3,178.3l2.1-1.6l3,4c0.3,0.4,0.5,0.8,0.7,1.3s0.2,0.9,0.1,1.4c-0.1,0.5-0.2,0.9-0.4,1.2
c-0.3,0.5-0.7,0.9-1.3,1.3c-0.3,0.2-0.7,0.5-1.1,0.7c-0.4,0.2-0.8,0.4-1.2,0.5c-0.4,0.1-0.8,0-1.2,0c-0.4-0.1-0.8-0.2-1-0.5
c-0.5-0.3-0.8-0.7-1.1-1l-3-4l2.1-1.6l3.1,4.1c0.3,0.4,0.6,0.6,1,0.6c0.4,0.1,0.7-0.1,1.1-0.3c0.4-0.3,0.6-0.6,0.6-0.9
c0.1-0.4-0.1-0.7-0.3-1.1L161.3,178.3z"/>
<path class="st3" d="M168.4,179.9l1.7-1.8c0.3,0.3,0.6,0.4,0.9,0.5c0.4,0.1,0.8-0.1,1.2-0.4c0.3-0.3,0.4-0.5,0.5-0.8
c0-0.3,0-0.5-0.2-0.7c-0.1-0.2-0.4-0.2-0.6-0.2c-0.3,0-0.7,0.2-1.3,0.5c-1,0.6-1.9,0.9-2.5,0.9c-0.7,0-1.2-0.2-1.7-0.7
c-0.3-0.3-0.5-0.7-0.6-1.2c-0.1-0.5,0-0.9,0.2-1.4s0.7-1.1,1.3-1.7c0.8-0.7,1.5-1.1,2.2-1.2s1.4,0.2,2,0.7l-1.7,1.8
c-0.3-0.2-0.6-0.3-0.9-0.3c-0.3,0-0.5,0.1-0.8,0.4c-0.2,0.2-0.3,0.4-0.4,0.6s0,0.4,0.2,0.5c0.1,0.1,0.2,0.1,0.4,0.1
c0.2,0,0.5-0.1,0.9-0.4c1-0.6,1.8-1,2.3-1.1c0.5-0.2,1-0.2,1.4,0c0.4,0.1,0.8,0.4,1.1,0.7c0.4,0.4,0.6,0.9,0.7,1.4
c0.1,0.5,0,1.1-0.2,1.6c-0.2,0.5-0.7,1.1-1.3,1.6c-1.1,1-2,1.5-2.8,1.4C169.7,180.8,169,180.5,168.4,179.9z"/>
<path class="st3" d="M171.2,169.4l1.7-1.8l1.4,1.3l2.5,3l-1.1,1.1l-3.2-2.3L171.2,169.4z M175.9,173.7l1.6-1.7l1.5,1.4l-1.6,1.7
L175.9,173.7z"/>
</g>
<g>
<path class="st4" d="M11.2,87.1c-0.2,0.1-0.4,0.3-0.5,0.4c-0.1,0.2-0.2,0.4-0.3,0.7c0,0.3,0,0.5,0,0.8c0.1,0.2,0.2,0.5,0.3,0.7
c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.8,0.3c0.3,0.1,0.6,0.1,0.9,0c0.3,0,0.5-0.1,0.7-0.3c0.2-0.1,0.4-0.3,0.5-0.5
c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0-0.6,0-0.8c-0.1-0.2-0.2-0.5-0.4-0.6l1.1-1c0.3,0.3,0.6,0.7,0.7,1.2c0.1,0.4,0.1,0.9,0,1.3
c-0.1,0.5-0.2,1-0.5,1.3c-0.2,0.4-0.5,0.7-0.9,1c-0.3,0.3-0.7,0.4-1.2,0.5c-0.4,0.1-0.9,0.1-1.4,0c-0.5-0.1-1-0.3-1.4-0.5
c-0.4-0.2-0.7-0.5-0.9-0.9c-0.2-0.4-0.4-0.8-0.5-1.2c-0.1-0.5-0.1-0.9,0-1.4c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.4,0.3-0.6
c0.1-0.2,0.2-0.3,0.4-0.5c0.2-0.2,0.3-0.3,0.5-0.4L11.2,87.1z"/>
<path class="st4" d="M14.8,80.6L10.6,82l0.5-1.7l2.7-0.7l-2-2.1l0.5-1.6l2.9,3.4l2.7,0.8l-0.4,1.4L14.8,80.6z"/>
<path class="st4" d="M13.7,71.9l0.9-2.3c0.1-0.3,0.2-0.5,0.4-0.8c0.1-0.3,0.3-0.5,0.5-0.6c0.2-0.2,0.4-0.3,0.7-0.3
c0.3-0.1,0.5,0,0.9,0.1c0.3,0.1,0.6,0.3,0.7,0.6c0.2,0.3,0.2,0.6,0.2,0.9l0,0c0.1-0.2,0.2-0.3,0.4-0.5s0.3-0.2,0.5-0.3
s0.4-0.1,0.6-0.1c0.2,0,0.4,0,0.6,0.1c0.3,0.1,0.6,0.3,0.7,0.5s0.3,0.5,0.3,0.7c0,0.3,0,0.6,0,0.8c0,0.3-0.1,0.6-0.2,0.8l-1,2.5
L13.7,71.9z M16.6,71.6l0.4-1c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2,0-0.3c0-0.1-0.1-0.2-0.1-0.3c-0.1-0.1-0.2-0.1-0.3-0.2
c-0.1,0-0.2-0.1-0.3,0c-0.1,0-0.2,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.3L15.3,71L16.6,71.6z M19.1,72.5
l0.5-1.2c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.2,0-0.3c0-0.1-0.1-0.2-0.1-0.3s-0.2-0.2-0.3-0.2c-0.1-0.1-0.3-0.1-0.4,0
s-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.2-0.2,0.3l-0.4,1L19.1,72.5z"/>
<path class="st4" d="M17.5,63l2-3.9l1.2,0.6l-1.4,2.7l1.1,0.6l1.3-2.5l1.2,0.6l-1.3,2.5l1.2,0.6l1.4-2.8l1.2,0.6l-2.1,4.1L17.5,63z
"/>
<path class="st4" d="M22,54.7l1.4-2.1c0.2-0.3,0.4-0.5,0.6-0.7c0.2-0.2,0.4-0.4,0.7-0.5c0.2-0.1,0.5-0.1,0.8-0.1
c0.3,0,0.6,0.1,0.9,0.3c0.4,0.2,0.7,0.6,0.8,0.9c0.1,0.4,0.1,0.8,0,1.2l3.2,0.1l-0.9,1.5L26.4,55L26,55.6l2.2,1.4l-0.8,1.2L22,54.7
z M25,54.9l0.5-0.7c0.1-0.1,0.1-0.2,0.2-0.4c0.1-0.1,0.1-0.3,0.1-0.4c0-0.1,0-0.2,0-0.4c0-0.1-0.1-0.2-0.3-0.3
c-0.1-0.1-0.3-0.1-0.4-0.1c-0.1,0-0.2,0-0.3,0.1c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.3l-0.5,0.8L25,54.9z"/>
<path class="st4" d="M31.3,44.4c-0.2,0-0.4,0.1-0.6,0.2c-0.2,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.4-0.3,0.7c-0.1,0.2-0.1,0.5,0,0.7
c0,0.2,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.6,0.6c0.2,0.2,0.5,0.3,0.8,0.4c0.3,0.1,0.5,0.1,0.8,0.1c0.2,0,0.5-0.1,0.7-0.2
c0.2-0.1,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.5,0.3-0.7s0-0.5-0.1-0.8l1.4-0.4c0.1,0.5,0.1,0.9,0,1.4c-0.1,0.4-0.3,0.8-0.6,1.2
c-0.3,0.4-0.7,0.7-1.1,1c-0.4,0.2-0.8,0.4-1.2,0.5c-0.4,0.1-0.9,0-1.3-0.1c-0.4-0.1-0.9-0.4-1.3-0.7c-0.4-0.3-0.7-0.7-1-1.1
c-0.2-0.4-0.4-0.8-0.4-1.2c0-0.4,0-0.9,0.1-1.3c0.1-0.4,0.4-0.9,0.7-1.3c0.1-0.1,0.2-0.3,0.4-0.4c0.1-0.1,0.3-0.3,0.5-0.4
c0.2-0.1,0.4-0.2,0.6-0.3c0.2-0.1,0.4-0.1,0.7-0.1L31.3,44.4z"/>
<path class="st4" d="M33.8,38.9l1.8-1.8c0.2-0.2,0.5-0.4,0.7-0.6c0.3-0.2,0.5-0.3,0.8-0.3c0.3-0.1,0.5,0,0.8,0
c0.3,0.1,0.5,0.3,0.8,0.5c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0,0.8-0.3,1.2l3.1,0.7l-1.2,1.2l-2.8-0.8l-0.5,0.5l1.9,1.8l-1,1
L33.8,38.9z M36.7,39.8l0.6-0.6c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.2-0.3c0-0.1,0.1-0.2,0-0.4c0-0.1-0.1-0.2-0.2-0.4
c-0.1-0.1-0.2-0.2-0.4-0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.3,0.3l-0.7,0.7L36.7,39.8z"/>
<path class="st4" d="M40.6,32.2l1.1-1l4.3,4.9l-1.1,0.9L40.6,32.2z"/>
<path class="st4" d="M45.5,28l1.8-1.3l3.7,2.6l0,0L49.7,25l1.8-1.3l3.8,5.3l-1.2,0.8l-2.9-4.1l0,0l1.5,5.1l-0.9,0.6l-4.3-3.1l0,0
l2.9,4.1l-1.2,0.8L45.5,28z"/>
<path class="st4" d="M55.7,21.1l1.2-0.7l3.3,5.6L59,26.7L55.7,21.1z"/>
<path class="st4" d="M61.3,18l1.8-0.8l4.4,2.9l0,0l-1.9-4.1l1.3-0.6l2.8,5.9L68,22l-4.6-3l0,0l2,4.2l-1.3,0.6L61.3,18z"/>
<path class="st4" d="M73.7,12.7l1.1-0.4l4.8,5.3L78,18.1l-1-1.1l-2.4,0.8l-0.1,1.5l-1.5,0.5L73.7,12.7z M74.8,14.4l-0.1,2.2
l1.5-0.5L74.8,14.4z"/>
<path class="st4" d="M81.7,10.3l1.4-0.3l1.2,5.1l2.6-0.6l0.3,1.3l-4,0.9L81.7,10.3z"/>
<path class="st4" d="M93.5,9.7c-0.1-0.1-0.3-0.2-0.5-0.3c-0.2,0-0.4,0-0.6,0c-0.1,0-0.2,0-0.3,0.1c-0.1,0-0.2,0.1-0.3,0.2
c-0.1,0.1-0.2,0.1-0.2,0.2s-0.1,0.2,0,0.3c0,0.2,0.1,0.3,0.3,0.4c0.2,0.1,0.4,0.1,0.6,0.2c0.2,0,0.5,0.1,0.7,0.1
c0.3,0,0.5,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.5,0.3,0.9c0.1,0.4,0,0.7-0.1,1c-0.1,0.3-0.2,0.5-0.4,0.7
c-0.2,0.2-0.4,0.4-0.7,0.5s-0.6,0.2-0.9,0.3c-0.4,0.1-0.8,0.1-1.2,0c-0.4-0.1-0.7-0.2-1.1-0.5l0.9-1.3c0.2,0.2,0.4,0.3,0.6,0.4
c0.2,0.1,0.5,0.1,0.7,0.1c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.1,0.2-0.2c0-0.1,0.1-0.2,0-0.3
c0-0.2-0.1-0.3-0.3-0.4c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2,0-0.5-0.1-0.8-0.1c-0.3,0-0.5-0.1-0.8-0.2c-0.2-0.1-0.5-0.3-0.6-0.4
c-0.2-0.2-0.3-0.5-0.3-0.8c0-0.3,0-0.7,0.1-0.9c0.1-0.3,0.2-0.5,0.5-0.7c0.2-0.2,0.4-0.4,0.7-0.5c0.3-0.1,0.6-0.2,0.9-0.3
C92.6,8,93,8,93.4,8.1c0.4,0.1,0.7,0.2,1,0.4L93.5,9.7z"/>
<path class="st4" d="M108.5,8.8c-0.1-0.1-0.3-0.3-0.5-0.3c-0.2-0.1-0.4-0.1-0.6-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.3,0.1
c-0.1,0.1-0.2,0.1-0.2,0.2c-0.1,0.1-0.1,0.2-0.1,0.3c0,0.2,0.1,0.3,0.2,0.5c0.1,0.1,0.3,0.2,0.6,0.3c0.2,0.1,0.5,0.2,0.7,0.2
c0.3,0.1,0.5,0.2,0.7,0.3c0.2,0.1,0.4,0.3,0.6,0.6c0.1,0.2,0.2,0.5,0.2,0.9c0,0.4-0.1,0.7-0.2,0.9c-0.1,0.3-0.3,0.5-0.6,0.7
c-0.2,0.2-0.5,0.3-0.8,0.4c-0.3,0.1-0.6,0.1-1,0.1c-0.4,0-0.8-0.1-1.2-0.2c-0.4-0.1-0.7-0.3-1-0.6l1-1.1c0.1,0.2,0.3,0.4,0.6,0.5
c0.2,0.1,0.5,0.2,0.7,0.2c0.1,0,0.2,0,0.4,0c0.1,0,0.2-0.1,0.3-0.1s0.2-0.1,0.2-0.2c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2-0.1-0.4-0.2-0.5
c-0.1-0.1-0.3-0.2-0.6-0.3c-0.2-0.1-0.5-0.2-0.7-0.2c-0.3-0.1-0.5-0.2-0.7-0.3c-0.2-0.1-0.4-0.3-0.6-0.5c-0.1-0.2-0.2-0.5-0.2-0.9
c0-0.4,0.1-0.7,0.2-0.9c0.1-0.3,0.3-0.5,0.6-0.7c0.2-0.2,0.5-0.3,0.8-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.4,0,0.7,0.1,1.1,0.2
c0.3,0.1,0.7,0.3,0.9,0.5L108.5,8.8z"/>
<path class="st4" d="M114.3,7.5l1.4,0.2l-0.3,2.4l2.8,0.3l0.3-2.4l1.4,0.2l-0.7,6.5l-1.4-0.2l0.3-2.8l-2.8-0.3l-0.3,2.8l-1.4-0.2
L114.3,7.5z"/>
<path class="st4" d="M127,9.5l1.2,0.3l1.3,7l-1.6-0.4l-0.2-1.5l-2.5-0.6l-0.8,1.2l-1.5-0.3L127,9.5z M127.1,11.5l-1.2,1.8l1.6,0.4
L127.1,11.5z"/>
<path class="st4" d="M135.1,11.6l2.4,0.8c0.3,0.1,0.6,0.2,0.9,0.4c0.3,0.2,0.5,0.3,0.6,0.6s0.3,0.5,0.3,0.7c0,0.3,0,0.6-0.1,1
c-0.1,0.4-0.4,0.8-0.7,1c-0.3,0.2-0.7,0.3-1.2,0.2l0.7,3.1l-1.6-0.5l-0.5-2.9l-0.7-0.2l-0.8,2.5l-1.4-0.5L135.1,11.6z M135.6,14.6
l0.8,0.3c0.1,0,0.3,0.1,0.4,0.1c0.1,0,0.3,0.1,0.4,0c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.2-0.2,0.2-0.4c0.1-0.2,0.1-0.3,0-0.4
c0-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1-0.1-0.2-0.1-0.4-0.2l-0.9-0.3L135.6,14.6z"/>
<path class="st4" d="M144.2,14.9l4,1.8l-0.5,1.2l-2.7-1.2l-0.5,1.1l2.6,1.2l-0.5,1.2l-2.6-1.2l-0.5,1.2l2.9,1.3l-0.5,1.2l-4.2-1.9
L144.2,14.9z"/>
<path class="st4" d="M158.5,23.9l-1.6-1l0.7-1.1l4.3,2.8l-0.7,1.1l-1.6-1l-2.9,4.4l-1.2-0.8L158.5,23.9z"/>
<path class="st4" d="M165.5,27.3l1.1,0.9l-1.5,1.9l2.2,1.8l1.5-1.9l1.1,0.9l-4.1,5.1l-1.1-0.9l1.8-2.2l-2.2-1.7l-1.8,2.2l-1.1-0.9
L165.5,27.3z"/>
<path class="st4" d="M173.7,34.3l3.1,3.1l-0.9,0.9l-2.1-2.1l-0.9,0.9l2,2L174,40l-2-2l-0.9,0.9l2.2,2.2l-0.9,0.9l-3.3-3.2
L173.7,34.3z"/>
<path class="st4" d="M180.2,41l0.9,1.1l-5,4.3l-0.9-1.1L180.2,41z"/>
<path class="st4" d="M184.2,45.9l1.5,2c0.2,0.3,0.4,0.5,0.5,0.8c0.1,0.3,0.2,0.6,0.2,0.8c0,0.3,0,0.5-0.2,0.8
c-0.1,0.3-0.3,0.5-0.7,0.7c-0.4,0.3-0.8,0.4-1.2,0.4c-0.4,0-0.8-0.2-1.1-0.5l-1.3,3l-1-1.4l1.3-2.6l-0.4-0.6l-2.1,1.5l-0.8-1.2
L184.2,45.9z M182.9,48.7l0.5,0.7c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.3,0,0.4-0.1
c0.1-0.1,0.2-0.2,0.3-0.3c0-0.1,0.1-0.2,0-0.3c0-0.1-0.1-0.2-0.1-0.4c-0.1-0.1-0.1-0.2-0.2-0.3l-0.6-0.8L182.9,48.7z"/>
<path class="st4" d="M192.8,59.3l1,1.9c0.2,0.5,0.4,0.9,0.5,1.4c0.1,0.5,0.1,0.9,0,1.4c-0.1,0.4-0.3,0.8-0.5,1.2
c-0.3,0.4-0.7,0.7-1.2,1c-0.5,0.2-0.9,0.4-1.4,0.4c-0.4,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.8-0.4-1.1-0.8c-0.3-0.3-0.6-0.7-0.8-1.1
l-1-2.1L192.8,59.3z M188.8,62.9l0.3,0.7c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.8,0.2
c0.3,0,0.6-0.1,0.9-0.3c0.3-0.1,0.5-0.3,0.7-0.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3,0-0.5,0-0.8c-0.1-0.3-0.1-0.6-0.3-0.8l-0.4-0.8
L188.8,62.9z"/>
<path class="st4" d="M198.1,71.1l0.4,1.1l-5.2,4.9l-0.6-1.5l1.1-1l-0.9-2.4l-1.5,0l-0.5-1.5L198.1,71.1z M196.5,72.3l-2.2,0
l0.5,1.5L196.5,72.3z"/>
<path class="st4" d="M199.6,79.7l-0.5-1.8l1.2-0.3l1.3,5l-1.2,0.3l-0.5-1.8l-5.1,1.4l-0.4-1.4L199.6,79.7z"/>
<path class="st4" d="M202.8,88.2l0.2,1.2l-5.9,3.9l-0.3-1.6l1.3-0.8l-0.4-2.5l-1.5-0.3l-0.3-1.6L202.8,88.2z M201,89l-2.1-0.4
l0.3,1.6L201,89z"/>
</g>
<g>
<path class="st4" d="M60.4,90C60,89.6,59.5,89.2,59,89c-0.6-0.3-1.2-0.4-2-0.4c-0.7,0-1.4,0.1-2.1,0.4s-1.2,0.7-1.6,1.2
c-0.5,0.5-0.8,1.1-1.1,1.8c-0.3,0.7-0.4,1.5-0.4,2.3c0,0.8,0.1,1.6,0.4,2.3c0.3,0.7,0.6,1.3,1.1,1.8c0.5,0.5,1,0.9,1.6,1.2
c0.6,0.3,1.3,0.4,2,0.4c0.8,0,1.5-0.2,2.1-0.5c0.6-0.3,1.1-0.8,1.5-1.4l3.3,2.5c-0.8,1.1-1.7,1.8-2.9,2.3c-1.2,0.5-2.4,0.8-3.6,0.8
c-1.4,0-2.7-0.2-3.9-0.7c-1.2-0.4-2.2-1.1-3.1-1.9c-0.9-0.8-1.5-1.8-2-3s-0.7-2.5-0.7-3.9c0-1.4,0.2-2.7,0.7-3.9s1.1-2.2,2-3
c0.9-0.8,1.9-1.4,3.1-1.9c1.2-0.4,2.5-0.7,3.9-0.7c0.5,0,1,0,1.6,0.1c0.5,0.1,1.1,0.2,1.6,0.4c0.5,0.2,1,0.5,1.5,0.8
c0.5,0.3,0.9,0.7,1.3,1.2L60.4,90z"/>
<path class="st4" d="M65.7,85.4h3.9v17.9h-3.9V85.4z"/>
<path class="st4" d="M73.2,85.4h6.9c0.9,0,1.8,0.1,2.6,0.3c0.8,0.2,1.5,0.5,2.1,0.9c0.6,0.4,1.1,1,1.5,1.7c0.4,0.7,0.5,1.6,0.5,2.6
c0,1.3-0.3,2.3-1,3.2c-0.7,0.9-1.6,1.4-2.9,1.7l4.5,7.6h-4.7l-3.7-7.1h-1.9v7.1h-3.9V85.4z M77.2,92.8h2.3c0.4,0,0.7,0,1.1,0
c0.4,0,0.8-0.1,1.1-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.5-0.7-0.6
s-0.6-0.2-1-0.3c-0.4-0.1-0.7-0.1-1.1-0.1h-2.6V92.8z"/>
<path class="st4" d="M101.1,90c-0.4-0.5-0.9-0.8-1.4-1.1c-0.6-0.3-1.2-0.4-2-0.4c-0.7,0-1.4,0.1-2.1,0.4c-0.6,0.3-1.2,0.7-1.6,1.2
c-0.5,0.5-0.8,1.1-1.1,1.8c-0.3,0.7-0.4,1.5-0.4,2.3c0,0.8,0.1,1.6,0.4,2.3c0.3,0.7,0.6,1.3,1.1,1.8c0.5,0.5,1,0.9,1.6,1.2
c0.6,0.3,1.3,0.4,2,0.4c0.8,0,1.5-0.2,2.1-0.5c0.6-0.3,1.1-0.8,1.5-1.4l3.3,2.5c-0.8,1.1-1.7,1.8-2.9,2.3c-1.2,0.5-2.4,0.8-3.6,0.8
c-1.4,0-2.7-0.2-3.9-0.7c-1.2-0.4-2.2-1.1-3.1-1.9c-0.9-0.8-1.5-1.8-2-3c-0.5-1.2-0.7-2.5-0.7-3.9c0-1.4,0.2-2.7,0.7-3.9
c0.5-1.2,1.1-2.2,2-3c0.9-0.8,1.9-1.4,3.1-1.9c1.2-0.4,2.5-0.7,3.9-0.7c0.5,0,1,0,1.6,0.1c0.5,0.1,1.1,0.2,1.6,0.4
c0.5,0.2,1,0.5,1.5,0.8c0.5,0.3,0.9,0.7,1.3,1.2L101.1,90z"/>
<path class="st4" d="M106.5,85.4h3.9v14.2h7.3v3.6h-11.2V85.4z"/>
</g>
<g>
<path class="st4" d="M48.6,108.9h11.7l8.1,22.9h0.1l8.1-22.9h11.7v35.2h-7.7v-27h-0.1l-9.2,27h-5.9l-8.9-27h-0.1v27h-7.7V108.9z"/>
<path class="st4" d="M95.3,108.9h7.7v35.2h-7.7V108.9z"/>
<path class="st4" d="M127.3,117.5c-0.6-0.8-1.5-1.4-2.6-1.8c-1.1-0.4-2.1-0.6-3.1-0.6c-0.6,0-1.1,0.1-1.7,0.2
c-0.6,0.1-1.2,0.3-1.7,0.6c-0.5,0.3-1,0.7-1.3,1.1c-0.3,0.5-0.5,1-0.5,1.7c0,1.1,0.4,1.9,1.2,2.4c0.8,0.6,1.8,1,3,1.4
c1.2,0.4,2.5,0.8,3.9,1.2c1.4,0.4,2.7,1,3.9,1.7c1.2,0.7,2.2,1.7,3,2.9c0.8,1.2,1.2,2.9,1.2,4.9c0,2-0.4,3.7-1.1,5.1
c-0.7,1.5-1.7,2.7-3,3.6c-1.2,1-2.7,1.7-4.3,2.1c-1.6,0.5-3.4,0.7-5.2,0.7c-2.3,0-4.4-0.3-6.4-1c-2-0.7-3.8-1.8-5.5-3.4l5.5-6.1
c0.8,1.1,1.8,1.9,3,2.5c1.2,0.6,2.5,0.9,3.8,0.9c0.6,0,1.3-0.1,1.9-0.2c0.6-0.1,1.2-0.4,1.7-0.7c0.5-0.3,0.9-0.7,1.2-1.1
c0.3-0.5,0.5-1,0.5-1.6c0-1.1-0.4-1.9-1.2-2.5c-0.8-0.6-1.8-1.1-3.1-1.6c-1.2-0.4-2.5-0.9-4-1.3c-1.4-0.4-2.7-1-4-1.7
c-1.2-0.7-2.2-1.7-3.1-2.9c-0.8-1.2-1.2-2.8-1.2-4.7c0-1.9,0.4-3.5,1.1-5c0.7-1.4,1.7-2.6,3-3.6c1.2-1,2.7-1.7,4.3-2.2
c1.6-0.5,3.3-0.7,5-0.7c2,0,3.9,0.3,5.8,0.8c1.9,0.6,3.5,1.5,5,2.8L127.3,117.5z"/>
<path class="st4" d="M137.9,108.9H151c1.8,0,3.5,0.2,5.2,0.5c1.6,0.3,3,0.9,4.2,1.7c1.2,0.8,2.2,1.9,2.9,3.3
c0.7,1.4,1.1,3.1,1.1,5.2c0,2.1-0.3,3.8-1,5.2c-0.7,1.4-1.6,2.5-2.7,3.3c-1.2,0.8-2.5,1.4-4.1,1.8c-1.6,0.3-3.3,0.5-5.2,0.5h-5.7
v13.7h-7.7V108.9z M145.7,123.8h5.2c0.7,0,1.4-0.1,2-0.2c0.6-0.1,1.2-0.4,1.7-0.7c0.5-0.3,0.9-0.7,1.2-1.3c0.3-0.5,0.5-1.2,0.5-2.1
c0-0.9-0.2-1.6-0.6-2.2c-0.4-0.5-0.9-1-1.6-1.3c-0.6-0.3-1.4-0.5-2.2-0.6c-0.8-0.1-1.6-0.1-2.3-0.1h-4V123.8z"/>
</g>
<g>
<path d="M52,148.9h-3.4v-1.1h8.2v1.1h-3.4v9H52V148.9z"/>
<path d="M59.4,147.3h1.4v4.5h0c0.2-0.4,0.6-0.7,1-0.9c0.4-0.2,0.9-0.4,1.5-0.4c1.1,0,2.8,0.6,2.8,3.1v4.3h-1.4v-4.1
c0-1.2-0.5-2.1-1.8-2.1c-0.9,0-1.7,0.6-1.9,1.3c-0.1,0.2-0.1,0.4-0.1,0.6v4.4h-1.4V147.3z"/>
<path d="M69.7,152.9c0-0.9,0-1.6-0.1-2.3h1.3l0,1.4h0.1c0.4-1,1.2-1.6,2.2-1.6c0.2,0,0.3,0,0.4,0v1.2c-0.1,0-0.3,0-0.5,0
c-1,0-1.7,0.7-1.9,1.7c0,0.2-0.1,0.4-0.1,0.6v3.9h-1.4V152.9z"/>
<path d="M77.1,154.5c0,1.8,1.3,2.5,2.7,2.5c1,0,1.7-0.2,2.2-0.4l0.2,0.9c-0.5,0.2-1.4,0.4-2.6,0.4c-2.4,0-3.9-1.5-3.9-3.6
c0-2.2,1.4-3.9,3.7-3.9c2.6,0,3.3,2.1,3.3,3.4c0,0.3,0,0.5,0,0.6H77.1z M81.4,153.6c0-0.8-0.4-2.1-2-2.1c-1.5,0-2.1,1.2-2.2,2.1
H81.4z"/>
<path d="M90.2,157.9l-0.1-0.9h0c-0.4,0.6-1.3,1.1-2.4,1.1c-1.6,0-2.4-1-2.4-2.1c0-1.7,1.7-2.7,4.8-2.7v-0.1c0-0.6-0.2-1.7-1.8-1.7
c-0.7,0-1.5,0.2-2.1,0.5l-0.3-0.9c0.7-0.4,1.6-0.6,2.6-0.6c2.4,0,3,1.5,3,3v2.7c0,0.6,0,1.2,0.1,1.7H90.2z M90,154.2
c-1.6,0-3.4,0.2-3.4,1.6c0,0.9,0.6,1.3,1.4,1.3c1,0,1.7-0.6,1.9-1.2c0-0.1,0.1-0.3,0.1-0.4V154.2z"/>
<path d="M96.6,148.6v2.1h2.1v1h-2.1v3.9c0,0.9,0.3,1.4,1.1,1.4c0.4,0,0.7,0,0.8-0.1l0.1,1c-0.3,0.1-0.7,0.2-1.3,0.2
c-0.7,0-1.2-0.2-1.6-0.6c-0.4-0.4-0.6-1-0.6-1.9v-3.9h-1.2v-1h1.2v-1.7L96.6,148.6z"/>
<path d="M106.2,156.3c0.6,0.4,1.6,0.7,2.6,0.7c1.5,0,2.3-0.7,2.3-1.7c0-0.9-0.6-1.5-2.1-2c-1.8-0.6-2.9-1.4-2.9-2.9
c0-1.6,1.4-2.7,3.6-2.7c1.1,0,2,0.2,2.4,0.5l-0.4,1.1c-0.4-0.2-1.1-0.5-2.1-0.5c-1.5,0-2.1,0.8-2.1,1.5c0,0.9,0.7,1.4,2.2,1.9
c1.9,0.7,2.8,1.5,2.8,3c0,1.6-1.3,2.9-3.9,2.9c-1.1,0-2.2-0.3-2.8-0.6L106.2,156.3z"/>
<path d="M115.7,147.3h1.4v4.5h0c0.2-0.4,0.6-0.7,1-0.9c0.4-0.2,0.9-0.4,1.5-0.4c1.1,0,2.8,0.6,2.8,3.1v4.3H121v-4.1
c0-1.2-0.5-2.1-1.8-2.1c-0.9,0-1.7,0.6-1.9,1.3c-0.1,0.2-0.1,0.4-0.1,0.6v4.4h-1.4V147.3z"/>
<path d="M130.4,157.9l-0.1-0.9h0c-0.4,0.6-1.3,1.1-2.4,1.1c-1.6,0-2.4-1-2.4-2.1c0-1.7,1.7-2.7,4.8-2.7v-0.1c0-0.6-0.2-1.7-1.8-1.7
c-0.7,0-1.5,0.2-2.1,0.5l-0.3-0.9c0.7-0.4,1.6-0.6,2.6-0.6c2.4,0,3,1.5,3,3v2.7c0,0.6,0,1.2,0.1,1.7H130.4z M130.2,154.2
c-1.6,0-3.4,0.2-3.4,1.6c0,0.9,0.6,1.3,1.4,1.3c1,0,1.7-0.6,1.9-1.2c0-0.1,0.1-0.3,0.1-0.4V154.2z"/>
<path d="M135.1,152.9c0-0.9,0-1.6-0.1-2.3h1.3l0,1.4h0.1c0.4-1,1.2-1.6,2.2-1.6c0.2,0,0.3,0,0.4,0v1.2c-0.1,0-0.3,0-0.5,0
c-1,0-1.7,0.7-1.9,1.7c0,0.2-0.1,0.4-0.1,0.6v3.9h-1.4V152.9z"/>
<path d="M143.4,148.6c0,0.4-0.3,0.8-0.9,0.8c-0.5,0-0.9-0.4-0.9-0.8c0-0.5,0.4-0.8,0.9-0.8C143,147.8,143.4,148.2,143.4,148.6z
M141.8,157.9v-7.2h1.4v7.2H141.8z"/>
<path d="M146.8,152.6c0-0.7,0-1.4-0.1-2h1.3l0.1,1.2h0c0.4-0.7,1.3-1.4,2.6-1.4c1.1,0,2.8,0.6,2.8,3.1v4.3h-1.4v-4.2
c0-1.2-0.5-2.1-1.8-2.1c-1,0-1.7,0.6-1.9,1.3c-0.1,0.2-0.1,0.4-0.1,0.6v4.3h-1.4V152.6z"/>
<path d="M164.1,150.7c0,0.5-0.1,1.1-0.1,2v4.2c0,1.7-0.4,2.7-1.1,3.3c-0.8,0.7-1.9,0.9-2.9,0.9c-1,0-2-0.2-2.6-0.6l0.4-1
c0.5,0.3,1.3,0.6,2.3,0.6c1.5,0,2.6-0.7,2.6-2.5v-0.8h0c-0.4,0.7-1.3,1.2-2.5,1.2c-2,0-3.4-1.5-3.4-3.5c0-2.4,1.8-3.8,3.6-3.8
c1.4,0,2.1,0.7,2.5,1.3h0l0.1-1.1H164.1z M162.6,153.5c0-0.2,0-0.4-0.1-0.6c-0.3-0.8-1-1.4-2-1.4c-1.4,0-2.4,1.1-2.4,2.7
c0,1.4,0.8,2.6,2.3,2.6c0.9,0,1.7-0.5,2-1.3c0.1-0.2,0.1-0.5,0.1-0.7V153.5z"/>
</g>
<g>
<g>
<path class="st4" d="M108.8,46.6l14.4,8.3l-14.4,8.3V46.6 M115,75.2c-2.1,0.2-4.2,0-6.2-0.5V64.5L115,75.2z M130.6,43.4
c0.2,0.3,0.5,0.7,0.7,1.1c0.9,1.5,1.5,3,2,4.6l-8.9,5.1L130.6,43.4z M94.8,45.9c0.9-1.9,2.1-3.7,3.6-5.3l9.2,5.3H94.8z"/>
<g>
<path class="st1" d="M119,80.4C134,77.2,143,61.7,138.4,47l-29,16.8L119,80.4"/>
</g>
<path class="st1" d="M126.6,32.3c-10.8-6.2-24.2-3.9-32.3,4.9L123.4,54l9.6-16.6C131.2,35.5,129,33.7,126.6,32.3"/>
<g>
<path class="st1" d="M100.5,77.5c2.4,1.4,4.9,2.3,7.4,2.9V46.8H88.7C84.9,58.3,89.6,71.2,100.5,77.5"/>
</g>
</g>
<rect x="118.1" y="48.7" transform="matrix(0.8656 -0.5007 0.5007 0.8656 -17.2344 80.8338)" class="st1" width="47.7" height="47.7"/>
<circle class="st3" cx="142" cy="72.5" r="20.7"/>
<g>
<path class="st4" d="M155,66.3h-0.8v9.1c0,1.4-0.8,2.7-2.5,2.7h-16.3v0.4c0,1.3,1.4,2.5,2.9,2.5h12.5l4.8,2.8l-0.7-2.8h0.2
c1.5,0,2.1-1.3,2.1-2.5V68.4C157.2,67.2,156.5,66.3,155,66.3z"/>
<path class="st4" d="M149.3,59.9h-18.9c-1.7,0-3.6,1.5-3.6,2.9v11.5c0,1.3,1.6,2.3,3.2,2.4l-1,3.8l6.5-3.8h13.8
c1.7,0,3.2-1,3.2-2.4V65v-2.2C152.5,61.4,150.9,59.9,149.3,59.9z M133.2,69.6c-0.9,0-1.7-0.8-1.7-1.7s0.8-1.7,1.7-1.7
c0.9,0,1.7,0.8,1.7,1.7S134.2,69.6,133.2,69.6z M139.6,69.6c-0.9,0-1.7-0.8-1.7-1.7s0.8-1.7,1.7-1.7s1.7,0.8,1.7,1.7
S140.6,69.6,139.6,69.6z M146,69.6c-0.9,0-1.7-0.8-1.7-1.7s0.8-1.7,1.7-1.7c0.9,0,1.7,0.8,1.7,1.7S147,69.6,146,69.6z"/>
</g>
</g>
<g>
<path class="st4" d="M64.6,170.8l0.4,1.8c0.1,0.5,0.2,0.9,0.3,1.4h0c0.1-0.5,0.2-1,0.3-1.4l0.5-1.8h1.1l0.4,1.8
c0.1,0.5,0.2,1,0.3,1.5h0c0.1-0.5,0.2-1,0.3-1.5l0.4-1.7h1.3l-1.3,4.4h-1.3l-0.4-1.5c-0.1-0.4-0.2-0.8-0.3-1.4h0
c-0.1,0.5-0.2,1-0.3,1.4l-0.4,1.5h-1.3l-1.3-4.4H64.6z"/>
<path class="st4" d="M72.5,170.8l0.4,1.8c0.1,0.5,0.2,0.9,0.3,1.4h0c0.1-0.5,0.2-1,0.3-1.4l0.5-1.8H75l0.4,1.8
c0.1,0.5,0.2,1,0.3,1.5h0c0.1-0.5,0.2-1,0.3-1.5l0.4-1.7h1.3l-1.3,4.4h-1.3l-0.4-1.5c-0.1-0.4-0.2-0.8-0.3-1.4h0
c-0.1,0.5-0.2,1-0.3,1.4l-0.4,1.5h-1.3l-1.3-4.4H72.5z"/>
<path class="st4" d="M80.4,170.8l0.4,1.8c0.1,0.5,0.2,0.9,0.3,1.4h0c0.1-0.5,0.2-1,0.3-1.4l0.5-1.8h1.1l0.4,1.8
c0.1,0.5,0.2,1,0.3,1.5h0c0.1-0.5,0.2-1,0.3-1.5l0.4-1.7h1.3l-1.3,4.4H83l-0.4-1.5c-0.1-0.4-0.2-0.8-0.3-1.4h0
c-0.1,0.5-0.2,1-0.3,1.4l-0.4,1.5h-1.3l-1.3-4.4H80.4z"/>
<path class="st4" d="M86.6,174.5c0-0.5,0.3-0.8,0.8-0.8c0.5,0,0.8,0.3,0.8,0.8c0,0.5-0.3,0.8-0.8,0.8C87,175.3,86.6,175,86.6,174.5
z"/>
<path class="st4" d="M93.3,175.1c-0.2,0.1-0.7,0.2-1.2,0.2c-1.4,0-2.3-0.9-2.3-2.2c0-1.3,0.9-2.3,2.5-2.3c0.4,0,0.8,0.1,1,0.2
l-0.2,1c-0.2-0.1-0.4-0.1-0.8-0.1c-0.7,0-1.2,0.5-1.2,1.2c0,0.8,0.5,1.2,1.2,1.2c0.3,0,0.6-0.1,0.8-0.1L93.3,175.1z"/>
<path class="st4" d="M96.3,169.6c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.7,0.7-0.7S96.3,169.2,96.3,169.6z
M94.9,175.2v-4.4h1.4v4.4H94.9z"/>
<path class="st4" d="M98.3,172.3c0-0.6,0-1.1,0-1.4h1.2l0,0.8h0c0.2-0.6,0.8-0.9,1.2-0.9c0.1,0,0.2,0,0.3,0v1.3c-0.1,0-0.2,0-0.4,0
c-0.5,0-0.8,0.3-0.9,0.7c0,0.1,0,0.2,0,0.3v2.2h-1.4V172.3z"/>
<path class="st4" d="M105.8,175.1c-0.2,0.1-0.7,0.2-1.2,0.2c-1.4,0-2.3-0.9-2.3-2.2c0-1.3,0.9-2.3,2.5-2.3c0.4,0,0.8,0.1,1,0.2
l-0.2,1c-0.2-0.1-0.4-0.1-0.8-0.1c-0.7,0-1.2,0.5-1.2,1.2c0,0.8,0.5,1.2,1.2,1.2c0.3,0,0.6-0.1,0.8-0.1L105.8,175.1z"/>
<path class="st4" d="M107.5,168.8h1.4v6.4h-1.4V168.8z"/>
<path class="st4" d="M110.6,174.5c0-0.5,0.3-0.8,0.8-0.8c0.5,0,0.8,0.3,0.8,0.8c0,0.5-0.3,0.8-0.8,0.8
C111,175.3,110.6,175,110.6,174.5z"/>
<path class="st4" d="M114,168.8h1.4v6.4H114V168.8z"/>
<path class="st4" d="M121.5,173.8c0,0.6,0,1,0,1.4h-1.2l-0.1-0.6h0c-0.2,0.3-0.6,0.7-1.4,0.7c-0.9,0-1.5-0.6-1.5-1.9v-2.6h1.4v2.4
c0,0.6,0.2,1,0.7,1c0.4,0,0.6-0.3,0.7-0.5c0-0.1,0-0.2,0-0.3v-2.6h1.4V173.8z"/>
<path class="st4" d="M123.1,175.6l1.9-6.5h0.9l-1.9,6.5H123.1z"/>
<path class="st4" d="M127.3,172.2c0-0.5,0-1,0-1.4h1.2l0.1,0.6h0c0.2-0.3,0.6-0.7,1.3-0.7c0.6,0,1,0.3,1.2,0.7h0
c0.2-0.2,0.4-0.4,0.6-0.5c0.2-0.1,0.5-0.2,0.8-0.2c0.8,0,1.5,0.6,1.5,1.9v2.6h-1.3v-2.4c0-0.6-0.2-1-0.6-1c-0.3,0-0.5,0.2-0.6,0.5
c0,0.1-0.1,0.2-0.1,0.4v2.6H130v-2.5c0-0.6-0.2-0.9-0.6-0.9c-0.4,0-0.6,0.3-0.6,0.5c0,0.1-0.1,0.2-0.1,0.3v2.6h-1.3V172.2z"/>
<path class="st4" d="M137.4,169.6c0,0.4-0.3,0.7-0.7,0.7c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.7,0.7-0.7S137.4,169.2,137.4,169.6z
M136,175.2v-4.4h1.4v4.4H136z"/>
<path class="st4" d="M139.3,174c0.3,0.2,0.8,0.3,1.2,0.3c0.4,0,0.6-0.1,0.6-0.4c0-0.2-0.1-0.3-0.6-0.5c-0.9-0.3-1.3-0.8-1.2-1.3
c0-0.8,0.7-1.4,1.8-1.4c0.5,0,1,0.1,1.2,0.3l-0.2,0.9c-0.2-0.1-0.6-0.3-1-0.3c-0.3,0-0.5,0.1-0.5,0.4c0,0.2,0.2,0.3,0.7,0.5
c0.8,0.3,1.2,0.7,1.2,1.4c0,0.8-0.6,1.4-1.9,1.4c-0.6,0-1.1-0.1-1.4-0.3L139.3,174z"/>
<path class="st4" d="M144.1,172.3c0-0.6,0-1.1,0-1.5h1.2l0.1,0.6h0c0.3-0.5,0.8-0.7,1.5-0.7c1,0,1.8,0.8,1.8,2.2c0,1.6-1,2.4-2,2.4
c-0.5,0-0.9-0.2-1.1-0.5h0v2.2h-1.4V172.3z M145.5,173.3c0,0.1,0,0.2,0,0.3c0.1,0.4,0.4,0.6,0.8,0.6c0.6,0,0.9-0.5,0.9-1.2
c0-0.7-0.3-1.2-0.9-1.2c-0.4,0-0.7,0.3-0.8,0.7c0,0.1,0,0.2,0,0.2V173.3z"/>
</g>
<line class="st5" x1="77.6" y1="164.1" x2="134.5" y2="164.1"/>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 342 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -0,0 +1,214 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 212.6 212.6" style="enable-background:new 0 0 212.6 212.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{display:none;fill:none;stroke:#456D81;stroke-width:0.8301;stroke-linecap:square;stroke-miterlimit:10;stroke-dasharray:0.1876,1.8762;}
.st2{clip-path:url(#SVGID_2_);}
.st3{fill:#33A1DB;}
.st4{fill:#616263;}
</style>
<g id="Layer_1">
<path class="st0" d="M106.3,212.7C47.6,212.7,0,165.1,0,106.4S47.6,0.1,106.3,0.1c58.7,0,106.3,47.6,106.3,106.3
S165.1,212.7,106.3,212.7z"/>
<circle class="st1" cx="106.3" cy="106.8" r="87"/>
<g>
<defs>
<path id="SVGID_1_" d="M106.3,212.7C47.6,212.7,0,165.1,0,106.4S47.6,0.1,106.3,0.1c58.7,0,106.3,47.6,106.3,106.3
S165.1,212.7,106.3,212.7z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g class="st2">
<path class="st3" d="M106.1,9.9c53.3,0,96.6,43.3,96.6,96.6s-43.3,96.6-96.6,96.6S9.5,159.8,9.5,106.5S52.8,9.9,106.1,9.9
M106.1,4.5C49.8,4.5,4.1,50.2,4.1,106.5s45.6,101.9,101.9,101.9S208,162.8,208,106.5S162.4,4.5,106.1,4.5L106.1,4.5z"/>
</g>
<g class="st2">
<path class="st3" d="M106.1,14.3c50.8,0,92.2,41.4,92.2,92.2s-41.4,92.2-92.2,92.2s-92.2-41.4-92.2-92.2S55.2,14.3,106.1,14.3
M106.1,13.3c-51.5,0-93.2,41.7-93.2,93.2s41.7,93.2,93.2,93.2s93.2-41.7,93.2-93.2S157.5,13.3,106.1,13.3L106.1,13.3z"/>
</g>
<g class="st2">
<path class="st4" d="M63.6,180c-0.6,0-1.1-0.2-1.6-0.4c-0.5-0.2-1-0.4-1.5-0.7c-0.5-0.3-0.9-0.7-1.2-1.1
c-0.3-0.4-0.5-0.9-0.7-1.4c-0.1-0.5-0.1-1-0.1-1.5c0.1-0.5,0.3-1,0.6-1.6c0.3-0.5,0.7-0.9,1.1-1.2c0.4-0.3,0.9-0.5,1.4-0.6
c0.5-0.1,1-0.1,1.5,0s1,0.3,1.5,0.6c0.5,0.3,0.9,0.7,1.3,1.1c0.4,0.4,0.6,0.8,0.7,1.4l-1.7,0.5c-0.1-0.3-0.2-0.6-0.4-0.9
c-0.2-0.3-0.4-0.5-0.8-0.7c-0.3-0.2-0.6-0.3-0.9-0.4c-0.3-0.1-0.6,0-0.9,0c-0.3,0.1-0.6,0.2-0.8,0.4c-0.3,0.2-0.5,0.4-0.7,0.7
c-0.2,0.3-0.3,0.6-0.4,0.9c-0.1,0.3-0.1,0.6,0,0.9c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.6,0.3,0.9,0.4
c0.3,0.1,0.5,0.1,0.7,0.1l0.7-1l-1.2-0.7l0.8-1.3l2.5,1.6L63.6,180z"/>
<path class="st4" d="M68.4,174.6l1.5,0.8l-3.6,6.7l-1.5-0.8L68.4,174.6z"/>
<path class="st4" d="M71.8,178l-2-0.9l0.6-1.3l5.4,2.5l-0.6,1.3l-2-0.9l-2.6,5.5l-1.5-0.7L71.8,178z"/>
<path class="st4" d="M76.4,178.5L78,179l-1,2.7l3.1,1.1l1-2.7l1.6,0.6l-2.6,7.1l-1.6-0.6l1.1-3.1l-3.1-1.1l-1.1,3.1l-1.6-0.6
L76.4,178.5z"/>
<path class="st4" d="M88.9,187.1c-0.1,0.4-0.3,0.8-0.5,1.2c-0.2,0.3-0.5,0.6-0.8,0.8c-0.3,0.2-0.7,0.3-1.1,0.4
c-0.4,0.1-0.9,0-1.4-0.1c-0.5-0.1-0.9-0.3-1.3-0.6s-0.6-0.5-0.8-0.9c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.4,0-0.8,0.1-1.2l1.1-4.5
l1.6,0.4l-1.1,4.4c-0.1,0.2-0.1,0.4-0.1,0.7c0,0.2,0.1,0.4,0.2,0.6c0.1,0.2,0.2,0.3,0.4,0.5c0.2,0.1,0.4,0.2,0.6,0.3
c0.2,0.1,0.4,0.1,0.6,0c0.2,0,0.4-0.1,0.6-0.2c0.2-0.1,0.3-0.3,0.4-0.4c0.1-0.2,0.2-0.4,0.3-0.6l1.1-4.4l1.6,0.4L88.9,187.1z"/>
<path class="st4" d="M91.3,182.8l2.8,0.4c0.3,0,0.6,0.1,1,0.2c0.3,0.1,0.6,0.2,0.8,0.4c0.2,0.2,0.4,0.4,0.5,0.7
c0.1,0.3,0.2,0.6,0.1,1c-0.1,0.4-0.2,0.8-0.5,1c-0.3,0.2-0.6,0.4-1,0.5l0,0c0.2,0.1,0.5,0.2,0.6,0.3c0.2,0.1,0.3,0.3,0.5,0.5
c0.1,0.2,0.2,0.4,0.2,0.6c0,0.2,0,0.5,0,0.7c-0.1,0.4-0.2,0.7-0.4,0.9c-0.2,0.2-0.5,0.4-0.8,0.5c-0.3,0.1-0.6,0.2-1,0.2
c-0.3,0-0.7,0-1,0l-3.1-0.5L91.3,182.8z M92,189.2l1.5,0.2c0.1,0,0.3,0,0.4,0c0.1,0,0.3,0,0.4-0.1c0.1-0.1,0.2-0.1,0.3-0.2
c0.1-0.1,0.1-0.2,0.2-0.4c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.4-0.2c-0.2,0-0.3-0.1-0.4-0.1
l-1.2-0.2L92,189.2z M92.5,186.1l1.2,0.2c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0,0.4-0.1s0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4
c0-0.2,0-0.3,0-0.4c-0.1-0.1-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.3-0.1-0.4-0.1l-1.1-0.2L92.5,186.1z"/>
<path class="st4" d="M97.2,190.4c0-0.1,0-0.3,0.1-0.4c0.1-0.1,0.1-0.2,0.2-0.3c0.1-0.1,0.2-0.1,0.3-0.2c0.1,0,0.3-0.1,0.4,0
c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.1,0.2,0.2,0.3c0,0.1,0.1,0.3,0,0.4c0,0.1,0,0.3-0.1,0.4
c-0.1,0.1-0.1,0.2-0.2,0.3c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0-0.3,0.1-0.4,0c-0.1,0-0.3,0-0.4-0.1c-0.1-0.1-0.2-0.1-0.3-0.2
c-0.1-0.1-0.1-0.2-0.2-0.3C97.2,190.6,97.2,190.5,97.2,190.4z"/>
<path class="st4" d="M105.8,186.2c-0.2-0.2-0.4-0.4-0.6-0.5c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.6,0-0.9,0.2
c-0.3,0.1-0.5,0.3-0.7,0.5c-0.2,0.2-0.4,0.5-0.5,0.8c-0.1,0.3-0.2,0.6-0.2,1c0,0.4,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.4,0.8
s0.4,0.4,0.7,0.5c0.3,0.1,0.5,0.2,0.8,0.2c0.3,0,0.6-0.1,0.9-0.2c0.3-0.1,0.5-0.3,0.7-0.6l1.4,1.1c-0.3,0.4-0.7,0.8-1.2,1
c-0.5,0.2-1,0.3-1.5,0.3c-0.6,0-1.1-0.1-1.6-0.3s-0.9-0.5-1.3-0.8c-0.4-0.4-0.6-0.8-0.8-1.3c-0.2-0.5-0.3-1-0.3-1.7
c0-0.6,0.1-1.1,0.3-1.6c0.2-0.5,0.5-0.9,0.9-1.2c0.4-0.3,0.8-0.6,1.3-0.8c0.5-0.2,1.1-0.3,1.6-0.2c0.2,0,0.4,0,0.7,0.1
c0.2,0,0.5,0.1,0.7,0.2c0.2,0.1,0.4,0.2,0.6,0.4c0.2,0.1,0.4,0.3,0.5,0.5L105.8,186.2z"/>
<path class="st4" d="M107.8,188c0-0.6,0-1.2,0.2-1.7s0.4-0.9,0.8-1.3c0.3-0.4,0.7-0.7,1.2-0.9s1-0.4,1.6-0.4s1.1,0,1.7,0.2
c0.5,0.1,1,0.4,1.4,0.7c0.4,0.3,0.7,0.7,0.9,1.2c0.2,0.5,0.4,1,0.4,1.6c0,0.6,0,1.2-0.2,1.7c-0.2,0.5-0.4,0.9-0.8,1.3
c-0.3,0.4-0.8,0.7-1.2,0.9s-1,0.4-1.6,0.4c-0.6,0-1.1,0-1.7-0.2c-0.5-0.1-1-0.4-1.4-0.7c-0.4-0.3-0.7-0.7-0.9-1.2
C108,189.2,107.9,188.6,107.8,188z M109.6,187.9c0,0.4,0.1,0.7,0.2,1c0.1,0.3,0.3,0.5,0.5,0.7c0.2,0.2,0.5,0.4,0.8,0.4
c0.3,0.1,0.6,0.1,1,0.1c0.4,0,0.7-0.1,1-0.3c0.3-0.1,0.5-0.3,0.7-0.6c0.2-0.2,0.3-0.5,0.4-0.8c0.1-0.3,0.1-0.6,0.1-1
c0-0.3-0.1-0.7-0.2-1c-0.1-0.3-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.4-0.8-0.5c-0.3-0.1-0.6-0.1-1-0.1c-0.4,0-0.7,0.1-1,0.3
s-0.5,0.3-0.7,0.6s-0.3,0.5-0.4,0.8C109.6,187.2,109.5,187.6,109.6,187.9z"/>
<path class="st4" d="M116.5,183.5l2.5-0.5l2.6,4.5l0,0l0.8-5.2l2.5-0.5l1.4,7.4l-1.6,0.3l-1.1-5.7l0,0l-0.9,6.1l-1.3,0.2l-3-5.3
l0,0l1.1,5.7l-1.6,0.3L116.5,183.5z"/>
<path class="st4" d="M128.3,180.3l1.3,0l-0.8,8.9l-1.3,0L128.3,180.3z"/>
<path class="st4" d="M130.1,180.4l2.4-0.9l3.4,4l0,0l-0.1-5.2l2.3-0.9l2.7,7.1l-1.6,0.6l-2.1-5.4l0,0l0.2,6.1l-1.2,0.5l-3.9-4.7
l0,0l2.1,5.4l-1.6,0.6L130.1,180.4z"/>
<path class="st4" d="M139.2,176.7l1.5-0.7l3.3,6.8l-1.5,0.7L139.2,176.7z"/>
<path class="st4" d="M146.1,175.2c-0.2-0.1-0.4-0.1-0.7-0.1c-0.2,0-0.5,0.1-0.6,0.2c-0.1,0.1-0.2,0.1-0.3,0.2
c-0.1,0.1-0.2,0.2-0.3,0.3s-0.1,0.2-0.1,0.3s0,0.2,0.1,0.4c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4,0,0.7,0c0.3-0.1,0.6-0.1,0.9-0.2
c0.3-0.1,0.6-0.1,0.9-0.1c0.3,0,0.6,0.1,0.9,0.2c0.3,0.1,0.5,0.4,0.7,0.8c0.2,0.4,0.3,0.7,0.3,1.1c0,0.3,0,0.7-0.2,1
c-0.1,0.3-0.3,0.6-0.6,0.9c-0.3,0.3-0.6,0.5-0.9,0.7c-0.4,0.2-0.9,0.4-1.3,0.5c-0.4,0.1-0.9,0.1-1.4-0.1l0.4-1.7
c0.3,0.1,0.5,0.2,0.8,0.1c0.3,0,0.6-0.1,0.8-0.2c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.1-0.2,0.1-0.3
c0-0.1,0-0.2-0.1-0.4c-0.1-0.2-0.3-0.3-0.5-0.3s-0.5,0-0.7,0c-0.3,0-0.6,0.1-0.9,0.2c-0.3,0.1-0.6,0.1-0.9,0.1
c-0.3,0-0.6-0.1-0.9-0.2c-0.3-0.1-0.5-0.4-0.7-0.8c-0.2-0.4-0.3-0.7-0.3-1.1c0-0.3,0.1-0.7,0.2-1s0.3-0.6,0.6-0.9
c0.3-0.3,0.5-0.5,0.9-0.7c0.4-0.2,0.8-0.4,1.2-0.4c0.4-0.1,0.8-0.1,1.2,0L146.1,175.2z"/>
<path class="st4" d="M147.1,172.5l2.3-1.6c0.3-0.2,0.7-0.4,1-0.5c0.3-0.1,0.7-0.2,1-0.2c0.3,0,0.6,0.1,0.9,0.2
c0.3,0.2,0.6,0.4,0.8,0.8c0.2,0.4,0.4,0.7,0.4,1c0,0.3,0,0.6-0.1,0.9c-0.1,0.3-0.3,0.6-0.5,0.8s-0.5,0.5-0.9,0.7l-1,0.7l1.6,2.5
l-1.4,0.9L147.1,172.5z M150.3,174.3l0.9-0.6c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.2,0.2-0.3c0.1-0.1,0.1-0.2,0.1-0.4
c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.2-0.2-0.3-0.4-0.3c-0.1,0-0.3-0.1-0.4,0c-0.2,0-0.3,0.1-0.5,0.2c-0.2,0.1-0.3,0.2-0.4,0.3
l-0.7,0.5L150.3,174.3z"/>
</g>
<g class="st2">
<g>
<g>
<polygon class="st4" points="27.1,93.5 38.6,93.5 45.6,105.1 52.7,93.5 64.2,93.5 64.2,126.4 53.2,126.4 53.2,110.1
45.6,121.8 45.4,121.8 37.9,110.1 37.9,126.4 27.1,126.4 "/>
</g>
</g>
<g>
<g>
<rect x="69.6" y="93.5" class="st4" width="11" height="32.9"/>
</g>
</g>
<g>
<g>
<g>
<g>
<path class="st4" d="M83.4,120.9l5.9-7c3.6,2.7,7.7,3.9,11.5,3.9c2,0,2.8-0.5,2.8-1.4v-0.1c0-0.9-1-1.5-4.6-2.2
c-7.4-1.5-13.9-3.6-13.9-10.6v-0.1c0-6.3,4.9-11.1,14-11.1c6.3,0,11.1,1.5,14.9,4.5l-5.4,7.4c-3.1-2.3-6.8-3.2-9.9-3.2
c-1.6,0-2.4,0.6-2.4,1.4v0.1c0,0.9,0.9,1.5,4.4,2.1c8.4,1.6,14.1,4,14.1,10.6v0.1c0,6.9-5.7,11.1-14.5,11.1
C93.6,126.4,87.6,124.5,83.4,120.9"/>
</g>
</g>
<g>
<g>
<path class="st4" d="M132.2,109c2.8,0,4.7-1.3,4.7-3.6v-0.1c0-2.4-1.7-3.6-4.7-3.6h-3v7.3H132.2z M118.2,92.9H133
c8.7,0,14.7,3.9,14.7,11.7v0.1c0,7.9-6.1,12.2-15,12.2h-3.6v8.9h-11V92.9z"/>
</g>
</g>
</g>
</g>
<g>
<g>
<path class="st4" d="M34.8,132.7H31V130h10.7v2.6h-3.8v11.2h-3.1V132.7z"/>
</g>
<g>
<path class="st4" d="M44.7,129.3h3.1v5.7h0c0.3-0.4,0.7-0.8,1.2-1c0.5-0.2,1-0.4,1.6-0.4c2,0,3.5,1.4,3.5,4.4v5.9h-3.1v-5.5
c0-1.3-0.5-2.2-1.6-2.2c-0.8,0-1.3,0.5-1.6,1.1c-0.1,0.2-0.1,0.5-0.1,0.7v6h-3.1V129.3z"/>
</g>
<g>
<path class="st4" d="M58.2,137.1c0-1.5,0-2.4-0.1-3.3h2.7l0.1,1.9H61c0.5-1.5,1.7-2.1,2.7-2.1c0.3,0,0.4,0,0.7,0v2.9
c-0.2,0-0.5-0.1-0.8-0.1c-1.2,0-1.9,0.6-2.1,1.6c0,0.2-0.1,0.5-0.1,0.7v5.1h-3.1V137.1z"/>
</g>
<g>
<path class="st4" d="M69.8,139.9c0.1,1.3,1.4,1.9,2.8,1.9c1.1,0,1.9-0.1,2.8-0.4l0.4,2.1c-1,0.4-2.3,0.6-3.6,0.6
c-3.4,0-5.4-2-5.4-5.1c0-2.6,1.6-5.4,5.1-5.4c3.3,0,4.5,2.5,4.5,5c0,0.5-0.1,1-0.1,1.2H69.8z M73.5,137.7c0-0.8-0.3-2-1.8-2
c-1.3,0-1.9,1.2-1.9,2H73.5z"/>
</g>
<g>
<path class="st4" d="M85.4,143.9l-0.2-1h-0.1c-0.7,0.8-1.7,1.2-2.9,1.2c-2,0-3.3-1.5-3.3-3.1c0-2.6,2.3-3.9,5.9-3.8V137
c0-0.5-0.3-1.3-1.8-1.3c-1,0-2.1,0.4-2.8,0.8l-0.6-2c0.7-0.4,2.1-0.9,3.9-0.9c3.4,0,4.4,2,4.4,4.3v3.5c0,1,0,1.9,0.1,2.4H85.4z
M85,139.1c-1.6,0-2.9,0.4-2.9,1.6c0,0.8,0.5,1.2,1.2,1.2c0.8,0,1.4-0.5,1.6-1.2c0-0.2,0.1-0.3,0.1-0.5V139.1z"/>
</g>
<g>
<path class="st4" d="M95.5,130.9v2.9h2.2v2.3h-2.2v3.6c0,1.2,0.3,1.8,1.2,1.8c0.4,0,0.7,0,0.9-0.1l0,2.4
c-0.4,0.2-1.2,0.3-2,0.3c-1,0-1.9-0.3-2.3-0.9c-0.6-0.6-0.9-1.6-0.9-3v-4.1h-1.3v-2.3h1.3v-2.2L95.5,130.9z"/>
</g>
<g>
<path class="st4" d="M106.7,140.7c0.8,0.4,2.1,0.9,3.5,0.9c1.4,0,2.2-0.6,2.2-1.5c0-0.9-0.7-1.4-2.3-2
c-2.3-0.8-3.8-2.1-3.8-4.1c0-2.4,2-4.2,5.2-4.2c1.6,0,2.7,0.3,3.5,0.7l-0.7,2.5c-0.6-0.3-1.5-0.7-2.9-0.7c-1.4,0-2,0.6-2,1.3
c0,0.9,0.8,1.3,2.6,2c2.4,0.9,3.6,2.2,3.6,4.1c0,2.3-1.8,4.3-5.6,4.3c-1.6,0-3.1-0.4-3.9-0.8L106.7,140.7z"/>
</g>
<g>
<path class="st4" d="M119,129.3h3.1v5.7h0c0.3-0.4,0.7-0.8,1.2-1c0.5-0.2,1-0.4,1.6-0.4c2,0,3.5,1.4,3.5,4.4v5.9h-3.1v-5.5
c0-1.3-0.5-2.2-1.6-2.2c-0.8,0-1.3,0.5-1.6,1.1c-0.1,0.2-0.1,0.5-0.1,0.7v6H119V129.3z"/>
</g>
<g>
<path class="st4" d="M138.2,143.9l-0.2-1H138c-0.7,0.8-1.7,1.2-2.9,1.2c-2,0-3.3-1.5-3.3-3.1c0-2.6,2.3-3.9,5.9-3.8V137
c0-0.5-0.3-1.3-1.8-1.3c-1,0-2.1,0.4-2.8,0.8l-0.6-2c0.7-0.4,2.1-0.9,3.9-0.9c3.4,0,4.4,2,4.4,4.3v3.5c0,1,0,1.9,0.1,2.4H138.2
z M137.9,139.1c-1.6,0-2.9,0.4-2.9,1.6c0,0.8,0.5,1.2,1.2,1.2c0.8,0,1.4-0.5,1.6-1.2c0-0.2,0.1-0.3,0.1-0.5V139.1z"/>
</g>
<g>
<path class="st4" d="M144.8,137.1c0-1.5,0-2.4-0.1-3.3h2.7l0.1,1.9h0.1c0.5-1.5,1.7-2.1,2.7-2.1c0.3,0,0.4,0,0.7,0v2.9
c-0.2,0-0.5-0.1-0.8-0.1c-1.2,0-1.9,0.6-2.1,1.6c0,0.2-0.1,0.5-0.1,0.7v5.1h-3.1V137.1z"/>
</g>
<g>
<path class="st4" d="M157.3,131c0,0.9-0.7,1.6-1.7,1.6c-1,0-1.6-0.7-1.6-1.6c0-0.9,0.6-1.6,1.6-1.6
C156.6,129.4,157.3,130.1,157.3,131z M154,143.9v-10.1h3.1v10.1H154z"/>
</g>
<g>
<path class="st4" d="M161.1,137c0-1.3,0-2.3-0.1-3.2h2.7l0.1,1.4h0.1c0.4-0.6,1.4-1.6,3.1-1.6c2.1,0,3.6,1.4,3.6,4.3v6h-3.1
v-5.6c0-1.3-0.5-2.2-1.6-2.2c-0.9,0-1.4,0.6-1.6,1.2c-0.1,0.2-0.1,0.5-0.1,0.8v5.8h-3.1V137z"/>
</g>
<g>
<path class="st4" d="M184.2,133.8c0,0.6-0.1,1.5-0.1,3v5.6c0,1.9-0.4,3.5-1.5,4.5c-1.1,0.9-2.6,1.2-4.1,1.2
c-1.3,0-2.7-0.3-3.6-0.8l0.6-2.4c0.6,0.4,1.7,0.8,2.9,0.8c1.5,0,2.6-0.8,2.6-2.7v-0.7h0c-0.6,0.8-1.6,1.3-2.7,1.3
c-2.5,0-4.3-2-4.3-4.9c0-3.2,2.1-5.3,4.6-5.3c1.4,0,2.2,0.6,2.8,1.4h0l0.1-1.2H184.2z M181,137.9c0-0.2,0-0.4-0.1-0.6
c-0.2-0.8-0.8-1.4-1.7-1.4c-1.1,0-2.1,1-2.1,2.9c0,1.5,0.7,2.7,2.1,2.7c0.8,0,1.4-0.5,1.6-1.3c0.1-0.2,0.1-0.6,0.1-0.8V137.9z"
/>
</g>
</g>
<g>
<g>
<g>
<g>
<path class="st3" d="M160.5,48.6h-2.1v23.3c0,3.6-2.1,6.9-6.4,6.9h-41.6v1.1c0,3.2,3.7,6.5,7.4,6.5h31.8l12.2,7.1l-1.8-7.1
h0.5c3.8,0,5.4-3.2,5.4-6.5V54.1C165.9,50.9,164.2,48.6,160.5,48.6"/>
</g>
</g>
<g>
<g>
<path class="st3" d="M137.4,57c-2.4,0-4.4-2-4.4-4.4c0-2.4,2-4.4,4.4-4.4c2.4,0,4.4,2,4.4,4.4C141.8,55.1,139.8,57,137.4,57
M121.2,57c-2.4,0-4.4-2-4.4-4.4c0-2.4,2-4.4,4.4-4.4c2.4,0,4.4,2,4.4,4.4C125.5,55.1,123.6,57,121.2,57 M104.9,57
c-2.4,0-4.4-2-4.4-4.4c0-2.4,2-4.4,4.4-4.4c2.4,0,4.4,2,4.4,4.4C109.2,55.1,107.3,57,104.9,57 M145.8,32.3H97.5
c-4.3,0-9.1,3.8-9.1,7.4V69c0,3.3,4.1,5.8,8.1,6.1L93.9,85l16.6-9.7h35.3c4.2,0,8.2-2.6,8.2-6.2V39.8
C153.9,36.1,150,32.3,145.8,32.3"/>
</g>
</g>
</g>
</g>
</g>
<g class="st2">
<path class="st3" d="M52.8,173.5l-3.1-2.2c-0.6-0.4-0.7-1.2-0.3-1.8l2.2-3.1c0.4-0.6,1.2-0.7,1.8-0.3l3.1,2.2
c0.6,0.4,0.7,1.2,0.3,1.8l-2.2,3.1C54.2,173.8,53.4,173.9,52.8,173.5z"/>
</g>
<g class="st2">
<path class="st3" d="M160.5,165.3l2.5,3c0.5,0.5,0.4,1.4-0.2,1.8l-3,2.5c-0.5,0.5-1.4,0.4-1.8-0.2l-2.5-3
c-0.5-0.5-0.4-1.4,0.2-1.8l3-2.5C159.3,164.7,160.1,164.7,160.5,165.3z"/>
</g>
</g>
</g>
<g id="Layer_2">
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -0,0 +1,385 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 212.6 212.6" style="enable-background:new 0 0 212.6 212.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{display:none;fill:none;stroke:#456D81;stroke-width:0.8301;stroke-linecap:square;stroke-miterlimit:10;stroke-dasharray:0.1876,1.8762;}
.st2{clip-path:url(#SVGID_2_);}
.st3{fill:#456D81;}
.st4{fill:#DF2E39;}
</style>
<path class="st0" d="M106.3,212.7C47.6,212.7,0,165.1,0,106.4S47.6,0.1,106.3,0.1c58.7,0,106.3,47.6,106.3,106.3
S165,212.7,106.3,212.7z"/>
<circle class="st1" cx="106.3" cy="106.8" r="87"/>
<g>
<defs>
<path id="SVGID_1_" d="M106.3,212.7C47.6,212.7,0,165.1,0,106.4S47.6,0.1,106.3,0.1c58.7,0,106.3,47.6,106.3,106.3
S165,212.7,106.3,212.7z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g class="st2">
<path class="st3" d="M106.3,217.3c-61.2,0-111-49.8-111-111s49.8-111,111-111s111,49.8,111,111S167.5,217.3,106.3,217.3z M106.3,5
C50.4,5,5,50.4,5,106.3c0,55.9,45.5,101.3,101.3,101.3c55.9,0,101.3-45.5,101.3-101.3C207.7,50.4,162.2,5,106.3,5z"/>
</g>
<g class="st2">
<path class="st3" d="M13.8,101.1l-0.9-0.1l0.1-1.1l0.9,0.1L13.8,101.1z M198.7,99.4l-0.1-1.1l0.9-0.1l0.1,1.1L198.7,99.4z
M14,98.9l-0.9-0.1l0.1-1.1l0.9,0.1L14,98.9z M198.5,97.3l-0.1-1.1l0.9-0.1l0.1,1.1L198.5,97.3z M14.2,96.6l-0.9,0l0.1-1.1
l0.9,0.1L14.2,96.6z M198.2,95.1l-0.1-1.1l0.9-0.1l0.1,1.1L198.2,95.1z M14.5,94.5l-0.9-0.1l0.1-1.1l0.9,0.1L14.5,94.5z
M197.9,92.9l-0.2-1.1l0.9-0.1l0.2,1.1L197.9,92.9z M14.8,92.3l-0.9-0.1l0.2-1.1l0.9,0.1L14.8,92.3z M197.6,90.7l-0.2-1.1l0.9-0.2
l0.2,1.1L197.6,90.7z M15.2,90.2L14.3,90l0.2-1.1l0.9,0.2L15.2,90.2z M197.2,88.6l-0.2-1.1l0.9-0.2l0.2,1.1L197.2,88.6z M15.6,88
l-0.9-0.2l0.2-1.1l0.9,0.2L15.6,88z M196.7,86.4l-0.2-1l0.9-0.2l0.2,1.1L196.7,86.4z M16,85.9l-0.9-0.2l0.2-1.1l0.9,0.2L16,85.9z
M196.2,84.3l-0.3-1.1l0.9-0.2l0.3,1.1L196.2,84.3z M16.6,83.7l-0.9-0.2l0.3-1.1l0.9,0.2L16.6,83.7z M195.6,82.2l-0.3-1l0.9-0.2
l0.3,1.1L195.6,82.2z M17.1,81.6l-0.9-0.2l0.3-1l0.9,0.2L17.1,81.6z M195,80l-0.3-1l0.8-0.3l0.3,1L195,80z M17.8,79.5l-0.8-0.3
l0.3-1l0.8,0.3L17.8,79.5z M194.4,77.9l-0.3-1l0.8-0.3l0.3,1L194.4,77.9z M18.4,77.4l-0.8-0.3l0.4-1l0.8,0.3L18.4,77.4z
M193.7,75.9l-0.4-1l0.8-0.3l0.4,1L193.7,75.9z M19.2,75.2L18.3,75l0.3-0.9l0.9,0.2L19.2,75.2z M192.9,73.8l-0.4-1l0.8-0.3l0.4,1
L192.9,73.8z M20,73.2l-0.9-0.2l0.4-0.9l0.9,0.2L20,73.2z M192.1,71.8l-0.4-1l0.8-0.3l0.4,1L192.1,71.8z M20.8,71.2l-0.8-0.3
l0.4-1l0.8,0.3L20.8,71.2z M191.3,69.8l-0.4-1l0.8-0.4l0.4,1L191.3,69.8z M21.6,69.2l-0.8-0.4l0.4-1l0.8,0.4L21.6,69.2z
M190.4,67.8l-0.5-1l0.8-0.4l0.5,1L190.4,67.8z M22.6,67.1l-0.8-0.3l0.4-0.9l0.8,0.3L22.6,67.1z M189.4,65.8l-0.5-1l0.8-0.4l0.5,1
L189.4,65.8z M23.6,65.1l-0.8-0.3l0.5-1l0.8,0.4L23.6,65.1z M188.4,63.8l-0.5-0.9l0.7-0.5l0.5,0.9L188.4,63.8z M24.5,63.3
l-0.8-0.4l0.5-1l0.8,0.4L24.5,63.3z M187.4,61.9l-0.5-0.9l0.8-0.4l0.5,1L187.4,61.9z M25.6,61.3l-0.8-0.4l0.5-0.9l0.8,0.4
L25.6,61.3z M186.3,60l-0.6-0.9l0.8-0.5l0.6,0.9L186.3,60z M26.7,59.3L25.9,59l0.5-0.8l0.8,0.4L26.7,59.3z M185.2,58.1l-0.6-0.9
l0.8-0.5l0.6,0.9L185.2,58.1z M27.8,57.5l-0.7-0.5l0.6-0.9l0.7,0.5L27.8,57.5z M184,56.3l-0.6-0.9l0.7-0.5l0.6,0.9L184,56.3z
M29.1,55.6l-0.8-0.4l0.5-0.8l0.8,0.4L29.1,55.6z M182.7,54.4l-0.6-0.9l0.7-0.5l0.6,0.9L182.7,54.4z M30.3,53.9l-0.7-0.5l0.6-0.9
l0.7,0.5L30.3,53.9z M181.5,52.7l-0.6-0.9l0.7-0.5l0.6,0.9L181.5,52.7z M31.6,52.1l-0.7-0.5l0.6-0.9l0.7,0.5L31.6,52.1z
M180.2,50.9l-0.7-0.9l0.7-0.5l0.7,0.9L180.2,50.9z M32.9,50.3l-0.7-0.5l0.7-0.9l0.7,0.5L32.9,50.3z M178.8,49.2l-0.6-0.8l0.6-0.6
l0.6,0.8L178.8,49.2z M34.2,48.6L33.6,48l0.7-0.8l0.7,0.6L34.2,48.6z M177.5,47.5l-0.7-0.8l0.6-0.6l0.7,0.8L177.5,47.5z
M35.6,46.9L35,46.3l0.7-0.8l0.7,0.6L35.6,46.9z M176,45.8l-0.7-0.8l0.7-0.6l0.7,0.8L176,45.8z M37.1,45.3l-0.7-0.6l0.7-0.8
l0.7,0.6L37.1,45.3z M174.5,44.2l-0.7-0.8l0.6-0.6l0.7,0.8L174.5,44.2z M38.6,43.6L37.9,43l0.7-0.8l0.6,0.6L38.6,43.6z M173,42.6
l-0.8-0.8l0.6-0.6l0.8,0.8L173,42.6z M40.1,42l-0.6-0.6l0.8-0.8l0.6,0.6L40.1,42z M171.5,41l-0.8-0.8l0.6-0.6l0.8,0.8L171.5,41z
M41.6,40.5L41,39.8l0.8-0.8l0.6,0.6L41.6,40.5z M169.9,39.5l-0.7-0.7l0.5-0.7l0.7,0.7L169.9,39.5z M43.2,39l-0.6-0.7l0.8-0.7
l0.6,0.7L43.2,39z M168.3,38l-0.8-0.7l0.6-0.7l0.8,0.7L168.3,38z M44.9,37.5l-0.6-0.7l0.8-0.7l0.6,0.7L44.9,37.5z M166.7,36.5
l-0.8-0.7l0.6-0.7l0.8,0.7L166.7,36.5z M46.5,36.1l-0.6-0.7l0.8-0.7l0.6,0.7L46.5,36.1z M165,35.1l-0.9-0.7l0.6-0.7l0.8,0.7
L165,35.1z M48.2,34.7L47.7,34l0.8-0.7l0.6,0.7L48.2,34.7z M163.3,33.7l-0.9-0.7l0.5-0.7l0.9,0.7L163.3,33.7z M49.9,33.3l-0.5-0.7
l0.9-0.7l0.5,0.7L49.9,33.3z M161.5,32.4l-0.9-0.6l0.5-0.7l0.9,0.6L161.5,32.4z M51.7,32l-0.5-0.7l0.9-0.6l0.5,0.7L51.7,32z
M159.7,31.1l-0.9-0.6l0.5-0.8l0.9,0.6L159.7,31.1z M53.5,30.7L53,30l0.9-0.6l0.5,0.7L53.5,30.7z M157.9,29.9l-0.9-0.6l0.5-0.7
l0.9,0.6L157.9,29.9z M55.4,29.4l-0.6-0.7l0.8-0.5l0.6,0.7L55.4,29.4z M156.1,28.7l-0.9-0.6l0.5-0.8l0.9,0.6L156.1,28.7z
M57.1,28.3l-0.5-0.8l0.9-0.6l0.5,0.8L57.1,28.3z M154.2,27.5l-0.9-0.6l0.5-0.8l0.9,0.6L154.2,27.5z M59,27.1l-0.4-0.8l0.9-0.6
l0.5,0.8L59,27.1z M152.3,26.4l-0.9-0.5l0.4-0.8l1,0.5L152.3,26.4z M60.9,26.1l-0.4-0.8l1-0.5l0.4,0.8L60.9,26.1z M150.4,25.3
l-1-0.5l0.4-0.8l1,0.5L150.4,25.3z M62.9,25l-0.5-0.7l0.9-0.5l0.5,0.7L62.9,25z M148.4,24.3l-1-0.5l0.4-0.8l1,0.5L148.4,24.3z
M64.8,24l-0.4-0.8l1-0.5l0.4,0.8L64.8,24z M146.5,23.3l-1-0.5l0.4-0.8l1,0.5L146.5,23.3z M66.7,23l-0.4-0.8l1-0.5l0.4,0.8
L66.7,23z M144.5,22.4l-1-0.4l0.4-0.8l1,0.4L144.5,22.4z M68.7,22.1l-0.4-0.8l1-0.4l0.4,0.8L68.7,22.1z M142.5,21.5l-1-0.4
l0.3-0.8l1,0.4L142.5,21.5z M70.7,21.3l-0.3-0.8l1-0.4l0.3,0.8L70.7,21.3z M140.4,20.7l-1-0.4l0.3-0.8l1,0.4L140.4,20.7z
M72.8,20.4l-0.3-0.8l1-0.4l0.3,0.8L72.8,20.4z M138.4,19.9l-1-0.4l0.3-0.8l1,0.4L138.4,19.9z M74.8,19.7l-0.3-0.8l1-0.4l0.3,0.8
L74.8,19.7z M136.3,19.1l-1-0.3l0.3-0.8l1,0.3L136.3,19.1z M76.9,18.9l-0.3-0.8l1-0.3l0.3,0.8L76.9,18.9z M134.2,18.4l-1-0.3
l0.3-0.9l1,0.3L134.2,18.4z M79,18.3l-0.3-0.8l1-0.3L80,18L79,18.3z M132.1,17.8l-1-0.3l0.2-0.9l1,0.3L132.1,17.8z M81.2,17.6
l-0.3-0.8l1-0.3l0.3,0.8L81.2,17.6z M130,17.2l-1.1-0.3l0.2-0.9l1.1,0.3L130,17.2z M83.2,17.1L83,16.2l1.1-0.3l0.2,0.9L83.2,17.1z
M127.8,16.7l-1.1-0.2l0.2-0.9l1.1,0.2L127.8,16.7z M85.4,16.6l-0.2-0.9l1.1-0.2l0.2,0.9L85.4,16.6z M125.7,16.2l-1.1-0.2l0.2-0.9
l1.1,0.2L125.7,16.2z M87.5,16.1l-0.2-0.9l1.1-0.2l0.2,0.9L87.5,16.1z M123.5,15.8l-1-0.2l0.1-0.9l1.1,0.2L123.5,15.8z M89.7,15.7
l-0.2-0.9l1.1-0.2l0.1,0.9L89.7,15.7z M121.4,15.4l-1.1-0.2l0.1-0.9l1.1,0.2L121.4,15.4z M91.9,15.3l-0.2-0.9l1-0.2l0.2,0.9
L91.9,15.3z M119.2,15.1l-1.1-0.1l0.1-0.9l1.1,0.1L119.2,15.1z M94,15l-0.1-0.9L95,14l0.1,0.9L94,15z M117,14.8l-1.1-0.1l0.1-0.9
l1.1,0.1L117,14.8z M96.2,14.7l-0.1-0.9l1.1-0.1l0.1,0.9L96.2,14.7z M114.8,14.6l-1-0.1l0-0.9l1.1,0.1L114.8,14.6z M98.4,14.5
l-0.1-0.9l1.1-0.1l0.1,0.9L98.4,14.5z M112.6,14.4l-1.1-0.1l0.1-0.9l1.1,0.1L112.6,14.4z M100.6,14.4l-0.1-0.9l1.1-0.1l0,0.9
L100.6,14.4z M110.4,14.3l-1.1,0l0-0.9l1.1,0L110.4,14.3z M103,14.2l-0.2-0.9l1,0l0.1,0.9L103,14.2z M108.2,14.2l-1.1,0l0-0.9
l1.1,0L108.2,14.2z M105,14.2l0-0.9l1.1,0l0,0.9L105,14.2z"/>
</g>
<g class="st2">
<path class="st3" d="M16.1,113.1c0.1-0.1,0.3-0.3,0.3-0.5s0.1-0.4,0.1-0.6c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.1-0.3
c-0.1-0.1-0.1-0.2-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.1c-0.2,0-0.4,0.1-0.5,0.3c-0.1,0.2-0.2,0.4-0.2,0.6c-0.1,0.2-0.1,0.5-0.2,0.8
c-0.1,0.3-0.2,0.5-0.3,0.8c-0.1,0.2-0.3,0.4-0.5,0.6c-0.2,0.2-0.5,0.3-0.9,0.3c-0.4,0-0.7,0-1-0.2c-0.3-0.1-0.5-0.3-0.7-0.5
c-0.2-0.2-0.4-0.5-0.5-0.8c-0.1-0.3-0.2-0.6-0.2-1c0-0.4,0-0.9,0.1-1.2c0.1-0.4,0.3-0.8,0.6-1.1l1.2,1c-0.2,0.2-0.3,0.4-0.4,0.6
c-0.1,0.2-0.1,0.5-0.1,0.7c0,0.1,0,0.2,0.1,0.4c0,0.1,0.1,0.2,0.1,0.3c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.1
c0.2,0,0.4-0.1,0.5-0.3c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.5,0.2-0.8c0.1-0.3,0.2-0.5,0.3-0.8c0.1-0.2,0.3-0.5,0.5-0.6
s0.5-0.3,0.9-0.3c0.4,0,0.7,0,1,0.2c0.3,0.1,0.5,0.3,0.7,0.5c0.2,0.2,0.4,0.5,0.5,0.8c0.1,0.3,0.2,0.6,0.2,1c0,0.4,0,0.8-0.1,1.1
c-0.1,0.4-0.3,0.7-0.5,1L16.1,113.1z"/>
<path class="st3" d="M17.9,114.9l0.2,1.5l-2.5,0.3l0.4,2.9l2.5-0.3l0.2,1.5l-6.8,0.9l-0.2-1.5l2.9-0.4l-0.4-2.9l-2.9,0.4l-0.2-1.5
L17.9,114.9z"/>
<path class="st3" d="M19.3,124.1l0.3,1.2l-6,4.4l-0.4-1.7l1.3-0.9l-0.6-2.6l-1.5-0.2l-0.4-1.6L19.3,124.1z M17.5,125.1l-2.2-0.3
l0.4,1.6L17.5,125.1z"/>
<path class="st3" d="M20.3,128.7l0.7,2.5c0.1,0.3,0.2,0.7,0.2,1c0,0.3,0,0.6-0.1,0.9c-0.1,0.3-0.2,0.5-0.5,0.7
c-0.2,0.2-0.5,0.4-0.9,0.5c-0.5,0.1-0.9,0.1-1.3,0c-0.4-0.1-0.7-0.4-0.9-0.9l-2.3,2.5l-0.5-1.7L17,132l-0.2-0.7l-2.6,0.7l-0.4-1.4
L20.3,128.7z M18,130.9l0.2,0.9c0,0.1,0.1,0.3,0.1,0.4c0.1,0.1,0.1,0.3,0.2,0.4c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0,0.3,0,0.4,0
c0.2,0,0.3-0.1,0.4-0.2c0.1-0.1,0.1-0.2,0.2-0.3c0-0.1,0-0.2,0-0.4c0-0.1,0-0.3-0.1-0.4l-0.3-0.9L18,130.9z"/>
<path class="st3" d="M22.1,134.5l0.5,1.4l-6.5,2.2l-0.5-1.4L22.1,134.5z"/>
<path class="st3" d="M22.9,137.1l0.8,1.9l-3.3,4.5l0,0l4.4-1.8l0.6,1.4l-6.3,2.6l-0.7-1.8l3.4-4.6l0,0l-4.5,1.8l-0.6-1.4
L22.9,137.1z"/>
<path class="st3" d="M22.9,152.5c-0.4-0.3-0.8-0.6-1.1-1s-0.6-0.8-0.8-1.2c-0.2-0.5-0.4-0.9-0.4-1.4c-0.1-0.5,0-0.9,0.1-1.4
s0.4-0.8,0.7-1.2c0.3-0.4,0.7-0.7,1.2-0.9s1-0.4,1.4-0.4c0.5,0,0.9,0,1.4,0.2c0.4,0.2,0.8,0.4,1.2,0.7c0.4,0.3,0.6,0.7,0.9,1.2
c0.2,0.5,0.4,1,0.5,1.4c0.1,0.5,0.1,0.9-0.1,1.4l-1.5-0.4c0.1-0.3,0.1-0.6,0.1-0.8c0-0.3-0.1-0.6-0.3-0.9
c-0.1-0.3-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.3-0.7-0.4c-0.3-0.1-0.5-0.1-0.8-0.1c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.1-0.5,0.3-0.7,0.5
c-0.2,0.2-0.3,0.4-0.4,0.7c-0.1,0.3-0.1,0.5-0.1,0.8c0,0.3,0.1,0.6,0.2,0.8c0.1,0.3,0.3,0.5,0.5,0.7c0.2,0.2,0.3,0.3,0.5,0.4
l1-0.5l-0.6-1.1l1.2-0.6l1.2,2.4L22.9,152.5z"/>
<path class="st3" d="M27.4,157.2l-1.2-2l1-0.6l1.2,2L27.4,157.2z"/>
<path class="st3" d="M33.3,159.4l-1.1-1.6l1.1-0.8l3.2,4.3l-1.1,0.8l-1.1-1.6l-4.4,3.3l-0.9-1.2L33.3,159.4z"/>
<path class="st3" d="M33.9,163.8c0.4-0.4,0.9-0.6,1.3-0.8c0.5-0.1,0.9-0.2,1.4-0.2c0.4,0,0.9,0.2,1.3,0.4c0.4,0.2,0.8,0.6,1.1,1
c0.3,0.4,0.6,0.8,0.8,1.3c0.2,0.5,0.2,0.9,0.2,1.4c0,0.5-0.1,0.9-0.4,1.3c-0.2,0.4-0.5,0.8-1,1.2c-0.4,0.4-0.9,0.6-1.3,0.8
c-0.5,0.1-0.9,0.2-1.4,0.2c-0.4,0-0.9-0.2-1.3-0.4c-0.4-0.2-0.8-0.6-1.1-1c-0.3-0.4-0.6-0.8-0.8-1.3c-0.2-0.4-0.2-0.9-0.2-1.3
c0-0.4,0.1-0.9,0.4-1.3C33.1,164.5,33.4,164.1,33.9,163.8z M34.9,165c-0.2,0.2-0.4,0.4-0.6,0.7c-0.1,0.2-0.2,0.5-0.2,0.8
c0,0.3,0,0.5,0.1,0.8c0.1,0.3,0.2,0.5,0.4,0.8c0.2,0.2,0.4,0.4,0.7,0.6c0.3,0.1,0.5,0.2,0.8,0.2c0.3,0,0.5,0,0.8-0.1
c0.3-0.1,0.5-0.2,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7c0.1-0.3,0.2-0.5,0.3-0.8c0-0.3,0-0.5-0.1-0.8c-0.1-0.3-0.2-0.5-0.4-0.8
c-0.2-0.2-0.4-0.4-0.7-0.6c-0.3-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0-0.8,0.1C35.4,164.6,35.1,164.8,34.9,165z"/>
<path class="st3" d="M43.7,169.7l1.6,1.5c0.4,0.4,0.7,0.8,1,1.2s0.5,0.9,0.5,1.3c0.1,0.4,0.1,0.9-0.1,1.4
c-0.1,0.5-0.4,0.9-0.8,1.4c-0.4,0.4-0.8,0.7-1.2,0.9c-0.4,0.2-0.9,0.2-1.3,0.2c-0.5,0-0.9-0.1-1.3-0.4c-0.4-0.2-0.8-0.5-1.2-0.8
l-1.8-1.7L43.7,169.7z M41.1,174.7l0.6,0.5c0.3,0.2,0.5,0.4,0.8,0.6c0.3,0.2,0.5,0.2,0.8,0.3c0.3,0,0.5,0,0.8-0.1
c0.3-0.1,0.5-0.3,0.8-0.6c0.2-0.2,0.4-0.5,0.5-0.8c0.1-0.3,0.1-0.5,0-0.8c0-0.3-0.1-0.5-0.3-0.8c-0.2-0.3-0.3-0.5-0.6-0.7
l-0.6-0.6L41.1,174.7z"/>
<path class="st3" d="M49,174.5l3.6,2.9l-0.9,1.1l-2.4-2l-0.8,1l2.3,1.8l-0.9,1.1l-2.3-1.9l-0.9,1.1l2.6,2.1l-0.9,1.1l-3.7-3
L49,174.5z"/>
<path class="st3" d="M53.9,180l-1.6-1.1l0.8-1.1l4.4,3.1l-0.8,1.1l-1.6-1.1l-3.2,4.5l-1.2-0.9L53.9,180z"/>
<path class="st3" d="M58,181.2l3.9,2.4l-0.7,1.2l-2.7-1.6l-0.7,1.1l2.5,1.5l-0.7,1.2l-2.5-1.5l-0.7,1.2l2.8,1.7l-0.7,1.2l-4.1-2.5
L58,181.2z"/>
<path class="st3" d="M66.1,187.9c0-0.2-0.1-0.4-0.3-0.6c-0.1-0.2-0.3-0.3-0.6-0.5c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0-0.8,0.1
c-0.2,0.1-0.5,0.2-0.7,0.4c-0.2,0.2-0.4,0.4-0.5,0.7c-0.1,0.3-0.2,0.6-0.3,0.8c0,0.3,0,0.6,0,0.8c0.1,0.3,0.2,0.5,0.3,0.7
c0.2,0.2,0.4,0.4,0.6,0.5c0.3,0.1,0.5,0.2,0.8,0.2c0.3,0,0.5-0.1,0.8-0.2l0.7,1.4c-0.4,0.2-0.9,0.3-1.4,0.3
c-0.5,0-0.9-0.2-1.3-0.4c-0.5-0.2-0.9-0.5-1.2-0.9c-0.3-0.4-0.6-0.7-0.7-1.2c-0.1-0.4-0.2-0.9-0.1-1.4c0-0.5,0.2-1,0.4-1.4
s0.6-0.9,0.9-1.2c0.4-0.3,0.8-0.5,1.2-0.6c0.4-0.1,0.9-0.2,1.4-0.1c0.5,0.1,0.9,0.2,1.4,0.5c0.2,0.1,0.3,0.2,0.5,0.3
c0.2,0.1,0.3,0.3,0.5,0.4c0.1,0.2,0.3,0.3,0.4,0.5c0.1,0.2,0.2,0.4,0.2,0.6L66.1,187.9z"/>
<path class="st3" d="M69.3,188.9l-1.8-0.8l0.5-1.2l4.9,2.2l-0.5,1.2l-1.8-0.8l-2.2,5l-1.4-0.6L69.3,188.9z"/>
<path class="st3" d="M78.2,191l1.2,0.4l0.7,7.4l-1.6-0.5l-0.1-1.6l-2.5-0.8l-1,1.2l-1.6-0.5L78.2,191z M78.1,193.1l-1.4,1.8
l1.6,0.5L78.1,193.1z"/>
<path class="st3" d="M82.6,192.4l2,0.5l1.7,5.3l0,0l1.1-4.6l1.5,0.4l-1.6,6.6l-1.9-0.5l-1.7-5.4l0,0l-1.1,4.7l-1.5-0.4L82.6,192.4
z"/>
<path class="st3" d="M90,194.2l2.2,0.3c0.5,0.1,1,0.2,1.5,0.4c0.5,0.2,0.9,0.5,1.2,0.8c0.3,0.3,0.6,0.7,0.7,1.2
c0.1,0.5,0.2,1,0.1,1.6c-0.1,0.5-0.3,1-0.5,1.4c-0.3,0.4-0.6,0.7-1,0.9s-0.8,0.4-1.3,0.5c-0.5,0.1-1,0.1-1.5,0l-2.4-0.4L90,194.2z
M90.7,199.8l0.8,0.1c0.3,0.1,0.7,0.1,1,0c0.3,0,0.6-0.1,0.8-0.2s0.4-0.3,0.6-0.6c0.2-0.2,0.3-0.6,0.3-0.9c0.1-0.3,0-0.6-0.1-0.9
c-0.1-0.3-0.2-0.5-0.4-0.7c-0.2-0.2-0.4-0.3-0.7-0.5c-0.3-0.1-0.6-0.2-0.9-0.3l-0.9-0.1L90.7,199.8z"/>
<path class="st3" d="M99.8,195.4l2.5,0.1c0.4,0,0.7,0.1,1,0.1s0.6,0.2,0.8,0.4c0.2,0.2,0.4,0.4,0.5,0.7c0.1,0.3,0.2,0.6,0.2,1
c0,0.4-0.1,0.7-0.2,1c-0.1,0.3-0.3,0.5-0.6,0.6s-0.5,0.2-0.8,0.3c-0.3,0.1-0.6,0.1-1,0.1l-1.1-0.1l-0.1,2.7l-1.5-0.1L99.8,195.4z
M101.2,198.4l1,0c0.1,0,0.3,0,0.4,0c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.2,0-0.3-0.1-0.4
c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.4-0.1c-0.2,0-0.3,0-0.4,0l-0.8,0L101.2,198.4z"/>
<path class="st3" d="M105.7,195.7l2.6,0c0.3,0,0.7,0,1,0.1c0.3,0.1,0.6,0.2,0.8,0.3c0.2,0.2,0.4,0.4,0.6,0.6
c0.1,0.3,0.2,0.6,0.2,1c0,0.5-0.1,0.9-0.4,1.2c-0.2,0.3-0.6,0.6-1.1,0.7l1.8,2.8l-1.8,0l-1.5-2.7l-0.7,0l0,2.7l-1.5,0L105.7,195.7
z M107.2,198.5l0.9,0c0.1,0,0.3,0,0.4,0c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.1-0.4
c0-0.2,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1-0.1-0.2-0.1-0.4-0.1c-0.1,0-0.3,0-0.4,0l-1,0L107.2,198.5z"/>
<path class="st3" d="M111.6,199c-0.1-0.5,0-1,0.1-1.5c0.1-0.5,0.4-0.9,0.7-1.2c0.3-0.3,0.7-0.6,1.1-0.8c0.4-0.2,0.9-0.3,1.4-0.4
c0.5-0.1,1,0,1.5,0.1s0.9,0.3,1.2,0.6c0.4,0.3,0.6,0.6,0.9,1.1c0.2,0.4,0.4,0.9,0.4,1.5c0.1,0.5,0,1-0.1,1.5
c-0.1,0.5-0.4,0.9-0.7,1.2c-0.3,0.3-0.7,0.6-1.1,0.8c-0.4,0.2-0.9,0.3-1.4,0.4c-0.5,0.1-1,0-1.5-0.1c-0.5-0.1-0.9-0.3-1.2-0.6
c-0.4-0.3-0.6-0.6-0.9-1.1C111.8,200,111.7,199.5,111.6,199z M113.2,198.9c0,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.3,0.5,0.5,0.6
c0.2,0.2,0.4,0.3,0.7,0.4c0.3,0.1,0.6,0.1,0.9,0.1c0.3,0,0.6-0.1,0.9-0.2c0.2-0.1,0.5-0.3,0.6-0.5c0.2-0.2,0.3-0.5,0.4-0.7
c0.1-0.3,0.1-0.6,0.1-0.9c0-0.3-0.1-0.6-0.2-0.9c-0.1-0.3-0.3-0.5-0.5-0.7c-0.2-0.2-0.4-0.3-0.7-0.4c-0.3-0.1-0.6-0.1-0.9-0.1
c-0.3,0-0.6,0.1-0.9,0.2c-0.2,0.1-0.5,0.3-0.6,0.5s-0.3,0.5-0.4,0.7C113.2,198.2,113.2,198.5,113.2,198.9z"/>
<path class="st3" d="M121,195.8l-1.9,0.3l-0.2-1.3l5.3-0.9l0.2,1.3l-1.9,0.3l0.9,5.4l-1.5,0.3L121,195.8z"/>
<path class="st3" d="M124.7,193.8l4.5-1.1l0.3,1.3l-3,0.7l0.3,1.2l2.9-0.7l0.3,1.4l-2.9,0.7l0.3,1.3l3.2-0.8l0.3,1.4l-4.7,1.1
L124.7,193.8z"/>
<path class="st3" d="M135.1,192.8c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2,0-0.5,0-0.8,0.1c-0.3,0.1-0.5,0.2-0.7,0.4
c-0.2,0.2-0.4,0.4-0.5,0.6c-0.1,0.2-0.2,0.5-0.2,0.8c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.4,0.4,0.6,0.5
c0.2,0.1,0.5,0.2,0.7,0.3c0.3,0,0.5,0,0.8-0.1c0.3-0.1,0.5-0.2,0.7-0.4s0.3-0.4,0.4-0.7l1.5,0.5c-0.2,0.5-0.4,0.9-0.8,1.2
c-0.4,0.3-0.8,0.5-1.2,0.7c-0.5,0.2-1,0.2-1.5,0.2c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.8-0.5-1.1-0.9c-0.3-0.4-0.5-0.8-0.7-1.3
c-0.2-0.5-0.2-1-0.2-1.5c0-0.5,0.2-0.9,0.4-1.3c0.2-0.4,0.5-0.7,0.9-1c0.4-0.3,0.8-0.5,1.3-0.7c0.2-0.1,0.4-0.1,0.6-0.1
c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0.1,0.6,0.1c0.2,0.1,0.4,0.2,0.6,0.3L135.1,192.8z"/>
<path class="st3" d="M138.2,191.3l-1.8,0.7l-0.5-1.2l5-1.9l0.5,1.2l-1.8,0.7l2,5.1l-1.4,0.5L138.2,191.3z"/>
<path class="st4" d="M144.9,186.5l2.1-1.1l4.1,8.3l-2.1,1.1L144.9,186.5z"/>
<path class="st3" d="M151.9,184.6l1-0.7l3.4,2.9l0,0l-1.2-4.3l1-0.6l3.5,2.8l0,0l-1.3-4.2l1-0.6l1.6,5.8l-0.9,0.6l-3.6-2.7l0,0
l1.2,4.3l-1,0.6L151.9,184.6z"/>
<path class="st3" d="M159.4,179.8l0.9-0.8l3.7,2.5l0,0l-1.6-4.2l0.9-0.7l3.8,2.4l0,0l-1.7-4.1l0.9-0.7l2.1,5.6l-0.9,0.7l-3.8-2.4
l0,0l1.6,4.2l-0.9,0.7L159.4,179.8z"/>
<path class="st3" d="M166.4,174.1l0.9-0.8l3.9,2.1l0,0l-2-4l0.8-0.8l4,2l0,0l-2.1-3.9l0.8-0.8l2.7,5.4l-0.8,0.8l-4.1-2l0,0l2,4
l-0.8,0.8L166.4,174.1z"/>
<path class="st3" d="M177.6,171c-0.1,0.2-0.3,0.2-0.5,0.3s-0.4-0.1-0.6-0.2c-0.2-0.1-0.2-0.3-0.3-0.5c0-0.2,0.1-0.4,0.2-0.6
c0.1-0.2,0.3-0.2,0.5-0.3c0.2,0,0.4,0.1,0.6,0.2c0.2,0.1,0.2,0.3,0.3,0.5S177.8,170.8,177.6,171z"/>
<path class="st3" d="M178.7,163.1c-0.3,0-0.5,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.6,0.5c-0.2,0.2-0.3,0.5-0.4,0.7
c-0.1,0.2-0.1,0.5,0,0.7c0.1,0.2,0.1,0.5,0.3,0.7c0.1,0.2,0.3,0.4,0.5,0.6c0.2,0.2,0.4,0.3,0.7,0.4c0.2,0.1,0.5,0.1,0.7,0.1
c0.2,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.5,0.4-0.7s0.1-0.5,0-0.8l1.1-0.1c0.1,0.4,0,0.8-0.1,1.2
c-0.1,0.4-0.3,0.7-0.6,1c-0.3,0.3-0.6,0.6-0.9,0.8c-0.3,0.2-0.7,0.3-1.1,0.3s-0.7,0-1.1-0.1s-0.7-0.3-1.1-0.6
c-0.3-0.3-0.6-0.6-0.8-0.9c-0.2-0.3-0.3-0.7-0.4-1.1c0-0.4,0-0.7,0.1-1.1s0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,0.9-0.8
c0.4-0.2,0.7-0.3,1.2-0.3L178.7,163.1z"/>
<path class="st3" d="M176.8,159.7c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.2,0-0.4,0.1-0.6c0.1-0.2,0.3-0.3,0.5-0.3s0.4,0,0.6,0.1
c0.2,0.1,0.3,0.3,0.3,0.5c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.3,0.3-0.5,0.3C177.1,159.9,176.9,159.9,176.8,159.7z M178.6,160.7
l0.6-0.9l4.6,3.4l-0.6,0.9L178.6,160.7z"/>
<path class="st3" d="M180.2,158.5l0.6-0.9l0.7,0.5l0,0c-0.1-0.1-0.1-0.3-0.2-0.5c0-0.2,0-0.3,0-0.5c0-0.2,0-0.3,0.1-0.5
c0.1-0.2,0.1-0.3,0.2-0.5c0.1-0.1,0.2-0.3,0.3-0.4l0.9,0.7c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.1,0.1-0.2,0.2
c-0.3,0.4-0.4,0.9-0.3,1.3c0.1,0.4,0.4,0.8,0.9,1.1l2.4,1.6l-0.6,0.9L180.2,158.5z"/>
<path class="st3" d="M185.9,152.4c-0.3,0.1-0.5,0.2-0.7,0.3c-0.2,0.1-0.4,0.3-0.5,0.6c-0.2,0.3-0.2,0.5-0.3,0.7s0,0.5,0.1,0.7
c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.7,0.3c0.2,0,0.5,0,0.7,0c0.2,0,0.5-0.1,0.7-0.3
s0.4-0.3,0.5-0.6c0.2-0.3,0.2-0.5,0.3-0.8c0-0.2,0-0.5-0.1-0.8l1.1-0.3c0.1,0.4,0.1,0.8,0.1,1.2c-0.1,0.4-0.2,0.8-0.4,1.1
c-0.2,0.4-0.5,0.7-0.8,0.9c-0.3,0.2-0.6,0.4-1,0.5c-0.4,0.1-0.7,0.1-1.1,0s-0.8-0.2-1.1-0.4c-0.4-0.2-0.7-0.5-0.9-0.8
c-0.2-0.3-0.4-0.7-0.5-1c-0.1-0.4-0.1-0.7,0-1.1c0.1-0.4,0.2-0.8,0.4-1.2c0.2-0.4,0.5-0.7,0.8-0.9c0.3-0.2,0.7-0.4,1.1-0.5
L185.9,152.4z"/>
<path class="st3" d="M182.5,148.5l0.5-1l8,4.3l-0.5,0.9L182.5,148.5z"/>
<path class="st3" d="M192.3,149.5c-0.1,0.2-0.2,0.3-0.5,0.4c-0.2,0.1-0.4,0.1-0.6,0c-0.2-0.1-0.3-0.2-0.4-0.5
c-0.1-0.2-0.1-0.4,0-0.6c0.1-0.2,0.2-0.3,0.5-0.4c0.2-0.1,0.4-0.1,0.6,0c0.2,0.1,0.3,0.3,0.4,0.5
C192.4,149.1,192.4,149.3,192.3,149.5z"/>
<path class="st3" d="M185.1,143.2l0.5-1l8.3,3.8l-0.5,1L185.1,143.2z"/>
<path class="st3" d="M196.5,139.6l-0.4,1l-0.8-0.3l0,0c0.2,0.2,0.4,0.5,0.4,0.9c0.1,0.4,0,0.8-0.2,1.2c-0.1,0.3-0.2,0.5-0.4,0.7
c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2c-0.3,0-0.6-0.1-1-0.2l-3.4-1.4l0.4-1l3.1,1.2c0.2,0.1,0.5,0.1,0.7,0.2
c0.2,0,0.4,0,0.5-0.1c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.3,0.3-0.4c0.1-0.2,0.1-0.4,0.1-0.6s0-0.4-0.1-0.6s-0.2-0.4-0.4-0.5
c-0.2-0.2-0.4-0.3-0.7-0.4l-2.7-1.1l0.4-1L196.5,139.6z"/>
<path class="st3" d="M197.6,138l-0.6,0.7l-7.6-6.5l0.6-0.7L197.6,138z"/>
<path class="st3" d="M193.2,131.8l0.2-1l0.9,0.2l0,0c-0.1,0-0.2-0.1-0.2-0.3c-0.1-0.1-0.2-0.3-0.2-0.5c-0.1-0.2-0.1-0.4-0.1-0.6
s0-0.5,0.1-0.7c0.1-0.4,0.3-0.7,0.5-1s0.6-0.4,0.9-0.5c-0.3-0.3-0.5-0.6-0.6-0.9s-0.1-0.7,0-1.1c0.1-0.4,0.3-0.8,0.5-1
c0.2-0.2,0.4-0.4,0.7-0.5c0.3-0.1,0.6-0.1,0.9-0.1s0.6,0.1,0.9,0.1l3.2,0.8l-0.3,1.1l-3.1-0.7c-0.2-0.1-0.4-0.1-0.6-0.1
c-0.2,0-0.4,0-0.6,0c-0.2,0.1-0.3,0.1-0.4,0.3c-0.1,0.1-0.2,0.3-0.3,0.6c-0.1,0.5-0.1,0.9,0.2,1.2c0.3,0.3,0.6,0.5,1.1,0.6l3,0.7
l-0.3,1.1l-2.9-0.7c-0.3-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.4,0-0.6,0c-0.2,0-0.3,0.1-0.5,0.3c-0.1,0.1-0.2,0.3-0.3,0.6
c0,0.2-0.1,0.4,0,0.6c0,0.2,0.1,0.4,0.2,0.5c0.1,0.2,0.3,0.3,0.5,0.5c0.2,0.1,0.5,0.2,0.8,0.3l2.9,0.7l-0.3,1.1L193.2,131.8z"/>
<path class="st3" d="M193.3,121.7c-0.2,0-0.4-0.1-0.5-0.3c-0.1-0.2-0.2-0.4-0.1-0.6c0-0.2,0.1-0.4,0.3-0.5
c0.2-0.1,0.4-0.2,0.6-0.1c0.2,0,0.4,0.1,0.5,0.3s0.2,0.4,0.1,0.6c0,0.2-0.1,0.4-0.3,0.5C193.7,121.7,193.5,121.7,193.3,121.7z
M195.4,121.8l0.2-1.1l5.6,0.9l-0.2,1.1L195.4,121.8z"/>
<path class="st3" d="M197.6,116.3c-0.2,0.1-0.3,0.3-0.5,0.4c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0,0.5,0.1,0.7
c0.1,0.2,0.2,0.3,0.4,0.3c0.2,0,0.3,0,0.4-0.1c0.1-0.1,0.2-0.2,0.3-0.4s0.1-0.3,0.2-0.5c0.1-0.2,0.1-0.3,0.1-0.4
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.2-0.4,0.4-0.5c0.1-0.1,0.3-0.2,0.5-0.3c0.2-0.1,0.4-0.1,0.7,0c0.3,0,0.6,0.1,0.8,0.3
c0.2,0.2,0.4,0.4,0.5,0.6s0.2,0.5,0.2,0.8c0,0.3,0,0.6,0,0.8c-0.1,0.5-0.2,0.9-0.4,1.2c-0.2,0.3-0.5,0.6-0.9,0.9l-0.6-0.9
c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.5,0.3-0.8c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3
c-0.1-0.1-0.2-0.1-0.3-0.1c-0.2,0-0.3,0-0.4,0.1c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.1,0.3-0.2,0.4c-0.1,0.2-0.1,0.3-0.1,0.4
c-0.1,0.2-0.2,0.4-0.3,0.6s-0.2,0.4-0.4,0.5s-0.3,0.3-0.5,0.3c-0.2,0.1-0.4,0.1-0.7,0.1c-0.3,0-0.5-0.1-0.7-0.3
c-0.2-0.1-0.4-0.3-0.5-0.6s-0.2-0.5-0.2-0.7s0-0.5,0-0.8c0-0.4,0.2-0.7,0.3-1.1s0.5-0.6,0.8-0.7L197.6,116.3z"/>
<path class="st3" d="M196.4,113.9l0.1-1.1l0.8,0l0,0c-0.3-0.2-0.5-0.5-0.7-0.9c-0.1-0.4-0.2-0.8-0.2-1.1c0-0.4,0.1-0.8,0.3-1.2
c0.2-0.3,0.4-0.6,0.7-0.9c0.3-0.2,0.6-0.4,1-0.5c0.4-0.1,0.8-0.2,1.2-0.1c0.4,0,0.8,0.1,1.2,0.3c0.4,0.2,0.7,0.4,0.9,0.6
s0.5,0.6,0.6,0.9c0.1,0.4,0.2,0.8,0.2,1.2c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.4-0.4,0.6-0.7,0.8l0,0l4.2,0.2l-0.1,1.1L196.4,113.9z
M197.5,111c0,0.3,0,0.6,0.1,0.8c0.1,0.2,0.2,0.4,0.4,0.6c0.2,0.2,0.4,0.3,0.6,0.4c0.2,0.1,0.5,0.2,0.8,0.2c0.3,0,0.6,0,0.8-0.1
c0.2-0.1,0.5-0.2,0.6-0.3c0.2-0.2,0.3-0.3,0.4-0.6c0.1-0.2,0.2-0.5,0.2-0.8c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.4-0.6
c-0.2-0.2-0.4-0.3-0.6-0.4c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.6,0-0.8,0.1c-0.2,0.1-0.5,0.2-0.6,0.3c-0.2,0.2-0.3,0.3-0.4,0.6
C197.5,110.5,197.5,110.7,197.5,111z"/>
</g>
<g class="st2">
<g>
<g>
<path class="st3" d="M58.1,105.2c-0.4-0.5-0.9-0.8-1.4-1.1c-0.6-0.3-1.2-0.4-2-0.4c-0.7,0-1.4,0.1-2.1,0.4s-1.2,0.7-1.6,1.2
c-0.5,0.5-0.8,1.1-1.1,1.8c-0.3,0.7-0.4,1.5-0.4,2.3c0,0.8,0.1,1.6,0.4,2.3c0.3,0.7,0.6,1.3,1.1,1.8c0.5,0.5,1,0.9,1.6,1.2
c0.6,0.3,1.3,0.4,2,0.4c0.8,0,1.5-0.2,2.1-0.5c0.6-0.3,1.1-0.8,1.5-1.4l3.3,2.5c-0.8,1.1-1.7,1.8-2.9,2.3
c-1.2,0.5-2.4,0.8-3.6,0.8c-1.4,0-2.7-0.2-3.9-0.7c-1.2-0.4-2.2-1.1-3.1-1.9c-0.9-0.8-1.5-1.8-2-3c-0.5-1.2-0.7-2.5-0.7-3.9
c0-1.4,0.2-2.7,0.7-3.9c0.5-1.2,1.1-2.2,2-3c0.9-0.8,1.9-1.4,3.1-1.9c1.2-0.4,2.5-0.7,3.9-0.7c0.5,0,1,0,1.6,0.1
c0.5,0.1,1.1,0.2,1.6,0.4s1,0.5,1.5,0.8c0.5,0.3,0.9,0.7,1.3,1.2L58.1,105.2z"/>
</g>
<g>
<path class="st3" d="M63.5,100.6h3.9v17.9h-3.9V100.6z"/>
</g>
<g>
<path class="st3" d="M71,100.6h6.9c0.9,0,1.8,0.1,2.6,0.3c0.8,0.2,1.5,0.5,2.1,0.9c0.6,0.4,1.1,1,1.5,1.7
c0.4,0.7,0.5,1.6,0.5,2.6c0,1.3-0.3,2.3-1,3.2c-0.7,0.9-1.6,1.4-2.9,1.7l4.5,7.6h-4.7l-3.7-7.1h-1.9v7.1H71V100.6z M74.9,108
h2.3c0.4,0,0.7,0,1.1,0c0.4,0,0.8-0.1,1.1-0.2c0.3-0.1,0.6-0.3,0.8-0.6c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.8-0.3-1.1
c-0.2-0.3-0.4-0.5-0.7-0.6s-0.6-0.2-1-0.3c-0.4-0.1-0.7-0.1-1.1-0.1h-2.6V108z"/>
</g>
<g>
<path class="st3" d="M98.9,105.2c-0.4-0.5-0.9-0.8-1.4-1.1c-0.6-0.3-1.2-0.4-2-0.4c-0.7,0-1.4,0.1-2.1,0.4s-1.2,0.7-1.6,1.2
c-0.5,0.5-0.8,1.1-1.1,1.8c-0.3,0.7-0.4,1.5-0.4,2.3c0,0.8,0.1,1.6,0.4,2.3c0.3,0.7,0.6,1.3,1.1,1.8c0.5,0.5,1,0.9,1.6,1.2
c0.6,0.3,1.3,0.4,2,0.4c0.8,0,1.5-0.2,2.1-0.5c0.6-0.3,1.1-0.8,1.5-1.4l3.3,2.5c-0.8,1.1-1.7,1.8-2.9,2.3
c-1.2,0.5-2.4,0.8-3.6,0.8c-1.4,0-2.7-0.2-3.9-0.7c-1.2-0.4-2.2-1.1-3.1-1.9c-0.9-0.8-1.5-1.8-2-3s-0.7-2.5-0.7-3.9
c0-1.4,0.2-2.7,0.7-3.9s1.1-2.2,2-3c0.9-0.8,1.9-1.4,3.1-1.9c1.2-0.4,2.5-0.7,3.9-0.7c0.5,0,1,0,1.6,0.1
c0.5,0.1,1.1,0.2,1.6,0.4c0.5,0.2,1,0.5,1.5,0.8c0.5,0.3,0.9,0.7,1.3,1.2L98.9,105.2z"/>
</g>
<g>
<path class="st3" d="M104.3,100.6h3.9v14.2h7.3v3.6h-11.2V100.6z"/>
</g>
</g>
<g>
<g>
<path class="st3" d="M58.1,123.9h9.6l6.6,18.7h0.1l6.6-18.7h9.5v28.7h-6.3v-22h-0.1l-7.5,22h-4.8l-7.3-22h-0.1v22h-6.3V123.9z"
/>
</g>
<g>
<path class="st3" d="M96.2,123.9h6.3v28.7h-6.3V123.9z"/>
</g>
<g>
<path class="st3" d="M122.3,130.9c-0.5-0.6-1.2-1.1-2.1-1.4c-0.9-0.3-1.7-0.5-2.5-0.5c-0.5,0-0.9,0.1-1.4,0.2
c-0.5,0.1-0.9,0.3-1.4,0.5c-0.4,0.2-0.8,0.5-1.1,0.9c-0.3,0.4-0.4,0.8-0.4,1.4c0,0.9,0.3,1.5,1,2c0.6,0.5,1.5,0.9,2.5,1.2
c1,0.3,2,0.6,3.2,1c1.1,0.3,2.2,0.8,3.2,1.4c1,0.6,1.8,1.4,2.5,2.4c0.6,1,1,2.3,1,4c0,1.6-0.3,3-0.9,4.2c-0.6,1.2-1.4,2.2-2.4,3
c-1,0.8-2.2,1.4-3.5,1.7c-1.3,0.4-2.8,0.6-4.2,0.6c-1.9,0-3.6-0.3-5.2-0.9c-1.6-0.6-3.1-1.5-4.5-2.8l4.5-4.9
c0.6,0.9,1.5,1.5,2.5,2c1,0.5,2,0.7,3.1,0.7c0.5,0,1-0.1,1.6-0.2c0.5-0.1,1-0.3,1.4-0.5s0.8-0.6,1-0.9c0.3-0.4,0.4-0.8,0.4-1.3
c0-0.9-0.3-1.5-1-2c-0.7-0.5-1.5-0.9-2.5-1.3c-1-0.4-2.1-0.7-3.2-1.1c-1.2-0.4-2.2-0.8-3.2-1.4c-1-0.6-1.8-1.4-2.5-2.4
c-0.7-1-1-2.3-1-3.9c0-1.5,0.3-2.9,0.9-4.1c0.6-1.2,1.4-2.1,2.4-2.9s2.2-1.4,3.5-1.8c1.3-0.4,2.7-0.6,4.1-0.6
c1.6,0,3.2,0.2,4.7,0.7c1.5,0.5,2.9,1.2,4.1,2.3L122.3,130.9z"/>
</g>
<g>
<path class="st3" d="M131,123.9h10.7c1.5,0,2.9,0.1,4.2,0.4c1.3,0.3,2.5,0.7,3.5,1.4c1,0.7,1.8,1.6,2.4,2.7
c0.6,1.1,0.9,2.5,0.9,4.2c0,1.7-0.3,3.1-0.8,4.2c-0.5,1.1-1.3,2-2.2,2.7c-0.9,0.7-2.1,1.2-3.4,1.4c-1.3,0.3-2.7,0.4-4.2,0.4
h-4.6v11.2H131V123.9z M137.3,136.1h4.2c0.6,0,1.1-0.1,1.6-0.2c0.5-0.1,1-0.3,1.4-0.5c0.4-0.3,0.8-0.6,1-1.1
c0.3-0.4,0.4-1,0.4-1.7c0-0.7-0.2-1.3-0.5-1.8c-0.3-0.4-0.8-0.8-1.3-1c-0.5-0.2-1.1-0.4-1.8-0.5c-0.6-0.1-1.3-0.1-1.9-0.1h-3.2
V136.1z"/>
</g>
</g>
<g>
<g>
<path d="M60.9,160.3h-2.7v-0.9h6.7v0.9H62v7.3h-1.2V160.3z"/>
</g>
<g>
<path d="M66.9,158.9h1.2v3.7h0c0.2-0.3,0.5-0.6,0.8-0.8c0.3-0.2,0.8-0.3,1.2-0.3c0.9,0,2.3,0.5,2.3,2.5v3.5h-1.2v-3.4
c0-1-0.4-1.8-1.5-1.8c-0.8,0-1.4,0.5-1.6,1.1c-0.1,0.1-0.1,0.3-0.1,0.5v3.6h-1.2V158.9z"/>
</g>
<g>
<path d="M75.3,163.5c0-0.7,0-1.3-0.1-1.8h1l0,1.2h0.1c0.3-0.8,1-1.3,1.8-1.3c0.1,0,0.2,0,0.3,0v1c-0.1,0-0.2,0-0.4,0
c-0.8,0-1.4,0.6-1.6,1.4c0,0.1-0.1,0.3-0.1,0.5v3.1h-1.2V163.5z"/>
</g>
<g>
<path d="M81.3,164.8c0,1.4,1,2,2.2,2c0.8,0,1.4-0.1,1.8-0.3l0.2,0.8c-0.4,0.2-1.1,0.4-2.2,0.4c-2,0-3.2-1.2-3.2-3
c0-1.8,1.2-3.2,3-3.2c2.1,0,2.7,1.7,2.7,2.8c0,0.2,0,0.4,0,0.5H81.3z M84.8,164.1c0-0.7-0.3-1.7-1.6-1.7c-1.2,0-1.7,1-1.8,1.7
H84.8z"/>
</g>
<g>
<path d="M92,167.6l-0.1-0.7h0c-0.4,0.5-1.1,0.9-2,0.9c-1.3,0-2-0.8-2-1.7c0-1.4,1.4-2.2,3.9-2.2v-0.1c0-0.5-0.1-1.4-1.5-1.4
c-0.6,0-1.2,0.2-1.7,0.4l-0.3-0.7c0.5-0.3,1.3-0.5,2.1-0.5c2,0,2.5,1.2,2.5,2.4v2.2c0,0.5,0,1,0.1,1.4H92z M91.8,164.6
c-1.3,0-2.7,0.2-2.7,1.3c0,0.7,0.5,1,1.1,1c0.8,0,1.4-0.5,1.6-1c0-0.1,0.1-0.2,0.1-0.3V164.6z"/>
</g>
<g>
<path d="M97.2,160v1.7h1.7v0.8h-1.7v3.2c0,0.7,0.2,1.1,0.9,1.1c0.3,0,0.5,0,0.7-0.1l0.1,0.8c-0.2,0.1-0.6,0.1-1,0.1
c-0.5,0-1-0.2-1.3-0.5c-0.3-0.3-0.5-0.8-0.5-1.5v-3.2h-1v-0.8h1v-1.4L97.2,160z"/>
</g>
<g>
<path d="M105.1,166.3c0.5,0.3,1.3,0.5,2.1,0.5c1.2,0,1.9-0.6,1.9-1.4c0-0.8-0.5-1.2-1.7-1.6c-1.5-0.5-2.4-1.2-2.4-2.3
c0-1.3,1.2-2.2,2.9-2.2c0.9,0,1.6,0.2,2,0.4l-0.3,0.9c-0.3-0.1-0.9-0.4-1.7-0.4c-1.2,0-1.7,0.7-1.7,1.2c0,0.8,0.5,1.1,1.8,1.6
c1.5,0.5,2.3,1.2,2.3,2.4c0,1.3-1,2.4-3.2,2.4c-0.9,0-1.8-0.2-2.3-0.5L105.1,166.3z"/>
</g>
<g>
<path d="M112.8,158.9h1.2v3.7h0c0.2-0.3,0.5-0.6,0.8-0.8c0.3-0.2,0.8-0.3,1.2-0.3c0.9,0,2.3,0.5,2.3,2.5v3.5h-1.2v-3.4
c0-1-0.4-1.8-1.5-1.8c-0.8,0-1.4,0.5-1.6,1.1c-0.1,0.1-0.1,0.3-0.1,0.5v3.6h-1.2V158.9z"/>
</g>
<g>
<path d="M124.8,167.6l-0.1-0.7h0c-0.4,0.5-1.1,0.9-2,0.9c-1.3,0-2-0.8-2-1.7c0-1.4,1.4-2.2,3.9-2.2v-0.1c0-0.5-0.1-1.4-1.5-1.4
c-0.6,0-1.2,0.2-1.7,0.4l-0.3-0.7c0.5-0.3,1.3-0.5,2.1-0.5c2,0,2.5,1.2,2.5,2.4v2.2c0,0.5,0,1,0.1,1.4H124.8z M124.7,164.6
c-1.3,0-2.7,0.2-2.7,1.3c0,0.7,0.5,1,1.1,1c0.8,0,1.4-0.5,1.6-1c0-0.1,0.1-0.2,0.1-0.3V164.6z"/>
</g>
<g>
<path d="M128.7,163.5c0-0.7,0-1.3-0.1-1.8h1l0,1.2h0.1c0.3-0.8,1-1.3,1.8-1.3c0.1,0,0.2,0,0.3,0v1c-0.1,0-0.2,0-0.4,0
c-0.8,0-1.4,0.6-1.6,1.4c0,0.1-0.1,0.3-0.1,0.5v3.1h-1.2V163.5z"/>
</g>
<g>
<path d="M135.4,160c0,0.4-0.3,0.7-0.8,0.7c-0.4,0-0.7-0.3-0.7-0.7c0-0.4,0.3-0.7,0.7-0.7C135.2,159.4,135.4,159.7,135.4,160z
M134.1,167.6v-5.9h1.2v5.9H134.1z"/>
</g>
<g>
<path d="M138.2,163.3c0-0.6,0-1.1-0.1-1.6h1l0.1,1h0c0.3-0.6,1.1-1.1,2.1-1.1c0.9,0,2.3,0.5,2.3,2.5v3.5h-1.2v-3.4
c0-0.9-0.4-1.7-1.5-1.7c-0.8,0-1.4,0.5-1.6,1.1c-0.1,0.1-0.1,0.3-0.1,0.5v3.5h-1.2V163.3z"/>
</g>
<g>
<path d="M152.3,161.7c0,0.4-0.1,0.9-0.1,1.6v3.4c0,1.4-0.3,2.2-0.9,2.7c-0.6,0.5-1.5,0.7-2.4,0.7c-0.8,0-1.6-0.2-2.2-0.5
l0.3-0.8c0.4,0.2,1.1,0.5,1.9,0.5c1.2,0,2.1-0.6,2.1-2.1v-0.7h0c-0.4,0.5-1.1,1-2.1,1c-1.6,0-2.8-1.2-2.8-2.9
c0-2,1.4-3.1,2.9-3.1c1.1,0,1.7,0.5,2,1h0l0.1-0.9H152.3z M151.1,164c0-0.2,0-0.3-0.1-0.5c-0.2-0.6-0.8-1.1-1.6-1.1
c-1.1,0-1.9,0.9-1.9,2.2c0,1.2,0.6,2.1,1.9,2.1c0.7,0,1.4-0.4,1.6-1.1c0.1-0.2,0.1-0.4,0.1-0.6V164z"/>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M100.2,48.4l18,10.4l-18,10.4V48.4 M108,84.4c-2.6,0.2-5.3,0-7.8-0.6V70.9L108,84.4z M127.5,44.5
c0.3,0.4,0.6,0.9,0.8,1.3c1.1,1.9,1.9,3.8,2.5,5.8L119.6,58L127.5,44.5z M82.7,47.6c1.1-2.4,2.7-4.7,4.5-6.6l11.5,6.6H82.7z"/>
</g>
<g>
<g>
<path class="st4" d="M112.9,90.8c18.9-4,30.2-23.4,24.4-41.8l-36.4,21L112.9,90.8"/>
</g>
</g>
<g>
<path class="st4" d="M122.5,30.6c-13.5-7.8-30.3-4.9-40.4,6.2l36.5,21.1l12-20.7C128.3,34.6,125.6,32.3,122.5,30.6"/>
</g>
<g>
<g>
<path class="st4" d="M89.8,87.2c3,1.7,6.1,2.9,9.3,3.6V48.7H75.1C70.3,63.1,76.2,79.3,89.8,87.2"/>
</g>
</g>
</g>
<g>
<rect x="111.9" y="51.1" transform="matrix(0.8656 -0.5007 0.5007 0.8656 -21.4856 81.8609)" class="st4" width="59.8" height="59.8"/>
</g>
<g>
<circle class="st0" cx="141.8" cy="81" r="25.9"/>
</g>
<g>
<g>
<path class="st3" d="M158.1,73.1h-1v11.5c0,1.8-1,3.4-3.1,3.4h-20.4v0.5c0,1.6,1.8,3.2,3.6,3.2h15.6l6,3.5l-0.9-3.5h0.2
c1.8,0,2.7-1.6,2.7-3.2V75.8C160.8,74.2,160,73.1,158.1,73.1z"/>
</g>
<g>
<path class="st3" d="M150.9,65.1h-23.7c-2.1,0-4.5,1.9-4.5,3.6v14.4c0,1.6,2,2.8,4,3l-1.3,4.8l8.1-4.8h17.3c2.1,0,4-1.3,4-3
V71.5v-2.7C154.9,67,153,65.1,150.9,65.1z M130.8,77.3c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1
C133,76.3,132,77.3,130.8,77.3z M138.8,77.3c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1
C141,76.3,140,77.3,138.8,77.3z M146.8,77.3c-1.2,0-2.1-1-2.1-2.1c0-1.2,1-2.1,2.1-2.1c1.2,0,2.1,1,2.1,2.1
C149,76.3,148,77.3,146.8,77.3z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

2
PyMISP

@ -1 +1 @@
Subproject commit c85531c3066f792c4cf800d98eef0fe79f51237d
Subproject commit 03c2a053f41ea0035edd5af03e93eb9fb291346e

View File

@ -108,7 +108,7 @@ $config = array (
'mail',
),
'ldapDefaultRoleId' => 3, // 3:User, 1:admin. May be good to set "1" for the first user
'ldapDefaultOrg' => 'example.com', // uses 1st local org in MISP if undefined
'ldapDefaultOrg' => '1', // uses 1st local org in MISP if undefined
),
*/
);

View File

@ -60,6 +60,7 @@ class EventShell extends AppShell
}
$this->Job->saveField('progress', 100);
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
$file->append('<xml_version>' . $this->Event->mispVersion . '</xml_version>');
$file->append('</response>' . PHP_EOL);
$file->close();
@ -110,6 +111,7 @@ class EventShell extends AppShell
$file->close();
$this->Job->saveField('progress', '100');
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
}
public function cacherpz() {
@ -148,6 +150,7 @@ class EventShell extends AppShell
$file->close();
$this->Job->saveField('progress', '100');
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
}
public function cachecsv() {
@ -184,6 +187,7 @@ class EventShell extends AppShell
$file->close();
$this->Job->saveField('progress', '100');
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
}
public function cachetext() {
@ -210,6 +214,7 @@ class EventShell extends AppShell
}
$this->Job->saveField('progress', 100);
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
}
public function cachenids() {
@ -243,6 +248,7 @@ class EventShell extends AppShell
$file->close();
$this->Job->saveField('progress', '100');
$this->Job->saveField('message', 'Job done.');
$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
}
public function alertemail() {
@ -254,6 +260,7 @@ class EventShell extends AppShell
$result = $this->Event->sendAlertEmail($eventId, $user, $processId);
$job['Job']['progress'] = 100;
$job['Job']['message'] = 'Emails sent.';
//$job['Job']['date_modified'] = date("y-m-d H:i:s");
$this->Job->save($job);
}
@ -268,6 +275,7 @@ class EventShell extends AppShell
$user = $this->User->getAuthUser($userId);
$result = $this->Event->sendContactEmail($id, $message, $all, array('User' => $user), $isSiteAdmin);
$this->Job->saveField('progress', '100');
//$this->Job->saveField('date_modified', date("y-m-d H:i:s"));
if ($result != true) $this->Job->saveField('message', 'Job done.');
}
@ -282,6 +290,7 @@ class EventShell extends AppShell
$result = $this->Post->sendPostsEmail($userId, $postId, $eventId, $title, $message);
$job['Job']['progress'] = 100;
$job['Job']['message'] = 'Emails sent.';
//$job['Job']['date_modified'] = date("y-m-d H:i:s");
$this->Job->save($job);
}
@ -345,6 +354,7 @@ class EventShell extends AppShell
$this->Event->Behaviors->unload('SysLogLogable.SysLogLogable');
$result = $this->Event->publish($id, $passAlong);
$job['Job']['progress'] = 100;
//$job['Job']['date_modified'] = date("y-m-d H:i:s");
if ($result) {
$job['Job']['message'] = 'Event published.';
} else {

1
app/Console/worker/start.sh Normal file → Executable file
View File

@ -2,6 +2,7 @@
cd "${0%/*}"
../cake CakeResque.CakeResque stop --all
../cake CakeResque.CakeResque start --interval 5 --queue default
../cake CakeResque.CakeResque start --interval 5 --queue prio
../cake CakeResque.CakeResque start --interval 5 --queue cache
../cake CakeResque.CakeResque start --interval 5 --queue email
../cake CakeResque.CakeResque startscheduler -i 5

View File

@ -45,7 +45,7 @@ class AppController extends Controller {
public $helpers = array('Utility');
private $__jsVersion = '2.4.46';
private $__jsVersion = '2.4.48';
// Used for _isAutomation(), a check that returns true if the controller & action combo matches an action that is a non-xml and non-json automation method
// This is used to allow authentication via headers for methods not covered by _isRest() - as that only checks for JSON and XML formats

View File

@ -116,9 +116,13 @@ class AttributesController extends AppController {
//
// multiple attributes in batch import
//
if ((isset($this->request->data['Attribute']['batch_import']) && $this->request->data['Attribute']['batch_import'] == 1)) {
if ((isset($this->request->data['Attribute']['batch_import']) && $this->request->data['Attribute']['batch_import'] == 1) || is_array($this->request->data['Attribute']['value'])) {
// make array from value field
$attributes = explode("\n", $this->request->data['Attribute']['value']);
if (is_array($this->request->data['Attribute']['value'])) {
$attributes = $this->request->data['Attribute']['value'];
} else {
$attributes = explode("\n", $this->request->data['Attribute']['value']);
}
$fails = ""; // will be used to keep a list of the lines that failed or succeeded
$successes = "";
@ -126,6 +130,7 @@ class AttributesController extends AppController {
$successCount = 0;
// TODO loopholes,
// the value null value thing
$validationErrors = array();
foreach ($attributes as $key => $attribute) {
$attribute = trim($attribute);
if (strlen($attribute) == 0)
@ -143,6 +148,7 @@ class AttributesController extends AppController {
} else {
$fails .= " " . ($key + 1);
$failCount++;
$validationErrors[] = array($attribute => $this->Attribute->validationErrors);
}
}
if ($this->request->is('ajax')) {
@ -153,6 +159,23 @@ class AttributesController extends AppController {
} else {
return new CakeResponse(array('body'=> json_encode(array('saved' => true, 'success' => $successCount . ' Attributes added')), 'status' => 200));
}
} else if ($this->_isRest()) {
$name = 'Attribute(s) could not be added.';
$message = 'Could not save any of the POSTed attributes. Check errors field to see what caused the failures.';
if ($successCount) {
$name = 'Attribute(s) added.';
$message = $successCount . ' attribute(s) successfuly added.';
if ($failCount) {
$name = 'Only a subset of the attributes could be added.';
$message = $successCount . ' attribute(s) added, but ' . $failCount . ' of them failed the validation. Check the errors field for more details.';
}
}
$this->set('name', $name);
$this->set('message', $message);
$this->set('errors', $validationErrors);
$this->set('url', '/attributes/add/' . $eventId);
$this->set('_serialize', array('name', 'message', 'url', 'errors'));
return false;
} else {
// we added all the attributes
if ($fails) {

View File

@ -36,7 +36,7 @@ class ACLComponent extends Component {
'checkComposites' => array('perm_admin'),
'delete' => array('perm_add'),
'deleteSelected' => array('perm_add'),
'describeTypes' => array('perm_auth'),
'describeTypes' => array('perm_add'),
'download' => array('*'),
'downloadAttachment' => array('*'),
'downloadSample' => array('*'),

View File

@ -29,122 +29,72 @@ class IOCExportComponent extends Component {
$this->final[] = ' <Indicator operator="OR" id="' . h($event['Event']['uuid']) . '">';
}
public $mapping = array(
'composite' => array(
'regkey|value' => array(array('Network', 'RegistryItem/KeyPath', 'string'), array('Network', 'RegistryItem/Value', 'string')),
'filename|md5' => array(array('FileItem', 'FileItem/FileName', 'string'), array('FileItem', 'FileItem/Md5sum', 'md5')),
'filename|sha1' => array(array('FileItem', 'FileItem/FileName', 'string'), array('FileItem', 'FileItem/Sha1sum', 'sha1')),
'filename|sha256' => array(array('FileItem', 'FileItem/FileName', 'string'), array('FileItem', 'FileItem/Sha256sum', 'sha256')),
'malware-sample' => array(array('FileItem', 'FileItem/FileName', 'string'), array('FileItem', 'FileItem/Md5sum', 'md5')),
'domain|ip' => array(array('Network', 'Network/DNS', 'string'), array('PortItem', 'PortItem/remoteIP', 'IP')),
),
'simple' => array(
'md5' => array('FileItem', 'FileItem/Md5sum', 'md5'),
'sha1' => array('FileItem', 'FileItem/Sha1sum', 'sha1'),
'sha256' => array('FileItem', 'FileItem/Sha256sum', 'sha256'),
'filename' => array('FileItem', 'FileItem/FileName', 'string'),
'ip-src' => array('PortItem', 'PortItem/remoteIP', 'IP'),
'ip-dst' => array('RouteEntryItem', 'RouteEntryItem/Destination', 'IP'),
'hostname' => array('RouteEntryItem', 'RouteEntryItem/Destination', 'string'),
'email-src' => array('Email', 'Email/From', 'string'),
'email-dst' => array('Email', 'Email/To', 'string'),
'email-subject' => array('Email', 'Email/Subject', 'string'),
'email-attachment' => array('Email', 'Email/Attachment/Name', 'string'),
'domain' => array('Network', 'Network/DNS', 'string'),
'url' => array('UrlHistoryItem', 'UrlHistoryItem/URL', 'string'),
'user-agent' => array('Network', 'Network/UserAgent', 'string'),
'regkey' => array('Network', 'RegistryItem/KeyPath', 'string'),
'snort' => array('Snort', 'Snort/Snort', 'string'),
'attachment' => array('FileItem', 'FileItem/FileName', 'string'),
'link' => array('URL', 'UrlHistoryItem/URL', 'md5')
)
);
private function __frameComposite($attribute) {
$types = explode('|', $attribute['type']);
$values = explode('|', $attribute['value']);
$this->final[] = ' <Indicator operator="AND" id="' . h($attribute['uuid']) . '">';
$this->__frameIndicator($this->mapping['composite'][$attribute['type']][0], $attribute['uuid'], $values[0], true);
$this->__frameIndicator($this->mapping['composite'][$attribute['type']][1], $attribute['uuid'], $values[1], true);
$this->final[] = ' </Indicator>';
}
private function __frameIndicator($mapping, $uuid, $value, $extraIndent = false) {
$indent = " ";
$padding = 6;
if ($extraIndent) {
$padding = 8;
}
$this->final[] = str_repeat(' ', $padding) . '<IndicatorItem id="' . h($uuid) . '" condition="is">';
$this->final[] = str_repeat(' ', ($padding + 2)) . '<Context document="' . $mapping[0] . '" search="' . $mapping[1] . '" type="mir" />';
$this->final[] = str_repeat(' ', ($padding + 2)) . '<Content type="' . $mapping[2] . '">' . h($value) . '</Content>';
$this->final[] = str_repeat(' ', $padding) . '</IndicatorItem>';
}
// This method will turn each eligible attribute into an indicator
private function __buildAttribute($attribute) {
// Hop over attributes that don't have the to ids flag turned on and check whether the attribute is sent for IOC export based on category/type
if (!$this->__checkValidTypeForIOC($attribute) || $attribute['to_ids'] == 0) return;
// Composite type regkey|value doesn\t need the leading and closing IndicatorItem, so taken outside of the switch
if ($attribute['type'] == 'regkey|value') {
$this->final[] = ' <Indicator operator="AND" id="' . h($attribute['uuid']) . '">';
$this->final[] = ' <IndicatorItem id="' . h($attribute['uuid']) . '" condition="is">';
$this->final[] = ' <Context document="Network" search="RegistryItem/KeyPath" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value1']) . '</Content>';
$this->final[] = ' </IndicatorItem>';
$this->final[] = ' <IndicatorItem id="' . h($attribute['uuid']) . '" condition="is">';
$this->final[] = ' <Context document="Network" search="RegistryItem/Value" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value2']) . '</Content>';
$this->final[] = ' </IndicatorItem>';
$this->final[] = ' </Indicator>';
if ($attribute['type'] == 'malware-sample') $attribute['type'] = 'filename|md5';
if (strpos($attribute['type'], '|')) {
if ($this->mapping['composite'][$attribute['type']]) {
$this->__frameComposite($attribute);
}
} else {
// for all other types
$this->final[] = ' <IndicatorItem id="' . h($attribute['uuid']) . '" condition="is">';
}
// main switch to convert attributes to the IOC indicator equivalent
switch ($attribute['type']) {
case 'md5':
$this->final[] = ' <Context document="FileItem" search="FileItem/Md5sum" type="mir" />';
$this->final[] = ' <Content type="md5">' . h($attribute['value']) . '</Content>';
break;
case 'sha1':
$this->final[] = ' <Context document="TaskItem" search="TaskItem/sha1sum" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'sha256':
$this->final[] = ' <Context document="TaskItem" search="TaskItem/sha256sum" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'filename':
$this->final[] = ' <Context document="FileItem" search="FileItem/FileName" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'filename|md5':
$this->final[] = ' <Context document="FileItem" search="FileItem/Md5sum" type="mir" />';
$this->final[] = ' <Content type="md5">' . h($attribute['value2']) . '</Content>';
break;
case 'filename|sha1':
$this->final[] = ' <Context document="TaskItem" search="TaskItem/sha1sum" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value2']) . '</Content>';
break;
case 'filename|sha256':
$this->final[] = ' <Context document="TaskItem" search="TaskItem/sha256sum" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value2']) . '</Content>';
break;
case 'ip-src':
$this->final[] = ' <Context document="PortItem" search="PortItem/remoteIP" type="mir" />';
$this->final[] = ' <Content type="IP">' . h($attribute['value']) . '</Content>';
break;
case 'ip-dst':
$this->final[] = ' <Context document="RouteEntryItem" search="RouteEntryItem/Destination" type="mir" />';
$this->final[] = ' <Content type="IP">' . h($attribute['value']) . '</Content>';
break;
case 'hostname':
$this->final[] = ' <Context document="RouteEntryItem" search="RouteEntryItem/Destination" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'email-src':
$this->final[] = ' <Context document="Email" search="Email/From" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'email-dst':
$this->final[] = ' <Context document="Email" search="Email/To" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'email-subject':
$this->final[] = ' <Context document="Email" search="Email/Subject" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'email-attachment':
$this->final[] = ' <Context document="Email" search="Email/Attachment/Name" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'domain':
$this->final[] = ' <Context document="Network" search="Network/DNS" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'url':
$this->final[] = ' <Context document="UrlHistoryItem" search="UrlHistoryItem/URL" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'user-agent':
$this->final[] = ' <Context document="Network" search="Network/UserAgent" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'regkey':
$this->final[] = ' <Context document="Network" search="RegistryItem/KeyPath" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'snort':
$this->final[] = ' <Context document="Snort" search="Snort/Snort" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'attachment':
$this->final[] = ' <Context document="FileItem" search="FileItem/FileName" type="mir" />';
$this->final[] = ' <Content type="string">' . h($attribute['value']) . '</Content>';
break;
case 'malware-sample':
$this->final[] = ' <Context document="FileItem" search="FileItem/Md5sum" type="mir" />';
$this->final[] = ' <Content type="md5">' . h($attribute['value2']) . '</Content>';
break;
case 'link':
$this->final[] = ' <Context document="URL" search="UrlHistoryItem/URL" type="mir" />';
$this->final[] = ' <Content type="md5">' . h($attribute['value2']) . '</Content>';
break;
}
// since regkey|value is enclosed by an AND indicator, it was closed differently in its branch
if ($attribute['type'] != 'regkey|value') {
$this->final[] = ' </IndicatorItem>';
}
if (isset($this->mapping['simple'][$attribute['type']])) {
$this->__frameIndicator($this->mapping['simple'][$attribute['type']], $attribute['value'], false);
}
}
}
// Just closing some tags at the bottom of the .ioc file
@ -158,10 +108,7 @@ class IOCExportComponent extends Component {
private function __checkValidTypeForIOC($attribute) {
// categories that should be included
$Category = array('Payload delivery', 'Artifacts dropped', 'Payload installation', 'Persistence mechanism', 'Network activity');
// types that should be excluded
$skipType = array('AS', 'pattern-in-file', 'pattern-in-traffic', 'pattern-in-memory', 'yara', 'vulnerability', 'comment', 'text', 'other');
if (!in_array($attribute['category'], $Category)) return false;
if (in_array($attribute['type'], $skipType)) return false;
return true;
}
}

View File

@ -171,22 +171,30 @@ class EventsController extends AppController {
}
private function __quickFilter($value) {
if (!is_array($value)) $value = array($value);
$values = array();
foreach ($value as $v) {
$values[] = '%' . strtolower($v) . '%';
}
$result = array();
// get all of the attributes that have a hit on the search term, in either the value or the comment field
// This is not perfect, the search will be case insensitive, but value1 and value2 are searched separately. lower() doesn't seem to work on virtualfields
$attributeHits = $this->Event->Attribute->find('all', array(
'recursive' => -1,
'fields' => array('event_id', 'comment', 'distribution', 'value1', 'value2'),
'conditions' => array(
'OR' => array(
'lower(value1) LIKE' => '%' . strtolower($value) . '%',
'lower(value2) LIKE' => '%' . strtolower($value) . '%',
'lower(comment) LIKE' => '%' . strtolower($value) . '%',
),
'AND' => array(
'deleted' => false
),
),
$subconditions = array();
foreach ($values as $v) {
$subconditions[] = array('lower(value1) LIKE' => $v);
$subconditions[] = array('lower(value2) LIKE' => $v);
$subconditions[] = array('lower(comment) LIKE' => $v);
}
$conditions = array(
'AND' => array(
'OR' => $subconditions,
'deleted' => false
)
);
$attributeHits = $this->Event->Attribute->fetchAttributes($this->Auth->user(), array(
'conditions' => $conditions,
'fields' => array('event_id', 'comment', 'distribution', 'value1', 'value2')
));
// rearrange the data into an array where the keys are the event IDs
$eventsWithAttributeHits = array();
@ -212,8 +220,12 @@ class EventsController extends AppController {
// For anything beyond this point the default pagination restrictions will apply!
// First of all, there are tags that might be interesting for us
$subconditions = array();
foreach ($values as $v) {
$subconditions[] = array('lower(name) LIKE' => $v);
}
$tags = $this->Event->EventTag->Tag->find('all', array(
'conditions' => array('lower(name) LIKE' => '%' . strtolower($value) . '%'),
'conditions' => $subconditions,
'fields' => array('name', 'id'),
'contain' => array('EventTag'),
));
@ -224,15 +236,21 @@ class EventsController extends AppController {
}
// Finally, let's search on the event metadata!
$subconditions = array();
foreach ($values as $v) {
$subconditions[] = array('lower(name) LIKE' => $v);
}
$conditions = array();
$orgs = $this->Event->Org->find('list', array(
'conditions' => array('lower(name) LIKE' => '%' . strtolower($value) . '%'),
'conditions' => $subconditions,
'recursive' => -1,
'fields' => array('id')
));
foreach ($values as $v) {
$conditions['OR'][] = array('lower(info) LIKE' => $v);
$conditions['OR'][] = array('lower(uuid) LIKE' => $v);
}
if (!empty($orgs)) $conditions['OR']['orgc_id'] = array_values($orgs);
$conditions['OR']['lower(info) LIKE'] = '%' . strtolower($value) .'%';
$conditions['OR']['lower(uuid) LIKE'] = strtolower($value);
$otherEvents = $this->Event->find('all', array(
'recursive' => -1,
'fields' => array('id', 'orgc_id', 'info', 'uuid'),
@ -524,9 +542,9 @@ class EventsController extends AppController {
$directions = array('ASC', 'DESC');
if (isset($passedArgs['sort']) && in_array($passedArgs['sort'], $fieldNames)) {
if (isset($passedArgs['direction']) && in_array(strtoupper($passedArgs['direction']), $directions)) {
$rules['order'] = array($passedArgs['sort'] => $passedArgs['direction']);
$rules['order'] = array('Event.' . $passedArgs['sort'] => $passedArgs['direction']);
} else {
$rules['order'] = array($passedArgs['sort'] => 'ASC');
$rules['order'] = array('Event.' . $passedArgs['sort'] => 'ASC');
}
} else {
$rules['order'] = array('Event.id' => 'DESC');
@ -676,8 +694,24 @@ class EventsController extends AppController {
$results = $this->Event->fetchEvent($this->Auth->user(), $conditions);
if (empty($results)) throw new NotFoundException('Invalid event');
$event = &$results[0];
$emptyEvent = (!isset($event['Attribute']) || empty($event['Attribute']));
$this->set('emptyEvent', $emptyEvent);
$params = $this->Event->rearrangeEventForView($event, $this->passedArgs, $all);
$this->params->params['paging'] = array($this->modelClass => $params);
// workaround to get the event dates in to the attribute relations
$relatedDates = array();
if (isset($event['RelatedEvent'])) {
foreach ($event['RelatedEvent'] as &$relation) {
$relatedDates[$relation['Event']['id']] = $relation['Event']['date'];
}
if (isset($event['RelatedAttribute'])) {
foreach ($event['RelatedAttribute'] as &$relatedAttribute) {
foreach ($relatedAttribute as &$relation) {
$relation['date'] = $relatedDates[$relation['id']];
}
}
}
}
$this->set('event', $event);
$dataForView = array(
'Attribute' => array('attrDescriptions', 'typeDefinitions', 'categoryDefinitions', 'distributionDescriptions', 'distributionLevels', 'shortDist'),
@ -708,6 +742,8 @@ class EventsController extends AppController {
}
private function __viewUI($event, $continue, $fromEvent) {
$emptyEvent = (!isset($event['Attribute']) || empty($event['Attribute']));
$this->set('emptyEvent', $emptyEvent);
// set the data for the contributors / history field
$org_ids = $this->Event->ShadowAttribute->getEventContributors($event['Event']['id']);
$contributors = $this->Event->Org->find('list', array('fields' => array('Org.name'), 'conditions' => array('Org.id' => $org_ids)));
@ -987,10 +1023,15 @@ class EventsController extends AppController {
// If the distribution is set to something "traditional", set the SG id to 0.
$this->request->data['Event']['sharing_group_id'] = 0;
}
if ($this->_isRest()) {
if (isset($this->request->data['Event']['orgc_id']) && !$this->userRole['perm_sync']) {
$this->request->data['Event']['orgc_id'] = $this->Auth->user('org_id');
if (isset($this->request->data['Event']['Orgc'])) unset($this->request->data['Event']['Orgc']);
// If we are not sync users / site admins, we only allow events to be created for our own org
// Set the orgc ID as our own orgc ID and unset both the 2.4 and 2.3 style creator orgs
if ($this->_isRest() && !$this->userRole['perm_sync']) {
$this->request->data['Event']['orgc_id'] = $this->Auth->user('org_id');
if (isset($this->request->data['Event']['Orgc'])) {
unset($this->request->data['Event']['Orgc']);
}
if (isset($this->request->data['Event']['orgc'])) {
unset($this->request->data['Event']['orgc']);
}
}
$validationErrors = array();
@ -2044,18 +2085,17 @@ class EventsController extends AppController {
$dist .= Configure::read('MISP.default_attribute_distribution');
}
} else {
// TODO: need a default value for $dist or throw an exception
throw new Exception('Couldn\'t read "MISP.default_attribute_distribution".');
}
// Payload delivery -- malware-sample
$realFileName = '';
$results = $parsedXml->xpath('/analysis');
foreach ($results as $result) {
foreach ($result[0]->attributes() as $key => $val) {
if ((string)$key == 'filename') $realFileName = (string)$val;
}
}
// TODO: what if the xml parsing didn't return any filename? $realFileName would be unset
$realMalware = $realFileName;
$rootDir = APP . "files" . DS . $id . DS;
$malware = $rootDir . DS . 'sample';
$this->Event->Attribute->uploadAttachment($malware, $realFileName, true, $id, null, '', $this->Event->data['Event']['uuid'] . '-sample', $dist, true);
@ -2104,7 +2144,9 @@ class EventsController extends AppController {
if ((string)$key == 'index') $index = (string)$val;
}
}
// TODO: what if the xml parsing didn't return any filename? $index would be unset
if (!isset($index) || !is_numeric($index)) {
throw new Exception('The GFI sandbox xml file seems to be malformed, at least one process with stored_files hasn\'t got a valid numeric index attribute.');
}
$actualFile = $rootDir . DS . 'Analysis' . DS . 'proc_' . $index . DS . 'modified_files' . DS . $actualFileName;
$extraPath = 'Analysis' . DS . 'proc_' . $index . DS . 'modified_files' . DS;
$file = new File($actualFile);
@ -2244,7 +2286,7 @@ class EventsController extends AppController {
if (!$user) {
throw new UnauthorizedException('This authentication key is not authorized to be used for exports. Contact your administrator.');
}
$value = str_replace('|', '/', $value);
if (!is_array($value)) $value = str_replace('|', '/', $value);
// request handler for POSTed queries. If the request is a post, the parameters (apart from the key) will be ignored and replaced by the terms defined in the posted json or xml object.
// The correct format for both is a "request" root element, as shown by the examples below:
// For Json: {"request":{"value": "7.7.7.7&&1.1.1.1","type":"ip-src"}}
@ -2370,6 +2412,8 @@ class EventsController extends AppController {
);
$attributes = $this->Event->Attribute->fetchAttributes($this->Auth->user(), $params);
$eventIds = array();
// Add event ID if specifically specified to allow for the export of an empty event
if (isset($eventid)) $eventIds[] = $eventid;
foreach ($attributes as $attribute) {
if (!in_array($attribute['Attribute']['event_id'], $eventIds)) $eventIds[] = $attribute['Attribute']['event_id'];
}

View File

@ -25,7 +25,7 @@ class JobsController extends AppController {
if (!$this->_isSiteAdmin()) throw new MethodNotAllowedException();
if (!Configure::read('MISP.background_jobs')) throw new NotFoundException('Background jobs are not enabled on this instance.');
$this->recursive = 0;
$queues = array('email', 'default', 'cache');
$queues = array('email', 'default', 'cache', 'prio');
if ($queue && in_array($queue, $queues)) $this->paginate['conditions'] = array('Job.worker' => $queue);
$jobs = $this->paginate();
foreach ($jobs as &$job) {

View File

@ -44,9 +44,8 @@ class LogsController extends AppController {
$this->recursive = 0;
$validFilters = $this->Log->logMeta;
if (!$this->_isSiteAdmin()) {
$orgRestriction = null;
$orgRestriction = $this->Auth->user('org');
$conditions['Log.org LIKE'] = '%' . $orgRestriction . '%';
$orgRestriction = $this->Auth->user('Organisation')['name'];
$conditions['Log.org'] = $orgRestriction;
$this->paginate = array(
'limit' => 60,
'conditions' => $conditions,
@ -136,7 +135,7 @@ class LogsController extends AppController {
if ($this->_isSiteAdmin()) {
$orgRestriction = false;
} else {
$orgRestriction = $this->Auth->user('org');
$orgRestriction = $this->Auth->user('Organisation')['name'];
}
$this->set('orgRestriction', $orgRestriction);
$validFilters = $this->Log->logMeta;
@ -154,7 +153,7 @@ class LogsController extends AppController {
if (!$orgRestriction) {
$filters['org'] = $this->request->data['Log']['org'];
} else {
$filters['org'] = $this->Auth->user('org');
$filters['org'] = $this->Auth->user('Organisation')['name'];
}
$filters['action'] = $this->request->data['Log']['action'];
$filters['model'] = $this->request->data['Log']['model'];

View File

@ -103,6 +103,7 @@ class PostsController extends AppController {
break;
}
if ($this->request->is('post')) {
if (empty($this->request->data['Post']['message'])) throw new MethodNotAllowedException('Cannot post an empty message.');
// Set the default values that we'll alter before actually saving data. These are the default values unless specifically modified.
// By default, all discussions will be visibile to everyone on the platform

View File

@ -754,7 +754,7 @@ class ServersController extends AppController {
public function startWorker($type) {
if (!$this->_isSiteAdmin() || !$this->request->is('post')) throw new MethodNotAllowedException();
$validTypes = array('default', 'email', 'scheduler', 'cache');
$validTypes = array('default', 'email', 'scheduler', 'cache', 'prio');
if (!in_array($type, $validTypes)) throw new MethodNotAllowedException('Invalid worker type.');
$prepend = '';
if (Configure::read('MISP.rh_shell_fix')) $prepend = 'export PATH=$PATH:"/opt/rh/rh-php56/root/usr/bin:/opt/rh/rh-php56/root/usr/sbin"; ';

View File

@ -23,7 +23,7 @@ class ShadowAttributesController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->set('title_for_layout', 'Proposals');
$this->Security->validatePost = true;
// convert uuid to id if present in the url, and overwrite id field

View File

@ -95,7 +95,7 @@ class ThreadsController extends AppController {
$this->Thread->Behaviors->unload('SysLogLogable.SysLogLogable');
$params = array('conditions' => array('event_id' => $id),
'recursive' => -1,
'fields' => array('id', 'event_id', 'distribution', 'title', 'sharing_group_id')
'fields' => array('id', 'event_id', 'distribution', 'title', 'sharing_group_id', 'org_id')
);
$thread = $this->Thread->find('first', $params);
if (!empty($thread)) {

View File

@ -3,16 +3,6 @@ class JSONConverterTool {
public function event2JSON($event, $isSiteAdmin=false) {
$event['Event']['Org'] = $event['Org'];
$event['Event']['Orgc'] = $event['Orgc'];
if (isset($event['SharingGroup']['SharingGroupOrg'])) {
foreach ($event['SharingGroup']['SharingGroupOrg'] as $key => $sgo) {
$event['SharingGroup']['SharingGroupOrg'][$key]['Organisation'] = $event['SharingGroup']['SharingGroupOrg'][$key]['Organisation'];
}
}
if (isset($event['SharingGroup']['SharingGroupServer'])) {
foreach ($event['SharingGroup']['SharingGroupServer'] as $key => $sgs) {
$event['SharingGroup']['SharingGroupServer'][$key]['Server'] = $event['SharingGroup']['SharingGroupServer'][$key]['Server'];
}
}
if (isset($event['SharingGroup'])) $event['Event']['SharingGroup'] = $event['SharingGroup'];
$event['Event']['Attribute'] = $event['Attribute'];
$event['Event']['ShadowAttribute'] = $event['ShadowAttribute'];

View File

@ -135,47 +135,47 @@ class Attribute extends AppModel {
'target-org' => array('desc' => 'Attack Targets Department or Organization(s)'),
'target-location' => array('desc' => 'Attack Targets Physical Location(s)'),
'target-external' => array('desc' => 'External Target Organizations Affected by this Attack'),
'btc' => array('desc' => 'Bitcoin Address'),//
'iban' => array('desc' => 'International Bank Account Number'),//
'btc' => array('desc' => 'Bitcoin Address'),
'iban' => array('desc' => 'International Bank Account Number'),
'bic' => array('desc' => 'Bank Identifier Code Number'),
'bank-account-nr' => array('desc' => 'Bank account number without any routing number'),
'aba-rtn' => array('desc' => 'ABA routing transit number'),
'bin' => array('desc' => 'Bank Identification Number'),//
'cc-number' => array('desc' => 'Credit-Card Number'),//
'prtn' => array('desc' => 'Premium-Rate Telephone Number'),//
'threat-actor' => array('desc' => 'A string identifying the threat actor'),//
'campaign-name' => array('desc' => 'Associated campaign name'),//
'campaign-id' => array('desc' => 'Associated campaign ID'),//
'malware-type' => array('desc' => ''),//
'bin' => array('desc' => 'Bank Identification Number'),
'cc-number' => array('desc' => 'Credit-Card Number'),
'prtn' => array('desc' => 'Premium-Rate Telephone Number'),
'threat-actor' => array('desc' => 'A string identifying the threat actor'),
'campaign-name' => array('desc' => 'Associated campaign name'),
'campaign-id' => array('desc' => 'Associated campaign ID'),
'malware-type' => array('desc' => ''),
'uri' => array('desc' => 'Uniform Resource Identifier'),
'authentihash' => array('desc' => 'Authenticode executable signature hash', 'formdesc' => "You are encouraged to use filename|authentihash instead. Authenticode executable signature hash, only use this if you don't know the correct filename"),//x
'ssdeep' => array('desc' => 'A checksum in ssdeep format', 'formdesc' => "You are encouraged to use filename|ssdeep instead. A checksum in the SSDeep format, only use this if you don't know the correct filename"),////x
'imphash' => array('desc' => 'Import hash - a hash created based on the imports in the sample.', 'formdesc' => "You are encouraged to use filename|imphash instead. A hash created based on the imports in the sample, only use this if you don't know the correct filename"),//x
'pehash' => array('desc' => 'PEhash - a hash calculated based of certain pieces of a PE executable file'),//x
'sha224' => array('desc' => 'A checksum in sha-224 format', 'formdesc' => "You are encouraged to use filename|sha224 instead. A checksum in sha224 format, only use this if you don't know the correct filename"),//x
'sha384' => array('desc' => 'A checksum in sha-384 format', 'formdesc' => "You are encouraged to use filename|sha384 instead. A checksum in sha384 format, only use this if you don't know the correct filename"),//x
'sha512' => array('desc' => 'A checksum in sha-512 format', 'formdesc' => "You are encouraged to use filename|sha512 instead. A checksum in sha512 format, only use this if you don't know the correct filename"),//x
'sha512/224' => array('desc' => 'A checksum in the sha-512/224 format', 'formdesc' => "You are encouraged to use filename|sha512/224 instead. A checksum in sha512/224 format, only use this if you don't know the correct filename"),//x
'sha512/256' => array('desc' => 'A checksum in the sha-512/256 format', 'formdesc' => "You are encouraged to use filename|sha512/256 instead. A checksum in sha512/256 format, only use this if you don't know the correct filename"),//x
'tlsh' => array('desc' => 'A checksum in the Trend Micro Locality Sensitive Hash format', 'formdesc' => "You are encouraged to use filename|tlsh instead. A checksum in the Trend Micro Locality Sensitive Hash format, only use this if you don't know the correct filename"),//x
'authentihash' => array('desc' => 'Authenticode executable signature hash', 'formdesc' => "You are encouraged to use filename|authentihash instead. Authenticode executable signature hash, only use this if you don't know the correct filename"),
'ssdeep' => array('desc' => 'A checksum in ssdeep format', 'formdesc' => "You are encouraged to use filename|ssdeep instead. A checksum in the SSDeep format, only use this if you don't know the correct filename"),
'imphash' => array('desc' => 'Import hash - a hash created based on the imports in the sample.', 'formdesc' => "You are encouraged to use filename|imphash instead. A hash created based on the imports in the sample, only use this if you don't know the correct filename"),
'pehash' => array('desc' => 'PEhash - a hash calculated based of certain pieces of a PE executable file'),
'sha224' => array('desc' => 'A checksum in sha-224 format', 'formdesc' => "You are encouraged to use filename|sha224 instead. A checksum in sha224 format, only use this if you don't know the correct filename"),
'sha384' => array('desc' => 'A checksum in sha-384 format', 'formdesc' => "You are encouraged to use filename|sha384 instead. A checksum in sha384 format, only use this if you don't know the correct filename"),
'sha512' => array('desc' => 'A checksum in sha-512 format', 'formdesc' => "You are encouraged to use filename|sha512 instead. A checksum in sha512 format, only use this if you don't know the correct filename"),
'sha512/224' => array('desc' => 'A checksum in the sha-512/224 format', 'formdesc' => "You are encouraged to use filename|sha512/224 instead. A checksum in sha512/224 format, only use this if you don't know the correct filename"),
'sha512/256' => array('desc' => 'A checksum in the sha-512/256 format', 'formdesc' => "You are encouraged to use filename|sha512/256 instead. A checksum in sha512/256 format, only use this if you don't know the correct filename"),
'tlsh' => array('desc' => 'A checksum in the Trend Micro Locality Sensitive Hash format', 'formdesc' => "You are encouraged to use filename|tlsh instead. A checksum in the Trend Micro Locality Sensitive Hash format, only use this if you don't know the correct filename"),
'filename|authentihash' => array('desc' => 'A checksum in md5 format'),
'filename|ssdeep' => array('desc' => 'A checksum in ssdeep format'),//x
'filename|imphash' => array('desc' => 'Import hash - a hash created based on the imports in the sample.'),//x
'filename|pehash' => array('desc' => 'A filename and a PEhash separated by a |'),//x
'filename|sha224' => array('desc' => 'A filename and a sha-224 hash separated by a |'),//x
'filename|sha384' => array('desc' => 'A filename and a sha-384 hash separated by a |'),//x
'filename|sha512' => array('desc' => 'A filename and a sha-512 hash separated by a |'),//x
'filename|sha512/224' => array('desc' => 'A filename and a sha-512/224 hash separated by a |'),//x
'filename|sha512/256' => array('desc' => 'A filename and a sha-512/256 hash separated by a |'),//x
'filename|tlsh' => array('desc' => 'A filename and a Trend Micro Locality Sensitive Hash separated by a |'),//x
'filename|ssdeep' => array('desc' => 'A checksum in ssdeep format'),
'filename|imphash' => array('desc' => 'Import hash - a hash created based on the imports in the sample.'),
'filename|pehash' => array('desc' => 'A filename and a PEhash separated by a |'),
'filename|sha224' => array('desc' => 'A filename and a sha-224 hash separated by a |'),
'filename|sha384' => array('desc' => 'A filename and a sha-384 hash separated by a |'),
'filename|sha512' => array('desc' => 'A filename and a sha-512 hash separated by a |'),
'filename|sha512/224' => array('desc' => 'A filename and a sha-512/224 hash separated by a |'),
'filename|sha512/256' => array('desc' => 'A filename and a sha-512/256 hash separated by a |'),
'filename|tlsh' => array('desc' => 'A filename and a Trend Micro Locality Sensitive Hash separated by a |'),
'windows-scheduled-task' => array('desc' => 'A scheduled task in windows'),
'windows-service-name' => array('desc' => 'A windows service name. This is the name used internally by windows. Not to be confused with the windows-service-displayname.'),//x
'windows-service-displayname' => array('desc' => 'A windows service\'s displayname, not to be confused with the windows-service-name. This is the name that applications will generally display as the service\'s name in applications.'),//x
'whois-registrant-email' => array('desc' => 'The e-mail of a domain\'s registrant, obtained from the WHOIS information.'),//x
'whois-registrant-phone' => array('desc' => 'The phone number of a domain\'s registrant, obtained from the WHOIS information.'),//x
'whois-registrant-name' => array('desc' => 'The name of a domain\'s registrant, obtained from the WHOIS information.'),//x
'whois-registrar' => array('desc' => 'The registrar of the domain, obtained from the WHOIS information.'),//x
'whois-creation-date' => array('desc' => 'The date of domain\'s creation, obtained from the WHOIS information.'),//x
'windows-service-name' => array('desc' => 'A windows service name. This is the name used internally by windows. Not to be confused with the windows-service-displayname.'),
'windows-service-displayname' => array('desc' => 'A windows service\'s displayname, not to be confused with the windows-service-name. This is the name that applications will generally display as the service\'s name in applications.'),
'whois-registrant-email' => array('desc' => 'The e-mail of a domain\'s registrant, obtained from the WHOIS information.'),
'whois-registrant-phone' => array('desc' => 'The phone number of a domain\'s registrant, obtained from the WHOIS information.'),
'whois-registrant-name' => array('desc' => 'The name of a domain\'s registrant, obtained from the WHOIS information.'),
'whois-registrar' => array('desc' => 'The registrar of the domain, obtained from the WHOIS information.'),
'whois-creation-date' => array('desc' => 'The date of domain\'s creation, obtained from the WHOIS information.'),
'targeted-threat-index' => array('desc' => ''),
'mailslot' => array('desc' => 'MailSlot interprocess communication'),
'pipe' => array('desc' => 'Pipeline (for named pipes use the attribute type "named pipe")'),
@ -497,7 +497,6 @@ class Attribute extends AppModel {
// delete attachments from the disk
$this->read(); // first read the attribute from the db
if ($this->typeIsAttachment($this->data['Attribute']['type'])) {
// FIXME secure this filesystem access/delete by not allowing to change directories or go outside of the directory container.
// only delete the file if it exists
$filepath = APP . "files" . DS . $this->data['Attribute']['event_id'] . DS . $this->data['Attribute']['id'];
$file = new File($filepath);
@ -919,11 +918,18 @@ class Attribute extends AppModel {
case 'tlsh':
case 'email-src':
case 'email-dst':
case 'domain|ip':
case 'target-email':
case 'whois-registrant-email':
$value = strtolower($value);
break;
case 'domain|ip':
$parts = explode('|', $value);
if (filter_var($parts[1], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
// convert IPv6 address to compressed format
$parts[1] = inet_ntop(inet_pton($value));
$value = implode('|', $parts);
}
break;
case 'filename|md5':
case 'filename|sha1':
case 'filename|imphash':
@ -964,6 +970,13 @@ class Attribute extends AppModel {
$value = str_replace(':', '', $value);
$value = strtolower($value);
break;
case 'ip-src':
case 'ip-dst':
if (filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
// convert IPv6 address to compressed format
$value = inet_ntop(inet_pton($value));
}
break;
}
return $value;
}
@ -1120,16 +1133,16 @@ class Attribute extends AppModel {
$rootDir = APP . "files" . DS . $eventId;
$dir = new Folder($rootDir, true);
// move the file to the correct location
$destpath = $rootDir . DS . $this->getId(); // id of the new attribute in the database
$destpath = $rootDir . DS . $this->getID(); // id of the new attribute in the database
$file = new File($destpath);
$zipfile = new File($destpath . '.zip');
$fileInZip = new File($rootDir . DS . $extraPath . $filename); // FIXME do sanitization of the filename
$fileInZip = new File($rootDir . DS . $extraPath . $filename);
// zip and password protect the malware files
if ($malware) {
$execRetval = '';
$execOutput = array();
exec("zip -j -P infected " . $zipfile->path . ' \'' . escapeshellarg($fileInZip->path) . '\'', $execOutput, $execRetval);
exec('zip -j -P infected ' . escapeshellarg($zipfile->path) . ' ' . escapeshellarg($fileInZip->path), $execOutput, $execRetval);
if ($execRetval != 0) { // not EXIT_SUCCESS
throw new Exception('An error has occured while attempting to zip the malware file.');
}
@ -1790,7 +1803,7 @@ class Attribute extends AppModel {
$fileNameFile->write($original_filename);
$fileNameFile->close();
$zipFile = new File($dir->path . DS . $hashes['md5'] . '.zip');
exec('zip -j -P infected "' . escapeshellarg($zipFile->path) . '" "' . escapeshellarg($contentsFile->path) . '" "' . escapeshellarg($fileNameFile->path) . '"', $execOutput, $execRetval);
exec('zip -j -P infected ' . escapeshellarg($zipFile->path) . ' ' . escapeshellarg($contentsFile->path) . ' ' . escapeshellarg($fileNameFile->path), $execOutput, $execRetval);
if ($execRetval != 0) $result = array('success' => false);
else $result = array_merge(array('data' => base64_encode($zipFile->read()), 'success' => true), $hashes);
$fileNameFile->delete();

View File

@ -319,7 +319,6 @@ class Event extends AppModel {
// delete all of the event->tag combinations that involve the deleted event
$this->EventTag->deleteAll(array('event_id' => $this->id));
// FIXME secure this filesystem access/delete by not allowing to change directories or go outside of the directory container.
// only delete the file if it exists
$filepath = APP . "files" . DS . $this->id;
App::uses('Folder', 'Utility');
@ -1788,11 +1787,12 @@ class Event extends AppModel {
$data['Event']['orgc_id'] = $data['Event']['org_id'];
} else {
if (!isset($data['Event']['Orgc'])) {
if ($data['Event']['orgc_id'] != $user['org_id'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
if (isset($data['Event']['orgc_id']) && $data['Event']['orgc_id'] != $user['org_id'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
} else {
if ($data['Event']['Orgc']['uuid'] != $user['Organisation']['uuid'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
if (isset($data['Event'][['orgc']]) && $data['Event']['orgc'] != $user['Organisation']['name'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
}
if ($data['Event']['orgc_id'] != $user['org_id'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
if (isset($data['Event']['orgc_id']) && $data['Event']['orgc_id'] != $user['org_id'] && !$user['Role']['perm_sync'] && !$user['Role']['perm_site_admin']) throw new MethodNotAllowedException('Event cannot be created as you are not a member of the creator organisation.');
}
if (Configure::read('MISP.enableOrgBlacklisting')) {
$this->OrgBlacklist = ClassRegistry::init('OrgBlacklist');
@ -2165,8 +2165,16 @@ class Event extends AppModel {
if (Configure::read('MISP.background_jobs')) {
$job = ClassRegistry::init('Job');
$job->create();
$this->ResqueStatus = new ResqueStatus\ResqueStatus(Resque::redis());
$workers = $this->ResqueStatus->getWorkers();
$workerType = 'default';
foreach ($workers as $worker) {
if ($worker['queue'] === 'prio') {
$workerType = 'prio';
}
}
$data = array(
'worker' => 'default',
'worker' => $workerType,
'job_type' => 'publish_event',
'job_input' => 'Event ID: ' . $id,
'status' => 0,
@ -2178,7 +2186,7 @@ class Event extends AppModel {
$job->save($data);
$jobId = $job->id;
$process_id = CakeResque::enqueue(
'default',
'prio',
'EventShell',
array('publish', $id, $passAlong, $jobId, $user['id'])
);

View File

@ -106,7 +106,6 @@ class Organisation extends AppModel{
if (isset($org['uuid']) && !empty($org['uuid'])) {
$conditions = array('uuid' => $org['uuid']);
$uuid = $org['uuid'];
$conditions2 = array('name' => $org['name']);
} else {
$conditions = array('name' => $org['name']);
}
@ -120,15 +119,9 @@ class Organisation extends AppModel{
'recursive' => -1,
'conditions' => $conditions,
));
if (empty($existingOrg) && isset($conditions2)) {
$existingOrg = $this->find('first', array(
'recursive' => -1,
'conditions' => $conditions2,
));
}
if (empty($existingOrg)) {
$date = date('Y-m-d H:i:s');
$this->create();
$organisation = array(
'name' => $name,
'local' => 0,
@ -136,18 +129,40 @@ class Organisation extends AppModel{
'date_modified' => $date,
'date_created' => $date
);
if (isset($uuid)) $organisation['uuid'] = $uuid;
// If we have the UUID set, then we have only made sure that the org doesn't exist by UUID
// We want to create a new organisation for pushed data, even if the same org name exists
// Alter the name if the name is already taken by a random string
if (isset($uuid)) {
$existingOrgByName = $this->find('first', array(
'recursive' => -1,
'conditions' => array('name' => $name),
));
if ($existingOrgByName) $organisation['name'] = $organisation['name'] . '_' . rand(0, 9999);
$organisation['uuid'] = $uuid;
}
$this->create();
$this->save($organisation);
return $this->id;
} else {
if (isset($org['uuid']) && empty($existingOrg['Organisation']['uuid'])) $existingOrg['Organisation']['uuid'] = $org['uuid'];
$changed = false;
if (isset($org['uuid']) && empty($existingOrg['Organisation']['uuid'])) {
$existingOrg['Organisation']['uuid'] = $org['uuid'];
$changed = true;
}
if ($force) {
$fields = array('type', 'date_created', 'date_modified', 'nationality', 'sector', 'contacts', 'landingpage');
foreach ($fields as $field) {
if (isset($org[$field])) $existingOrg['Organisation'][$field] = $org[$field];
if (isset($org[$field])) {
if ($existingOrg['Organisation'][$field] != $org[$field]) {
$existingOrg['Organisation'][$field] = $org[$field];
if ($field != 'date_modified') {
$changed = true;
}
}
}
}
}
$this->save($existingOrg);
if ($changed) $this->save($existingOrg);
}
return $existingOrg[$this->alias]['id'];
}

View File

@ -21,6 +21,12 @@ class Post extends AppModel {
'Thread',
'User'
);
public $validate = array(
'contents' => array(
'rule' => array('valueNotEmpty'),
),
);
public function sendPostsEmailRouter($user_id, $post_id, $event_id, $title, $message, $JobId = false) {
if (Configure::read('MISP.background_jobs')) {

View File

@ -1463,12 +1463,12 @@ class Server extends AppModel {
if ($response->code == '403') {
return 403;
}
} catch (SocketException $e) {
} catch (SocketException $e) {
// FIXME refactor this with clean try catch over all http functions
return $e->getMessage();
}
// error, so return error message, since that is handled and everything is expecting an array
return "Error: got response code " . $response->code;
return $e->getMessage();
}
// error, so return error message, since that is handled and everything is expecting an array
return "Error: got response code " . $response->code;
}
public function push($id = null, $technique=false, $jobId = false, $HttpSocket, $user) {
@ -2502,6 +2502,7 @@ class Server extends AppModel {
'cache' => array('ok' => true),
'default' => array('ok' => true),
'email' => array('ok' => true),
'prio' => array('ok' => true),
'scheduler' => array('ok' => true)
);
$procAccessible = file_exists('/proc');

View File

@ -262,7 +262,6 @@ class ShadowAttribute extends AppModel {
if (isset($this->data['ShadowAttribute']['deleted']) && $this->data['ShadowAttribute']['deleted']) {
$sa = $this->find('first', array('conditions' => array('ShadowAttribute.id' => $this->data['ShadowAttribute']['id']), 'recursive' => -1, 'fields' => array('ShadowAttribute.id', 'ShadowAttribute.event_id', 'ShadowAttribute.type')));
if ($this->typeIsAttachment($sa['ShadowAttribute']['type'])) {
// FIXME secure this filesystem access/delete by not allowing to change directories or go outside of the directory container.
// only delete the file if it exists
$filepath = APP . "files" . DS . 'shadow' . DS . $sa['ShadowAttribute']['event_id'] . DS . $sa['ShadowAttribute']['id'];
$file = new File($filepath);
@ -290,7 +289,6 @@ class ShadowAttribute extends AppModel {
// delete attachments from the disk
$this->read(); // first read the attribute from the db
if ($this->typeIsAttachment($this->data['ShadowAttribute']['type'])) {
// FIXME secure this filesystem access/delete by not allowing to change directories or go outside of the directory container.
// only delete the file if it exists
$filepath = APP . "files" . DS . 'shadow' . DS . $this->data['ShadowAttribute']['event_id'] . DS . $this->data['ShadowAttribute']['id'];
$file = new File($filepath);
@ -439,16 +437,16 @@ class ShadowAttribute extends AppModel {
$rootDir = APP . "files" . DS . $eventId;
$dir = new Folder($rootDir, true);
// move the file to the correct location
$destpath = $rootDir . DS . $this->getId(); // id of the new attribute in the database
$destpath = $rootDir . DS . $this->getID(); // id of the new attribute in the database
$file = new File($destpath);
$zipfile = new File($destpath . '.zip');
$fileInZip = new File($rootDir . DS . $extraPath . $filename); // FIXME do sanitization of the filename
$fileInZip = new File($rootDir . DS . $extraPath . $filename);
// zip and password protect the malware files
if ($malware) {
$execRetval = '';
$execOutput = array();
exec("zip -j -P infected " . $zipfile->path . ' \'' . escapeshellarg($fileInZip->path) . '\'', $execOutput, $execRetval);
exec('zip -j -P infected ' . escapeshellarg($zipfile->path) . ' ' . escapeshellarg($fileInZip->path), $execOutput, $execRetval);
if ($execRetval != 0) { // not EXIT_SUCCESS
throw new Exception('An error has occured while attempting to zip the malware file.');
}

View File

@ -114,6 +114,7 @@ class Tag extends AppModel {
if (empty($existingTag)) {
if ($user['Role']['perm_tag_editor']) {
$this->create();
if (!isset($tag['colour']) || empty($tag['colour'])) $tag['colour'] = $this->random_color();
$tag = array(
'name' => $tag['name'],
'colour' => $tag['colour'],

View File

@ -264,12 +264,12 @@ class User extends AppModel {
public function beforeValidate($options = array()) {
if (!isset($this->data['User']['id'])) {
if (isset($this->data['User']['enable_password']) && (!$this->data['User']['enable_password'] || (empty($this->data['User']['password']) && empty($this->data['User']['confirm_password'])))) {
if ((isset($this->data['User']['enable_password']) && (!$this->data['User']['enable_password'])) || (empty($this->data['User']['password']) && empty($this->data['User']['confirm_password']))) {
$this->data['User']['password'] = $this->__generatePassword();
$this->data['User']['confirm_password'] = $this->data['User']['password'];
}
}
if (!isset($this->data['User']['authkey']) || empty($this->data['User']['authkey'])) $this->generateAuthKey();
if (!isset($this->data['User']['authkey']) || empty($this->data['User']['authkey'])) $this->data['User']['authkey'] = $this->generateAuthKey();
if (!isset($this->data['User']['nids_sid']) || empty($this->data['User']['nids_sid'])) $this->data['User']['nids_sid'] = mt_rand(1000000, 9999999);
return true;
}

View File

@ -152,7 +152,7 @@ class CertificateAuthenticate extends BaseAuthenticate
}
unset($k, $v);
}
if ($write && !$User->save($U[$cn], true, $write)) {
if ($write && !$User->save($U[$cn], true)) {
CakeLog::write('alert', 'Could not update model at database with RestAPI data.');
}
unset($write);
@ -173,7 +173,7 @@ class CertificateAuthenticate extends BaseAuthenticate
}
unset($d);
if ($User->save(self::$user, true, array_keys(self::$user))) {
if ($User->save(self::$user, true)) {
$id = $User->id;
if($org) {
self::$user['org_id']=$User->Organisation->createOrgFromName($org, $User->id, true);

View File

@ -193,8 +193,6 @@ $(document).ready(function() {
placement: 'right',
container: 'body',
}).popover('show');
// $('#'+e.currentTarget.id).on('mouseleave', $('#'+e.currentTarget.id).popover('destroy');
//$('#'+e.currentTarget.id).on('mouseout', $('#'+e.currentTarget.id).popover('destroy'));
});

View File

@ -114,11 +114,17 @@ foreach ($attributes as $attribute):
<td class="short" ondblclick="document.location ='document.location ='/events/view/<?php echo $attribute['Event']['id'];?>';">
<?php echo $attribute['Attribute']['to_ids'] ? 'Yes' : 'No'; ?>&nbsp;
</td>
<td class="short action-links"><?php
if ($isAdmin || ($isAclModify && $attribute['Event']['user_id'] == $me['id']) || ($isAclModifyOrg && $attribute['Event']['org_id'] == $me['org_id'])) {
?><a href="<?php echo $baseurl;?>/attributes/edit/<?php echo $attribute['Attribute']['id'];?>" class="icon-edit" title="Edit"></a><?php
echo $this->Form->postLink('',array('action' => 'delete', $attribute['Attribute']['id']), array('class' => 'icon-trash', 'title' => 'Delete'), __('Are you sure you want to delete this attribute?'));
}
<td class="short action-links">
<?php
if ($isSiteAdmin || ($isAclModify && $attribute['Event']['user_id'] == $me['id']) || ($isAclModifyOrg && $attribute['Event']['org_id'] == $me['org_id'])):
?>
<a href="<?php echo $baseurl;?>/attributes/edit/<?php echo $attribute['Attribute']['id'];?>" class="icon-edit" title="Edit"></a><?php
echo $this->Form->postLink('',array('action' => 'delete', $attribute['Attribute']['id']), array('class' => 'icon-trash', 'title' => 'Delete'), __('Are you sure you want to delete this attribute?'));
elseif ($isAclModify):
?>
<a href="<?php echo $baseurl;?>/shadow_attributes/edit/<?php echo $attribute['Attribute']['id'];?>" class="icon-share" title="Propose an edit"></a>
<?php
endif;
?>
<a href="<?php echo $baseurl;?>/events/view/<?php echo $attribute['Attribute']['event_id'];?>" class="icon-list-alt" title="View"></a>
</td>

View File

@ -460,7 +460,7 @@
?>
</table>
</div>
<?php if (!isset($event['objects']) || empty($event['objects'])): ?>
<?php if ($emptyEvent): ?>
<div class="background-red bold">
<span>
<?php

View File

@ -80,7 +80,6 @@
'class'=>'btn btn-primary',
'url' => '/attributes/add/' . $event['Event']['id']
));
//echo $this->Form->button('Submit', array('class' => 'btn btn-primary'));
?>
</td>
<td style="width:540px;">
@ -171,8 +170,6 @@
placement: 'right',
container: 'body',
}).popover('show');
// $('#'+e.currentTarget.id).on('mouseleave', $('#'+e.currentTarget.id).popover('destroy');
//$('#'+e.currentTarget.id).on('mouseout', $('#'+e.currentTarget.id).popover('destroy'));
});

View File

@ -153,15 +153,9 @@
));
?>
</fieldset>
<button class="btn btn-primary" onClick="submitMessageForm('<?php echo h($url);?>', 'PostViewForm', 'top'); return false;">Send</button>
<?php
echo $this->Js->submit('Send', array(
'before'=>$this->Js->get('#loading')->effect('fadeIn'),
'success'=>$this->Js->get('#loading')->effect('fadeOut'),
'update'=>'#top',
'class'=>'btn btn-primary',
'url' => $url
));
echo $this->Form->end();
echo $this->Form->end();
?>
</div>
</div>

View File

@ -14,7 +14,7 @@
if (id != -1 && progress < 100 && modified != "N/A") {
queryTask(k, i);
}
}, 1000);
}, 3000);
}
function editMessage(id, text) {
document.getElementById("message" + id).innerHTML = text;

View File

@ -61,7 +61,7 @@
?>
<input type="hidden" id="<?php echo 'Attribute' . $k . 'Save'; ?>" value=1 >
</td>
<td style="shortish">
<td class="shortish">
<?php
foreach ($item['related'] as $relation):
$popover = array(

View File

@ -51,7 +51,7 @@
<p><img src="<?php echo $baseurl;?>/img/doc/settings_3.png" alt = "" title = "The workers tab."/></p><br />
<p>The workers tab shows a list of the workers that MISP can use. You can restart the workers using the restart all workers, If the button doesn't work, make sure that the workers were started using the apache user. This can however only be done using the command line, refer to the INSTALL.txt documentation on how to let the workers automatically start on each boot.</p>
<ul>
<li><b>Worker Type</b>: The worker type is determined by the queue it monitors. MISP currently has 4 queues (cache, default, email and a special _schdlr_ queue).</li>
<li><b>Worker Type</b>: The worker type is determined by the queue it monitors. MISP currently has 5 queues (cache, default, prio, email and a special _schdlr_ queue).</li>
<li><b>Worker Id</b>: The ID is made up of the machine name, the PID of the worker and the queue it monitors.</li>
<li><b>Status</b>: Displays OK if the worker is running. If the _schdlr_ worker is the only one not running make sure that you copy the config file into the cakeresque directory as described in the INSTALL.txt documentation.</li>
</ul>

View File

@ -11,7 +11,12 @@
<tr style="border-bottom:1px solid black;" class="templateChoiceButton">
<td style="padding-left:10px; text-align:left;width:20%;" title="<?php echo h($key['fingerprint']); ?>" onClick="pgpChoiceSelect('<?php echo h($key['uri']); ?>')"><?php echo h($key['key_id']); ?></td>
<td style="text-align:left;width:20%;" title="<?php echo h($key['fingerprint']); ?>" onClick="pgpChoiceSelect('<?php echo h($key['uri']); ?>')"><?php echo h($key['date']); ?></td>
<td style="padding-right:10px; text-align:left;width:60%;" title="<?php echo h($key['fingerprint']); ?>" onClick="pgpChoiceSelect('<?php echo h($key['uri']); ?>')"><?php echo nl2br(h($key['address'])); ?></td>
<td style="padding-right:10px; text-align:left;width:60%;" title="<?php echo h($key['fingerprint']); ?>" onClick="pgpChoiceSelect('<?php echo h($key['uri']); ?>')">
<span class="bold">
<?php echo h($key['fingerprint']); ?>
</span><br />
<?php echo nl2br(h($key['address'])); ?>
</td>
</tr>
<?php endforeach; ?>
</table>

View File

@ -7,7 +7,7 @@
<td style="text-align:right;width:250px;padding-right:50px">
<?php if (Configure::read('MISP.welcome_logo')) echo $this->Html->image('custom/' . h(Configure::read('MISP.welcome_logo')), array('alt' => 'Logo', 'onerror' => "this.style.display='none';")); ?>
</td>
<td style="width:600px">
<td style="width:450px">
<span style="font-size:18px;">
<?php
if (Configure::read('MISP.welcome_text_top')) {
@ -15,37 +15,35 @@
}
?>
</span><br /><br />
<div style="width:100%;">
<?php if (Configure::read('MISP.main_logo') && file_exists(APP . '/webroot/img/custom/' . Configure::read('MISP.main_logo'))): ?>
<img src="<?php echo $baseurl?>/img/custom/<?php echo h(Configure::read('MISP.main_logo'));?>" />
<img src="<?php echo $baseurl?>/img/custom/<?php echo h(Configure::read('MISP.main_logo'));?>" style=" display:block; margin-left: auto; margin-right: auto;" />
<?php else: ?>
<div class="nav" style="font-weight:bold; font-size:30px;text-align:center;">
<span class="logoBlueStatic">M</span><span style="color: #000000;">alware</span>
<span class="logoBlueStatic">I</span><span style="color: #000000;">nformation </span>
<span class="logoBlueStatic">S</span><span style="color: #000000;">haring</span>
<span class="logoBlueStatic">P</span><span style="color: #000000;">latform</span>
</div>
<img src="/img/misp-logo.png" style="display:block; margin-left: auto; margin-right: auto;"/>
<?php endif;?>
<?php
if (true == Configure::read('MISP.welcome_text_bottom')) {
?>
<div style="text-align:right;font-size:18px;">
<?php
echo h(Configure::read('MISP.welcome_text_bottom'));
?>
</div>
<div>
<?php
}
if (true == Configure::read('MISP.welcome_text_bottom')):
?>
<div style="text-align:right;font-size:18px;">
<?php
echo h(Configure::read('MISP.welcome_text_bottom'));
?>
</div>
<?php
endif;
echo $this->Form->create('User');
echo $this->Form->inputs(array(
'legend' => __('Login', true),
'email' => array('autocomplete' => 'off'),
'password' => array('autocomplete' => 'off')
));
?>
<legend style="width:450px;">Login</legend>
<?php
echo $this->Form->input('email', array('autocomplete' => 'off'));
echo $this->Form->input('password', array('autocomplete' => 'off'));
?>
<div class="clear"></div>
<?php
echo $this->Form->button('Login', array('class' => 'btn btn-primary'));
echo $this->Form->end();
?>
</div>
</td>
<td style="width:250px;padding-left:50px">
<?php if (Configure::read('MISP.welcome_logo2')) echo $this->Html->image('custom/' . h(Configure::read('MISP.welcome_logo2')), array('alt' => 'Logo2', 'onerror' => "this.style.display='none';")); ?>
@ -53,4 +51,3 @@
</tr>
</table>
</div>
</div>

@ -1 +1 @@
Subproject commit 960567c9b6a4349de28e8dc636d8d8ab2ac38ea6
Subproject commit f0dcc0a55d8f76cbbab163797dd9274325a0d2c2

@ -1 +1 @@
Subproject commit 3fa228200ad1caabdfb1692620241d788563c8e6
Subproject commit 98c8d29a453ab4f4f6a634ee6f7e71409d457f59

View File

@ -1583,5 +1583,10 @@ a.discrete {
to {-o-transform: rotate(359deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(359deg);}
from {
transform: rotate(0deg);
}
to {
transform: rotate(359deg);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -164,6 +164,33 @@ function submitPasswordReset(id) {
});
}
function submitMessageForm(url, form, target) {
if (!$('#PostMessage').val()) {
showMessage("fail", "Cannot submit empty message.");
} else {
submitGenericForm(url, form, target);
}
}
function submitGenericForm(url, form, target) {
$.ajax({
beforeSend: function (XMLHttpRequest) {
$(".loading").show();
},
data: $('#' + form).serialize(),
success:function (data, textStatus) {
$('#top').html(data);
showMessage("success", "Message added.");
},
complete:function() {
$(".loading").hide();
},
type:"post",
cache: false,
url:url,
});
}
function acceptObject(type, id, event) {
name = '#ShadowAttribute_' + id + '_accept';
var formData = $(name).serialize();