Видеонаблюдение в гараже: особенности организации системы наблюдения

SSL Konfiguration

Self-Signed Zertifikat erstellen

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/zoneminder-selfsigned.key -out /etc/ssl/certs/zoneminder-selfsigned.crt
Country Name (2 letter code) :DE
State or Province Name (full name) :Hessen
Locality Name (eg, city) []:Frankfurt
Organization Name (eg, company) :
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:zoneminder.home.lan
Email Address []: 
sudo chown root:ssl-cert /etc/ssl/private/zoneminder-selfsigned.key
sudo chmod 640 /etc/ssl/private/zoneminder-selfsigned.key

Virtual Host (Port 443) erstellen

sudo a2dissite default-ssl
sudo mv /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf_orig
sudo vi /etc/apache2/sites-available/zoneminder-ssl.conf
sudo a2ensite zoneminder-ssl
sudo systemctl restart apache2

Как выбрать камеру?

Мы будем рассматривать только внешние видеокамеры, потому что скрытое видеонаблюдение запрещено. Поэтому смысла рассматривать хитроумные замаскированные мини-камеры никакого нет — можно легко попасть под уголовный кодекс РФ. Единственное, что можно использовать в таком случае — это видеоглазок.

Как выбрать камеру для установки? Форм-фактор и угол обзора здесь особой роли играть не будет — вам потребуется (и разрешается — об этом ниже) мониторить лишь маленький участок перед входной дверью, поэтому будем отталкиваться лишь от разрешения. Переходим в каталог https://ultrasb.ru/oborudovanie_dlya_videonablyudeniya и начинаем выбирать. Какие критерии нас интересуют при выборе камеры на входную дверь:

  1. Нам нужна IP камера с PoE (Power over Ethernet) питанием
  2. Возможность записывать в HD/FulHD-качестве (720р/1080р)
  3. Наличие датчика движения (запись только при возникновении движения в кадре)
  4. Наличие встроенного микрофона или возможность подключить внешний
  5. Подсветка для работы в ночное время суток.
  6. Функция приватных зон. Позволяет задать области видеонаблюдения, видеозапись которых не должна осуществляться, путем закрашивания этой запретной зоны

Можно ли ставить уличную камеру?

Да, такие камеры вполне подойдут. В качестве примера можно рассмотрим IP-видеокамеру FX-IPC-C20VP-IR LS. Она предназначена для установки вне помещений, но нам она подойдет как раз поэтому — корпус «уличных» камер и FX-IPC-C20VP-IR LS, в том числе, выполнен в высокопрочном металлическом гермокожухе. Это будет дополнительной защитой от вандалов

Кроме того, камера имеет хороший угол обзора (от 97 до 33 градусов по горизонту). Опять же, зачем нам угол обзора в подъезде? Это может потребоваться, если жильцы начнут жаловаться на то, что камера направлена «не туда» (об этом подробнее поговорим дальше). Чтобы обезопасить себя от кляуз со стороны соседей в камере есть еще одна нужная функция — «Приватная зона», настройка которой позволит  не снимать участок, который не относится к вашей собственности.

Настройка ZoneMinder

В открывшемся окне устанавливаем флажок напротив OPT_USE_AUTH и сохраняем конфигурацию с помощью кнопки Save в правом нижнем углу страницы. Если обновить страницу с помощью клавиши F5, будет выполнен сразу же переход к форме авторизации. По умолчанию установлено: логин: admin, пароль: admin. Сменить это можно выбрав в левой панели ссылку Users.

Большинство реальных камер будут подключаться по сети. Для пробы используем старый смартфон с установленной программой IP Webcam.

Для подключения камеры к ZoneMinder Ubuntu нажмём в главном меню кнопку ADD, откроется окно с интерфейсом добавления камеры.

На закладке General заполним поля Source Type = Remote и Function = Monitor (режим просмотра). Затем переходим на вкладку Source и устанавливаем значения параметров так, как показано на скриншоте:

  • Protocol = HTTP (если на смартфоне выбран этот протокол);
  • Method = Simple;
  • Host Name = 192.168.0.184 (это адрес смартфона с камерой);
  • Port = 8080 (как в настройках смартфона);
  • Path = /video;
  • Capture Resolution (pixels) = 320×240 (должно соответствовать потоку с камеры).

