From ca82064e004e8bbfc4297517f158d17e59d8da7b Mon Sep 17 00:00:00 2001 From: trevor Date: Thu, 12 Dec 2024 07:05:26 +0900 Subject: [PATCH] reports --- bot/operations/statistics.py | 58 +++-- .../0004_alter_reservation_room_number.py | 18 ++ hotels/models.py | 2 +- pms_integration/plugins/bnovo_pms.py | 2 +- pms_integration/plugins/shelter_pms.py | 223 ++++++++++++------ reports/Golden Hills 3_report.pdf | Bin 26179 -> 24823 bytes reports/GoldenHills 4_report.pdf | Bin 0 -> 13906 bytes 7 files changed, 212 insertions(+), 91 deletions(-) create mode 100644 hotels/migrations/0004_alter_reservation_room_number.py create mode 100644 reports/GoldenHills 4_report.pdf diff --git a/bot/operations/statistics.py b/bot/operations/statistics.py index 10d54a82..cf421c10 100644 --- a/bot/operations/statistics.py +++ b/bot/operations/statistics.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update from telegram.ext import ContextTypes from asgiref.sync import sync_to_async @@ -7,7 +7,7 @@ from users.models import User from bot.utils.pdf_report import generate_pdf_report from bot.utils.database import get_hotels_for_user, get_hotel_by_name - +from django.utils.timezone import make_aware async def statistics(update: Update, context: ContextTypes.DEFAULT_TYPE): """Вывод списка отелей для статистики.""" @@ -55,6 +55,7 @@ async def stats_select_period(update: Update, context: ContextTypes.DEFAULT_TYPE reply_markup = InlineKeyboardMarkup(keyboard) await query.edit_message_text("Выберите период времени:", reply_markup=reply_markup) + async def generate_statistics(update: Update, context: ContextTypes.DEFAULT_TYPE): """Генерация и отправка статистики.""" query = update.callback_query @@ -66,47 +67,70 @@ async def generate_statistics(update: Update, context: ContextTypes.DEFAULT_TYPE return period = query.data.split("_")[2] + print(f'Period raw: {query.data}') + print(f'Selected period: {period}') + + now = datetime.utcnow().replace(tzinfo=timezone.utc) # Используем timezone.utc - now = datetime.now() if period == "day": - start_date = (now - timedelta(days=1)).date() # Вчерашняя дата - end_date = now.date() # Сегодняшняя дата + start_date = (now - timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0) + end_date = now.replace(hour=23, minute=59, second=59, microsecond=999999) elif period == "week": - start_date = (now - timedelta(days=7)).date() - end_date = now.date() + start_date = (now - timedelta(days=7)).replace(hour=0, minute=0, second=0, microsecond=0) + end_date = now.replace(hour=23, minute=59, second=59, microsecond=999999) elif period == "month": - start_date = (now - timedelta(days=30)).date() - end_date = now.date() - else: + start_date = (now - timedelta(days=30)).replace(hour=0, minute=0, second=0, microsecond=0) + end_date = now.replace(hour=23, minute=59, second=59, microsecond=999999) + else: # "all" start_date = None end_date = None + print(f'Raw start_date: {start_date}, Raw end_date: {end_date}') + + # Убедитесь, что даты имеют временную зону UTC + if start_date: + start_date = make_aware(start_date) if start_date.tzinfo is None else start_date + if end_date: + end_date = make_aware(end_date) if end_date.tzinfo is None else end_date + + print(f'Filtered start_date: {start_date}, Filtered end_date: {end_date}') + # Фильтрация по "дата заезда" if start_date and end_date: reservations = await sync_to_async(list)( Reservation.objects.filter( hotel_id=hotel_id, - check_in__date__gte=start_date, - check_in__date__lte=end_date - ).prefetch_related('guests') + check_in__gte=start_date, + check_in__lte=end_date + ).select_related('hotel') ) - else: + else: # Без фильтра по дате reservations = await sync_to_async(list)( - Reservation.objects.filter(hotel_id=hotel_id).prefetch_related('guests') + Reservation.objects.filter( + hotel_id=hotel_id + ).select_related('hotel') ) + print(f'Filtered reservations count: {len(reservations)}') + if not reservations: await query.edit_message_text("Нет данных для статистики за выбранный период.") return hotel = await sync_to_async(Hotel.objects.get)(id=hotel_id) + print(f'Hotel: {hotel.name}') + + for reservation in reservations: + print(f"Reservation ID: {reservation.reservation_id}, Hotel: {reservation.hotel.name}, " + f"Room number: {reservation.room_number}, Check-in: {reservation.check_in}, Check-out: {reservation.check_out}") + + # Генерация PDF отчета (пример) file_path = generate_pdf_report(hotel.name, reservations, start_date, end_date) + print(f'Generated file path: {file_path}') with open(file_path, "rb") as file: await query.message.reply_document(document=file, filename=f"{hotel.name}_report.pdf") - - async def stats_back(update: Update, context): """Возврат к выбору отеля.""" query = update.callback_query diff --git a/hotels/migrations/0004_alter_reservation_room_number.py b/hotels/migrations/0004_alter_reservation_room_number.py new file mode 100644 index 00000000..1aed70e5 --- /dev/null +++ b/hotels/migrations/0004_alter_reservation_room_number.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.4 on 2024-12-11 10:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('hotels', '0003_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='reservation', + name='room_number', + field=models.CharField(blank=True, max_length=255, null=True), + ), + ] diff --git a/hotels/models.py b/hotels/models.py index 022f4aba..f066a8c5 100644 --- a/hotels/models.py +++ b/hotels/models.py @@ -88,7 +88,7 @@ class APIRequestLog(models.Model): class Reservation(models.Model): hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE, verbose_name="Отель") reservation_id = models.BigIntegerField(unique=True, verbose_name="ID бронирования") - room_number = models.CharField(max_length=50, verbose_name="Номер комнаты") + room_number = models.CharField(max_length=255, null=True, blank=True) room_type = models.CharField(max_length=255, verbose_name="Тип комнаты") check_in = models.DateTimeField(verbose_name="Дата заезда") check_out = models.DateTimeField(verbose_name="Дата выезда") diff --git a/pms_integration/plugins/bnovo_pms.py b/pms_integration/plugins/bnovo_pms.py index 1d3f32e2..673664b5 100644 --- a/pms_integration/plugins/bnovo_pms.py +++ b/pms_integration/plugins/bnovo_pms.py @@ -3,7 +3,7 @@ import json from datetime import datetime, timedelta from .base_plugin import BasePMSPlugin from asgiref.sync import sync_to_async -from pms_integration.models import PMSConfiguration # Убедитесь, что модель существует +from pms_integration.models import PMSConfiguration class BnovoPMSPlugin(BasePMSPlugin): diff --git a/pms_integration/plugins/shelter_pms.py b/pms_integration/plugins/shelter_pms.py index 98c04aca..a6c04bf0 100644 --- a/pms_integration/plugins/shelter_pms.py +++ b/pms_integration/plugins/shelter_pms.py @@ -1,103 +1,182 @@ import requests import json -from datetime import datetime, timedelta -from asgiref.sync import sync_to_async -from .base_plugin import BasePMSPlugin -from hotels.models import Reservation -from hotels.models import Hotel +from datetime import datetime, timedelta, timezone +from asgiref.sync import sync_to_async +from hotels.models import Reservation, Hotel +from .base_plugin import BasePMSPlugin +from pms_integration.models import PMSConfiguration class Shelter(BasePMSPlugin): """ - Плагин для PMS Shelter Coud. + Плагин для интеграции с Shelter PMS. """ - def __init__(self, config): - super().__init__(config) - self.token = config.token + def __init__(self, pms_config): + super().__init__(pms_config) + self.api_url = pms_config.url + self.token = pms_config.token + self.pagination_count = 50 def get_default_parser_settings(self): """ - Возвращает настройки по умолчанию для обработки данных. + Возвращает настройки по умолчанию для разбора данных PMS Shelter. """ return { + "fields_mapping": { + "reservation_id": "id", + "hotel_id": "hotelId", + "hotel_name": "hotelName", + "check_in": "from", + "check_out": "until", + "reservation_date": "date", + "room_type_id": "roomTypeId", + "room_id": "roomId", + "room_number": "roomNumber", + "room_type_name": "roomTypeName", + "check_in_status": "checkInStatus", + "is_annul": "isAnnul", + "tariff_id": "tariffId", + "reservation_price": "reservationPrice", + "discount": "discount", + "guests": "guests", + }, "date_format": "%Y-%m-%dT%H:%M:%S", - "timezone": "UTC" + "timezone": "UTC", } - def _fetch_data(self): + async def _get_last_saved_date(self): """ - Выполняет запрос к API PMS для получения данных. + Получает дату последнего сохраненного бронирования для отеля. """ - url = 'https://pms.frontdesk24.ru/sheltercloudapi/Reservations/ByFilter' - headers = { - 'accept': 'text/plain', - 'Authorization': f'Bearer {self.token}', - 'Content-Type': 'application/json', - } + try: + last_reservation = await sync_to_async( + Reservation.objects.filter(hotel__pms=self.pms_config).order_by('-check_in').first + )() + return last_reservation.check_in if last_reservation else None + except Exception as e: + print(f"[ERROR] Ошибка получения последнего сохраненного бронирования: {e}") + return None - from_index = 0 - count_per_request = 50 - total_count = None - all_items = [] - now = datetime.now() - start_date = (now - timedelta(days=60)).strftime('%Y-%m-%dT%H:%M:%SZ') - end_date = (now + timedelta(days=60)).strftime('%Y-%m-%dT%H:%M:%SZ') + async def _fetch_data(self): + """ + Получает данные о бронированиях из PMS Shelter. + """ + try: + now = datetime.utcnow() + start_date = await self._get_last_saved_date() or (now - timedelta(days=60)) + end_date = now + timedelta(days=60) + total_count = None + from_index = 0 - while total_count is None or from_index < total_count: - data = { - "from": start_date, - "until": end_date, - "pagination": { - "from": from_index, - "count": count_per_request - } + headers = { + 'accept': 'text/plain', + 'Authorization': f'Bearer {self.token}', + 'Content-Type': 'application/json', } - response = requests.post(url, headers=headers, data=json.dumps(data)) - if response.status_code == 200: - response_data = response.json() - items = response_data.get("items", []) - all_items.extend(items) + print(f"[DEBUG] Start date: {start_date}, End date: {end_date}") - if total_count is None: - total_count = response_data.get("count", 0) + while total_count is None or from_index < total_count: + payload = { + "from": start_date.strftime('%Y-%m-%dT%H:%M:%SZ'), + "until": end_date.strftime('%Y-%m-%dT%H:%M:%SZ'), + "pagination": { + "from": from_index, + "count": self.pagination_count, + }, + } + print(f"[DEBUG] Payload: {json.dumps(payload)}") + + try: + response = await sync_to_async(requests.post)(self.api_url, headers=headers, data=json.dumps(payload)) + except requests.RequestException as e: + print(f"[ERROR] Ошибка HTTP-запроса: {e}") + raise ValueError(f"Ошибка HTTP-запроса: {e}") + + print(f"[DEBUG] Response status: {response.status_code}") + + if response.status_code != 200: + print(f"[ERROR] Request error: {response.status_code}, {response.text}") + raise ValueError(f"Ошибка запроса: {response.status_code}, {response.text}") + + try: + data = response.json() + except json.JSONDecodeError as e: + print(f"[ERROR] Ошибка декодирования JSON: {e}") + raise ValueError(f"Ошибка декодирования JSON: {e}") + + # Проверяем, что ответ содержит ключи "count" и "items" + if not isinstance(data, dict) or "count" not in data or "items" not in data: + print(f"[ERROR] Неверный формат данных: {data}") + raise ValueError(f"Неверный формат данных: {data}") + + total_count = data.get("count", 0) + items = data.get("items", []) + + print(f"[DEBUG] Total count: {total_count}, Items retrieved: {len(items)}") + + if not isinstance(items, list): + print(f"[ERROR] Неверный тип items: {type(items)}. Ожидался list.") + raise ValueError(f"Неверный тип items: {type(items)}. Ожидался list.") + + for item in items: + if not isinstance(item, dict): + print(f"[ERROR] Неверный формат элемента items: {item}") + continue + + try: + await self._save_to_db(item) + except Exception as e: + print(f"[ERROR] Ошибка сохранения бронирования {item.get('id')}: {e}") from_index += len(items) - else: - raise ValueError(f'Shelter API Error: {response.status_code}') + print(f"[DEBUG] Updated from_index: {from_index}") - return all_items + except Exception as e: + print(f"[ERROR] Общая ошибка в методе _fetch_data: {e}") - async def _save_to_db(self, data, hotel_id): + + async def _save_to_db(self, item): """ - Сохраняет данные о бронированиях в таблицу Reservation. - :param data: Список данных о бронированиях. - :param hotel_id: ID отеля, к которому относятся бронирования. + Сохраняет данные о бронировании в БД. """ - hotel = await sync_to_async(Hotel.objects.get)(id=hotel_id) - for item in data: - print(f"Данные для сохранения: {item}") + try: + print(f"[DEBUG] Fetching hotel for PMS: {self.pms_config}") + hotel = await sync_to_async(Hotel.objects.get)(pms=self.pms_config) + print(f"[DEBUG] Hotel found: {hotel.name}") - try: - reservation, created = await sync_to_async(Reservation.objects.update_or_create)( - reservation_id=item["id"], - hotel=hotel, - defaults={ - "room_number": item.get("roomNumber", ""), # Номер комнаты - "room_type": item.get("roomTypeName", ""), # Тип комнаты - "check_in": datetime.strptime(item["from"], '%Y-%m-%dT%H:%M:%S'), # Дата заезда - "check_out": datetime.strptime(item["until"], '%Y-%m-%dT%H:%M:%S'), # Дата выезда - "status": item.get("checkInStatus", ""), # Статус бронирования - "price": item.get("reservationPrice", 0), # Цена - "discount": item.get("discount", 0), # Скидка - } - ) - if created: - print(f"Создана запись: {reservation}") - else: - print(f"Обновлена запись: {reservation}") - except Exception as e: - print(f"Ошибка при сохранении бронирования ID {item['id']}: {e}") + # Учитываем формат даты без 'Z' + date_format = '%Y-%m-%dT%H:%M:%S' + print(f"[DEBUG] Parsing check-in and check-out dates for reservation {item['id']}") + check_in = datetime.strptime(item["from"], date_format).replace(tzinfo=timezone.utc) + check_out = datetime.strptime(item["until"], date_format).replace(tzinfo=timezone.utc) - \ No newline at end of file + # Проверяем room_number и устанавливаем значение по умолчанию, если оно отсутствует + room_number = item.get("roomNumber", "") or "Unknown" + print(f"[DEBUG] Room number determined: {room_number}") + + # Сохраняем бронирование + print(f"[DEBUG] Saving reservation {item['id']} to database") + reservation, created = await sync_to_async(Reservation.objects.update_or_create)( + reservation_id=item["id"], + hotel=hotel, + defaults={ + "room_number": room_number, + "room_type": item.get("roomTypeName", ""), + "check_in": check_in, + "check_out": check_out, + "status": item.get("checkInStatus", ""), + "price": item.get("reservationPrice", 0), + "discount": item.get("discount", 0), + }, + ) + + print(f"[DEBUG] {'Created' if created else 'Updated'} reservation {item['id']}") + + except KeyError as ke: + print(f"[ERROR] Ошибка обработки ключей в элементе {item}: {ke}") + except ValueError as ve: + print(f"[ERROR] Ошибка обработки данных для бронирования {item['id']}: {ve}") + except Exception as e: + print(f"[ERROR] Общая ошибка сохранения бронирования {item.get('id', 'Unknown')}: {e}") diff --git a/reports/Golden Hills 3_report.pdf b/reports/Golden Hills 3_report.pdf index 958c51eb16cb61019dbb241bee1c8a11114cb3ba..459a0a8de6e51387047d08a63c9f0c6470bf7f84 100644 GIT binary patch delta 21086 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 WJzcGB03awtic%WD&#$Vj2KX0nd+-qe diff --git a/reports/GoldenHills 4_report.pdf b/reports/GoldenHills 4_report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a589418341a03fc64f92540acbf0af144d54882 GIT binary patch literal 13906 zcmc(GbyQVB_b4F(msCQUi->?q+@d?Bk#4xs4VNxy5Cjz^luqdmNhv7-327-ox+J9I zos0gyd~dDy{(5I|?wQ$pcF)-}hqZ@ARZ4~f!U+Sxz}#TRr#2uVAubIsCvz~DD$>#% z1pK1R9bCZ>0ILS#QZsjPbVHe%yMUp80FsUlt^nQz3`h4xL_p>aW@s+x?q6;))^@Ju zC@`0d9n#fY%G}h^3}CKk?qKO^1%`0LU;vSeE6N;c5AsY-c{lKuoRvI)-)S#7IN_cK zu@;K-2PTo-m?kTQ(n4$S{v92gQN8$lHL|M}TWQ&W!LFs} zing!la$xg9!e$WuVbDdtNX5rZ`m@iMCgaCPvWGZ3-;F=-N)}>d-grpIM(vtEFZ)?Y zx{u-`b=EG6ExzK9?+Y{GGrUfxA0$_{^VB^s8Wuu`^upK9Srxou0L|h_=QXn$0dw4<|&|dD7j?fRumsRDN9ASj7!y z{E2k_)>_aiWqq#H_oYASa*YnUDVWzMR_Sa`XtnGV!sdQIBxu7*ZNsNtfKm26F>_OX z{y~9-O}+ll%nvpC*|oZg8E^=5$LZ^~adnY0f9~iKNREi<_fPYqh_lFimI>O%Qx7eT zRm~y1Bb}w&j8_2FO#(92w@yiX3XCggbCrWjdd%k;aDNvZ7-K_xfHC^Y(@OkRa7 zOyrK%T5MVBC#E9R$4FuG+%kzdQpz0qBq~TFLyjEbY5^x1Snj?XhjP6DhU=)?$Md^C zl*YwK3J-pt+qkM}%c=xxLttwK&Y^<}LRTK{Aua$+<+GP$b)o?pm7m9(@ zGq$W>-#Ws}npe`1<(d{GD0EfRkqz&wsw|Vp2z86q5Bag8eMq$9mpB^d{n*VA;h~Cq z>*#*G25#-Gs>{Q;O#^!T(sh~B(-s}=@zvP+R3lWs%KC#)jdAtECA}Q=w$A$tW&z@= zA!Rsew^j|X!yD|ZCg-)ZX@i*%xh8NVc_TjUYA=ZXmw>%p-=m^oIV61(Ua+oC#$cPk zmrvD2!}--k;dAxzfgQPQvKv8k^eC6I477#x^m{FdYwR1t%8;-14^l=DgGh6ZLbQh_ z-y4T2FOQQOB{Vc~5Hg;Yo5pg}r&NV~3Fya<3DQO~`}wifLzuJ#Sc-C4^^O7tLnuJ( zMY)^gTC1^T5DfNMk#MBsJ7O)Y6r}gATIdyXR0uB;+wWDG3~Q*{0hFmzPA3Pgod_~c z8AOXEhG)B?iWJc5eaVftrLiR<`s<;Cr^%g*HJwYt$U28`$Hc213jfe*p~dE11>YQ+ zv|L!cw;rX_)Qv}rYip$b`6~9OB&U(dHRvqzHz)kfC+Ph1U)jk8#HC zyg+cka6SNYjYI$~fCNARTzR0^FrcFkh6A$r_<6uQz!NQn2gVIZ0Hh&+8^Qy$0f{hP zFq9Wf&JX5+0K|Y4K7M{MF9HVUd%0AXmEfJSI75ddF)C=3vWh5>!R0vNy# ztsVM_?!#ex0B@iT$V2mn19Glq07}AOfDUj#WwcumfMvjqfC5$nPkum0G#o7(J^q@O zn;)PDcwh4ZIIpfEZ-PzVBT0-zSUcZ~$7py)UQF@-|VNFX}bo&-FF9smVcqXUQ*14u^e z@Fz5AB%l}+26zVmL4gQCVE`9&bO2lQ0WQG&0^))m2uA~fFaaTg!g>GdfbLx*|4{vj zEqW%RBXk{k;0X+XaKqt$et7t<8+_;<;3^-%+gCqXAkwX*9IamYvQWfQBs&4KIwy<_EL;c-6 zf}fgOT04M%*Tl@))b(%g8fI#bbh?)O&xD2Ej{-^78dwgzz-;2c=F*%U#HE5VGe@Db zEt{sKI?z{lb8@mXw@2?(xq(~?HZ!*X_yDRaBkh6R<~13|KN2%Q^Uo32n_WN^fCBPI z7j#;7aYCA!qmT~37FdWIxJ1B0GQf4czx@yVU#h1T|C{09Kg8(u?0@h;^V-aRXlLq% zLT|CJeQ~WbS{G{v^MAO@$Z9|m+Kkxq}ztu3uw!MqSS&kr^NNbh2{o)Zbw*US-L9fRD_$1jHSdo{4klq{| znDyCdIx1->+_};T>y_5})pqxCpYEL;wCCPE>yh!s(VS*yOK>m?i8&uLb-zw0ET%`% zTmTj=T={-uZFFZ@;gK0cVbq5IAxmkzPOrD-WVc04MM}!%<$^oLar5E2^Hm}0bvvDA zy`rVK5;@EoC-=VB;el&wGBmzxFe@1OkD`MBf*%N_?H8t2mqp zzi*wieDy8cIuUN2^wYLJ+x`vR9XtwVA--R<<3-`Y3hWx^+Em$9Si>$O@HI{tNkGmMGwAEiI8sSw2VmgFN zApQEcU%Hb=+zV-gA*Uy%>&w?BS5IyYa*DBi$j%v>0SldXFonE%)#m9<;2L7EXcT@Z zILPq5qTWSvtnb)g{ERmJ&dik7&ZXpJ*WBIMrvbYcg)_8MlN+6~8Gcw(3p7XTot;0c z2PA1Zw|utj=~DvVvQcF8i9lz!t?hQGr_NceMDc~vr06`jL;^JM@`r0TxEE{B%}TN~ zKHP~u^^JNLKo+5e(G_#pxUk@L%o2hnndm18Zs;7?#3WXE11S;vO`Z|PS8F=RJd}s& z%m+$+Yu$V+v;~HvB#VG`A<*1#jIW>6!;FC0#sR6HSuT2fCtZZlQh zZW2`RapyHa5pv9EZNQ5iLa?c zv+&BAailY>$b&n<4hQo)s+S!rXV))GuJ?k$>Dw_Hf2?vHSaApD|t6&DEIphVAXi zx-1``@tR`&?WsoV#jxKS+nbxeitHWrE9-y1)O@I)m_$RnzA;_>&?a7+s}QBhX{c6S z+gO$DIn;);{{lp?y!47JO28hvJ-&g;nURvqbJ0Z4;wi(FU`eD(^(H`20lsm|{UHUPDvD|&tL+=cNqfzH$0FF@D8|A;3 zq%n!-a)#(O(KkpUc+G@|bY?Ii$BoJ(E;-E^#?VSHkWbV3{_{b=uMqB&f=8*6Im`2P8fXJ$3B}kSwcabc!F^#+)84b<@LT`v5h! zxYKvf&#>LEh5tPd=+@v{oKmWo^vr@iP&Tt&j>o$gNfENQ`={@viLE~uD?DuV_PX$l z$)Yq!g6sOE;yG-&#B0B)tJeDE^=rG1>}`ZcM4VcdChE7Wl;`*T)9B9WlUV~NvtNjH zlM4rt^06OrhA;UN&60^7zDyBphxvr+PiyfK13-l1gKnk_EGZ zX#3O|#IkFWjrO3E)>j}O(v_Ql3X`?Sn%u)vkr`2YNuqC7ydvlI^g!ORNduQ*^-;cE z4Nu*4!1tBdX%Xcw<%ce8xC<;a!H>NztYWaul1M~!HraGjQLy%<(+KV=U;j=pY}p&rtR!S}3n9XAJ|&j}JACSVj5+_k0D*7PPK zQVYI8<1WzTK>Gc`SVNJKw(uxl5$@RFXS31A?rLwyB%jV2&E4R|dr_~Kue=Q&^0GDF zFQ!-GwslR@km?>{{h;C)6FZIp>t1sBRX*>`Q{KwbK=>fTYw?O7|5f6>ASHHGsk2O3 zXdESce&aV{ZrYC8Vfk$#WmWv$v&dHp_foa3_lqk|^$cJBV0SRqPFbah9(IkGUS06| zS@1g_W3|BJ?a$9-bHOj~u9807Xi30CJ}c&3buNoip!@Jsf3X&yC0nDB>M_jy?#t3b zsUo+C>gqv)A=Ao85elJ>`@GJaZ`>8kyyU@0?d@9};nmM?ydKRBqfhUdVVeZ&pFJM@ zGQ}!{YN3BndcagT{?N;hN~db2-ApWPb&-sq2m8|&anB5%%)J9C4`#z8l1;TOQoAvs zp5-9+sFd~Ft*_ZiukQygVZODe){RL($-Ct z`|@n}IPQSou-a^y-7U(UlbW-Uy+T#{WrsiePPb=9)B#G4(>#?AQXe@WXweIQ74aoR z{H_pZ@OkSK$y-bLo1y7Ote$akMU;Mh3-TR8u6|6qHbgXvMmL4wTW{=#D1T~m?LQ=2 zS{oN@)@x8P#g#ncn-^!$B6F5W#xOC_Giq0JH^;=dsg?{)*g-g^P=>;Cg{^l&Q!u#WeO0>Ng?Z;#Dlg~2l|Tw_5m|R zN;$X61&S?9?Z{=jFX6|8F{p&waq`m$JwFak+2F=VZD=hXH3ihekG+^DUL5|I2k{d^ z%9tsC5GQCtmQk_wrdscwCGJ8TpRvTryd(%ix`IRw=iM}ENW8|pX*xflTmp3nLhZhn zRZictn}tl@-RQNX%SY`=6aTIhM(t#jj4SvVa~U9&iV4CF0c3A>6jon zSNzTfUHjsOoMJ(6;>c^r&ad>yOnt61nM{=N%HXtnoc4a&t#52&2i9v;Ju(rA{wk4i zL>l*!3ZKV7?(}$NKL1=buAruWwWoSJBTS0yAStl=kqK1c$8A@aJ7sDTk8Q0;>?LaR z@dYa;H@&I2+oluD$H&^!Z`FEDJ{Snv5d({z#9Q{tV|;RRpB#uonpbb8Y|wKC?Dc38 zsPFaUNWC$NP;2MVH5TXkuHmzv4v&hmI~eAc8D8(YnHR`k2x7Y*DWf{>S}-7GLNPVF zcA=A!r>Gi(ALUm+UP!X+|K>7HygS0mIl^F8U(i>-g~4Rw_4ij+4qHSSGm&wUVQJaw z__&58DrpMqcPe&Jef&204k$Iwfwy1sfQpQ$T7x?O<&PU+YH1;|{#X*pH>j@x!U2`qU#l$Y<_#dE z$Ld82%9@0BdrlmOk(om`B#nj$afyscG)tlPheReiPNd8!W72Vh)Kg_^dAVm#meOya z?tU}ZbNd;4N63WU?YsdQQxyIP5ule%#FO~~Q-j$)1jVGi7x5HvPkLeKcPK1mGKUNW%Uq!n9hRdc3?}W4$6rpqrvapws*P$*zxr* z44Y3Jx(g`J_nV%-aw-VH6VWX1Z*e}!*eX8MYIVMKa}nPwlyR6i+U?1smO=40QonCm z;sWGBBY_y8V0Y@v*FDH7Ie$?)_4_%>scItql)7P8L86-*Z|5@Th|d{zr2Hkkvm4rM zelz?G(A~)Wkej1-m)Vn@Y4_JOyYx?SnZE!xSFZuHbK&!bej zLi2=T3P>vwi_*wif0=Q>>ic@=?&@g?X|CJ6S{&`{tvwhpo*!m3+%-O3SGqEGpNWnhH||0nO)p+O z{6+Mmud&!0lpXE5ejq^aI4{(VLCB}3&YGi?x)86Z{_Pvg)2LXv&ARV+wfp5tDNKXjI332zcTtQj}ANkVAM&E;1aS_oSH*^cwIim4?)+n`4f{Bnu zDY5+lic-RjG_q5C*4(%|dVW?ztwax1G;2T1?FZP77kX%ll~=UJ^N#)u>9Hyox)LW9^EB;UbaNIxsp80()?B^ zR`KKa_g4|tiJ^I9$8xdR))+axMVO9jQgfUB9216qyThmcjT0w&qZLOqC59#b9~zG4 zPhkpYH5}_U0|o|rUOQckF5C6ky?r#jZ=1dw*;fiGD=G@E89G~bUY^@4eCLUL@2=uL znlv)jlb)tEN-(ca*~acTWTQz1vp}pM&Em*pzKLnKm#twre6Pq zM@K}I>)Z%|?`nM|`#_yT4>rB4q3$@Uf`S2 zCvgdtXZN|jnq3YIemne3v^mz9u+4vdnX=d^{7%Si*3Z^kMTQFc?uG2dKKy<`u=2bm zbm9S~5|aRTQs=9WI-cwzpUK(^&7SqOkc^6-jMz~Yky5;WoMM>5v%sw;0SZFHi&bHS61&?%pIx2D>Pi!GlW&x%|;|LQZ>oz}2V71?i;`leEX zchZbXMrUZB@-1EMMT`vhaEMNN{A~Yio_o12>NDgqZ*Vfk&)*=pFYe#lYSEJ}$`C48 z{U8h(-X6T#8*Tp@k6YQ~0j{X|9D}z3g@4sX120(pbu9x43N#-F8=|tzW7d27l__se z=%g{AH?cnMcRO`j*RXpIbP=M^3#mhi#_O0r_p?jrDvLRMjDm z-6yq%^Wo)A$>Kw2rK3l-4b2CglZR*9`q~p({5%PX_FXgqUSq3&d+P^ftMu-YO8yV;yPlCNRL?V$4QOT?Qda^LI+G-4Vb(|g#--k+81XAZJ->Y)S zaMB-EA$uA0kjtok$6#_SIeCVD|L3&43sf7IpC5#>HG4OeWwxyEQn}{tbvowTFJjDX zD$_c>X-A{2k7b+>6=&ojUxZJPs!4~GrRv1FOHribCPh%WK9ZX=jbJV`mwg#q=^573 zY4Jm>YmVe<_UfCuw$n)(ub(O`_aH9*VW8p0C!gYHSFTq$ouY7N_FZ;^(=HX~Nf)xN zBe{IP%Vy#Is;koQtf-%ioOoR00ltrp^HP6hB6Z_ZEroP)sQU?iI@6lP!fSK$pAL{@ z?62s$rmitQ&=N+tGJcaeaKrbl34Rr@38$P)xkdRiV#KTOM-b_UqrBQYwrFp@xVK5z z_u$gM*5OaJD&^#8-{?V+x8KHyk9Sbm$O!J9fBkqlbh(_mT}dW+n`eGtd?#heZ+)Vi z**C=BWm_vhujeZNie%upVdez)XRn4+jJ7|ZXhcg`=qe~fn@e|}Th zWqF&by6kC}o$*d;?kjrX+kvLe@S3OkU)tCuY_Xo5Ha81Ea?IWwP1){>ULE(QHSIF} z=4#XC(ci8WYE4P+!^ti^ z20gXQ$KQjE-AnziKBeNezpL}?yjgNuGRI)^>?B&sr&Jhu<{`S?wK+R;M`eWm0d7MV z^XITVtVkIxOEwaHIdT#ohQl&}#PsJp6?u2sjG!En#LeksSh9V$uEs4(j5q{`M0}R` zWF@5cBF!g0Uz#}yoV|S$C9y+h9zRHb`m0|M*i4cHW>x2j1olzhEdRWwGuy5Tb&L_f zVGF^<##^0_gi$P7_EGJ0e^~%I5IW%;A6NAeKDK%P4MTfAKs0CpnyK?fleu%%>lIDt zlbl>4FxWOZf-X_uF`HBrn_4z zXOUa`8U%g6{fm*3`q>Sw_E<-n+t!{vla<^OD^4yg@i9^f$VOQTP>JKP&Cv4!!8{IT zajnVF$9&SQsh@>@f2sbaUn4q-tDGIDx3gSee7>YAu)iSOFz4;I`at{F{K3L*`=uHI zT(N5G1&OB5qX!p{i)AaalYd7n7TgUxGM0!g?4LWCu1BaGkvp6o1hzMShaO8ja|~ZG zdG^e4CG@T0LWzgZ9nMWZkMXyX!X6}slU{D41%-khjT3uvs?T_0zECa_Vov5++5CQP zRbf_P83JVv61IEzJi2Q6^U}2Ld+#w@E!Gi-#e&gu=V}YRi`2*r*18~G3&huKxJk3A zU|{Esit*6Iw~y#pJM)CSm2VBw<-{8ECK$?T%s+9EtNG{|wq)xdRFQwQ^?E;x>Nv74{YyAs1ao7klnhOKUn6cl#cWA?jrq+(8d)5+h<8y{kJ-Ex zUq4V>Owd_O%zZRt?7R?|d{e0FY9aEg>dYbOe$nh!)JNB^X%{n+Nl8foW6UOtiX|8* ztm7vdcsoe`O5H5&WKJF2ftdXmMSKH;nyQH2Y5HO%tC{Nb?<)cx<26c0{Bp;11A4Jl z6D#JkG+#bhYX6RNuy}c1+GvNdI#_Sm&y0OD(2S;P*ln@O>CFXrwe1`CvuwUOg zw?#bmTX-1ZrGw_JO*drv4~TLwd(`e~Sw~yG7g3_0Fv4D^)%w19mjYwES)N_v%O~G! z+f_uMd0yFmmoJz3_0D;(tnF)j{D}8WN7d*2pa(d!>pK>Y3_W>_UfQbAH}qcBT(Ml0 z3RjRcVft)JoH`E8&)G!tCrgImMazc2ds1z{{|-vNuA%t+TPD4NW3m|^MHW&$Rj?=D zvxxruWWONyW~rjlcRlLPj@poizaXLe&3jZ=Re&S zs%HAMBsO|^$A;J6wRV5azV5hz;;3(D&2Vg-oWi&&cuFKOlT=&T zw+UwUm#c$ujy&3ibO&>Wd!JKZlyVp#GS+eyHSd{OrKVvzn@X6zmU^K3l0y1L2Usjm zhT3&bl#7`0j{SXF?yp#tH{=;_^7V#M^oJK132ZZl&lw(N#n0d#on8ejHXcn1&0Nlz zJWEJO8JoV9fp6HHzbrlUv*VID)Pt)^$43F z=JSh5EdN#A5|cR-hCZgl$9qRk_88&A^t~p8OKyBnwSKpJSF1xReo~9v89F=*82*i$ zSb-NE*d!#+d{A=zhRQb?f0Nj_jFUrcN=&#NSM?hw=i066A)5<#JPuF&e_Yk$pNr?a zwJ_dgYp$DTGdA_ zvFeg;L*d*X{bU49TV#7_#!biD3+KXx#17LQB|fHcAI&=7tkkVfm#m+<4%nI*Aw$K#A9lL-N(N%Ho9jEh9N~X zwk_T^GpqI_x64ATfA@b7+EQr?)NV;M`I=E0Ze;l;d=_W*VGG6WW5F}(`3f=R@yZw> zx}o2#*~)XN0Zh~uBb15#?_hSDmak4qrTX-0X3SIUKoKzIWKr7+;n=#Qi*o;N|D80g z{qT5f8;DPXcfiWsfnjvU~d>H?SFW@x-1xmfW0K9_ya80_M zo$o9D0hW`@%^hyF?>ANYXnT6qZhox%t`?s|+<$|0{b@s(8@6DyFJ~)F^vht0SL16A z0?b1~_k7rl+D6j&VFwsiouU-YUZxoSTfDb~A6{xJTsZb|JKQF)QHw6fpjvWkkBbd@ z*()drcZzrF7J>1pw7T>-{t#eGodz4#B-E^^HLB*9cd;AgDVEE3?6;z(Vn2)wJN>kL zb@nRxFwJDVVt{D5d|>OX3-2Py3RMY)(^8L+MAW4KTXQ^iS8xVrq=Ot@@6Qze<(<|fIXKp-0lz36>kbo!HeWt+gw7I=;G15}6} zzhJq6W2kcYoHz(pD?MS4awtQtHn~!=?p!=s8n!$=Z|?ZeaN79&!niEyYk(MRze!0c zyw_cmhnMoq>nZ9DGg-i|7jRjbTM<;1{BUwv8?RTGbFr&|A3~NSVyEr|gP5vWe>FEp zS}qqqJYOO^u7q83ozHD=b;?|EHHY3S* zQ<_M8C*rDEtUIo!?zT?8^d!O~&#^1U1NZfYVg^GK6BB0SRrm9ER0kIxH0?Xk+i!z< zUTJ)Mk}VTK#~%ktDE0q#3ELS?K?DVkrZ#nD-YWE|5cWy#EArb&a$jNiQE-uVChGHb zE~SEv#k$|qpC`@xLACFf*)Ix$9l~6QBCq0&bxZhmEZq%nxCs4+C&BAsDxqHOJN-ed z_l%H%$r|rId{U`7^mWeLoQNG6q1R1i-Y3}6Z*q0i>MVJ#G}rX&TZU52JK(XH#_tgv^JvhQQEAPl zSAC2681LX_Yr7@pCu6Knlx811h4aE1BFCI%k@mRr{9$kKhz^-!3oFC~F-t_qGf(jh zHK@%6rbXGg5+;mW8?}c#Uy4V8&J)it=(Tgx6&mU15o|~}hrFz=?j+wQcMT#zBMl(j7j z_eWohD2ybH%&ZR}@)PeWee5hec}!c7QeZ!vI%qWdDdWQ6%yLWA?N+^x;mZcy9OjaQ7u9h?hLZdZI$bk}2oAMsI-# z>*V{{xPv859Le8FubmTs`T{wX*~&oCKN=|B$=)^2ZLx9Hqew0lC)4l)6-h5@6oZN+ z`3vwtMY5CA+8{eI7=Id8`1}p`W~}hce7iWTu5?I|dYCvBwxDJpWVjrp+=un(0XOem z0xc$HTMZKiYn^DU!kG6bxmdQXtXHL28>(3Qu~-{JIv=zHiP++Gb6c3$V%VR|s|ExM zg=F9ps+lm$ckVnW!;kKWjH2?r`B32V4>qzp>`pfl@oUZaZkuO$kWT~+x5h*1aB?-I zS@~!hOT_|v9J|%YJqfMg;(^5&58b=UF*eBgh`}LWRB831r{`ON|I(!vTd@?#5oHh2x5F;8Ri&w1?h%y<-{q;?AH12q6Szx9 zWqZ-Oaph4Mw0FLvmC)Km?K%R235hywVWm$+>4`1-f7}kYUJ`x3FM02BV2L(n`Rq;P z$Cw58%FCIFVuLw{ul>`r4xM-jb1Q7ejd8=>i8&aEmP(xT&Z`!0vnn!~TuFx18_d7O z99gOaF_i;foO8vI)9Cke8xhv|VCoSTYPG$?<7o3|jcX!8U{eTh*1&CYzmFon~)gs{8yTc}9`9JDRpQ*p_AV8U1um zx3?9UNH<%CAa0ymEt%_G;*H!zTGvf{8sFDEwkJ)Ndo+XxExkECm&Ske z;r)xa_j765kNpa$ElL6ftxGYL)n#-MtNzS~q!c8M=?qG~E5xhJpYCOPWtmZ~$=@Y; zUmf#B+FKZ&s-;H6GpvQ(p`17REmhgZdDsX?;Bc^xXhcwef@Gbl!}N8#{{EL@k%XJJ z_uGx9>~k8twz{XO!RnCne(cpN+1*1g`w&nM{Z=~ufK%)XHj2FL;j4@qort3E&e~YE zQ)0By8n|~o&r{%7Q+XkGlM@_%pIWfUY~Lt;b@=Jl8JvB03iHAq)K46`;Hh`?O=bSZ zNwe?V6(4qzg+tNAs$PQbqv`k5qyjK5Jo>e992IXdoup^tRs(o=_TRAD602yCZhB%? zDc<6>rZ!?aaWte_$_|uz_i;m(dl)jTQK^G`EMT}|9p{J&JLUTQQM_$A%nY6!9i14I zc%B?SUa$Ia=z0VuQWq7i8b?QJ(9IEMk;bF(bulPMBECIVE!I3Zs6cS6oX0$wMmGWS)}lcVf0 znPh7@`)*+csn>%0D6u7KCLZ-glHkD>vD%_^UU3WafXzB638=pot|8h+s-7ahn1ypc zGbrcg9HvoEF-u{)hlTI6`tIF&x#4B& zGAK?p3_}ItN?RVPO6Mu8EEqcO8}AdMsx$0YZ=cdQ%Y;S75qEH_3S|`UdA{tMsiz*lwFG^DV&QuM)`pyOJ zed(R2apo_17S_X2yty)QQIbsjQ;aw~3pO-m zLr7g z1>xl7go3SHU7ZBDxSYH!oXjjZEgcRu8F)ciSGq7NTg0!NMho;^a>+>4u{nf_0~ zKTx~p`WWosW@iW3h#sqm^m23q9HHW1F6n6JX7BJXay(H$g(py~3kRX=IsaVfN@$>V z*aG|)27&Mc!q6Ak;V%pV6tM%