From a8ed66bcc455306287cc9e6c65b4c1e29adc6c42 Mon Sep 17 00:00:00 2001 From: Dinesh <97143739+dinesh-aot@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:53:43 -0800 Subject: [PATCH] Resource forecast refactored (#1760) * refactor level1 * resource forecast refactoring * resource forecast feedbacks --- .../api/reports/resource_forecast_report.py | 576 ++++++++++-------- .../assessment/001_EAC_Assessment.xlsx | Bin 67645 -> 67611 bytes .../resourceForecast/ResourceForecast.tsx | 136 ++--- 3 files changed, 391 insertions(+), 321 deletions(-) diff --git a/epictrack-api/src/api/reports/resource_forecast_report.py b/epictrack-api/src/api/reports/resource_forecast_report.py index 3c2e085c1..c5a66d931 100644 --- a/epictrack-api/src/api/reports/resource_forecast_report.py +++ b/epictrack-api/src/api/reports/resource_forecast_report.py @@ -4,7 +4,7 @@ from datetime import datetime from functools import partial from io import BytesIO -from typing import IO, List, Set, Tuple +from typing import IO, List, Tuple from dateutil import rrule from reportlab.lib import colors @@ -15,17 +15,33 @@ from reportlab.platypus import NextPageTemplate, Paragraph, Table, TableStyle from reportlab.platypus.doctemplate import BaseDocTemplate, PageTemplate from reportlab.platypus.frames import Frame -from sqlalchemy import and_, func, or_, select +from sqlalchemy import and_, func, or_ from sqlalchemy.dialects.postgresql import DATERANGE from sqlalchemy.orm import aliased from api.models import ( - EAAct, EAOTeam, Event, FederalInvolvement, PhaseCode, Project, Region, Staff, StaffWorkRole, SubType, Type, Work, - WorkPhase, WorkType, db) + EAAct, + EAOTeam, + Event, + FederalInvolvement, + PhaseCode, + Project, + Region, + Staff, + StaffWorkRole, + SubType, + Type, + Work, + WorkPhase, + WorkType, + db, +) from api.models.event_configuration import EventConfiguration from api.models.event_template import EventPositionEnum, EventTemplateVisibilityEnum from api.models.work import WorkStateEnum from api.models.work_type import WorkTypeEnum +from api.models.event_type import EventTypeEnum +from api.models.phase_code import PhaseVisibilityEnum from .report_factory import ReportFactory @@ -68,22 +84,6 @@ def __init__(self, filters): if self.filters and "exclude" in self.filters: self.excluded_items = self.filters["exclude"] self.report_title = "EAO Resource Forecast" - start_event_configurations = ( - db.session.query( - func.min(EventConfiguration.id).label("event_configuration_id"), - EventConfiguration.work_phase_id, - ) - .filter( - EventConfiguration.visibility - == EventTemplateVisibilityEnum.MANDATORY.value, - EventConfiguration.event_position == EventPositionEnum.START.value, - ) - .group_by(EventConfiguration.work_phase_id) - .all() - ) - self.start_event_configurations = [ - x.event_configuration_id for x in start_event_configurations - ] self.months = [] self.month_labels = [] self.report_cells = { @@ -137,11 +137,12 @@ def __init__(self, filters): } self.end_date = None - def _filter_work_events(self, work_id, events): - work_events = list(filter(lambda x: work_id == x.work_id, events)) - return work_events + def _filter_work_events(self, work_id: int, events: [Event]) -> [Event]: + """Filter the events based on given work id""" + return [event for event in events if event["work_id"] == work_id] - def _get_report_meta_data(self, report_date: datetime, available_width: float): + def _get_pdf_output_layout(self, report_date: datetime, available_width: float): + """Returns the pdf output layout""" section_headings = [] cell_headings = [] styles = [] @@ -183,15 +184,138 @@ def _get_report_meta_data(self, report_date: datetime, available_width: float): return headers, cell_keys, styles, cell_widths def _fetch_data(self, report_date: datetime): - """Fetches the relevant data for EA Resource Forecast Report""" - self._set_month_labels(report_date) - works = self._get_works(report_date) - work_ids = set((work.work_id for work in works)) - works = super()._format_data(works) - events = self._get_events(work_ids) - events = {y: self._filter_work_events(y, events) for y in work_ids} - results = self._prepare_fetch_results(works, events) - return results + """Find and return works that are started before end date and did not end before report date""" + env_region = aliased(Region) + nrs_region = aliased(Region) + responsible_epd = aliased(Staff) + work_lead = aliased(Staff) + less_than_end_date_query = self._get_less_than_end_date_query() + greater_than_report_date_query = self._get_greater_than_report_date_query(report_date) + + works = ( + Project.query.filter( + Project.is_project_closed.is_(False), + Project.is_deleted.is_(False), + Project.is_active.is_(True), + ) + .join( + Work, + and_( + Work.project_id == Project.id, + Work.work_state.in_( + [ + WorkStateEnum.IN_PROGRESS.value, + WorkStateEnum.SUSPENDED.value, + ] + ), + Work.is_active.is_(True), + Work.is_deleted.is_(False), + ), + ) + .join(WorkPhase, WorkPhase.id == Work.current_work_phase_id) + .join(PhaseCode, PhaseCode.id == WorkPhase.phase_id) + .join(WorkType, Work.work_type_id == WorkType.id) + .join(EAAct, Work.ea_act_id == EAAct.id) + .outerjoin(EAOTeam, Work.eao_team_id == EAOTeam.id) + .join( + FederalInvolvement, Work.federal_involvement_id == FederalInvolvement.id + ) + .join(SubType, Project.sub_type_id == SubType.id) + .join(Type, Project.type_id == Type.id) + .join(env_region, env_region.id == Project.region_id_env) + .join(nrs_region, nrs_region.id == Project.region_id_flnro) + .join( + less_than_end_date_query, Work.id == less_than_end_date_query.c.work_id + ) + .join( + greater_than_report_date_query, + Work.id == greater_than_report_date_query.c.work_id, + ) + .outerjoin(responsible_epd, responsible_epd.id == Work.responsible_epd_id) + .outerjoin(work_lead, work_lead.id == Work.work_lead_id) + .add_columns( + Work.title.label("work_title"), + Project.capital_investment.label("capital_investment"), + WorkType.name.label("ea_type"), + WorkType.report_title.label("ea_type_label"), + WorkType.sort_order.label("ea_type_sort_order"), + PhaseCode.name.label("project_phase"), + EAAct.name.label("ea_act"), + FederalInvolvement.name.label("iaac"), + SubType.short_name.label("sub_type"), + Type.short_name.label("type"), + EAOTeam.name.label("eao_team"), + env_region.name.label("env_region"), + nrs_region.name.label("nrs_region"), + Work.id.label("work_id"), + responsible_epd.full_name.label("responsible_epd"), + work_lead.full_name.label("work_lead"), + Work.id.label("work_id"), + func.concat(SubType.short_name, " (", Type.short_name, ")").label( + "sector(sub)" + ), + Project.fte_positions_operation.label("fte_positions_operation"), + Project.fte_positions_construction.label("fte_positions_construction"), + WorkType.id.label("work_type_id"), + ) + .all() + ) + return works + + def _get_less_than_end_date_query(self): + """Returns subquery which returns work_ids which matches the less than end_date condition""" + return ( + db.session.query(Event.work_id) + .join( + EventConfiguration, + and_( + Event.event_configuration_id == EventConfiguration.id, + EventConfiguration.event_position == EventPositionEnum.START.value, + ), + ) + .join( + WorkPhase, + and_( + WorkPhase.id == EventConfiguration.work_phase_id, + WorkPhase.is_active.is_(True), + WorkPhase.sort_order + == 1, # indicate the work phase is the first one + WorkPhase.is_deleted.is_(False), + ), + ) + .filter( + func.coalesce(Event.actual_date, Event.anticipated_date) + <= self.end_date + ) + .subquery() + ) + + def _get_greater_than_report_date_query(self, report_date): + """Returns work_ids matches event actual >= report date""" + end_work_phase_query = ( + db.session.query( + func.max(WorkPhase.id).label("end_phase_id"), + ) + .filter(WorkPhase.is_active.is_(True), WorkPhase.is_deleted.is_(False)) + .group_by(WorkPhase.work_id) + .subquery() + ) + return ( + db.session.query(Event.work_id) + .join( + EventConfiguration, + and_( + Event.event_configuration_id == EventConfiguration.id, + EventConfiguration.event_position == EventPositionEnum.END.value, + ), + ) + .join( + end_work_phase_query, + end_work_phase_query.c.end_phase_id == EventConfiguration.work_phase_id, + ) + .filter(or_(Event.actual_date.is_(None), Event.actual_date >= report_date)) + .subquery() + ) def _filter_data(self, data_items): """Filter the data based on applied filters""" @@ -242,12 +366,18 @@ def _format_data(self, data): def generate_report(self, report_date, return_type): """Generates a report and returns it""" - data = self._fetch_data(report_date) - data = self._format_data(data) + self._set_month_labels(report_date) + works = self._fetch_data(report_date) + work_ids = set((work.work_id for work in works)) + works = super()._format_data(works) + events = self._get_events(work_ids) + start_events = self._filter_start_events(events) + start_events = {y: self._filter_work_events(y, start_events) for y in work_ids} + work_data = self._update_month_labels(works, start_events) + data = self._format_data(work_data) if not data: return {}, None - valid_work_ids = self._get_valid_work_ids(report_date) - second_phases = self._fetch_second_phases(valid_work_ids) + second_phases = self._fetch_second_phases(events) data = self._sort_data(data, second_phases) if return_type == "json" and data: return data, None @@ -257,6 +387,57 @@ def generate_report(self, report_date, return_type): pdf_stream = self._generate_pdf(formatted_data, report_date) return pdf_stream.getvalue(), f"{self.report_title}_{report_date:%Y_%m_%d}.pdf" + def _update_month_labels(self, works, start_events): + """Update month labels in the work result""" + results = defaultdict(list) + for work_id, work_data in works.items(): + work = work_data[0] + for index, month in enumerate(self.months[1:]): + month_events = list( + filter( + lambda x: x["start_date"].date() <= month, + start_events[work_id], + ) + ) + if month_events: + month_events = sorted(month_events, key=lambda x: x["start_date"]) + latest_event = month_events[-1] + work.update( + { + self.month_labels[index]: latest_event["event_phase"], + f"{self.month_labels[index]}_color": latest_event[ + "phase_color" + ], + } + ) + else: + work.update( + { + self.month_labels[index]: "", + f"{self.month_labels[index]}_color": "#FFFFFF", + } + ) + work_data[0] = work + results[work_id] = work_data + return results + + def _filter_start_events(self, events: [Event]) -> [Event]: + """Filter the start events of each phase per work""" + start_events = [ + { + "work_id": event.work_id, + "start_date": event.actual_date + if event.actual_date + else event.anticipated_date, + "event_phase": event.event_configuration.work_phase.name, + "phase_color": event.event_configuration.work_phase.phase.color, + } + for event in events + if event.event_configuration.event_position.value + == EventPositionEnum.START.value + ] + return start_events + def _add_months( self, start: datetime, months: int, set_to_last: bool = True ) -> datetime: @@ -269,76 +450,6 @@ def _add_months( result = result.replace(day=monthrange(start.year + year_offset, month)[1]) return result - def _get_valid_work_ids(self, report_date: datetime) -> Set[int]: - """Find and return works that are started before end date and did not end before report date""" - end_work_phase_query = ( - db.session.query( - func.max(WorkPhase.id).label("end_phase_id"), - ) - .group_by(WorkPhase.work_id) - .subquery() - ) - works_started = ( - db.session.execute( - select(WorkPhase.work_id) - .join( - EventConfiguration, - and_( - EventConfiguration.work_phase_id == WorkPhase.id, - EventConfiguration.event_position == EventPositionEnum.START.value, - WorkPhase.sort_order == 1, - ), - ) - .join(Event, Event.event_configuration_id == EventConfiguration.id) - .where( - and_( - func.coalesce(Event.actual_date, Event.anticipated_date) <= self.end_date, - WorkPhase.sort_order == 1, - Work.work_state.in_( - [ - WorkStateEnum.IN_PROGRESS.value, - WorkStateEnum.SUSPENDED.value, - ] - ), - ) - ) - .order_by(WorkPhase.work_id, WorkPhase.phase_id.asc()) - .distinct(WorkPhase.work_id) - ) - .scalars() - .all() - ) - - works_not_finished = ( - db.session.execute( - select(WorkPhase.work_id) - .join( - EventConfiguration, - and_( - EventConfiguration.work_phase_id == WorkPhase.id, - EventConfiguration.event_position == EventPositionEnum.END.value, - ), - ) - .join(Event, Event.event_configuration_id == EventConfiguration.id) - .join( - end_work_phase_query, - WorkPhase.id == end_work_phase_query.c.end_phase_id, - ) - .where( - or_(Event.actual_date.is_(None), Event.actual_date >= report_date), - Work.work_state.in_( - [WorkStateEnum.IN_PROGRESS.value, WorkStateEnum.SUSPENDED.value] - ), - ) - .order_by(WorkPhase.work_id, WorkPhase.phase_id.desc()) - .distinct(WorkPhase.work_id) - ) - .scalars() - .all() - ) - valid_work_ids = set(works_not_finished) & set(works_started) - return valid_work_ids - def _set_month_labels(self, report_date: datetime) -> None: """Calculate and set month related attributes to the self""" report_start_date = report_date.date().replace(day=1) @@ -405,37 +516,59 @@ def _sort_data(self, data, second_phases) -> List: ) others = self._sort_data_by_work_type(data, WorkTypeEnum.OTHER.value) - sorted_data = assessments + exemption_orders + amendments + order_transfers + minister_designations - sorted_data += ceao_designations + project_notifications + extensions + substantial_start_decisions + sorted_data = ( + assessments + + exemption_orders + + amendments + + order_transfers + + minister_designations + ) + sorted_data += ( + ceao_designations + + project_notifications + + extensions + + substantial_start_decisions + ) sorted_data += order_suspensions + order_cancellations + others return sorted_data - def _fetch_second_phases(self, work_ids) -> List[WorkPhase]: + def _fetch_second_phases(self, events) -> List[WorkPhase]: """Fetch the second work phases for given work ids""" - second_work_phases = ( - db.session.query(WorkPhase) - .join(Event, Event.work_id == WorkPhase.work_id) - .join( - EventConfiguration, - EventConfiguration.id == Event.event_configuration_id, - ) - .filter( - WorkPhase.work_id.in_(work_ids), - WorkPhase.sort_order == 2, - EventConfiguration.event_position == EventPositionEnum.START.value, - ) - .add_columns( - Event.actual_date.label("actual_date"), - Event.anticipated_date.label("anticipated_date"), - ) - .all() - ) + # second_work_phases = ( + # db.session.query(WorkPhase) + # .join(Event, Event.work_id == WorkPhase.work_id) + # .join( + # EventConfiguration, + # EventConfiguration.id == Event.event_configuration_id, + # ) + # .filter( + # WorkPhase.work_id.in_(work_ids), + # WorkPhase.sort_order == 2, + # EventConfiguration.event_position == EventPositionEnum.START.value, + # ) + # .add_columns( + # Event.actual_date.label("actual_date"), + # Event.anticipated_date.label("anticipated_date"), + # ) + # .all() + # ) + second_work_phases = [ + { + "work_phase": event.event_configuration.work_phase, + "actual_date": event.actual_date, + "anticipated_date": event.anticipated_date, + } + for event in events + if event.event_configuration.work_phase.sort_order == 2 + and event.event_configuration.event_position.value + == EventPositionEnum.START.value + ] return second_work_phases def _find_work_second_phase(self, second_phases, work_id) -> WorkPhase: """Find the second work phase for given work id""" second_phase = next( - (x for x in second_phases if x.WorkPhase.work_id == work_id), None + (x for x in second_phases if x["work_phase"].work_id == work_id), None ) return second_phase @@ -446,13 +579,17 @@ def _sort_data_by_work_type(self, data, work_type_id, second_phases=None) -> Lis high_priority = [ x for x in temp_data - if self._find_work_second_phase(second_phases, x["work_id"]).actual_date + if self._find_work_second_phase(second_phases, x["work_id"])[ + "actual_date" + ] ] high_priority = sorted(high_priority, key=lambda k: k["work_title"]) rest = [ x for x in temp_data - if self._find_work_second_phase(second_phases, x["work_id"]).actual_date + if self._find_work_second_phase(second_phases, x["work_id"])[ + "actual_date" + ] is None ] rest = sorted(rest, key=lambda k: k["work_title"]) @@ -462,94 +599,44 @@ def _sort_data_by_work_type(self, data, work_type_id, second_phases=None) -> Lis sorted_data = sorted(sorted_data, key=lambda k: k["work_title"]) return sorted_data - def _get_works(self, report_date) -> List[Work]: - """Fetch relevant works for the given report date.""" - env_region = aliased(Region) - nrs_region = aliased(Region) - responsible_epd = aliased(Staff) - work_lead = aliased(Staff) - valid_work_ids = self._get_valid_work_ids(report_date) - works = ( - Project.query.filter( - Project.is_project_closed.is_(False), - Project.is_deleted.is_(False), - Project.is_active.is_(True), - ) - .join(Work, Work.project_id == Project.id) - .join(WorkPhase, WorkPhase.id == Work.current_work_phase_id) - .join(PhaseCode, PhaseCode.id == WorkPhase.phase_id) - .join(WorkType, Work.work_type_id == WorkType.id) - .join(EAAct, Work.ea_act_id == EAAct.id) - .outerjoin(EAOTeam, Work.eao_team_id == EAOTeam.id) - .join( - FederalInvolvement, Work.federal_involvement_id == FederalInvolvement.id - ) - .join(SubType, Project.sub_type_id == SubType.id) - .join(Type, Project.type_id == Type.id) - .join(env_region, env_region.id == Project.region_id_env) - .join(nrs_region, nrs_region.id == Project.region_id_flnro) - .outerjoin(responsible_epd, responsible_epd.id == Work.responsible_epd_id) - .outerjoin(work_lead, work_lead.id == Work.work_lead_id) - .filter( - Work.is_active.is_(True), - Work.is_deleted.is_(False), - Work.id.in_(valid_work_ids), - ) - .add_columns( - Work.title.label("work_title"), - Project.capital_investment.label("capital_investment"), - WorkType.name.label("ea_type"), - WorkType.report_title.label("ea_type_label"), - WorkType.sort_order.label("ea_type_sort_order"), - PhaseCode.name.label("project_phase"), - EAAct.name.label("ea_act"), - FederalInvolvement.name.label("iaac"), - SubType.short_name.label("sub_type"), - Type.short_name.label("type"), - EAOTeam.name.label("eao_team"), - env_region.name.label("env_region"), - nrs_region.name.label("nrs_region"), - Work.id.label("work_id"), - responsible_epd.full_name.label("responsible_epd"), - work_lead.full_name.label("work_lead"), - Work.id.label("work_id"), - func.concat(SubType.short_name, " (", Type.short_name, ")").label( - "sector(sub)" - ), - Project.fte_positions_operation.label("fte_positions_operation"), - Project.fte_positions_construction.label("fte_positions_construction"), - WorkType.id.label("work_type_id"), - ) - .all() - ) - return works - - def _get_events(self, work_ids) -> List[Event]: - """Fetch event information for given work ids""" - events = ( + def _get_events(self, work_ids: [int]) -> List[Event]: + """Returns the start event of each of the work phases for the works""" + return ( Event.query.filter( Event.work_id.in_(work_ids), - Event.event_configuration_id.in_(self.start_event_configurations), - func.coalesce(Event.actual_date, Event.anticipated_date) <= self.end_date, + # func.coalesce(Event.actual_date, Event.anticipated_date) + # <= self.end_date, ) .join( EventConfiguration, - Event.event_configuration_id == EventConfiguration.id, + and_( + Event.event_configuration_id == EventConfiguration.id, + EventConfiguration.visibility + == EventTemplateVisibilityEnum.MANDATORY.value, + EventConfiguration.is_active.is_(True), + EventConfiguration.is_deleted.is_(False), + ), ) - .join(WorkPhase, EventConfiguration.work_phase_id == WorkPhase.id) - .join(PhaseCode, WorkPhase.phase_id == PhaseCode.id) - .order_by(func.coalesce(Event.actual_date, Event.anticipated_date)) - .add_columns( - Event.work_id.label("work_id"), - func.coalesce(Event.actual_date, Event.anticipated_date).label( - "start_date" + .join( + WorkPhase, + and_( + EventConfiguration.work_phase_id == WorkPhase.id, + WorkPhase.is_active.is_(True), + WorkPhase.is_deleted.is_(False), ), - PhaseCode.name.label("event_phase"), - PhaseCode.color.label("phase_color"), ) + .join(PhaseCode, WorkPhase.phase_id == PhaseCode.id) + .order_by(func.coalesce(Event.actual_date, Event.anticipated_date)) + # .add_columns( + # Event.work_id.label("work_id"), + # func.coalesce(Event.actual_date, Event.anticipated_date).label( + # "start_date" + # ), + # PhaseCode.name.label("event_phase"), + # PhaseCode.color.label("phase_color"), + # ) .all() ) - return events def _prepare_fetch_results(self, works, events) -> dict: """Matches events with corresponding works and returns formatted data""" @@ -585,51 +672,33 @@ def _prepare_fetch_results(self, works, events) -> dict: def _get_referral_timing(self, work_id) -> Event: """Find the referral event for given work id""" - referral_timing_query = ( - db.session.query(PhaseCode) + referral_date = ( + db.session.query(func.coalesce(Event.actual_date, Event.anticipated_date)) .join( - WorkPhase, + EventConfiguration, and_( - PhaseCode.id == WorkPhase.phase_id, - WorkPhase.work_id == work_id, + Event.event_configuration_id == EventConfiguration.id, + EventConfiguration.event_type_id == EventTypeEnum.REFERRAL.value, + EventConfiguration.visibility + == EventTemplateVisibilityEnum.MANDATORY.value, ), ) - .join(WorkType, PhaseCode.work_type_id == WorkType.id) .join( - EventConfiguration, + WorkPhase, and_( EventConfiguration.work_phase_id == WorkPhase.id, - EventConfiguration.visibility == EventTemplateVisibilityEnum.MANDATORY, + WorkPhase.is_active.is_(True), + WorkPhase.is_deleted.is_(False), + WorkPhase.visibility == PhaseVisibilityEnum.REGULAR.value, + WorkPhase.is_completed.is_(False), + WorkPhase.work_id == work_id, ), ) - .join(Event, EventConfiguration.id == Event.event_configuration_id) - .filter( - and_( - WorkType.id == PhaseCode.work_type_id, - Event.work_id == work_id, - ) - ) - .add_columns(EventConfiguration.id.label("event_configuration_id")) - .group_by(PhaseCode.id, EventConfiguration.id) - .order_by(PhaseCode.id.desc()) - ) - - if referral_timing_query.count() > 1: - referral_timing_obj = referral_timing_query.offset(1).first() - else: - referral_timing_obj = referral_timing_query.first() - referral_timing = ( - Event.query.filter( - Event.event_configuration_id == referral_timing_obj.event_configuration_id - ) - .add_columns( - func.coalesce(Event.actual_date, Event.anticipated_date).label( - "event_start_date" - ) - ) - .first() + .order_by(WorkPhase.sort_order.desc()) + .limit(1) + .scalar() ) - return referral_timing + return referral_date def _get_work_team_members(self, work_id) -> Tuple[List[str], str]: """Fetch and return team members by work id""" @@ -684,7 +753,8 @@ def _get_table_data(self, data, column_count, cells): Paragraph( f"{ea_type_label.upper()}({len(projects)})", normal_style ) - ] + [""] * (column_count - 1) + ] + + [""] * (column_count - 1) ) normal_style.textColor = colors.black styles.append(("SPAN", (0, row_index), (-1, row_index))) @@ -728,12 +798,12 @@ def _get_table_data(self, data, column_count, cells): def _handle_months(self, work_data) -> dict: """Update the work data to include relevant month information.""" - referral_timing = self._get_referral_timing(work_data["work_id"]) - work_data["referral_timing"] = f"{referral_timing.event_start_date:%B %d, %Y}" + referral_date = self._get_referral_timing(work_data["work_id"]) + work_data["referral_timing"] = f"{referral_date:%B %d, %Y}" months = [] referral_month_index = len(self.month_labels) referral_month = next( - (x for x in self.months if referral_timing.event_start_date.date() <= x), + (x for x in self.months if referral_date.date() <= x), None, ) if referral_month: @@ -763,7 +833,9 @@ def _generate_pdf(self, data, report_date) -> IO: id="large_table", ) page_template = PageTemplate( - id="LaterPages", frames=[page_table_frame], onPage=self._on_every_page(report_date) + id="LaterPages", + frames=[page_table_frame], + onPage=self._on_every_page(report_date), ) doc.addPageTemplates(page_template) story = [NextPageTemplate(["*", "LaterPages"])] @@ -786,7 +858,9 @@ def _generate_pdf(self, data, report_date) -> IO: ("ALIGN", (0, 2), (-1, -1), "LEFT"), ("FONTNAME", (0, 2), (-1, -1), "Helvetica"), ("FONTNAME", (0, 0), (-1, 1), "Helvetica-Bold"), - ] + styles + table_styles + ] + + styles + + table_styles ) ) story.append(table) @@ -796,6 +870,7 @@ def _generate_pdf(self, data, report_date) -> IO: def _on_every_page(self, report_date: datetime): """Adds default information for each page.""" + def add_default_info(canvas, doc): """Adds default information to the page.""" normal_style, _ = self._get_styles() @@ -822,6 +897,7 @@ def add_default_info(canvas, doc): subheading.wrap(doc.width, inch * 0.5) subheading.drawOn(canvas, doc.leftMargin, doc.height + inch * 1) canvas.restoreState() + return add_default_info def _get_quarter_section_meta_data( diff --git a/epictrack-api/src/api/templates/event_templates/assessment/001_EAC_Assessment.xlsx b/epictrack-api/src/api/templates/event_templates/assessment/001_EAC_Assessment.xlsx index 6895a1c742cf1380d0ed91259ca8bdfbd01c8e98..34fd0122a1b05e3496aa5c9dfa034b6e8f24e3aa 100644 GIT binary patch delta 49299 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 delta 49310 zcma&MRa9MF&?Sny1cG~z1P`vk-QC^YT{i?LxNC5Cf;)lW?oQC)?s^Yj@^|;W4|ntf z49=dl=Bk=iwdAnVW1!k&psHbE;p^q~I!&O!!1UtZ!QujPTO99Re5am6tb6BUI7VA3 z%km|h#k)Qpa21F!koxF zW+kVRPEH0u+sc-uCD_+is{3=&E(R>kMEtHBgxe6QJV-Mwfi5g)oBds5F&ZKDA1pzovBmbsiNvvrh`Og%dle&&ABpczU}8$VhKl3w zjj^gMU`M;iD@moxem}|Eii%8Lz3cNCrf7z{`|OJTcL}=TBF8;COVwu)^fg+zN-Ub6 z=Ma*~wBj=F$LuePf2YyoCDHbdNGJ#uyo>RLm>6zkwZ)ra$<4(gQ{C!8e?V>P3xi8S zm|XI#d+s3Sw2$!MakJxy|NSW94uAjnHH##@3rKZVJHn2kXVFN4znr+3%~ba<t9u@azH&W4%%I3r(Rdu|Jqu;TsEZMh$gfMA*b)QGZ1BSHH6v?X- z4S0wFH#S}pw3or{6}^&Qh@;4`e-PevhaL!$YU$!h)N`44q@#;UNHrP5Ae(aeg$kkO z5Q8hbNm>1=WpP7A%&&D0sjF3ky4A6T5`Rpy8sZsK7s5cD{AU8iF1*wcsmRaM^UQQ4 z$Slz*Fz1-L+X6CyzM3mza-PNHm-d|rMPS_mwjcJmucHkBBWzhBS;M@-d7#Lz!mJwj zO?7oIu<`)QGR&DUw}(<~)nxRFGx>t)ZW=-(tH$ZWmQ6Srm!I1zU@Kat6P%RZMk|}l zh$%zWOHf7fkh@R8aT-c`0j+DyA`|AmwR34Rz?XUVX@I+#HTgM?H zta2nmK3bX^ArI_swUhm|2XWO!zv^|8Ox`r*yxF|=Old!<95S>8uF~Ao&kc!1!7g26M!x!pNT*#>Rbi`azF}s2$N!ORFDK8qZuq&GNLo3?tlHdv-lr zYw{*r=T26Gf5xsJ1Mi<8*8XgZZ`_@TcQ0PgJ{^cJ4x4whMMq=aRDGS`(_QOqzkbaS z1Fk;K5W_g9+cUbdsCcDiyduXNOk?~=M)ZV0pmqP=_Xq(7rVSe}i-sG|f`SEnYB*A^ zShj2_D{U@^?_&%HN3@SOXF26vP>7dY6i)OGa_YDwzN0!tDTO`#$z|aT?U2Dw!onUo zvyAZaa8FP{V*h3H>xxBI)Fo>wO4O>8dro3R4aCb0`MWlTurRDA^+^PLVnU3%R$XLbAUxkT& zqmU&{nN4d#|`YkC7@Zn7H5#i%G)A%Lk zm};4dtdca9zqwAXlPOt%L}3uPY8|FGiAdx=29wxRlHn<@Pr%?5zLD#6uT)H$wt1FO zmYGzi=0s>xWIMq8NGxazv}VIirv$5hs=^pOSKuI$=7N{`gu(7pjQyQ|aK9Qlx~Au8 zZMe@3Q+kUwPeK&y-Pxo^-b+T`IjynmD=HY+>nqsXuZ;Lfl&>Th!FoaGU?0LwP?{ot;nh z?@ZTmo;ZYLF)^U?LAo!27b3ywjSJO-*Y2!)K*le=vqEq*Is3Ya3*s&-6Q$A^wFBw`lY*iGoHqZ6^z&diT@1})eZ3N}=;DDNy2b1LR!4m`rGsrrX7 zkt;UxG2)Dnft^03$o!^i(Y6agU_F{AN+VKJkb3>+JCi{;9k|-9x;Z-GDFmxCJsXWY zPrOfd-43+GZliv1YhZ?>)P>Pl;RLc%tul1vx@zxkKZG(kprBX2^X<{?+?p zGp-YEqPGXurzyeOi09@gC;S7jq5)P11RX5$s^+%a1X+!mELj#Mb`~lolp*GflSg4| z0V2V3f>zzc3#Mf@k5=xglEC@5In^vx3|*LUBt9X(16>n?5kf zC0EG9`URMXa$e2^j?`wzq2q9y(J*GEMKlSpmC0M-5(IsfvB#l zjb{syTLaNT`ZPW)kT7(Dt_ZbjgUbn-a53moe)VJ#Pl!+i9bdt~zxmY*1x_Zyg)WeG z9io6+xZ@5S>h=;sP|uS6q(O^E0k?{7V#5aa-dzsw?SaZY;P^vvI%J4H@#Fdl@qe{d zLWY9lvMEv^P!)F$Zt0&uS+eC`7`H{~r@F764-chcokZ8}cSD!!Rd(wgUwj{5cJ^)V zesCjpKQn%9yob zahG3(bGHoyri2GWpe67rq7mb461=rzj&iq^66;#8lmOi>XXahiN4`#Y8SnS1t*ch+ z>sPC<4q05zwN4MGPqG8N*Nfy{F?BMUcS5t`ao$}j1k+yk=ATe|Ztr~5%@w^fbWad% z;2}OUpZ^ zfomtBYd1?Jjr)qOwN5#WCC_H@<+lx%l6DRNriVQ7@wTSb|H-|KR&iXfWEHO?>neLS zno-ptWBIzsa@byxHl?L4nqJl5>R8b@J#3J3@2g5-lUzxgm7I>|S;j}jD^tEU;CVcw z)%h7E8sif;wpTif+4R4ua0?p$j#Km0qNr~i9))Y4RROeDmvy6CHr}!VfPrHg`_p}k8jhkwafQzTs;oPjICIU;8q+_w7ZNtT>8lU zv9o+SGGt}+>YXen{;ULISiHeH#)N+V{pG4{ObB`gs~W(*C`F4oews%phP5V1UkgB~ zgQzxkE=bG3=j;hI+$EX@EdLw*@Is2{y{^2@zW4Zz_N=`_em$g#{_0r->#n1u!wzS? zY=K9?XPu!#t>#DRDSqEAwX5p2&+wh@FXrJWp;N8@LE z#JkGSOl7?>0ytGUDnEEkI&TlpRPkA7`b+n3^z++evm`>;_5T_Fe*z%;&VM}rmoPWT zsqY%D1m2xSf9F5N0si{+hJgHkj{57z|Hl7+VYi4=l`lVzIPNZ#S|D}Bc-qa@s`2oB+^8bVXpK$E|WP|vhKVtuQ-vCfH0ONnW|95b$K?G=i zvnBOjbAujtJ!Ryk1K&l4o6}jpGDs49QwUGi-v>wo!MI;_k(;<+Y7KU?)gUWnzgnj# z?14;rNbspg6+tFn27(dlK!dr^9~3Y?S}C#q#wsNBcHLGaAT4#xz;vJvjt1Axget|e zM^s{jTAbgqr@kr}k}bUl?ZMjSj6&ABN|@So=Vq-z1Z$`^$zy_n*QkV*h5J`U{r; zZ}`eO?(frV+5*`(G1K3~Ohbq$`V}6U2Vwbq$$9syUr?A%S#-7R`Ib^Oe-=c`S^t+- z`5&$7KQHF~(x(1{t^dK=|6-VbbMm}i-}lYQRT_q$SipaiN!R>(t2u}O>l)IH;*u^} zt-pyK`|FEz-CtP9<}a-M4_?BefvC)>J=W#XTj>W4?3C-VZUvd7l$bLt6MYLbD$MP+ z_M%0PN)3nkaa<$LVM>iR(g3pj-v*ffFAIj1iq}SqSI8f_gxlbVVzn&3q^4kCj$n}S za%eaJGrhZwbw+}n-4esQzIC}Jx6r5WA+RzLN#xWmjK z(xTk>M-w`7jRg5yEU`c?E%+?34uh<|7a*==QyGB*;TU4kiZv^V@1~C^$7{;sx$5U{ zU?Bb|H64aXzI&N`W8*s}f&K=*!8wuXQCvLhxYE_-T)%=VwkRZDUpEOtZhE(MQUvUx zcghBB+NfQ?#%E{NQBLOtS%P0g*JfvAC)mf>4$Mze{I%iEjcr$iNQrTf zOHzM4ukdRbG{yelwyrnltrc9au9cqj1~5K^$d6_%LI&oWf2hNnCDW^{%LI^LF%{dY zmk{(R0zw4RBw|SQU7{NzP!Ql}QE7amUNPrBGEzTm+x$jqJB2W?LU^HBCq9T$GF=D} zY*F_DpIlq3+VVMF&E&~Oof^~-m@DW&+j0ATs1lCOF0qLwD=IXz?v0U-I+6lm3y9L^ z*KY9*y5TBejFB~+1dB3aQjq)U6>aXeL-dDPAGcU+)Zq8W62o?>dYZ}NjKJy8*tbjB z(JjC40^J~rxFBvm3;SumT^}N3(PI8YAjn&xRl9~#aw<3wp}E1Sa|`2WhvK+|o_BxS z6NC!B^xC++QL|ALYlsx%BiB01l)gT$A=~Y73bXu|a1n`cz!Q8I?a!4WI=lr7N7XR#fY zPH$J!yRcW;#_4su-d`W0j_dil-(M%6uDzV*x#{r`5%GDxE)TPx_P<{Ls>XlK3VFRc z0M-Ea$3u3z_2-9+o*v+?)8O`E78`iIy_`SQYxiY-X)JpMR(M|?hSikbj~B8L)%Lx< z_&!y20zNMn(Vf8a4zZp@AFHW#Bil}J{*m>NQ(SE$RU`S1zEZ~rDzS7&F-2Ln9j&;{ zmp$y1+Sb|%Z!txfbjN6_fL7=AABUT=yK>v&_+I(M1F`h;C(&e|nOX2*WhDC(o@Teg zlGZz2ffX4b%w~-Ct_>>Wc}t90jr+D}Jt;#-;{MFm`VX;Q=iTm)aa%S$9^a??>Hg@f zm*YobpzZZgZVT{um>&PU-s$@q@@f3Lb%(p-v+)A&>X+x;#ap1``RVfW>s|EzlWo@O z7tb4CY0uX~@%ub%JKnaZ)A^_@$ALUv8rTCu35RUJS4xqf__OoSt5=gC5plCOt!vfi z*2mRbR@dh0<$$~mIf_45XJ$!xt((tXh*tcIH-1bMYVs?KD+vo>j*5l>{AV$>POrIk zQYah7h#A&uoB0GxJAwJ`vf|-~;ktVmV-kZ4U$oOAAMe{cj))TQhWSehQXM%c+p1v_ zEVd_s9{Hub1cTBmN?#l*MwD74@j0-V!8h`I&d33-842mapi!fcQl2v6R37(#)S9sBxi5$74DUzUSZ#|qA(RLXwRxhBKSE7&cRvUE5Vt+(L2h0!eH`8j3RE68$a_WClzi` zd_1g(o-3+kq)GP7RB!g#Pdxd);Te>n1Z@F_#RL%DS-fD5}t&s0!o21KX_oA8sycf7=^UIf<%#hs3Z(=;+4uR(yV%)e1-JLyQ*e` zy_KGc1Z`Z$*KEL6GQvsGF#TK==qTcCO5L^@{E(61AAc#CksyR8yOME$qSQdYqa_V4 z>x}S6xKe&n-B)?)|D*dxX-GoIQF!}ZF}QgL{=*D=m?2F&3P%iTgxw) z@CK*;R$NJz--S>%pSB*Zv@HDnnMpW$G=C>3F%w3n%dZTk?i1`;h@&{Oe*6R`R*8Y> ze(|UX4px-(3A#v?3j7o04~nAUTa-S;mhPP;QU5Ya!Z2E2dcM_&)%5})$JZmkjv~w< zNYY(>7=Bm*S*^O*ZwT9zE1z)NauIQ!=2!F3$eH%{1RCd_i4V~4)GJ%A&azoIfA_su z;X_w40knLXs-5)O%?7_!<8ai9WBL<=T;}k$i}#_@wn@~G@fPdeU#V%5_wXl&Z8v|R zQY()0F9U-ZR!NpgQjx>m*VkYI-Va?UaZlYZ(@Pj`XDboS#SJ+s%ZyFxjBv*Vkm&@d zu^mHgoBu%CHa7L3my<+kF(DBn7N*P5bZoi0sAKWaSaN30zz>6Q%BPn249rfhhe$vo z5nK)QXp(9~S#~*?xr#a3+phkOli>#ENR?rO_M<|-9Asz|%|ZGNrPA;lkY=m#0Jn#$(_Kc`nh%`5azWbuj^$wZ z&4Jz*;`O9*=OK_aD6 z0&-*%(0Fd0&Ng{|39d7K%J6BAHFGs+SDe7EyI%F>qA7pYN`@H^R#WhGi9SJW0$Gr zG808H|HyPw)k4O}0MynHoR-L-oCfb&vAArX5YMzX-*n)o1>iC}`E1%!QdgT4N-4{+ zuP56C=strypI~+7C116Y$>H+!; z{*UolL`!_=!n$mjLdgl~P}%DD9psFK^73|RP}dMjdkF?kAy1Q>O31cLb?=dEmt@G4 zQZv3w#WMu~j(8~uVAawtgZq&UN%(4)pvEe!Yk?^g9yoYxh}X+cyuno}u4I=v@bssu z8(okyK#{K9>1B0WklS~KC}gs-q31>Nskfz4G_L?J$$r5qp|@(EmO&g{@X$reyr&wh7!RF zWMgO?_1c!Y8&R6s$oVC7SS9L;0%;5CXuQj zCQ$nS7wBU9q^QeQODw4UpXFKWONlQKAEv;JU~Fzoq0{MLXX{KTf9lP3yEhiT92?>^+xxtlE$JpN5$3^Nf$0U<*cAcdDcxn-K@$&tsu9;NAtq?lP zi2FBk&cIZ@0C|-(Ze+y%$KZbq5$CTH=^y0I!Z8- zor;KYE2I!a$D+gQRc2Cjs$)lv#~;A^c*GjZ(v>Zc)vnWRHVp1$KH)*eLJpff$qCMK zjmN{kMf{N&n>gEIa?!~j-TW(pmU)Zwjq379#rz`M!RbB)9*GJb+rc@ArLHSQFtc4p z0K~$oluaaovN9bH5a6^)%XTGj04;5He-*wF8fN1z?Gz~;HnpoCxmp%{^FvAHXs3#c zpAX~UfX;)WAE8BaY~f1iCG|sG07%}-|K!yV@m6@lzuBtQ*Zs>&*Hb0UwY|BQ672Y>|9L@~E*^TVB)8~|;QHC7s8!~19HE>6e( zxP^KCpvPU(^7_Nl$x&;TsLj`0OQO%a-eEApiNVJc(5KMUpt_!!T*h>+%W&j%X5BNN zLP61K$;`&5rUF-NVe!MboOmmEe(K^*5lhARQAr0an?Ef5%bpgLlVE8FfVv9%c4iJs zSBd~CNMNC1@Jn0q$E^zpu%lqmt}4X!Nxx8+?53%#`KC*nPMXU(k-Q?uKQ+56DOG~D zfjN(Ld(LXFA`C)d){zOBj*qp>(5woBBJ4vDo@eXV;3UX2+X1^63QmpydZ5J?w)I2i zdlD7JueRcP-u$I7O8J(6f83(HJn&69Ie5)dqWRjZ(gq`@RLhe}k-~iKhEcnj#)$@2 zUpl97tuni0$M1e37y&QUa$;sz9b8FMsRv1G9wx;w2`{)oGbgYF3~X3AxnRvws{PvT zCB~egPUV;9eKM1_2Pz#MgZYGzo!Z%iBR?{-wVN@guT8+VzE~hYw8VOu$@1P=cy|+$ zRazL5l`_}B9#PV|c+n+nFXV_ixAA4CjqM;cj?zr>>%Fa*1gZ4#gwm<%*^FbCvppH- z1X?VCchP2TQ6=`i0BZLbi_Mp`B9t9{rlhR?O)4E?*pV>Ot6!wb9@fbkm zcx%&>sP`1}5l0!=t8t@ox8~I6YKbKXEbTT*cfH&DNL7$0SnTWoM!j3(BgUFc=}%44 zB{;iN>{92UIZTd|z&^b$&VsWw;fku} z8z!u&e-x9fP?g=f7)5y~EX>0cYl9jH*t5Tk+7n-7B#`*pv z^Cpw~bqaVF1~a3qQFi)U{~coF4NByVEp#4Tk#&iKnTuFl4BpI|_-O4^k`VNav7{Hh z4A-)*>XJej9cz4#HL%mp_FeaA?WmNgU`u(nJ`E42ND}?fYQo}F)qcrwC<(8#K{P%? z{4t6A1KZ9xjTjACV&`SDDTMXaPRLjxjFPowSR63+vAE`!=|#fvf_Yi?gN?ryP&{n1r zH)SCQ2FkaT)oI=A6|rV>gMvQw^wNcr+ZHPE9;FOJp}ZAH;3Y@RU@Emr(D6>1)!YV{ zmhDn5tRJ0)E!3=QsEc9xZ%dt8;y(WJ+*t=&*?G_=mjd(iu;-?O=j3>#`iVItW*TtKqX>3Y#CFttImvMn67w%rKbJo#gv*4xZ@*@QV3 zlbeUIzm8364U#G!D_EbZy<2wd0-W7JHH;Zcpg**IR#~h|!PS;pcAAUaH)-~O4XV@wH5mCX`-%GBcz zLbh8_zLn@SLHYiv{7;kmxiv3Xi#*$yrdac?1RSkn64+P8E+3sM7WB$IXK9O5k8gCG=J8^SWNA>qrK9UCO)lJ4LQ|CwjQ< zG#U|97|V~Cy$u8mr$uGn{SsIy$m zo{WzCKy?nRHe_8ix=ukEAq3s}LT`YQ{7ALZ8fm20^J42%?pM-6-NmMw_U6dlNwc5? z-+%eJSoN~ezSR|2q-0Rhp}9=EP+FF=dCJT(W-J`&$5ETu0PUDrg42=GtPA%4k(lzQ z4q4x6r#VM;Soe^D(JIA1TF<3<*+>GnFBaCIEGyiXc$mEY)&p~+kzufu4>^4!;TMX0 zWk4SEpTCYLAXpuupzKE|jxFmwJ-V6=`Cbg8WGSi0)$-O((yl);@s0&=U*KQc!yuGY z>ZiUJLsif%+!0DSg7skxojoHkX``e>+rE|Wjc`hU^nQjPRkLIU72tF2UxFu{T8b$t z+W6o4iL`EoebCwDZUYkeW6w^Jt@EW86!|yCASUn5uSm&|c!h09pEw7U1CZE{L2C@t z%A3X_!BU78f3=C*@S>A^b{b_zM;2v|-N^gdOvc(Oet_#TJ=* z1*m(^ucU^wmq4ks;bbxuRa_S%_+EK|-)T>A19YVL6Y@MJf$#E)WlKI38<&m0@>KbL zkW`vbK8RRV9;EXBtiU)c(kN!7pz3V`RWElgX9^>$8YR&RDM)D@>Zfd(y>2Th(7|%Z z4ze%>;r269TOuT=9YG|(|FD1pLijHr>c0U6Ng-Ae(mvH!>i??Wm*=|Lz3oo@QrI>)3Oe=lk$ZDozJa)L82V%dUr?^LW=p7~GvAzvZ1 zOk0$11%+G+T)V4(0VC1Ev9t1Wml;RrPr*wohXL5>%&R4G{(@GkRE zyC_XmcXVa9&Q)BEN!>pP$4%fs#btLNkLl|-jl z*7McLF<@u6F8zA>x%27a!Ra=V&oN2tb;&3$phu@!@uBK^IZZFc_3K6@%X|6!GH@Ox zYIZ#6yZ4g5R-U0K<;@wH48r^2&+`B7jz>uJ30tD&i!VD9akfD9h0}Ge@U~oMPHBw%D z#%jmMHWQJ;9(oi4t?#=!{mxWt;Y7qRmiw`4RwZIH{8E8dVBL)z7E4YXMc&wvL*%-Y zC-kJEv#5jp`ix+-J0h>y^gIO{bJcOC0BDKUba@;v0d3{Ki!C+lw|D0)3cy9tN{@`b z4V@IgC9;fUY?Du;Mep3D#t*_%4$U-_Kr_tbHvIAYmBvKfWKt|;LtKA<<;D)`cO1cb zpBpv_Jbk2`CEkYOW8Gl;{+mU<8k$e3%z?-Ha&>KGS}4CxH>BzOa^9MQ#()x_e4}t7 zu0OaTy#*a@m+dL=-hKS4cG?v*FE5FR#5nW29}9Wy8_tsToqBqPF_#G`XXwJkM>~s; z{L;w?@2nQLd9Y~(Xn%K;&Qbh|UJ4^>$7odGmzHt>ES4* zGSH+4`4W6gVl*75je^Ng2v|W!FiM>0wUCdRm9?S0ORAxl@STae+JgxLZN7ww*6MRw zDfR)CEZvlX$iCK-zuPf#E^gvCxH%#XDx3d!)N5 zJ4#I&^P~suDsWHb0sfVd5JoE9O#UQ%It$gH{faSRw_lEAbO&k#sK^2&mZ4Gh^~yPiqD zM`Ch5=$HFFvjc@>TcdD4Q)QF0=#S14Y5Q;vuC_i+>^nl-n}-e&a#N3V zPugn~&6kO~J*8QK8A%sG8Wm6b*Sr;SiBu7&kTXvJy$Ls)+^!U15B84&>^KjN6B1Yk zM}f7^SMbKI8T?#0aRmAi+h9f?LvD@Ye!>bVA&)N*jKK6X8=gndK>TEyD_D}#tj}6e z?28nJ441F(LD9GHV+jaP2X@WVxXj?#~V)Y4Ip%92mb@XL{|PuBz!qAT^ORQo9} zZ$AvkCtLDaTzXz4m5L5W=~tDIb49clEgeGWC~!jbz}Y9y^2a<(c@3!(`xfXY}y)wEx+y%GU#U9bRU)ts><7tbRzwDULGazF=jx1V1pT zHT-P6q7D2mG%;(gi*bC9vFJEWF)61x^1V&CQ6XDW%Gs|J>ezS%_;R3%(p4-N=4%`|ib7GQ^k@SM?uapO414?0W+@WyM`tAdyigdb=ow60isbJ{4YGoIT%lNt77arh# zo((~HzkP>a1%7G2@pYy9ZCwgde4ZhlO)eqDTV4LdS&>l+6Zu9p#M09I!jCz<$B$|0 z+$lya*rmwoF=6`4V`}bddtH!Zl4%3Rw)A3FiQ-lKYh72hfSj-8`S$Qa!sV3sT}aZ& zb{!JiOPK*V?CJDX4TSZ9iKjYX?Z+sq2MQDB2akeNWZW7hW$lisV*2rlIhyB%<&$wP zzshy_G$wedq&>4N;%8?2SNIYwPOu(?(Yumg5uc4zWJgFKoowT_+^mO64qe~TtjhW& zYJcMG+do8Ap4FFBsZbD9@$)Mv9S+K>L*(#mqY}R@SQh`u&_HK zkTnmx0gFA^v0;XdEGd0X`{627Ec?9cMj+_8oeIpa=ZPK3Xs^=%2eH(;d;ennQw6t= z9Y8h-meF#p5wLY@4qB}UFjk7Ny4#UZCTA)zWdeV(4N=-HwLrGb6K z0+M~N&ObeSAUNGA8JPARsFZy?T8}WyI~i|@r7V*C>Z*9$x#vWq0aeD#b?o$QTDMmc zr6ks$P?j9lc2*n(3DgWm6jUpQ>4&E!po2OC+dL&vA1M^AiVoIedBN_Y7U)2^!eWh+ z41>dJUNcUI<&~NiOtmIqUC-7KQ{S!ueON?VqusL(*E$>LMCsFfu^X8Ja|mdd+QUQkBfP)a5_ zpVtcTaAn5_Rg-k$I*fF^H9|7zyF~Nq@iH81&V1aiHY;*Y4nMR2WSz+iHhWHG20xSK zu0Kn_9{9-TYpFQ41(Y#jQV3dQ9hk>*UP&ITU@}j#c>U!Et42vQ^{vPT|4VlsQ|i}iZrZ93)U{Oey{KN z@>sFPcF^c4#gZ*KQ+|H|)|Rf320B;$tY z)S2()L0^re#&>{dkPDS(@hE)$7Os9){qohg{F*q+US#h`VQX^%bTBgB(IqvE7N{=# zo|nmCLpWGALPu-6Ko{kOyvj%=i3j1)jlmA52HU$UjgsO`@4%KKsw{|P?6`1bCZz- z!#6_-zZ99xh*^R)w?#$wA^J({iPjk!qH9BP0`oPG*Dv$~s9RSrJ>#8i52uHX)33L8 zlds6F$yFV9kDXbd|A|_9cdx5OSG_p35`PM>B5Hp;IRAmx6g!9LyB0L>-mBL0{bUKM z0MX|zr2|0GG4FkLy=?Wg#1mMMkce*!t(8F2NyThTK?)svHeU)F@?=wHLw&BWzELm={dyQ8_(A!Bqp4om00=%C$)5i-d z5oYi2*5|;bW!EwY+h9C-xidv^$RcCuM~p=hB!H=_=%?GNXYqZ6po~$Mnbj2h#Fu>P z)K5bo$uiL z^?+nA;>tP?!b)v`<%SdeGd5Tbx=T51rokW6IWlF6$fz{R#r`Xo6hR&oyT0P0!dI}S zRAY&=y>OXu_o-6CwJM7;e-6gwlg5S_wz}UJURs-_+(|7FkK)m(zW3~Lj~unC>=Zw= zh99gRzkGc)--ke=3_T@YHP@Cqaot)MRZv1mjjymuNRzWU z2wz5;lszp)SbSPSp-9y+7hgt)hP*=b8ZIn<*3;xK7xJ<|T0=umB9MGPum%WaeL~&k zocKOpjZ5^*yHGPu9Vs6-F&@2-O#Zxc-Kqz8Twe6tDeGRj6Y+2_(2vv(WRyL@@9s_` zgMGG^LX&nB2(Xn(hBPRhBq)qaM2%5cB$U=^@$KzLit!!xh{Wderwyx}*HgaI3bA^R zLE(I3^q@(ZV;3UEb2x}A{sfFUr3D5XYOKx&=h{-m-zH1$yjW?h_p`c@yWl=;4DBs< zKTF{h9WPChN#tf-BBRu!4WWlWF#6CX$@j*4aDR+_`}ttII6p6iR+E7HC{^K@l$7bC z?J_(y@#&a&%FK$(ug=XuUuILFiefT|eFZtLPaQwBo>;ToXZRf@(9b$e)ybeNN1xRc zpA^Fyj}hT_9e$2Bp$sY7#hF&irbc^?`~fqH_4GJ3w-e`~`);XQ=Bg4FTWoIVlx$AY z*??J?2hJpt<0mDy2>=*c4DVEcQAvDK?++6O2wgSDqhO4;)1296q1&&S`0C&uKhA~Lx?#4Jsp%Vp_9hLy zD~TtatE&ycBvC>(j>Prq)GB)6@#w@-*ib)YzL|zW{FS!u!6p91u;j_}$l&u6` zB`AupySp6VS3i4fpeRwJ^uT&DB79OHnQ=gDa`4x5aV13ZFkBCE_{cA^4Y_IDaUV06 zP9%y@kE!CGv^awCJ|BkalapKXMYW5i3@K1b3pb;J6ciNeQ6pofJ-Ml#{y`iI9yt9xIg>DCkzdFH(6;qhpqCPI;J$L*sdXR)M3UK3 z5V>emSZ4MTX_pcNPKnk%RVO7SZ_!IP4Xsx*z!{?BLb)hHrEAyd|12o;*HQaVItr;T zl?T|=1Xez(zMj1DE;{-<6!cPGY$LpR#nrJ5&y?2BMQaEGYlYjMCN_6E@3Y*9eSM!# zCV`6+W!I>t387m1oDhm`!Dxx_n9^ZfXR~A~1X2~LB(fk+qPe1;P44`MtEVf;c|=A0 z8FkHZGKJhf(?LX>P|)E6_ck}u6p`j zEif69*!V?8NUq=hE{2!pAu{jIG{znG#1HrswsiXKLDbfYETR}$;Vc~sdR;alBOmwb z=|{yih6_3#-4r^C=SM1%QeAf5z0@>*R8}#i+}#$6qz~ooWTkSwaty^p2*PdO$Q(3# z$sBSMFU@rNqb-6&t%QW13PpO|-ibMXp?w~p+MTA26ArbSIG>WY4>7m=+RM7{Zb1gP zAb-G*YT_m2Yd2OvgY`PlAqXqGaXVO#Z9>=4e25L0;ElR_koi`1N`g|sLk~7cMgJ~@ z4sFv}ai+guZfyoCtPFGXu?fbCxOOA-@W)NOjC}9?Ee0xjw5W{3$UQ_%oq#{7qVF{6 z4!57+Vbn0cV>n{K#|B|POZiL3x?)5?YW7LHnxGhll{je)e70z}D8vmzK6_V(z<=73 zsFeY26cIG$og{(6WjYq?x&Q&%6^FSYIz7zby1@wwe_2|7F`^W7dkMU&fy`Ikr2*K{ zP-HRftn76hjaGlUYx<~Ol@BAZqo7!j;sWG1Lw~NnnrktM1N%DKKQ&ei2)zO4s@vL48V@epPYvNGzh^ z(8cX>%bWz!4Q>3tAx94q-(Z4q(vT&uv?f8$j z3`06P2N0}L#IQoWc4T_iV2Mr#6FyzHKr^xH5T(#0(X&ga%4+upQ`jyyemRTb{fugD z0NWW!=75fBYKLC$1`l|#XRn~d^@T3S?F1aR48uA)3uPQ~o*Ymekhe*Z&~4~^l|bO) z9E3kXmzK$nPS2xqa9WLHy^H~6dHte$j+Xc?cGEPbsXVn6co?_3+j!=^Y^A(83#_OU zj3qsUTu!?7&suBuVfCp!D+1cRFL#sKU!AjP%Zp6=IR2E10WkwFUhXlG6y1`|65;%k z?EC48B;wX8VBf0}*`_LKXqzER>{RrvRG}NH(^WPLtOTQab(7yGyQSUT_b#v|vJ9cs zyewlKb`GH7J#2uvB{-U-;Y&S!fsSw!y$zLkp~ zVd)gyPH4)#&9_v&?a*S^*OF=h&^7n#`+O{7JI!zoYUD(RQN)@@Pp0l4W==U5FU9ov z#v~#XZX`0I^*%ILb8zaf;JXf`Ius{$y#dVm)Uls|)xl>iywFPg236_i7Axa`bwrTKFM!*XYq)pT*L}#>y>4#_CM_9h6+-4j^!R0< z8>^9CO}s~(!^-|}O5T`DsgXCCs=pkIriT{dry*O%aJ|`rw|Lg-1IkKEwHRedcrLk{RNSc6&Zb2sW>%uJlCAZ`W@bo0VtexKgYfoYkbRgCAX$)3PHcInHJ;9Se zx3$xksBY~h7vZp|;Pox)s)ULl-`6COkTC>(eI=@>{8r5B>$o)?kTvw@q4^h9V(6~Y zHR|hVH62<)<-=j0V*+n7V}#>k@?omzi^<0_%!X2|FMc$$!lu(|={*J0P0 zljSczHs=Grky)thC<=V&Y#`qM(q#MGKooeRA>4L4_wLlu(i9HLNHT8V-2&;FjFduF zVz`?U{C2rSn-u*^wR=Hf;X++5Nt9E})Rg3nRg3DlX4ysQHivShr8Yn6^P*g8N z8$N2UY|NOjdXk!?@2PCg$bfLgQ`-YS48~KG&!nkVF8dYQQhYO=8i5I=jd{i6t)~%z z*XxZqRHdZJO3JxPacKhGC)5^!j>2t^w#cXS{WGC=<4aKlXa!LO_3m!dioLNnCmg`k zTdyjw-+mA)UXA^)Y6nXj4yPR6*J^g2XVu|wQlFc@DCcgumjeu6>6E5meucWJyH%atl~7(b|U> z&+X!H%{Ai0;=^eDyaX0O0a9I1z-q}x^dmjP_n#xI$l*EPSSUW7$vgh+X8KJq%2_%) z#PLP~984c@lPS1WE9q=10Ln6FJ5`r@ABg@e)Ud9jS#@ajqzyA-i?WjTIw)J!?C#p5 zi7cgU6(>nvHcN7fP>wn%e>*s)Jc!@r-V%RKrtI_LJd}^ERZbhOiX6StyC-0zv6&bP z7r$J^o6-iwCS)NSH&8*4=E4MT7qfe9c+LYT7rx`zn`PQb$zc&2Atj+TedM)xiQ$!U zdL`;S?Cz^!j(49(m6)N1JUz8N6u>d_G910NQg`BH?ZKslj0?<&CEp$)hh9zHh6>0n zfwE^4QySZ~qzEwluOgC9Be|~ajN5R@i5!%ntJCry?XaS85^2NHYIYu3t(ysy0HeTk zBXxA^s1FiQWbK*l`cUac`8jZ8I&dra%=1)#idk}JLGMr+{2~#qM7Z?BYGL-BM;#^>_4(UNxoTI~f1!@bSmba_0!p3l>wV-85!ehQ@Sr1$ub%O!b)uRX=yNGPW!D!w zJ2kcY;*B0HqGhmMEphb3xf;#O2FBl<_8aS;kV1N^ z)SHiEy@5;c=7Wsi!lr4%;C}X=tye>Z8Mwqyqu!t3ymQNry=iSAB6h$gcC*}>R<9H3 zpFy;?)jXS0c%$DJT4c{#bI9uEfOJUdegP5x68dha%JRO>MSC%yAD01YBs(<1BcQgP zKHibU^noe+C|zpmMn|K(u2>U zPf9QQu=t~=yS7nUgjT^H8kU&O*FgS*udNcu`OzX5H@wT`Se#57r~Jlssf;amSA&T$$;@hb<-PkV~@FU4*poX+kAvfIh0osskbBCE9h zWN7s^6fQ~UIuTH+ZU-%`jhPxeW4zg$B$jYj^{}k;{%NL5IJQ2CsH(lMD6sZnv6H7C z81km)m^LWZx2u6Jf{5+ZnM+eWHXCh^v-{5U z8P0A)+O-4ScS<{QG5$!@YydK|i~7DYjbD(LG9pc?s$g?7BaH9Y85pv35Kn!pB!qE# zrdO}j7y=qZzFb+lG~tcQ(2`sF>A{RaMiuSslP^wx@A8)jy28yz;u;5V0So?y^E@C2 zKJL3?hLu^qhF+!@F~uARn!y?AVYCTTY6mU_&IzRLzVDq;HG#ZzsaKf$*Di4sX|cgZ z37$x#r)TS>N{`M93th7RGm1wVdhQCY7#^JLYo7*-P z6gqMs`c8~cfl#SF8uOo9dwbnBQM`J*ju@b<=9dwnGlbQJrGtR4Aso!Q45>SQV{z%H_>w@Z>ah6Id%~|<<|rSX3M@2 zs=1Rh=h0AD)z6V+Fb8898j?o!s~Lc)U}$7wcKEI#0&U>Kvrs`hvdX`t+D(6iAa=sCFK*~A@Th? z-{gAiYqzeM1jtNOG`s_|3SA0c;Q@{NN6A(6R8C8I{FzsNFIZE?qEKvW@WdyDwSP?b+=ii}y@-Dv zibE`}zZ9raol+8-LfN^=`;;)+7|k3hutqAA-VR6hcy+n^P?XrBc;jCf-OJX_KxxwN z3PW+`C-f22DG@)0#5|Uqx565!xylb3lXa*8sH7(Ion0<@$)* z`DJHq@I%G<=DdoLS_=O#$>i;TfNLkYi^+St$=hOvsXT!lUu)*Q3Gn})XE~m*Y2qFK z|NngB5Ld8RS$wZnZhl|A^9RYIFl!pUGH&AKfPi@i`E*Rw$tFfph(iQeP*Kd%%Xhr% z&~X*3C`SaYbkyqoYu+im)pk&Pn^z@8D&T|U^=^HW%=M&16CGzAtAEpg&Yy@cNIMQp z?1HfGVX^6EHVK1m3Q9yY=s6Pp-s6n~iN$UYb%DqVVEZQ$-RovAps^rS+_#;!s@2T; zto*R>!s=olHw5ev*uFc}q~U_*8XgsE^h#Fp%K&fbWI&k->00_3CaL(-5c9B5i1`NC zIp!gFN&-p~>g=DVAf%JP*Uug;YpuUOm6PA&86TG4O( zrov{O!biISPMw#?R?myd>;(kN3^`#?oFxO(nktBgm6O>Gdet%ii?IYLfK*~X&x7P= z@BxODl-;~rhD5E2K}5HHePYq`8U*duEII+WT5@>0+ngQ2fwudd@7(UM7(MMDIzT)9 z&sQfc*L~6fpZiaDdBE-F{CwX1#Kh2#9lk3j-vJmquc-~Hk!0-FO4xNzGr=jte8zEv zAfZfWM%jRW6=$WnuRK66+<7PWIBE6asXHpM7LSY1v#(O_P~Z8n(R_oA=v0w*EuMoG zR&*;b9b9m$#EWleDA5b$6O&TK z6LHHxCAc*849Jk9Fg?jgDE`KIAV>aC{<9lkH+AOxbP=rUmkiJ!^t{KT{*;8!M_>9P zv3Hi_(_@KJzyi6N;?R!-bW@ra*xw{20ABB9pk&S4(aBS`p^pwpW&g7v$`Zy`+$ieP z>rx`%X%fw561>>tfhaoLQBs8tBCNs(!40}B53}wUqeYweltoJu)YK;uRCcu*Mji5# zW});-U18%+(ib?`R2G*}HE%SeAuYZ3XX@ma!KK@S%@iInjJW*pnC$c&wuwS#y13Z;QLS)2(_oHz zbr*mX2H;u(HcnSmSg$58PF~hz*O`D@l-be4CsER+i~w016E(ktnv&{U7c6{CGUtCg zdoH(3>+b6R&cHsP@y^+R58DpZG!vlZeVU;?mm=lrkT>kiKJ;5%2s9zeECK636()I# z_cpg`p$WB&BT~9N>uj{$r?Zx~>iuVVe=bS3!3ybNm*aM!Epk>c-v3{?2@$^06Pn~Wi&=0-jKwRHix37#|1cjCQSihqEDtfPV%A zB#Y$`oThWqWjyOk0^cU}QK73_fcEF! zH+jw^(&Il*kSCH8=uM>t^$^cy>td)CG1H{MY2a!O3-DbfMK~i&G`&ojxgwfmNHS}#m=wnYk07lyv+v-31skf8jYw6MNg_1(1#gYjw94=YUPG_~z zZnBDYZ$x!@NQ`7P$pJsi7nTiOj_zciYC#47R*_z^Uisj?D}oOxdPqbLJ1_lcoZvDv zpqnIj)B6>p$EY_L(YZ1IiH}eQwy=kA0Zb`)``{+6-R$cd2$L1~hFuc^O5%GfgL?>) z0Ij`7``}v7trjQe;18?zlOF_0A-!x6T2BFXP9<4f!``FJ1LlXT4=nSP8y|_n=F_&(lvF~XVNK!Qgu$x< zesRV%M&m}kE=V*ianMenDZGJa+;ZDr5oSkz%XV6J&o=pW``yO#gb6#rQljylIWc?L zIK>iHn=I^m$T`0(f3?Lgkr8eetX5MZyFDRId{!q*II9Vj%iRGbQqlLFt^e)(=1R7s zepbF~Vrn>O6|V%TftZ>TUrb0(DpwkkP%R@%A)A30_oXz@`bCFwi}X{G?Xy2>4jz8K zv5RSVqWq_n-Zyg2K@Bk2RV3|=0?h^e~3N}lu?QY>9y_<;i9Hu=9g4m7{MP`uN5md4#>w+v&u5-Xg zT{CtsC%LYnj1f1k|Ceq&6#%<9T`vXhVFOghPj}On)3|xCi}R7|+Lfo(p$4WbuH27O zB+cqV>QJw%$2Du_pP|%8Xz>lN!-`d<>_kGXs92!+F2ZUOhyr)Ol0)gxZFXT zu3JQr$C`)lzi`u_izm1d%9_F{CWY+7?fjhAd%nx$?1Z9@L3d%9GihXmLSz zI65HFggjNpAhTG%Rjas;@2`(>FttF3;!moxH29gr4CLz#z5wK$SXPGT_rgIX0#ZSY zL5nYPVbYV{FEB{;U_5{y#jjsI_`gVf{Ux3*#-|uhZ(*CJM&1lJh85LlXZ?+mXF8Q> zYIC%_d^lGz7rcKz}^mZhK`Bj;fevJ-fp0$e8f&^*@e91t$ z_8UC|uc7}2=a%{4^qRl;_OKRoG3~MQO#o~+iISs2e@(~Jtm*2WUR;)yOq@;RH_*TL zDTXXqT4z#Se#k6sN$sMH_VR{~U20ZiD%O0ZT8q+;3zJlTN|5yNehTf%itR&;qqjkk z@Vx@l`*G4MmP zRS_X+%bS5d6y&@wz3#d_@46ipR=x|DfnZvUt1i_!FuX#hOh?f4G_myKQt31Khnrd} zWD^s3y)ww0n=Vm)E=l~sHwzPo;~?=Mb~z`r$CgG^;Af;R+)-=?rYN|$2sG&zp}PJhyp<$IqOGPX@B)K{=*1nK^9~$=~$0-G!R-9vw>#sN4ou0+NpZ`OHmnD+_{Eo!-2u{{s?r% z#SEAv35PqvJMFc}DJ9^-14?l^%WkHT5CN0?s{o`IHB+y4lBFTti9u-R-&ZS99ke9| z7TQ)d6MR4XRIS}9TnLMcHUoRlQ}W`6y7FALfW0@-&M{|Pae1!FJFVNMrn1MQ?GN?L z)^h%NpXs0@Z-s~k?zTxXdyXNqw+`%ahe~fpDnuqfp=n`$qyUJ7XV{M4=GgEUNsN;klhpF^=g`I`9X|i=t)L|QtAFEmq{s}*>azt~ z{)byi>FL-da(>+6b3Y+x5W*&pOP6-8ooBFq>CJW=3DM`9;K5hRLXFg~2#Nl9n6U=M zR;%=<^PKI&B3_IveT{rkRiM7RPqFo4t)eejK(i1~=)cy#G8#+z>G>rxMruW&ADjSj zHUH1GZlCSb0K;?Jw2;@C>&Uhn-koL4pKRdit0x;>sxOt(2J685!9((N#&TQYa*OkB z94}r8FSGMeFMXxnNU7pO3Vq?!M9bUV&9XH5>ubU!$7u-~^kg&$1#bsA$9qIIj)Y>) zOn;#Ie?-DmhN=|Vq&vzxl{H)l^Rzln9kE7#K0R)Ze`o9)F2yGLK!{qy9|2u!WeMdD z2*wQBP^5-(>Rpqzm)4%fUN5){qd(>DH}fUmLAr;N9LKx8&H1g?4qt*npXelo4|JN3 zzGUTwabJwo6Y1M?X(7edZgv^-=Rdy!-ddP;dIp*uF^Pssq2N}Z{^GmegY|q$Aaz{) zRkPz^F%tKUKHI(-1z1HC-`xsoc972|plC`!Xp1kEEC#!dLHw>GVN(XPrCS{b_%3crWUWVG z+Ck2#N4aE5txP(WK7d^<$=)ivOWSzGR@N|SVfhQB<=<)@rdME{*|v$lp`KGAwTO+l zJh$)j7TN1Rd;ioa7|G9}N?Y6nc{^Ppf@^ILZefbuDz@&Zx4nCgIeAM8>aoH4$HIayCRf#Nl&$4Lbt|f+O%I?pPb}oKOjy$=Fya()j89g-+397*f(|JaMKppiY zCH4Kuy)h+RYv;}&6_|FV5nF2VT)}Mkvz;67&cbRGfK$DPtZ_?X#VO5dL;pi>QgLc} z>lA+4xrr9s{mn8miE70vCc4DjIhwhV*KgHrZ9^rhRlcUvZKOZo;-@uQsD1^Mjo#fM z8*;C%<##BH?^xrx&09OVuvo`5h7R70*qi%`*ep*g;a%}3g%oEN=a=r@u1So|ASme< zS*z>s1F2QHH286iJcIyG)Dc2ZCdffuUgKH|>=_>KznQB1fGq=|<9%`_%QTAna?PJ4 zr?mg}_F1F7C=KY~3<6|d^VTA!vGhOJ(T4pjdx(CD_{R=XyKiqtsDAj{~e)ID*>2omT|(|C3;`#i4Z4@hWGre{F&8 zG^6TA=POT`h5U+^OcN{ANf8~+E;bN>TqOAw%)kFc9-IKg^+ z)^ldc#&vy!yMY{xPI}m;ARZL-V5cge8^s#jglC&fJ7x1mPEQ|`UajaE=3^TFOF(_l zSLgt0mJS1DB2b)kaakMe&^5}71h$(%hd}}zCORT-(H5MfkYjEdI@~zDRH-#)!V{2y zqpQ{$e;Xb^rSr#$pYb1;Le<}b42ILYCSuS1{D+77yqyZ^8yrDmfyy|Ux3n0K&Sas6 zaf_O~w+4_R12Qh2320#!Oor3~qArlWm45~S@=9j^k6#gpjU zr)VJyEvlMbUvjxPWi#|%ujm!ASlf2g>{BIxdpVWJ@OM2Fimz9GvK0RoPD+cqIJ5Qn zx(NlejFc*aHKrnzplz{AT#940jY@bl)r!SJbn?YtX*~#`Iqf@xcxB)gZJ@0MxG#I;9vEqP^1TPZ z(^b<;dBFXS#|msc-3Yk7J(GI6AIMuy1CBi(&PTW;pI{?goliSd(5D+5yDde}bk^JR z6U`U~5u?NSD@R&Drs3PDt*0>5JY>`-W8ILxt0geJ@?m?ge#?>;uHQI z1m`QcT=}#77^Jwn9ul;V4bpUb;^KI;_!G6aAMn~W2k7PVXIWlZcC zbDCR~rC&II?~zEaYLMZddMMQW{V{SEq{lXeKV!2{fRdCRBlDJy^|40rDs*~*VDi(N@2)o>5L>9^3Nwfwf3hQZ+ZJA1vD@eJQxzuK%jVtzDjrpiX{;Pd zZ9{XO8_o&GS&Pey-4`9QR6BMQv(^?~9f60FuA5jr_8IdjtQ!FY;C$RnV4m(=imXwT z$))$7XrFD4XI6+0&qnPMT(!hUq%YZHrTWvG0VB5h>~dgG05$?_P>YCs$1(%{Kkzd# z8*Smls>e3sa@AoY@>||C;SL#TJj_;dn=6-P4-+WWZ~pMJwa4|+JNLd$sw)DEA1iOp z@>&)qp4O;o-jc;bz0p2I?tx4)YVuEJlwISVa6Tt+^pvJyj9npI`DxN1gM++q`5kUz ztBUY&pG{*B*e|!(D)|stHK53aieV^0G_?i_B#kON=H9(UP8F)3niiIQ{A zv%2@+8`B?|Rw|$o`Hww8p?zp1m}~x{MxM$>kH`R^3o}jgoH?cc!&!B6X9F?Ca!@}A z_5-&~eH=A^!y$d+Y?~B<$)*zIZ<&NJI_Cl**3n|_vWqRrsQ#(SjTz{e5t|8;z?288 z=y1g0#3V}MeHt@o%_}*pAMi;+oRvmH{o;R|*kMm{ceyj+Pb^VDdfY9OXtA~SyR|Vy z%z-(?_IvN@PyHrxG3$<_-V0a;9nrQXv8~E;b~x zhavO@s0vAF5ft&ngRi@h^H~Uk7A`#lVwI+75ToWB4W@3SU!eeXdpuHm@{)O|j zZZ$IFb0fa5ro2KyKCZ3l6HOI*W->fhE?`CjDa%QqN6;IXM&{K((z|o*)*JNQls7|= zj!tmQk0rtPDUv>3-9;c)eCe_-Br?DJljARmL9islMp{L`h{LvyM7@474aFy42HaI^*5BVf zID=|wM=&R+DkWv`{^okTa|RS_i)DM#>_8G$uTT{&8}D|y7f!Y8|FqN=-|2mQblB#h zen0gUmkGAOKFueKA zk|eiC`~~ZX00x$$AP0C}>Lt;W*VfZK#Lt2S7;$&yI(zvA-hD zu@6&yqrsLC?7KhHEj7JCoYdWF>!ykWd!l#K#+^&GyE#Z5P`l_9y~IEiyI4lWZi(xFHgP!JSP0 zW8y>z&*766-TP1TR>}){z(DatC_5-AJEABtFa9JVG@35(@|q@4z^=J@;^xC=5e$Ze zSA+v%q=dYw52Eq(CPj3R@8e&JBf4hFxItc{H3ox(PJmSgWJk;teohWfD0)^V_sMo@ z%R*u2J&KJMFO-SD(ZqQ)(wMWBKm)N9l9T{h+2CKZjPkBu1w(*xoT;C7XbX)$=1vy> z{!v;Pr9q9W;UQbI>a%##xQza=Mq_ZfU9GH`I|^oR!#)e)VJAZ*cw0Pu3W`ezwRwIg@sy#nfdC()nA0mS~PhU63$iUM} z_MOH_hN%9m$_4VL66x!`uNGc@Dvp58g*kpqscdNu0{vjAQfLFm0BwT{q@skjWXNML z4hV0jR-B1tdhCJT?K+0YDfy2P>l6lPnaV1}lKyH*N*=OO!Bx3CGT&Rl2yn~~%($aA z(Cf(NY@|-8i9l4GmuERj4~SQIf2A|Nez2Aws3d*>e5TFYjyD>iCXh0fCO@{49@G~6 zqW@SqN=Vsm9uy;YVyhVSB`aIDGrW%g?R5HV>t?pfb;SWKs`r?d0Oy~jtA)cG!UsF@ zQ?0`br=UOqmBaRaU>|yXYqXzftw`%x z&09sLWDiAFj(K(&vK|$>iH$e{+)S{@)74w z>AI{U89BQ<{Zn7V1@M}2JPU5AtzUHE^H9C<;HNTYy}eUTI@wC4rwL$WfzxoNjb2GX zgZo%yjregSgT0Q16}yY)c-6c;9N!a%GY)QRIrzc1cP;%H3n<@sG*X(g0$zypkPxY} z7^DoNXAhY1=0=uz$hd@Ci;PLUg1&qX-b+W`xnA_;y^XbqyrY`!YvMDP=ser{+D}7; zH@FUKu8IyaCG~++i`Zc7I)D^e56&a<3ghw)%L_rg+IOQ_`E$IsLAYFTJv`BC<{`WI zN_}`Zx*ts6=0jP70gd4Zd8gJQc^WNimaK;mqX~M<7QAHo`eAo*bQ(ltk8dS13!AO% zQB6@KM!4v4wg1Vme1d!jmmOe~Nq|un*fIAtdX{~d*opd$hby%?YZ{k_!@C<9kHC{z zGwF=PLcuh>mnAZTy6MQ@bpFRq3w)B!j=4CXItQ42H;F<*s+EH(%_%@?RXk#vLIN$b zZWEK;_seDtcjuf-@;?2iGK^O{^!p!*MI%{o5#}~!sw_s~qBR@?3}VgFAQijyU`^NnBL-PXvId$r3cgoVNo<&QpJkO6 z*y~`M44Viw*fOWI|2L$s41ndCLl-l#W3>-;Uan^sGEoDXF@-{(H_Kk!R;RixWXIB#aMm#+Y09HoE3{3wfKrR|=89nJ&K0Eevb|PD|vy0%{>EgsbW=-@Q z%v0LgLNRkLYX4#ZmJO#g;~p0vWKkK_Pb{EXBxY29AiqT+@Og^35 zqD?({Qx02OkVdw?f%mEY1_q$e!uYUz<>UWEBjv$G>TX$H z1^pK4#7NYC8%GqTYEkr5AR>LU@5Bu<1~5(3Ua%C}cjh*a$%aM{46I}XJAJm;|9Pyz z`pDtIO)s8q8@%5pd|D)$q;OC6jeFdqk=vX#jO!*1z=re)-GTAe=`OBNz?6tN_+Ov| zf+lL~j8<~=HE`YXhrj(ZJQaQ2ssc1P-6((S>%Dx}=y9(A{L(dluFybn{Gd3pecQ)| zMf#}~?#PpQM)^mzH>O=i`k-?c-9Fln4d3g7720tjAI`}c4f)N!bQVsnR}xH9sK0)C#o%t#18av2*!94FjD%&z^3=8`996 z)u4g?Gb@aokf8loD6m2Y$edww_hy~e=0`f5($^~Q8|nT%MwG1D|xh_ zUfa=5;TE9q;tZ}W!hrmAJ7OE}XQB{w zW1Cmxh;=Y##~N~2J<^%LbG8X$^@%P)LgHpqNu}R6Pn@&K0SSNr=B?(QYTm`9&u4&>p5XTu zDS7K1EPCaKwsMXnL&2&$0Ow1on9OWo^(N&)Y$`Mj!Iw~Rdx;k97%m?Iqe0Ii047s2 z@tY-;bmK*ws!bIB+Z8jI&FmaeFf!B}${9JL>-503!!Jp^S?8q%HIfvFMF=~Rg+S?y zt=Lt?JhU$KnA)XZVQ;R`-zth}%DuOhQU&kwT4bd$8x1(2ivGp3NH_!C7RQwo3k$T2i2)b9F0*54*H3yHKryqMi{aOkE)2zbSSf`)>Iwyol?gisAR zEZKzgU;LaD81NNR4z=C?IKo6x4%MxwQ!e6Q1ZUIAS8g7g%Tnw4_>1omoamu7|f+AOa$V389g`K+KnxfwDv>t9i z6ZGUFnL1_sZNA$};oITPOEXI`|4YBvKGCwADGc=Ka#LW$yb5Swp9)+=)Cqc!)e+U0 z30x$lmL?rTpAxm8V6JGQvr;PJst??K4KtvYj0-7$xZl79RuP!)8vY_~NGMBS$iI+( zNP>~~Y3MV}FJ#DRS74_aJ~a;8%oOsbE~ml4Pa|vv*jHZgfNMgURDUn-#mW_!-qEQY zIXoY$1cFX4SyuZcGXb~uuF9PYoa`xi=S?ZTjs7e6D%r3WI{5$#-gXXnggLt2{a3f7 zuL_Lev--_}o6?JSVR;Y4OvJ?3T%_}!jS9mP)mTVv-`xmM7C@%8Trn)3bIL-QLu{d2 z2@gRb$uW{20&nb{RyJX!0vAw?tSpvc{xu*JTw3+JUJdP3CIj>5Yinp3ldA>6LlZ*H z*86XnjpZWqyi;yoa;GeQ3m$4e#|GOs#)qr4U7A4o-xN6b{iH>U81gzaWYmR>8A+1z zzsJq4CEN*Q>}PBDul2*;ay{}Q}T)tw`;K&txm@pHRoB1 znP?lZI@_c=B<~*)glMN~nHS?N+D4=e*WiRSx^uA5ZR2TH)I=GIpx}D7rs5zrOJght zD0u*LwmH8PP%q!EHz44E8>RFhKC_lY(Vi^_g|V5;-PeobIj}9@${ra` zp-iym&LnVfp=bVb7-w>_bbDvVxrzvDVfZV)O|mf?u?p=&qn^)9z9z|EZMfUr-;uRi zW4c{sQ*n7bB!0Ymdk1-PMjy#%G@Z_<&YpFNa=i8&Mt0&olbyyJdx4lI5TW3p)n zzP9IPxzi)O5C6rf6-BDe+E|M`T)Wz&`WxdFxI%8Ts(F;z-Bj^Z3r5Hs`H9P&>iJ`o zL26~OlEIpQyRc7v;_cezdlc@E@cVg9-w;gk;H%W4MBk4^!r7{XP^cD(80!HgFa9&T z{AUWd(XxgHK*u9fdld_=VpS({VC+3F%Fl4H>~{(A6iNF4m&0wynZH-1w(s=R*jWNG z-pEL#^}Qf}OQ)#tj|*`Yl7d<6#)l^v<-?&Frmk%jK9TVPxP2u*ou?t2@cp2ePlt|%E~0}u@bIrMIq0R$&IW0Pq7~SDM{5Ejc~XlBpQkUy zeIc59+KQ{tSV-l){lKq`DSsCK-j^5!f^jjM%55(kLVl6_m4OsR;C=;-H}!112pQa* zK{N^FHj$5V?<*R!@K#9&QrwYLM^fzE(chK@_`!~j9admhXQ*u}o%d%?@C{}`+=v*1 zYo?J8*l=+FG@oCm1o;2=kjE1EkOx8k3ezDF@$lv|l8}4|>qX(aMcLWExv?$?I_ts> zYJu|aUKh#yNS1=nI@@d`P}P1ebS=uCeU^H zsgfH)WbFwMeTI)OyYNd(nhZ>(H0kx|*@53$n_5pT!#GR&wR9u;MlqOPWmq~b^)|n_ zrAS(E*vgr2Wa>laBjYrL!7H0k-B-em756WiI>Jg=247@Z{E4yzJiDTTMpK)VC8K^$-TieqHLRZH zvg(lJ55Otn8Q?-IbdSG^p}@Z!Rd?`9d#J4M%L+LCU_qV!a#U+ztqH)THjMb=C zI-Z(lBOznqT=^Jra#83<0ptzNvFoD<=KJ5N*Q7Q|A5Oc3*17S{f=xu8-NS zt@-a9xk)J=9_J_Wp3YkKkCKCby9_ix_O_jS9IdxSdr0Py6QHJVL;W-TZXCUDfNJQ~ zPGKgn6jNV0>)epNVmUu{XLM`4j_>u;Z&ij1~G zKm^hM{ry=*K62qLE=jR8K#)N6!a6a?^;L>d)=~FV?DVD0kJb@R2g#>2`_B2_2jXJK zVFx}Qt{bgR6jCglGP>N&W#=960X+tn1g-m7zrD;k9S$oeml?HGD>I(eFZ z5yr%dM}2b6LDSb&;cf0bO{^|Gl$%0?U+#P{FdO!NEY7xf+PEeI1PU3&8ud7%w~XH zXvHDxHlENcAavhEu#bCm!}MiVWT4uLyRmGJ?ymr>A8Mu21PiLKvLF~)=K}+u9{>DE zx@MjTegP$3batNpDx&TF1Kv~6f_tIWDfBVFknRi}%I7Fqd)rn)zA#?5Vd z;~{o$T(T;pxsrt{0LM1eYll&R#J=5iMqu1HK?2jy04{YLob#<~*yJUj$Yh%a_hp>8wxymyM#|6m z?Qg5V*Kbt_0tup@%JnXwQFDrqceWboi=lDre*n z$lZA2m@YHEp~zB51#J?&Jz>U|tu>Fs3ReVBVriql5`uXpoeQZKC9POamub?KeERm_ zWtZ$?b0>{#(|7eoINqu3g3?(3&Dc~~? zuZiE3GoLbUz~2~UFSLw?kO2Gj^iV}ogx6TTHZl$h8lfheo@kB`nl5iX8De)Iy=nzO zbu0<#V>S}GK74#~SIBbA33%!|7wMxW-om!^YEqkn!hg1XFgSRiaD(Mz?~C!91hJdo z31TKyJ;`^xzxsV|md>-?0=}t{-I^10Lh=_L&0wH!M=wK%it!T!9=kelngFgsS@kcb zqd3a<;#bBrjK%Qk>D`TY+&n6zj(`)XqiYV8c4`JGDtSC2Ckyub2=vPPT+TS_OA}L~ zm1EPDxfAyW!S)XekY%bfuo4Qah2}a;`6+Kw0jZ0?3BR^;c#ADT$TKc|z z7a2;G7I8}OFIh7nG~*?l6*6D7r0OUhobN%Z1QuL=Mc)j*WG*UP9swMCUx>WFB)C@% zoPDAbCnDg)HIYi2TBlA#TjI~U7tsmiLsy+YR!*-A6BdG=Uq%K4+RXxk4=K`XWK%n_ zSLVAl8`51&$nds;;hYDjjmn8=`X-SGOZ{A>X1n!LWr%`%*3v|EgyI+kkhjJw7=j<2 zTS{l6dNSDOpb^!8^!%+f1@~m{5w%Lj_e(C#>L;Mks0sGRwZX!DwpsmeV6bD?V@an^ zYo5d0--6g(@4v1iOXr6q6^GW>`)=twyDY3bRJn@3cTGd#KG_VR%V*v}$?Fs1UEuG@1{A%o8959r1WuaFJ21F1Rxvjq{~x4) zyMqHTHe<3tZfz-i7xnu?y-XnXaDxy+kZ4_z3)@2-|4~Q_!c@J?otNVGyQ3fPo?YHN zgmxSa`7a9`VT9UXtT^%q+I~Kn#1z~r7dBUu>pvBQk>5T9$>5@f2B9EppxPb4m!gCQ zp@#NcC1p_~*D?LoEQ5GFx!6&~uEw2IUt8dJ>RX=uI1)|%AlKTa;x)1zvJZ*s zUp8h>Ip!qV9>ZF;9Hc^~gr>rmB~y6l&9UK18dFMeV2CLoB!o`BJ5$nNln;W|074`3 zIrejpk&6SD6@Z(|z0~D;`>qkbr(tu>J;PjZ_IiMSfmo{l0AIE9=u{Hf@Pa@(zfb@M zdpW4O>5z+TW(rwYZxcr2Ux!{9fLqr4jdbNJzQ&CZ-f?t>G4%Y37ri(tFTimZp&(oA4lERM^xZiiML=bAM=JE$`AdWr_P z7~Fdu!|0#DU@Fd#0%7SE9eBo0!)m3NF+4)$3sDXq2jQ{+d)1ZU0IIY)^keKSL&`aE zF3|I~|MR@b{1^jQND+Klz;1{hZUTd0ZK${6 ztx%rlR7>WT(E;-{@ztMr<-}K646G?m+RWD4aBf}wln;9fGDAf&x2(08uj8M;@b*JBRDGyKcLBwWJ=YP7VGP+gsjt-mN4t(3B(i*|37*=k2F#CKv07-)i z8Qp(?%;omGRo8dzoorJT-f{i+W<2=OfR|hYkLl)cOd!q<2RA7S|NMetIu0^CGLW6R z6bHVb7Wb`tFEAj3$3dxekxJ|J3(< zqMQ52iY|kJrsDEx(;@K@*D;;uZaHRP&zRF@wG|VudpKEzD&!2&^EBg|=XD}XR(wCoN)Yn1sJ-excuu72$c?tCNFa7o} zlVrlAs=<>PD&U1CPMZh5nDmP9Qh9^Gl=*FsvVuS`v!ueO*Xc5Lquq)NX92$xz7#yF zAlf%uVwZj;8ne{d5n&s7F#!Y-(8&k@7V7_!R=@tz)1L5cn!A#;T3{=_8M0v;>=)2f z3wVK8DYnR~w}T*8P9;e4{);%w*)|wtYyVZRyUvL9oI&HB&~8o8><>)82;8*#U5?KW zC`&Hv-_gGv$EfGH{Ft)hRWncWCYwG|(Vv%eZN1m>+kKxZBtIcMe}fX9&kEOAtZ%Rl7oJ5AX#pE|ISQ_c2>vP~BK;3D-O(#!F$KrU7a7cKhzI)n z=)enm;&pBj!VO>5aWUlGMUorDWP@~Jz?CZib>XO_exHleD}coGwvq6Gw*Au89_W{&yRC4X zC;yJ+KUK%~wxxiby5XZ|gI~|@E8Jimz;D{<@eI6P=i12d@#YcBx=Mr2m9N|d_`Jhk zJ>z9BVae&n$(|EB^P|xu?e$8b^cDX$3@-IIojy*^XKU%uPQUwfD0IKJ9ekm2daU=a_qowZwjaL# z&DNz*!^!_^?Jc9?Xu37f8Qk3=1Q|R84^AKicL@Xn1cDQSyJT<=Hn_V(2o~Jkg9i8D z7Tj;c`Z>1NliZO`7-JzZ5Eu&!In|w`Xf-J^6jf zH*@)OyGk(U2<(T3X4fRkW6#FBTZbE)bfed$E%Rm2rNl_TS#{M&BGy9@B`L?S0-o|~Y_~PT} z(7wsdRpZUcjQd?~n3Js8guC8*0cH(7K+x?=;~P~`u2L_PVkmj0%AXR+M9d*Zu8c%D z?(rr3q+g1t-zc?TJQJ?UP!v>qJu`-j?7>S$9%jDes z4c9DFrb^2>y0~dxcevby`3J(&GRu!>W;KHaP`qA4|l@-1X!Gkeg>1U&iz3r^v+ zX2VQ4_o0aH($do6LkESqB+Eqvcfq(K4|`mA8f+$wp!Efd*UU~HQ^oa%Vihx5u6_)o zIIqFK7vd&Wb`K1OTZ5;k7>=_V*xcbPh}=Wwh_8I@;Gk0YB+;{5k)vMu{D>Y&<4f37 zoDQ$w#Er>Il*ow}et9QU_g9BmOqJUcn2T4)5+$$jIY~vp2La+ipiRYtqH2#5IV=Lb zcW}2CwozV9o6<>IG=v6m#mq9bayN5BRRt&U;ob1~-nCcd=I7e`O4?`{PlV)P$*+|X z$tPf&^+WOCs$=pA=tHl>hr3mMaxj@!CT8u6{0iwMMs3393Q!to3gKbN^k(czqcL=7 zSctG#o>7>ko7Qn(+lx8ncJrD|byPKlos1QapTGLxqXpROwtbOKkcSNLP;x)QVxNuH zy>in+gRl?YuYl#xnMkK|*>Bs^u0AElsAv^hRD zOs8Ksnjd{$b|~^ts02DAofgqNHK6!82p*7qzO{$lltU4!-^v+{!Kcrk7WaE{os>*5 zoIKT>s?awz`Lh}O48UjZ=-qEEeiV|f7jz_DVJ{FMK|)G$dlq=On5HA&6eS`j+J+S* zxuFT)%&=hLm&|)55JZeG8gXwJB6}59*ZeS|H_d}}74ouH5E{IzdD2R}61GiP$mBJ- z1N$^R2%R)2;kyOJ&GX=P>G)MX<81It)6MA!cEohc7y3i!T{^U3Zm8Vk`1p7wT!Xjsx@VJPBS+J)$9dQ7 zqB8b1$*&Tl0KL%+=h%+4VH1~Tf-S!!hwhA&sRw;wr<;O!hF1a(#omgo4w8&=rngeR zX2^Q=fB6#5urUP7ZjUKji~Si#Zi!_mgjvENsghao}x zBTVv|@6g?(g2O{@;{#OZiWqcVn`5>n)>+|3J|Lw21Z*0f{1Zj;nYh;C>g&*9vy8W< zSX~&B^`EdNfzPbT-OV&MIsu;T5URL!$9kU}T7jJl2gNrmIR^DKF}W;@uXSIadzd$T z`f7Kwz4GTlk^cE}%9}}hk>)M8=wm1$0SYsQPGq&LoEqI&bVsuu^Mwb!NC`e7N1Hm~g<<+yMc&xWhp-SPVT!sI}u7OcX_<}}kvMAJL5256Nozs6nk z%U;>sTvOc~y7}+nb)1qxC9wjXzjIfs^XUNOZIh z6z%rDcE-zV#_OoWQdF2ITcHlhADhb)IMTr=v6X@L%QnL=CtwYE_}KT)CFG3CR_3c{ z^z$@{zq{0=U-}ht_?)vZ`C?gS#aGZSMVE54r_jn>BJF28DRn)lSLXX>-3R9bQQ*|l~YMH zjG+!0IXmD}cv^+eVx)nkfbAoB#sh_mOc3@cmQI z0Ma5dRKEQwM_^^53q0snS)6^e_HmyX1LF()+K2L7ylB%0_PW}yx2K1FU3ag`9)2up z)U=TBXXIXAFYGoa+znihcWh=N-OuS}ZEVgpI4()GfAG*7m$PXxBo4~uo`!uAM-3H| zF@Moxa36;FbWxs;1*sq$jCO z*sM>TUNd*vgwv5Le_71(1kQCFzMF1dISrF{HoB9Hg}1L?Gb`<>;e|RKpI%G&J7N%~ zV0ZL`&a}g5a>#GqY2%4B7CJtjiRKN2cMKVt5IP%&HfkAGo5XQ<)3sboo^r?3ad`RCM&s*)=;5o3zQ+5gmW}@-RMdRC|?1PTd>DZ;GPI zU?yAhlTOa~0&CaP0-rxAeAJt5FweC)YIC`-#!ZxN#R@^-}2_gOwVB zD(SU3QyxNfQ;ptL`HF!FA0uM(;1T#}-86Vah%P2H@p%kw;^FD_OPOcV(iU$^u=+eM zN?!R`NcZLeH8RDuzWOghxQu>l3(QDpbBb&OCJ;cC#1uT_%bjo! zERo*v#Iy2*n(kpMcMrF~Vc5Is#wU!D8%OKr#FD51cc}JHCS)8De4#9G~}$@rq4NWy+IJ`iayjn`)6GYR(fDtn>Y06DWljN zh1=US^|XfMP(ofJA4d8*_pB@%*@ho!q3G zq@E!Bpc)C?XlY#g+;jR+U0}vi@OK*hv?uU$*qlPk`^D*((1O1R6>oB~|J0*SsA_M~ zD~lISetxEz)&W7_NpbJzzfgyXM7!aHU1;NwG#tg+9_Yg5kidOT{je##C4rz={vjcA zVuwDJWyAo_hip-Jqsq33SX)LGrvT#`$nz+X&PoF=&hqyQ!X8@KH>&5vox}RqG<{9 z_3;mE;k)yU2TylsgX@mFKuxORk6+nKcfB*yw~Xp~Xdc(R$yHQW#bWsAtrManJOO zSfbr*Y9a0+5O-~z?;?9lcZ1(M%*dxXE`0Q4kysYs%owYaE_Gdp@ofezP|h<_oCYUD zT_BFjRE4-DCer1mT?jWU%T%F$`35j+IrGfW35;9~C8qB}n=*VBjOSr$mJ2?$G=<24 zaz9L^p+8K!2yQ+vld$%;8Zfe+k|8zKtg_9<8@hJ6YyN;gA=0rLhHw}|ZsErOoTLJYZ zm*Vi50S#bz{aU$YF34u(C%bzc_H(wc`in>GBgVr< zB4HyT{8#oW?4kWMbX&=?21mdctu~}r7^GKwqtDijK3kPD zY9Hm98Y7`YdmQ1yTrr6^DZaY2;v$Kq$!SR@C6Z^= zC(NmazCTKVEa-JKY^FHxs?UVvq|NCr3QH{tfB&=4Ja@tN3HB=y>{WICFerQ|4V}i> zh5&7kgHxdEYLW^;AaEhVgB0cFx&7V)~;B5i^zHMig2F&szc|`r1CQX9}dNXBbJ9i$qb$EOFQfd=Y-HdD0cd`}}3R9?)QNh&&OiM2j4o?T+(QzHFtI!*M zL}2Gezx|p`EkFh2YM4bXalb->ER>{j6Bwak8m8HIH;$%8JSJ+=6AIFkTfU7|BU>xZ zcj_+{NBZUSC>{gL1+dTSCa*{I1P>%{_9k!kFcC9^+T)kfoXZ1LRTRi*(nLIauFBzi zT5L3B(z20TcDB)EzP)fWC#$0XM+K8h_G&LR*#Fc@Xn-0UU%uX!o&00yrMP*gxY=&m z9ha86BVoD44z`ME-@Ha0F~##I%WGPe|De>O2{}`?Nj!&3Jb&W%*`&9;+My`63PK_< zx$~5#TZmJ%UplzHkP&9rxo;A^Z{l;PsSJ9slHwL*#Gxj*Sty^^t+K7%x~CDbW`TF?3vWRQZhV$+HZE z+yF^7equ{S9&4%}$RPvS@x9scJxp*6p(=z*mV z3GQh5847u#snYc*-A=fGJA#0O$<=zSl(bkf``{E>=g?u z3Ad~Uv|4uwC`-K;(c^u8)GMv=@G0E7!gHpkz4zR;YRkT)OJ`lYNO*jVbQAiWFW$(* zt3P)XeSgGQOO|V)*@Ch9S~P@Z`U-D^jI(9ksF{D#GOg1uU$F=_(T+cJTM;&tj$x{w z5+*h10c_rL{>P0^^K|HLe|-Ne-+(Rd%o+ww8*g;KxgQ#_{#rMh@c!ANK#N4&0EEQD z@G?ikTFz}lKv{nbKkDm6>&W!Q9hT1!_TA5$?|BW)S1TPYAHVbR-g)x_kNzHNg&qEw z{Js3UZaEQ7(ZW9odEJjnl)CZl6MVeh>EHGB24V&Vwy#&ab3dV1Hx1UBchy;XQ+7rv zP<)vz-M{v~q@v$zvr>>4e%?khT#76$_j_3@FF`UV|3<{@l~d1`%>}q+-cqvk0MM2GL%|DL}VW?YL;a*Z| zqm0fgwlFY2C)8t(@kkeuowsSC!g_J$lBRw%0YPz_0y+j(z(l2N8j>b}Ci`O1qq?1C ziEUmnAiwpk==hchY_nH+Sv7C7cBKqfgE4Pyhk_(wbF@^pH&*mOo$rm0>g9GgMZQ24 zhb}VV@&e9z^L;LOd)cL+b?9Lqu$ErWfc}hrTR--!@Rd{H@bJ(+2tD>-^foUlc*saC zfMyfJ-0S&0R1m_-tb;#&wlT-pS&C74V78MX`qP_RinJa*!MQ$mmgJKavdQbSxyz-b zf!T+Orn`gJMNfb@S5c3VnNvW}&V&xs4xFGDAM`7WmgH|I5Io1rc=ROy=B_mo$P=FZ5`YMpm7 zQYTtFK&Kust-9@lq|F0pK7IYAkjRBK#=#Or@C|IT?s!Q9-cH7%?t9P4KVAC#KmvMX zaB=YdDE0zU2Lh&iql2XD|>gfq7~PrJKy_ z3^tEw(zt-ot$#Pvru8tj*aZJg=Hko=2eZlPKj_d!=|--?d|tq`1;Rq}=p>7*0J07((X}yG`%DwOuFsR(`GE6|8+<@*L}r#g=&; zTlWdzsgN^XKwkYj$aC*sx+UAuPt4mYHx97~dhdSVg>7?9lkNLSmy-5vsk2 z@*qmQbD|E~dxL%&yN-ZJuoU^*uf6xBAFVNQZwZAQ=VbY+?*xKSZ?ujQvrAD0x|q!> z(H2XeuFLJ-8}utqS(GMSWmG~ zOf`JM?qkHJ45HGzJnA5M-?Y|?qcA%kwLDI2i$8`y;+T7E^kZ_PMP7Y>`K6M(SU1eWv|nGJ(E8)$UH(Pb=RY1`c#t?dKgfNl@BVv0IQwGP6GPJvA!&0Q(g-LuHA(GAer z%bXS-X{bA7Oi5!?@~awVA6=nwZ|*K&QNjyr#EV1yjii4Njd`#{`H1M5<0a-7trCDS z4|b1*{^?Y|#BCw-xdXyQAg4H9vTr!hu`e-Eq}a@gi3jVME4VHveC+;(Yy0yhxEN6EDqy+ zgwraFItNd{nV;@T_3xgQ1KPA+?jw}8UC;do%Q4mXqvLiT!#2fH%leggSNA{9{+CWx{;ZTeJYcVB;LMZ? zP4WIro(ptuX!O+!_QlnQU*00ltXB718ymAYyWL^7P+0-pd_enMR3gSufuz<;7U_ZD zl-I90Opce_N~Yy|Fe-R1%b- zoO*HV)g{aQ1>VmY7k$6fR0ldmryrxSN{oT;kYEf6;*5Jdj+7epY746g1{FX5V}e;j zHW3`HZ8Eid4OFdI-mSNbqMD4SzK?b5_yi#31xV2is(1mG)BU+Qz=OUn7ZG)6tGY3U zK%4y;vjR58ccM}9wF}?SbdIgCFfq*pj@k#in@gLPRN~Vc(H}DHSJ%he=W9;c1!wC! z`IRkq9>?1IsD!L|nU;Cjp0BD;k=E`qtWT-7bc|kaxxZAeRnJ8e5VOx$K3255*3Za; zb^iJNDF>~-ozwe!o3RHq|IpYR)Rx!i=Y)?Vym;|sT`wi^h(B6UarIBIhN#M@SqbyE9l8D$A*&U3(K0kd)ID4`ZJhcIR(&|I;Ey3`)Fxa8b3d`?{oa z*2|^vx$GwsD!rW+eWz@0eQk+v$ouhhInCoSn{3XEkah)He?z3s z(lsYaDpmtfg9@p##JjwxB6j$0xpw%ds6DD>US{|rlRx8pT&752@qS=ixM2+ar)wGG zeD0r+I%ODqsT85yiQqj+W6??Z&t& zFL5i#W5MqXH@O2mO+@8OxZpo=rn){6lF{UG)N{apqD&;kk%BXM5{D2qp9FO~`Vx&D z?=N{SxUxu^&ulEuuLGKNv0?C5JS4>2k>E9erVElE4l5xQnI%yd^FxSI|wrB$>|bq{YN;5 zByKLyre6*nhRvp5M_b#P zV7&lIwmWpQpFAG+UbMTCL%{Z%QtjPMAmT zU&@J1C8)Sr#ED(I=fa0yISYx`9sd!A}?DNR}nrS4JD`fDn*3MdCzZ$IJ6Y zKIT;>L>!AGF-wF3Xo zk_LRVx$~ePzcu(6Fb-;VoUy0^1Y>(E@|3U>z-enZwCmdruX0DYxB!JODTsw$MeY`< zkr2jCv89X!E?+waqrvI-s0{dI1Uw6L7zCeyN)q0(u7It(AQ(5N@$R6%kDQUco=LF| z!1L_!PZy7)MZZd$mXFn}@1D1=0s8&PVr=J4==pw_3;8W>_TmMb;z&A>$M`?@F~# zU&rOO1f(V{4pj4w*CwE0AZY%{CS*<&W3QYCL4dh{sQIzRZaJiJODj)a#{mzxG4+rH z!3sigPQ}9esNLqbJ0u&$gc<>;?|1#*#>Mjh%FV^OOdbu8NKE$VklB_{G0+~L1rRzt z;T`40s&#;wBd{Y4#b$#-?vMZ#ENRrA)V#v;edO7WN?j1*XFg7W1O~XY;GB2~GL+2f zGvo{zI3eW-J33KH-)!w+Ec5n@a$DM|Vu;P+`IAC{K-?$pz_6J)F8?M~2L@0hn8*Hz zntdX;7Hwj%LvE1*uo~?ijs8mN(V!Dsfsg5OVy=g(Ra#p6RtiX%Esx!i zl_vmu6r-vYligs}M%ipVV-5uDxHIzUF-ft?qKE;BMOWsD>k013BYgnP% z)?wZi?m<3wsV}7@akRhp;e7f?5;qgKvzl0c&Vt({MM(GSd6^8#LC7`DapdJ|Y zJk|q3!R|+ven8r~da7kX!t~xid3Xe$) z4|kr>DK`%f{cT8N6+=m)4NRa0ohKmdaRkTLB0p6}A!^{f9s;B)fCEN>Hb)yJ%uAU5 zIQqydnSlb(fV%ZRBp5cD@&SJ$0GliQM~Zp=mC;)jD*zt<=|1sG2#&sHIXgMeEXPzi~i{usEkkI+UlF#GoJq|?mQ)oof{fM z?q&aGkApP*>Mzi!ECFNa`3BN*3XZ!x98j|X2Lp`&@cp9|29RkVC4_<`fi|cPGLPM4 zUS&T5@wXw~R`lb5;7LM~|4{+(|C5f79)I)$5PEl1kD&)B@MISbma-iVRG>B6u{2V!KgKFD6HqDNSTN#JiaHG@tHmJyzo#I?AH$;r zs`5KwdNA->^D5l|c#i{@H=OeF>&eL3_4e7>_*wA-a-~sA9~doosAtOs1q6y^e4I51 zQ*J|s>PBR-69gRc&OC^^u_=qbkWAtG*x=4Pv)AM3Uo-^b`SOe>`R>qNn=xTf4+FBp zukCW3mKMLZbD*lZNDd1LrI-4R9o3WcCZ=&_b89nVlT<8itcuB;jw~*lMQzLK?rMDJ z#d@&-d!8^AH?tISX~Y1Pa+mj{`qgSL+4~t(sFoV=>Z*vcRG*o-bx|=DS_gLlleMzk z`~C>_POBdDbH)(0A+m)xkm3TQyPejE{$D$*w6#h7)8n=pLDwijtlw*!wHg2Je7gFw zgd+2kaKf_(8+-bU8* z+)x`)iE+q^>qrRFdm-Gob9Q?jJJ(g?@OvQb zjy9Kj;!@2i1~$8FK_5|0VF9uK)QK_}?)*!*k<$Ay~HacWj zg6}b8Zo|ws{^H~6ppGHiRo9Hx!g|{ADO4j!v+@YDDggfAeAaY#n|M3cQc5Wn$+5+? z5SyPygnAne)aO2^Ppy7+u zvlRMy^jm2hB2TN&;>nYTplz$FJ+W|JyHlac!^n{;-m)IAz~V8Az@5kl};+M0N& zZL4!=Ker91(I+x@Ug2XSbr}kVrUI|#ybC&EZ06YheelUt4JJ>x>JfsR9sYH>ys}6p z56xDu%U4SZJvc=R*phcJ6$j?f1)UGy{u)z5Tl*~4{2>NdrP%T~{bm+QA=vN$27w+P zp5DHW(VDTF+TNW!8G5TwrkIYMt~m5@x~u4F(}WY6tn=(aut~_X z(bMhT#buj)X=2Z&@#}-JF7&j=p}ZmKm0yN z|CSzbz&%saVi}{Y)M7a`p6!1d_DZnkSFwcIDcUzH#4Ihd6S6O|It7qF##EB|rVy$zD zOnl#kD9&nP8Bv$VHKE#l9ut^}#aZJogy9&L8OKp$D#WsbWB8%7Ls^_;4wo{3to1k6 z5xcszA^L$qL1XvSbcZqzX6(4KFec%IvIJ)AgtEfV7v$>WtdkCMJkSMIg`eurd^VIF=VpIOq;NkL{vpa%oseSm4Gj7!0WDD|#>vcpJ1@W#-W3ZS+1f zk=WR?vDZ}~y7MT_6cbS##I}FgqV}Dma>?}6mk0YcnMjw-Q=>%dOdraO|OD)yk;O5X>7j?a1eq?e-r~(+G-;zlgn=*q46ZGTtuyro-XIJM4NK9(PsJ zYFBK$EXDedjOIDnW7^6%JVjD;E~;o&hSi9uDhvv4UE_q<%H|xzK16v<&gLlCY02XQ zyOJz{RaxpnzV>DT{hw|t3%T+csO!knX?tC{IqTS=7a_e{8de40s5ZU3)`cwoSREh+ zf95rRY45yzP?_qkvRd{*z91;dplrc|L~OCRe#s`rWs{wPI<&V`Supi^+d}aPJ1@(n zkgCo8sT%@sOBuhl%$OmebA_N!3Sw*@qHt=1D<1H()d=qTZP6#Yl^^(PPGo#O$?2Rf zg5SA|p>v#5z|ISKTJs4XTnvn?%KehlXsnXDzV+qGdG3Yf2PK=>8rl)@TJ!mT98m3K zwQkF-U6~H=|Kwqt+z{&2o0|27|1-J$NvRX%c8!q4oWN0Tqt;xAbma!q?36c~t=ue; zEAKzwqbh48l368Y?c!eDcB*KFEm=yGEDJM@#Z^{u@XF0Gcc;>P;g=(~NB=0?ID)pq zBo|ealKZXC-x^ooZ{v_!PARNBeCb%zrOc^Iw47sNuLT(Pf01U-1jO$6Z^PiZF0At7lAs};GXZ>%T{wu++R zh_v?zstzzXMr{Ije^&49#pZR=@^uY4O(VW3#=`wPBklZGSvIEkBX8*|j|KgO9=05N~1h&&MQP(yN;J1)ay z8+cO`H~ zbe-j2@oJl*GRJ$khRVv}^3XFVvAA3#`u*9QyE)>s%LBU>2Imp`dCF?1SO--bE)N_v z5aOpLBkLdiY(HLlfmIHtF!N2=8Mf*B7<6T0Uqj!`GA|gi=^9bh{>7JlodtTJl<0=3 z9KF3O9~zv(&)$aeH>Rzip3`#wu+dz9zAOpOgXx=*(vjV(!Qapnu zd7(l7GpuZw=j?$WUkE~f-?Yd3KNF-L9>P@Gtb8l42W`PbA2_>gp^=)g2t|ZgGtpPt4UVt` z`g-z8ic?H$TL%Uce>7P|M2Gv0gYovx7#kg@UA$1~bg43t2&!>b5X~aUV!b98Jejci z9EoRiEY;@q*^1zi!saa-EP#^25UR|bPxj)Z?)0pqlkFVye+O4pv0tox*a`d}WT&I# z@j2-;?2%;N8gbaG{j5Di7~meCs(QEC^6^J=nCiFS8Q|r~zWsey+2h{`)Rf&q=fbj6 zUat&*0vW`CpWU5J!kdXHR$-JfNc(1!V@dlfvsDUrcQVco1Otu>sLi41l3WE^X~|oB zlS7uJvy#|Dtv*Hc9E~LlMZM2*rAXcdfqt}S4Jw5M>Pa|p3MfM(dMyu}WI?2rE$gU> zv`&Uq7!3w~l0&a_xh&2^1U4#6b7#hWT5GVhykXSDA;)7W|AOt58+YNromNy4D!uvR z#4+uR={?OK@u{q+&(O+Y*}cj#rVpq&j2$(_va_l&=3I&qu5>_eJtQGfj;5kdt0Y-tx>xn;r5}d><+9VSNc%0n2#z23U3ieaa8yZWS})A56Q1cH zyv43)R&@f$7VT{cl$Iu$PwDL%6V5Lew6}_HV`*3Qlprj&R9R{sNZtg_Z(|H6uxk1C%# zP)2sEfpU%sK&jG-a24UNBR*E1{90v36pb+{tFD~Ag@B=c(QQ_9>=*%u@aI?o!}dmk zW>aXvp^oOx=H+lhqglM~KH;&}K&0h$TkeebZKE?qt!b`y@vlP1cQ5K?7h7G8Ps7%; z!yp;{QL^7n*GK-oYyu{{mC=0<3m`RbgYEv^jV~;hCqc#@es5FI%HW+NjPE4*Dkx56 zrwhsAKuQdnDQ;`5GsNL%rNB!3p&3crXvS~KOUG`#3O>(?Dq2`I1Z?hH76M{oR9E(u zR60>njL=5VyuoJc><_Nc_&v)$-n^hzL*Qwv+~UrIlAK4%v-VqZ>vjG}=uHowMUlg1 zEJ#%`SHGa#$4)k)$L4RtbPH9v61Es43Npnv7UEA(EAH>>Ki7#9CYkG$tf03hKS!eM zaU9RBGrxqvL^6i6TBDc!)rdOs&#_bKeCk&ziC5w^(bg3{496n1$XK~_{ZzdA_DA5& z1I+QefQ#Bf#p!oSTBfX~I}$3GKFRLBuzFhe>&*c{RU$18#meHU+V_8!v|brpt>=;- z?0q%W=S(lS`0`b9Fq9j;Q_d+0c?ILqwRSXJJv@KtwwA zrRNnk%wU`#ei|8!RXO%x4Ubx_{ISIt$eSPIW#Pe!;L!L)crYvZ3zxL+8#oY12N?t+ z0rKs?e~9rb@L(1+JL4mtRRGg9n(;&kU?B>r3hu8oCLoX<2>!nsC_aZ}`V+?cB7g}g z{#``qzuD&b15{-3!w6s;ivKg^^}l%ij(Oq*%z-7O`1jGmfAf-Ud!zy$HXz1pBLe*X z9WMPhGw*0yLEX diff --git a/epictrack-web/src/components/reports/resourceForecast/ResourceForecast.tsx b/epictrack-web/src/components/reports/resourceForecast/ResourceForecast.tsx index 1bffe4132..763731446 100644 --- a/epictrack-web/src/components/reports/resourceForecast/ResourceForecast.tsx +++ b/epictrack-web/src/components/reports/resourceForecast/ResourceForecast.tsx @@ -1,16 +1,13 @@ import React from "react"; import { - Alert, Autocomplete, Box, - Container, Grid, IconButton, TextField, Tooltip, } from "@mui/material"; import { - MaterialReactTable, MRT_ColumnDef, MRT_ColumnFiltersState, MRT_ToggleFullScreenButton, @@ -24,6 +21,7 @@ import { RESULT_STATUS, REPORT_TYPE, DISPLAY_DATE_FORMAT, + COMMON_ERROR_MESSAGE, } from "../../../constants/application-constant"; import ReportService from "../../../services/reportService"; import { dateUtils } from "../../../utils"; @@ -32,12 +30,14 @@ import ClearAllIcon from "@mui/icons-material/ClearAll"; import FileDownloadIcon from "@mui/icons-material/FileDownload"; import ReportHeader from "../shared/report-header/ReportHeader"; import { ETPageContainer } from "../../shared"; +import MasterTrackTable from "components/shared/MasterTrackTable"; +import { showNotification } from "components/shared/notificationProvider"; export default function ResourceForecast() { const [reportDate, setReportDate] = React.useState(""); const [showReportDateBanner, setShowReportDateBanner] = React.useState(false); - const [resultStatus, setResultStatus] = React.useState(); + const [isLoading, setIsLoading] = React.useState(false); const [rfData, setRFData] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState([]); @@ -138,6 +138,7 @@ export default function ResourceForecast() { flexWrap: "wrap", alignContent: "center", justifyContent: "center", + textWrap: "wrap", padding: "1rem", }} > @@ -312,7 +313,7 @@ export default function ResourceForecast() { ] ); const fetchReportData = React.useCallback(async () => { - setResultStatus(RESULT_STATUS.LOADING); + setIsLoading(true); try { const reportData = await ReportService.fetchReportData( REPORT_TYPE.RESOURCE_FORECAST, @@ -320,8 +321,8 @@ export default function ResourceForecast() { report_date: reportDate, } ); - setResultStatus(RESULT_STATUS.LOADED); - if (reportData.status === 200) { + setIsLoading(false); + if (reportData.status && reportData.status === 200) { const data = reportData.data as never[]; data.forEach((element) => { Object.keys(element).forEach( @@ -329,13 +330,14 @@ export default function ResourceForecast() { ); }); setRFData(data); - } - if (reportData.status === 204) { - setResultStatus(RESULT_STATUS.NO_RECORD); + } else { setRFData([]); } } catch (error) { - setResultStatus(RESULT_STATUS.ERROR); + showNotification(COMMON_ERROR_MESSAGE, { + type: "error", + }); + setRFData([]); } }, [reportDate]); const downloadPDFReport = React.useCallback(async () => { @@ -362,7 +364,9 @@ export default function ResourceForecast() { document.body.appendChild(link); link.click(); } catch (error) { - setResultStatus(RESULT_STATUS.ERROR); + showNotification(COMMON_ERROR_MESSAGE, { + type: "error", + }); } }, [reportDate, filters, fetchReportData]); return ( @@ -383,65 +387,55 @@ export default function ResourceForecast() { /> - {resultStatus !== RESULT_STATUS.ERROR && ( - ( - <> - - - {/* add your own custom print button or something */} - - { - setColumnFilters([]); - setColumnVisibility({}); - setGlobalFilter(undefined); - }} - > - - - - - exportToCsv(table)}> - - - - - - )} - data={rfData} - /> - )} - {resultStatus === RESULT_STATUS.ERROR && ( - - - Error occured during processing. Please try again after some time. - - - )} + ( + <> + + + {/* add your own custom print button or something */} + + { + setColumnFilters([]); + setColumnVisibility({}); + setGlobalFilter(undefined); + }} + > + + + + + exportToCsv(table)}> + + + + + + )} + data={rfData} + /> );