Для сохранения настроек нажимаем кнопку SAVE. Программа возвращает нас к списку камер. Если поток подсоединился, название камеры и адрес будут зелёного цвета, если нет — красного. Ошибки подключения можно посмотреть в меню Log.

Начать просмотр изображения с камеры можно кликнув мышкой по названию камеры. Откроется окно просмотра.

В окне доступно масштабирование, запуск трансляции, тестирование событий. На этом базовая  настройка ZoneMinder закончена.

ВИДЕОНАБЛЮДЕНИЕ ЧЕРЕЗ ИНТЕРНЕТ

Ссылка на похожий материал.

Этот способ более реален. Поскольку проводной интернет для гаража это нечто из области фантастики будем рассчитывать на 3G, 4G или LTE технологии. Принцип построения системы видеонаблюдения при этом один – скорости разные.

Вернемся к началу статьи, где упоминался аналоговый регистратор. Удаленно просматривать видео можно и через него (если это современная модель). Для этого из дополнительного оборудования требуется:

  • роутер, с возможностью подключения USB модема;
  • сам USB модем с СИМ картой того оператора и интернет соединения. которое поддерживается в месте установки.

Если получится получить статический IP адрес, то вы сможете напрямую связываться с регистратором. В остальных случаях можно воспользоваться:

  • сервером динамических имен (постепенно теряет свою популярность);
  • облачным сервисом видеонаблюдения;
  • Р2Р технологиями.

Обратите внимание – ваш видеорегистратор должен поддерживать перечисленные технологии.

Указанные способы доступа можно использовать и для другого оборудования и устройств:

Отдельно взятая камера видеонаблюдения.

Здесь есть два варианта. Если видеокамера «заточена» под работу с Р2Р или «облаком», то достаточно вставить в нее СИМ карту с соответствующим ситуации и оператору тарифом. Дальнейшая настройка производится в соответствии с инструкциями выбранного поставщика облачных или р2р услуг.

В противном случае потребуются дополнительный модем и (или) роутер.

Специализированный регистратор.

Если для гаража требуется установка нескольких камер, то организовывать для каждой из них отдельный канал связи нецелесообразно. В этом случае можно использовать видеорегистратор, как было описано ранее.

Но можно значительно облегчить себе жизнь, используя регистратор заранее предназначенный для работы с тем или иным сервисом (по аналогии с камерами).

Это основные способы, на которые стоит обратить внимание.

Zoneminder Database

Enable and convert MySQL to innodb_file_per_table for Zoneminder

Note: You may wish to convert MyISAM tables to InnoDB tables before you proceed. Upgrading Zoneminder to 1.26 or newer should do this for you.

innodb_file_per_table is by default ON Mysql 5.6.6 and onwards. There is plenty of stuff on Google about pros & cons of innodb_file_per_table.
This post details how to enable innodb_file_per_table on an existing database. Because innodb_file_per_table affects new tables only, created after innodb_file_per_table is enabled, we need to recreate old databases to force innodb_file_per_table on old tables and reclaim some disk space.

Become root

sudo su

Backup First
Create a dir to take backups:

cd ~

Note: I found it helpful to create a file which contained the MySQL user and password. Otherwise you will have to enter the user and password for every operation.

nano .my.cnf

Enter this content

user=root
password=mysqlpass

Ctrl+o Enter to save

CTRL+x to exit

Make backup directory

mkdir backup
cd backup

Copy MySQL data files (raw)
(If all goes well, we will not need this)

Stop Zoneminder

service zoneminder stop

If you have other services that use MySQL you will want to stop them and possibly Apache.

service mysql stop && cp -ra /var/lib/mysql mysqldata && service mysql start

Take mysqldump
As soon as above line completes, take a mysqldump of all databases

mysqldump --routines --events --flush-privileges --all-databases > all-db.sql

Drop Databases
Create a sql file to drop all databases EXCEPT mysql database

