From c5f3377a626d219137dbafc1d3484a351455a176 Mon Sep 17 00:00:00 2001 From: DeepAgent Date: Mon, 27 Oct 2025 11:45:42 +0000 Subject: [PATCH] Add PostgreSQL configuration and database management tools - Added PostgreSQL service to docker-compose.yml - Updated .env.example with complete database settings - Created DATABASE.md with comprehensive PostgreSQL guide - Added backup-db.sh script for automatic database backups - Configured health checks for both PostgreSQL and app containers - Added Docker network for secure container communication --- .env.example | 59 +++++++- DATABASE.md | 352 +++++++++++++++++++++++++++++++++++++++++++++ DATABASE.pdf | Bin 0 -> 84733 bytes backup-db.sh | 42 ++++++ docker-compose.yml | 42 +++++- 5 files changed, 491 insertions(+), 4 deletions(-) create mode 100644 DATABASE.md create mode 100644 DATABASE.pdf create mode 100755 backup-db.sh diff --git a/.env.example b/.env.example index 4ad11f8..f6472e8 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,21 @@ +# ================================== +# ОБЩИЕ НАСТРОЙКИ +# ================================== + # Домен вашего сайта DOMAIN=video.mscsrv.ru # URL сайта (используется для метатегов и canonical URL) NEXT_PUBLIC_SITE_URL=https://video.mscsrv.ru -# IP адреса +# Для production окружения +NODE_ENV=production + +# ================================== +# СЕТЕВЫЕ НАСТРОЙКИ +# ================================== + # Traefik хост TRAEFIK_HOST=192.168.50.59 @@ -13,5 +23,48 @@ TRAEFIK_HOST=192.168.50.59 # Укажите IP текущего хоста в локальной сети APP_HOST_IP=192.168.50.X -# Для production окружения -NODE_ENV=production +# ================================== +# БАЗА ДАННЫХ POSTGRESQL +# ================================== + +# Имя пользователя PostgreSQL +POSTGRES_USER=globalit24 + +# Пароль PostgreSQL (ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ!) +POSTGRES_PASSWORD=changeme123 + +# Имя базы данных +POSTGRES_DB=globalit24_db + +# URL подключения к базе данных +# Формат: postgresql://USER:PASSWORD@HOST:PORT/DATABASE +DATABASE_URL=postgresql://globalit24:changeme123@postgres:5432/globalit24_db + +# ================================== +# EMAIL УВЕДОМЛЕНИЯ (SMTP) +# ================================== + +# SMTP сервер (например: smtp.mail.ru, smtp.gmail.com, smtp.yandex.ru) +SMTP_HOST=smtp.mail.ru + +# SMTP порт (обычно 465 для SSL, 587 для TLS) +SMTP_PORT=465 + +# Email адрес отправителя +SMTP_USER=your-email@mail.ru + +# Пароль от email (для Mail.ru используйте пароль приложения) +SMTP_PASSWORD=your-smtp-app-password + +# Email для получения уведомлений о заявках +NOTIFICATION_EMAIL=info@global-it24.ru + +# ================================== +# TELEGRAM УВЕДОМЛЕНИЯ +# ================================== + +# Токен бота Telegram (получить у @BotFather) +TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz + +# ID чата для уведомлений (получить у @userinfobot) +TELEGRAM_CHAT_ID=123456789 diff --git a/DATABASE.md b/DATABASE.md new file mode 100644 index 0000000..1116691 --- /dev/null +++ b/DATABASE.md @@ -0,0 +1,352 @@ + +# 🗄 Руководство по работе с PostgreSQL + +## 📋 Обзор + +Проект использует PostgreSQL 16 в Docker контейнере. База данных автоматически запускается вместе с приложением через Docker Compose. + +--- + +## ⚙️ Конфигурация + +### Переменные окружения (.env) + +```env +# Настройки PostgreSQL +POSTGRES_USER=globalit24 +POSTGRES_PASSWORD=changeme123 # ОБЯЗАТЕЛЬНО ИЗМЕНИТЕ! +POSTGRES_DB=globalit24_db + +# URL для подключения +DATABASE_URL=postgresql://globalit24:changeme123@postgres:5432/globalit24_db +``` + +**⚠️ ВАЖНО:** Обязательно измените `POSTGRES_PASSWORD` на сильный пароль перед развертыванием! + +--- + +## 🚀 Автоматический запуск + +PostgreSQL запускается автоматически при выполнении: + +```bash +./deploy.sh +# или +docker compose up -d +``` + +--- + +## 📊 Структура базы данных + +### Таблица: contact_submissions + +Хранит все заявки с формы обратной связи. + +```sql +CREATE TABLE contact_submissions ( + id VARCHAR PRIMARY KEY, -- Уникальный идентификатор (cuid) + name VARCHAR NOT NULL, -- Имя клиента + phone VARCHAR NOT NULL, -- Телефон + email VARCHAR, -- Email (опционально) + service_type VARCHAR, -- Тип услуги (опционально) + message TEXT, -- Сообщение (опционально) + created_at TIMESTAMP DEFAULT NOW() -- Дата создания +); +``` + +--- + +## 🔧 Управление базой данных + +### 1. Подключение к PostgreSQL контейнеру + +```bash +# Войти в контейнер PostgreSQL +docker exec -it global-it24-postgres psql -U globalit24 -d globalit24_db +``` + +### 2. Основные SQL команды + +```sql +-- Посмотреть все таблицы +\dt + +-- Описание таблицы +\d contact_submissions + +-- Посмотреть все заявки +SELECT * FROM contact_submissions ORDER BY created_at DESC; + +-- Посмотреть последние 10 заявок +SELECT * FROM contact_submissions ORDER BY created_at DESC LIMIT 10; + +-- Посмотреть заявки за сегодня +SELECT * FROM contact_submissions +WHERE created_at::date = CURRENT_DATE +ORDER BY created_at DESC; + +-- Статистика по типам услуг +SELECT service_type, COUNT(*) as count +FROM contact_submissions +GROUP BY service_type +ORDER BY count DESC; + +-- Выход +\q +``` + +### 3. Резервное копирование базы данных + +```bash +# Создать бэкап +docker exec -t global-it24-postgres pg_dump -U globalit24 globalit24_db > backup_$(date +%Y%m%d_%H%M%S).sql + +# Или автоматический скрипт +./backup-db.sh +``` + +### 4. Восстановление из бэкапа + +```bash +# Восстановить из файла +docker exec -i global-it24-postgres psql -U globalit24 -d globalit24_db < backup_YYYYMMDD_HHMMSS.sql +``` + +### 5. Очистка старых данных (опционально) + +```bash +# Удалить заявки старше 1 года +docker exec -it global-it24-postgres psql -U globalit24 -d globalit24_db -c "DELETE FROM contact_submissions WHERE created_at < NOW() - INTERVAL '1 year';" +``` + +--- + +## 🔍 Проверка состояния + +### Статус контейнера + +```bash +# Проверка работы PostgreSQL +docker ps | grep postgres + +# Логи PostgreSQL +docker logs global-it24-postgres + +# Последние 50 строк логов +docker logs global-it24-postgres --tail 50 -f +``` + +### Health Check + +```bash +# Проверка готовности базы данных +docker exec global-it24-postgres pg_isready -U globalit24 + +# Должно вывести: +# /var/run/postgresql:5432 - accepting connections +``` + +### Подключение к базе из приложения + +```bash +# Проверка переменных окружения в контейнере приложения +docker exec global-it24-landing env | grep DATABASE_URL +``` + +--- + +## 📦 Prisma миграции + +### Применить миграции (после изменений в schema.prisma) + +```bash +# Внутри контейнера приложения +docker exec -it global-it24-landing sh -c "cd /app && npx prisma migrate deploy" +``` + +### Создать новую миграцию (в разработке) + +```bash +cd nextjs_space +yarn prisma migrate dev --name название_миграции +``` + +### Сгенерировать Prisma Client + +```bash +cd nextjs_space +yarn prisma generate +``` + +### Просмотр данных через Prisma Studio (только для разработки) + +```bash +cd nextjs_space +yarn prisma studio +# Откроется на http://localhost:5555 +``` + +--- + +## 🔐 Безопасность + +### Рекомендации: + +1. **Измените пароль по умолчанию** + ```bash + # В .env файле установите сильный пароль + POSTGRES_PASSWORD=your_strong_password_here_123!@# + ``` + +2. **Ограничьте доступ к порту PostgreSQL** + + PostgreSQL работает внутри Docker сети и не доступен извне по умолчанию. Это правильно! + + Если нужен внешний доступ (не рекомендуется), добавьте: + ```yaml + ports: + - "127.0.0.1:5432:5432" # Только localhost + ``` + +3. **Регулярные бэкапы** + + Настройте автоматический бэкап через cron: + ```bash + crontab -e + # Добавьте: + 0 3 * * * cd /path/to/global_it24_landing && ./backup-db.sh + ``` + +4. **Мониторинг места на диске** + ```bash + # Проверка размера данных PostgreSQL + docker exec global-it24-postgres du -sh /var/lib/postgresql/data + ``` + +--- + +## 🛠 Устранение неполадок + +### Проблема: Не могу подключиться к базе данных + +```bash +# 1. Проверьте что контейнер запущен +docker ps | grep postgres + +# 2. Проверьте логи +docker logs global-it24-postgres + +# 3. Проверьте health check +docker inspect global-it24-postgres | grep -A 5 Health + +# 4. Попробуйте перезапустить +docker compose restart postgres +``` + +### Проблема: База данных не инициализируется + +```bash +# 1. Остановите контейнеры +docker compose down + +# 2. Удалите volume (ВНИМАНИЕ: потеря данных!) +docker volume rm global_it24_landing_postgres_data + +# 3. Запустите снова +./deploy.sh +``` + +### Проблема: Ошибка миграции Prisma + +```bash +# 1. Проверьте DATABASE_URL +docker exec global-it24-landing env | grep DATABASE_URL + +# 2. Сбросьте Prisma и примените миграции заново +docker exec -it global-it24-landing sh -c "cd /app && npx prisma migrate reset --skip-seed" +``` + +### Проблема: Медленные запросы + +```sql +-- Проверьте размер таблицы +SELECT + schemaname, + tablename, + pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size +FROM pg_tables +WHERE schemaname = 'public'; + +-- Создайте индексы для часто используемых полей +CREATE INDEX idx_created_at ON contact_submissions(created_at DESC); +CREATE INDEX idx_phone ON contact_submissions(phone); +``` + +--- + +## 📈 Мониторинг + +### Использование ресурсов + +```bash +# Статистика контейнера PostgreSQL +docker stats global-it24-postgres --no-stream + +# Размер базы данных +docker exec global-it24-postgres psql -U globalit24 -d globalit24_db -c "SELECT pg_size_pretty(pg_database_size('globalit24_db'));" +``` + +### Количество записей + +```bash +# Общее количество заявок +docker exec global-it24-postgres psql -U globalit24 -d globalit24_db -c "SELECT COUNT(*) FROM contact_submissions;" +``` + +--- + +## 🔄 Миграция данных + +### Экспорт данных в CSV + +```bash +docker exec -t global-it24-postgres psql -U globalit24 -d globalit24_db -c "COPY contact_submissions TO STDOUT WITH CSV HEADER" > submissions_export.csv +``` + +### Импорт данных из CSV + +```bash +cat submissions_import.csv | docker exec -i global-it24-postgres psql -U globalit24 -d globalit24_db -c "COPY contact_submissions FROM STDIN WITH CSV HEADER" +``` + +--- + +## 📞 Полезные ссылки + +- [Документация PostgreSQL](https://www.postgresql.org/docs/) +- [Документация Prisma](https://www.prisma.io/docs/) +- [Docker PostgreSQL Image](https://hub.docker.com/_/postgres) + +--- + +## 💡 Советы по производительности + +1. **Регулярная очистка логов** + ```bash + docker compose logs --tail 100 > logs.txt + ``` + +2. **VACUUM таблицы** (освобождение места после удаления данных) + ```sql + VACUUM ANALYZE contact_submissions; + ``` + +3. **Мониторинг активных подключений** + ```sql + SELECT count(*) FROM pg_stat_activity WHERE datname = 'globalit24_db'; + ``` + +--- + +**Готово! База данных PostgreSQL полностью настроена и готова к использованию! 🚀** diff --git a/DATABASE.pdf b/DATABASE.pdf new file mode 100644 index 0000000000000000000000000000000000000000..28c3d4247075d1f7db335a03760dfcfbb1f1b364 GIT binary patch literal 84733 zcmeFZbzEFcwl0jjTW}5T?hqunySux)1eYLz;4Z=4J-AzN_XOAA7H-3v%w+6-@60{t z-0zROf1B>z)wOFcsU=UXYDndTMQ9o6SYSxIbGmb37zr5&Z4E47cz9swmCT*2j0q_y zVd#Y%jP;#t9SA9YJOQ}^Spt~>IRRM%Spi;cf$V^cfJ}f0ff#`3fEa<80IzI-JLDW} zjhqdQ|F}gS(2)>`^`*n}E61-P&24Rj^_>9E5awcHU}9xtU}9%vWMO4s(4d6j35pk?TiWOh4h{Dt!zyJkI^?Zb|hp5bWr&129|%g;jNpKsG<|#Q84t10)$Qu z&d(RpgbZ{HOfd9@`h<*h3;-?#{&*Jxqwi=*NH1e+WBgZoSbq+$33$Ad zld*#hA-%A%i@Bk(f~cVOFQVChqd~;k#?T4CtI{*^fCmcOTI-wJ5Na|IGHS!n%MdaG zp3MOGNXNm!%*4jQ!U5p;Ut9zF3o$--Qvh)D^UP2neAb8p;j<(Z0N?*c&F>bdXr^yuZe#ju-U!)R**YlN=^Fw};4d={ zhF-wN$y~t7T;K8M#1^u(b$F(diR1ZE&##Qk&olsx0ANvsn$Oe!rR#5W5xz*_cOzo_ zN3;7m-Ji|wW#0dy>nE9njL)`Z{K z37I)K=vY~pIXPMWRus>6{mU5vjFf?noq?5ugNd1yiSWf*|EA$L5&mxfFZVIBvT?96 zv9qxLy6?A!-|qWm*w4=Im%@JW_%Cdh5un}|1^={4fb-(yU|})L03jd4F{@U=H z&i(^m@_(c=rr*8A|D?`dT*YsWg6Vfh@#l2*Li>N6&Y1quL#W9bSQr~R0fMWufzwN< z7Pkh3Xc&4`b0a4+LPkLF6Eik9HFJ8o6f}2olrwe^vbDAY1XvpaARm%oUrx1! z0Smc{oTM;lpm7@*;O7wiv*WJ}zv2uR51KPYHeXecNcC`d>cco-O1IKTl3jerObhwyy;JjnCy&vyY%I4DS{=N|vw z@zeo?3S^dfFu}LK!-Xc0QsPx zAOK>)!N35$y#e0?fgyvV5HSispvvn*65FFO`Nd>IkqB0GqAN_CzGgOX@P~%Mc!i0D zO-e>iK}p5J%Er#Y$t5KGRzy@xTtZPvSw&S%UBl4G*u>P#+``ex*~Qh(-6J3{C^#fE zEIjsOTzo=eQgTX8?x(!`g2JNW>YCcR`i91)=C1CZ-oE~U!J)~i>6zKN`Gv)e&8@HB zws&^-_RqebUtC^Y-`w6k^92k9`UhKo;q34DLI&^!0?+{%@ZHS`2YOogCkFH@bh0rs{>6fRk8b}H;gsq3DE2?-nwkCxg?|l7Ouq-S zKk1rZvcmte)QRc$u=wBSz5d2EGe1X0fdBdvt{EQW!#wNc6E!(~hv!V}XPPBsYXiWHPJktrpVME#*wNP6!4Rt1e*&QDpFSJ#36PAxajK(Tf0N_%enFGczIJ z{KIcBvk(H#pVzE}%)hcdW;Q~=`Lms!koo5`M3^}MF!`nZnY5qI?qyhUYe260lCA=t zE^ZBQjW6Eu<>7ygNiX_&7PKY+WB*KhUzGYw_&?K5mOtsmkF?coahs5RGIb}$VXfY) zezfXf$Ql*^v8oIP|4K9vuu)f|HZVqYKzMsg)G}zJLtq+=9oaWq>Niu!A&qfxQ|zX6 zuqk`8>iYDM+tTQB?Rnk#*y__j)P_CqplkZ{h>0RHS>)$Tz-No!95T8zs(J2vf8NQ% zHgsBb;d&lQU{3aMwlTbIu&vLmxT^i+EY$LpBI~=ScKz}8R`dGW_e1%8Z=_NCg*!8x z)v;!(?n$?9ok|;7ik!{v>&F?N+quy-pWV+=hg3zhj&WQrTWbWv$K7{s{814I3X%}~ zA?YVQsgK#1dxd*h_t*WSw&c$gdQ4g7(cEi^{%rU^XybpbPem^N?`&t>|~c};X2fBTcfHSp1X z;~AP@l{ja({%eKK@u;ARlXf4LV51u`5d$f=t(dlYc&bn1ecdbzBJ43kQ@K7E9!$p) z?3t8H61sh~=e7|wsh5_#(%2YR}BqxJ}rXBz)U*Uby7VX-n*z=u{ zA9*T<6(UHY8ylVyoj`ma)pd)_Su*Km*t~9)P5&5pVYkfmq{26eIcoI%^{kYbtOyjR zpp(k<>wL&qOb^yA{7)p3MPK?+GSTm-nsU4h4tzMg-aW2@Of%~1yk(#d!9r)=-4LRu z@fk4M2VNm0H(o{Z_d(*#xGNyQ$H9*MtU4d&uB+ew#TrC2c1@)M7-h0ki zBPOWbm~*t-Og+=2BkCCmu{G7ZKEimUpkyKsVrT;uQ&z6(SQzi1L^YI9e2H>G0z__z z($FvEGmRU#7^T`t6&AeFpTC@tcz`TQ@`vJIeVk`W{}H58qFt$#sk5D8_lk@nJA$Mf zG(9kzFhd#>t$U&L;!A#)dN30LK!*J4)|fh=O{!gIDz_p6j2T!tqOt43N_ztcR8HUY zd8-AXMNLmI7`=qPLeZnAd)kaahuSJRy=2!e|%0`qd(E#`dHvMFK?`)Lv&S$sxH$IM`MW>1aj0aXlHHr;S*& zNGL$q7!*`#SUDlFNd{7p8DdT|K>76e*y12lLWAgEQ8A;|)E8zX6Zs+%Q-ZE*sd*ni zxllK^+?<<|H6L&5V$tmit#=VF_{9h$EvJ-~?COEHOm1CD2wApKJgALDL9H4hZwW~0V~5{rqO%t zv8s*0wf#}9W#97{m4CD;-hhd(!DAm7{x}nHNP=_vHtR5mAddI&f`c)-X7B9VglM&k zb3>C`w|jrz@v)+)c3P6pvNYX&?(E76{R;Kc+QIR0gY;ecd)M~%r^z;t8Eq|}o4d^G zYgdA&>pIWNX3xjwmgc5aip3Ug6nE7Ier;Qulaa$rpJ0%YFYD_1;h)G!8eF*#6Spzg z>KGPFrZd7R#KhjWt^>%&zYy}b(Wb%#v^!5Q>rW3_cF8n2MWRYbM@Y5Xu?5^ zj+D{n+9nsAiy>4l)3q&QO81%X9SxoLZ9|vQ&gsBf?9-Sv`EBVTR65x_auCl@ZhOpj zF>5wo8e2H<^-tkcyb?4NSMdKNxB_Q9Zf>>bbcHbF$=Amw#5swX-WGu1KK#x|iu5}L z*F6w(+o)YlJ+AT{ggAIC9|?`fN6|Otvvc-UwH*EOB3`4jIi4Bj_FA=KMiZ*v?p7pi zNsC6^Pqf<)zHEpoU~)0DOx9weDy=_qoMIX#^~17BQbbZ1(kp7ZAR8a{!bvu% zL*iQCoMbtEk&<81P-arJYC}*hbuz&jlzVN<32*IaZm>^N`)0}MD)wwTY39?bkHjP< z+8})%>G|;UEVf96awn5x2`)^`W+??k>_l!AWUk>_T#zju^APCz~LPyD~e&EUGuoR8#nhb_h5I^TAkvTphPn6 z^%1GN^?7u*8Z!h(qNngFW-P1(DPTcvb6S~WDOHp8J-j}6(? z*Y@*Jku-eOvNNjhxv)}>JbyR6UU|ksSqE%MJ=D9kZd&QU2xHjYJ;>oA+V6MD))W9o zB@cccYzR3^*;k0MV-spQrY}oW9I?MNI4*(R@?Fam7I}cR(u1bBHRQa*7mr}+$2J#7H!&=fg1}4}lw*z+v3-gv2|3GT%kjr+ueyWa9b^j6E z63@rubI%(TA4}pO@fK0mo)R_0GN!e7od_qSGY&plRjgWr)hJ85oLsw*g_K}?UzaQ zZVtFDa(qaSetY(~l7z8~_ccyDiosRT(V&``5kcr-f>;a>a2LQ3bsbq4m97k>1c&nT zkd-oL%yI?jy4`1}rhJXYn)sI^e51Yd(WsW$w#-&Um}i9L_J!66dEMEocC z^b}|t#-f`kklvBgK7wb4vfJU9ozA&2)#e|R<$wuDNxEzvAOAq|J<_wbZ@>v|#WucZ z%X3wqm!C`9EhbRzQq~di=LxHZES{Cfk7uVpX#L(VUh7naxCU<1M6}`%*^q5h=5T~Q z*I%c!tB=K^A`RG=B`MedGKsQ>gdsRFk$v=(a^wHk6#4R^o&-J|(9R{pOU= zBf~QqWKcpxY_qLaMcKTg6_xk(NVgjds%Pr(le9-2)?_94;+ z<&)PaT-|GSoi#E)%t%#!^QPTPx6-P5ci)c=>s911u$od^+EwlPV8$OMH4FD+taWHj zJ%BT-Fi*kTe@(;{gCmz zLs``!pZTG0yb>Myi_Y`cuj*R4aw$^-Xdepe-qoc=E?T5>ylEh}b~h!DtqY3i?CI3r ztLY7(gxmNE_bPg`2bfGS-X1~YbGY$`_GS2Me^lCrH%2++EzzZ3wtES_L7-YZaGDIZ z4~53Sbs*XnIrXLzZXdy^wQRjMMi6T}^viN#_YqntRCRk8M|Usu3DHnJa~A`6DQw?uM_qivCFE~YcQ+E2Ls z&NqjKu_Dc-tVZw#fvR<5RioBUDWIgRlS11dI+}sSu|46a3Y6gKFrz>jFxubmmG_8W{;N)vhHoJqc#vfXL{gt{QC_|Jrjg7bF2`d-# zV>?%s>RZXYF;LZB9ds~XgK{RO`kBM3?9HWJ5LJ_PuF~A?+ZH96vPsUEV!C5lS;5sx z462lFB*!nQ-{V`3Fs05OeMWGo{nFIl1SHMeL{N|XP%hh(wXjD`H2kpiJ55fkdU(W0sdepPzGH84FIrJY1HxBW?o)x5VK>CJD!D#k!C<$4o6{N~M_9q%q=~bm z;VN@<{@FKUrUkmuPDDnSM zY&+7{e80?r;Zvczu@gkmtm%)md+daPVM6ptpCG{-Dmhs@SUl-)r276`wcc3M;kKq^ zx;%=0|IJ-awYQTK-CC2H$Ky_PX1MPUomQWl8_lx?U*8+IoKH%%w^YTx6Qpf4Yy$_(|p%g<}L&WFSBP z)*dN+62-7!e6!wBP40p$Lp0a+S&BQ}7KUcdeZkbhwIG@nhAjW9(J~#@wG4}DT}Dc& zvkSwsz7@?j+6*5~c>c?~E!)h`7`Cfu6(@X8XPL6?e2*9H{Ne1j?;C92-@76f#3EPV z8M1pmY;0WIe04jEJ&)J>tkVCwIz?D05Unm)HM3Z>rzIFQLCm^1+a_?8m4sA2MRe}V zy@~M0Nd|oF^Dhw;IVnq*B+YFii8R>A#d!9M$hznAtC0sO!8U=sgp2cr+zJ}r8!HU1 zg*#E7^@0z}@sO=L=viCe>wS=rl3Z9_OYt~FNnyxbhf2JJN(@9eCKD#vrKkToVvtu~ zO*&3rNf?O>u4tjQV-&4{49h7*lGXrM-5qo~JUA}gq)p5|X;()OLu>u*UA@W!IC6rB z0p%*m3|ehle$!X20nY45n+)2UTh_9nff~!x6^6A_sYlilWCEKccJLU?iR%@xV3m-Z zAXA-8N^=z|%nhB);cPL6iLir?aHjFDb$S@O5|Kj_V@uWXQvW?+8FfYjZ1~W?o+CiOmsG0?BO=Wpxyi|4K){B>0vPONl^;w6&`nUD7%PW znjLpkhsak{e{g!s5`F!=3oW@>Dqc;6JxW{Jz2u{Awe4~|^AA_d)>i(UNepzu24oLu zEnqw$?jQ7M6a#(qOK%YrBFzJ;ne{gr!7vD7{R|BpmHYt>gEx$+9~NFihvbr&(xN-UUTa5s3DbvV5R*iKFek9_}XE(@R5D zmOM?0>p`_slTA><>L%esAOq*GI~AtSF){h>kD@uwm(uDLJv(FhI1m~#L_!kYg`Dt^ zMk|(3wQ4aYIs1bqm{oY1k2m8%+dr%=gapwJY-qg4an<^5bt4t84p)|ueVLf}xK)Cv zrQrdUOXX%gmE~*}ZCY(Jc*4TcKu5^?$rkDBn(aKL=@g5Z+RK>%KlaS0he@ADE|_uf zkWi#Y37H{BFOoH)@(tt>b8uy;{3PeY*IDYXzMxaM!RJdCVd=Ge07bPE7Bpk&l=tQZ zr`kw~yG+i4heS3;60^}pv{rB8&b-9AUP#T%tqq?ZFSU+5Kh-hFw!GTomW%ER4f z4oM-((kgxvJA1TyU<7X3;2LU~WEH2fOFo(%`Hdm&tKHE;{EeO~<7X>RE@HABOkZRz z8E0JtKEa@Ck|vGs=5pwx8Ked!CO0i}&BJ=5Q2Bvo-O_-X0=yr~nx zyS?$a3`C=b99uIYvL*Ap-qO0vz3)2!5ix`jF(lsLKszez&_Ca#!SF`O&GO?UldkyJqU^c5#8ftJ_dG^`#fjxghvAk z_Svx+uNqnLMf(Y@-dSLih9=B<_aZ@<1`_q79mjTQzjfS2+_9?=%%^bF-zNzzVUZ6;9{$kSf+&uA@Y z1!;QOu>{4SO(&zlM8yn;U#;ze1A#KZgTEnNiFe=G}<#gg!B8T;cmK& zn#WBke^hnCO*ehJfH_x)!Dj22%A!-?1RW0)N!c;8IbRb@uEpXt=i+#Z0FAy`kB+=3~ZveavfI@q(Bo zS4n^biH7Y!Wxi7%>{dmEzxEsg9G<#4o&f%J{S|F%dSL={N zyd6`E$|pa{%DtDSc8I zKhhh+)%g2xQc{N6l)Or$C`2S@%gT~a^iA6+Mvogz;VZ~gXXb{n>qAo|>j%2pK#8W) z+pyl0Pqb1=|5*J9P05p%*^l#4dKtce(S93bm~NGYHXDU82Ca9dEU?E;;t{ODF3)Ny zI5m5^KGt}#zE71LGh<@lhh1>Lgn>r4qJ%wacQ+$dXF1~r-h1QsUg}NlB@T(rUQrGO zMlz`N?1gKiO@^FZ_e<|{^~)?r zFdcj`QCvHuShBijGP1BMt{w}S7t~XYjzS~M#)CVRx5G$AE35kF^kU{C5TnEEcwq&O zqweT$&Iw)F?{9k@T~+1X-ug9~My^W1q(e*YqrRe3TUuEN+`UQYU>nIRsVFY8E{I$u zf+t?$>TRSc4H#KJoXZ%&g*#-!Y^=4bRllVI5wUi3qo?xQWsj8rBfq%HALP`x15 zp|#RAVpqH9cKKq7b(tZNN7N9-b~*R=-7R})?w&<7 z+gd)3J3jei1{$+$@n3073@~a;^~Vels*`vv*;0Db)SvmGc#kz7oYpH`U5UUHKw~0n zGG?$%v%LzZ6xRy}rv&JYiEhjoz1^2XW5RITX3RKu5Sv4@O-e^;%6OgUFOR{@FwObi zoyYNzj-qAjyzR9 z;)b$JiH^%%4zSXVDne}od6D7lL(Q;{I20;%#+h1+Zk_et>S|Hf()Qybp~z)q`uJc@ zC|pcq8Xj zE-nV=tl3+M#lW}O!}C%StURAhU92fzg=?zwW=^N5nrrtq?b|9dIabyKq~Kv)k!u&s z+PT38Y)O9D7wh(!}hD%R& zG%_^DkT#)J;%nm2V7jsYPD_p*aWHV7%QI>|srvPFD_Pd-d?0H6F&3f4QvsGF5a$W; z%aBnuaiNIs0+#evs94my=5}#oJJDDq{;bICJ0U6JcpdQ0eri@BXw(=0iL^@$g?4~ zSh9CZS+X*gqY*OIvTVXfBv>4;(F9w{$Ch>K%vl>eS$`BzMJ`y}R!*o@5CnF$A6p;z^&63 zvlC371aaM67PeO}B$+7+;+kd#~zM zLg_TT?Bx!#wMM?TZ#uqwXwG|2uzVc_N)V1%@B~^Soi^}K5dN=iV$5s|oWH8jEdOk` z)c+3Q|HD=U*1z3~0N5V>Qa}GUw<5fZ@(Tg~-$D4l?+N&QufV^J@Lxpm_Xz*@Jz+nq z{j7hw+P`AE+=%SE)-E^>PJEtlj4E7kiY4F!kU4CE6ACIE;HBS$kXRHsazN=M}7PCLlF5B6=`ISm5 zHPCe1kMQ63uN171KRxB1C?xAAp1D4`T_;>2`g%QnZZThLw|x5U{&bB;|KouFu?(qK z^yxlvGxN#d?U|69jgmx}d$$s3e$*1(l_F2TI*86_l@DupP*+y)R zG0?{D6WhkRW|n0Jd&c!>@9XMfu(>`gV17hMepCq+sKK}T;M9!-WjBxgE3!WxAD1|{ z@a1PIZ*Kh?H07a6q_WE>Z_e8_sn(F%xVyak?M6^#SOU3`tQoHwJ?B@vJ`}GjpPedB zAYA4@UVeG^C{h^y3Xvbp7E5tc`|NZ$YFNQe^}Xh!(iE}Plz~Jy6;>TXltzy>cM4@P z)1{p^!AgDTq#AxhV|`HKBGl-7X+p7ORlfOw=GBU)FuG93^@&MaX_2$vi=JwS==F{!>gYM|3`x>|Va<}X9 zM$h&&b$a_wbUw!U$Noo2is`BIGATG>L@OFiI(($!OO+nzDjqj{mrs~n)u|*UHc>%D z4E1!qYNQ)y0Z>Z{;V}${EfamkxZ{jt?Tzt67vP_-%1|s9N>4q)D1>3;#iwN?2*6Zp z`+y~lA{!oa#v#xe=o&}b;OmHVsnr%FlIv;L)Jf+uQDs{nlHNr8 zj!>2!K?GhfBTTl;7syQ@>LM_(O2iCv5H_>rN@QhEF@j}CMSaC)?mS_&p>d^VuXc>Q zl3HDhoeHP;syxlaNpF;y6nKIC?-}*}M3$d7iZ?6`%j5Miswv&_JNPP3LHVN(yT6{l zUka%qlyXe|;F`-`B-S=Xgr@#B#+;p|4KqfrCuYk0ik#9XNU*C@u6fkjTH=QOR#jKtT)f zD1sl=bSb?v9~16E+QJ@2&j$eqN$c#Clx=-rvy?YI>O;>q~eI%D&pS-<6rYalUahRWRd1b#6|?^sfjZo z`A0Y^0XnY6zkUTK#>VR2{QcdMTnN9Sba~;GP;o4KFM)c=VBwt!p2hd3xDB$bH5VUf z-1?AFG&%Pc4B*IctMBMv>IX#b>lVn8A))GtQwwOS_mW5V>%<(DjHYA(I*tmrf)Gr% zH{yyZ>=VCut7!*=(*T9J(oO4@&v6!|Ng;P$6!#!l^@BD$bqqvp;-sBrJLfU6ktMJ) zF*XiNhXo=twAQdN`#xrXQcj_g8MSO^${CwGj0R}B6(cG^Ovn&VB&nzm7sQ@-FpRqL z=_uRGW(k~|+I512iXD=2Nc%$1rs@4F!29b)LasKDN8~)%@92n~QtdvNp`v{PezYZ3 z#;oO%epK1r>Tj9Rcf+f(yPX6+TTIeF-7W4o7Y@>voJFX^lMdUtE%N|t%d2!(+BIv= zf-IV_(k#^@AQHMomG&tQy2s7zCev=jl$*H9#)<6~xTNe0hNR20`WQF5lEB3EDP;nt zad9T(2AD+}TnL&-VU^uP<^YslXMp_|VFD=N;{aX{*e!S55aD$xdl_Qn%pQF-8hsAU zDl-I{Dva(4nN}2k`I*3?&eX6ffzG}tgA58K!ctoBIPf$)Nipc{)eYcwYE^~c!OxZ3 zwLf(3(E_5$zkaGz@F#qAIKV&N?Z592A|RNKT3?BID7ksT?iKByQ&F(_%@lkE<-Btc zP+|9%@1+vaca93s2OCm{0w&!nIF*9_9*~DDWKGz5%_%BE z!5sjddWQmS`GDUgFdX)Y*9Q?7o&Yg@-YE?Bb^dGa`Mr2Ya?^M^W74wlCe%a}qcmLc zI5}zaQ*@g9RHhIKnHE~jWTC*q!_CZYrVxB7iG*XL0n@La@2_j^>llRs3NS>+;LJ1v zIRhE2yB>p)yKXE%&X)@(o$mc)n78XP`Y_Pb;LKVIwdD%NYKLMKbFibml#>eSo%Xv* zYn0UbbU>GeG7dbEEZHkH^X88W@g_M{=GXd7-%iLjdeHhb%H@@|`C~q%5@e)D*&Mr^ zFE`w7Fh86E=QuDM2=RLXkrnL%g#?`Mi-+opPhn83!K?^BL6apli+!gN=#cVuK=n4mAmExQY;lX^x2iUY{Wk=Lz&=Y_#T9 z5d2cvNd$Xn{X=k`&=Z@fz!LYWk`Ij}2-kkCQLa;)*R5=cF%BwmU7E<*fdZ>Keis=Zv84{pW5I&mYfgvL>?2OD+C`4ntfU-L1Gp8e_jM*TC<0uq zp`D2Ys8P)tE(_FdN(>l|=Ch%!*9QA%4kX>YCQAgY|6D%`9Jm9b`j zfLZjeePr3^^z)R_gD3a8Xh&Q=ExM__=a;(?LjFe}_<}p0@d+~{Gutm9$og-VdS8C> z3fS}f*HSO*-%P9YMf#C1p?{`r6`$qA99~AzRvhRxwfARVY6#n_LF8~yx z1Ga!??|>w@w*v_Pd0M@q_yFPue<(B&LfEooP=!<4qFKw|-uxj>ct2MpqB$3H$46|i!Pn=9(&JXc{?*Nc<>i7mKOccu8R=eo@zvVs4X7j)t@`C{Vz=d`$Bo;~ z{KM1Yvcb$v!p-%zL%YONr)_3CuFd@=;v@NZe>=X}W#)E4yHe@h7q6$HyQMX8W$zOe zbNah)gro;MY@-$Y(Y~xAbHSK`?&q9gzSi_Vb~al0m36rs>X>Nls zA4;Ho@oXx}jFqTzF(2G{ZY8M1dxMzbO+Mv}TFtcka6HVH@|Vg$TfdtW>Bww1a2}-+ zC@ue_f_`Z!+c^GC6#G;SQU}O}8F>XjUM5FHQlXAd>0Ob{oh?1y0=w3{$>IIJHgkiI zZrg)XXhpO4kISjV{gsyetK;*Nrym#R!-!9hZ64R3J)S-{`*Ps3l%+e5NMGG-xVd?m zSKg4^qQBEE$$vc=C9LS!$qj2;u`in8@mfk6yUe1m3kv-aswAE;JW}MQ3a2VkWWlC+ zBf|%82vlw( z;UHXn>JjQb8foN&Em_bP9FU4mbZS8bF8 z>L-sGGK)d3aK6l~2aA#!Y}F#%*Md9+nj3Q0jPf;N)*ptJ(?pLuDUHYV@36Un#dC$v zPbgEfxlInbG;}hPA={jWLY}P4cgxSxC_q(|GDYsnv`wE5rjOTdE<>HDy6r)o(8WF& zn$$ZPbG%n|mdC-$>v!y)(gG@V;$_uC-26DkS+JXg(A*x$S)(Z%udiPpy~1*E{xCAp!yRfT+hqD~6!zC-%ycDiw)eLqtPP8i{gY}mTW*<;R+6UhCh;fx4&<6t01v}J2rtrbk z*c!ql0Yu$n!nkJ8AVaKyho``fc<33mV4Pjk&RJ63>RRj)pB9veq_eOW+ZGb(GdRj! z%8PKt6gIgz=NI?fh#{G$1`Nt`WBp;#XQ74fX^Vvk^-q}5p^C~Pmi3UtVmp$vRL_si z*>enf4t^*pSrKVg)kR3^UIhkh<80vCg@Ugu(U->yAHD4a{$@ovNLgyzk!h6jCG8p_o3IZ& zvnW{|Of)8z-h5hXOw&%bPmp28j&1uy{I=5ubSrqGbJnvVBNGmSRL!&Ii#SYG7jKyN z-UAD)o(GmSjco*F92Kl|1GVmKG6cWalQolNxc*_2~>@;a8W)W`eELCIX+&c<8P99LPT${3;8@T6As$-ZGi zRe_0PC6SEq5x0Q)Hr@px>G1g*g7`>!m^ym6L@kDDoTWb`92iz(n+v7Lookv~w29rdgnO~dN&Xo}(&kCCxxS%~t06Fyk z{sFPCz^8Ao_p}S9JpPL?wqhL)jE0zj^l*FiaU}YbA`iJ%JL3Q~<>A{bYHXR~8L!u% z5_v^=)}M=U%GJbx9#rJ2H-s>;<*_57+@f1U4k$Q4=7`+b#Qd1QH6hnz5J=T^gf3nl z7@2hMcHk*Q$k-*Oiun=D8J2BWVFpBaF<2uquM*mu`F>i$U9xfj(hB=vqz~@%h6FB^ z3M^DmZZCPC1q{h}B_W_ zpR+QY!tqW1M)R}J!D&NO7dWz+PK%TQ4IrU_ykA*KzYCJmM6FM9wZcDwjnbNPHNXeM z298pe%P2QzB;WIQ{w!#_ecUNBI;Z%qs4tCa*Us)sXWHgMr4+L}&Nk#W%9@srCs$4~ zeIysw%uM3uJlITkZuohWbw`}DF=_*Clz)pWkqlLF(R57O_5)dsbKwUh zW*?HV!7MhKR_{Kt6Vx2iGv$3#IIG1mp^Q1cxCz{A!@|hx;$>ipAJzF@?5w`ikR#dSRFb`lXP}3ZI!802?oE5jBs?2FxOMpBV9l}R$dMaM z*RTRwvU7<$mBz~7SUk^b@oE~KFkg6d$=}XDsV4?Ol+ddW(?ly-P4oLFtPB3+0qyE1 zU|vO&%)Is6MieI|Of;TRQrIssN&fx;ACq@xE6Fg7yx(IAV}0g66*ay-uRNoUs2QZ_ z*8S{b$zK)K6=XB=HE*c9I}eE^e2PfRZ1Xb&8cy#cVQUazcZUcJr}2$*og3crrC;Ai z0W{mw63!X)9`DY~+>dDQ=WKmq4bX#N$tl4cPqvZ@>DrPCgp*$%N7u_@c8u1J460gH zfa6?~l7i@vE5f1k*aQ~Q?KPTk1d%jqsXe~G zJvTpijcjFG(~(%-VmtW?JL?=o8uj|>K;PSoR8x{;*p#r=EO3oUDH?a@Ip;yClB=Vw z9B=m}j#rIiW!*9+qwV{30qp|Au5Mg61?{HXlj{Nd1C zeg6c_{-vzR%=DLy%Yc7e^!NWj=6}0!ne`vanrwet)@1w7%9<~u{6cvDcgmW-qt@Ti z?C&V|-$t`9;&|rkw;wdW$nY1hKhZ4PpDuA~{uRw;Kcm@qZa>lNMfR@HhZXCpdHC5C z+Qm#=3t@>I76MTrYWzVG$WYT#WOujYovrNc?eS>cV!$Tml|usGlFz|w_x*UJA`{yM z#ZPSqPn{D(6gu9I&evMJCwwP-_fMIRv@+MWSf8&6qH9=uZypaCR-~Dq%5R6aepGO) zJkGV>N%oe={F|*$-ime9YE$l{ho8I#~NL>1$a=l%O#b_{5F(xs3mzVrA`z zk~jAU%i6LqLz)juzE3g~y-=^xieI7rSYDAy+mbRb;q+P|c#xtpCuL2H->5b4soh`W zKlb^4?pnh<#FHBle|iaP!rmI2kSu|vUB%&AeFt}5Xo}CzP+`1mMcnMYxWWUa%&5)# zsKhGNX6eK0UTu6SgT0~qB-d7;G>JGfHO{@AY>;%xrQ1uLhF4CpiPhVfvx07cpn9D7 z;GpX$jzTlY=|H&hF^T3VTRnv+INSq#1w=`!7M~{ND3#jE39%(wwbUWU7tuL{I*OyX zDaUDu=YlN?gOZgN3Z*{JxM@n)V|qi3obNKHNqLU82($A_!rihfJU_0! zXKGz%WnMes=!RcQj= z$|Z*G3JFKU80@$Iil7~4g&_>|G-hZ-&?Ms}5yZL()3*cQFoohKB_ zl&fz*)FPO5F{U{TtSHfd% zaxQqq&wJQ~H`l1Me#1`hmdLks2ib~Bln9aO`VDG_#4um|Bt97|cuG<8zLUs(0nj~sbS8G6yF8Feq7=kQ#WW$0CG85G)TSFATE--yY z|Bg*<9c)oZgauPsv@svz4sX~y7+Og~pBK2=ispE98Ze^C+B`-XGj$Gy8)NT9e`=LP zi8b7bMTo&X${0Iv!Wfg_6cusJAH?7<*ACRYdI5nFU=4Mp#zJL!XtwX5iaDyeIpz*KkVr|B7F zxfbyAH>{?MZa~kP;TVOL>1|g$1d9#04v}-y>|2o)ZL;V9 z3<+td9q455ojNEc?<C`ThBhK50B&TF6S*gx&G~V(uNIYwNac(b!zE zZQHhOYsI#0+qP{xSus{@8!PtB_wBvU+4r4W%6;d)SIT?y$Czb|($mvM8<{h`_S#yl zkraOONAe|UK+-I_6g6S>F?-2-b9K_O9eZns;j_V-XfDx2P97)Uh3wx|2S{b++CiYS zf=kx@Mri$YYg;%b6F}Kbi?mHfbZZiC2$-6rNQ@-Pt5JcJb`{);M$>oB_?HB`|A&1D)!vqjSPjaWR!c_Dn|2*oi`(Aub zcTv%($NHs2izTuH2B{$*_>Vv;ZS&M_twq%;!CxYlH-9q$9ugPJc9^LW>iH!Mj zd}S6Oby_2TwCzyB z6PuPR2pK@xo3$GjCguGGneI8*Z?{^c&!>rGhgO1(k~tey)r~h2HiAl;L^_QqnDY_; zT#kb+H9!q=gMww0r`N;jJB~V=1EP1xK9Sf@hhF<{jQe?z$TMtGdglU|iv->AJxDa% z0**2P{TLNT7%@-{$C_Msh+k#y*NkRk+L2@$13h9n!osZ%0!JSm+MwtcsOu3x1}ek> zdZh=o77$ARnc)y)%ScT>!|p`mNo(uOK*`QQMtQ$_kKWuQ90e)4;XfTTDeb`sS>f5q zW&Ei-0K7G4q<*rl>wm~dvknDFe$>qB%0#qQQAD?{;b=y&R6vn+<}&KkPdl0E*lEN$ z6-?7R(DA4_oS~UgaVRN~96)1NsTfg#?7u6z(G+vtt`mu8<)G7e2`Dq+Jf$cw%Dikn zPQ7N@59$dx(0d7}vx_^M9O@=RqX3It-u2}skvDp2s+GrwbFwXI867wDyEF^Qdq8I| zUFZFWt@dnb&YW2ppvXB#vS$?us1YMCkD*k51BLo%nMkQVPC7~TYkIf%M!M>JM<9H( z735~htc=9VHajtG6x38gxI!)X4>Z*#u~z@PE>-c3N>NYkF1mH9;2{z<>(+A#nf3-3 zu3W!SxOH4h#@(Zp{h$;IXOZ>0ZfMz>B8SVDtsW34N(2@C;q79Z4ws~%;|cDIzWSQX zMi7$z)0HlA$VJu-VWoho9nW@a=Zitf)-+9#UJww7IPBf zVn8MIIaTKZ>umkCf7TH}MFjM1UnMDN|nF%YH@wF(o$ zY&QaHlVHRnOnJt2WR$l!e?Dm>MwZ0r&#s5Wi3{s{N0)+PXZK1u4L|78!S^HBt!eqE z8AoxXsBs*@#RgS)`6cv0nx90-sl=T~JS7P2MZ#^qpAT6FPWm~F1UlfrT~(uznP=L? z27Kc1xduyv`;ugQFf<{oD;Mz~opylRpN*ca$ zbrN_e&Q)txrLtsn`*mDN?e{cg5$P2|#gXozXzN(YwK)1-R#`K4ti@BLP_Nx*gP+gF zaB#-*3ygRAc)>ilvIz$CrtI!I%dBZ7hC<*adB8Y@sL^mv#x}7hI_Ks&&PzuaJbfGf zcgA(q=UiBeOlQtHu$))it&IZZR^JCHxW;jg?3hU!EM6|Go}LbEtO4MzGL^T7jnr$_ zet7~LTH3M|hM-oJ?ew#C%7O0Q`0^!vs-aWtBXn67sTPbax3&9 zD;c|-1iGGI{D-w5`$iQ^RKp*Zpn3Fw1@_kH%D90R z7|l%w?8AAQjC$WaP-n*w#P9}J!Z$#9mY|=398$vFLiwoHxZ_Cqo=5e7MOge9GXruw zfqNA?IYmBQ_KV|XR~DMCB$Wif*03&CIC3xfvxqV9e#bRnlEpr+caBmY+)y+9&{|9A zFcrHc4*@Ys8_I#%az}4n_S=L-eSHlOdgJ_(ZQc;`-MhNsBoS<)P^?OlucmZg%HfkdBywSWu%4jai)}!o2@}u1G~hS(sMsmfbU$~# zRA#^fZ%?J~kYGr?b7g=!lmp$3iolKD4}4p}UfN%~-uO0GRWJT4Nc$TH{Dlpe=oy*+ zMLDwmHz`Nf|I%H``ae^Stp8_}|T*7cz7(4YEeXHSPSY<0M%ml*9u3@)sCS@bfM#V;;VX9p>VC z3Vj;BqYFJ%X_f2se$nmnRNMI0!x`=EeSdvl@ckm+>ZaT3rMu$Y!ege%R!z&i*j@P8 z-Cf<=qj{q0^PxHn6vsl483(mx*78L?ubiHnSKi7Ppk2ROf z=n`y@Qh|e59FOuO8goSEdX=e&rAb$3_z56=IZey|LsJ0NSlKD;x>Z?5Tu_=zFjiu3 zB_$O_0XKltxIxkUj38{{3U_OZIj*O7R9f^T)TW4Fu);a)Y{|R_Z`*Nua}eM*=4k;@ zJE`a}*q|lUrll}GWn9G^#W8T6Xk?EhlU`MyRT^~5NKCfOZ@Isb#(ffE-S}3wY1Z6{>#l)C8T%jh#x6Oz}Qq z@Wrg*9_|=13^CMkhu`Z$T|`UJvkEA7Iflf9BA5@0=!3IbxysK^!3lngVh#r+8L=lF zzyKQi!!9TswNN#Vw9!5%uSKO{p(Vk^EYH|bEL_$SJO8aJM0m$;kP`)OyhG2_BWxrM z+HMFjOEba_&qB-&+L@~k%EC)jTfCI;(O`trt3WhlRJ1_QN*KkEXncN6lL(_3tJ7GV zX^W!kyDsVdi}Q2TMZ9lILYA>=cnyEhv`|fQ1i^P#6H=y#;n8-uDXxg|L09<@h~CG^ zc=*9obR`_2OvZ6+u6l0Yf$Fupp5t+*%>Kw^gjG(m2P}jeh@!N_yyhRX-Z%U#Za87uFar8~ z2tZwMDNNji_^Hrg*-T1+Lebr+=+OZWU_mq?P;NLdTKaq|O@S-@Ygd07{Ms#CQ^tr> z2p~=cO?PbhQtG`v+Kn(u1<+M*3igVjKci5(`X@z?<3=*vA|BRAr`HiIZsS|N2gSQ! z1{oBsp6eX^7Rm_Opx6oPG+pK38fO@w_JiHOe!k{01bh27z@5v2)-bm#NRzU{ulI+T*kj z!uBvISobSdz1tDS@`O?*S%>s_L@cejiVP)rYEENHZpsAmJB!2(T2}BV@k9K(Vk+p5QRqEC_3eby3ns! zcKX_!i8ALs;aU9sfR$H(QjmtSs@ciIlV_~Ph-6}_DAk&;^L5HOVm5SOlWHV4m-s0L zIBk!+Smb|*mD?91HQBPWir9Zk9M?0caqey)cY$A%0RYxe4mvB@fn0+RhMcFnfrLU_ zARA`vedt4@d)^{44}U+xm{Ig$XAghMc8HpRWal(j0oK*XR$Y_POSO_vQZ#UPjmoRa;zT&{FL+w!-yYQo8Pj*0ii68oynh_4WzvA_X zP#X4!dq{&;0!VsB=%U|?3Leq4(T?a1(r1OG==B&Dk zs|t&UgN5-I^_!_V`2Z5l-loYgl|m{^lZL&^M$|pXAV=I=%n2Q08yTS#1`F0Sx2HUG zWG9LZXb!CFOW4UueHszBd3G5uQCi9Vpyhdj5iFXfBxy-PU}x@*1t2xYbJYOJD8o#S zD2UX_PtBkvYj0SsrUzg#cw<+8JfM-29{JvCm7XuZvc)Kw87Vw}3<6#S|D`aXIKQ;L zReUrs>0e>acK%v@c0&j|b(}SqL&L7@P^op8ItOv){jR<@af%&{<+Q!UQ(OS-hYJDU zjKYlWjrWfr=yvW^=j4YWwh|zwo#LTI#}WEzjXSAnqK!_vg7QO{Y0nEWHv%wd(*c}k zJGO4}vKh^<2m**_ShrHChh(jKGWT4kiAUqvoP%-HRJTWBy?7N1fJu*_d1gU=D1lM|KWt%@NU z{2!01l^{to?OGC0WyYJ8`U$AB_F`4kdAuOc{es%~9{Epu{T4z5ue9`j&`%Yf8CMb! zm4~jB>|*-BlA)3;$fQkohWC9*12S`8yN7Cg|jB(;wQ+q+4b8{Nm(+TxPIV zL7{e-cPv@lnm37>eI+R#xX(h2r!|VpwU?9>@EMV)FGFQQBynV*%N?N60FoC=!rW8K z7-qKYKjq7+8-%qi&|jBEE|ysNokv&Rl2vzykgS(gWaUzQ3atc+JS~mgYQ4%N4c<}JUwx+nIZ}p8_YjKYuBY0k?Z%f3c||jC_{TO z9A+sfgo9&XrKOFXAu8ecU4FQ4MTL?N$0tUVFI<@9l*Q9tE^wMH_SbirEW3>#OC0`< z-R@6KI0d6_hk^vOfL}>j=|lwLE6!5{&)5OmsTub`eU^&{A%ZvBNy<%h8j|WVPzEv? z`+<}uEa^fww&($P;C{;xC*K1KUDL>@^Q`d|7Y=KZ-{L3lQiy(Xe7Wc=!i#?NSuGXoBYy-#g8B_JG;-%{Yur(4%^Y=fk zRGon)%hRu(DB4 zRBn8VD!m(n7=?j5vr|ETy3uY*D)ZP?NcN}cvHK>SRmH*-f5}pn!lYyKG*h46`X`=O z(JJ%P$LZH6`~;SqqQVzfgXjVZh({pKD)}D%RmxduoTjLd(KOrCuSImi_}g)6wOz^) zmWrZ03xzdq2g+jlEMvLn#&bo}Vq>PNeT#eP99rO)m}m`$=U@*^P*RY~(iarqrtFl) zB_O7Ik*6Y({Iv0SN9jVNUrl7{;e4Ywn(R$HTDRavtC9yPG6v`5WaOK!)J#xA5)Z4& zR@?mrC8Yo{2@$;4r~K+OYIg5pFE5)K;1z{f@*kzo<7(_7XV13f0jy>491sCo$-Bt; zi{8Crh4Lj23*Ris2R?A?nEr-*Rh>jp9p8pt&*YExXRl{GRip{Y{{=4n5Au+a?LT@V zS^vFP?;rBaf6EvBo3VzpxsBytwXa4__*x9iZ20(W^xp?YHa6OC|E%xV_XP%aTE@Rm z{&N2j{5A#pcFg!&mYM$hT;Ol<;D65jw>{POOzDhmjU4Izw&?m#Q6aX!c(#8*y#JdavvM%~N3`GGHUEnC`&O7~ z+5TUO+`-(@+JM&F_J1ApUli+qH)!_n+dBvXPGqHKX)%e&H=P}(u?pHyO7oOUx z+-tK^1o+z0*Q@<&W%IW%t0L*Uqvlsf?z`jDCfmV6U(KA$47O4H=IOPXq}`^LdHIXs z2;cFt=P|p|ngtx6TzKvn3CS9y49pYWd&<{`&{LrvFWofxodculz>Hp9+wPE?0+I={ z0bN~-^6$0a9khGV?ycv%Rs~bj#+dcdt5;o!0TTE3co0Rk-O>HN$7C1Xd%a_s3l%_q!17ZSIfTTzEV@-{)<-gDI^)k2LMw>&_t$a|~KTTi%`LTRa{b z+{Zp7E42$GkyiS1kAe|^+K-JPh|{5n)1KALYKe#y0a5qQ!bN1=t_0_&2kqAbVQ236 zOfhwt%!KH4sy`LLOW>j9+!FlBR+Y+QwZX6B)^1`hSey&;z{Kdmp&8@M`2w_5$MEfV z&_~})hlJqAfg^R%M;y1L&P0v`y1i&Ujk?PbDm^P`Oee2$E4E-8tI=e0GIMyHRqq2V zjA*ES-jSMY?F}xF=iKEu6oXJuERf+inT3_j@%7D4;*EkH9V@M4Qs!#MLPQ9b5zOLotVV) zI_q7;H%fuSvpro$V_#`;5znmvUBfvV^uoDO91nn+=qmkqEyV^pZ9TL!fP6y!i9a50 zNX`hEg8$tp1eFeYd#(!xlN}YNzyLUQCr%H$aBe2&E-X+u7oGu48Yfl&2}M`*<29WJ zT>VP|0Lag0uXlvX7{p^2IF0o!|MV_)b8xi)itVy&ueuCTrOh(`<+&+>(w)^-@rZ`E zqHHgDA&gR&nugbytKwj_M53J{wpO7yf|8fz3sa>>GrAtfhNa2@$a~Pdi>1Q%ZxxQX%$F#ZwC$^;0Zz zrPKpU1!0i6nPj$&N9NMx=`la;l$92W!HQKzS;^5b^V!OF*LGZBlh>ODF|wvl#PFY# zqo`g+VfR5Hr(f8@BN|c4`jYFL>O<_f)MJR88T_!eqrG>ISPop)Y)BMfouhVOMvU$lwGu{&x!f(2N{vfp0TV!{*l?ueQzz~Jz`;a~pRG)`6hM50Rd*k= zM%Qs#uY7mUO*9eUB+ltBJ_jyKNGdl55u)5NeW4)R$8{x7dC!x!i-cA15V^!+Mgz#n z{4RrZjd%)d_H*sXvwoHx>b8DiS}tdyKG2)Yy<0-Y^DbG-_+ivoekIq&Y)DzF!bq~~ z?9oGCFk+_iM!KE?kuGE3j<6fRWSH6+$PcIk2Mk&YQPH-MVq|aqHs(bzfaZWYR)R<) z1C3TG$O~+|vF%(p55M~hM<8fh=+AR@W)e?&1@UpYd^U@ZT64U?KAO^C@KXjV8|rNa z>XYEa0oavO@T*eGUf?f`gBCk8faY%eK$NcP`Zzb{I*eYrz#=3)d_ihB?g132D(z8c zvuXtUMjAx8^2D1j(Z>;lXEcfIKT8KZ(%NFpY+3XBiV(-V zZNmOsI&m?$u9{EYyFLYcOgvPEpdrFt3s~yfh97Cb0*wSXSr`#-O}U&ZqbA3K?L7mc z!y}3h`MFfpk}M-;#ErUys&kmFfg@qt3jN5F*lYFUdvZN46u-yv|34+n*JBi4_r2ahWr|HKuJW+7?OkR{y5$;=T0j7 zKYmg}&ubtKF8OUr;jmGQvJJ_OX@tlA4XxK~E`A{ra|Ua0S@>E&*1sU2UG;_~khPT`zoKm! zHKvvJ!;bxrAXos%a8YFSw4nU$kOP+$rS0gh&18~HRVJvnAXb=~xLg5h;i&{Gf4wum zMOt9mQ_j%3a`%g1lG80|;#XDE#51nF>dc=qu? z5iv3|Zn%iV#7dq6JC{C4vBS^L2GCmU0;#s=29ui=Bn6?~CJ=atZA=TySb)@mTljbF z_Qn1eQ`hoDc5Zw#nLFoCYBM3ak-X+9jOh^AwKQ#aQ`TH64{=vcgfpRQE77*Yev!{> z3G{sfQ*nXa5s!l+L~ru^GMuVZLZ4Dl4BD#D6Adn$G-nqQ?0y;fC>~Pq$%uUU_Z3XE zEsaEl0r?!s!b>8&r)C@(S839LP4qwZH6Fvt*1(l#ekkNEanlBH_$**ZaiAB&eg5qs zC^G?vd+I=9sAbi2K-yyG%K)w-*a_{n;rY<1wJYqmT$R7WkNYR;m;q2JdFFD{@D6Az_oLGg$Z|2u|^bbp2rMCHEz?3CLF|=k+w& zN6V+scpJ^`uMC~IWIXq#hW?C#}rSD1sZ|cnC<=f<4|S1Ms6h*FH>jk)K#Vg zgtCaaG?g*rBs1Sd%ED_46{DouOllr-F79=6Pl+$WxP0eMids9}1j8@nU+tGaQ9fAw z^VSoH4VG20^VzxyH1pZZ85Uya-X0JH9~^vUU)PzoG$?%AT!HgsvzR?5fpROHqhRR{ z%Q?kEx-!qY?7QVV*#>@wuhm9w|AxQ1RHg@n(ESw(6?oHhRFYrXO%Uu{x)P)&=3+35TFt^u`p0|Rx+@0l(Dt3 z{T^UtVEXNj^KD}J*N+PR?Tkai!t!l+%E9yvaqwxF*qCWq7#P06+V=vJjh2m#iTT^~ z<=YCGotBA_{@cps8&gPp+Z~%53D}r^`!UmhPbJ`J^p{Bw$M+aUMn=}}hQ)8E+V80T zx=8cwk4pRP49xzmocnF3XkhnG!^Qt;u#%IBwJJU{(_bc~Obm>F`J(<6-uJ52gb|HUk~`%9AdAM4(4`y2Xiuh;Ks{<#ij|7Y#$|85=p+Y4G- zY5C)s=V=Q>SY$xR%M+N8(4QO-h!+w89|0&Rw2VB6IF4L`9#Y;SyRpY2xuW?&<-F=^ znsdooXSun4y>5x4bdlpCw*9kpTJ^F+bNR7VWtp=5v-fxd3u4jb!}{&x@eRq=!QqNy z`{{1Os|Z0vA%BsLBBbCKWwJRJ7_K+sPnSNGg^l^uMLK9-fRSYii$~v;D$>Z84jV`j zk~e+Y1u!In;}gN>Pe`v^14lPJvoFgRl?X*)C1jqGVG~vz&fAvM0!5Ap!F;#{;Oa%z zimZa9Mtz=RW{xV@>umt-UxX0}qw-;wLY?H0A`;38z;#9$H{;qR87Ja??3$brkS69C z-nkj>*FPR!bTSI)i7UD!Eb|@6ueNy1nen3GLfB`U!Ju^7T|u{t&3=tsn^-59`cEK4 zL?n!xKsuyvj3@%*{`}MD`Mwo*GxNEZLfS70Fs>VSFP~U`$`4o=p~z5y&e6VCxVM{N zIyN4>hk^3Zb(!)J_M!CoQNi_&vX1y>{nl#59h*?`ye@7ol;2umBjw?S^onZBIo9ju zXDb|f>kNPaS77@x^M_6mf>^L#B*DjmS-u2lUb(@|Ep~fJitOR>mF`LM^&`}5BHQ@2 ziVy3q;blvOHAhD(Scx)^UKf)vI(Z~UEn3aAf@!hg873_(m2`Si{QFcHg9*uWWHeY@ zh>`Jk`o7V4mb!eW*N1CnM$heRsc)g<9bRp%t-4KhZKn+@ zjbxn2EM?KOjkTg_{_jV%#QRU!(W-Jsd85HOH7pq=HabmucZUu-22Q9cNyd`X2>;v# zem$UBveGh;Jd${+EQ&~Z(_ae!t}tTJ1O(|rrrRc%rOL7yGtYak(8?Qds`>1X!|wA1pCXC<&G#MSxPK z5ltgVf|4%OR}bTFO<*FnvcVx$aXblmjjp5GW2vUWkv$}L|1$f=o7+_81Xh*JQRqZQ zI9fd#4ucB+pFES_G3PtEKMrrPSy7oaz z|Db;1!Z7Ctq8y(Fs0Z*eIVAkdsKld0FLWg6t}#3u92v*>kh~`r0ky{UN}0O6nt7(C zJ2oSf8)DI0OeLzX(mg>LZS^QsUcWzAwK|dzly1M92x9`zqox-7?MrfRESr_Z`qXOf z^nAZpV2i8KK`a=;Qio`aNy#BStRMc%=ztNyPZK4OMkty`RFo~h@Lkfx;%(TKPIVc- z2aiMw?ymOw9#4af4EC~|xkrHQLO8OHtojgoRh)1N#xI0~9ECUnmR1sTs0h>34Gc~k zaMw`Oh)H>}q3azs78w~8#Y!tT_gLr>=QT|A%8nq%ME@-D}mfwT?lJL&XHm;i+5fmQRp^1q!bw!yQfs>AR#E<+zxk3bFhv!q{;rY## zMODCMEPutxW^`~Pa2~u+L6`ma;K+!c)+#vvO17$vq*nc$j8p08aC39_!7tMFn@*Q0 zLu7(X|8}scC7`NtcAq?ScRvG`mN8+MuFv!%)8!hu z*X8O538=_coAR3QJT=aPoX{W>&s=bk^}S>*K1@gf{M zO>czfMF>{nK0N#ySOT<4y#d2t7aJ35y6Icr&)Ph)m&c{A$z$F}=fQ6VFn8yLh&((3!LU%8IBgYG zdMML!8TJOg2Bo}+4?PAOGB_b5v{oG?Am?$2#!`?Q${M`Pr$-XDl;^7MmZPQI5SZTNnyl zN|al+!PREI!!JBRTn!7W!6jE8i+x?I!(Si{(nF)J4~62sG*rEw zpnCUd$EO=Mlc({XPb>7NPIYWhyFb7MtCV5t?>&m7H9TGdZH1b4w*}Q^x11wU@dPW? zx~IK*px4hRcB)k|VLeS@hAaCGL6{(_M8k(A4Pk~DetxT;i@z@?PTWr&cjE?eUmjPJ z6qobjRm0SXpU4s+Q=IG&d>Va@#93#exwRKpYv`G_a%R!M!t!l3VUm=sH?Fog{q}Wv`SgzDl#1LYr{s5V-@*$j;7o-dL1Z;r2ZGd@&$_=8Ou+8G}obFX&blwp<8t^;Q z_(W*P8sh42SUnz}rr+=dh@3U!zZO`3RbcxX)H>15UGS|emiuvSntr`4A)5KpoF*rE zf60JMq9h`+>nqJYIF!4(`f+r}HKWb3>iJnz^ku_~#CGG^axBZZz)%OfKe!nhudEeE zf+Vgiot2J27ik#WAWoZ_pL(T1GiKN=#-c7irSQDp`O;&w?FMlw581VS8Am=Bt9R5p zZtHex0`Opa0%#Y^fpKBfH47YuF5ZypAJV>ZdvSn7&eP}|*n;rlSYxgt@~I{&i0vDDtau=+DyGqM$DecFJzrx2yl+&IY2rgo?np^O6>0Wy712(x#Ldi zrd8&ansfshp>rdq7n#l&YSBtu#4y+#_Baj(yL23s4yIihbANu?EDzXVAs26RwdUrA zF)JIcmS&{{pqrTZ8_6GwiRIngm60LQCvsDK_4BHmCB`FJRv! znU##fe4_lkj?O6Fw6>;4u~h9Eu5qVO-}Nu}wRbV1?d8hO&q@{us#i(m8i5mpEEgv6 zbb`T9CPpXN;OJ)N7rbmfTPO6yH7bdo!QNlng=<_nG?Z;lh`$T2xW>`%!hBc_X6^Pc z!el5F5ZiJu16*3X-lFf0ZTa~+4FfyGUm}GoMF0NQDOv|$Ap)zZl#$TdffIeVt!H>KfJj?Q5F)w zW5|)f-XZ=hD~gg!iabJQ*-bL@yJ9F!|4vB7g8iRCUSe? ze2)2((&KbZg^H6gZoKHuw|;AjBv<zy_w=p}z4);v|0|dU|Xv9+s}6 zhaiq#wKNXW25=#{FRflVR$5EMnAhHIo@cEj5o6dBOsIHmL|rl-Yg z%T=cyW<044lP_=bS!iRQ`T*a~>|+I*JD;N(L7jQs&YW$zU>}8uECxM-T==GY$DgdP zJ?`iD?v(skg}Y@NJc%B~>thjKX{uOm+xD91m^M{1v#TFo7@?r>HVx|MeMM+}T3JNG zMMFsnv|Ql}r5G4yo77Uiv}VA8e&EqaYI6(Wa_SXg^yXUcG|p)dzWFXlklPxUHsTn% z5?N@{`~m{yD034A5iOgU*=)ej6c;zkY&|$yNL0KBn{b!QTwbuGpi#(S7a#+F%k%YA zae#XMNgToP?&J_*e|+3ZfhmB*-#bbQm5s&gI@BP52h)d_IrenB`YsY@u+XhN7X4AQ zKV)9oXu3m0p33J6aG3a_bRiH9PCkR@vn5gy_1t%h$}u{~KqI6b0FB7e;XtG{Ooy=SEa9+ zM3nJ}r&gXnE7QF^`ixj9wN;kfs;yQc9}I;(O#r4dn~3=YC-K&7HoOh61R5Z&1l9w@ zK`BePJV3*O#>}eSd5Fwvam{(q%&BJmU@7f@)ELLw<`6i@dp8=55gH}b^lAra)V>1> zHPSQ(6S71+l-$u)mpt#LvBadf$|X4lu)uQkH2#eiV?cWDsx;BK>Rf-SFbNloT}W!) zfa3{d*fsDoj)MB?jtr_Fhr*kFVSZ|wpm4@ae13oiJ5TgVxqg#vUG_F>8LB&r0X6h+ z9z?syXltk*Nnf`2Bc}Dp9WTA~*7M?$qHZLQ$XImWdf+A2QnEHS(g=;BrM6p7>$L79y5h3 z2W1o%?^Th|`JMc4k9TO#&~J~93uqsyxn=?lyW7QI0ZGru@SGl`yil9C?2fZhNoX&y zW;{pzU=On!&ntFe2|O5Iv7HMWUx4CtRUA!{gyIR7z5%WQ`cW zwM>yWjS1gtJ?aF|UiJ8KU|GKVy;Cpa zDo&pb^>F@PRzEZFFc{%*3glo7)E%f&O9FpI_)(~%&>nw0wVJ7!z_ulg@2=Ge-w%GS zpx@g&i*EEJ?KbI*!P}m8=sOZ%RJ@JWf^6z1e*b*gSaH!GKU-xr!ImuvMpp)hqIFukFOL(Ube`uTM_W0Xh&4uPuw9K(6>+uqk28Ghm5$|#-RATgI?z5=`( zQwdJT_l*(cTOs7;h?tN@+(PR@5?{v)vHWE6jqcS|ZUUBhxc1$Fw@nnYV8eY40m(;z z#7VAuZ+|eWpzOideF)cZB@Iz6Kznu|$4-N_^pB`~@07a|J1GY?GmN-se_U-O%prgL zeGnzmFgmabS!n7BA0YgzpVX`9vE*O{Jw*4`YJ>mmR&J-+(zcKMX863Gc*Y;MXs}bz ztHv!xV=Px>6}VJ^)fe^8+UCRN=0%8aMJDD_Yrn2lbDcd`!K`WNwSw2l>25Zb%=ioL zBd9tb-13>ghp;knQyzhX2D6Y5g#3htv*}Y``qex~_(EERF0bpaBzlsw^P@rq+U-D_ zfMi88>W;-JJs-57m+7Q9^|ZVm$7?Vy=nDR1J4^%$)iwV?fO$;FBfg6^H4FP|Q$sNvu)d02yj_00wIgbjFrv-ky;@#zs50_$9~@_s(=_tdsH1>-&&s%LWgNw?A=gV- zgYRmm;qhy)*EO>!=P<<{M20yl(T^9qAIZgst7K?$=`ACF25Q78wdRt{IZ6{oN3l7F zwhwG^IfD%CIYfRd>R6FE{bc9+nTMX_KNd(cGM43$uIC=5_X4FEMirNPYuhj(4*Ela zrtgu4^j&y^A(3o;U_tnYkm2pP%ZT**yEqD0TBSRN}A$9Ou^W$3#?RRRskVrJvNDJ7xkokGZoiUH&<_*3}c@ok2M%WsRz|>6H;} z>!FG(ko%^+P2#wrvoGe(6HmAmdWfI9p$YbgNWH1t23PLyxxN?;dzq71w_hK}BRJY`e9GIP3vDPJ&XpB=kMjll{Wbdq`2pq;Fls8bihwa4 zm*`28Vn@nQDvZJb8Wk;v?CT&zNjG<{><@0eMyrI9##q;%t8BS|pPO5IykZ@W%lPjavIXi_`KfDT?#`9JBJUoYQx`qqS^7Az`I-aj@b-K25<0fYvswf}>4{c@@#n>}+D}oj67q*TM`pCh398g< z+ol2rBg4^XNa)drsY)*vB!L{)z%1e+Xa+LDIf3bP%a?@{)C!$P>(7yfB;;JW40qe( zO`Oup%DMbu=;BdcbgwIldqn@^90L~rJ5iY@*&oIQjBSp{4b6DU$ zKqxPXR{OX9+t-&rfAqBwzL<4@vtu?@9~aN%8sNR!KC56IVb@gi<=z^8w1Kvg2mCz1 z!<%}Ph}6$^vV(dIVt+2@pW1iDYX^S<#Q^)T4&uPlW{#xF;I+Wg&fMjMUGB7d2y=XX zlexW%VqbiO4YBNFZ!L&G zQyNGMuH8E94)cbt?Q!cF5C*-kKP)FL1-mZRxTh(di&JB6hl6H-IW*I}S2{-b%3oyC zz|Zw!gOvc-(Dxg5-wF|at5HnbQS+U7P#edKHt3w7je3B45z z6LaUcaJRHK$ecGIbHo>Tws5b&(}~k-<~_qJEs?1z;|vp9Iv{KG?*^>Z#0!(hj-bRM zsi*{<1Xp4o^OPpd4$(D|2MIpNbo2tqRrEi~W1;zfX8+8F3eg4oFhfOWuv^TPl_;Ex z^01r@E3^*I51b9M27j<$q!tQ^&EQ;OcbnXo&wVl=8kIz^vL2xsZDHTNtfbZ7jh>Cv zV7^7y*G6@-KW5*=-Ei!d+#CiD^H53)L8EOc#MocB* zO(-5;GkG)KY)~_~7M_k~7Ue~CXO{fILSx~(2wyNQ{K0#cXeQyL+{D?z`|5R{`)$)8 z9j-8JW~hotwRa>fyG#VDc-@cbtqTVEk%|zcTf!#>&BZ4he z#&A->o}##WuWpYmIevm|&z+GW$wwM98ncFUhquR`C7J63iBE*Ohw@vfZik_OeJI>0 z14<-$FU|i&)P8c{S;C$=pEOS|!ia(e)SEg+sGQv+f*n_8sxW%b&1zBl)!iOjcC}=^ zjQf{Jvto8qW`ojHQuH6eP2NaGp^qU2bNT)m|DMD`OaoA{!vRdXL;ndG4GN^gJY@RH z!mK)86j96yP+e>j?4Uz}?W!B|V4lkx8~Qv2OZ^UyjW#9hXzAbZiq@L&a0+g?pG>?b@Bo`_5W2aG<4* z8A=>7QqZPDmE2i#XZ0QH)hUa0UgwlbGFYZ9=~+{%@TLx09G!`l)|OWFnH-T51`S+* z{dSU6klAS?ig|;OXe0sU%p5%0qf2|?M=$b9_$AI8;J4@vv2Wp!YPoP4-v2M2=fOH0ao4k_7NwW(3+WI6uTyf z22H?G$}8sqa%^Vvk~{6;(@KCfD39{2wXM!MispcMm)7ODYMJX+)(-8N)#b8O8?+Dw z`1(YES|0`0d!8#-RYN}2`U12Sz)OZwAImFvEeCaPhNw*j0Sfd}diTxrl!v))1{Ys& zU){Y;p>8daiU(ufNcDi=@n;rkj{ZkqxHM^v4nQ*kd9bU^0PCVx8X`Rzkf>z!lFbsfm?b4k&g!(6y6 z<3FS$B+s;W`f!TYo0|oC%nBc@mckW82YIsM+A-nIH3Am;Tt9W*H{UKMB-d-Rs`-bW*_3dJoH=lq@Lwr{*)8j zhZDtt`XcDBi=*vL)t*+uh1%T#=4m%w@rW`=nyl)oZ_>i!b4c*&La@EpHkhQ5^{tgIbY-F3f=CXpA0}} zwI+1^{J|lKLt0+D7HKliA>JG4mYetp_tsH$JqxCaj&BoN#^xH}|RkU0Uq_xF4E zzB}_~t$8#53~OyVyH9s@RrNl#S6H8_Ucg!#5Tfq8bApmAz?n6)v)Rbvp$^Rm{|(cK z*Ttg5m)$v}>=0dtP{)imG4VisV3iAR(AXQBl8_fMg#g-+74);<^$ieFrz-H5~P zPz-EqK(e}U)o8a_L)<-L9nFEq=096~&4L}`CtZhcG=Yo*i*Hva;s)4adQWu)>l-5; zk;g@NmK#>ZjnodnNzIG*CMwTRzobQos2#4w8a%)Q{2IQ`OMKoPC>H-bAw_>MbS%1d z;>&`+YD-ogDt+Utv>ix}Rng-&ZO%*X3FUMZKL`09P92#ch&^0;nFZg7u6A$c>?ggI z%s`YJ=~BY)?|$OFcTQEfqD1GB9<`PVN}@?AYcvH2XNa3LLH4TCs3lY}TiNe+I7@b; z9g3kkwtH;&K*jl%yRSFHfs6qxp&DYUXc`a*WNpUt(uPnyI|FX_m2YS9z%YN77h1u- zV-P4Or;B;(N;7=0u1r_e!*gL!gxj&{ND@-62%ZD(s*1AO{fC(WqEMBYKiGv+l{=6{ zK$FIs4dR~kyb8+T5azv1XP^XJ9AeN1%=v_VmSPXdrV2d2~J;~{n-bs^5nkpw7kTZqpD^CKn*<8;SMpBT~@ zc^p8i;|A4#6yFN@9ZEAsl?D(YO}^eH2eWNuln`tY0ABC>pHHMG!z# zfSs)44pUuy#-gdfPwHO{qw8g4*kWhfcWVoB^m5;MS49|BHo11EjDl_*Li{HJfg4{gi)ZL3=ZU$7SCX&7Yj6+D)2UIW zb#gc|WcxXYs2>qds6Ox#ymi0zx^P4DX^P}c{v?4tmsm=w1H{-H3pEL(AkOmT60`6b zxMQyOm>%FpAIjwlcZw=;Tqj4|L?|eMaKa87V>?gZThpWl4jDH%#mr)=i!0Gyv&-=- z_k0WGnA2FHl=FY@zJr@`k?dz^_;j;R4}_>Akl1RoOYA#fZc%rxDoRlJ_U%WdUD%57 zD7Rt5$U!4Sm08o^euEaeP9k1fm~B^0>q6OD8{_EK(Uw-F9g>X$yJvu5YaLEaT7X5{ zq;*~7ZU$xD!nQ@owtK)F)VQF8S~2und~p%f)VE#qS%aI7>Bp2^(5QeWt_r#8!Ki)9 zFHQc@=7!-WZ`Aj#E?oVGH$TEq*jbk^nOd@G!(vAfVAlZ~Jt~7k4e`)(DV(JczP+iYs}p+OrKIuHW|0xG6!{~{3g{Wp40oz8ejm}}0sk+(AJTB4=kI0joq zhTdPZ46y7**PXOahd6eRZ5lYz!4%5`rq5d6DN}`>I%pory4qM2VKSu=B7l_)8j)nd z=l49CI=#`gWuOEKn$&t8jmQa!IZKyBx^XMh?$k8k^NBw zdVRpPLWvwvAqhiEr*6pNB`+PUjQpmE;Qj(F-Y%-2O6)a1+Pz{e7=F$IKFQeIjq zvoS+;?0rD&j{~t}Jqm*35U7<5vS}rx4C)GIB^$IuaAheL(OPoqgUNV9Rv&H`y&2_{ zVOKZNmr-?96*XNjpy{GfGQl9P4P6Q+_=4qdd;rf@EP z&D?Selcd7`K`>R#(o-)hhsaemH7SRYDz5D9l4|I0BfTjboY{9#mB!EssQTe=hzX{E zs9wdQwtrFf8<$L7&z7F4d>SI!8_aqf2QJ!QRJ#n45==o)^H!;#s-{E=JhRL|saq9? z{dQ3)rdA|?hW<@T48G<^I28y4Iqe{zI;Q0>PeyfhRZY`rE2(oW`cFc_nlvej4J7)? zg>-BVEm{VmiRE)}_26_Ko-tJ_-P_hu>>-OkNXXsO2S(#L&q9SN1+Ay|Fmy~?IOM~i ziN!xDW~z&-1s(~adJ5U;rROPWD3{_S&tH32U zji^#8UjvBgQc&h~X+Uim`FwjfY|K7@MmI)08RZhZ+hIXa19ysvGdySY3#OF$I()ojv z2QjsviM^324Kb7a-)vD!J9A=cNfQuOZ27?h)T!*^;9z5F`xi52CI$h)&(QF{aA@LZ zU>cPD23kPHUR+W{*3f~N>7V%^L|L7fgPHa3L{mG^GFEWFf2Fw+|3eP5u!0f`K|?_5 zm>SwX%aXLS1X-crWN-YJM>eyxGXbTd+PgRzn-Uv=6t{z8VI?-P1SP`0+&%v`wl#Ek zp8S8qQdME)|7s+$iK!V#5Xh7l&imOx4F4F#0Gji!5zmY`NEgrymKSA=?M+Ob9Sn_4 zoeb?jXPUnMo0-c;{9X+7^X!HH^f~LxEF-i3aro=3=jK@k3rGetGbbw_u{Nk>WqZD5 z=K9+JSVW#1w!iBz0|3uM0RYg@zjrU4Y@#niUM8>!zT9#CZJ61ghcI)9J>LOeL<0fO zcO1Z%&SzoF9PBR>UWTy0=mZdc?gah+{aM({JiyC5_Lq5p*Lkl)UhdeQwPxmcna=UL z!i!9fXFZwOUOL%cWxjmI{vsOis^E(*951GDJe$eP@gkb-Wdhst5CF@I3s{~z0j$ru z09c-d0a#wV#QMA*faO_10E^IHivX<83IbT3R{*fQsLT2y`o+o29M8G{Ui1X8z07-Y z2!QQnA;8P(FMa{Ay{z!+0^rLA0AJO8-W=u^1({#=kNIT+GwX|ez!&#$JTJryeDNpi zi_xsFo67OBD=+Q=ymY>r^78ZmUN#N@cvbhspRBJ>$cxc{7b(E!1^{?*r2D&vMlgb-IoUV+W8`r6|`~B z$-)18eL+#~ISlWDU0L1)%7Wzf)KoRF}SpSc(%pmbk?udyYC<6ra!f+?Y|nt`8PHFMaI7y^shI{%Nyo3!A4Z% z-x6#x9pnN44wb0?3xiTSZ@{4Mz@(`3X%$0 ziEpf3vKjOe5)if)n3~+5o5fKj=O|y%oICI@p}#{ZS>|v$3(Hv-G$stdpo3v-(|SlE`H&Sfj4|ciVnl18O(r_Kq$9w;WeK$m32@fQKTTc>{aX{xOVfI+U@qmLYMA z-wjc2C+^*p)=D=b;;CE~{DU^~w@uxjl;vC5-8e9^E0CwBuG+vG1&T6(@R1t>uI?T1GceFl$0!gRn_;{z-}C?O*`ADiot8uTekQz%!S(F9$i|~ zX|TEIecHaX)6=-KIqIve*qz;;%6Qt+S>nG*#q~*Lj*du*U{VQyD+@ZU)g&8!m~9JZ zALn8@YXfh_S*1>rM{=|t#4?wa{q(grW$&K}J;rLfy1KeQ{j3lz(a&#n*-F3cA8=V=OrT?zI=>Z@{=oFr{NQ^zb;% zCb%Z_Dl%lyYdv|(EMy8J$)B*3FBure%uSEYF1R8HE@Cr*rXqM~!CJwvxx1E^|g`tg$;f6s}Rm$DM#H#~wlH6}-V z_kGRy9kelAm^HqL{Knv*!7BZp|7}wK>Gb{@Psm4XcIh+PfHW;`uDL_6EKY|*Q9Sd_ zEK5_2rWI>q-^#_7j(i(bz59U+jNV*z*VQn`yBpHSA;OW50(%AW5Z$8iz&uWd4(Nx; zD3m-=HdGG^is^ULo>KxF>V^*=1PHtEYf=pYWFS1(Q`g9VKwU)lZVzJ&W3l32(%+DH z(cfKPHWiT<$4cY1I@C%gq!%XRVeXpBwV#HHS(mR5I|oLP7m8nn4KrM2L@w`R52Zyj zVs5VYz}(qGAes;h!exN5D)b-=)0oPbnN2g%ViLW#Z?)v>zqJ4I$-E-1lfnCbPti=} zDGDsA<$%3>r_}FzrxJ2ah}73PsE3@Ashc z3B$dX2OihQfLWuc{heJBWVMQEddCu#hH{lMaeD+-n>m*oxG-`$L zdEu*!n{NniHVogt8Jmy$vv>jIVyS3iz`eYH;+mdQ9X?~agHgJ{5ckG-$t(FA)~kh%09&yV$~fsWwi8&M`uHc#qS?eK01OE4_=J=i>+bU6SJpVP456p zHPy!}*WR{S$B;&0QuDu8AuRob>Kw?YL@$w7gd@ty?YT@^T2!_DR~ODs@8ULQH}1Y> znvXJml-qr(qXfFy_H5pZ3}9jYx%|lm-1xlZw_f!d=IlY@ih>sEhz6!)x;G!?sFVyj zt_%;7Xpl9XcwRtYv1VuPJMOH(@B3o8oO1nuR=+D3>AC(&+sJLY>_u}{Cas$vQ`Pj< zJ-phtV?4lBr2vMTGbJ`grbAc8G@x7e$9|VE=%cG&(Kz>|(6m2NEVw_xV=*W&X-(BU zjS>Ipg?&rq`xxxaD#4Y$#Vzrf3oa1)Mpba+BR8caBbmQqAxcZPRcSPFg%JX$F@fJ+ zvikY*2FKw}RlCOZQtJ8Wr~4-7XsEI2o?{@;r@@k}9}npBd!)arDkkxq=x6V2@tx;V zMVY4g*hS~oD&OTn+hpm{lqA#xh4&3|Rc~?_5&`!x(QX_OH@%A4m(utMvHsJVw@9|} zRzINAdOnfYax&2|p7ZwpOa&9x51^z`(Ei59NHxjx!n z^$9(Jp!7b>c?@6m&0Ia|>hy#uKhFy4j6Q?~T;6gZH$<;++7%-Q@k z&4e~@HUN|zr8G&Ry@8D%OXR?P>sH`GE>!_}uF8%s%HSi_;Mk|~nKtRYJRE*on7u2^ z_V+0FydcsfrDPv?FY1<;jjE6N&2#E+?h4PpkFi^|<2nMRO9hvYtJI|583fU*V!cZrf3>;Nx0;MqwARz)Iud31{-s^eI&b2aNVog+TgrO-V^9+*9Q9n_J1mezqRU z4RH^y%0lh$)EVEjnS4oQ%{-A~`=EeeXF-6VJiHuf!y`B9O1_T$aQIqVo6Q+dBMeym&I7IR%(|5qpr zqTK9(e2jRFs4}DIBy2uq=Uz|Q{Ej`PQkA;*(fbEmOH+2-rXNE_?IjU127@T0N10DR+cgWEmNn4Sd0QT%| z9{_vDr1Wtr!_`l_>J&on{G_d~>X(O);Y0C|L*El;rPO)_gFT2!%=;e&)qux29n82UVs;(n5% zLIgJ>RU=IbsT9*O2Q5GQWizAIlLOv4WH(h`yX&mnY_0HLbBt!lnrJ~SEHmc3K^2Vo zM4N(CtB=936M=x^Y_u!slp7csIgMdM+k==GgI%TL>wc{3wi2%%pL2w5%&c}6$1nk~ zOy8KH(?=goZ^wFc6$d_M@JqkTy@85OcN8ZOg>=DOK`Tlx5Q`;DPcGGHa@CbOzlj*V zFeh-hD1=t<9^=>{7+!^;Qoi@P$2D^3Prj6)Jo-?eh^yf^K$xCEBN;TwNakCfWK>ko z=G&R{8>xevQ=*<9zV-Oe$9L=Km9ac5Xj+jH6ckruJ7#0byQaojpV*KFgzWWV$1_tu z(M^V_*>N~?gV?Eln1RAD0ketM=W=uF*rSZ960-Y_{l z$b5Hi>$vV|h~Ibp5}M48IlGtHfzs8luzP_SRtzbHVP?$ z90|<*PB}fBR_zYvz^6awWH)yGc(^*@@~h>VMincQ<`oHz>q#EUMe*fHZntx62K}&) zxp+@zyG1d)Jcox4np}hE>U>G30Wutr7`5Gw^&82p^(xR-Rmb?EH+{ zAQ%ei{Js1h_Y$^=`DXRD9U#he+xl3q+GgL~+N!^~gl2EDM-Uyq6oE+0L@hxhemdT7 z_7MPK&Q7UhMpMLM?$AePes*Yo;df^=_CP^3yPh$&G=~I_#Zn!IQ1Nsh-DInUr$_wf z;)v^!#P{^jz8T+Ms1E@;x+3$Olhchs|CV0Qx7^)R1>A})9|Prl`LcXIr&OL?b(x&+o@o{kAC$oBq>K8VQ^F9}E$Lb`x{;?_4yVhDEL0PX) zA5qWY(0=50gHMtHh_>We+x^`kKY&%1BIKqdU6dj;hwVRn?`Mo|<#;rQ6TbwPnTP=UC;L+jmLyp?^jg&4#p^8!=ZGXHrp+GuBtohPal2t>Y*Q4MC zuiuvm-vh`t+-knx*5(DfQ)9Q#H-GpaqOAt>dy6MLoSZ1rm2_p;%(oZsac(|1iEcNh zO5>@4N-s~ujwYL2J;b{JgZOvHTNQB&EffAII^iZvtx)mWMJZv5+e_DlXX?Le!ACs( z;5s{V$~$30);;KlchT75Lo<|eywq-VTQ(C19OnCCq$w(T{pqeOfp1|HXLIU&F;sYk zPF?=fmILoaXcOXQ1eyw`b!LZC-`3j(Fi5OQR1algEevfm>vq{Df|Qxb@fLDe1^JP?@2t`)PCpUbm6VG!0~ZrU!b-~XO0(suA!sXaY2b_KVb919RP zld)nkH6c$S`fQyC8RAhIwM;{_Rrn_=lG`qzZV)`Icgy=HY;sV{A2J5!@zNiW?1-OB z{O@b9-SHt$Si8VG9PpM~(KG6NKDZX5x^EuT)Z$PzBkc{pJ7MdO}s-ld3lkJ-$$Kcem zdAC^)vPeck|2{X@;>22@NRhaK-6eL~2$cQs>FE7Yjskq~4#GlI0m>t*ni=M(ikX=i z2D%yTlP~#wQ-OiI=8}x5T8fjIA?3Z!s55fG6BD2QWVnHxe`jc-vmU*d;d+#8S7(rK z!9MwFj?wyQ)Lh(J=mgM5wu8CjE-WXr9@B~`dTWA2BXMhI-TSk^YCG?qw3akY-&2yL zUs%R=szRm>troG*8+Pd&;SpBW6EQO=(0Shk^*n|M*QaM7KrZFWk zRq4SHsO(x`fD8)zJSnLHG+x?MVQ@``@lk=)HT$SvYM)bi3=qc?A7OXUGR~mA<$mz_ zpHDGA;*=#-LlQO>z+QNiD5=3ZixJCCTJ6b;27La+4D|(dvCAu6B!(@GYFu*x%_3MQ z%F16p?jFw_$=P&QLHi?;s#HwbToa@p zKa-GB%eP}L%(r(xijh}JEN1`mWR>b5@$k54+-eGoA)4hrS~q->VEKHbe5X8$$VBjy z{k{;zU1T(T5hV}hI);-KH71MCX=dPO!gn!W4y&V*Ofg%W2K`j+z#`ct$eRtuzXTQ1z#v8ZE{&jw0;R}O&m+Q{RC zp2p$_DVsPUpq!6{O`ITEkuOCfhQyC|(6Jia2%c|}cr1+pgmp%lf`iREHqr)ddN$H| zD-?~U<9yVO+tdV|w2g_1n2$m>NaC02HnqI0>|qP^jpBK;rSQF1*Z|*yoW4c~iaKn| z1gu*H=nFC)E5S15!?5{a_qQlv6$3FBhAMIInLEL> zaJK^WG1K$wA?m+(CkC+}u1`U+DJ#&_;|t^wh8T#U4L3j}V{#{kaO90aU?6$l8OV{1 zH}t&6ob?K*PVNYz6+Haya&yd3DacW6$<5PRBGJd;T0?PVK)knGapJ9ZYDsIr&WL4A zS_e@P0q^kmJFAkoFv(ftP}oMfd}it!q(*s;@iE~nmeq%aOpVMr+XgRx!Tir=Wnl#D zJ@AGt>6c4+>JUaAC|eb%)pNH6>JI~!zki8>>3Nijngt=MZiVJ%UqT=0A@Q^d6v};e z#i+D)vMG8C34|0)6>|rA@fuVSW1}dlLv^EEDw5nUir^jwh=Eu9{x*d)x=zi@?_vx- zzHNYLg$U(y2@h{8@WH2qcn$G3v)Qb=GlcHUK@fGG1(wtUTNlfXmKv>EHQX(2J9@z#mZjraWXv(6K@FjQ#L!>hdFcL=uo%@HcRd6PmD2^pG zaNHp%v}72>s7}jw8KC7(%9g&}&kXm;$lFGB%)&}$=?^e@N9u=cB-q8Zj$H?fbKYHy z)f`-s#bRlr5=7jmMb?Hm*@Qy4I!2-&T}T;EFH#D_VOflAQOHF?t<^94eS~Nbhr}w+Z)_*JLOtdmrkuL@boAULimQiAC$-Nz}k1Os_ zLbR9(QlzFlHVQcfM?>H3dqS6lhbRY>BMb;ywXcl%2{BSq_uCP5V(`Oci}jJlkInd2 zg?lJ9cHlMc%Pz#{&t|; zY&u*4=3Zn}wYb6;rj%v;=v9_v`}au?XXn19b_L{?Ep1+FIhc9ynPrhxDJ%>X4T)0#Ow+dD}^0 z?@H45WzY(B5euN)4|+XJLNLV+a^)Ad!&M3(_{l21jL(xChSLXr#>9?ulueS7=Mp0? z56y<%QxCUi7tog9N4dQ$EtFWoPOg(lQW3Tlp+?KliXRa0GO2%;-M~C1b6lFo4L^xn z`p)!BZ(LNI0{K0O#ODxmhBHdGAA*eV$$<`E!r3lMLq&3wzGgdA<`)E-u;-^r@`x1* z)E5#%*ZTP+)ukWU`|GD1*ax7%|Biv$6WBnH z_Z0dr215hZIbK3rlGCI@R9bbZWUyAgTUAIbOqf$yPOR1s0rSl6SnjmyxL6qXX=UAp zd|Sv2h!aQ|?2U@@LT=PCM#w5|6lGkiRuP6^7?O+c^~mpYQTQ7iIifsPsXf*4e!C!w zF3hNDiWw`4n_HGtk0{b5P25ysQdCC?YxKsskn&mQf23FhqKYSY@Kd_M)RVTM@oGq& zn;=sF#4FExK7=e62KiJ*WV;1Uw0&xJ{;nQZTL$QO9F7}mI8XME4;k9mxsLa!RV3ku z_fk6=M$_-nwcd@)`WTYIr}iKQqDS4}%?oZ0=EM#^{HMZ^06$Ofmp|E4rQ-y5=P`Dx!dz)aWj{m(`O?@PrU5g66Veu$|q#YhpQEa zidWw&X@|zkxcnIG)I(&k$_g5Ea7p+2%-zgWmkZSdsQAlgOhg0MG6MsM`e@|Q+~ku`(T<~rA#TAbc; z`D4JHj%)*YU_d^K2KL5WG0{X8+K6Ko7sfsFNNo)o(*~}EOMV=e`~t9~Yq0rVD1p&n zH}irmQB#w?Rms7n~hP? z1KynmQp9+0UEcX}e1|(Fv(udcv-g~Yx54Ilb7N4PXK#iZgG%!6gf-CC{VU?Ixv4W^ zS*`4Uf34ONSRTi}@bV`S$69Q&>B<~~5{h|OMI#~h7OxfTqevcQ^>;HW&$m0ppEcH! z8zx$_3vgkm^C3h8*Uq835y1_U-21SE{m)_%>$L<+#pLR7!@-H0DEIb%gE8J$EFJDv zm2%)6ojH!E8K@A$B;U;19uxms(aUUKkn=Zlfduy)2g_H>jIm-&i|tLFL2?SwQR6o? z*@U>lM8YWOn_0I;j2C^IH%m#3N=!$3@ix>6713`OKuGq;8p z#Izs@5A95sEfj)SX`As4$h|2y6Y5kH{@Yz47p zKzLSpI*e+b@sL$C=B$pgnPw5ozD9d`CHu_up|ne(O-et)Lxs0%`cEZAWphKrP)XzZ z3IppO8ZnNL+J(TBow~2v4V0f2hG)|>d|WC8tAkkD6|GC?X7Gj>B!L*XCaSmYWasjp`^7$%B|J#5ZEDO*~lWnA`y3U${12W5&J4H!)T zRCzg7)CdM{PyoY(_Aq9moU-f=>R}R|by-BrL3AN*R7d|n%ANp*Y=j`y092U;BCd}M zpLSX4Y|`N{3#Ca$iQF*0iD1iU37aLtZAFV(@k}DryrTW2CBp~Gc|v-_+zl)1XtR|` zZft)K6wI}FI092}IE%HM6e+P8VBpu_*us93h{!K8_Osh{xQRbyM5x(j{F{4oY6AB( zps&bB*&;7ci4tndC&23ltQ5PIKJ|mW9TABx-+}o00WX77Ki)ta!H$G?QiXPF%sWzx z1QslKh!?r}8@4S(Hp!R0Q8JTe4Tl5SOf`=4tA9T8)d6Ip2cMqujTYSIdC`uk>n^mtel*x_Ep=S{d<_R{2pf&|;==n*5 zXI`w{s@2DOz}`V3Uk z_b+YA&ca3v0JVQ*06<*RvkXplVouh-^8lcE9M2a!=qymqzvKVPV+Qs8l?l53t^@ol zn+w#(!U5u-I6z|npenh4*JlCEWdRl9Wd^aY?8ICEP#x_?2d zS1b%<%)hq!pZdF?6Jh>^V*Lej|9^<~1-<>x5ba+Y6$H@&SYFA@7xwcXLiPnOd?jRG z`Oa6)mhFX3dz@mUx;Pn-sd}UPsfj(cYeMKZ+m4ETeD-HPqeg1>gzM!iAu(Yq5y~41sK6{}r z0k3@S3)l&GML=H|)qeonf2h<~GV@jIXI+^8fp(uUPrxhf`HJ_x+VIMgzM`D3$S}t% zmE@5s!TF#ErVWj+V>{}Ic4{__7jmie!m<^NHPo9ll< zW#0c!-XnjZ&;R<$_-|-T>3^p&U(1~{2-(}1{5Mo407PN}pR1dLs7x*ZBM7AiVVR&X z$im3Q#s;c}4yt($U}0otVdr4||A5N;n~Cu9I{KSq0D8~-z5TZs`>#xef85Ff!bmyU z|BcE7nee}K_D`P{{0F?5^bR*bBU)H6=lPofYx3{aA_)XMjn;`^Ul^98emRgY$O%cj zPZ3M8ktDMgbIf8yBtb-`{@nEqf)~-!!V7N5Fu;{-g`pUpfm040|9s0Nph>-aq*Ec2cSmm0tz( z`|fvSU#~}7CoD(m{FO0rsg8GgDJ1n@zUe5MS22sb1B%nsM%oKj^c#=9ohlc~!W2O7 zJSCsf-V(5qsi|a)0i9S1soZI=wdUFzC*P{Nl{dyHoYGYK_{jR(vnHqmhUPP2Lf)RO5jS z#gg=PYF%)b31Xf#wuij#O2VMZCEp1tXtKr|6t*i zfKbEYPdsK$BJ zb2GfR1O@g1JIA>mum<*31HL!M&VOWz*}gYhvyD0DFnQ=^PIVv|W7ta;^>>**|3EeuNRXc@aFf|M1Q+7i}Fw!@Z84Oeu!@hYLx}b=KV;YTI$Nt zHc!g!d7LR1jCvR<&)F6|yibI|pm^Mtf2S7o-0T!AGS#~*0~;PwQgFcFoF5i}4$7N9 z4}lyTt0#DWex|yCC_o{E#~J>pO>7%JXbvK%OcJ7{lEGbvH_&q4%M~LDS=`{)r}Vsm zm<5IL$^r_ec477in+#P*-*-6i=SJ6En&rF_i86VdPVn6(doANoey+rus;8>uOVwxJ zz|tSDDF|B%KS)V5$~hp{;TH&oc@^Qd>HQInn!@n3bAtO$ssEF0zM6M=qSkM9mz#&b z$=**qY~N$_X}#0Wxvdamv-*8_b#FQ0J-m(eETiAnUAtGc-`206hb$ewOcTDi^kD-K zqwMJ0R=SA9Lvt$X;Q3|}eD^&It<@(d9d~xN2&-XD_?^FJHy7j3kQbWjkDD8|$Gc}o zupHi>uVQUP440GV5JH!_c=A;a7b^E{7HJ+ME(6@?>^AiK+Bkr7MI(kke<1~%2WvXv z2s%*sYiJvmv8ztUuGJRjeA`?cT+N=8(i@X;rs7*1;LlcU=HY*b%(sVij}%~!vfdLP zmTQ610j2H0&>?0$H3~7+)U4~wmVWBMm@ChAM*&bu`;w%ZHq{LN^wz7M@*eNFb#bsD z>C|#G@pg0>!R;VZi)MoTO_xhP;Fri&!I^3P81%lo_c0lN0I*3FmOXzGjJxz0?22#S7g7D` z+s*V`y;nWkecVo!Y_B8E&U)*81XV+Qisy!8;2s;7h-201QDF8|;%$fP?1v1$3` z6EPFA{yQ+a3sBSJ@Z5)a0%b9FHWRImi1!8Q+U5a$kq2#y-HS}T!q`OZx89trBry@2 z#>%?7c(`!{k5>a{wc7QoLl?h#!MO{k{+r%&^s%=`5Ws!zi8GW>tD@kor#rS zXY?11Fz}xD0!OKe&dcbQ&Ue=Pi)Ke!y_PttDF{hs`$*#Gh~t)slk-@F!nTTH+x+~% zF5|49&gXj;{RE4=Q@vQ6+4*lK#HKDvs+<5XoBscp5}XT+v9FY762C|WU*ri{%(rxJTi#jUtb}kqAO+-w_E->A6z)j z#&pza=AhWc5{FBx{)4sDcc4ASV8ZMp4Lxfi=uF7Z>T^5aL#`Ze)K@zoWdhC2 zJ-v4KPA1lN)b9H~c9jyu%MVUhe;zDNqlUbe7bveP?{wZRV07btxb!jpb7OmHF;qr( ze$dcl%b_|8EhhJ#<^5NqThC~|CeM+@2Hj7Gv(r^2mxu)Xpwk|A)_ z@+9%_cv72c=K{OyO}Ye>w=nKEQE2k5?0tTdKQ2nzEU|HKbj-FoA1UVe4g49W9Edb^ z9|@5$_;crZUqECOVsoahH>2w{y%__tb@l1U|UIr@7oplB+*$)6cq;;C*F#uBIob zz(10QQu$n!UeJ(QHNH*zMOgvx>F6Z=P3wveueN+#?8XI!>SalzQ{Msm@nLm4M+K}) zWoGMam8Og860dT^I#M&Raz*=7&Nbv&{^U@N<-U>6gr*;s^p-1USW`crpSoevWYZGazi&VX%(?PahG zvxy&#c7*$t-4nkbCR&tvlG)7QD1-%elQY`f06!pL{x@I$oBEqK*ke8OZ|7WO2-kHX z-yjFHe~+;fkIUU1x4xlm14r7>KA*bzegnkcn05M;_01>5E8-89a@3%4WLh@s$mP-v z!98})+UgF!KNXDMAbQV_KqyJb+VYJ~t2X-94x)NPu@?O68m=&R?>Cv53K$(xBOYl_ zWSObCL!83CG+KiVb+@D{-F*w*uv$GnaU-dW9Zk4(x2*N1EAJ)x-q5t(uHqX$`kb=pI zPYKo_b%dEBoan^cNMelaDqKZmxorq5QHC?ipao6^m=b6UmGC6EX;f52d`-id2vh<4 zpmc)1H8Ns-wG^Rh@|$G;T`=!3|1bEzyKPX(qq{t0!A@X?(YnYK-zEIO5|D!ENEBdu z=Tsm-1=fk+De8%oE$g|xWkbu2q8QR|kT||LIY}8k2FI(Ys;K-Cy9sVoWSnx|n5A31 z1ihPzM(MyG{Y&z-Wa5T|7K~VLZ}4XrBPrB;Sdw(YIME;>iP)%#x75`2)AGmU9ACR* z-y-z(-t+~NHgCVJ_|@fvfFR22ME`3aH5gyGmVRBH!Z3KF8qA8duO1_RJd}GqG)XDn zNywt1!3C3+bsAfW1A~r)J3LYr9tWpL#}lH2UK3&Sn-c^?o{&4TEGmZ3a!kfLni1e`?Z^-0WV9l;!U_)F zZ=Q{srMj#Q%!0Rx6-gfuStV38g9`w3AM^teEQO1tDyb{rQAz>&f_CmwrVNAT@g^m`Y$;f+_Yi zsfRbPKTBDMQ;BJ+J6eDfDSppp$y`Pv<7E}-LA`B>FkzqHBjpE+nkazs`Qk&y{rlKj zMoSTD374>vK1DN2VC5*-CaPe*4397))NMO;SXbXC|06-#a;QT8*^*>@qg!6$9Qjyrj<~uMF?@x1jO4SY8q7Z zkT5K-_FAm>sQbllRdO!8bV`VOL~sj2=$q>)Lhd3RH3!7#qP(InM42XLlq=pyPItHm z=opI*niVMm`&z?$?>?y@2jCp2hF@r7&SNoXc1Cf*wAUVLU3`(PCQzT?W0O178?9p> zIp_}W1#iaF1!I9F_{>SAAxgDgaB4()T%nXg#{c+rB(*9H=J*%HgKAm~>PU(FDAr1A zh$m-DW|2w=3{!Afe3*_e!qa?)>b#_uK{mFkxe7X$VDA_6c=S!`q_odCypXGC^hS3b zCH%fY>;C3a6+INH5!AG6>n%N-K zeQFlPH;szj27KTv`xVpBBJ=<ZDTDVVh>msm_3a0a zL@DAFHtgl9 zxZ+y-VTSl>b=sNTI_QPsIO3b#?vH4xg;y(zL#>$a6MUr?b~AkY$AYgVE##3NH-}OE zRQKKdT;MMc@sX?JZ=ZOcex>mw@8s}TdbD#qk>|RtgG=Et+IhbK3%!1Q+(V9ij3{wX(|k6OZ|Ef9?h09+gn-AuHr}RrxAU;%oh56 zkX?u)UQ7SrO*1(KF;PVCzf03U0#0ihRTHUOmSb= z+4j_#{DeEz0-I_Qsmy312PH5hdbbXr@-6tov3eWzLCX=@;n50fcLp??@$z^dQQWV}_^ zd;I=?u=kcxadi9EFHZ2_u0ewbhhV|o9fG?A3mORS65QP-5ZpDmyKCd_ZnsIu-p_O1 zz4tkHjQ4!H_d}1a>Z)2)7hSbh)tvv|Z0SP}Visu=vjP%flNi_SrQl>FPrmC=~Z5r60e`59S|lkUZXzp zp`!auxmfUhC#2s{!C1h?KuM`GKw2?i19M<}d?DoI)^!vi+&pv`@Z(Sl^HE&eN3nDk zL`mhL+UWf!v0E3$1Zl;@dZY2gp~>Eoqd|6Ou9+%jvZ67l5{tK~athKU1QsH5eD`8J zp;QpuR^W^#V*L)nZPWd>gKU>2v=pUmbLR(2%Al>dENK9^tVo;Urh9~$9$tVHO1csh zz7jKP#2O~kHwK^a0tm`zN_|lbwAr_mJ11gP`H|@OYgpN&Hk6bUALIc3V_F{xJTw5c zU-&W!w$%g?ddT@dC={+LpD-aDX~Tpa5*e)kiG( zQ>4UokHITSDaDu>b3g31LHGn^yuQ%%51WXK2WuE(WE4X8B_-pG zNH+pLA&WxxWr%=B_a+h~#`EJAFC*t(`@pHAM~Yy3;Hb3Vd=WC&^jMha_*sw(Oas7e z03LXQIOO<>8D14&S5Yb2uo;{btkZ~&Jm#@(vN4kJr})dw12odz;Pv~ z@)WJiu&mo%KX^@3urCVG<$+Hnr+%EaP8(+;ItNMX#(k|RUBd+O0sLcMpCAXmJITPo z@daXgPE+@eEtG?Xue))pfWf7=Yy*SA6=ZVLPr3#fESyUO=Lf`ZqtJTX(lRYbmFx?M z)?g49F8&U8$>83g)C`b1qi-R;T=MwOAI|HNVYsvzrtyhc=#cfi#(U#4%WL9T=R;uJ zN_fn%Z}mZ91pC-&5h6=hCXIXL+{K3gx>oPVhQofoHRfa7;!ZWJn?sFT>*_ESvB5wJ z9-fbG>#EK5K3&lYq3tGYc8KAsDJ<{(3%0!J_ExrH2VsH7^;J*i1ntboNX! zf{B6wZ&s`zsxAk*af!mUms!oIfRe5kERyG%tyw!cFtFjV$b^X-Ql`x$m!kW%8=-O5 zk#N)x^MQacq`&Zto|VIAp3#fQ_;*~;Z=IEa<+sxLBE`PYhW@C1zn8rbjQ&oYdBMN@ zRyrAe3y=(dC`G>sF)teBi-O4VTTA`J7y7MAzUYZBRHPTI5!;JK`9kV>0q^|A#=H<> z{-Bb6x55Hk^M6;4{MSm}Urw)oCrAEW$on74lE2R8zsr)pPK3Y6lD`DC-zUZ&{fvm^ zzsQoU|Kj5DuU#zvMv|2Kt0eg>to|oGk{uY6{40X_nG(a!LC47YEIkqdB|V@v$?)vT zU}R)w0qT()K(onz$Y5q-r{iE{{++h`ykGw@gZZy3|Hlkw;5FmVh3A(Z`TIKbPd)P2 z^1mNXpdQK245ae>&Vx_VDa%AV4&sjK72YRW1>)4 z7~tRu*hC#P@B<*II!5u>VAEI;uR~2k0%!RK3mJ0@HmjzTdE<0;RkG4Pi+!JCrTfk} z)qF8M*E}`lQ}<<<<7!Bl;dbxtVh`?}-C@(#`~D}j;kp|!kJl(tRur%w3J2lrl3Q-+ z;g;%fpLW%`d}3i>qCR$?bo*p4%^20p;US=Rze-?&KH8{R4Gp}F-#d0e_&993cYYDX z_34@p@e>6E4wvTO6u6dS8X4(9&Gmhtw0UV#F>#Jh_R&xCCDVgSZBE8ow9+(EQfE}q z4c0@BOcKGEqIx8%fyid`qeu+II_q5%U-9n%_6@R30+xuFV~}B=ytTrrBP9q3dg#{X z-gRb2jVl-`S|Xp0Nbp(T+%S_ri?oYGLCqB|P>5owg9%!|(`u&Ue#6aDW#go(duw*I z)O7bm_qap<)#ekUGMFMxO)cbxkgoo4oeJw^kOIV^p4&m{;^!)e9_BJW7P$m|L*;_3 z32Z7L(#2UUP%MyBTmic0EipP^7V|1gsFQ3dIj3K|p;ock;HELe*#H22@*J z6R(2<9u~?n$~#Qv(q6T5knFq|%)Gq7mJ3%1p;QpShOk!KI#tfb(obsT^vxUq*(6%D zK4*e}TR>1o?@*M-pztQ8u&ubFgW~;!rhN&7VoRlox5Hz4xzX`zD!Wt#?>G;c6+8A^ zXPS{gK%CBUlnh^=z8Ax3;Y`_Cs;fi0cUe&5IDjILP-Hrfof`V}7Fr`;j6AX$f)Iuq zqgYfToo=c}yaK#^pXd2us!B&V5`ho&p|_JtoNJbboqmS#Q~8Hlo7pQ?G}>_AzC7jc zOAVOhA0{5%U|`NVwLej-BeLGbeYG?Ne>nZPt|l083S!1C6ojlO_47Ss6_vcYk6d}@ z*X|WcxqM=^`{VVVA~1lx{3T009nZq_dQ4<^ftjD*JvcZ(K!dWlh`jPPtNS7{(eEQH%H!dM6{#Mc~@fu!@!~1*f7}Nf2F+IOlVp} zqsC(PR&F}z?SakL@z*McPE!Vcez!6_R{79TH*&g3rjMF@m<=Q!IjnV-G%Hl;7{ms$ z2n$|`M~Y))kcPmBd-UvKWbxGvjK99fpLmZZ>d%Ade4ZE>vXpLti!y0gbpc4*!&#}; z=roR9oSFXkgSo(5%Ul9;pw_O)=^Ak!&=^vQqcB8bmG{J?n`C&{=vTicQ~VLq_koR0 zBi*t&Iy2B4;ouQzd1!i89b;pCD@&7%GEP24W=xboogCkJD^Cu_wxEdyS9v4Ec8a2 z&O*F8*#6PQr@LIkaq_`rM&0kSXmP1FZd;CxGEiV>4hKFR-71q6$G$r3{U&eI_?an2 zoIE=tIigS$d-+inZkWKR1QMe2d-{7+YslRQtTFFR+34n1X{n{yGYlEixayR)_GnCcFiZCW-5)ktwpW_dRCjfTn_f$};U4l{(+{paJ=qa`Q;J7;7x89J zJ1-;SwWt^NwYCdEy|EPo5CQfsP&t;=haFoWx6IsjBk1umXE`Bisd`JWQ>uwuWvc4a z_E8WO-ND`n`f&yARdZcAPI{^Ky+lPn3-0Cx9kpbdLiKx=4Zq5|E_CqlDYaY^r<33? zFfDO2xkn3kGxgNb+O^)fdMbr{pI~A7x6+06CQWT%!r;6d#A*U=3_7MbbSmGl_6QureLErI1;zXF!zpZ< znqbBcIo?RNeVw0U2P>E`DeXEj%^3x%D(_V_1yFO28>zoCQcgY{0wLKHMw#N1TiRRx zJNj^FZ~>%sczFd(V@Own+xu9}%a!sf$KK1$HHDy;N51j24GxGGgXOFbPES%wAkM+s z4+pq=(**A+QqJ0%nf#s5>pu zj*o!2&e{cb#d?_H=t(~Z z8(WpEvTlTHBX1IFz18a-&Pm1rg){;}hHB*L=tkI`xvx(AIxUYHaTV879H%wOWRLbr z`Ca4h@3dW0lx@#TR7M)g8G^t!Cv)<|QZTBR9oWs(LAKUUPZV;bgLC7Vo6iNkGOi1n zW8yhGY5U80Sqx;7iJB`uIgcWUv%%NaCj79?+3FZ90tq8PZF!B$A0cNkLa%;9VBwz} zt;S^ZKt#=DI5gkiDU)PHlU%GO_jwPz3x^2BO0F&dcMzBrg3+F+ilGvU_ETS^Zop0t zcDiC(MmorEUi&y|Rd;gU>xsx16{5^`y^+YezrGU;vpz=7Kk%``R@EbbGmP@oh-*-r?rs zx^{chx(wQgg1KB~-Z#K!1B}5a-INCTL)>>CxFdzpr)H)}(iXk_S8h|dKpghbc)2Sl z1A4K<`$IMAv{!$+LPL`!@gktd_=hPLzb>y(DIFTZIKlvX;O#WP5x0gUQ*EskNJN{_ zZcxbyGFrJ{rf(#A+%dK;K(ad8!ns?$3|QQw=zMt0dJqES41%d#lfjNcYmi)(3IBnrpb9_ORy7@8wMM5o z>tXA$hH-quvR}iZn1d`g6FT%`tLhy~CccEIEs=kpc4@$TeO<1*1qAtlhgMRDT=0u2ld3~`Z(`N%$D9x2w*baC?1@O1Bu#P3?cTPb_ivQ4bUz#0q)Qw@4PG|r zEZ!QsPtU_qNCzPWfQOU3l5INm2X7cEZo-}_adXE+z^ZjV7ZV|xC%A20m90dh zn=d!qL3yozeMljfjX29re(tch?|sPi(gL5fbG2)14t_}6H0;puR8E}pUPoYany;PlNls&*3= zY~r^mXd@oS>3=KQ)1iL^x zD|lLmGrBZC4)-%;kYw*eivT?c;jK0v8`Nc1_)xaHuwm}tT|6q}de(TfUQilK);*Zi zsrRFXLr@m|ayfSXd{7Hz8!LQRf6nIZednDn#-z_A{e{DXH%=%^(Q3VqmVShvxgvY# zBd+d8VRv^I91B&u?SSuO)>V?mmUuUNlNT~9>^0W23(OvsA@|>vnfOwiRotPPQX7h` z58r$AyEf+vf;o5+7BqLzF{p7uC%(D52wZL8PRyG@&fM+Kxmw&>c3E}vxT0^Rb=+Ta zE2ht?I#~b2S_xjswX{54s|=Utest({_Q?xh{n*ao)b?b_c)GN+WM2dj9!Bu<^5Sj+ zDSbVOj+z)-Cz|JN}E4%z@E(7e_qjBEbfE`Kb?Kw>L&kN3T6nm!e*VL{t75mhh zAs#kPXDDt5i_MUUB}vT13u6TmG~3W)lqi={YQ}0tL}THz$H?o9~mBoJC; zf1lx=S;~66?;jM#YjfC5@B3RL$QIYM^Ycr6Z_JgEZfY(D0aAN*XX(RVD?hQe*goiS zHU=x78d4W&X(*Q{z6wj;SME-#bod!Zzd=javV-`f{ieIJy>ygLHJaLx`A|#H6!st+ zupvO?(C&K!?^Uj&%&NQFnQhVD!NsudD3|)SU)<$WPIP{$J=2)t9^QguwK$7l3<-Yu zaa$bfDW=z8=Yq3KFiwT4rd8xq8PDMsMFx@;H%R#94bl)D>j2Ho+AZW9`S&qzGHTyD zkbd#;vE3Nar*}rNX}ZF}84+nAp=55DQ6S?C0*zqYKhSbv`ts72o<=tg&fNsMw>$Hf z(-DkDxlL8W6A3wWB{tPcJp%OyGK`_kg|rjjGrwYMy%5<@7;?K?8%AiSK+a2+zs0{b znU;1wvs*dD{}h}D;p@2HM*i)fGCY#W_N|>nj*ko4kM*d$B<~XX2GWj8*!C_dhP9ap zC4{e-xOJE{+RpcG@y+h|(aH;x3hKF){G-VQ)1EbVgAdKAS%5S`%uly~X3U!9i}NgV zWqlDT+HyF3S`3cOteA~!nOClZ5#;!R6n>E4Rx@_%U4c2F-O#L`c0GGt9kR>`-O9>N zRz*7OxN9yK$vPBqTi8t6Fbb<5MMnWmY)T#(#VvW+_T}lEF(`!4p;EkaMg=Kt^BV3> zOOucaYg_y`B|+%2#?C9MKMR*40S&j}L2-L*896lP+z8^>5)B;&FtFdkK<)U!3vq=X zhoK)`>*%&2--+`ar=bNy2AsWZ#!6VCcSpRk{dBhj2O>|uwY+}J^y(Zf(YatMz`5u2 zf`XCgI}|M=+ERnZ%J- zh%NKkawq-OzK}bG2(P?*;A1L36Lvon{EDcKAu|(JBF;u@&ry(ai6+8HcbMMl{UU8s zjm3^qT#WmtPijpQ@Gr4_G|CXS}fJwbet0NYvYD{7|3O=A3~a zx{1S;_!AG?SVW-WV)LYi`KjwLph-(;Ft;~VTB*V8XWzrXvJ7b5?!j(~Vo`)?1ii|W ze-lhYzL~%Sz~sTVkx^vlZQYUxUY!CwTFLR6oe2(FR#$3Smdp_b$Vj zM7ATl8JCL{JQpZ}B_#hL8aQ%0O)LK51Nl5?bJ_fp*X{)C)4=!RhVCcuZ62Gup4nAh z{-tZ1mTm|6WJE`cJ02^99J^K<{q^0Ur#(G`_2~t>1Nm>1K@Vi}@t>x2uYSOo`bk@W zwD;tURTmr%V3#0Bw`FPW9sfv6M#jA9Twsdc6pa9c*uPqDIyKJO>>J`+7t&}xY5yK71}Bt<;-<)RN7Qak(MglKnX+L5hRP$G7T^B^aCS5$s>79hdFP z6uvCXK)W!j9^D-^T>-0-Mf?uE6#z(}wVC>wpaJu3lTVxU*52;Rds__)5W+3rt{%(w z@8PPDE>X?Kjh@WEp0-p+xgLI;frCz!ZKBoWDN*+($$h)s!h!XGH?0hHxl^EWG``ln z!PA7sl{EcrNK(BHThS&`pu4}Px6h2vS(x8%Z_oW^u27x*rx22U9XlPta!s1}hRo|H zkDMR_9=?cWWEVqFJw+c zS*bokd7Ths7&>6`pGmN&Kqwl|$}orSXX*XY{Q+Zm6@? z2`opjZHjD4w=;z>{mSR0TcPBN7|GC`Hwsw}5yFRXr+86trUlaxoEyU<^4i}>CvD#O z_emKlq1+PSYzWV0xr!E$Ky57v+bUi~_KyaOLA!tIZqd3nZezK)c9Y*At%~MJ2{wnL zvYbRz`#K@_fM}XMoJIewe*5m*lDd4}5bgum6OW3vF#d7#uCyjENVFT+BL=GHdr2M- zG?UiXcSuet!CO;y!`9kV@6bYn2;cH3?nXOo*la8-2^CHjx)mZ#L`?vb!zOuEzT&YE zixV1#-hP}Y8db=|6iLdg5hM(Cw`uQyfup!4$4fl!$D%W`9B^YS?fCMZ(ME5u!yC1Q z_e3SiDt>}zr!_l{yor~??ew-+M$(;vm30csRb&56*>IOTtKlKqS#$;!CIA44?U)5P zbftve$!3kvOcjrxn}qc|RtI5imnbv?|I7GR@Jm2`=eKS?@-`Ib0c5h`=x*3dPmT35 zln^gaWU$Yq)KZwUuI;>ygV0Hs*Y==>Lw7nu_9~;Lu+vG4T+(1j6+tJ*nK0U}* zqn7gBf&SCQjI)1~qa)jA_C)8TqVZj85^qtlK}jTN(>CZa+ls}t)*=$LB5>a~LM4dv z)1?3b)SuI5Pbo^DEmAR!>#;s^1X$B?=j2zoHX_DF4fpm<3ZWoH4B<&6$_?Skq+$qb zmlw!Xf8|TXh(j&AAO`r%F8V8Le82#dO68Uzn;NXDW4gPJL^=o$|FlT;wLhr!tGxMg zNCt;F_ielDkfyX~e%#`djkEfJnlu*=9YPe*${SGara879rd>ye%@zm6F(DUgx{HY? zwnq_e4kOK>NU36W*tnZr)nI<``?HqlyOuZZ-6CAs6#~K$#>3wSpgFM%51fX{T+gcv zG7={lTv9^Rdm6~*EcX+%rix;0Y~GbtGIG-H7jXATmH$|`R40!M7TY%1TeO7`!_yR< zq|lgYYy2>lqbAJBH{P8c5CTU%WM)JFh%JDo9GQ*WkEEDAX;!&hiDsY|(~ZqCx7?ra zUpMPwQC8#ag-#l!=E6oNbVX^+gA~CpCmcrT!vgS~!Nx56ml54?Y+$wfEZMB(!PVI_ zaR`jf#6$6HnoC_zbf-c&ec^`wjwdllsm7K?qC58UOM2)AL|TX>MFVDuoJTW7J2jbU z1Ge8B!`_GuMTK$eRL1oM!0cdpI|E_2?%M`gs$499Kl9+5TxjKERTUx;h1edVOXa7K zXeA`%f)%=8$YQ{kP z@@xrJd-ZiCBnl&&QVDbLDFwKd`& zv%nxwMQN1k%3v1pH(K0DU*h)>E_Y$@Oe_rUCMr!)QiBzkf6s}3#ec)4cFv(n1N{ys zW|6{}dnb&Ps&fLv=*+qlZi2o~sJ#fcKy|j>LztDEsw$2NK2$kbq{=kv$hqA%KgKzH zy#bU!|K!9yOL~=K2xC=O*(mFTw6>Zw;=T*;E;U4b_7LA9WerDd@r^MNS5zsJm(@xb z+jfFyEw+ZxzHM`bh-$jOsiFR!LRUdB6@OEAN%|SM5*yjTeD+KMo`P|r>Ow=i!9naA zu})y<^#miLp2JwbwL>5BL6>$xkeZrN6|{=aymsWx9P)VAJMQ7;rt%PnO*!o&`bdYh z4eQ&=q`@FTr}v6C4D0Qd*TY@KDppy}YEgU>kR(A4ukqUmI^L89WN#Z0EQY0hFYnB* z-!_;DJK%jp$KKnkGKHa-nP%2l{>^2dLTX0_36a-Xv`8fn9|FO+kmL_%2vry6C5|(dDA^xBR z3A2)@Sz5l1)F<;q!&%fpC(^VZ$8E4P7V|rX1Bz&99JV>%29p**9{JY_iz~IULy;D> zQ=^X2$EEE?I6!8JY)rq)-k!mVu276s9A?OjrW(|X&X3d@ZK%4|@;)1Ym*E~)i=67Q zr|jH{q=O>&G=LGy)VnX?U$Pg*?laVtmzBnF&W$w{y`a+FqnbwFFCkT{vM}UClA7{cV#P%n-49OHdDTW_n z_EpP?UllqKCZpF)K8Hs>t4)N+7g9HVfAq?lQvVhkOFqV;8rz0>mZ{TI0YZP(YKlj+Z~x4~5aZbg$DDhb z$>Nbzibj9jQd>xeUU?b9U3c(B|LBICCOM}obA7k^2{;#Ttw2Ry&9)&RCLCeX-jr>o z*U0DSsxhQATdk&1kA}9OrLx@0)AlUPd$a28#0-9B(xhvk1QPDu`jF4=H0^NC)hFx< z>dTN>CATO9u=+2kj|4`aY8vxw8GKB66UfFdzO_Em_`nG9aX#$g>0f-ik~5R&nc<1n z8^Iy3ld7(@j}&(9dM)3FxVG&~&W(zY>U(O}uY10jvp|8?C7{Z%d5D@8bU;ixN?;5s$C zP)*@!km|2-l6BVfgLPFuP+!^te3$lgoag?ixng#j(T-?LZEGr=u_LLSq{TB`$;#Hi zxyYU(eOyKS8KU>_oTQZsJ~G-_bf8P4>7z=;&!GF)ZJUSE4dccaa?a{__yH%H;t{kf zgC!W+NP4O7!o>h(4cv4Zjuj~pWgN1MA__IbLk0n==|a>jj`s8Uq}+(wNk#Mi?e?4o z!uHJ~UMRf|t~NYMBK?kY2~z{jORSbyNVFSuBO9wt4wc|T4(a*jxB99ItKW)~zz(7^ z^g~?cG*eXQ(~V4aF4-e8QfMpdoJuA7T^o{EXOi5`!+dO@>q(XJXE!Q2@(Gs67#T6X z7+Bg`Rx%-w((8diqyUpHGq4-Sw9L>Qd%&}e8*2uG#93wyCuHI6ZOwgB=_qb}{g3RO z_ty#s?;vWLI)g&WNi#^&9MmDjTgDCTD%tb1)VRKEyRh>;1B*=Q_(j(Gclqn;xrzz8 zdW^0()l(!xrV!f}H*%4#d)Y-Z@<{9TDW{LU=nd>%1OFq4Oqs;jxT8AcAcF7a^3oODS8WgU2o_tsW zIhQbM&RnQNy10cshnLr^s~Z+ek8J-Gdtj7U$ftLF<2@SE*o8t2sJRFU>aba zTH`JsRQ7`932w%qiTyNJo7&q=j~J8`K``9lGJ$Gyf|0b>NSgotJs+zpa~yquaCxbW zL{)d}1M&ertzy0{xVE}ww)uxM^q>5Szea-n#k%(2I79#9`}$wAg>pRG z(*C_I^q=q|CLj=q4akUih61s@1HL~)g@E3zU+)YYK$sEmb0*;DK(7|iME3i0AOz^w zHo$eCp+w9;9>()>mUqvPBj7S%JHH@83_xHJ5GKUR#7@M)_`4krAaIC{8Mr@ zkJs~7&-1`2xnF+)xbpMX&#kipZNk3}0r$HpI^^B zs9#H1ffhX=+y>~)`zs8I;|~n$Io9;Wfy)8>e*eD%_kZHReRjJ(J8)kRN6(3d rm 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 c3?ck&dc4=@4WV!Z literal 0 HcmV?d00001 diff --git a/backup-db.sh b/backup-db.sh new file mode 100755 index 0000000..7f3cfe5 --- /dev/null +++ b/backup-db.sh @@ -0,0 +1,42 @@ + +#!/bin/bash + +# Скрипт для создания резервной копии базы данных PostgreSQL + +# Настройки +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +BACKUP_FILE="${BACKUP_DIR}/db_backup_${TIMESTAMP}.sql" + +# Создаем директорию для бэкапов если не существует +mkdir -p ${BACKUP_DIR} + +echo "🔄 Создание резервной копии базы данных..." +echo "📁 Файл: ${BACKUP_FILE}" + +# Создаем бэкап +docker exec -t global-it24-postgres pg_dump -U globalit24 globalit24_db > ${BACKUP_FILE} + +if [ $? -eq 0 ]; then + echo "✅ Резервная копия успешно создана!" + + # Сжимаем бэкап + gzip ${BACKUP_FILE} + echo "📦 Архив создан: ${BACKUP_FILE}.gz" + + # Показываем размер + SIZE=$(du -h ${BACKUP_FILE}.gz | cut -f1) + echo "💾 Размер: ${SIZE}" + + # Удаляем бэкапы старше 30 дней + find ${BACKUP_DIR} -name "db_backup_*.sql.gz" -mtime +30 -delete + echo "🧹 Старые бэкапы (>30 дней) удалены" + +else + echo "❌ Ошибка при создании резервной копии!" + exit 1 +fi + +echo "" +echo "📊 Список всех бэкапов:" +ls -lh ${BACKUP_DIR}/db_backup_*.sql.gz 2>/dev/null | tail -10 diff --git a/docker-compose.yml b/docker-compose.yml index 81dc768..32a3e9d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,25 @@ version: '3.8' services: + postgres: + image: postgres:16-alpine + container_name: global-it24-postgres + restart: unless-stopped + environment: + POSTGRES_USER: ${POSTGRES_USER:-globalit24} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme123} + POSTGRES_DB: ${POSTGRES_DB:-globalit24_db} + PGDATA: /var/lib/postgresql/data/pgdata + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-globalit24}"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - app-network + global-it24-web: build: context: . @@ -12,9 +31,20 @@ services: restart: unless-stopped ports: - "3000:3000" + depends_on: + postgres: + condition: service_healthy environment: - NODE_ENV=production - NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-https://video.mscsrv.ru} + - DATABASE_URL=postgresql://${POSTGRES_USER:-globalit24}:${POSTGRES_PASSWORD:-changeme123}@postgres:5432/${POSTGRES_DB:-globalit24_db} + - SMTP_HOST=${SMTP_HOST} + - SMTP_PORT=${SMTP_PORT:-465} + - SMTP_USER=${SMTP_USER} + - SMTP_PASSWORD=${SMTP_PASSWORD} + - NOTIFICATION_EMAIL=${NOTIFICATION_EMAIL} + - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} + - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID} - PORT=3000 - HOSTNAME=0.0.0.0 healthcheck: @@ -23,6 +53,16 @@ services: timeout: 10s retries: 3 start_period: 40s + networks: + - app-network -# Для работы с внешним Traefik не требуется сеть +networks: + app-network: + driver: bridge + +volumes: + postgres_data: + driver: local + +# Для работы с внешним Traefik: # Traefik будет обращаться к контейнеру по IP хоста на порту 3000