mysql -e "SELECT DISTINCT CONCAT ('DROP DATABASE ',TABLE_SCHEMA,' ;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA <> 'mysql' AND TABLE_SCHEMA <> 'information_schema';" | tail -n+2 > drop.sql

Verify if drop.sql has correct database names and then execute drop.sql queries.

mysql < drop.sql

Verify all InnoDB tables gone

SELECT table_name, table_schema, engine FROM information_schema.tables WHERE engine = 'InnoDB';

Remove InnoDB files
Stop mysql server first

service mysql stop

Then

rm /var/lib/mysql/ibdata1 && rm /var/lib/mysql/ib_logfile0 && rm /var/lib/mysql/ib_logfile1

At this point most likely you will have only /var/lib/mysql/mysql directory only.

Enable innodb_file_per_table

Open my.cnf file

nano /etc/mysql/my.cnf

Add following line after

innodb_file_per_table

Ctrl+o Enter to save

CTRL+x to exit

Time to import from mysqldump
Start mysql server now

service mysql start

Run mysql import

mysql < all-db.sql

Force mysql_upgrade (to generate performance_schema)

mysql_upgrade --force

That’s All!

Restart Zoneminder (and any other services you have stopped)

service zoneminder start

Check for proper operation and that all your events are present.

When you are satisfied that all is worling well remove the backup directory and password filr=e

cd ~
rm -r backup
rm .my.cnf

You are finished!

Adding Permissions to allow Database Upgrade

Versions of Zoneminder up to and including 1.28.1 in Ubuntu would automatically add the zm database to MySQL. Beginning about August
2015 the development version from the iconnor-master PPA omitted this step becoming like the Debian install process. Manually adding the
database to MySQL will be necessary.

To install the zm database (after doing apt-get install zoneminder)

Create Zoneminder database in MySQL (Note: this also creates the default Zoneminder user and permissions in MySQL)

This next step creates a file which contained the MySQL user and password. Otherwise you will have to enter the user and password on the
command line which is not secure!

Go to the root directory

cd ~

Create a hidden password file

nano .my.cnf

Enter this content (but use your MySQL root password!)

user=root
password=(mysqlpass)

Ctrl+o Enter to save

CTRL+x to exit

Create database permissions

mysql -e "grant select,insert,update,delete,create,alter,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"

Remove password file

rm .my.cnf

Continue with the Zoneminder installation

Easy Way: Ubuntu 14.x¶

These instructions are for a brand new ubuntu 14.x system which does not have ZM installed.

Step 1: Either run commands in this install using sudo or use the below to become root

sudo -i

Step 2: Install ZoneMinder

add-apt-repository ppaiconnorzoneminder
apt-get update
apt-get install zoneminder

(just press OK for the prompts you get)

Step 3: Set up DB

mysql -uroot -p < usrsharezoneminderdbzm_create.sql
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"

Step 4: Set up Apache

a2enconf zoneminder
a2enmod rewrite
a2enmod cgi

Step 5: Make zm.conf readable by web user.

sudo chown www-datawww-data etczmzm.conf

Step 6: Edit Timezone in PHP

nano etcphp5apache2php.ini

Search for (Ctrl + w then type Date and press Enter) and change
date.timezone for your time zone, see (http://php.net/manual/en/timezones.php).
Don’t forget to remove the ; from in front of date.timezone

Date
; Defines the default timezone used by the date functions
; http//php.netdate.timezone
date.timezone = AmericaNew_York

CTRL+o then to save

CTRL+x to exit

Step 7: Restart Apache service and start ZoneMinder

service apache2 reload
service zoneminder start

Step 8: Making sure ZoneMinder works

  1. Open up a browser and go to — should bring up ZoneMinder Console

  2. (Optional API Check)Open up a tab in the same browser and go to

Hints¶

  1. Enable OPT_AUTH in ZoneMinder
  2. Log out of ZoneMinder in browser
  3. Open a new tab in the same browser (important) and go to
    — should give you “Unauthorized”
    along with a lot more of text
  4. Go to another tab in the SAME BROWSER (important) and log into ZM
  5. Repeat step 3 and it should give you the ZM and API version

After you have setup your camera make sure you can view Monitor streams, if not
check some of the common causes:

  • Check Apache cgi module is enabled.

  • Check Apache /etc/apache2/conf-enabled/zoneminder.conf ScriptAlias matches PATH_ZMS.

If you have changed your DB login/password from zmuser/zmpass, you need to
update these values in zm.conf.

  1. Edit zm.conf to change ZM_DB_USER and ZM_DB_PASS to the values you used.

Switching to another theme¶

Todo

Fix theme text after I clearly understand that System->CSS is doing

When you first install ZoneMinder, you see is what is called a “classic” skin. Zoneminder has a host of configuration options that you can customize over time. This guide is meant to get you started the easiest possible way, so we will not go into all the details. However, it is worthwhile to note that Zoneminder also has a ‘flat’ theme that depending on your preferences may look more modern. So let’s use that as an example of introducing you to the Options menu

  • Click on the Options link on the top right of the web interface in the image above
  • This will bring you to the options window as shown below. Click on the “System” tab and then select the
    “flat” option for CSS_DEFAULT as shown below

Now, switch to the “Display” tab and also select “Flat” there like so:

Your screen will now look like this:

Congratulations! You now have a modern looking interface.

Видеонаблюдение на предприятии

Чтобы законно следить за тем, что происходит в офисе и прилегающих к нему территориях (склады, подсобные помещения и пр.), предприниматели тоже должны выполнить ряд условий.

Согласно статье 21 Трудового кодекса РФ, работник имеет право на полную информацию об условиях и охране труда на рабочем месте. Соответственно, работодатель должен уведомить сотрудников об установке камер в виде уведомления и получить их согласие с подписью. Порядок получения согласия субъекта на обработку персональных данных установлен в ч. 4 ст. 9 Федерального закона «О персональных данных».

Право на скрытое видеонаблюдение в офисе имеют только оперативные подразделения госорганов (Федеральный закон от № 144-ФЗ «Об оперативно-розыскной деятельности»). В остальных случаях видеонаблюдение — это прямое нарушение ТК.

Чтобы закрепить новый вид контроля документально, работодатель обязан:

  • внести пункт о видеонаблюдении в Правила внутреннего трудового распорядка;

  • составить «Положение о видеонаблюдении» с планом помещения и местом расположения камер;

  • издать приказ с указанием ответственных, даты начала ведения наблюдения, имен и должностей имеющих доступ к записям;

  • ознакомить сотрудников с новыми документами и собрать их подписи в рамках инструктажа по безопасности.

Особое внимание необходимо уделить оповещению о видеонаблюдении приходящих лиц, например, клиентов или партнеров. Таблички о том, что объект находится под наблюдением, должны находиться в зоне видимости

Конечно, аргументы в духе «а я табличку не видел» редко являются вескими при судебном разбирательстве, но и этому аспекту безопасности стоит посвятить время.

Комментарий юриста:

Streaming Interface¶

Developers working on their application often ask if there is an “API” to receive live streams, or recorded event streams.
It is possible to stream both live and recorded streams. This isn’t strictly an “API” per-se (that is, it is not integrated
into the Cake PHP based API layer discussed here) and also why we’ve used the term “Interface” instead of an “API”.

Live Streams

What you need to know is that if you want to display “live streams”, ZoneMinder sends you streaming JPEG images (MJPEG)
which can easily be rendered in a browser using an tag.

For example:

<img src="https://yourserver/zm/cgi-bin/nph-zms?scale=50&width=640p&height=480px&mode=jpeg&maxfps=5&buffer=1000&&monitor=1&auth=b54a589e09f330498f4ae2203&connkey=36139" />

will display a live feed from monitor id 1, scaled down by 50% in quality and resized to 640x480px.

  • This assumes is your CGI_BIN path. Change it to what is correct in your system
  • The “auth” token you see above is required if you use ZoneMinder authentication. To understand how to get the auth token, please read the “Login, Logout & API security” section below.
  • The “connkey” parameter is essentially a random number which uniquely identifies a stream. If you don’t specify a connkey, ZM will generate its own. It is recommended to generate a connkey because you can then use it to “control” the stream (pause/resume etc.)
  • Instead of dealing with the “auth” token, you can also use where “username” and “password” are your ZoneMinder username and password respectively. Note that this is not recommended because you are transmitting them in a URL and even if you use HTTPS, they may show up in web server logs.

PTZ on live streams

PTZ commands are pretty cryptic in ZoneMinder. This is not meant to be an exhaustive guide, but just something to whet your appetite:

Lets assume you have a monitor, with ID=6. Let’s further assume you want to pan it left.

You’d need to send a:
command to with the following data payload in the command (NOT in the URL)

Obviously, if you are using authentication, you need to be logged in for this to work.

Like I said, at this stage, this is only meant to get you started. Explore the ZoneMinder code and use “Inspect source” as you use PTZ commands in the ZoneMinder source code.
control_functions.php is a great place to start.

Pre-recorded (past event) streams

Similar to live playback, if you have chosen to store events in JPEG mode, you can play it back using:

<img src="https://yourserver/zm/cgi-bin/nph-zms?mode=jpeg&frame=1&replay=none&source=event&event=293820&connkey=77493&auth=b54a58f5f4ae2203" />
  • This assumes is your CGI_BIN path. Change it to what is correct in your system
  • This will playback event 293820, starting from frame 1 as an MJPEG stream
  • Like before, you can add more parameters like etc.
  • auth and connkey have the same meaning as before, and yes, you can replace auth by as before and the same security concerns cited above apply.

If instead, you have chosen to use the MP4 (Video) storage mode for events, you can directly play back the saved video file:

<video src="https://yourserver/zm/index.php?view=view_video&eid=294690&auth=33f3d558af84cf08" type="video/mp4"></video>

This will play back the video recording for event 294690

Соблюдение прав несовершеннолетних

Для соблюдения прав несовершеннолетних учащихся также необходимо оформить введение системы видеонаблюдения надлежащим образом. Если таковое осуществляется с целью обеспечения безопасности, то установка камер не требует согласия родителей и самих учащихся. Однако они должны быть проинформированы о видеонаблюдении, камеры нужно установить открыто, также необходимо обеспечить доступ к локальным актам, которыми оформлено введение видеонаблюдения. Это касается видеонаблюдения в холлах, коридорах, гардеробах школы (в раздевалках, в которых снимают верхнюю одежду), актовых залах, классах. Установка видеокамер в медицинских кабинетах также не противоречит законодательству, если соблюдается приватность (наличие ширм для раздевания и осмотров). Установка видеокамер в туалетах и раздевалках (при спортзалах и бассейнах школ) спорна, поскольку в данном случае вопросы безопасности перекрываются морально-этическим вопросами. 

Hints¶

  1. Enable OPT_AUTH in ZoneMinder
  2. Log out of ZoneMinder in browser
  3. Open a new tab in the same browser (important) and go to
    — should give you “Unauthorized”
    along with a lot more of text
  4. Go to another tab in the SAME BROWSER (important) and log into ZM
  5. Repeat step 3 and it should give you the ZM and API version

After you have setup your camera make sure you can view Monitor streams, if not
check some of the common causes:

  • Check Apache cgi module is enabled.

  • Check Apache /etc/apache2/conf-enabled/zoneminder.conf ScriptAlias matches PATH_ZMS.

If you have changed your DB login/password from zmuser/zmpass, you need to
update these values in zm.conf.

  1. Edit zm.conf to change ZM_DB_USER and ZM_DB_PASS to the values you used.

Видеонаблюдение в местах общего пользования

Установить камеры видеонаблюдения в подъезде или на общей парковке — чуть ли не необходимая мера безопасности для всего дома. Пока это не такое частое явление в России, но в последнее время количество заявок на установку видеонаблюдения в подъезде увеличилось.

С точки зрения закона, в соответствии со статьей 290 ГК РФ, общие помещения и общедомовое оборудование принадлежит всем собственникам как общедолевая собственность, причем неотчуждаемая. Это значит, что подъезды, парковки, электрощитовые и прочие помещения принадлежат коллективу собственников и не могут быть приватизированы. Соответственно, решения относительно установки видеонаблюдения принимаются сообща путем голосования. Инициатор должен уведомить об этом управляющую компанию и жильцов дома. Обычно по таким вопросам проводится собрание ТСЖ, на котором путем голосования выносится решение, ставить видеонаблюдение или нет. Только при соблюдении этих правил может быть установлена общедомовая система видеонаблюдения.

Житель Омска Александр Афонин был недоволен ситуацией в своем подъезде, подозревал соседей в хулиганстве и порче общедомового имущества. Для того, чтобы выявить виновников и предотвратить повторение таких случаев, он установил видеокамеры на своем этаже и возле почтовых ящиков. Реакция соседей была неоднозначной. Большинство, естественно, возмутились, что видеонаблюдение было установлено без их ведома, но были и те, кто замечали, что в подъезде стало спокойнее и чище. Однако, из-за того, что установка видеонаблюдения была произведена без ведома жильцов, суд обязал омича немедленно снять камеру.

А что, если видеонаблюдение нужно только у входной двери, чтобы знать, кто приближается непосредственно к квартире? Установить видеонаблюдение над своей дверью или поставить видеодомофон можно беспрепятственно и никого не уведомляя. Статья 152.1 ГК РФ допускает использование изображения человека, которое было получено в местах общего пользования. Соответственно, направляя камеру на лестничную клетку, вы не нарушаете конституционное право соседей на неприкосновенность частной жизни.

Hardening Webserver

Hide Apache Version and Operating System

sudo vi /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
ServerSignature Off
sudo systemctl restart apache2

Disable Directory Listing and FollowSymLinks

sudo vi /etc/apache2/apache2.conf
<Directory /var/www/>
        Options -Indexes -FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
sudo systemctl restart apache2

Secure Apache using mod_security and mod_evasive Modules

Mod_security

Acts as a firewall for web servers and applications, providing protection against brute force attacks. Install it and then restart Apache.

sudo apt-get install libapache2-mod-security2 -y
sudo systemctl restart apache2

Disable TRACE HTTP Requestit Request Size

By default, Trace HTTP Request is enabled allowing for Cross Site Tracing. This enables a hacker to easily steal cookie information. Disabling Trace HTTP Request makes the mod_proxy and core server return “405 — Method Not Allowed” error message to clients.

sudo vi /etc/apache2/conf-enabled/security.conf
TraceEnable Off
sudo systemctl restart apache2

КАМЕРЫ ВИДЕОНАБЛЮДЕНИЯ ДЛЯ ГАРАЖА

В первую очередь принимается решение о типе видеокамер:

  • аналоговые;
  • IP (цифровые или сетевые).

При этом, интересовать должны не технические характеристики, а функциональные возможности. Дело в том, что с точки зрения, например, разрешающей способности для большинства задач разницы между «аналогом» и IP нет. Современные технологии типа AHD обеспечивают разрешение достаточное для идентификации человека.

Другое дело в опциональности. Например, определенные модели цифровых камер способны без промежуточных устройств работать с облачными сервисами или обеспечивать удаленный просмотр изображения непосредственно со смартфона (Р2Р видеонаблюдение). Для гаража это удобно.

С другой стороны, если вы организуете автономную систему, то лучше, если она будет аналоговой. Такой вариант дешевле, проще в монтаже и настройке, надежней в эксплуатации.

Вне зависимости от места установки – внутри или снаружи – видеокамеры должны иметь уличное исполнение (способность работы при отрицательных температурах и степень защиты корпуса на уровне IP65-66. Дело в том, что условия внутри гаража, зачастую мало отличаются от уличных, поэтому лучше подстраховаться.

Немаловажный момент – наличие инфракрасной (ИК) подсветки. Она нужна, причем, если спектр свечения светодиодов будет захватывать видимую человеческим глазом область (такое не редкость), то это окажется демаскирующим фактором. Для скрытого видеонаблюдения вопрос принципиальный.

Если все делать как следует, то лучший вариант – установка внутри гаража ИК прожектора и телекамеры без подсветки. Дело в том, что встроенная подсветка бюджетных видеокамер часто оставляет желать лучшего.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: