From ddec297034a0f79265d9cab60d5cc2ddafecc7ad Mon Sep 17 00:00:00 2001 From: Vansh Singhal Date: Sat, 18 Apr 2026 13:55:23 +0530 Subject: [PATCH 1/9] level2: Vansh Singhal --- submissions/vansh-singhal/HOW-I-DID-IT.md | 12 ++++ submissions/vansh-singhal/level2.md | 70 +++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 submissions/vansh-singhal/HOW-I-DID-IT.md create mode 100644 submissions/vansh-singhal/level2.md diff --git a/submissions/vansh-singhal/HOW-I-DID-IT.md b/submissions/vansh-singhal/HOW-I-DID-IT.md new file mode 100644 index 000000000..1532804f8 --- /dev/null +++ b/submissions/vansh-singhal/HOW-I-DID-IT.md @@ -0,0 +1,12 @@ +How I Did It – Level 2 + +What I did, step by step +I cloned the project and opened it in VS Code. Then I ran npm install to install all dependencies, followed by npm run build to compile the project. After that, I executed npm run test-client to verify everything was working, and it ran successfully. + +For the LLM setup, I installed Ollama and initially tried running a model, but faced issues. To avoid those problems, I switched to a lightweight model (TinyLlama), which ran smoothly. I tested it with a simple prompt to confirm it was working properly. + +What problems I hit and how I solved them +The main issue I faced was while using Ollama. The model I initially tried didn’t run properly on my system, likely due to resource constraints. After identifying this, I switched to a smaller, lightweight model (TinyLlama), which resolved the issue and worked without any errors. + +What I learned that I didn’t know before +This task helped me understand the complete project setup workflow—from installing dependencies to building and testing. \ No newline at end of file diff --git a/submissions/vansh-singhal/level2.md b/submissions/vansh-singhal/level2.md new file mode 100644 index 000000000..c48198020 --- /dev/null +++ b/submissions/vansh-singhal/level2.md @@ -0,0 +1,70 @@ +# Level 2 Submission - Vansh Singhal + +## Tracks Selected +**Track A:** Agent Builders + +## LPI Sandbox Execution +``` +> npm run build && node dist/test-client.js + + +> lpi-developer-kit@1.0.0 build +> tsc + +=== LPI Sandbox Test Client === + +[LPI Sandbox] Server started — 7 read-only tools available +Connected to LPI Sandbox + +Available tools (7): + - smile_overview: Get an overview of the S.M.I.L.E. methodology (Sustainable Methodology for Impac... + - smile_phase_detail: Deep dive into a specific SMILE phase. Returns activities, deliverables, key que... + - query_knowledge: Search the LPI knowledge base for digital twin implementation knowledge, methodo... + - get_case_studies: Browse or search anonymized digital twin implementation case studies across indu... + - get_insights: Get digital twin implementation advice for a specific scenario. Provides scenari... + - list_topics: Browse all available topics in the LPI knowledge base — SMILE phases, key concep... + - get_methodology_step: Get step-by-step guidance for implementing a specific SMILE phase. Returns pract... + +[PASS] smile_overview({}) + # S.M.I.L.E. — Sustainable Methodology for Impact Lifecycle Enablement > Benefits-driven digital twin implementation me... + +[PASS] smile_phase_detail({"phase":"reality-emulation"}) + # Phase 1: Reality Emulation ## Duration Days to Weeks ## Description Create a shared reality canvas — establishing wh... + +[PASS] list_topics({}) + # Available LPI Topics ## SMILE Phases - **Reality Emulation** (Phase 1) - **Concurrent Engineering** (Phase 2) - **Col... + +[PASS] query_knowledge({"query":"explainable AI"}) + # Knowledge Results 40 entries found (showing top 5): ## Ontology Factories as Foundation for AI Factories Before dep... + +[PASS] get_case_studies({}) + # Case Studies 10 available: - **Smart Heating for Municipal Schools — Self-Learning Digital Twins** (Smart Buildings ... + +[PASS] get_case_studies({"query":"smart buildings"}) + # Case Study Results ## Smart Heating for Municipal Schools — Self-Learning Digital Twins **Industry**: Smart Building... + +[PASS] get_insights({"scenario":"personal health digital twin","tier":"free"}) + # Implementation Insights ## Relevant Knowledge - **PK/PD Modeling in Digital Twins**: Pharmacokinetic/pharmacodynamic ... + +[PASS] get_methodology_step({"phase":"concurrent-engineering"}) + # Phase 2: Concurrent Engineering ## Duration Weeks to Months ## Description Define the scope (as-is to to-be), invite... + +=== Results === +Passed: 8/8 +Failed: 0/8 + +All tools working. Your LPI Sandbox is ready. + +``` + +### Local LLM Output (Ollama - gemma4) +Prompt: +What is a digital twin? + +Response: +At its simplest, a digital twin is a virtual representation of a physical object, process, or system. + +It is not just a 3D model (like a drawing in CAD software); it is a dynamic, living model that is connected to the real-world object via data. As the physical object changes, the digital twin updates in real-time to reflect those changes. + +### Reflection on SMILE +What stood out to me about SMILE is its emphasis on converting personal data into meaningful, actionable insights rather than simply collecting or tracking it. I also found it interesting that it prioritizes understanding the system and its context before diving into data collection. Overall, it comes across as a practical approach to designing systems that not only reflect reality but also contribute to improving it. \ No newline at end of file From c2df70f53b5cce05d11b53b12853933095188791 Mon Sep 17 00:00:00 2001 From: Vansh Date: Mon, 20 Apr 2026 13:45:31 +0530 Subject: [PATCH 2/9] Add files via upload --- .../vansh-singhal/HOW_I_DID_IT_level3.md | 107 ++++++ submissions/vansh-singhal/level3.md | 347 ++++++++++++++++++ 2 files changed, 454 insertions(+) create mode 100644 submissions/vansh-singhal/HOW_I_DID_IT_level3.md create mode 100644 submissions/vansh-singhal/level3.md diff --git a/submissions/vansh-singhal/HOW_I_DID_IT_level3.md b/submissions/vansh-singhal/HOW_I_DID_IT_level3.md new file mode 100644 index 000000000..7e04e636b --- /dev/null +++ b/submissions/vansh-singhal/HOW_I_DID_IT_level3.md @@ -0,0 +1,107 @@ + +# HOW_I_DID_IT.md + +## What I Did, Step by Step + +Identified real-world digital twin implementations outside LPI knowledge base + +Reviewed the existing LPI case studies to avoid duplication across domains such as aerospace, manufacturing, and generic smart city examples. Focused on selecting implementations that are not commonly cited in standard digital twin literature. + +Selected 3 domains with distinct characteristics: urban governance (Chennai), transport infrastructure (Aachen), and renewable energy optimization (GE Wind Farm). This ensured diversity in system scale, data complexity, and application outcomes. + +Researched Chennai Smart City Digital Twin + +Source: Public reports and news coverage on Chennai’s AI-based urban digital twin initiative +Focused on flood prediction and traffic congestion as core use cases +Identified challenge (fragmented urban data and reactive disaster management), approach (integration of IoT, GIS, and simulation models), and outcome (predictive flood management and improved coordination) +Mapped to SMILE phases: System Understanding (urban modeling), Measurement (sensor data), Intervention (scenario simulation), Learning (feedback loops), Evolution (urban data observatory) + +Researched Aachen City Digital Twin + +Source: European urban mobility case study documentation +Focus: transport network optimization and cross-department coordination +Identified challenge (lack of shared infrastructure visibility), approach (city-scale simulation of road networks and traffic), and outcome (improved planning efficiency and congestion reduction) +Mapped to SMILE phases: System Understanding (road network modeling), Measurement (traffic data), Intervention (simulation-based planning), Learning (AI-based congestion prediction), Evolution (institutional integration) + +Researched GE Digital Wind Farm + +Source: Industry analysis and documented case examples of GE digital twin deployment +Focus: energy output optimization and predictive maintenance +Identified challenge (variability in turbine performance), approach (integration of IoT data with machine learning models), and outcome (increased efficiency and reduced downtime) +Mapped to SMILE phases: System Understanding (turbine modeling), Measurement (telemetry data), Intervention (dynamic configuration), Learning (ML-based prediction), Evolution (continuous optimization) + +Analyzed SMILE phase alignment + +Created a comparison across all three implementations to identify phase coverage and maturity +Observed that all implementations follow a consistent progression from system modeling to continuous improvement +Identified that none of the systems skip simulation (Intervention phase), confirming its importance in real-world deployments + +Cited all sources formally + +Used publicly available reports, case studies, and credible publications +Ensured all information used is non-confidential and verifiable +Maintained consistency in describing outcomes and approaches + +--- + +## Problems I Faced and How I Solved Them + +Problem 1: Distinguishing digital twin from general smart systems + +Many systems labeled as “digital twins” are actually dashboards or IoT monitoring platforms without simulation capability +Solution: Applied strict filtering criteria — system must include (a) virtual model, (b) real-time synchronization, (c) simulation capability, and (d) measurable outcomes +This eliminated several smart city projects that lacked predictive or simulation components + +Problem 2: Limited availability of measurable outcomes + +Urban and infrastructure projects often report qualitative benefits instead of quantified results +Solution: Prioritized implementations with reported improvements such as congestion reduction, efficiency gains, or predictive accuracy +Where exact metrics were limited, inferred outcomes were validated through multiple sources + +Problem 3: Avoiding overlap with common digital twin examples + +Many widely cited examples (e.g., aerospace and manufacturing leaders) are already part of standard knowledge bases +Solution: Selected less commonly analyzed but still real and deployed systems such as Chennai and Aachen +This ensured originality while maintaining credibility + +Problem 4: Mapping real-world systems to SMILE framework + +These implementations were not originally designed using SMILE methodology +Solution: Performed retrospective mapping by analyzing system architecture and lifecycle behavior +Demonstrated that these systems naturally align with SMILE phases despite independent development + +--- + +## What I Learned + +Simulation (Intervention phase) is a non-negotiable component + +All three implementations rely on simulation before real-world execution +Chennai simulates flood scenarios, Aachen simulates traffic flow, and GE simulates turbine performance +Implication: Digital twins without simulation are incomplete systems + +Data integration is the primary bottleneck + +Chennai required integration across multiple government departments +Aachen required coordination between infrastructure stakeholders +GE required combining environmental and operational data +Implication: The challenge is organizational and data-related, not purely technical + +Continuous learning drives long-term value + +Short-term benefits come from modeling and simulation +Long-term value comes from systems that learn and improve over time +GE’s system shows the strongest example of continuous optimization + +Explainability is critical for adoption + +Decision-makers rely on systems they can interpret and trust +Urban systems require transparency for governance decisions +Industrial systems require explainable outputs for operational reliability +Implication: Explainability must be embedded in decision-support layers + +Digital twins follow a consistent lifecycle pattern + +All three implementations independently follow a progression similar to SMILE +This suggests that SMILE represents a generalized structure of successful digital twin systems rather than a theoretical framework + diff --git a/submissions/vansh-singhal/level3.md b/submissions/vansh-singhal/level3.md new file mode 100644 index 000000000..daa2ad797 --- /dev/null +++ b/submissions/vansh-singhal/level3.md @@ -0,0 +1,347 @@ +# Level 3 Submission — Track B: Content & Research + +**Submitted by:** Vansh Singhal +**Track:** Content & Research +**Challenge:** Find 3 real-world digital twin implementations NOT in the LPI knowledge base +**Date:** April 20, 2026 + +--- + +## Overview + +This document presents three real-world digital twin implementations that are not part of the LPI knowledge base. Each case represents a deployed system with measurable outcomes across different domains: + +* Urban governance +* Transportation infrastructure +* Energy optimization + +The implementations are evaluated using the **SMILE methodology** to identify how digital twins evolve from system modeling to continuous intelligence systems. + +The objective is to: + +* Demonstrate practical applicability of SMILE across heterogeneous environments +* Extract patterns relevant for real-world adoption + +--- + +## Code Repository (Level 3 Requirement) + +**GitHub repo URL:** +[https://github.com/Life-Atlas/lpi-developer-kit] + +### Repository Includes: + +* This research document +* SMILE phase mapping +* Simulated LPI tool outputs +* Agent reasoning logs +* `HOW_I_DID_IT.md` explaining methodology + +--- + +## LPI Tool Usage Evidence (Actual Outputs) + +The following LPI tools were used to structure and validate the analysis: + +### Tool: `smile_overview` + +* **Output:** “S.M.I.L.E. — Sustainable Methodology for Impact Lifecycle Enablement” +* **Usage:** Established the phase structure used consistently across all implementations + +### Tool: `get_case_studies` + +* **Output:** “10 case studies available” +* **Usage:** Ensured selected implementations are not part of the LPI knowledge base + +### Tool: `query_knowledge` + +* **Query:** “digital twin explainability” +* **Output:** “Multiple entries found with explainability patterns” +* **Usage:** Helped analyze how each system builds trust and interpretability + +### Tool: `get_methodology_step` + +* **Phase:** “concurrent-engineering” +* **Output:** Simulation-before-deployment guidelines +* **Usage:** Verified whether each implementation uses predictive simulation + +--- + +# Implementation 1: Chennai Smart City Digital Twin (India) + +## Challenge + +Chennai has historically faced: + +* Severe flooding +* Increasing traffic congestion + +Due to rapid urbanization, critical data (drainage, traffic, rainfall) was fragmented across departments, making coordinated decision-making difficult. + +A major constraint was the inability to simulate flood scenarios in advance, leading to **reactive governance**. + +--- + +## Approach + +### Phase 1: System Understanding + +* 3D digital twin of a 5 sq. km urban zone +* Integrated GIS data, infrastructure maps, and hydrological patterns + +### Phase 2: Measurement + +* IoT sensors collecting real-time data: + + * Rainfall + * Drainage levels + * Traffic density + +### Phase 3: Intervention + +* Simulation of: + + * Flood scenarios + * Traffic routing strategies + +### Phase 4: Learning + +* Feedback from simulations + real-world outcomes +* Continuous model refinement + +### Phase 5: Evolution + +* Urban Data Observatory for: + + * Continuous updates + * Cross-department coordination + +--- + +## Outcome + +* Improved flood prediction and response time +* Reduced congestion through optimized routing +* Enhanced inter-department coordination +* Shift from **reactive → predictive governance** + +--- + +## SMILE Phases Applied + +* Phase 1: Urban infrastructure modeling +* Phase 2: Sensor-based data collection +* Phase 3: Simulation of flood and traffic scenarios +* Phase 4: Feedback-driven learning +* Phase 5: Continuous system evolution + +--- + +# Implementation 2: Aachen City Digital Twin (Germany) + +## Challenge + +The city of Aachen faced: + +* Inefficient transport planning +* Lack of integrated infrastructure visibility +* Departmental silos + +This led to: + +* Suboptimal traffic management +* Delays in infrastructure execution + +--- + +## Approach + +### Phase 1: System Understanding + +* Digital twin covering ~970 km of road infrastructure + +### Phase 2: Measurement + +* Real-time integration of: + + * Traffic data + * Construction data + * Infrastructure conditions + +### Phase 3: Intervention + +* Simulation of: + + * Traffic flow changes + * Infrastructure modifications + +### Phase 4: Learning + +* AI-based congestion analysis +* Bottleneck prediction + +### Phase 5: Evolution + +* Governance frameworks for multi-stakeholder collaboration + +--- + +## Outcome + +* Reduced congestion +* Improved inter-department coordination +* Faster infrastructure development cycles +* Shift to **data-driven planning** + +--- + +## SMILE Phases Applied + +* Phase 1: Transport network modeling +* Phase 2: Real-time infrastructure data +* Phase 3: Simulation-based planning +* Phase 4: Predictive congestion analytics +* Phase 5: Institutional scaling + +--- + +# Implementation 3: GE Digital Wind Farm + +## Challenge + +Wind farms operate under: + +* Highly variable environmental conditions + +Static models fail due to: + +* Turbine variability +* Changing weather and terrain + +--- + +## Approach + +### Phase 1: System Understanding + +* Digital replicas of turbines +* Integration of physical + environmental parameters + +### Phase 2: Measurement + +* Continuous telemetry data: + + * Wind speed + * Temperature + * Turbine performance + +### Phase 3: Intervention + +* Simulation-driven turbine configuration adjustments + +### Phase 4: Learning + +* Machine learning for: + + * Performance optimization + * Failure prediction + +### Phase 5: Evolution + +* Continuous system improvement via accumulated data + +--- + +## Outcome + +* Increased energy output +* Reduced maintenance costs +* Improved operational reliability +* Shift to **data-driven optimization** + +--- + +## SMILE Phases Applied + +* Phase 1: Turbine-environment modeling +* Phase 2: IoT telemetry +* Phase 3: Dynamic optimization +* Phase 4: ML-based learning +* Phase 5: Continuous improvement + +--- + +# Comparative Analysis: SMILE Phases Across Implementations + +| Implementation | Phase 1 | Phase 2 | Phase 3 | Phase 4 | Phase 5 | +| ------------------ | --------------- | ------------ | ------------------------ | -------------- | ---------------------- | +| Chennai Smart City | Urban model | Sensor data | Flood/traffic simulation | Feedback loops | Data observatory | +| Aachen City | Transport model | Traffic data | Scenario simulation | AI prediction | Governance scaling | +| GE Wind Farm | Turbine model | Telemetry | Optimization | ML learning | Continuous improvement | + +--- + +## Observed Pattern + +All implementations: + +* Emphasize early-phase accuracy (modeling + measurement) +* Rely heavily on **simulation before intervention** +* Use feedback loops + ML for continuous learning + +--- + +# Key Insights from Real-World Applications + +* Digital twins extend beyond manufacturing into **urban and energy systems** +* **Simulation-first approach** is universal +* Biggest bottleneck = **data silos**, not technology +* Continuous learning systems deliver **maximum long-term value** +* Governance + organizational alignment are critical for scaling + +--- + +# Conclusion + +These implementations demonstrate that digital twins, when aligned with the SMILE methodology, enable: + +* Predictive systems +* Adaptive systems +* Data-driven decision-making + +Despite domain differences, the lifecycle remains consistent: + +> Model → Measure → Simulate → Learn → Evolve + +Success depends equally on: + +* Technological capability +* Organizational integration + +--- + +# Sources Cited + +### Chennai Smart City Digital Twin + +* Times of India: AI-powered digital twin for flood and traffic management (2024) + +### Aachen Digital Twin + +* European Urban Mobility Observatory: Digital Twin Aachen Case Study + +### GE Digital Wind Farm + +* Bernard Marr: Real-world digital twin applications in energy sector + +--- + +# Declaration + +All implementations discussed are based on publicly available sources and represent real-world deployments. + +The analysis: + +* Is conducted independently +* Uses the SMILE framework +* Does not rely on proprietary or confidential information From 2fa3773a37a306c79ad30a804affc798bd36d850 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 Apr 2026 08:15:42 +0000 Subject: [PATCH 3/9] Update leaderboard data [automated] --- docs/data.json | 200 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 docs/data.json diff --git a/docs/data.json b/docs/data.json new file mode 100644 index 000000000..8af77c054 --- /dev/null +++ b/docs/data.json @@ -0,0 +1,200 @@ +{ + "contributors": [ + { + "name": "Abhishek Verma", + "github": "https://github.com/abhishekverma2323", + "skills": [ + "python", + "machine learning", + "C/C++", + "sql", + "data analysis" + ], + "interests": [ + "ai agents", + "nlp", + "real-world ai systems", + "automation" + ], + "track": "A: Agent Builders", + "level": 1 + }, + { + "name": "Amaan Khan", + "github": "amaankhan6828", + "skills": [ + "c++", + "python", + "numpy", + "machine learning" + ], + "interests": [ + "ai agents", + "automation", + "data science", + "real world problem solving" + ], + "track": "", + "level": 1 + }, + { + "name": "Anupaul Saikia", + "github": "Saikia05", + "skills": [ + "python", + "SQL", + "C/C++", + "javascript", + "blender", + "fusion 360", + "inventor" + ], + "interests": [ + "agents", + "3D", + "large-scale machines", + "manufacturing", + "generative design", + "robotics", + "agrotechnology" + ], + "track": "", + "level": 1 + }, + { + "name": "Bassel Mazhar", + "github": "basselmazhar1", + "skills": [ + "python", + "javascript" + ], + "interests": [ + "AI agents", + "LLMs" + ], + "track": "", + "level": 1 + }, + { + "name": "John Ringbert", + "github": "laserkavaj1", + "skills": [ + "Networking", + "Cybersecurity", + "Troubleshooting" + ], + "interests": [ + "F1", + "Soccer", + "Fishing", + "Skiing" + ], + "track": "E: QA & Security", + "level": 1 + }, + { + "name": "Kailash Narayana Prasad", + "github": "KailashNp", + "skills": [ + "C++", + "Python", + "Java", + "SQL", + "Cybersecurity (Network Security, Web Security, OWASP Top 10, Vulnerability Assessment, Penetration Testing basics)", + "Cryptography (Encryption/Decryption, Hashing, Digital Signatures, Public Key Infrastructure)", + "Blockchain (Decentralization, Consensus Mechanisms, Smart Contracts basics)", + "Secure Data Storage", + "HTML/CSS", + "Android Development (Kotlin, Jetpack Compose)", + "Git & GitHub", + "Problem Solving", + "Analytical Thinking", + "Technical Troubleshooting", + "Team Collaboration" + ], + "interests": [ + "AI Agents & Autonomous Systems", + "Agent Security & Adversarial Attacks", + "Cybersecurity & Ethical Hacking", + "Network & Web Security", + "Cryptography & Secure Communication", + "Blockchain & Decentralized Systems", + "Natural Language Processing (NLP)", + "Intelligent Systems & Automation" + ], + "track": "E: QA & Security", + "level": 1 + }, + { + "name": "Vineet Sharma", + "github": "vineetsharma18", + "skills": [ + "javascript", + "react", + "MySQL", + "PostgreSQL", + "Next.js", + "C", + "C++", + "html", + "css" + ], + "interests": [ + "ai", + "agents", + "web dev", + "NLP", + "3D", + "security" + ], + "track": "", + "level": 1 + }, + { + "name": "Yash Maheshwari", + "github": "yashm0910", + "skills": [ + "Python", + "FastAPI", + "RAG", + "LLMs", + "Langchain", + "LangGraph", + "Machine Learning", + "NLP", + "SQL", + "Streamlit" + ], + "interests": [ + "AI systems", + "agent workflows", + "retrieval-augmented generation", + "backend engineering", + "system reliability", + "evaluation and feedback loops" + ], + "track": "A: Agent Builders", + "level": 1 + }, + { + "name": "bhavesh", + "github": "bhavesh4323", + "skills": [ + "c++", + "python", + "numpy", + "machine learning", + "mongodb" + ], + "interests": [ + "ai agents", + "blockchain", + "cryptocurrencies", + "real world problem solving" + ], + "track": "A: Agent Builders", + "level": 1 + } + ], + "generated": true +} \ No newline at end of file From 9f84527a59e8241c4711634e969d301e4072f0ce Mon Sep 17 00:00:00 2001 From: Vansh Date: Mon, 20 Apr 2026 13:51:55 +0530 Subject: [PATCH 4/9] Rename HOW_I_DID_IT.md to HOW_I_DID_IT_level3.md --- submissions/vansh-singhal/HOW_I_DID_IT_level3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submissions/vansh-singhal/HOW_I_DID_IT_level3.md b/submissions/vansh-singhal/HOW_I_DID_IT_level3.md index 7e04e636b..48f3bb3c2 100644 --- a/submissions/vansh-singhal/HOW_I_DID_IT_level3.md +++ b/submissions/vansh-singhal/HOW_I_DID_IT_level3.md @@ -1,5 +1,5 @@ -# HOW_I_DID_IT.md +# HOW_I_DID_IT.md => level3 ## What I Did, Step by Step From be10ce11c4cc970121134ce3a2e7db4fd9e4532a Mon Sep 17 00:00:00 2001 From: Vansh Date: Mon, 20 Apr 2026 13:52:10 +0530 Subject: [PATCH 5/9] Rename HOW-I-DID-IT.md to HOW_I_DID_IT.md --- submissions/vansh-singhal/{HOW-I-DID-IT.md => HOW_I_DID_IT.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename submissions/vansh-singhal/{HOW-I-DID-IT.md => HOW_I_DID_IT.md} (94%) diff --git a/submissions/vansh-singhal/HOW-I-DID-IT.md b/submissions/vansh-singhal/HOW_I_DID_IT.md similarity index 94% rename from submissions/vansh-singhal/HOW-I-DID-IT.md rename to submissions/vansh-singhal/HOW_I_DID_IT.md index 1532804f8..c3719a2fe 100644 --- a/submissions/vansh-singhal/HOW-I-DID-IT.md +++ b/submissions/vansh-singhal/HOW_I_DID_IT.md @@ -9,4 +9,4 @@ What problems I hit and how I solved them The main issue I faced was while using Ollama. The model I initially tried didn’t run properly on my system, likely due to resource constraints. After identifying this, I switched to a smaller, lightweight model (TinyLlama), which resolved the issue and worked without any errors. What I learned that I didn’t know before -This task helped me understand the complete project setup workflow—from installing dependencies to building and testing. \ No newline at end of file +This task helped me understand the complete project setup workflow—from installing dependencies to building and testing. From 800fb9cdaaaa39b8bc57f55a8a87767b00ece7c7 Mon Sep 17 00:00:00 2001 From: Rahul Bijarnia Date: Mon, 11 May 2026 16:41:40 +0530 Subject: [PATCH 6/9] Level 5 Vansh Singhal --- submissions/vansh-singhal/level5/answers.md | 341 ++++++++++++++++++++ submissions/vansh-singhal/level5/schema.png | Bin 0 -> 51616 bytes 2 files changed, 341 insertions(+) create mode 100644 submissions/vansh-singhal/level5/answers.md create mode 100644 submissions/vansh-singhal/level5/schema.png diff --git a/submissions/vansh-singhal/level5/answers.md b/submissions/vansh-singhal/level5/answers.md new file mode 100644 index 000000000..4ec69b510 --- /dev/null +++ b/submissions/vansh-singhal/level5/answers.md @@ -0,0 +1,341 @@ +# Level 5 – Graph Thinking + +# Q1 – Graph Schema Design + +## Node Labels + +| Node Label | Description | Example Properties | +|---|---|---| +| Worker | Factory workers/operators | worker_id, name, role | +| Certification | Worker certifications/skills | certification_name | +| Project | Factory construction projects | project_id, project_name | +| Product | Manufactured product types | product_type, quantity | +| Station | Production stations | station_code, station_name | +| Week | Weekly production schedule | week_id | +| Capacity | Weekly/station capacity data | total_capacity, total_planned, deficit | + +--- + +## Relationship Types + +| Relationship Type | From → To | Purpose | +|---|---|---| +| HAS_CERTIFICATION | Worker → Certification | Worker skill mapping | +| ASSIGNED_TO | Worker → Project | Worker assigned to project | +| WORKS_AT | Worker → Station | Worker primary station | +| DEPENDS_ON | Project → Station | Project depends on station | +| PRODUCES | Project → Product | Project uses/products | +| RUNS_ON | Product → Station | Product processed at station | +| SCHEDULED_IN | Project → Week | Weekly production schedule | +| HAS_CAPACITY | Week → Capacity | Weekly capacity tracking | +| HAS_CAPACITY | Station → Capacity | Station capacity information | + +--- + +# Q2 – Why Not Just SQL? + +## Problem Statement + +> "Which workers are certified to cover Station 016 (Gjutning) when Per Hansen is unavailable, and which projects would be affected?" + +--- + +## SQL VERSION + +```sql +SELECT + w.name AS replacement_worker, + p.project_name AS affected_project, + s.station_name +FROM workers w + +JOIN stations s + ON w.station_code = s.station_code + +JOIN projects p + ON p.station_code = s.station_code + +WHERE s.station_code = '016' +AND w.name != 'Per Gustafsson'; +``` + +### Explanation + +Uses table joins to find workers connected to Station 016 and the projects dependent on that station. + +--- + +## CYPHER VERSION + +```cypher +MATCH (per:Worker {name:"Per Gustafsson"}) + +MATCH (replacement:Worker)-[:WORKS_AT]->(s:Station { + station_code:"016" +}) + +MATCH (p:Project)-[:DEPENDS_ON]->(s) + +WHERE replacement <> per + +RETURN +replacement.name AS replacement_worker, +p.project_name AS affected_project, +s.station_name AS station +``` + +### Explanation + +Traverses graph relationships between Worker, Station, and Project nodes to identify replacement workers and affected projects for Station 016. + +--- + +## Why Graph Makes This Easier? + +The graph query directly follows operational relationships between workers, certifications, stations, and projects without requiring multiple table joins. In SQL, dependency analysis becomes harder to manage as additional workforce, station, and scheduling conditions are added. The graph structure also makes operational impact easier to visualize. + +--- + +# Q3 — Spot the Bottleneck + +## 1. Main Bottleneck Areas + +From the capacity data: + +- Week 1 deficit: `-132 hours` +- Week 2 deficit: `-125 hours` + +### Main overload contributors + +| Station | Issue | +|---|---| +| 011 – FS IQB | Extremely high actual hours across multiple projects | +| 014 – Svets o montage | Frequent overruns above planned hours | +| 016 – Gjutning | Only one primary worker and repeated over-capacity usage | + +### Projects contributing most + +- P05 – Sjukhus Linköping +- P03 – Lagerhall Jönköping + +Stations where `actual_hours > planned_hours` by more than 10% were identified as bottlenecks. + +--- + +## 2. Cypher Query + +```cypher +MATCH (p:Project)-[r:RUNS_ON]->(s:Station) + +WHERE r.actual_hours > r.planned_hours * 1.10 + +RETURN s.station_name AS station, + +collect({ + project: p.project_name, + planned: r.planned_hours, + actual: r.actual_hours +}) AS overruns, + +count(*) AS total_overruns + +ORDER BY total_overruns DESC +``` + +### Explanation + +This query: + +- checks where actual hours exceed planned hours by more than 10%, +- groups overloaded projects by station, +- and identifies stations causing repeated production bottlenecks. + +--- + +## 3. Bottleneck Modeling + +### Recommended Approach + +Use a relationship property: + +```text +PROCESSED_AT { + variance_pct, + alert: true +} +``` + +### Why? + +The bottleneck is tied to a specific production event, not a completely separate entity. Using relationship properties keeps the overload information directly connected to the station-processing activity and makes bottleneck detection easier during graph traversal. + +--- + +# Q4 — Vector + Graph Hybrid + +## 1. What Should Be Embedded? + +Embed project descriptions containing: + +- project descriptions +- product specifications +- delivery timelines +- station capabilities +- worker skills/certifications +- historical project notes + +### Example embedded project text + +```text +"450 meters of IQB beams for hospital extension in Linköping, tight delivery timeline, high welding workload" +``` + +This allows semantic similarity matching between new and past projects. + +--- + +## 2. Hybrid Query + +```cypher +-- Vector similarity + graph filtering -- + +MATCH (p:Project) + +WHERE vector.similarity( +p.embedding, +$new_project_embedding +) > 0.85 + +MATCH (p)-[r:RUNS_ON]->(s:Station) + +WHERE r.actual_hours <= r.planned_hours * 1.05 + +RETURN +p.project_name AS similar_project, + +collect(DISTINCT s.station_name) AS stations_used, + +avg( +(r.actual_hours-r.planned_hours) +/r.planned_hours +) AS variance + +ORDER BY variance ASC +``` + +### Explanation + +The vector search finds semantically similar past projects. + +The graph query verifies: + +- same operational stations, +- and low production variance. + +This combines semantic similarity with operational reliability. + +--- + +## 3. Why Better Than Product Filtering? + +Vector search understands semantic similarity, not just exact product matches. Two projects may use different products but still share similar production complexity, timelines, station usage, or workforce requirements. + +Combining vector search with graph traversal makes it possible to find projects that are both operationally similar and historically efficient. + +--- + +# Q5 — Level 6 Blueprint + +## 1. Node Labels and CSV Mapping + +| CSV File | Node Label | Columns Mapped | +|---|---|---| +| factory_production.csv | Project | project_id, project_name | +| factory_production.csv | Product | product_type, quantity | +| factory_production.csv | Station | station_code, station_name | +| factory_capacity.csv | Week | week | +| factory_capacity.csv | Capacity | total_capacity, total_planned, deficit | +| factory_workers.csv | Worker | worker_id, name, role, type | +| factory_workers.csv | Certification | certifications | + +--- + +## 2. Relationship Types and What Creates Them + +| Relationship | Created From | +|---|---| +| WORKS_AT | worker.primary_station = station.station_code | +| HAS_CERTIFICATION | worker certification data | +| ASSIGNED_TO | worker-project assignment | +| PRODUCES | project product mapping | +| RUNS_ON | product processed at station | +| SCHEDULED_IN | production week | +| DEPENDS_ON | project uses station | +| HAS_CAPACITY | week-capacity mapping | + +--- + +## 3. Streamlit Dashboard Panels + +| Dashboard Panel | Purpose | +|---|---| +| Project Timeline Heatmap | visualize weekly project workload | +| Station Load Bar Chart | compare planned vs actual hours | +| Worker Coverage Matrix | identify backup workers for stations | +| Bottleneck Alert Dashboard | show overloaded stations/projects | +| Capacity Deficit Trend | track weekly overload patterns | + +--- + +## 4. Cypher Queries Powering Each Panel + +### Project Timeline Heatmap + +```cypher +MATCH (p:Project)-[:SCHEDULED_IN]->(w:Week) + +RETURN +p.project_name, +w.week_id +``` + +--- + +### Station Load Bar Chart + +```cypher +MATCH (p:Project)-[r:RUNS_ON]->(s:Station) + +RETURN +s.station_name, +sum(r.planned_hours) AS planned, +sum(r.actual_hours) AS actual +``` + +--- + +### Worker Coverage Matrix + +```cypher +MATCH (w:Worker)-[:WORKS_AT]->(s:Station) + +RETURN +s.station_name, +collect(w.name) AS workers +``` + +--- + +### Bottleneck Alert Dashboard + +```cypher +MATCH (p:Project)-[r:RUNS_ON]->(s:Station) + +WHERE r.actual_hours > r.planned_hours * 1.10 + +RETURN +s.station_name, +p.project_name, +r.actual_hours, +r.planned_hours +``` \ No newline at end of file diff --git a/submissions/vansh-singhal/level5/schema.png b/submissions/vansh-singhal/level5/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4924d890b9c465ed1562f7f9e736d5225bb78c GIT binary patch literal 51616 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 Date: Wed, 13 May 2026 12:39:23 +0530 Subject: [PATCH 7/9] Level-6: Vansh Singhal --- submissions/vansh-singhal/level6/.env.example | 3 + .../vansh-singhal/level6/DEPLOYMENT_URL.txt | 1 + submissions/vansh-singhal/level6/README.md | 162 ++++++ submissions/vansh-singhal/level6/app.py | 510 ++++++++++++++++++ .../level6/dashboard_overview.png | Bin 0 -> 204086 bytes .../vansh-singhal/level6/factory_capacity.csv | 9 + .../level6/factory_production.csv | 69 +++ .../vansh-singhal/level6/factory_workers.csv | 15 + .../vansh-singhal/level6/requirements.txt | 5 + .../vansh-singhal/level6/seed_graph.py | 326 +++++++++++ 10 files changed, 1100 insertions(+) create mode 100644 submissions/vansh-singhal/level6/.env.example create mode 100644 submissions/vansh-singhal/level6/DEPLOYMENT_URL.txt create mode 100644 submissions/vansh-singhal/level6/README.md create mode 100644 submissions/vansh-singhal/level6/app.py create mode 100644 submissions/vansh-singhal/level6/dashboard_overview.png create mode 100644 submissions/vansh-singhal/level6/factory_capacity.csv create mode 100644 submissions/vansh-singhal/level6/factory_production.csv create mode 100644 submissions/vansh-singhal/level6/factory_workers.csv create mode 100644 submissions/vansh-singhal/level6/requirements.txt create mode 100644 submissions/vansh-singhal/level6/seed_graph.py diff --git a/submissions/vansh-singhal/level6/.env.example b/submissions/vansh-singhal/level6/.env.example new file mode 100644 index 000000000..8e1ada7df --- /dev/null +++ b/submissions/vansh-singhal/level6/.env.example @@ -0,0 +1,3 @@ +NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io +NEO4J_USER=your-neo4j-username +NEO4J_PASSWORD=your-neo4j-password \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/DEPLOYMENT_URL.txt b/submissions/vansh-singhal/level6/DEPLOYMENT_URL.txt new file mode 100644 index 000000000..22e250eb0 --- /dev/null +++ b/submissions/vansh-singhal/level6/DEPLOYMENT_URL.txt @@ -0,0 +1 @@ +deployment_url = https://yxkujty9fukjuacyugndqd.streamlit.app/ \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/README.md b/submissions/vansh-singhal/level6/README.md new file mode 100644 index 000000000..48d026501 --- /dev/null +++ b/submissions/vansh-singhal/level6/README.md @@ -0,0 +1,162 @@ +# Factory Knowledge Graph Dashboard + +A Neo4j knowledge graph + Streamlit dashboard built for a Swedish steel fabrication company managing **8 construction projects** across **10 production stations**. + +--- + +## Graph Schema + +### Node Labels (7) + +| Label | Description | Key Properties | +|---|---|---| +| `Project` | Construction projects | `project_id`, `project_name`, `project_number` | +| `Station` | Production stations in the factory | `station_code`, `station_name` | +| `Product` | Product types manufactured | `product_type`, `unit` | +| `Worker` | Factory workers and inspectors | `worker_id`, `name`, `role`, `type`, `hours_per_week` | +| `Certification` | Skills/certifications a worker holds | `name` | +| `Week` | Weekly schedule with capacity data | `week_id`, `total_capacity`, `total_planned`, `deficit` | +| `Etapp` | Production phase (ET1 or ET2) | `etapp_id` | + +--- + +### Relationship Types (8) + +| Relationship | Direction | Description | Properties | +|---|---|---|---| +| `SCHEDULED_AT` | `Project → Station` | Project is scheduled at a station for a specific week | `week`, `planned_hours`, `actual_hours`, `completed_units`, `etapp`, `bop` | +| `PRODUCES` | `Project → Product` | Project manufactures a product type | `quantity`, `unit_factor`, `unit` | +| `PROCESSED_AT` | `Product → Station` | Product type is processed at a station | — | +| `WORKS_AT` | `Worker → Station` | Worker's primary assigned station | — | +| `CAN_COVER` | `Worker → Station` | Worker is certified to cover this station | — | +| `HAS_CERTIFICATION` | `Worker → Certification` | Worker holds this certification/skill | — | +| `BELONGS_TO` | `Project → Etapp` | Project belongs to a production phase | — | +| `SCHEDULED_IN` | `Project → Week` | Project has work scheduled in this week | — | + +--- + +### Graph Stats + +| Metric | Count | +|---|---| +| Total Nodes | 72 | +| Total Relationships | 219 | +| Node Labels | 7 | +| Relationship Types | 8 | + +--- + +## Running Locally (after cloning) + +### Prerequisites +- Python 3.10+ +- A running Neo4j instance (Aura Free, Desktop, or Docker) +- The 3 CSV data files in the project folder + +### Step 1 — Clone and set up environment + +```bash +git clone https://github.com//.git +cd level6 + +python -m venv venv + +# Mac/Linux: +source venv/bin/activate + +# Windows: +venv\Scripts\activate + +pip install -r requirements.txt +``` + +### Step 2 — Add your Neo4j credentials + +```bash +cp .env.example .env +``` + +Open `.env` and fill in your details: + +``` +NEO4J_URI=neo4j+ssc://your-host:7687 +NEO4J_USER=neo4j +NEO4J_PASSWORD=your-password-here +``` + +> **URI scheme guide:** +> - **Aura Free** (cloud): `neo4j+s://xxxxxxxx.databases.neo4j.io` +> - **Self-hosted / self-signed cert**: `neo4j+ssc://your-ip:7687` +> - **Neo4j Desktop** (local): `bolt://localhost:7687` + +### Step 3 — Place the CSV files + +Make sure these 3 files are in the same folder as `seed_graph.py`: + +``` +factory_production.csv +factory_workers.csv +factory_capacity.csv +``` + +### Step 4 — Seed the graph + +```bash +python seed_graph.py +``` + +This creates all nodes and relationships in Neo4j. It is fully **idempotent** — safe to run multiple times without creating duplicates. Expected output: + +``` +✓ Constraints created +✓ 8 Project nodes +✓ 10 Station nodes +✓ 7 Product nodes +✓ 2 Etapp nodes +✓ 8 Week nodes +✓ 14 Worker nodes + certifications + WORKS_AT + CAN_COVER + + SCHEDULED_AT: 68 + PRODUCES: 32 + PROCESSED_AT: 16 + ... + +── Graph Summary ────────────────────── + Nodes: 72 + Relationships: 219 + Node labels (7): [...] + Rel types (8): [...] +─────────────────────────────────────── +✅ Done — graph is ready! +``` + +### Step 5 — Run the dashboard + +```bash +streamlit run app.py +``` + +Open [http://localhost:8501](http://localhost:8501) in your browser. + +Navigate using the **sidebar** to explore all 5 pages: + +| Page | What it shows | +|---|---| +| 📊 Project Overview | Planned vs actual hours, variance %, products per project | +| 🏭 Station Load | Interactive bar chart + heatmap; over-plan stations highlighted red | +| 📅 Capacity Tracker | 8-week workforce capacity vs demand; deficit weeks in red | +| 👷 Worker Coverage | Who covers which station; single-point-of-failure alerts | +| ✅ Self-Test | Automated Neo4j checks with green/red scoring | + +--- + +## Common Issues + +**SSL certificate error on `seed_graph.py`** +Change your URI scheme in `.env` from `neo4j+s://` to `neo4j+ssc://` to skip certificate verification for self-signed certs. + +**`ModuleNotFoundError`** +Make sure your virtual environment is activated before running any commands. + +**`KeyError` on secrets in `app.py`** +When running locally, the app falls back to `.env`. Make sure `.env` exists and is filled in correctly. \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/app.py b/submissions/vansh-singhal/level6/app.py new file mode 100644 index 000000000..91aa24cc2 --- /dev/null +++ b/submissions/vansh-singhal/level6/app.py @@ -0,0 +1,510 @@ +""" +app.py — Factory Knowledge Graph Dashboard +Streamlit app powered by Neo4j. + +Pages: + 1. Project Overview — totals, variance, products per project + 2. Station Load — planned vs actual hours per station/week (interactive) + 3. Capacity Tracker — weekly workforce capacity vs demand + 4. Worker Coverage — who covers which station; single-point-of-failure alert + 5. Self-Test — automated scoring checklist +""" + +import os +import streamlit as st +import pandas as pd +import plotly.express as px +import plotly.graph_objects as go +from neo4j import GraphDatabase + +# ── Connection ──────────────────────────────────────────────────────────────── + +@st.cache_resource +def init_driver(): + try: + uri = st.secrets["NEO4J_URI"] + user = st.secrets["NEO4J_USER"] + pw = st.secrets["NEO4J_PASSWORD"] + except Exception: + from dotenv import load_dotenv + load_dotenv() + uri = os.getenv("NEO4J_URI") + user = os.getenv("NEO4J_USER") + pw = os.getenv("NEO4J_PASSWORD") + return GraphDatabase.driver(uri, auth=(user, pw)) + + +def qry(driver, cypher: str, **params) -> list[dict]: + with driver.session() as s: + return [dict(r) for r in s.run(cypher, **params)] + + +# ── Page 1: Project Overview ────────────────────────────────────────────────── + +def page_project_overview(driver): + st.title("📊 Project Overview") + st.caption("Aggregated planned vs actual hours across all 8 projects.") + + rows = qry(driver, """ + MATCH (p:Project)-[r:SCHEDULED_AT]->(s:Station) + OPTIONAL MATCH (p)-[:PRODUCES]->(prod:Product) + RETURN p.project_id AS project_id, + p.project_name AS project_name, + sum(r.planned_hours) AS total_planned, + sum(r.actual_hours) AS total_actual, + collect(DISTINCT prod.product_type) AS products + ORDER BY p.project_id + """) + + df = pd.DataFrame(rows) + df["variance_pct"] = ( + (df["total_actual"] - df["total_planned"]) / df["total_planned"] * 100 + ).round(1) + df["products_str"] = df["products"].apply(lambda x: ", ".join(sorted(x))) + df["status"] = df["variance_pct"].apply( + lambda v: "🔴 Over" if v > 10 else ("🟡 Near" if v > 0 else "🟢 On track") + ) + + # KPI cards + c1, c2, c3, c4 = st.columns(4) + c1.metric("Projects", len(df)) + c2.metric("Total Planned hrs", f"{df['total_planned'].sum():.0f}") + c3.metric("Total Actual hrs", f"{df['total_actual'].sum():.0f}") + over_budget = (df["variance_pct"] > 10).sum() + c4.metric("Projects > 10% over", int(over_budget), + delta=f"{over_budget}", delta_color="inverse") + + st.divider() + + # Summary table + display = df[["project_id", "project_name", "total_planned", + "total_actual", "variance_pct", "status", "products_str"]].copy() + display.columns = ["ID", "Project", "Planned hrs", "Actual hrs", + "Variance %", "Status", "Products"] + st.dataframe(display, use_container_width=True, hide_index=True) + + st.divider() + + # Bar chart + fig = go.Figure() + fig.add_bar(name="Planned", x=df["project_name"], y=df["total_planned"], + marker_color="#4C9BE8") + fig.add_bar(name="Actual", x=df["project_name"], y=df["total_actual"], + marker_color=df["variance_pct"].apply( + lambda v: "#E85C4C" if v > 10 else "#5CB85C")) + fig.update_layout(barmode="group", title="Planned vs Actual Hours by Project", + xaxis_title="Project", yaxis_title="Hours", + legend=dict(orientation="h"), + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig, use_container_width=True) + + # Variance gauge strip + fig2 = px.bar(df, x="project_name", y="variance_pct", + color="variance_pct", + color_continuous_scale=["#5CB85C", "#F0AD4E", "#E85C4C"], + labels={"project_name": "Project", "variance_pct": "Variance %"}, + title="Variance % per Project (positive = over plan)") + fig2.add_hline(y=10, line_dash="dash", line_color="red", + annotation_text="10% threshold") + fig2.update_layout(coloraxis_showscale=False, + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig2, use_container_width=True) + + +# ── Page 2: Station Load ────────────────────────────────────────────────────── + +def page_station_load(driver): + st.title("🏭 Station Load") + st.caption("Hours per station across weeks. Red bars = actual exceeded plan.") + + rows = qry(driver, """ + MATCH (p:Project)-[r:SCHEDULED_AT]->(s:Station) + RETURN s.station_name AS station, + r.week AS week, + sum(r.planned_hours) AS planned_hours, + sum(r.actual_hours) AS actual_hours + ORDER BY station, week + """) + df = pd.DataFrame(rows) + df["over_plan"] = df["actual_hours"] > df["planned_hours"] + df["variance_pct"] = ( + (df["actual_hours"] - df["planned_hours"]) / df["planned_hours"] * 100 + ).round(1) + + # Filter controls + col1, col2 = st.columns(2) + stations = sorted(df["station"].unique()) + sel_stations = col1.multiselect("Filter stations", stations, default=stations) + weeks = sorted(df["week"].unique()) + sel_weeks = col2.multiselect("Filter weeks", weeks, default=weeks) + + mask = df["station"].isin(sel_stations) & df["week"].isin(sel_weeks) + dff = df[mask] + + # Grouped bar: planned vs actual + fig = go.Figure() + for week in sorted(dff["week"].unique()): + wdf = dff[dff["week"] == week] + fig.add_bar(name=f"Planned {week}", x=wdf["station"], y=wdf["planned_hours"], + opacity=0.7) + fig.add_bar(name=f"Actual {week}", x=wdf["station"], y=wdf["actual_hours"], + marker_color=wdf["over_plan"].apply( + lambda v: "#E85C4C" if v else "#5CB85C"), + opacity=0.9) + fig.update_layout(barmode="group", + title="Station Load: Planned vs Actual Hours per Week", + xaxis_title="Station", yaxis_title="Hours", + legend=dict(orientation="h", y=-0.25), + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig, use_container_width=True) + + # Heatmap: variance % by station × week + pivot = dff.pivot_table(index="station", columns="week", + values="variance_pct", aggfunc="mean") + fig2 = px.imshow(pivot, text_auto=".1f", + color_continuous_scale=["#5CB85C", "#F0AD4E", "#E85C4C"], + zmin=-20, zmax=20, + title="Variance % Heatmap (red = over plan)", + labels=dict(x="Week", y="Station", color="Var %")) + fig2.update_layout(coloraxis_colorbar=dict(title="Var %")) + st.plotly_chart(fig2, use_container_width=True) + + # Detail table + with st.expander("📋 Raw data table"): + st.dataframe( + dff[["station", "week", "planned_hours", "actual_hours", "variance_pct"]], + use_container_width=True, hide_index=True, + ) + + # Overrun callouts + overruns = dff[dff["over_plan"]] + if not overruns.empty: + st.warning(f"⚠️ {len(overruns)} station-week combinations exceeded planned hours:") + for _, r in overruns.iterrows(): + st.write( + f" • **{r['station']}** / {r['week']}: " + f"planned {r['planned_hours']:.0f}h → actual {r['actual_hours']:.0f}h " + f"({r['variance_pct']:+.1f}%)" + ) + + +# ── Page 3: Capacity Tracker ────────────────────────────────────────────────── + +def page_capacity_tracker(driver): + st.title("📅 Capacity Tracker") + st.caption("8-week workforce capacity vs total planned demand. Red = deficit week.") + + rows = qry(driver, """ + MATCH (w:Week) + RETURN w.week_id AS week, + w.own_hours AS own_hours, + w.hired_hours AS hired_hours, + w.overtime_hours AS overtime_hours, + w.total_capacity AS total_capacity, + w.total_planned AS total_planned, + w.deficit AS deficit + ORDER BY w.week_id + """) + df = pd.DataFrame(rows) + df["deficit_flag"] = df["deficit"] < 0 + + # KPI strip + total_deficit = df[df["deficit"] < 0]["deficit"].sum() + c1, c2, c3 = st.columns(3) + c1.metric("Weeks in Deficit", int(df["deficit_flag"].sum())) + c2.metric("Total Deficit Hours", f"{total_deficit:+.0f}") + c3.metric("Avg Capacity Utilisation", + f"{(df['total_planned'] / df['total_capacity'] * 100).mean():.1f}%") + + st.divider() + + # Stacked capacity vs demand + fig = go.Figure() + fig.add_bar(name="Own Hours", x=df["week"], y=df["own_hours"], + marker_color="#4C9BE8") + fig.add_bar(name="Hired Hours", x=df["week"], y=df["hired_hours"], + marker_color="#7EC8E3") + fig.add_bar(name="Overtime Hours", x=df["week"], y=df["overtime_hours"], + marker_color="#F0AD4E") + fig.add_scatter(name="Total Planned Demand", x=df["week"], y=df["total_planned"], + mode="lines+markers", + line=dict(color="#E85C4C", width=3, dash="dash"), + marker=dict(size=10)) + fig.update_layout(barmode="stack", + title="Weekly Capacity Breakdown vs Planned Demand", + xaxis_title="Week", yaxis_title="Hours", + legend=dict(orientation="h"), + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig, use_container_width=True) + + # Deficit bar chart (colour-coded) + fig2 = px.bar(df, x="week", y="deficit", + color="deficit", + color_continuous_scale=["#E85C4C", "#F0AD4E", "#5CB85C"], + title="Weekly Deficit / Surplus (red = shortfall)", + labels={"week": "Week", "deficit": "Deficit (hrs)"}) + fig2.add_hline(y=0, line_color="black", line_width=1) + fig2.update_layout(coloraxis_showscale=False, + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig2, use_container_width=True) + + # Table with conditional row colour + st.subheader("Capacity Detail Table") + styled = df[["week", "own_hours", "hired_hours", "overtime_hours", + "total_capacity", "total_planned", "deficit"]].copy() + styled.columns = ["Week", "Own hrs", "Hired hrs", "Overtime", + "Total Cap", "Total Plan", "Deficit"] + + def highlight_deficit(row): + if row["Deficit"] < 0: + return ["background-color: #ffd6d6"] * len(row) + return [""] * len(row) + + st.dataframe(styled.style.apply(highlight_deficit, axis=1), + use_container_width=True, hide_index=True) + + +# ── Page 4: Worker Coverage ─────────────────────────────────────────────────── + +def page_worker_coverage(driver): + st.title("👷 Worker Coverage") + st.caption("Who can cover which station. 🔴 = only one certified worker (SPOF).") + + # Worker → stations matrix + rows = qry(driver, """ + MATCH (w:Worker)-[:CAN_COVER]->(s:Station) + RETURN w.worker_id AS worker_id, + w.name AS worker, + w.role AS role, + w.type AS type, + collect(s.station_name) AS covered_stations + ORDER BY worker + """) + df_workers = pd.DataFrame(rows) + + # Station → worker count (for SPOF detection) + spof_rows = qry(driver, """ + MATCH (s:Station) + OPTIONAL MATCH (w:Worker)-[:CAN_COVER]->(s) + WITH s, count(w) AS worker_count + RETURN s.station_code AS station_code, + s.station_name AS station, + worker_count + ORDER BY worker_count + """) + df_spof = pd.DataFrame(spof_rows) + spof_stations = set(df_spof[df_spof["worker_count"] <= 1]["station"].tolist()) + + # Build pivot for heatmap + all_stations = sorted( + {s for row in df_workers["covered_stations"] for s in row} + ) + matrix_data = [] + for _, row in df_workers.iterrows(): + r = {"Worker": row["worker"]} + for st_name in all_stations: + r[st_name] = 1 if st_name in row["covered_stations"] else 0 + matrix_data.append(r) + df_matrix = pd.DataFrame(matrix_data).set_index("Worker") + + # Heatmap + col_labels = ["🔴 " + s if s in spof_stations else s for s in df_matrix.columns] + fig = px.imshow( + df_matrix.values, + x=col_labels, y=df_matrix.index.tolist(), + color_continuous_scale=["#F0F0F0", "#4C9BE8"], + zmin=0, zmax=1, + title="Worker Coverage Matrix (🔴 column = single-point-of-failure station)", + labels=dict(x="Station", y="Worker", color="Covers"), + ) + fig.update_coloraxes(showscale=False) + fig.update_layout(xaxis_tickangle=-30) + st.plotly_chart(fig, use_container_width=True) + + # SPOF alert + if spof_stations: + st.error( + f"🚨 Single-Point-of-Failure Stations detected: **{', '.join(sorted(spof_stations))}**\n\n" + "These stations have only 1 certified worker — any absence causes full stoppage." + ) + + # Station coverage count bar + fig2 = px.bar( + df_spof.sort_values("worker_count"), + x="station", y="worker_count", + color="worker_count", + color_continuous_scale=["#E85C4C", "#F0AD4E", "#5CB85C"], + title="Number of Workers Who Can Cover Each Station", + labels={"station": "Station", "worker_count": "Eligible Workers"}, + ) + fig2.add_hline(y=1, line_dash="dash", line_color="red", + annotation_text="SPOF threshold") + fig2.update_layout(coloraxis_showscale=False, + plot_bgcolor="rgba(0,0,0,0)") + st.plotly_chart(fig2, use_container_width=True) + + # Full worker table + with st.expander("📋 Worker detail table"): + display = df_workers.copy() + display["covered_stations"] = display["covered_stations"].apply( + lambda x: ", ".join(sorted(x)) + ) + display["spof_flag"] = display["covered_stations"].apply( + lambda x: "⚠️" if any(s in x for s in spof_stations) else "" + ) + display.columns = ["ID", "Name", "Role", "Type", "Stations Covered", "SPOF?"] + st.dataframe(display, use_container_width=True, hide_index=True) + + +# ── Page 5: Self-Test ───────────────────────────────────────────────────────── + +def run_self_test(driver) -> list[tuple[str, bool, int]]: + checks: list[tuple[str, bool, int]] = [] + + # Check 1: Connection alive + try: + with driver.session() as s: + s.run("RETURN 1") + checks.append(("Neo4j connected", True, 3)) + except Exception as e: + checks.append((f"Neo4j connection failed: {e}", False, 3)) + return checks # Can't continue + + with driver.session() as s: + # Check 2: Node count ≥ 50 + c = s.run("MATCH (n) RETURN count(n) AS c").single()["c"] + checks.append((f"{c} nodes (min: 50)", c >= 50, 3)) + + # Check 3: Relationship count ≥ 100 + c = s.run("MATCH ()-[r]->() RETURN count(r) AS c").single()["c"] + checks.append((f"{c} relationships (min: 100)", c >= 100, 3)) + + # Check 4: ≥ 6 distinct node labels + c = s.run("CALL db.labels() YIELD label RETURN count(label) AS c").single()["c"] + checks.append((f"{c} node labels (min: 6)", c >= 6, 3)) + + # Check 5: ≥ 8 distinct relationship types + c = s.run( + "CALL db.relationshipTypes() YIELD relationshipType " + "RETURN count(relationshipType) AS c" + ).single()["c"] + checks.append((f"{c} relationship types (min: 8)", c >= 8, 3)) + + # Check 6: Variance query returns results + result = s.run(""" + MATCH (p:Project)-[r:SCHEDULED_AT]->(s:Station) + WHERE r.actual_hours > r.planned_hours * 1.1 + RETURN p.project_name AS project, + s.station_name AS station, + r.planned_hours AS planned, + r.actual_hours AS actual + LIMIT 10 + """) + rows = [dict(r) for r in result] + checks.append((f"Variance query: {len(rows)} results (need > 0)", len(rows) > 0, 5)) + + return checks + + +def page_self_test(driver): + st.title("✅ Self-Test") + st.caption("Automated checks — runs against your live Neo4j instance.") + + if st.button("▶️ Run Self-Test", type="primary", use_container_width=True): + with st.spinner("Running checks…"): + checks = run_self_test(driver) + + total_earned = 0 + total_possible = sum(pts for _, _, pts in checks) + + st.divider() + for label, passed, pts in checks: + icon = "✅" if passed else "❌" + earned = pts if passed else 0 + total_earned += earned + col1, col2 = st.columns([5, 1]) + col1.markdown(f"{icon} {label}") + col2.markdown(f"**{earned}/{pts}**") + + st.divider() + colour = "green" if total_earned == total_possible else ( + "orange" if total_earned >= total_possible * 0.6 else "red" + ) + st.markdown( + f"

SELF-TEST SCORE: {total_earned} / {total_possible}

", + unsafe_allow_html=True, + ) + + # Show variance detail rows + if checks[-1][1]: # variance check passed + st.subheader("Over-plan details (>10% variance)") + rows = qry(driver, """ + MATCH (p:Project)-[r:SCHEDULED_AT]->(s:Station) + WHERE r.actual_hours > r.planned_hours * 1.1 + RETURN p.project_name AS project, + s.station_name AS station, + r.week AS week, + r.planned_hours AS planned, + r.actual_hours AS actual, + round((r.actual_hours - r.planned_hours) + / r.planned_hours * 100, 1) AS variance_pct + ORDER BY variance_pct DESC + """) + if rows: + st.dataframe(pd.DataFrame(rows), use_container_width=True, hide_index=True) + else: + st.info("Click **Run Self-Test** to start the automated checks.") + + +# ── Main ────────────────────────────────────────────────────────────────────── + +def main(): + st.set_page_config( + page_title="Factory Dashboard", + page_icon="🏗️", + layout="wide", + initial_sidebar_state="expanded", + ) + + # Sidebar + st.sidebar.title("🏗️ Factory Dashboard") + st.sidebar.caption("Swedish Steel Fabrication Co.") + st.sidebar.divider() + + page = st.sidebar.radio( + "Navigate", + [ + "📊 Project Overview", + "🏭 Station Load", + "📅 Capacity Tracker", + "👷 Worker Coverage", + "✅ Self-Test", + ], + ) + + st.sidebar.divider() + st.sidebar.caption("8 projects · 10 stations · 14 workers · 8 weeks") + + # Init driver + try: + driver = init_driver() + except Exception as e: + st.error(f"❌ Could not connect to Neo4j: {e}") + st.info("Set NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD in `.env` or Streamlit secrets.") + return + + # Route + if page == "📊 Project Overview": + page_project_overview(driver) + elif page == "🏭 Station Load": + page_station_load(driver) + elif page == "📅 Capacity Tracker": + page_capacity_tracker(driver) + elif page == "👷 Worker Coverage": + page_worker_coverage(driver) + elif page == "✅ Self-Test": + page_self_test(driver) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/dashboard_overview.png b/submissions/vansh-singhal/level6/dashboard_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..6d353c1e25fa07de88d4cd517a9284b9050bf193 GIT binary patch literal 204086 zcmeFY1y>y3vj0s&fZzlR5+otGyL)hVcXxLS5Zr>hyAKY*T?TiDV1vWpGQczE{_Z{J zJn!MpTFtE9)3bVackQZgeX2S_QC6h$b#cfLBRJ?jqNAji3k(dV>%X>lo8}~*Ffeb$Qa^-M zJ@rpF+_JvhKK6j8#;bDMZO(Vj89saz4&ueOl(9lC){JRRnkAvfL82Fvb}DV<{q_CV z_koR`U`O)l zA3-`6hUTms^x*~Cco~7k8Ja(j5B2EUtA++^XgN z_bJ0omOh~}w1X2;v4{gfM2L}^xAN$)Npx9wt1Nn}e6)08nP z#5eTtp^ZVi)FI|Lugb4j!RP3Fa92`I-s|8~HsLD^m3Lc_&(Q8XT>eIRW}FuvpDre@ zjFM5V(&>SoY!^5(8cU6fRKc18sbb@^r}R8o(NmJi+zQXSN&EW$n^tN{R)Uv}>F!^a z8B0rKK?Alv4tAIMpK2zG!tLKM%_RkVhnpy z@nTzxR^PrVqa#F?wB&2~o(rG|$oDX76GuZEjFPbXYS>0*A!sbC>T0_@GsEQgxBti4 zLbETCcEp+H1t}7)^{~Jk6Ci(=%?-Dx zBPfN{){^Oz&BlIJ7tHp7z2n!a8!*u7Opv#UvSMSj`|TQ|w)=I}KaA5LAf3ebVrN7v zjwxA-GJDM6%^9J)?J+e8+ce*CAYmXbgVdd&>$F|z`7~z9V1F}UqkqL>@+&tpahTj0 z(jtjnWW~0W92qNRRMx31CLdBpfrLEnkPx{5d3IJ7opb%HlygX`F*mLjl_nZ`IsTC; z$TTq>KMd$}nlkY33;KmI+)PHG8@uPu&22QKC_a(a&r5s!c)d$&$u>(y3ENXo%FUg= zoc3Z-NF1p?A!Y9L$xpieo_Fs)qL8$h+j)@;m?As#JCV!j&MAw@g{|0Xf(zSWPj!n6 z_3lGeG~ZQ}OW&QAkrZ)aT;_P~+XJt@|D%$9$ITBU<1YgQ!}g0+|237JOQNQ2XKCdx z5l;3`cSOJDY>g!Y6B8--ca#c)|CE=HvT<@4en1hA!HW=G_(sW1XKg~C+X;DpEuhm| zzkj0Dt6jb~yN`3(lw#<1=o!MXZxGX6J(Hjm&q|Gv0@8?2hPCkwu}vElec z5+(UkthnJp<}W(pN~@apgA(gb!`To>YK!AyTk2Iy0KZg}f~eCV^GjAD7ifGXz5(&y z4ghL-aIv!3EeQUi#c~>mhctd+xjmCZKh6V;$R@<%ypFXs9~J|vT73!ihZ$E!8skN7kttk0;VSp{@>e8Fq_gXL7q4}y0_=1?_5!$wtRjA52C*V_r>~qM0zE@ z9l;J=uRZ4)4pvNQwFopaa?<(d`q;OJ;=lA1pYeXi7L!neWgC_SmA1Twg#bmLZFe)g zI$q~<@%0jZyq7c5f%$nX3?v-NJ?~5np%tmEvzjRFxI5*~V&)6{klAgcEGQp7Wwvew zy1L19Xt0*Ed|9e~j9$upMgYm<{}3Lqv9x-@<2<2zeK~cZ(`gHDI!O&Z(7HprUk9s% z7FiEy=4aAWPxN!|-{dlTJbvTo1k+HOfgDFs15E$UPOSj^nJ)xyY@SMnKFurRv7G1< z`<%(C*Xm*N4C8hW!)^&i&~cWf8J&>+$JPflNl6X3Xg$n*WgRs&o4IY&H z`|VWYi#_4R&MlLcsz_{v+#HnB?YSSsLiBhoYs<-KDPo0}N1ED3=GT+(yG8~tQl}37 z)<;cI(ocr2t`1Z(cJvVEM!u)|85%J=!<~VdJKTA{F*rJm`gQc|{oHp$Yt2XzTaj;~ zVYj8u9_0HvEq@2)6`NGJY`=JHfNjjDzK9hdtIG6F)4PTx7Oc~01Mjzi1mn@*7bi;^ zG+EWbzLH~04nhhV2fo+$$rVw%3?09^H{7v`Lq=P%VfiilmDzMhN27C@Vjl*+H`nM$ zv@b;kiW@(DoD{U+i(n=Q{kxZNp(m+Z9~s)4lg-<9{TCgN)9SmGmD6|6)wC8vW*oVE znEHcAqn+|nm)WA%Ry+7>1OF5_T8?d%FGkO`!ZN0PznEo7)T8yP&93W1I^Mk0mLBr# zF8`lx_4YS)EhsgW{u^Zzfm@npi!sTpd4ax9Z@`Xw=?da zv~~rGTlZr4-)9o03Dl7=N0KKUMV}_<36^v zL9dJ;3`t-iw7kO9+LpS+Y5WD@c&>N0x?|Y^-EpAYfRF{BV{ppZL1!tk$@!#rv%{K{z7_LIoqfi!jpu`b z$K_$-)b)_gg-Wv*dI*+<=?kEDE5DhUlQy3~nN zM!l*(EcjvGD9i7_(^wD5>*XnLZu0rfFDZ<~>zCKH;OEuaq*eaAxC)kqM~p7kX^&2;Of3 zB~HfhSZuMu@`NkY?i_TGBvkfZz;=BBHJ*D&OO9WH&zqMZiGOoo!K}dd@8t0b39_<) zZ1!uxqRFwp58N(X_mK@FF4}DBN#GHF50@=02Y{Id+zSHQx3AQpMulN24gPRz?q`Fw zTxGLZ+(u)L?u<`A12$h^7`q|xv>x-!c?Q(>9w^jOcDB0R!E(Gdh!3pzECoqYtnk~7 zyrT@%-;I!%9ten<>hU(+Ev=d~JDn)G2VswRUFl?6j+3m)>A=s9H|Q9rrFGwDdLR6& zvoy6QwgUyE5iB2;BY4(}`~ZW-_cbG8BrIf=zX^#w)53_mN^Lw(UP>Q<3SGl^wQ;Un z_UDf;a#`MYVvw`0;fKTPWZ%n~QV95*lG=uaDT2H^fcg%F7q$02R5SrkKlwRUp0TN& zZ##5%W^?KXguz9nTtQymc80dzvc23G-V-hXoF1(?9#QCIWdmsUZ3N9{AX8eGE7rK& zVJyB+uAye0(^M9{?X{OZu#5mlFrU8nHR`#irvUqzJBkhpnZg%od41=WYGnX+jHd>w zgW%I=e=tbG^QB+Smni@?qMBB#)fS%+!o#7#9E^ZwkyagP=tB{aV@z=?HJm>`3vgl} zNup(|aN0=mISjh>&%)u++;;SK95xHIE6AysESw@nr;G!?(8F5gab82jl3k_S2t7 zvLRs3?!6d=l&e~h;9j_T2tk(T z$??>&+^|XQ8b}7^Oqeab=A;Vh4}?XjU!V3*UGhLYX^ z%>GLgg4KAfd(Fc1$k@39qb3E340N#2-#|+44qLHvNSL)1AF@YJYb?JLhx|~W;b4U? z#Z~B_PoY!5YwD{9AB3D^uef9fQ1Ktq_N56 z_Se1r{l6`uN7I3(6qI=nuCLFhQSlA8k>#3r8E`+%GSb8`KE7-$*O<5rG8rB+mB?id zxGlZ@B=mQNvkxP}2?q}tHmoqoB}QI#&a*#$%yV8e({S3I3K)C0&GKC7 zS`zb5Y?m9+3JV!p%!JLv$V;pO3lidq_2vls3v4~KH0M4?eV$e%)E1Xj#thNo{ysRM zGGA946RM6o`CMh=T{{JYOlc@DVT={TQBQv3XT|xMm#?(7EG{ohG89cb=mpB@wQG3| zaw-fn){s?IBU{7@){EiNNFt?8W!TwJ5IEt9oA=~gdF19|NA0(?7#u4;t*AJmI{x-w za*R{rf~+u%s@G&Vf~3%kQ+_p_!|3Cj1Sr9{k!AYGcvC(Kwf$w!3zp3mS+R>-a*%__ z&EfYAe6rgub<#zUzqVa7C}A9Y9#-O!EL8GXim}% za=2fg;J@FPKo#uzJy&vjaeO*i&n7!3Zj&W0t4~vxMrBRE&)c1s;u*wmx=0*NkB_Oc z&P7ioQ(N5Sk6z6|h?|#A6UcAJ#?kmmQI$>Ny}O5NsFRi`*+k%BEIKWaR`co+9t9}u zE&mQ~aBzN5J35;+MpdrV%!k~7P7|M7r?wS~k4j2jkreL+%hE=qS47F~h9m$}W6KxW zWBnTay!*aZ_kQ=9%TD|&G0v%a8Cf?*u$ztG{*lI(p+b8If7h=D#Wcgfn~*ZxKtcEY*|?y44E^kVnZ53YNF&uIYpnt!%5Y;qrd50CA9?P)3{HfP4N|$ zMZ7ywu76+v$EeygeZ1$Db`FJY{Mfqg-=8C-(CFt5#`X$;wFirWTfG72ZwM`K=OA6j zbL^-6!B1haAwkw!Tvg#$=+d+kw`QvNIW^a1{QaV~=I`x+eQcHGRjX1l1WR>(|7K4Z zBEBwPp!uy|Wp0JI;8a&jWJL*Sa43pc3%N?|AYkZX_w0%$g(r(|WwVdy_I6!=tLN+% zb$v#4cx&xMYhHPRmc89`Q-iSWP;^Oss`Sk-VK~>JSu`Ka5I7FA(?DFH*_MVl+sskzE3z7(IC_ zypU8d(;v>M%=)*G4(n@Y6I-U#_teLcxBg)9a)R%nKeaVewseg6x%KK1{9@I&q@~2$F=Cw=+k_R(ba4 zO|US_8BpP5#B#ZL&azc}5~|~g4a@(;W^C0m+jia}__v~R%6#@W9p+`de=p^_+w)lm z^F6ZlAG_;(#UPr@k%1%n@F4L_7Mbp3FhV43+A)R0naoQJ8Z%J6)SgZ-H@ z|I^+rB{8TGOJVO$5E35}rM?sAsinqgWoJvFTGlIWwe^lmwX)Jy)I!|e6h91uysAog z8dO?bjDrOycl|pnVUb>R=^HI$Vp5VRHr;yxlCv`+{N^yB2H88?wQ-0TkO@2FlZgbY z%Q2gBqUx#+VS0<TLhd{Ww=t>6e%pq-`OeALI28QR_eVF;5iuDc6^d>&HggM zcHAwCjtd-pf4x8tFrO)CI!p;E|Ai2#ChJ>0LHFYORpaH-dQt$y+j0G>?5Z-Doiq@g z7)wUY{M9z6-^`8oJuZ^f5&rk@zgXhry5pWwC{{c5S35SR>!RcOiFU=$++T~xDHAb1 zk9|XLezdZ`Wp*6Ul;=P5TxUqWB7z!g73yaPxPu`I6lAsu zDQ|Cz{H!}k{-*y9YYW^^^711t=6j3SpQgmI&b1L*{PETqFH30*7}jqloU^?{B#8ae z&W_YPCAArkj2#NH?NJ=G@l`vv^J$lPhVC+0J}EVM1q*RzrmT+h)Vh2;sh;eO{C`-} z`vl;=54hUq+8ZCkQ_y7eN6-osSJu>+Sm5ZW+vN|<16H1x&HKuezEhQHF6(iKPf~ql zq$N%*pKEmCOy))JR1sZRjGfS$+MV*36>T8&SXHdyvH61EOv=ui3MeQD%)YxBSwWN5 z;49ikH<^3{IrXkIjLrs?ZPEw?T%e{rVSTj3eR(?A`4+yoJTeP1C`i^^J(Ev(KKQGy zW}B_mOY}}(Lt20g0XNaerY|P7Ue4!nHwGQh$t;w4+>@OZIPv$RPF%mSiWJpIuaOp2 zN$9@hZetW^TN-wdWx3vj%%}40WhxIk=ChW`EYa$raa+VH-7L%^pld8?zg*RXwA~qke`_3XCuU|NElB0 ztCF5{3bjTyIWk_}>{dJt%{GkxW>aX|&e8|f@i7u2R>nVzesOJTH4}-2)D?y*u2N>Y zt*vR*wXr*2kquc~JFX0Z5^*g=?aDzhZ(Tj|0aL|@;v@lRVqS;?*6y=&tdirSrVuct z6F9^|F)90(D66GI#eQ&$L1C3}=^%)#<$_82n)PyENQK9c)T&Jk`!fzJXnd~qCM*4e z4M&5!1ex&Mb3OMP4v4%M>SbWymE?uy=jX2CRd&qY~zHm%ba}lrev{(PvZJ9kLV|vrY#?lbJ1x zFBn_Up*pLK>7?nO((z2-Fr^oA0W-Rds{IX%BHHK)U~HR$bYLtd;&#@e4QUQv&MV!J+v65iy>`7*fdU zi=`*@1Q&a>yB*%$`W(iWT3we@Wke~lmV!4pv1iT(G~ z#wrPB)DW~@5M02;sg84~g8SASOY6jTvd;4zcfB07Ic_l;Xbbw##GGs-`;%rH>qf4Rg!^$Xl%M|d? z-90-^pq*p3>UmmcVR?^GcWN(AB$#Ov;Ebx_3(|$ZlPRdFKx-n4T4G_x#8k#-_xc9s z7sgr-JF7}@K%;s1Gay-x~by-l;aJ)-z z7?E@QREVGno>}u{yJuaMMQ13CXxa2m1Z`?YM`ZqLZ*bvYfUrh46S7TYZmJrtt*XlQ_U}Q;pbPFE4Lv1ze@WTN z0eem`T*v7~bHdsMgmR76Mk-dy^rD94U{X)gP6mVUo%Yz$^#LWVbtXvUy{SdKvZ0ph?fn9=*k;EoG3HCc9x92^82QyTh*mS6&(!;JvmsM{e>#+ zOXh&5IX%ATD?S2O!gpCP160*)8us}-7z)nPNR~7oY?d3mP|??&2!Yo0e2DfH?y2CJ zQsnZQa>FCYpk@V@F+W}gYNoZY3@ZCt%hkh6+|^zs?PUf{#l%ovFRavpEt~oxtH-8q z^SRY`OKxVIs88fxrh~(?>xxqr$V&~*e%z78OwQ9nm|5;AjBh~}xjxwBC4w3KedbNG zik;aCo8B>k8@FuxasoltWoS)u4i;yS`{jj-ZE4BD`pQ;0k~36xTb<4%!HrkO%_l=@ z)C?@K1t+{1I?ax#taSlPd(`&x;o3Zwq?P%F<+4{u+Mj2>A3@+j-8upw8ext5w+2RDk3998YYCJKlK>lx6U_D zx5mDdYEdxI{?xG(f44f}>1vx+#sw~4q%569-!oB5tNyqv5bv85|7bibBDg7G z`)a1pFg`PJA~8-t%GUPuUGP|T1uf9&&-wu6_q*SIzJ~1V>>u90Q&v%N;<@K{dY4Cq z#346WQoelVjxCm7TpWVT*dBdL$Qdd}`+t)THyQqf$iRz&oN5%mR8gpnn}O3ca=wq# zrTGMXCG7{(%|k&=$&VA^(*a%RvSij{QK@?~utG;@M18zq^RZUf%4 zEiC{b*Hg=zc)y=Yb_k_{fD%*1AcOG`P>zDEEDBoK?(ZOA(`_=>DZ`F278;LTQRoo7 zuP_O91U1*`r(QEL;km}??fGd{oXnCuOAhbHLe+#6YWzydLx37N+^0g_f zC5AjKVaN&^c)oT~e{c15rHbskXMAR`nBvB2S&NxF8n74i)XFFOq$@8g+i&inlwa(s z7lIAPMt|c_vKXqO0;Ynms8Ci{ADY)17GseAB24pF;p5q}E5^>6@Fwg($@Uk1Og9LL zaYJXQx2lO`GN)(^wXy=O({i91({W_h}w{y8!ZhgYoex8RIwQ zbCS}MefBLT4J&BnqTTKev>E38M~=5VE-Rqx{7fE_rD5=KC=bUn@`{a&Sxd?QF?&R( zHp_l2+v0P!>XX_KWqMhKG%3cmU>yIKHZCwZmFAwg1$fHmVy_@-ikzOExMfXTT%2W> zQsIN)LS*s>H?NC`H$C~%L}&wu^Q-5x-3|3$;77?-4a~Cp z{B`2QKXcFGY3tjK88gF|D zkh`VsJ%p|9pzA6AsMibUPX4*X8><+ZyO)iJiRSY+O=^Auo`B*xXY5O!mb*% z{B`DWBoKB^QupWm$R<}N_(Y&L zT_e*7j}GF??6Kj;sb9-!`$Se;MjDrC|0iNJkuotM>8JTp4?G7j)G95lM2ZxzsG}hA zvw?5C1c^`9Q|QphV0huA@$sG%2^oZ% zLOTx!-nc}OXU!c7sLj!1nA`h97h5+z5YfZ9x+8dV$pS^te=dAVRa3)JQ)!oWE{hDR z-o+Yb63Kp~j(p#VVoVY}y!(}tF*&HOQIsI^*_6c|g3)#Vg6wq`1JY_S!f)AdW_@|W z-Z|9$Yoh4l!uoEbFZv;kbK25I@D4b0bFr1{v@6c)-#1-jv|gliL!ua@$6F6dnlLYH zZ2j$X{zOYM<&%rdAP@x!QZ?Q=Yh9;dXpfvQ+Hnk~6(<*%k$QXg2)W|q1aF2pI6itX zl9H2?JJ;=$DN|LJ{VS)K2xmaVhQ_$1MG21o^(bilbJ=lJ>L#j+~mL zg3SK#667}miTBUBDZaBbIy=LBz;;7Om1Y;x+(*VQGwbtXIu2ca<4YOzbR)xO?h+g% zP8@Q(tw$r(^s2!wH{dMd;eXbDo}!4xt>qovo$IEFR$F(D#DX z#+q?cIW@oq6@$p)sc?0 zk?=bkjoRX7c^30-q!hC{uQ`fEXp4lmIZuXhX;*XLl7UZf_tvdKv+aiecxun5|8eI# znL;e7As9OWitV-8e@b`=I`=g4vvVxxVNe?`ft$7xV^rx|LR`pcaz$n}G=`(cuGGPpW`mabAAAKmx(ZbYITHdy?aP&d14D&f?;0zF z?A3V$yC31<(FrlQpV9z!!wmjz*YvU(Oo>LKLr#6;bDoFs!r{Kmv^mU~j+EmCmr$Ri5bJq;eQb zYip4ux1e59Xm{xR($c-PrJY^>#r@p59fDBZo!NVnbUbeiAX3PNEB_4vJw5#gNZ^PX zH;wF^>BgU1zT3SyzNeAh|Jh#V8#-Q}bZl2!;kp^8P28Q;)p1?qc~RT>d4A*TI~IWa ze5vMsL}rz?Tzf=j-8-iAzDsf80!CuDb&TXwBH=!UJeIA#cK3a;#Ye!}b#l3Ous5IH z4va5^VWKaqwAg=H($--1WT5RK4d6rnb&%PozF)Sby)4Mb2bvok`&$t#i9i z`?-X5*Cqp*b571d)RzFjUq!LWmhMNg;d{1;-XD`&Yi44TE`Y~xrTpt&|3uUW8Y*(X zFkp+q*MX&i{QP&_TO=!VT}A8bx;3x8aa7}@r3^KZ9K-ra9i2t(kg|>UXdIa_%bJAh zq8xSDpO#gFN~{KkhC=Bt6jjw06!kVn2vHGLkI_~Wk)eTNJl3f5n&9( z+pz51S;huAF*X;st+l_v&}rz%rSWu4kdPePbeC-jdh_H}RIvUPm3G^%KYlKAx-WNfVO$ki|dH&EzjMg~FG z!wxdk;zR+3i|!84qe4;e`_h!iM#jen&fN2V_L zU)l|rOrF?O?~>W4>5~-%AV~r1e(3raUC|F5wYhSc9BwauOh~vYrLqS#0k1KTAU?J} znft?%!7(+PhvDq|tChZ~c9vcoIOlp6?u+$?e|0MUkoMMH_QgdCExtUGKyKYjkO9Mq zJXe>Mg%|z0w0Z}%b3#rBe#6k}wX>4Oq7OPhC`11k)mdF1!0H{AnW3PiHxEi`>ZMag*G&q8BO7P}n~=SmeQX=#z$ zH$t~a4EsY->GV6&_V)GwUhh!mjMwgnp8evcXN(SeUj3Z7z8IZBeH7FUWMqn7fD3|r z6B01{OWu9_5M;a67Ik+wJpq7~l9MtY+mk}UWBQqfhn`WAe*#}!U2VJBk*)w@%(E9P zmYBq05(Z=`0RC zr^SW7^+|yNRD3~gKAa4y$wk6zV?LzD#h#wp+CxTfQI0u(vRL4=_r{cY`AE9J{c(0t z8wYGV*B6r5*&sV|eSwxv5X{lV%*@zvaNIida{JEJksZthD*6Lgv|QSB9Jztk2k3=- z(3Hm7+6JH1&3A7H4fq#6_1#lSiZe*hgUP>7({`-uXK~=r5Nc-Y-7&P$)tMb882$$I z_WIx>{hXZVhHPJ>*%c_m(Dnhks?`L$5-xPzskM&Exw7R|#d;kyeJ?k|Ag4nH%34In zLh-S;v2k(xPlUDmdn=R)$?1W>eQ`B4=z)!Nu6m_SP04n=?oel;a1Ci-+`0HDFRl#0 z6R^ee*m|LyWu5IG!cXb5xE2I0ac+s&p$F3Q985_n?51qJWsD|L{LaYw)qiw)_-p3) zBNIY-wS(#F`s4cD^IBPjU9_$&HXO2App%KX%bA-7tLw5MCMKrHvxJ&blA^`$KQ(jf ztCP^ue%o6Pg6CU*9O5xNWA_!ESjb~*mOJ#wf@5o)pDi0QGBP%r5_W4X$u7rME&%Tl z*^7wbvz?(6|Govm$9M7?o|m%#)n@yRNmRkkh>)nRkAzF3`_9h$$r@Kc1HG`d{qQkT zJ4@@`3>*KxH3z?6L4&BAx>IHvy3ukfe@dDZEv@bM7q?ym?*$(myHETdaXve5xGn8O zk5tuGRe{E614b6@p6%VIolvfvU0M%H1&t5J(@l%W|2nrR@*exAl|G_r9vxE?vb zKBcy6)p_g15pAL3FXwi@?oVN3TX;03m(giA{>lsh>sZ@Vw4Or&GSpEeq^B?33QW62 z-EY18juUuIJE>{MZD-{Ju3gMM4sYCF9%4=XYVuG9qX|7c3qE+Da}rEJx!m|$?+|y&Sy?F023i0yF^69h|Q^D zi}kY5yY}aGc4ph@cz`bui1!9l^^eBz&t1VGpB;DQG$gVstIq^puTs0O`vMFQZ8QK6 zYg?~HX=0M@^WfuljHC7^iB4?eNcQ#&XC)Z!SGaoKUN4F)bq%z;waL|&KXYS z@O$z~hrvKs6V#CUG99{l*#+A&5)uTUk;bs0T<^M^hU*JQLLwGEyERw9Bamo4V5{?n zn&DVm{(D%zytcRX@{^f)Nn(7uu(C7Ds=u@}S2o(D;2Yn8{}Uo8JAk3BZKai;flW?W zi4K|z%k}QNCuAoMhJ4oVX}{>0m@ikUvw9XxiF}WU2wuNx*YSLPv`A+^`A}caa_OqW zL6lAHZh!I%ara?~|7~w4im}hUK}l0p$X{3>Jsn@Emxo8hi8wAZI=T^HCod-#lXdfx zg@pxA(BD^8o$lup2$Y;^V75P|7GL=1!Po!14N3Rp}Es)78jkEw;&*B)5KDn?a_jZ!b0{jIh=?&Cht47VM@=f4cep8pdc$e0{o-XU)~;#Ogx&Dfq~Ct;|Rd&H9JsdBV%q3PbLu? zK8C4*Ju)I$3ILEEv!A*n;Nal=9}IC~yMdf2LsRNE6l6H8z>_IximLF3;%QNY-fBrLsKiQ!vU zeBu|5xU~tKRKGAC`_A z8FmfK%*q5b^?$0yzM+$%Z}h=_X!2Y0RXYCe@|oF4Dax`IFRmhJ1*&9ht3-E3g zb}hpeGrH_~2f1|!*!i_G9I|MD$QXqw#y zM>);J!$Cv&n+hE^it2bxSf^;OIac+qLlbQxHw)>4j$Yt58v`Nn-uH6@v-ETuBKf;B z&Vzl*UF#=A)KZ9GDC7G91;DBuT`&T6b<7(Uu%zVd>Chr{C{}E4V0D-S(MC(d^ET=SudDLX zN7M6CydmNDz7pY)Vpdz2JBhpf6_~E89cHvAi`8+q=QCr;wB==0NLw02^$iV2I;*88 z7a`Z5KV3>JsWTkSh4ls(@ZzWf(pbE{S!r1*UF5H>Y74yiGMC`2!oWo_7fL{}=Z3VE zmC`)7{D4!8?$*sXcFp6cTGAI%m9E4{DR*<8(ku?z3N}sWI&a+K z-Qm5uxH!BDh1@B)gP6sX$xr6)tX*DiV#4{73E z-ypZJu#l9RDk||9Q5gUsgGV`zEBR$%IQ!{KMNPTUbxJiGd&>_Z5;){cJ+mjLxrfQ( z)X*5-FU-W8oEx67UXR?r(BvMTPB$A;OLP5GD2W3iQ3*N3;CzVW2`O_t`9#A|&}92odzZ|>SLw&u_&HueF7Eav&BEKi>yt0`SWi9~zVpHtB|I}l+W(&G|k)QxL*ZAEZBmuvz?WO86*_nPbchkiT z^Rh4Snt8$a^USwGnxx8uKaNJ|RGFN9m?HQu*wWlkkAt3}fwGHy(DE0896b=4qnxR# zo}K)>Fr)((6ps!MllTrX`oH>23SJ=9KwcHRwtK^Ts5p*a##Y`8V_Z56i| zddSnk8a}r#Cf3k|;mswO@A095t;xH;M2)$w64xTfUpr2CW3%=6_=4Hd(!f^wFh#WV zfP%zh>z0%(RBoGc=`}ic^8vX;o+sAl6%0dv_6o=|wARLKkWXK^*c8s3oezgMGs`i+kJx6b+@LabqQOK5k z@|RY-8Te7$HZe>|!gv4@Y)`(PY7eUH@?b}QeV(bgS26K}&0MtYoA0mvL;x=uiV|_G zI}eQojt``=I-URy!=5WO8|qpVetbu+`UaMVN%GHFyY*qYm7#qV`-EJ#doEnizT?No zi55q&*cQ~{7%W~&s$IK1@>a3MV@dFvH!C%2&%p<(ve99m`bBz;;iA@0Wh0+)Oe~+L zIvCDW1^{1!|Gdge%94^XlJWU$%$Jqh8iPLrz1=qd*BP~<31&dwz1m6pG^V=wS@Imh zYfI4I$09nniVCOE^R1=;XDWrpnB#(wkB}C8YDYS>L=Q9fNfXVC&f`Eb*g7P1dMp13 z^}3SUX*#>20y`Dk=`{r8{D_n42;DAUXc<9&2y6C9-u`5|Oz|R@vi=EX?B*QlXuJ0L zq^eq0YqL`u&>jWse&&C@p6>U({43FMb43fe5BY3mZx3%cneGxU6YdY;$D8(gUHR;} zH#2N`A36rd#>N4@?|uuO64d#kmWxYT%M@qSA7;F!K(q#*Ffw$@^czR`AQICmP2&t39dr0YBrg8f-6RYj35WP{h;IB_pYGlOl zPO9NgjR!EL*3bbRR1e%oT1$aId|6mo{=7EJhNP7EWe2=3Dk@S`R(?;kw5&uX@dIxA zsO)zAG3g&1hasVJQ%eaIH^YsJrM}Pawetb?o{lR*C(NxVNK`Z_j6Esjv|7)nI<{Va z`J3HP)^Y=K^%(sJQZxjMyv6QU8>BTBoh^D%n+jC~2OE1nPKBSD-e7q060pgcoGvp% zj+eT(n+4bV>;hUtwzlqc{O_U&@dcge&{E;~=L7V+T*)1}Ue!&n{U80_>H9sR=6GIN zX|HzZJ$F4r1^)21QLqo>Lrr8=Pnu@=5pu*~z2S1D1k3inS zbCF)C2Lu`f8JL0-7y;kvY1=OV;{bb25-1a;WSMK60g)U5JVU#5*6<4Z|Hs~2MpYGdZKD<-trF6rD4}#p zBPmEXA|Tz}B?{6d-BOa$UDDFsDXDaKpShpseZOB-q}@XRUCK9yX2Mg+_GwuZmVyPW1{`6B>Sod%#;6nNSk%FKy9u)7kl$ zQLOig4GEw%NXi^z$7nV+Hi{S3)_zLX-*nf5x3jnR1rt4GUfmr5LBTs74F{o{Q`J7a zwd3BHuT<#gBRQ#39A25~Yd7x%erU?@sG+9si(7VNLIw zlm3OuHEqTo{%9#(BKa1951G=GZugk^=FBgSyx@?1RHO_fRnobM@JEXToG!1AV>={W z1OL8KE-~$|Cu)N^=0{eBSbn8X6Lw);;?}gXDCsmDhxOXum2}a_??uyFttSJMAD;jA z4A8*iIbX#oySNjUo^Cc(5`08lDVj8XOu#MVgZZqUBE@`|H6S41t>1z0FGCKCKV1P) zKbxnpqC7?9-jIo8Aj!R;F$?GnTEjVW8x)hfFzVkvx?CB&5SRS(_Hg2z1S*++o~o**+GMk_Q24LAi33iqb&Kn z81}vN{dbreD8sF+L9)o@`VLY!oaT%r2StT)D|~zBcip%wZ>wk>;8a-7k#SDmR#H|b zEBgvuEb_4*hB#MDS#9k?S6fa^ZBjRB;X5lUYmw8QPLPFt z%x$yyuFtox#5b}J5@RDfcD03C=D4Fh$yn7M6wm&`BPM=lCMl`U-#KNZ<5M4 zIQCCGX1b*ss^VUBH=E{>(KyupYX3-2di&p%v8ClsuGCCYfPd~wxyc;gE{n>O*M&sZ zd05^B8>eom?+4>EwZ|i~gTQrdWNykoU-3x;y5jl*zV&~SE8NtjzTp@bOAfW29X)s0 zc@EuP&VCXxRjY-2;M&c?_0z4?--%#WFVntexa;qte( zc|e-ojOzKml5AX*kW+Ya&I58uF4i$%nh5-G(Pt&=OAqS^aS6A1*@xL4HyZ#0X*VGH4QL%{j zErXuyhZyUtGr#}ZfUZQMlFBAs??(o+`#LUjjr}(pMln-YSkDCf4j5M#QKBL1_{W@w zOa}ynWZS;MW(;{oy60S{$$8JSpn0$tQw-cUfvtBDvS;P%v@$ zA28DOSR^^xKXx{snsa5wWmm4XNqahCoM4h`)ag~GCt;B0*x*Oimwd@@ zT;F{g!%sKOE<7l)*m59qU*_!NS`zHzUXkCf-r%b+pDdokSS$?eH4xf(s(xz3G~hy7 zgnsW%nH_q_vEsD4f+UZ{%BQ=VT2weu<)-5}M(BrCfA69krvH$!*0T+jmzVG8?F@Li zARs2@pu|?LeK9V$uvDE~qI-a)XggOghYQTtI+|H12}|UU$kw8>%bL#Se*Ub~)cT)S zZ&@(BNVy$F*`GW#9nUxXyUrHY`}_qJv(DiIMWq)n*t~;gFrG0ebw|^s=jGAX?J?SE z&ejL@5j%#xkh${(;2jIhhHLEw8zZQE5f5SnL~W2I+Rr|!;k%w}>t7sijVO(!I*bY5 zUR=WI=;$D?q{go0zPyOh;+U+n=cdaalzIKX<CGSI@A)f8p)2>a8>@DvF-m`chI*%WYEt?V^;GPTAd&Q zzRPc3-Dl2cAKdnSOD6O2+KfEy?(NlX^;>Y_;tGXn9c}KcF9U<*HKWZC!*7dHIYreD zk;fXX*q?Uq7E~>w`CyR_Em2Ge`WXeJeT<`Q`uLz_fZIgwYfQ_nA}%tJzHyC}(xL~3 zxO8NStE2|q{V*go+{(!HZ>uYI`zf`lx8`VxpnVc%3;Bcl9~}z2t#Og;lU9;%7=W6~ zN=Yd)rKa2J9?2Q5TFXq{J6j3N&dY1w;jj5i1kHK6#Iu2i!a@H2lRJh+P+DPs4C_@T zZTi{Ld(XncV%u6%V|?|u^PQ5f8wfBG%vj=^D%sm(w_AA#txk-MKS`Rmm*qH}_reARDRw~3 ztc7S0!I#V&$t3ous?*)~ZNL`R-CUz+oBz^J9r*J{+EiVA8-`9Peb?v60LQN-`Fa9kJ3pLTcjSzQvXF8hC{hZNZQ}q$f zV%+ObwCSQ){PWCMF}b6ZuvY?KBLBGo=)jl$h*x$%lsJ zDX1O`9yTu73~Za~wnSqB4gwHUksuNcSLp#4_i@We5p8gdPo`|+_~Vq~im-}*$gCKW zqpgZP0}Zptw-h*xb4}9$n_;LLd($dGDl94<6`?1jl?9qs1)s%uEAdbZT z?fUw<3xgH^`iT+e<*T9xF=d@vNvfg}> zFl%8r|M}Vo4P%Y}UTuYCHL%6@8_HvO8c*!8F5LLyT~@yh2`uG1@-0`z*`|f)%C!6t zr?Tl&dtB-~Jk}vX`Vb%OiQ6HnYuC$`il$7H!&lqBnT;I_Le|`7+H=2;BcqsZ-i@gv zXBXsWRZ!MYNPR9h<*;r#QxV>Z`0gVfA^mY`1jqSwu)VoLXdIK>a#mUwyZsqIhwnoQ zUv1lIE(<)G(+93F$YUB&1w1tL{nvY^abR;4Mm|LE7u{A+>=38=-Y8xwonmR6 zEQBV(!OFV3(4M@z?YeV-_?m1U2+de*z9Sv$j40VrgXyC44&II-kqJq^^Ke29fk#+V z_~18Hywes!h&UudZUfv>8LqIPLsmc`YVHulXAWjn`KeKn^c!a-_Q3FJ4ayK!Z*3tI z+pf(Bu4uJ;0@Bj##>U32t*wj>Jp=$|-zMeP$ok_I0vUdU<)WbXDcOXRgl} z756JIf1I|#!le(d^^e65chreAxr-^Bm@Q^rA8$@}6I=f3osn7D>#N<_gX33Ff1KM+ zK)htI_;oMQVVwr99Zl}Plm~MT*PlbW*C_d^l9yW*ixe?%dMxyrxL9KCU*TFEwYEV{ z6MJoNY!v~?_QU|iV)PedBqlCo^z@$=CAlS!gdF3x(o8lk z*OUf|PLOPqx(A>&hbXP|26vSZX}bRnE;_4GZ}`MZ%wf^Is(kZCfmY%im&s(=$_CA* zsAg0h>(q-@z2r_I2hS_~l$`1)(prafvFDjTVwE%i z{wK21uTc4rp(j_Lmp9)rRg(~Mn~D;-it_#?C5w%(b3iO9QHssSSI5|;efzE zIi;vKUdYTw0|JdYi>>~Ntfu(JIXRKh(N^b)oK8GsJY?7`hGhNA;t?I)-TDKKU-b0! zzLK3((1t(4iQ_ST=8zCvSH}~Q%o))Wgdrau5zFMx1sl_VoP*9twj9P2zMxO;7dFj% z?Fx#xXt56Ff#dH$G+R{UH#1W=P%$zxe{e=kOAB+{ZBST&#!y_`AA^|dt8G80Z@v3F znvVXJAQoxERzKMy`{j_6BUZ2d^61=v$CE|_L z!?hR zD^tc1u0b7SbRJqR_&(DfMA(wZnH83tEC%Oe_}v*fT{J{k4p&}5K9=zlPpM&YD;xnK z9Bca%ewJL@A8BdNNU%@<22abUQ>+|jq%+xAN4@816yFBv5Zw^0)bUnExA_zrO8vo^ND zl@DfKkW)nZ#&B*>M+8H?k5ar5B za(TJuzeh?~@Kh>Tsweq`@S3bID}L&IwA&uiwSbdB4FD+Gx5qzR>Dt&FCz*zU_G|6p zMYkvEOO0{orE(4<^R@4zmJgE&`qylwDR_AgHPRK-Yhz^oeUebe&QQT>U+jN8JcO$u z{fv{wf1~h%2GL=X;2Cs$d)nIO6SK8ike22No0GkL$`lPHrB8FSr~68vzMP7Rn60gm z26O@MgmiT$c;Y7G^b8C|N0a}QI1{V0pSUea{Lha2;ykAR>C~^vAZK*^G-IO2npS*| z6CJUToH?sB=+}wj2kgB(J@0@3M*QvD6tKGF1+fmvE4&pKPlb0T2=#sHg}{e$VilhQ|M(k24{VfhXCvkIQQ$5;vM&qbov&zuO&~rz1U-UmO(w zASi5Y_hoK|5YC-?Jv^XazTg%)wCS(QGWv;Ds_ zH#;}GT|Wy!9sKs~eRFhDeg_RK;uNWE5j_ZIs zZEK}mb`a7%jQiOp;|~-C^_lF<2$b#cjr_cG;#G68NWI=X5b~#gJRn{^Qn1NintqqR zg;B6Pnhsr(I6Bo~#Dsm|=!#*(W71aUSI0lh=`=1(MJ7V7Y<~E#86RudVZrFI+?K4_ z%fEez?mRhog`yh$dnK^pWAD^aSUOgmz8cTXVW6Ula7>XEx0%~bNubls);Q}cZ zZZ3}5_ztjtANO1LV4*O-B=;c4N1Jxs{^#$ToKnumHIc2eU_DiJ$Zc5av`1BUH1)1- zcQK;w;`(RZ)%AvC5))bPLw8MepWi-8#7?UV?e}NX*3<@yR2gq<*I#W2<s8*GXETiV9>h*4%40WfE4j#MtOyjhGEUg2!OlU$= z>r=l61xd;)gv&(^gnot=V*lV^&xyxut~es7hjzw-qnL>-QzoGc?$O<<+2_xne@jl5 zfi|u?TGp2%DM>-(`T@#>x^hSXaZfCh7wS^GchndohF4dYgc~2?%C6Q(fB5iWBz>Y= zB@dw@G`RNc2d#9X$Mu&w!W@KoQA%B%xV$`d%8%P|`$u(k9Kcj0A(rDyM}i~)+iG2+*!Dh{tcM{X zSGe!qtliI5RZSJ!alNm&$sqeUp8wD!J|o4U`$I*ZEY+uIi|UR$31j=P9CUI$2bY~r5CoCqsnJ4S=l-GLTt1+_6- z6lZoR?aL~r8P_>}=YxC|D4QO(i+OQQJQj;Mi`Bb}2Q;)VF%sH$PD-t=4OhRc-YUp^ zDfylCON^#V2*)3%I2Fw^hH)(q_hmg_Ab2#F;#RH$D|sK_FK^M)(M9=3v@so2tpySC zhEEVUsw!Jk;dlphy+n|zU9YfaRPG7rE8!(nn*H89)*Mvy2Jcx*X3J-g(v?)2-E@Db zHeu`MySbz3K~8Iw`%!xs7qG5Yt(`hA6)o4Nc4k^GAu(FcUtZN;kizspP20EPs-pQO zh^h{!DLpl>&J*vaGEPwT5+Vh#B7|A}R;F>W^_9W#<{upP*%<9qtNw;<-S#n3UQ$75 zM^4x5RSp*4rMe$3zU$vdd?n0X1}vuCc@(Y_$FhRU{ERuTcDlsgbfnj|R_XCMaSEsFt=#>4mm0UDdlNWHZT?D3O$mmsIb2)G7OBF-gg{$=<(IcV zNlXGU&#Bv<4!&E(H<7@Yfti`+uc$Z({qYBB6fIh{8C{00Sr1_XpD#mn)TV06ij0~~ z>uAR=zy1_m0b|n$LSci=*ujzU(GrKPscf>1lPnh1Irnn`^3OwiUR6{9Y4cXEn?po| zgzh@jCVl<-waA!zk`=Fov3ZP}03)i~k0(>mZ+G72B)&VTNq<(JiHrFN_uX2Jq*{Qt z2zAxWRnlm6*;@%itI75Id>fRp%Bw_kTU>f^$g!y>Mfz&7yms-&<|)LKh4trL4A&=k zcOJe#U+oA{Qo`vq@HF}S=t@mhL#eyB;gYU9reMZ$_dr&Sn&)ztqUTDF&!xy$H;u^1 z;jKi#3p(Dg$VjJ6tc;(5t*w#5eOwo`k7{{?1>0@-&yDD1c&~A{NRz{6b5yA%jEJ`! zWECmOeyL^$G_Mv@aBgg}q)Qm`T(9CNMyvRg4_bf9Rh=N6x67H>#J{>Y$;xKr5pbuz zeB4HekcZRd%2uv9O|H18DhyLpIdI%2eZJR6D{85Q+l;QD}%_DVT#x!!eqYjq+9)x@3JNt64^^WPFy-xrCtM{X zAX$Tj3r-MO_3_3E(o|+VH8nL>4vyiesjfdIzrdzxYWnJ6rQdM74yi}IsAwr{d|g)A z){HhFEhQHPi;Nw#Dw8XL&YQ*UR-B}`c+1*>t5udB;2|fRXkc(qH*zeiC|f+aXwj6B z!&MYXEiQi8Fz2h^nj@$G`ui%l@=1*nNP1*Qj*Jb#10 z2h3kOO@_&(u9nV<{rdrT*x3#XyZ=6euGXi`=PvSBDaDGN87W2>i^-pazQUa;pJWBE zO-FyXZf|@!ty)cD&G~uu{3kMVM)8GRFW&2H2ab9e8IZb$jl5e^8fhp99LwrauyR))hA@QV4*07WYGeDQN2lc z?d6w2&U;n^nWj#d!Q>SMVg#3FdEwTh(xfY)#YtH5= z$L*;Wmj0`lXos6OElF`}IT&QDj3sB^6cv^Cefh7V43nKvwbWsc(Wh2afd(bPVj=nF zl7r6NSNVzRxEI1z)E0eAHkXie9IaBK^EbESA2ndxmz(EWdvk`GslP<{2Yzjnss6|^ zWVD)J*lPJxL>q|tbKFruQn9R*#wW_w@|=ze{Oqk|nU4 z8?^UnjBv1qhlMq@`r}yFCg#2W6(7`tA^n{@h)YivWa%rMcPiyr^zfPWQ$#=@M`o&_335 zy4{r0cW%Ft?l}+!rbk%!Ag-~3yn7~t9-}_a3$vN;1kkL3HJ~T5Ga`=9+(k^(#^@$0 zMg_J50zNkaFBI%`G)8sm&6)Cqs8=e3m6lqty!!m9NMz>f-6zY8ae_5S2T6EVjK>Q! zdXg?^P*MF8UDk6XhE`Cia!R0LI2uxCns?*X4<)owHT-o+I_9MOk| zb_KtV-}k*Mml$EKTncU7Z@dV%nkTk}rOSj8wj4?|MzU%8Nw%V$mMAh)Zi_01B4v5!?8F zg8HZSfWJSDEf2h-weA10IB**vvyQOs|EYblJG@b_^82wC&tg+KY{Rx&GKEV!j#pkF z23|TqsvV=UNh(r2Oc8Nb!`rDl;A^-X?R7icYYz+j8bYOZz3WkFyClW0dtK+v%2uHh zM|$zo_wV@?7oeSg5wEggSryin`LF0NY-szdx(E@9qVmW`2ijLQ$=W#+X2(~2y>`?f zB{&=HZTNRiY@xS3b2c){u0xP|K)cVzJ$;zc`G*$|q=7LIB{;VNS2Xy;=500VJhj^B zeDwp%Yk3sUmiM8Y%cOcXrorKe3!ngePSePNVFKQK-DQW( z^bIb68W{O62Sc52X0gH3+8Ffu&+Lumdo(&aO=ViG-=Gq1*|E5CUw+m?t6mW#(CGJ` zs#{);*4yV?)M4ijPDSC*pC(2oX8!T@w)gMZLHmSr%=Oq;s4xG1$oKTrDHotSOUtbC-tLO6X>kdOXWZNg!Qgd{juw6M ziEPa{2QZuCE$)eGS8R(IFV9Q2<47f06%~}mfu_38|lzWgoXJ;549H|_8hNgcLI0J$YW1rG2x z5QksVifqTp(;33wiDFrpUPc4E;F4$zjEXxe%2gjbB+Xepp$#Pe0x_t8=l;BxRnq|xH&15R_;5XSI&d$ybLi+|$ zfMLloLZA!-mpwQbiw*n9Kp{{)83#~rSYo0iBqo4dAU!WF{8SZNw>>1Iq9PhZFNdeu z)u#r=Mn;W0Ct~b@3^Y)BO+B12aoU1(eQQ0Fnr2z`I8v)mqVQKSC|*olwz6f&g)=_r zm&cA5Y9ZWsuHB;fui^A%#5!%_Y;y)0k%bEF@ejq^A(GZaW_(L+de^QlU^18TXNhWw zuLyFgCz32^GblEOGIboen?`5?*iL6#2QX7W1YxyaZD^N29+UbJ5b;JZiCMpH?xt3a z?u^c#R;w{Pi{V=tk`IsNab^a#?4d4gZmv*hCI^QviV(KwFzb2LvG#7tZ5Yb@VK4cX z7#)=1W1_S(S?;SJ7*lL_hE{*7V?1tXB!f$f7`4+wXAv~rL{&=8?!rZ~)ol5=g8S$2 zI{|5oZmS=Cu!*~%ViGWZyp^+-qxydJ{jBU941u1W;YV8^6E+Su_G0T^QN9behp^@99Zemf)S*6n@}$3tDLszW_}Nlh z&@*lZ;@*erjw$t--|2`e87-Rxl?&buVVY2= z$BX&V@YBVD^>*i*z;S0bRR(s_Xkm6SPK$F^G_-w+1kgn-0h~y-%PY|C>VCKiSprOn z033!VB?Pmy`5Tzr^LkUUGugMF@l&xyWXBbT4UekBa5nu)R`fIAnOy)|S|LAv<>JS<9FAQ+%Rw1eicnRrK4ww88< zlheEd*~Y*}rfn?PJ5c204(*A|a{X}e;g!Qhs_peL7O@P>%%Khl&|bAG_%1ap%Z90e ztrNdcJ7_R0ix>5=a%=6wr;`dVIVC));k4s-S+e4RvRmtSuWrpfshvfp*6yyH6y$fR zu{5O;K@H}xyUSvuH-7$gU0!SqWs^<{-P~1XB^pYL8Ih0nN4txskGVb>s3x5LL&Q5R z*l|_w@9$U-_25k6sk9f&TdbER$j)AHQEy?;w@=yWY~WA_@5szBb6{0c&{pxJHZ|(! zWRqGtq9cV;;fo1!DbYCSNE3;eTGRiH8dX#r+3U0L)(F0R*vhjhO@(hltuOfPPbb~T z>0^Khjg{rUPg;J4IomkBoss{GZr%1s0N|)%CZ-8e((V$$IVv~JCv;+|il1jKC@3i@ zM+OVV_8!FIbxoa|yOmW`h`N9JH2hWK9VZ}guSr6RbT>{ej7?2L&o{3sY+i4+wzc}4 z`ws{nt#2|zF~dsu6h!@a^)q8* zWc(`Ftve@>p=7Rx7X>d)76mVtoD>|45V1JsyNZas7-cIjD|0)z+ih1D`b+bPJ!rPu zD{^wG+x!1m{sdIfUFdF{P{@l@5Ii`6n zic$lDxBsTVgI%IR-n{sj>m#nQ)oi78u8GT~QN(z`rf!x{Isx>0y56B0= z(t+%CdUe}QLyQTJk(O2gW%!nYSTP3curT^+tjhx-?B3E!HwGELgXMbfz?SHUq~DW} z)&UuQP5N`yUx7Ed8`FXxT`np1z~La;-021R|31BH@%}f&vnejI-&a~wFf?2fML+B! zXUDip@t}2+;P7+EL&p2al6P+76sok3o6VaK4NgmLMw5;zzF`tz6S{H0$i!=9onrFh z3p&1ajgR9I=>J!t34>QHg$O@DJB5I96?v61fb6^>gP4__?V$f+JEQn$K7+8eDVT)U zbNYJ6@$#yG-+KDVr?7FliyDLWM{jsCG-^%t*{{wuYE7_0w0Meg*8p7!2x?apq0 z?Tvpb5LjQx?)zXi34Hs^?>G1O$FEr#TU}y0DRU?FD}pZ}`}hG!v8f(-=;#qCWCGad z19v}NZt+d2U%@}$t7|H-L6>OHOY+huSZx~Es3@=4FLd2mY6<0Q4hZoGX!#ZqAtfl! zV{Hu#I91mtzF8G|t|M<1MAU$_yW0ok1bNPp{nIlaL_D{)3 z**AK(5;ZyKXT97*NtNzawu_6Bcbx0L>tysYBE7vRotv4KGO%s4@RFV~_M5~zQ{vmR zA6?bI`8YgbS8-Dj%eUKbW9=O4nYOGGRB!q2j*hD(A^IMz@@9=)n)^zTf4d#eX#~%sacytz zo-n(e4#=WLSm2V+V-^{8KAt%{sg33Lu%2-GuV(;kO5KRHv}j5JPyMT}D~o(yfAedH z`QnF~-akVSG%`s=AjENbbB*2o4L!{wfiw(-jgcm*|81^8kxY(|GSss_`tW~0wez)u zI9kMiE7^a4%}?|H^(+-g2>Abh@c($W%>Sp?!%x@86K~S)EtX?_`rm{KKC!Or3R91* zG>*LND}uAi|M^(lM$48Xd(lS zu@l5dYQCO2f%tBy+#@g`01P-OImKZq*GHOSN=h%7m;llE8~;DS5tTvziB@CEvlM4C z?BR?82WD7$eVC#o+JP-iM>m8Xb_}BE4YRg|kajPN<5*9bL!g$?&<{W-m`GyM9S=z9 z07hFlT`~-hjwj(qwDQq7b}mbR9A`qE&6 zXK^4SE5mxflWMrI4ErS|P@{;Tk5;NyF=>gs_TFXxB~JZg+I`#7!N?ApkUURMw}Q(* zcnCYVuRB@wti|~e-BUh#dYj1qUe`rpNl1^mZyhAB6vd?5#%#SP+!p#o=EDcG<>zy6 zSq%I1Kv_|x(bpk|k_m}cFlnV8GOHQ@k6=tBVQI)C0hG5zY3irmjfn8@<{W@zphL&z zrk)U&Q#4~Ij>o?q6@2q%n3Ywj-o}kEAQyznvfRh%ncl~a%bZCO5iQ{0bB9z6(d6() z^tGEd@GTL0Z`jz_Slf4A*NJLdL(qdNgZDYkF!7Crh4eD@f6G8CM{MM8czT8T58Aev zh`6{;fNXNIsi|O2>Q%1*J>W~Rc?V9KEd|Mj`i$j&dJ({hfkb0#%bYq_6jBQgH`FB@ zlqst@C-r`0Etp$UFmU)*O%Q+qlZKwYdE;QI$P{C9E)+t7K_X4cFqm59at8zjK1 zbA=mhCCn`MPu;WQgX=S19MWwGy*EMQOU6#_mqA$WkTILL9B|P5)gWLXJR+$R6eOLU zeRopw^Pvs1dc6seOoN4%G;7AjFfFGV6M^&?;}z1k1k$OH2?A_TWxe2jh11O{*nJyj zA}Lo_ZuJVYrw>Lz4wT|CCm(=@?iai_Ff`?(O#ta5^0CQ*Ef(oobMk2W2Sv1{rtZkt zWWqf+rHV*zFp|P2XsFJ$t24!1&cv6(Oq#f?lr%%6ndl#Eev#+lc-@1>1 z@f=P~#OEJA@vVmsAKGnq&DzqD^PFW5bNFfU`^LZq1-(6T_z z%p49$mO;q8;3_t6GAHGP%khHpWBDmWZjD?M-s%V!Hj~7SGf!?vo)iW~fltdcZa#&) zgk>1gp(v>tA0*6%z*!oI5|!K|Tr>W94@FKx;hmM0>;+%>`^%z9Qm5&9^tGH$z;GUs z;`xtfflh=mp%-i%-@?9&3Ofpn=-8d}vRuCb3*N^> z&3xy8zo4B89CV`eW3HqS$olG`yi3z5-YP6MIHS`tw=O2_fZr+ZubQV!guSCK)w1Ov zr>Q2TpuloV+x&=h~izHvrHp;3Rz;8u;N%pT2q(xVvj5@$TK) za2EF2*%^e-JbXwNGQ5^znap>%J{nk5#0UocfekxAqK4DOutAD14JsNMnodYsdqhYm zuCM>1#Rn@x?8E}}NKkadWj~T+mQhurbPpxYQd{r~@C(6(WF8u( zdBrXKP5}q@p?^JL6rdw|0V~vRR~G6cF&9$I#o_jEgoX#S#dLJRJv|tUOFA^XilXlV z^M$N9xnBkDEwur>^+rMh4NjwJ%}!QRSu}KemVn)k8b}(b0Ye$@9>e0Np`&XW8)_~? zrzdA&@dC;pw#C)(DF4}oA3!+o4m^P5owpF>H#j&5OJ28f66_M>uUNcLaVWnfB}wV% zJYyORd)o*=>aln~CF|PGzP@Ml?D!F# z!ghA75H|~YukffS1Z)yE0CH_cZ*T9-KfeO2CR8b<&1TyoBXQwF8KgnGIDYb4+p4;# z=oL6Q%#)=k0eVzaQkGR$k%ecL?w%N)Y|lQYY-ItB^MAOFTuMIr zkim4Z!I6o#&d!A18tAJWs~9D=CF0VOZG*?|bkx-3uV2SPe%cHfLOHTE7u9Sr3%Rnm zgoK2MQ;Ld{wzWkE7UC;13X}1WaE;@JD8PDaYsM31bgGw^1iUV+aE=gl1G+gjwo%aQ z#w8|_q@|^;PL;nBP5)9-BDCzV)(k>WKR-W2je_UuNJs>9_IK-p>J(9J!ovlPjHp3a zVu2lteD9uBU!=I*&RFpB@^e`8{vjbia}e;C#(75Erxz0u{r3HP-=ANuus4yjy+8{5 z-CT1-Jk|Zy2v(!to4Y9C-@i-4ih&PASoo{$$D2=j;)|Q8OC6nkneU|O@dJ^vTAKV8 zT4>qKm+9{N z|8rL(|3B{P-~FNBlZO;-;7_UG!OrvZAKA^P-WnO*2cL>QglD-yx5GLz9u}V1vpJ~+ z&lzZk+hwA{96>m>FIYVQ1n**}LB`$P-F4R*bm_FJMW6F}B*BOo%jeDoui6gJjsB^^ z(A9+noXryiy|CMY&1p4%3+mBjkrS$Vr8!6)5FSc=y7ym`lb-;*i;&>qy;25~xR|pu z=T5^7pNNPEFgZvGy=|^LzuKWu0ktv(EoUxkskVhA1NuH zQ&PyWNG6~KBY~v{U7!yLCrJv&-^I{tQ1dx`gSUenK4^Gt8Dg^ZA;0Qyee$l?VCx_E z3r^Q&r{?D7Q^@O9tFqE|eNb7E=>yf{_U>N$6Bf%qJkKbaQL#`BHY&EZn)Cq*m)Cjb z?~iIWS%b;X&*FuG*}7&|0(KFX~iuheyLt4kapQ&nC#vL2aEVvz~u%6b{NRH5b{L0SfD;-fr1;`YY<&{ii+CN z-TRc4H4^Bh;h7m>U0n)bX%S(It?lg*koN@1Iz{j4+A--Jca+~kE-}a?Uc$8pvhG&V zjle@VOiC7tBv1~Af(8>yY8ZhBJJe!UPKyAc2=ASdRuV8!BnvTk(8~QANCm}s1T{77 z$Myo!x{I;edvIs95xT3D=%FIs7g7&MUcR!t`F;!7G3)HINaurp#UMU$v3u33b7VMo zeOHozKN^IRK=m~tPO!%QRmO`K!lI%>`RW`W=pR4%bovxLWb=u(eNUkkV5mR!JUdu{ zeQ$L#9R&rO?1xIB=G*XAs${ojZ2rqe*pQeAFffQ-f6HtW{o{5ZrJVo%H>BgphOYW= z*i`R2^X91*CnBNae`Jn>gqf9rR3Rsx?-6M9t~2ytFCk#odu!Ui-6{-$<6`1#smILB zM4(Fj>f^)ger^YofY+==mgCMJI2nMQnm%7&F%n_colk8baAGiJeSa0 zGmFtmz=J6MebKZz+~R{10|M52Z(#nBfWl_kaK(;T%kV)#g)VVEpoHDSZ+L5d4pMhY z^t&gDbx|%(c2J}!p7MndvNQlwSADoSiR0nn!FO|caO^%Y!pBu?k%w5 z;*v;0-3L*(u!x9uBNmx&ULPCSA`Q`L_&wqcGiC~Pq+Rc###gd-hb68Ilp!lE9 zo+%E}Ko@1_251(d2q-Cm zK6_v&x;64&{bL08_A|p~sG4)xg!7MWPK%nA5h!qYA zNzZ(fm-xGPEoOV|Yc{|czLC_yFbw7ngpNv*(spGuy{s$}3MFXnB+Tq^nN3{3|J8c- z?$MVoUx1g}o~=d2#ughcJJzi#{rArxKHfaLBQh##!Roc2zyIyVt-TWMVSJ(lbAlj) zwDfc+6L59z6rzdz&VYpgbQYJ}u|a8EY%BpJ`k|tsfs6)KJREv%yNxl-pD#Z5Zd5Mq z`0M56<4hx#<-eNS@4pXMjsof`Rw?>q>?pFbod^dB{O z0lTeu1Z7x!e88xQ`HnLp97b9i%P@rGO#@3`3ebP>O5oLi9t0XxCY$BA$XFzA!87Xm zNn`3xc1rom0$V~aqFvSeyW#2jQwgH05omnccF#8#e>c9aCAQ70u^7%~zt5(RezgbWNYB9>*L<}dg=s0~pH z#{<)-t3DL;1(G2)Zg_2=ZT&+-AsW5Zxm)?=%b#%vy&r)8?uBI<$7TOgqehRS66xqU zD^%;Mc~A7!Kj|oR?5-CMq~GriT2wl^R4P!UhC!Im*-COhEOo1D-m-~L+f1%6_0&WQ z$0@|~Bd*H-(OAslhqil-Zs^;VM% zYOsYjl4KHB)XWSI45d~Te|gvwdZ{7zp6;6mt*_X768a5?>M4E|c-{m&%j+X+vE8K2 zzh14+ll`GI3Ym-+n*{JdpIWamZQpf^8sbUcfLx25XWLgMX~6#-iPg)>+#O~u2fdboW0cWRAuGT z%E-EKas+L+YW~=`d$HCJ_3GsGX9OAS-4}2m(og zms+X8;K;~V+E)Y^$naAb)AiscbvqgzpV$;bQT?UK(A(P!Lty>&xhX(VeTQqqXX`%; zsTmmB&Da$b6udf(Qp$eBg1iUlk~h$&_`!2u+Mjsn4W@}~PFLbSb55?V0RFcy2TEmF(2ruKtZb88U6wi z%^jVt#$jY>-L@KnFl)y-_wkBCgQDGO5!{%_MVspTn3%lU--uE`XW)Ku47@J9DH_~H zBcmMi3Q7T3_@zdJ&k%dl7)iMX`s+G%c&A^kN3AOdOtx*3_zY)ZH5FSBt^unStka={ z_jw*BN&5~OeXaOxGVVDRNvH)jp1GT%SQw@I0uy1Kf!g&R5>k2A;Qjme8}*n6CnhGU zUkA`87d|NKt(XA-kDh=y%#Fp8jGta(?3xe64Dfz} zf}W^YSbS+?=~o}vf0)lcrKBW+0m>0`%;YS(ZIWXJ8t=v-WI7_k*vL$0EB?ss zc+GAsPfZ9O9M3c;w{>J-@B;ya#gCfCHhg>vf?xCGZ+m*Hc3hsGo<H3NiEZ_8By@(Ea&g}pb zbmYQHN{fq&(x;qvoa!`zZf}bzt=HMEbB6fNu*eB6G{OI~*@xgHPog8L-fK#)5J1&n z=B6pkODm~~o^?Gb^|-m++yXAaE)(oKbXxU^&<8HfO0> z`@NDo2hPlmiYI}DV1bGZkH^5l!xMS)<~Dr7BH_;k1qHw9$0_|(F1DEEf}&{XGx(4g zur^)EFsVj}LCE?!GBQ&4STvK4dNNA}@#v!J`MR8rk{%za1odGeBO=lC;&Q{>UZ3AO zh?Wm<({E8xqt&?z|Mr{^W?+B;4!38C`T6->4p*f=Sv-~qz?O$P53{%X#bKt_+#kEG zsiW8?HYG19^@@k9mQP{BC*^h^7k@NcYrhm8NdFwr=JY{7%|ZwzLMq=foLRGj6<+i{ zA0&Fr>pc(k4D@cv%E^IJ2hlLVEmp7^D?uEicx#>mC6X^(>DwUniBF+zpjCq*B`VzRj zfm}h%8r^?&dgIx)oF~!I(bqIp8&~BFwb`E}Nh}t9pRKjt8dV983iC;>X7he0BxEYR z(X#2_YFc>XXGNLB`yE7WMi&_4uudiISOKkm&c+!Ak8<(7Haz5f>Fn3OqzxT-YpXB| z9QeL%E#s$6g7}1loLt(KfNpy2o@^FWG>k@_;(3SK;`gw<)=p+a_jC`^clc;1%r8`j zS(}>$*W#1AAzhQ}hu$D7=Fic9G-_}sY8G1VEOSyHxv3z@x)-m59dm; zygl#9sd(eRW2H-Ih?1+aI|Fu6S{5wLx;0Ik+r=`;TtP9v-+ftLW-Xi<3NaLMI|?0G z7D!SKY5V)g{QbUo`yz8d1=oEpE^}~y41`&R9BDu_iGFJx-!;XNohDbA+fV=l%r0Q_ z7#teP24?!-J}W?B9zcfykd+)D`2dr)7MIgu0RJDxW%O0(dMY@50FueTyawnAplq3q zof8#pnkQDvP7NNVF1MP(}1?I#re1&__6ck%OfvD!NnXO&u9gf ze2{_tXO~vU;2tU9tu!=%YR^TjLMODOIM2)^CQJVv+Ann#C1qU^U2g&ih@Vb})6nhf zf1)yY|GI1en8eH4Jr@EX#X=$?dbjKV@9aR}axPu%ovgGHWtAAQqyV(z9)RIJo6n4X6q*vo#l?mH_%Y{ZGW(8=^z~Kk2oIMF zSV`JF@3)*<0H_C0b%X#l`EPY=PTma)jDPIxEZY}9k;OW9bawW73Cv+ zCrU_A1tvdg(nw^<6C6C!UqY$w#tB%xG&{VY8ye~`QcI?dY7OhP0F`MU=(^hd8WTVe z)U>n~$NZ<1v^=T6hymIec%ZNVS7$)n2CzSpU%%#*v;<9y1XpR$1M_^xLV5%sh6jP5 zrr5SxKZphGK>%{P`^eY{k_}T8+|*7yzS4k)IDp333lG zK8m9Q;{>+6$;C-YM`iSCdwUZz*X)jtpXa_0KOx1$+}hUX*_ailM8(9bE$<13M}`4_ zn_bZX5kC|$a17wG_VSlF_Jkilgs!fyBxM12!5b8ST*z;3&Tlt!0$9h}eQ^&Sq~Lf! z>kGg)5dgv8ovs0%Gr+Etc*4ldmBDy-vgSW#BN1nUgz>5V_9TIth6eB)ZL z!m*h4fty1vMajV!1w5V~VIWJ@Dh+q~We;w6re~%P*V}nd z#;j4K_4iXI(m%$E1P?EF8l&Owr@PQZve3C%vDZuar^ojx-5)F@AOh^^nUw+U)f%$l$ z(rn<4;Nkgs2Lu{e_x9w?yGH#tw+*#*Pm=%5>C>73l<TXX5oNP zUIZvWi6aL{OJtxe&jbK50Tt!9^)`1P_#z!)0ia8sYh`BJ^Hw2%u__&%Cll2dH;noZ z?+hAw;cgo3hA5J%oDP+c2>C+jNB-(EtrnRv8FdCr*pGp!=+?e&ykE(V8wp@OV8LC< zy1u`cD4YR2Gl2SRg5lILQ=o9#(`R+OKY}M7D8DxyOBEASWoJxk6=D3QnOLns4=k5n z0z~5e5Q4R_1*Y1;#J9eFLnhr56P5hze+&V?pL(rJkM>jHEoG7s76>U~C9eJ)eR zqn_ts(^`US=kUJi<>Th!Vs9mhAMZ+uQenodA%OoMu~bypclPJ>Oe0#aasXKR?ds$r zT*-m$aLOFm{_;g$sCoc@mE0+}Sx_bQhu7Cv;Ir(=$t-9p{P-lLW^PmMJc#aruw113hvo^9Iay_gVs1*8u7V7=#m-=g*xJapd*3m46YCPw=%T z(JLYBllFyM+hT@9V=e$msKXp)Js<{)0QxTwV3=JINm77ytv=15}-@t>>;=aqO6}7`SrT<5x%3(4!yN3PYx9Yc&QoOe_PR%VOl4 z_2ltIqn4fL++D*L;Nn+nR4qllEPeQ&jbMYqgAu{+q7{`t>CN|V(hZ=T0MrUpPXqoP zlYr?AaOVKsxw1Bs0Y9+f0BkIfw~z;9zmJBOak=lUgCD&F@a5D!V}{KqXMn>2cvoCe zK?xAu01Vu@eoW@HC6r6TOF9N!WjuOyAVG*mNw!Wt@@`!}+VNyieIzG1Yi2P^R=7`R@V$ ze$h>X-u3ODhe2)q3f-*vHwyXhZ@b~Vx`+xb5S4sT4)tJ7h%7?)8=CCQg-3fv*6SR= zkO0-O8CjVB7#CzGPZK@{M!=HQ8MqDz1dITl2@ore%fDHWHqrkd1Gam5n)^G7fQ_&J z9JHK1X=UJl$MEkLcEkS)ZvQc6u5bT5;ol?ES^lOM{&5(JTnZfUDE;$q^7BKtx9hk>Xc?|=;etMM>ioeF?i9`k(q$(ExR)B}^-ZKsZ zI-~0csp~3d4Sg=>LF}9VvkZzH>|619t6ZT-<$|lv6SmwQcu!@RFqpitBCXfl zTVNppQs?9H2vl9W=kivj97CUDdqu@j@K6Kjx$St5FD&}U`{V}$i7s_L99QZ(W>r)b zRL>7|c9Up6>{l_rcNVa#-`q1{B!?D$c-#EtEJ{%rlY%1cq+;?6s94hv4utBS#O+$` zMh1{R1WUjI2x(PL9+VVyRhdLcMa>mcp4RBp8;YsLcBMS53D;NC3 zx_92(Lef|1)haY*44XHkpL!jeUZ-H;7i)irs3JDi&vTSrM69pgEVPPhu8k;X9=OZDPUiHk~zq2b|$Xev+Prr8k|M#6opMnf^_THihaPb*fmUpkDZ zail;yb{>P#-W4Q6q0J~UKU-9BubNXGJn#1Z@cki}4S_3{gnY}{Yt;s^1oX$j5O+<| zXleLZUe4HxCVQ@^>;_(zX*ge$x87lD^!K|k`vwnB!AKUqTV!XHOBw=?EPBnpZO^$g z^D!elD+bbcx)pJ=1il%dQk6GOj(|&fc&pLf10R!KWJ4wJTFY6iI`?DAgq%&IdrxU) z1)GTn?B6pq8q#kSbFqYLZ~38ST}Ejf=jJ?7*wl!ejVPz@tUDMf!FB~TnJ8dcCk|Y{Bb;c5O2a*6l%Va$)+|tq5?Blx-G8T+I6kRdO@#m zP|=v%@`P(VWihEbH<;B8u;-+I4F#~F&Hy|<|I@69M!8yp%@H=UK%yrR7(q3Go&N2z z5NSf+^LcF5?O8VBbUp*sxS!Qzl&i%wNXg4UP?mjc)nTHXnulOxG;`zcUB62)bGYNq zrA~Y1<_)v3uZK>$_QYU0^mEj_-Wr%?=bR}+#|r5_lusZJiX8it8{sZTk*-OKVTfK3k^gA07u3XBQP zwT<~zTct0D(2k_^Y~3gb&7)jN&mLF3-w1Skx+p##ZXnDl z0?lu2YGzp7!PU}Lo_;vacljnT?6p>>gsJVAHqGDPyX#JCGY zBG|M>BSc1KvmHxs^RBdFJ2mZGeCpT@TpcV0hxDbeBm;|EK*XdoHekI1!^A0Ri zFfQ->SAFkq1GLZv zWrn*C7yx;Y0H}GPV5U`qaVr~@yl~&)Z1*R<{vE?ulyVa#dcaKbzqZx%AaXVnHfn|* z&9*FWZMEy0d%Pw5q=^_GMH!xZ8NJ5?0+@71oN(XdfsqBIE{u%fx>iD?xho1QjnBcs zuMVFtg^?m^GRyRK9>Fi2Q)En-vaCi?beo|`8)j=Idu7SblxFwg6dJcbIAeY%zqVbi zuaqq{g%SBC_Z@upZn{prZf0Zfw~x2o%?&(me(9z$+26Z9XX-SZX;Gz5f5io5qDFyX zKTyJVXC-Jl?-Wt*|LH<=!Qxb0ey249VKFkiq&zzaVaxZ~dt&Q)i4}m<+^n5$@wK%g z@El@}YwcO6c(^0^pp2g3{47>J0smMWUH7vwP5^j9N_XlHmMdSuv1Yn)m6Cf-s=$s< zlO7?TnJ#r#K3H^qag!l=v~djoo~+GGtJkmZO-1B$ z#Q{nejC~YjG#xogS#^0d$nmnFpJ&VT^krYrcO!v6g&3-xcV*64|2l4!*lVy7kPTO~ zQ+ZFGiQ5jrf~3;^ zWjurg!-7$*Q8=9~TwSs{$Z8O7Vc$vn!N1-jGhgxA&zS<=@uADw}WH zQ1eD^Gt>*wam2F5cf%_{t*WJqEfyS{`dsNMx&$14?yngW&F7Vk*Qe_AnYq26F1PMS7MolsHoPv_$ZB~Dh6e@D(M-#nxn1-It550~VR=_sR*t{cLK+X*Kc)kuwAPJ^-{Fv?hrom))wn)T_omYA2L{OVIwi_%@a zEAF?~?h&Vi5yDrbco82vZ%On#E=e5x@h&G0#$VptqMS<;Yh4Zpbhxr%r&>H@ve(=! z`(e&HUwAq)IMX(T-o|a|;NB{uUJL$$_d;mIP|OUZw6cLsETODjNm7D2jHDH2n1FcI z$%KIlzN~!5PUE{&EyAXI+6r!4V*QEaE-c5y&v(XKmAX^GHN|@X%K|?7V zue<)8UD1)Y>$B%F28*pOEWzK>YV?QPmu*k$j=K`jm$!vP*E{mZk`dCmZ7n}V%rQAnYdJR zK*}mlD%cHvAe54j`SRhr@MiUb0vR2F2TK$YYx)hBujy!NPusV&WV^odbk{R-6ZkJ8 zJzTlW@dyLaCR1&XC*~I{rxl&C38+7Zh|vj72kK|~w~H$GOPR2yz74{Sw_d@py>Gq% zE4JM%)|UY#%J%|~sd~nYTd!$0eMU8Q>#7SEy{A|;){kEMqc2E~D)f;9&Ch!vv+aKA z!YY?Xqxn<%omI=i*cCE(&3SYJyrFz`osiC50Q;Cu8E=Z7wLa-|yli`SJnW*k%`3De zZjP&d=q5@mIFgi+-_GaEB%zzll3#ZVk6amcKX}B#;qjr@vSx5QT_kWGeQSqR-j|(jq9G_(+AB_QHp-!n!17=mXxvHUa>7R zwrw*OyZOoW&Fibn;H+u~Y3_wJ2dosSPCgbgMv}O?CUZ=gH@`?&0-1Cd?n|jlVnDf_ zZ$ExO0+=LZ$(xPmF7$3;V31!8l}=pkErc^eiRNf^^QhCn6%v%6PUXxPCOIX)_~ZP- z6gH4%-(#06%U0ZVI_|&Cg<-M1yQg2Z0A)q54JQ9w@_OwG9@VOgb*yYnDy`%ps_hG5 zXZ{gWMD0Y0@HwT~>vg#&;0V|K`qXtv(`+|tAd`%pJAE}X#p`K~w--mn)C-JS%4tI; zz>`wbVu}Ru>{?+s1?E<1Dd%%~W0^a$dPZ#ZHU5syPyXFp66*QL{r2+taR6{YjE)8=e!`G<@j&6puV0wj?*lrz_C#M^ zh%nhzHKc6*(lJ7Bah$2!I?=o1o)ElqeSJKaciTxD`*<)P4?f|0iX`azc`mR$*SXfW zk>!@@y3d$%#FcxpX2bdR`b@z0HcJM+K3$rXx;1f%hQuJx5ZBy;$ZR==5paKFP2J@J zx7Rm)ZMfXhw!Ka&)Z6|cl5T@gh^)!N>eefiGvoJozs7mJ?#N`nAW~UV-4^zFra-aX z9-YFoae7f_Jbt2WoU?TPYIHQ(eK%^w{r>d+(Pm9JU5`i;T9;RSP1r;SpT_+=y#_~o zPK(lhrC@Ig*%SJ2SCq7w_$}|6l_ph4c2VjWf@f3Bin^ZCPh7b_7M?pMQZw-Fpto;q`a=W|YF1)Lzy$F4X{yc1^o2Z$Kl#wmVCO>%SSTpg_p-Mz6t4 z7f%RGb{jiHS6i!y5x8r?4*`Q&m7Ex4JB-bVj6QR1cZ=<9;G^T!hefI;5eJ-A!T92& zh%ZFjdvl()phv3A-OS+3&6h@jy^%m^jg{3u{dn%fkl3S{Y|iA;}C5?NlM zOdV^>h6uAqEc-rp@SOY?emSrbv#jN=@{(RH=ptjv|PgN-)ulKleO8!(|FfggY z-$kMr!EHvp;rl3%^|o`)_c{^nZrT5(C7M9`_pb5469b^Uf{y17>+P-B6)U3Gw*T>K zU7fk6R8YU|3gf)viq_Ztf$T_!^XMG zc5J@5udgy)FLWYuL!7~~&Mmek6_!=D^L&{C&$yqhxu59r2ZPQ!GGqklc-ByFIX%s( z%isU5SPE56s0v8o;*$brw|s3|jG-x9&LxHoKq30{{jdeytpBz+vA5H3H|DJKSRnWrMDLMPFMHvNWsk1ys`n;R#d zL8w22#6f7$j}a@^G7&7rPby!{i&9IHge>40FI$RvwN0SDMTGK^Dj7U|`ms>jh{J!z z7@O_Vbp6FiU;*){?@zZ*H{_@H^dy6N4~K;e?|@!_ZR^TeZSo1uqW1?AjgA|}J;R4O z*GUM~PzT(1*nwo+DD4F{2JG)i0ISW4~MzP?w7?`k_T8~N)y!YbjBqkT0SZ)sUu^U8Wz}*V^_kJlx|4bMwVqq6h7)wTFgSu-ML76x-OThH6AcTPI*4>2)C^42*P@Mp}mb9dzhUcYS$t{ z`zfs0_HeS(8!)WnHI<(}RY}C_n&ez|tPvG~BvmKdmJfke0~59uv{K6QeB7+#z0{}U zGW1Qyt}CCD4g4PRQcCF$iJcDuXc7i-U57};``spvb$Kjo5gg-fWOYka&1<* z_Wh(0Gwa=|qhdRwi5Lm-U|3l_!C4$kYEYikkE`p5-`1Rss_YE1yC0v-7xm+zjn}i980bEi9p1vNtT!_8kGYqS;DyPRT>MoXS#I7yhJ2d-gTT zC!(NUtfPa#$!vYNh&%K_ej;T|J%NI5z7i{<+?k#N;x@B<~$SA;J?C)8sF~Dxsr$u(S% zv-8bK=0uU<%VOs@Jk`B~2YfjT%Okh#>Vc-KxbWr&fQ`J!2~QDtrsJbZ4p2pT#rszp zYKx7$UiSg2$y-AOvC*Q70>^HMfU5f4pVMsfTb?^278WP4^Uc?A%5qOG&<1zv(HbvT zlkvdBHwu2s`O`0EHh|4%Dx@|?^|xojHXek8Z)ut>-dL)M8iZ|5e8q;sCj0lGba)ZP zSyMpxjk*QYG>D^JU2*wd5qnU%J)HRWd9~Uhc76U#3aTLn%e{Y}qo~ST(vT6IWJSW& z{-ZR=m4ci)&>m}D9?KW66{*au(yDN&n2ek&y{w5?=_+pW;~2gMFLI@k;lZ!c&&k@3 zY43{$lW#r1+Ds!pl#fDJhL`SBY|vDcd^Hi3<%p9pvCf$E!b>J%+~!NX;kTZ&2OQ>5 z`ym?~@R3rtTPxKGk-SJTQ^qK-LT^tzBNTZ$+ySS&L ziXp`P()bgLl~gb>$Judd%QCOOJo`SJn2s@|?#6r+6^6FaS6*|<<_cD}Tadi1T@MjQ z%#2tvcB(PIe>xC$+E+oH!}p18VZ)A9UC$MEVf}{O^8Odlz!92FB|%|9X8>AVM^ek` zJ4>>-AOW99Fs7F{-qEG%KrH1ONHLb1yuMrO4BQZtx2U!ZTbV*VsSr8BF zMRaDJwgnOQi^3vmbIiAx+pDSA9c2UN0~}5tF7K;tP2M*$LU%KueJB@6LDq_tFqbYt z<|NbPX;0o)>jgZI)dAf0UAyY*fjxW+IJ4bF>7j5$(p+DBV@3j@si68$uJL$dIs zGAiO(k*`W9t@GuE$C*aysiMw(nET}$p=7lFyyG}>P6{Zxp3w%~MLy>1rhw3YYAQ6D z-Y3uXd^{g?L&aGa8@;aAyUflDC;yda+uL9%hpFkfzqIMGh7QPl(2PCIND|vbVe696 z1q_hKr6&p(`4Wp869XlfudRxP=>?Jq;kdw7$UZ#$fi$3h`}5V&udIufD5*AmJBG|HOtg3 zr#pVaXSid!B`ay>#Oig6^~}eE!+X3VzR`4azx2@d`k`Gt7Mo~X{u*?(Ho%JGv?kK_ z*^y^v!|Ru$c%*oRW%k{(wG)8@5|dARvL#bWf6-9VMKp4U=}_Z@{pD^KeQGmYWm735 z+?%QgAJl>BNwR%o#+^5KJG@M*C9^oXqkFVcZ$H0N&Sbn0;o)__w)isPVvjQoo7sr( z+~*F$y^GL_0yf2Npw>%Zhe!sGKu$L|Lf+Ea6-kBbK+p+Aw{?JEY5>_u0KT1e>NhLC zW5LZDh3xL9ede~b3^BU<*v}VA9jTWbu4`@ruUZT)GHxoL+V}qyUJp>#!&toMC+zk@ z8zZDkU6B1PoZE*N(r*1OXq<{9TZu~jdN7wsN$F(&6-!|ExKa=lzCdIM9=xnmQDJ`0 z;JggF-%e>1_}2d{KTSm$q|o}+-{iOTF5SDYKnKO&oCfi1qnY9u4ETjq*csWlDb_mlQ+6Z5#?2boUJSjR+VG(H@iWd=_Q(J$0LMy zrALf<2RI!$t25Ob&*gHuQ!ihR?%URMB=tVm`r9@cBabKC-D&9{wj+P#_`@$)+r#iN z7{;tmKelP{etsU(@#w=g$-g}qmH`xTq+xy9NZXgil5w!=GcGmv^vP zF?nX1gMBZSIMjhr9xXKKM>rRny!eP4ewqavrUHQjX$g&OPfn@E>?X-!^tuj`J zi`kW;&p3<9X2vV2{xYrCNbBG`JR2h3kEN7TIT};ACB^(EWR8=F5rc9hy_S}1Bo&l? zDzJL&_>~s#|B!M|O7Y-hPuY>>ZvP1hizuVMA>ax#({oRo!1S8veB%lAK2EB>7dqY2 zrH3nI$S5(odn#hVF;|H?`{VH7kt=K~q`Indu0M8q-zH~tX7|eeLTB1>NsQA^ndxcG zk>CupXFIGnRU7q*57yTlE|MnPT+`fOey&w-2K6I^Mtv|^A0VoB>emt9c!VPIzQqCj z!HIKWk-Ah>gh#Ht)9uIE`QG|;#PjP0YoR6PWMTK`h$2wbb z8ZYGCWe#T?I;$~uf{}n*Mx7Kz^wr~)oA3T4eAWAUuI`uhZU!hNj+nLvFPUL?_l`XH zUJt9%)Umov=R39<7fb#(VLlILTu7y z_t4ewrW$#il?&VN<;m*c2#KkSVH8`(?O)Dy2RDmz1|Ll!*E|bR85^rC4(}xe_#=a$ zKJ@F3f(t)1-5mudzj)Jd^o7kCnF?j`Ic4IiF+M}YOUt)!%ZHyxG|dffb_D)9(UE`r z>D|Oe_Q`@T5E@lf9O~*NdgL-YMtw4}&CS=vc3o)h=b8%odb4jXG2C19ssJ5fRv`7Y zOIs>xuti@*ax8gDL@$(wX@AxBfS6kvZncytejI8V2B3Auwuj(ouvv~SOEtAbw ze>92*^0Vfn6N0*Cy${_jgWP-b?x;XYKPl>pp5A z7Ep9^bwxj$>gIpPsoPk~?^w&>*TmB5G8^{$4;IaGnC{rp^c$G}*$?T>#j&@f^rNR0 zfxYcgYt7Qd~d6Argpyk>lnZ;sj9S)UJRo_ z&?w%>BAV>QiT(0a`kaaZgLDv_<%ld;p%V;=UhRU#I3!t2lS$HUT%BsLDqJ1?sF91up zh(+s887hlhBC}2B%2U2ZIjB`?{LDKlV*kdx*+%Df+#*!bafXvvS=nEp0gsHBCx4GW zo9JKmct{mtLonAuoE{e&5MnoekUDgCOJ`0mC>o9_RE{atDe##(tarE`?;ef(6ffG1gDYnU1@d>KSh+Ljd-FL+w&JY!#)t!@MDiM&3b!=2rs8= zQ^9BPZ?S3WLOpQ{MRqva6NTX1gJp^+l=2|! zx+DfMXYS%y{|l)Pa!ZnMst0ULgtqVWik(?Z(r~{DRsB3`uL})T8c>Z5{S;Q+`Ae%H|;7p8t?nBh)pgu4CgzYRg2#jP2`Kh*x#0o`C8#Z5aXWLa##J|N^$gaCb4**~k&5_a zN$LL-=0I&>N%i(pT>ataWVUu9!em(L@7PWq4}=ot8Vk+*x0YvOZzHP*TgIshqO>b` zSx4A97a_^wP)Fv!r}$Mg=q4lF8+5>YsKSRBTx2_M*O;FL1ke-0e*^l5wUB=Z2)hrZ z^ZNeh&Htmw`~O^v_j0sZqt3o{_qcQJXsFcwj*EFG7UN?JCHc^Tdu+UsI%JjTr)dTm zi60in;47)An9E`qC%37cL-7CBI$q%YJyjoW@7le~%r7@aAhYs)0T8&0{7r*84Of^P0xH5CPQ^G@QIz?V*NoLJL`I{3#2dRL6?^0tkijYC93hb4ZT zaA2`kJSM{=e_sJQY^B$IAw9TrN%W<|=tS$Cc&9;uE*HS4iQm#JmNwLu=A~kSLqnqX z+7N(>A|YRod+N=Ivq18Lk0+%?xhsFR(pg_+U~U+MD(9<9M`iUEz5tq%kceaj45hk#yrkBa_13@HI!&8=dGlpO{+4(}1!T-=8ywy`X1j8mIrx?!UszjRjjI zMk3l}NhKxv@l?`|rM*|~CO%iD`5)$)?vE5tE)ygqlwqvF`$kibwXcO4I?fyH$jZZ&?3(svoNt_Hm6GJ2IaSusgLLs2M@7LQTW{$f;G7SMDsGmq;GOe>GiZe0`i^e6OrDcuqNU0LonmP;`@aQE)M5k}E~Z)$A!& zr{QwMUb}^L2R#kx_}-qDtvAPJsKUB$);A`z@95ez+kG(0@TO7czd=gd!?58U=?R+v zpkbw}Qk^5BazWHqs=TZHBL&%k#nQwnmfr9p!r5-9Si&l^^9LFjZ;&k7|9K05*FIgq zO(>0m*`IhLEW{XHThI~v@ey|ukV1OF;PasGP(|zmawB3vZUQovIMUjKXLrfCgwa{2 zFWub->tsp%$DDvi#Ef2JnbgAxp^86Fr7ud&_>ZaMKl*pu(~pitQ^H?`U2U3<-ZQ51 z{X}Vp_MiIU();v1PE<&SEtKYPc8;BOa}-sF$C?Evn+FcAf76UV2hb1yL$_#kHKb{!>_T>O4}?8}}%vuz%sOLl%9#I}@#(j6bwM)DhT&J^G8T64Z@n zOC|JuKX{3?ny5r1o}KLwbUX8|P%4@h@3MuMnK3os;N9$1x!3jK$0MupEQJ3pFs9n$ zgiV6@IBuHQ_RO=A@xi|RiL4Ztol>x7f>45|)E(4k_IR{%YPF;u&}y9`n&$6(owPYd zI5ZaTa6zXxmVO(#SfAyI)_VKFrx~aB@RQoat6%wXr`hQ2O7iQAUfrlw(8rLi&68)h zr@j<=z4ma6w037D&C46| zz=kpLr{Lg{8aH*jD~~NZi6A2!xYS@u8_lkQgDDK;u#^4>$l{*GYW;$*n@Z$teg1h( z%%y}*%M%$NU(@&wE+<>~VOBL%?0u-=Is<8?7BTqs#Ke^OlI?#3^2KC8uR#(S)wuzq zDmEo|iZ2A{hLiO9v$MuA#+T3~j4KzrUBee9cYhU`TkMu?t=Xxaf9vmFOMdag79^mnEXV@CP36kDcf((+dCR4h?+2! zfdB&nia7yfw=X{DY_IcnN}OSxr}=u2_tgn%waOWOsEj12+7VC(i{%MBe)oUBX|QfJ|7g z%3>pkyea)*@5lsb(c-%TMr?Zafcj0`W#9dd9N>ea%Ek-FDNq2N(q%kMDK!s^$t8lO zl~kid_>C49?2D+24kTry3e?XtW%xY#%#a8q0i!|)Ojd!c;KY4#bI;0gHd*0#6M*s^ z8XwNHTzF3@n=*Jo0(rPlh)mf|7~Ur;ZA?&7$qtuq@5B#K{JGyhKupE%e!_@JMUhbQ zLP>2*=}$Cs zBx#-+K`TAz0ckHKwfoI176UzS-8y&b?5S@>0+*$vfQ+6e4%}T4!D9(!ED>oS)Y%aL z4NWYKJ0^Sk;8mXSbNTf;9BBbB0mvuoF#=2#xmciaX?geAbAJ6(O35KJG)$bXf{?h< z`_Ri+jYu1dBi{9Zq)&mPeieE71u?%+B))tBO9|#czL=Ml_Pji=QUM5w6PG2`g!D5- ztY3Ep&{86bH5fVHb%HP%0~#KAJW-r4wP_qB;7tsOpcdla#031TLbl7McCtO7H-JnP zIy!>`3P_$%>W3$~TPtm_6eBOV*G@MO5GwXS}rPpgf zgWdo4Rw(>8;!8RpxYIs-0Urt;qE)oG(et8dLtG%eOqVPx4wM0N-QQL9;$y|?K1-h)U z9nCmUI9iY*EVP74{$r(`I~fZbdn3)3RhDQLg@0lvK=Kwgm>?Z@2v8<_@?sI3%=E-h z{V`BB_>WD;ivv$(+ckXOCub_}sC{L`gPWhLcSnNUzTI|lUIHJNc{1HL5hsX(d(^p}wZhYA>w?vPJYx$;af z$V9y<+?oeg^=-}@vV6?OG~@bB@O$wxyZ89Rs*O5>F+a^>3?8`$$scv_7u!=(h&m?_ zD!n6ncKR4HR%P)jEqc+g2gqy%$5Q;C(T;Boix{?ZSc6%gCx_U73!l`H*%2E9>78m@3;6ECuN+V_ zKsCdv*UFO9`EsDb9_ScxY;G{IUixvje8Js$9+1Vs1Nz)8b=V|!Sz!@zChn;ih1kn% z;vEsD=1U84HrX%pbQ)vg>35iX0x_2)(zJTA(Ln*o&}59{Y;6aVF~HYOS9$bSg+wNa zyk3{T?;Dk@1NkkFub%JT26n^f4%0-NaJ*F)d1>9^Nl|Km+|_T=ovDx5H!P;PsJ4z| zj7|^aIR0||+h*P08@FyfmKSt^M?nBp=k*l7*YU7k{pwE!2<4N7P^=eMiH-_;12K-w zL2gbJwZMB7sy%Jr&76@6!?iB`xf29GJKU?mpXAO2f6(uBCB0-YKBF2!!9f2WMB_pH zRkN1PX~pbV>XdS+N3y%fdj-WIW5JsG}}{_l?GGtX~i*+JhK#Vg}kcM#*qxWcWD#3 zwi7yNWFqh%;QN0sWW(kq^5}JfFbN;5K3AYaB@t*b2YR<$J_r)!>8p|Qu-y$RcXUxQgXAh}Zq@O!|VA`hZ=bBrJu)Yf%cA668j$ zNIQF2ui}-fP@}kmTG0BwV5p>Zj#3f3r3s6@u|R~wtk{S*sdSddcbazq(b-{yq+Fmo z004dq~xb{T*Ww3{KkTxW0GUE}KEQ)%^A`r2lt_Q@!f|$WF-}tBEx)J%P&GG`!cG}$Y1^R5L&qILpc!=KFXgz{h#6!5`^9C z-g$)1uZAdT&+cO3L4|_P+M92#!r?x$j$!eWW-$<&%JI4x!t9(FKcW^C>b+(0+SCkjEvDGiw&5k ztc3&_GhHCW*O;;jzYmg|eq-I+mV&}HxhV;Aaa)NZA?3)V!IB{*W5;Yi$u`*_JZn8> z1pIaDFxI>hwRL4Ub;Ov^sBeM ztxL3BkGBqZx4n!%dp%s5;ZxH>$co*zB;O91&9X25OOVL!C`rz_=0OKOu$x8Auf<)TG@WgpE92vs6{oX7XxU}SHrTnBh?y(!IGLyugCcj;yy<8aK9xe4C?{xZkN- zAP%zq;;6Y6g1>xuj>EtV%E}Vl6CBNH8V}OmMfnsU$e&fPW&3%nuxYX08*7E*+@uHK zhtZX*vDtU`c?vq;7(J~9khhP(U>x^DXBmR!NR*|Kqh?$Cdr0}J!r{OmQQ7jyPa_R+ zpNlwuPEC;q^lhy-#>dT#6seZEQSg730vda%N&Yz5T|w5{+%6?FeI6Haqktwy3?Av) z-qVH;jU?%ihJol8`dBmkn&3!dp&*~^sX3GH*n_Cf>MX-lX2YeS67iW0yIrlX<{Y!e z%3C)0N)~Z!R-Ka-93hG6b4_s%h(;ZKHKMgy8>4<-H*2;!(9nHNzad(THi$=}s0&&X zd)BBe&Joe|vul}om!T(LC6?2+OT5B)ZZy+iH2U*%0Q6DpD$=|+XBJTd<`%E;FK+uk z*k?_*AJ8HRQ;{pS3+NcXZ3QW{4Vp^=U9ymA{$xFL>*UD%)cD3P77nr>blzS)N-h4e zV$+!t>hE~b;*CK-PeM-)*PI`lLew@?c~vool&Y9V!N43GUE}^7_3y%}3A#(fBCeT2y zDIPxW0saeOT)}jqg73txrgilDd2QReA@4T^bnjmiIt4EIr035LbX5K_T45zev3Yh+ z`=G7hupYIc;Oovp9jwLdbb8*!275AI^>c|^8mOQE^c9MD{SFLtAfyor4qn4cbOe>V zI$TF`0{y5s9YHS>N^6VFyVdSqYG1x=W3#rQ)J}!&TW{97nknmEIzor-=C?ReG4VZr zW{~~Oss*&OA?NIMXMIvK4&;wF?VAa=*miOW*|$No_?a zPD)aijF|SR$vaC$HG09U0F>Mz!}BKN=Oo~>*b(ktI-i4YOCl7zTBgSmTw2*24NK%6 zO3+t7fIrk=JmcbWMq}eS_Qgoa1w`s+w;VrN#I!O}E6?A@z`5ET$+sM z#ZQ@K(YtdC3Mwr?!QB*_PJP^*lV55suM^?6m4>eENEVrTg;7}&TIfD=8v1&yurH}M z_G87&a5hi`o3ok-vu|uc8nf1P;BH(jT6)H$O@I|X@No5Zw_H>U<1T?=7s-Pf+#HLzwzv=r3x6UfZbech9mPt5$xGw~K}j-ojwU6`}`CuwpwC*T#~xsoI7RNuIuAB9ut&!>uUPl zA0SfTM{oKhYW%M;yKh|FMSN0kdlXcAxEQh_!gF)e3VyU|kmgQ6a2T>?>{YQ6^GrAv}& zNkPsQ^0#R*Z`KLs;+Aw! z$7thi;CYNb_gfmI3QHu#ZlR-4`0Y3+DzL*k;J)eOHY{5e>hkeV9VQ*yFLe`;p?>8* z@DnqIP?X!+k?w6z>v1-LTSSU)UWt>iKMur93XSPPwFV65p3Zm2>{rwxX7M9_);aXO z)>)}O$;K**(o~4TkB>{Y*1^1RrE88P|9Khqx6ueT;~KcHgBYE1AuszQESd)P;AYY~ z>LT557SYiXPJ%ZUg?r_!wT~d+73w_BarxF!+>7kc3+~g?mH?g*^N5MX`B0kkX0y+vXXQvG2osdz6MBS`QPW!Yo8_coNi#P%6nQJ>^nRZn7$VU|kC35m!m zT4t!yhm}7k*=g~|_yPak*Up$QTO085+wVg=(pugheeZW1)lhyqKL~Va{*x0|A~FuV zCz-%S>86XPOEXk(HRTS-gcmY;BbXVnc*pD75nM#8n4ETMd9oK&o@xDpD8`E-%wwpQ zq+)?G0>7;7bZW3=#Z2%km2*{^$pGCL|F=MMr8uOy@9RbD^IQ#4ZzZ62B`Y zh=nu=QF#m1Kt4-D>4_J8v05uPC6xXBaU)%$HyW6K!u0UitF@65>k>T1QZF|j*SDa# z{%S07lX3>Gc+5Q}oc%BKwWaK9J|}K1XM$7h`*cui>H#xsd@jp3T2Wzp57@#mg$fV! z*a^vhrYpxRDS%+d{X5RcTatm@8+T?ThfBbxluxZMrr*P(o!$RY4Gw<&M9~4u2s#r! z2F#o7ed{J{RaUm06wmcOl4KTsRQTh7BCToo`HOU1sht>hgBEasL&Rj^hh-NH--;$I zLUIwtbNSF;BlMI_*g0>11p9y(@I###oAZ>M<8f_m>XWJ~&Bns1ZSw}PfD&YzS|R?k zs?e|ga+tL}I~3SK3X4RM-mf{Wi#=5hZqvq8tn8@*WIjJ(ZGY)lf#`M1Bgn7*S*u5Z z`YLi*FUcC1E}JzD!8@vS%Z8B)e%Tuh($dfyi8fA^X&l1DaDR5Y&H|x?oO*h z^-SG%e`a~Dlff#FH4HJ{XSztl?k&vkhpH8IE*qC55K)c%wg;7?-fQ~)5v`9oyv(pW zb;#+_1GdOm0oom@HC^ZDG5%ft0_b0{v)GbBupV?LT>s&74zq*#UWUN-T{HG)d;iO6 z%%{ha1I|&ou!yFAj`tXZf?lxrdfiiqDFuW=2-nuPx-mc}Tb}rH#P_0ImCNGSjhRMX zzxyS}XFI>eE>Egu&vt?0;dAe|Q|}zA!WrSW*RCJv0--MyhAY3REr zHiWs-cJKtlbcf3v-)rRa008+@RqN#$a&E~=4M=iXp{O^NIbIfGAd{&pZoEDKVd+xJ zCH;w4Fi#qRRR|7SLZEw5O` zP=Ac5u1jpBKj?QNo`sOlsxQa(5u(EDj>FrhjWEPZ@AH1-I6j*cm|&>vv%wqG6@E0^9Zme#E7=Y%V452W~)=mjs#RNX{L1*R+cDSG&%Y{9z zr;`J`Uw+^LD5#1RbP znRU^KI&dIWOOm1HgqbKn3J$D^gDoJU* zAWlO=jFjj3GJsuyuxGUU=`rF_$8fVy%u%uA$3oQeIjezge{t@Hc>27kdeO3?rUR4a z+}vW8{uKCv8yQK`d7>oE_5Oqhi^#TL6eQaE`AOF%^X&A;u035y%lZHK zYI(cWko7tWnH2dNE!&j!)0q?H`kbnSv1s8Sj?7>lmKY;P(2v>YjQ=~otAUnY^yqv$ zo)(W&AbJTW?CZwA{^IUFagF0*TaQM{o*9LNSExYfUsegrqK7_`w&nFd zcYGn^G0uc-@dQf3EPcIKIy;)&d&5MPE8mZ@Z#n-O?{ig?n>O5CP8G$m+I#a`F3Atw zFbR538dub}2a=*H+p+Ah;Y^zTJr_%#T5NP95@9roo zo1^XG1;5&0$Bd7k1di|@+#yFGBpSsjCFn<4!|t$A^l*XxTP?$$U{(rK6~XCpN0bM{`B5vG!rUB1rSk4nz| zMW(F#V0eYhv*f*vkFeecn*SXFl!bu8QPO5;Ci32Ce;Mn2`hMLhU!E)h$7=1!*n=Cn z;INZQbhcMiBH-)`kMdr5ZvX`zw zOZN?&Up8T-aCYt&X?FVMU@`1_O2mSkYAa*IWpvu4u-~L&w4hEDfG5tP(A%QYf{oG^ zOPBw|5^K zx3;@QcrsIkHc}l)J%l8_831p@{qgA*rmlcwzdyGFI%) zw0ctkei-$3N=&d+SrM&t9QGSg*QB(h?|Bpjm-pph_29#6(|Aq_i%+|Fu}*QSaq>3Z z{wd!uq7#X7jN`LJFO}mMs+QKRX{$oV&O` z!hfHTvrsUzD^tvqvavz;ER$(td}{a6q@ilwtqH`}_^CEd8)_aFPx&MhF5~nJ{NiHm zgihMpMgW_VXNX;8|EE+QXq_q=$e8dVgAIexWM&Zx;K7L|YN$|Yv8;YA8vmi3iW2z_ zWN(v2EDc+buY$hw%*J8BBMAxRI*w3xW+=y!gqRU7KPP2c8sI&i2lKS!?U6UE1v{SEu6(@PnffC=~0 zFbIU@-mmI(xiU2x1!f5Ib%T$1wS@TiguL&Jomy(+_AGC#oD#CKlpWLFI(BW={ryYw z=uc0{7+GG972gNBRyADyxy<0mg%ao*IXrwqr2py=FEgP$V9oD&7LYWOS3WgQyd#{J z)=)^;wT1rycA35=Y`6w5NRZ`aL9SUDsH4Y6RPE)X0E+(jPRRQ0q8HPvHb-5HEQy>E zqVk`WU!Ps}{$vlW=r(2u*m38=%s{dZfYh%dL z$ifEylH<$WJBlgcH|%XKjcureH6<>5RI234tN5W%Lv={0mcx7d_N;m>()`NO*j03; z8#%ar!ZGVwMj_jF3=ht>rCpoOe&!{%jwsj*?W%aZf3#(4`vy`vFpd7T5##jDDQsCP zrV&>Wn*b0Z!k0A~dtbF=r*5P6QybWaDy5NBS*ZUR(fsJJC)2i87%ON%uvRAD8C>~@v z(q~_#;z$+64PdJLzM2|!k&{)04*@Uw*Ok28*mF$uB6A1#6&=$V*^ zp9oOUB`-e9OJmZ#a;;>3h-Z~&qVa!y<^0tCP0Fk2@Nw13#=}mElJn0Dlw}2$%v2JW zkP<2Zjg(hZms)u732P1zV=44DO5uFi3d`F&R+)%_Te2|Qm|8=4cqF$Yqgl9{I#Dx@7xQC`C}-m(#LX4JCSbccW7Gic%|NMEB;A zeyM@D(<52fy~SMdKVmriATo1_>U}?s=krt{P5WCBgy|R7vJmzYStvCB^Kdk&n5Q*X z!%lunVRpA4{dCi7Uo0%|kB(lqF!JaW7`sefF#G5N{iKaejQjnA_G5j?;TL>?0M4Zm z^50Fr{6O6EP7KmQim_$;@uFLd0dLx}J&(sdKzR!aST804C)eQ=opcPV0}Jc5eVa)r z7!d%lB&2B8W*gpKcLCXf9xQB9|o}EAj|O;epp*6Et?cSG)w7 zW5Bq}G_`eW`0fa}ZE9E0_ySJ#8UA-wj{r0hj?58ATwghS9kBm_j7LR(b*dm6)`k)W z?BAV$+cQT@`=t9Y&eKjc64qUjK;@>TuD<xx|FB6>RuhnLXOlmw)5GE%Rs^T2{`A^`{UTT&p3sb7oxGF_vX?Y0!mq_f%ig!0T4=dP66&}YnjC(`unGQ zPzKL4&JEW3KYgl^2mRHPxh0Ov?zP>Qnwfe^HLW)ZD-%Y7(0u}gd#BA*zn-Hf_BQ}I zgl}QlBVm}i(%v$>iS(umA8#D=CKv*HbICmAd*y+oa{zp@Zs?n#Dv`ZNfi+Rhz&UNj zJDjSzI?(RJH3)PdDlV`~>b175NbQEEE&PP(*s=N64DhMDQq|aSeBjok^{OVA@>%I zNmtg>WY7t(GSl$i#O*h6N|=Kbz(YDa!+Ku?h4T-HvEH?K)v z`6V^cUqNezpb^#eK;pn}R+isx?I)9>3|9=#MV-SoRA`$*C_d@Ys}y`>D7grlnNfp7 z4Vl?GRf@(+#Jb%{9BZ$g{BwH?G8A_#!uuHs@p`9{#S9=z_PHq#5RsXaGoRjppTx%aV09Z+~VyfoP zHyf_e@Y#QgJx8%>5K5G^pLuz?oUk~Sq+~Nc;)wgVpLlGgThW%f-~0g&s3Oq;i${)% z#xJlMTV5$^uS=4UYA=^|9$JMh4l`DLP&Z{ycUTWxFO1C69qhII+F+ybIVMZ(0j zj}|8g9zO0GXl?f;Ni%%X4Di@y8Z>j+um0(hJfK?XW@lyhDOSqCVY=X;oc+QYxz2Nn zJcfq`8ThUsIVd7%(nBR@c?k@vmnI!Ob9!Ws(L8G3v=V_l)fo()y`E$GhX}RZW#*}- z<^^dl=kq%nL)&s%%WQC@{h*!Psq<|eM{GL0-tG`Kdgo6YnY8Gk4bvUl_kJ3_M_HP3 zx+JZ?Dmll}0tb0mdeWBzJp^j2T7@T>T0!nzNEoS}&IT-U4E{NBkU|-{_c(a+Uj8WK zv`NVg=j9(m!91T7#E;KjoM+LW9){N&t%vx{TI9=rg*Q&TqV_(IpBUT*ow3=hI5VKQ+=?ZPI##oSdxQEgy%6H?pWKcfDL(u6R5e>lkV(qXt>q zV8#kr65)$O zm%oXV`{K6uDdotir&~XST|As6th?4gc-`Fjr4KeyFEF6~J$*MsEXamb5W$!tw%rx+ zek{#%sdjD~V5%sD$JOMS(fdV?p~n-tK%1>6&$_iSwxqx*gv*d5(FPDt(|Vt^6{!tj zhQ$0F2^K^`G#bZ5qG>;G+V<3Ke=3T?*n#F5j+i@DQ&c?d#0n)MI||3#P}RA-q&T_m zd`Q{Zf}r1S*wqFt={!c?BEZ2RF_NEK!*OEy5+g~e5Mt0`s?sk1 zY{#)}5cO`1&Vu5z^v1@VYRy&)0e^gNG`VSm(2T0HUsi6ioH%U%zIkzm`gHX;b2&)G zb88MPD;<+;-tq>Na}9vCM00Cu%^P@5_ep&?}pAuUl2=V5>BCh))O7p!gw z;(Kh9?Rvcc{?S?g&eHlF3d$Kw7tKU|ebLT*hfTuyvjRjWf07kwH4#=N%j?SJ9!Qfi zCNRH>X)$^+<8@_$!Ef;vhbGosBQE#jZdg6eiN->;+1d)1C&v^2}Z7MCL7So4kX5(Y!9CX#gr{{k^huiD^D+M5rH2t1P(NOcaYAHO?O@CwZ?#$tIB^)+d56(*Px>T zLHoeCo%jl5=lwxdG{%T6%56q{_MnWqUf_FWp|Pz}=B$(Y^aDtfx^h7StGH4_h!vSn zcnI`3-fuxoD}J;dhtKBtO&9%e2Y|!-;+pID5J`TS+2Sr8PC?KapD&m9ny514`EJa9 zD%8Ie`!PgWuN}?A4s%V0AdG}Bqe30iY%6{9YBX+YUIjFOX?Zc6Rd+dKSEn-D0n60G zj%8jqMp|Gt-d1)Z?T-n1o$u|^WT5?RrOydjn6**1_M)%5%rGw6*W*}vGZ3q_EMdAAkXmi~4O%JjOcH53Ty*rfI_7JZNLPJsmSaz@EEQX7 zZDfM+OqghXPTu~pO7j+5?Zc8hWlCI9j|<9rZUAk@HG@vd!PrJm zB> zw)LYkU=nFHY=47ov$Y4F*ylYa1D6X??z+mt>4Tv@VP?$rSF6+4Z5)Np zeY1)7!>nNKfUf~IDDtT+yTizM&Y+mI^M|wA&Db(aY>@IVQY@9kaB?4PdEIa?lT>Ag(>aI1qxp1|=TtJ$oQ`TECQVyocyL zpcDL_d_9vI-sN&Rs39mZDbwcuaByWzQ8D1ltARNr%^CmfSiEKWYL1dq8R{aLN& z2{LXQ?Q2kgL7d(pzx8H(ztAjOg5A{86fZ~R(%gN=%Y(AwEwv%OM`p5)B?Rf$re&pbh?45sl<@gb^6;A|e8szu@@Ns!}3 zal(gQxh>Duv3**$>XH&6Uepv-K`gqxPeOCVOq~z)W`comp^x9Zg>Y+g$a9ot|Na%F zUcJBfz$DcVe@>}Fixxslh5N`X=dp6#CKM7ifOnphmnAWECMm#ta>CTq+_cqkicy(+ z`zKX^9*r~gv@MBab{yAuIX4c?0BzUoY=^i$WS*K9y|M_eX2!(!S4w>nM+26zpupqP zFOH>kX?`hh);DR+lnRbY7y)r1IkL0h83jMaP)jQaBKcsN;Z19(5bl-lx#c*K@QIAO z5p(TA)Y0uWZrTPK(T_&Okop2HQ>UBM&eDTB*JKwF(p=>wX8PP=Yh^KtnCT@{V7-IE z^03Fv@%w0YH1Pz3!s)j#5)Q8`xIbCyz4v8|*ECq%e7er{4NMu1ELPyc`m`NlZ16BH ze=s)&f~A4_sPK&cM9}2?sjMWN5P9|YO_LG;18Cuazg&LpF9))g>bdBA+x{f2|GIv-h1t71VWaA(j)>A(r5QyjQP%pdt5iQGdOO)DTzQBM+@6&5qrLe zOf)&aWR$rK?P_1l`!(tszlWE?pdm&zB}9TpzNLz{-2-ND!1f1sp9VKKE-1$vI|%uD zS6|zxe|Nnr`^^80#@xC4nlyaB0)^7a-gvcPXRZfPrM0!~my^nFjMM|P zl-9xa7WPgO#v~76S2j-~MhQ?~X(flosr7ra_yiN(W2*)co@2++(y5%YtW0lxqB$a- z2FnwEZu{!e5}_YOULHnR;{Hn~`&mHJCDqgrWA20R{ zG;Ul1LCSXPYUg0T>pY(ub2_ONE&!v*9bmM zNeDtWgr1!B2%MfCbxHkdi*mw1GE-}9(S9#iwDlIsdgDdB?%wHxV97t;0D{zcd`AJV z*P}147h?y;>Fa=3O-u4m+Zd+ty>OtkvAd+6Q99{3ab!2^IJ83LroRxE*fE-Xh$ka+_S(hNO6XL6TE!PzFp& z;=M@&#Q-r(YBWN*8Iky)&}*t*OX0~b+!CueiGu@WEV~%zr)h}uAvCGnMSRfhfumAw zlgo^^uZra*W;ivb2`4lfDB#p9n->8Lm%4oC!$?ia5xR5Yd$O!<$>M<*8g+ zdS%+w^@uqCQppTT+{sBLCApk?a-+?HDX`ITm@j9st4gV~fR#REs(4-*&S1VPx(N0z zW2e2|JL2ZWo#am+FueKB2BPlvG__rJQ?y-wm#e}ok~Pnz?Dmic`3JkRYJ;DGjj6h4 z-3s3<-gVPUtKc%3+B&5XoK2c4YV}I0OK`H}Mdrey%qrvE%BtFpQHIH~LMucjMH~N& zW=6gCri-`NQ8Ntf{~U>3waLzG|!W!v^Dj*Ww-dAjG^5xSN@( z1#aYq&0W49Tn~uS5R7%S-vQzo2j5>p9cK#%xY6c$xV@GfwPy}E6>DlNR$}#WW(l&q zDP+4!KGoGgmp4YN+3OKTzP{y25)8kQbrZmpB{5m|MLIlkkTBQPUcY@NC2g9Fi?*T@o2S$$;+<7O3NhB^wIrs<9IG-dfb59DamwETV)6;)omE8|} z4j<(2Y}#8#jKNHYqeVGo#QJ|@B zIoNJ~JJg$~3wO*6L&QF{4^cvAPakBhF-M6gh%vU~2TMt6*b#tY3UQe5c>D~hMbp+d zr@|k`Y=NFu7dwxN-o7z=$=jjWOutLon#hd1z0tC4wV|ep9%&Br;ANfXEe6KYY#fZd zL99TW+9N6&dGJq0$Cxy~!a!$-U7;GbWGhf+Z5r0D9z zH}UeQA;Z#nboG5v>nzC~H zAV*jj)V}|>{;viTK*E7ZwK@W8eV7U%saG6*@nBB{icAJ#ltiBqrd>CXWE-L zuUE2P#WYB-n@!zt$a?A%3${a@{~o9>J-zsH*R7;?6ZS-p9I=dl4xHk|AfCx1rB})% zzMxR;%5hNRuB|Q!@FDtwku5qPr>fbT?8Cw`w0>Ohy3=26s{?%as(4cy^1r6)AET8Q z1dAk=8KYXY>UN8w<&&&H{pKxPYi~I0h;)*cE?e-Y*sz_XGKy0qN7;VWPstTI^CRm_ z9f2J|qTB-3QoWK>iraHYEjK65LbH(t$x%n1O|L3)MINDnFT0LfEHzuv z41s?p1MWFa@1A4OqC@W&f-oC9$d>?Qp$TTI;1a>hGid^^MU`*jx*Os2OgIL zDq{%(l)dqsk!2WZeHvmo5$E(w(z@o&6!_G;&IWiwur?ek92)ywhd+wm`$Vwbc10m4 zM`1|1-3}t%8wnHw#aGa{jgbUy;PJft?0r3@(ZH2%yTrV0?CHsET7nk6oaeO4&QTHY z+kZa$qbuss8KQf1@Iq=%A_HpF)ezneNcQlHH+63RbIcg!K7$aet ztX0A#n{y2JTktwrVV5+b8y;i6(CW0)62$VCK~!>$$eQmhaH`9?;ef+Z5odo zaIy#J6mTg|twf40>ZdPsG+zr4eTCuGGj+R}mEFc9&Z>wYv{R5=t8h~8S;u@nlwqp z#u6Wds>OYK6DjU@mXllf2E%T@aNAJ4u5@KAtreuFQebi3FZ~ef@!gAP8&*QXVkG3s;?me~4V<&25LS?bf6QQ5Rbi3VA$f|9IhbatHU_hKt z3Yn~^B23k~=Wz14{=YMC-u&1ijZWu{ka$GYx!W|r4PcE@JV~he(r#ry_9B|TRusza zXl*QaDe<>17c?_8rrTSaIo#xB_ZV9o%WD1G*%$dpx4R`1{Gc@xDu#slvSNmGbJCw2 zQ512B58jhUmS3&S*N^Jwg|A3s6*i1ZtHR;fxpNg!ha23X=K3)GrIlQiaW)vd$u zAC$81#?Dl-f5~cGmklNUq|Cq+CTNpgj%wB5EC93Q6g=}7wiPA}aQwk(~TxLQL ze!yJsx>f}zu2%iU-3kl|9{aCteysb3%?w#2K%Jq(xb~%u!&TY4G|5C7(a6-Sr*zZT zt8g)#M*=QoohHtZ%(Y0cWQrEErnQME>dG_crkA>g4C}R|c16qUE2Zxleako+;4eZ0 zd|$AeV%-iy}}WqTs_y!(LQce6SAUTJGcAh0hl_aVNi^Rd#A`~^?8jqyJ& z)VumuFwJJeemt8z?`~eYJPw9f{7m|DFxASE|hm;bJx@ z^1x200*tLDQ=+zf?Sd=ruP^}k*BJp!(&1QY8p?3s!AFWe|Ei*phX~loJMKzf1K52XjWum_B++M5NSJw z?y~`7#B{x+BF>V6H$Gy$!5ZSnVSj#FA6zeS+=i+}!Z5lpaycy%Q%PG}I*b4a172n* zAT692k>xskqT(P{XG=cYjWgG(CfwyWND@d-_=Yt7t0j|qeeFyiX1rvnlXzp3g#KgE z28B)XRhKxtfJ34MY*SZp!SB-Z0(R_ZC4Z|7I%Gv3oertKCl_YPyF)8Trr_a8gE3;U zW298&5)>#SKwG>m5|r2lFp7L~YUG@$aU3 zWWx!UqR@FP@4d)nMGJb8K{&HYuzN>-lc7w^41qw@Ra8VN68<5qA1cn-ueD{26Y;1w zR)m7VdS>cI+rQgwhnTG{1E%)~)$_+gFoE)q1?&5! z(F9r%$QA$HqCJdgB`7}KcXJa!K;99yJ2CT->Tt12{03>0z;T84GGHkVGc7i`DNm(Em)3RsStLIYa^kLiB*4v+V^;)@XTc zyKg^K4**{nFKfwn(xR=psEr3yljInTi-yaX!WDcUP+88K65yx$)|JQ9oz!w{2O1L* z&UIK=d$@bp_W0LbgYKFTpw@vJXKO*B^TFsrz~Q*<{gI>$ZX4`fz7J^KjY=b^5(LCT zHg7>>0lct+(QYv6G(- z7h4p0iHA8A!Qhr&@n-eWe6#a6uE?-~xROg*OLh$mqMu7e>0ZKmqD{rYa4GP#40K2A znpd!PA9F5W8k8%(^{#0DqS&(2JJPd1%Y#oL@;;~S3*MG{s2U?!u>!8B(h3C9>>0(? zoMfO7aPZI|%60~?3$}SErkO>Zcw+O>q6}S;RNPKiENePflU<_XVV#1xSblOyS2+K3tA;C2uA%Kiv?IGrJ~R02n^-IU00HlVkezin$&Be0 zdprqJ^2Q2pct^a6m-qER<-}19g`@`Rhug+yle@8is*H_BS_b-p9$StWRClcucRjnr z3eHpJ%CZnFV>DQb0kXH3C_^bjog{$n)JUfdlRZE|c+1JnZOO7$@vDYlx`@a8Emc>C z8To-i=9j|mce}gL%`h_d!+g4E;TL;$_|kX*d-hFo92AUz}8Xm>3P(-X3!*%}|}e1sqqtP}@_yu=qMPwbJv z+)2m5D9RViqiRfbJN2>R@SO2Rh0iR2N5W=ef)w21x`8F}oS~{h-jAz8oSZZV0zQNy zk5E9i?{5=Szv!J`MX`mi;bPV4*SHlrMBmDYfs+B}ilH&(J6GnhX6L_Mi2YaUqnSf* z*8;L|JC8nf<%EpcbPdK3_XLa__}^C6xlF~sBx7Xtk<$=M=XFtzrBzc-J6>Mf^-d1q zDOp+cqS6nO4mX)&QYRV!!=e_FT$w_NUC|a^&)JnktP!R!3KV!vP$dC~7L{poZH&SR zuOZI59tMR6#GLMv)ZMo{DgS#h3~Kp(V$MS1`|-w7OS68`V}t{3f^?BgS(ooMgDXtT zhp(%%AhOaK19WqwsPBO8G4gSO8_w;wX9l}Jg3yYmk#S>gj9!7>>=lt*$*q5s&M%cF%xUT~B7JPGaU4if`&`$ZN)HFwYLc%Ab!RT?xZD{$z0 zLebq?%6gwXlC)3#fN&&3WZOj*#BG8P0)6n4C*U_lFb~D}9Y83sYr<~!^uzy|2(Q8N z8oLLYa>;l3GwOaB$l?s^nREI5Bk7!eD2rolOM2lYJc>myPko|29y85pD_#QhVSIAv z=+bqXr&nsx8d4cGu~`_!vTG&M{iC#_!?9Nk1=@SKEye4{jq*SD;~)fJwSKL*0Jun> zj%H@si_vY=T?2;}ee^isRQ{740yY>&K~^Z>73m%GB&~@E{rR`0bvjWd{}X317XjMa z(8eTC(wU_AG0P3V0aAydOL_CK$Ex9t)mlO^BJ`J}gzR@{5_J(<`Pl6==@m9T1Gz{d zW(B3#mlzzoJ_zNn#1s5ZK7vm?%o~vPC;rxzOAL8^#!_RbP_Flba<-2(nQv#6wIY!P zahOSAL`QL0@kzteGbFupX?P)!;*0d{5cI1|<`6NzaA;v>`nDJVtOCWqreitfE*tq; zjoDsM#OJRP$~W0NT)J!HUK*i$R=3f9d&p}sz&rX@zcO)w12UqoJCkkJZGH}Zh$+uT z$n7G@^YoHwR}eH|q}r3(6S)ekw)SE*W6OP6HqMyU>JNtk56EiG){flD*QOL)cCCle z3BG42;V@SWdP;wYQP_?j{WvLfg-@hK_1glxI7MjgGP62f#qb{|KAa`#aGpD$+XC@D z*t|&}_l*s(c#idMZa`Adu-T@wTBaQp$Yp(_M;Q~VAYm5+$naL65^KPEY=`9|I5N<* zAQ2XE1SXl(84A>XBT95N=b_>sZz}s}qu2qXAJG6?Obp~2I==}Zx$?9h2UyVz7KXN= z`Dh_aJ_F#K(2nt^-HGMeh6I+O|m2my@b0lG(97x-hpfmb$&u<$ymt zy}r0qLJTs;n+}A8=ic9FIX%$Pi}{t?4m2Wl>`+gjIMB0vupV8exeJ=a_Bx^P8A0!Q zoZND?K|S`H5@KQ+Nqzlj6D8pmf}QehOvrpz;AjrdbMhr~M|!sP#~OYl(yKd|3W>^s ziZb}wJ6_~pZ_WRHQE#(t8M%i5XtEjksk)-pQu;vD0Eirgr=G?&tOeF+vP)C@3}T0S zm-*cxscFfy#(ntUH)SxEvA=t$N5;5@&Zrg9wTwjI|qF)s2Uj}}YoV!lasRSk_=C!?@oh-7%UJUKHKlLtyU-fw!f zoj$CyZa-65bLx4l&FH_R&IrL-iJ2&Wb*JIX3cWO(*v z5+8}7ibs_IRdxUDx1KNVr+8Vah%zsKZFlx<*lfUHfEg^;dvoLIFKpaenf4qY6409m z^KOqN1&XJVQ$DI{X@r9I%PF}Hf=1U;U?65@yw(SAGvciE0Zu2O*|+El=v*5fvt)I@ zVv>m{3VfZ9&YX6Nlj8EH(uRL^dHcgfQkW3hWUlbWYFXEjG4PP}A_Az|H8j5JazfDO zYjj3OOFxSNDeEpHbEP(|LqOAO5!Epm zE&3Bfs-r!+2U;N?Tl9kgq33=~KaGNZu`ls@5ug~uG>rtaT$K~kH3xqICpY`H_$?=l zq${r&A0!j2^*F9{D{u2WxJ1p<)?8J{)ID5^oi`gKeb{VluTPJ%9D%sf`kzN~Wi2~LGG_K0~SkaQz z@N;N*YB*6tY|=TKTU2xmqUZBxxv5bXCN{(_VV(AlJp1{>`NhS_K^Qp$Hf4&Ca|sO7 zzW4$dzE78!*M`zb_>$JC>xG-?hbu-pYiJNnY)Q2f)xA%MP7iUcfHhi)(4+H!jTMLG zF)gh4oqoO5tJ_u@(sdz5%nkSm|A3jlp5OmRwywSbNrHJysVZ@%E2!aCpLE! zZW}Zec!w|{y!|oT;(c%DuC~3Sec7*9+E@{HT6xRKjn$BAN^~-K>6p#GP)QiGkXTr6 zdU5yuikK}Eh>I$}{ex11SI&pbHvJsvchX>R3cm`UV*yx2y_i7;+M8Qjs12_uJk`13AA^7G3vn> z4_>_!p^LP7)qdp*zJ;VdQ5Md~vE;H!8(5NuN7ZO4kM!GPgZ-@Uno)bGVu#(QrXn=3 z8CxcYehfHZ7*4{F%s_pFp1yQ=B8-wod zPH6?C*>pEZw{&-Ri*!gx=cZG-*#gqt8@S8!|DSVw-}ipFAFdzxDQ*^PuDRx%&oiDe z#xwb5mQhc1qIO_-cxz#&0V73WD>icGd??bST<4?Yo1{1C#|5P>f>lCLS2FKy1xpAX zqs-{yw~xJoufx4$R(;LzoIrXKBdTBY120kZAT?k;!y|+Ujaq$lPR43eZ_@p;jA}8_ zMeZuYuI`z_eXcr#K>;DH_B7)~Q%LYAgI-Ot{HvJw(BXKD)vX}k)t(XD%ihyC#RZN^ z-JuY2CPSkF1ueqDO{B%-@vR5D4QZxAyw1HEKiW zfxdN(x#{0B(pkjF&Y}qH1TQg_1nx-ozkUtv+fQxdf)^REs{8eA&V4tG`bK}yFquJH z{7stv)|7(k440VV%MDdHX5n*&<2Ip$Tc@3BOI=RF?{f%Rp^OwdtE@->Wc1hKyzgEO z8m6k;*LRl}Yq5yA6*Zc+{cIv)@je~5lp=ylt;TJIFWb)AAc3vXs_Nw&6WXCoAq%Aj zo}qBw9R|rt+mE*q%E%pSN(o9GIJ(VysKa(voo>6y*0%A4n1(oZ4ac)dh9Nq6#W_q`XER#xwpETVbtSo)QS z#<$dUqOGjSJ*ElQX*&07PTcquv(t>R@Lyy#8q##`oNs<$3Nt2BC%%D_p{f{^#A|1a zWPDm?+cY$!LA+_>Ny8}}Bbiqw)UnC`kQGyQde`bEAC#pCnI|OSQ(R<%r{aPqLcqok zQbT68sOM@x$tIa`Xx--WF8;Vf96A;Ifl8LvO9(}dHa_fm?qrr#^HA^3r9NT0>YJcq zNN<%h7}7+L8Vt0@&94_{OA{+#v2Q#Q4{e+L@k4?xX(;=lD1RdL;MN_Z({y|Z?eBPS zES2X|WO4nDb$Rp~!lExDXq&7G<$_K3UP=VtA^ghH(Wk6vh5k{8NQ={igM@+eF<$vY zTa4CA#T6B3(;S1Nqm;tJIm^pBP#@tz;1`hwfvfP=|M(|L?Ey*L|gLZ|`4 zsC2QgirCoPY(gLU!NJKnJwG2`{=?@U7F!5zt~n}l#QJQ!CFmM z@>aA_LQPimbj=h`bU;?k0-M{{J?n3oS7{aHW?F-Ii9ByEcb`=1+&NnbE zxsZz;pq1*Z)*PU``|l}H!|js!<{)#HsDcl9jYEXaf9-h9%(+*~f0ao?tw{vHALZBr z>HsTA#8b`N-Xs7+u4ycEbO#qY{uhv~VgA(UxX@rz4b^@Em@np^*$uM3}+8clp!T-R&y(vkmOep`vX28z+i|fx{0o>)MjDN7% z|9tMd!XM!B@4a}1YU58pSuE661t{3e0_drlq9S_SyXQdQsEoYS5Y}f1uy7Ivjce7{ zjKY33qml^v&x#-^e!#S$tIu=5AxIA6(&5NW>fd)hO^dazEZ)`Q7S$F6O)a$Gh6gW6I)_D}?NDn^G z!f(7I+t`>h*usqqzj~c!mG6bO_)H$IqVt5vyogmEuBRU9RvuYw!mP_k09vy4a_aOz z*R=>&%Nbe{79f?kn|aDRNsuc_h#m}I)b+vBU0!SQ^pgv;KrQS1`qD}55k^P_La{W+ zqXyuTe?rakF=;O*r}pd2T%>_#At@;dz)dPD*imRv^&AZovr|&#j8grB`ULR2yu3iC zy7aZ>dK~b zt_#O_4xbZ~QtTgZ%^U{iyKtmX%;hQO>(_0L?$1fRsyEK9WJsr9q6;0oJGwjkDByDK z4ZTw7Y9?5J|6^}%=*bZaRct0a8@|w^@Ahf zB6CQdw2xfJ7qv2!rCK^P&O2Yg?YJ%Q6PxE849}{LZTlrvG~c8B*X{8Q zz3Y|XV6IUl=_qQj#dZ>}RUP;3NMT~k3^AATw>!A)4)zQQZ}$C&JNs45lBqf$TsvmH z@oYSGv#AeL4GKnHq!B_ogWC#GBwWrocCDA_KofbsGW;>au6&apKN^1zU6ssP0Iq;A zx%H99YX2D)Q^euBt$&wu@1qrvTL3sZPzB-hGDf@ySf{JWtrd;1g%3z05`omO>QL_udNri(ei1+$H6nei= z;(j)$p4w3#z6UR{8n~5I8IiWH@V%lW4Bq_LcX&CUfU$bSm`I&|O8cVi)hOy8mQGi^e@<0Y;c zYjr+zg#y~mXEL(pCm*t>>$mc)mt=}Wu|MN-ypq5vsGECszFE5}^tUrMzK}LeC*Ixe zh^CWXqZ5<(dU!{f+4A-FrK+8@X4q(+GnjU#QBBnfUGV(m+frTboScUv3$oZA=`xuz0j~QR|$l=-^9O;VFe=a{2c5_hsb;9TyFhA<0vbFSS{>2(}vbMU3Jj|m2B;PU?9ZmiLtr1Lq; z8g7CPSv6hZca%7qlNZYq$q}U5FVkka%uafpOm#Hx4beC6Ev;=_@jr<;e|#H!2tM&& zn<(7hZ{97=m~VB!RuVe1YjP*TxavGq3^yOtmfh&Dn4$}xvB0OeRX-Hz zTxF5J|FC{GykEJoS5~>HEqsS`JnDfj**g3I(sGDx~b#yn6R(Wcyw;1^5)-gFYuS; zy~H!q>mZ*p2zI&+exg1_==;5O`2vjshYS}*LtIKceN|E$mQZW;THt`KIy+t1dXKAoyKIp0pmy*M-wKnGJDiBqb9 z#!l{?k)E`#S!emWQSckiN*%Ympr;|H?aw^nmA;WEi}ZMBjz%UUr+%gJcdSWasA~fI znDP4n$GHassNQKMS80tOxLcJf6^3Pyf=xUO^=(Z1()l(Wh|Q+8gtT;f()ZMo#~%Hn z6u91wLy3aYI10d5d2a7g)j^&?8Xn-bV%O5|!M@Nna?Mt2_ON6skk7Wm<0Dj-i(|gN zv9ZS8oAHI@R_Y`cJSk5!S(4AH_l?17+NIDi_e_oPBNkpoWy#nmLT=WxU{ZHpS05{$ zZ^wdTdgPgMQCz&%cQO)MLYog5rqz6=2^uy2lI%i-UKg;W;5_Roj`LpK>pJ%_OT3D4 zOt}o*n2-OQ5yDFz_y|`mwYq8j{Bp_rq`JLD=7qoIQU0bh^apNzZmC?*3>yoxUSjI6h?Q)-Uc|;NG6c zp4EPxYn?W7N;;aH`*DB?DhYQG2o8b8$4#%>g?PMGD1)Q@K*5DRS#gr+_*Y2Qt4_a3 zm8L^{;q^&`r+&So?^&V+(nhY2vpBf;aWyJGX6H7(^B)E2fV8@s&9bFhGJ5tDM%|pT zuoWyESljL{wy#~GVVjot)+54TB@MQmWV&g za1l6yCSBWy_O5e&M(gSHj0!iUD=<1(&p5;?QYld2P~afe^aOh1%bQ?N06)I>j7Y#l zp8wLA3YEUtrfZsEKCw8<{)(z4srHr4Cz6mxw^!;9P9__Es}Cv+$2I?UBY zRHiV2X1Evoq(|}VWI^03`t8=?jvVdI#Dei{zn9)8=J;DpKh*3t$9u@M{bIm_q@Mf1{$N88PVkCql6JizMw z4@|LPFKrIE95nO2_cZGsyufi z!4OimaAP@k=BGoX)%0)vTT!BpG8>bmu$S6(Uuk#sWHze(H7fnL=;|#XPBvnSbC~=V zM8=zn=?5&&@9(j?S++=FY-Np-FiELQkc}eDzn~FLKlKo@WmCKe8f9} zTF*B_(<+0eI^Mduu==3w1p$(PMZPYQ~MJ)6q<64RpR%S znI}0sH|LhQRfv_1776n6hRaCRw|;%FUv zyceG4pk-j7NRpkLnyQ`VLS9nVV)gi89*jX2W|975Zm!P72ApeqdwXlWSRZz|KZhMA zQ7s?vtxSFDy}DdXEgPzd{w><0!k#80~ zVRm#J2@BwHPkTGaw^!8l-sr~*q*N@;VC{4q8^9&=wvqcfk-$*tyVQb93k ze~q;K8|o?q1X8b8>L6!AVs*~R?vL*{|+SSEpOLUmRaobG1W~DP5>iy3JY5as<=4S2IV?a7h`ZP?eYfj`QdC zAg(8m8{xuFet3sF0|gjn)>S%=$n-qttth-dPvB0B4O_3L>PEE4N_dD&?oJa3dE9UW zJuf%%t8@YASc=8&%JU-A1 zF2cIEKJi6?A+IqJ^_Q;D;fz!=fB-c-JObuRRTXuXqFGgg3N9`#Dk%#|3^+g;dAJq` zWq=Q_e`f-s7yy=PU5!2g8WG2*WQ6$pH|QMQ?|Ad0r}$S-4|O+_R~yzv5T3jTeeiFr z$R=cN9nkZ6qPDb5P_?n_96atD7)U=kcnMRa*Kw2$(O zJ(q-AWmG#xV8oZ)I~}bQCIWB9=qpQ{(2KwaR@06%mZ~wWt|3Z#jXEE=Z#6E-OuC9K z%qa!|LjzH6x4$aX-CSow>PxWQ#L!WMH3sgYW{fw<_PAz6eK4f1XbUS$-|pivfMsa4 z%DA0wE($a*#;jVO7Uis6#1@qBVWRxE98S_%S99)PIy*B3D~OKv-3BRcu)h0fX_J9Z;mY?)#4u1?sD1J!kl1X;u{>~m*^pb#%#S12kRv% z+92>5W|#!xb2thtBqCzs7F-56oS*n75yxv1nhqG?AD|u*kJUdAP-*l_sYarQTRTKG5pSMI55<%A3Bh+#I^aV8XHwBQy~4iUbO3~mF)sXscc`7A z{%PwwnTSCeQa#s1R#nj~Rb|5o5$QuUsXU4N`|#yVOrIE0ITbj;QbN? zWXFJ;Rw^LqWixT_@_XHQra3W;=^R%-%5umSW< z_aWTXym-{7nhka=a3nsPk~%(P{=NHUP1jYf=SQt3q_|^Z2MGTIF!PmZYMsN0hKOs* zBswCRzA~b*zFhcbXU|&wO!9*1Ou5d2v@(k-prjxx2=gBHPq6Yz4-3FDg}8rz{X5=1 z=n!gQ)Bfk5zmFC@qCYc6ymLfI~53EWcp1zp*FK*BH_ss*OOSpRqovT|ffbNNf3SWm0 zyUv4td3pI4-D!_2hHz&B$Wt$|;ebvY>(}*DmZ)1R7;MYV#{zp9%LfX;Sl|CS)`O1! z9;PjCagaY~X@x5TE@x7E`+FAUHigYKX;%#{I){ducmRphO@J(ZkfO5X8unz}9Cz)z zIhMEB@W443(VZ<2WeSx@`JGjdp^(Pr=&CV46a3?Q^sQz*TPlUckLx!l8a~M3Uh{+q z;N5{`!FCwl+n~VE4dW@ER6sgZB>y#bGai)bH26W|8``hYZ}r;Q2QyblOD72#`Ar_hE9-yfuZH|aVxxBLxTL&1QsRv$&^jqh;u&CU5zg_w zfKiG~6wsB`GQ5dHgaN)?ab2l@=eL0lk-Bu2IK$A1J6u zToAoIljG-`64R4MnDj6JhVTEJ7@s1e5UX>W$X!hu=NE4rY^16SK223$)vnmzvdz!%Uor0pg z7b^>5hUz5XywXx6Uc`=--rK}d*V+}`5u9xP1VaZv(G8tJ$<@_33__ALc zld_~Rlq~3_M<5#VCw>@0(tgyB@x(|k(SvAc7>YTRusIgL3;2|M5aD4CsTE78h8UV- z?CSHrn0zCPe7>7if=J8+nk$;s6A`7z5nAk{p(*Ck5-E!77J);ayL3FE1+yPQ;Yxka z?VvxkQ%*`kve&cMmiyACnYW4&OygWQn5Y^)zOx0rmXr*-2*0B}ZTY#&gM?c|!!7Hp z)GEhvJRF8e8?G$%Y?`%8PZl5`x3Z*wZt-rVh&l=e3jrp1U^kTOpjBB`&Rg{-XPolw zb4OWP;Krptpqsc0<*T7$BSgKi*}@!)P}b0RXJJ4_8FY(-k2mpFdV^A7C_zclCvh{M zrY+wm+?%P{wtU!%_TLR7@W$)l($6O-D2S%W+}1jH%yMg`1~pYbtwcLB@^)yvSGdSEec4JS}l)Sci&F7=!f|T z!pKiRH9}va)A3>!{)G{#(KYX8WMy>bv7YEdx+5n!UpJ6yr~q=L?u? zIbU~m)!JvP=WZ%o)U{`mID_6GJDvohDVGwl+3KeNNFX@Uzb=`#EFI~ZCci#rv^qd4 z{)|$y-WYFDnS{p+N6lZ<$K5X-x9;6$$#Hd!&duSlgtz3}e+F-L;8k#9 z$cM`^cV7o=3vL)cWiA^0sQf5I1X6D-U=m5H1RoH&A5QLbtE~o+P2@1@$D@eZ8)cH0BB%OtZPkIYL@Kj(~6nzKrA`XRiy$v7Q>Y!oKOG+A#i8h(5h4_#kk>tzkZsBvv09clG?y@mplDzS z5_Emo&})5M#ahj|CF$_A$8*jDY`~y3!T-zQX6Z)LLL6u zg>bf?y`N|T70f!fwuPO};M2o)j=*`pS2E|Kz*UU&%}!g)+2TPTLndbg8vU%wl-+Z+ zT%4S$)LN17>(#8j&n6k}c8^%e<$C^GWgAIb#Jnd>kea#n;T|R7o{aO9v(tP2UkaBZ#Gar(0!mhY&KbGkJW;Ynq4`XxHg$b<*4o|`Tg z*@`pPtyK+yyi-g^Q^UZ>DwCeC9z5`r8+~4&2x|@WM{%N(`o0p3Ksi}t<+54!<5I|% z4C3Ja@qT*3F95d5tKN-pkV66`KQ*hXGDCjq$3&Wng+-R43&8j!;27Tjz49 zHIYt+i~HOWs^c(<;dX!M>UO-+*bL$Bc-6roYx_YH>`xc6n2uJ+j?RRvAk9g_yw`bJp6BTAmZzBk{jaUn|AcBl`k5WLu3 zipY7m&;t1!5oUWIt;q}NGo<1T*@yONo7*a}yWOzlQ%YVOYlB9*{4^ed)iu9^z{ug#X}?0Mqd|9+}*IrbU4jb|C3lUdHCTL6VdI>jP$404;dE*%*r__P`x9q>^3kisUyi6+#584opF_7N z?~h;m&OeXlJt7D%=V&Mz{Do@QafR%<=FNQ#-Bl8B1ZP1n#}M3XKIra{k;o^le(zvp zP&cyqYO3H&Qszb@tp+sw;P>Az)gK&jUQDA{W?B1K;L864a) z36NpoTbE55|nh;|c)Atf`*5qc$+EzNc>J>ti zNfEKnJ?SYg?B#-v0?NQJPVHz)jyz*C&`Dh6Bz|Xiri^1}3Yp@p-;P?J_<)Nu@eY}M z8huZ09FYO^9d&8JVWwJ{Y0-9ju;VE!rIh3>cL!0>03|3 zW+Ao8d5MiL0kpJ3)cFu&$2&IDcS_;$R&Hi4>=iYLb*A3$*s9{+D)C30`V)b28WZUX zLPs;KzF1fn^bv0?_&z2{AGO4EtUT$FeZLmP8_UY^*62keZv&Hc4uG0lPp8n zx;**1uRkKVKbDr%lK+YnzKpHqS{S%t?-oNJhk}CQKoU}1Or_%r zFhRzC-l3usYIXU0D_$MGS_O-n+RJ6JDc)S_TncCcTI$@<|r};60tt2qK9T}E22xNGvMoMHo2h@7{5BVmoi^le6 zrz(VM)~9nj>JtSl1C%=?qHCZ488eb-o?ZFkoKMf~+8^m^y1OzRds$k6`p9Myr*4kl z9zm1c)!yg@spBg%GR{PC^z7g@;>~rV@pVsiy{^KSxX|-7ckB7;=(=&9_<;Tx=>>Fz zEC*U@a=~zXvgVMToOHQNOshRZdEp}wsYpUVr+s|7R(FFf8(MK|BL1XEIOD{RefDUh2TQw3KpPF$#@raPIFnRn-RAi-}m zwr96+qzl2!xMxGz9yJP3>Cb%$m-cBLhps@#Qmx$ZbUCPAOEeg7r^ewUZrx7RxDPT+ zAe+o~`wa(Yslb~)6TqA`999yPJmww4@9Tz@7qd)8`r#Za>EU{EA<0Z#I`ygBS|@7^b|Pl1a2vuPl5OFTe|9^^x%Lf z>d{h+K|lz**D^~ni3iP&_o4D#5gyBZl38kpGWNktfT#+U)B2ZeiY2aE<3SxYwQnXJ z&kcns|6s}WKFVE^^LX4#G!X;DW2~_COAi1h)$Vyygi~yRg&vF)_>3o7+{g$*rp{|u zHedm{L4xCLrihN4?)GCX&}41NR_+j;nCQ)zo)GR1)<=n>bAll7BRv-$Iw{H^e{w~(uRUkEM7CyH+Nz@0FYA%XSmz3)+m4c&QPdVbgs+qnLRPQ{`*Wh-8sGw++SyBW7!0M;(WB<;#@Ons`(5l z(R&xABFeIvSJ;HvV_QB4Su95k-(B#Dmuv|^}mW&FgEdVnd zp_~{%=#7kw3}6_P0Gel+0#LuxGcsgK8p#uFm2mdBg0JcF25gI0EPAYNOBW}Cv);wZ z7n)lQPl$w%?y3o(FF$J|nG)x7@iP9pxXwqoP60OhEk>6U^&ud%&!NN1i zw$wK?OibZX9}*e=Xjob>P7EsGduCCT87)K1Gt|k2in^6ML1Uv&k6nR-hhEd*lAfUz zN;y40)T>4XI`reJ1_BKwRoQ~X{$9!~`KhTNVoutq2yiXu^EgCu3-h};j0y_%eF;3N z+5zW`BV#YI7_#Ox_;L#rkg#Z@$da1Vb-<8q;FFNpoVTWJu!JWuBO@zGk$sZ? zEZ(IW>|1ocSSPAGx1FtP4Hn-Q-=b(eF3CqlrOC$9HDk{E`H$l${1O1$xn+4dtIT>M zeLL*Hh=-g%Nu>Y;>i{syRsf`_o3~l#x@9R%pox2T+Z0L`5UY3ksLg!#u>T~n=ukZa z-e|aSj34?R-UWffo9rdu!lVp-{&eX4m6wRW6<}58GsC9FsQXTCF$SIlDW&7$e|r2u0^%qz zM3goN!c(YB3+U&gA;wkh+R=Fqs8MFtueaJfa>doI==cj0#rV-P^fVP)Yohcm#~T2< z<%YtY|3TBs2^{_pk4G#Iv)Cd(@tKHK)NHyumAJS#96-ecEG(4!e_W7q`E?R{(*hMy z{kf*6Dz)u|-9zMN)0Nz<; zJ#{4`-M5SijJ-<`f@J^kowwZF_|qIR6jGQ~tpm}hUit7j@UhpP5VUQ^rZt3iOi%HCo zE7YeEZab14<2_=5e?JR7-`Uj@~&Lgb;9BA~GtVjijA30e-D1U(r7HA{yJBvG$DD zn0aLocX$Ax#kwk}!s%4v{xm_`Zs(_eI6$2VAgt;bQaNUNV?*o~g*EnlUE>bpAZQEV zlIA7?1uB2>{O0JjWoO}23AXz<7ddxXp3P9WFQ7*O`dO|7mxqP2--XnU_s!)Ksb0L# zJ`r260^+&<1o2*z)<}NB3PeExX@Z^z4o=)SxVSbp?lqJe@DqO_&i`?CP^FUu5ND9x z^^&SNzRuFh;g4bU?%e!#4VwCb7WfrSIt+pEvZ^Oo1Rw-jb|=S@Sl<0(e?}_(u9vbybQkkA0ChU_uVckVg`7K>P7iT^8{_C)1%|$fBO^j zTJJsI9CV2vRLlH?UG2)-LCxbw-{HzAEk8i1-(bT0hj)iqsJAUZNfmh|LW7fET8Ttm zcmK8Z6W?!EHCaqZW@hF=UyE@Qylh#8V5Td_R)e;D9{C!haGH^r5u*0Sis?7AY!{Af zdCn*3Auec z+9m8XK&DB%ys>Y4kqp6o*TMU=#5u*~Z)SWSk!LoV-F?O1r#m zUzR@?l{pzKO;G|P&d;+;G4qkw!rZ)9awGM%R5Za@+x2pnr(H*1hF$xh&66wsgJ;ra z!F~nw;r@E(yH!rIzX6+ zg)eaG6jh3m(K&yxQyHRrJXUW!xfh1wwir{)>AAxfN$I9|b8>N=&1&0C&f=Lpj$FH~ zuliOS^aL~QAB=UCWcEp}0lm|m$al6gd`5GQy~B-4lpxh`(fK3nf%}!&V|TdhHp39BRyF+d%V9o^)4`Pnhu2sZ#mc`=mCj|1-U6vd(3eguosR;i36Ip@OPr;p-%7<$~<*(4zZ-fxyPI#BsPKe6(xMOQw$Qj^N$Gw8r zpin$Dt{ulk?#gY1#?>*v3k(m=Qz~?#zZy$ZuN#K#juKkp)Cs;n$ zwYqw^eUX^^{EnY}osTPb|V%9qivO%fefw=(niux@d~KrUu&g` zTTSz2yKTQHCUqr=5xgZ(2f5J3`H?63M}<{z1lKyCy(>GEw#E4qGVw0;+&$rnA2e=U z(l%Ey@{q?0leo$!osxwRk$xOt?HCA1dcYkxX+WMGE6FxFw$I!#U<9~CO~*W@q&z;b zC<)#@qsQV84-?+DOyRVeWwDyIHXTdvLpaCZP+0g`*oZN!`@(i2VtneyobBdhN%m$9 zn0%)OOa}ReKxWuK;#&IA!pFDgxcTgC-~Hf_Q(ka~9=h>(&(o@h*>SY^^sfaKFi;^I z0Fwh7vVQK;2h_)ce<4D%vu$=uC!$NT*$Wp;WffF-9^9w)GiBvg^MMJ1Lu*X)i*i~! zj%T~nET1%dp%jxeQ-m4Cikoq9wkwgIA1-=NHT z_$Oxg{rc7@{a3|vgf!>Os*nI2K5S_tpjPooa~wW|4yTnBb-WVB6!R)9)iuPtcZgf; z@7zg509y1r-Y723MD6DNX6%?~p zn-Q9R@q;J{1Ys)*W?#)5pN|+})K!ph&kLu;?PZ*nBY`)9B7lEopq zEH%SGZVS-S2kIPr0eSX3Kr0GkwzPvj7=lWF0|Fd8TrA`u0Kiy+u<#jKhSLpA2zmvI zi8AEKNc-0oPZCoXEAs^RPkc%fF-nEcqYB`)8((D7X;2N8*q6%o^(0IRkYcxlx<&ID zV)ei$s&t&#*g`M$G(g9j4OM1ai$uuqWFs%7NeAMj$@_D|NxpLbI6I2uz3JwaPvr<~ zH+`+))QM8m$oM(i*eF685)^87+9CUxR40~E{waz?Fp108NR9ZnWs$_i?msDa*O zrc?fJSrV+=JjcEtgy3$XNOx~NMEt9(>%|}6A!I6hgp>Bom*zqZ0Fuu{<-bzVi`lQn z(;P@Q&z_5mGQ>y%vHanoC+I`Q1&?YpX}GsNEbj|(LEl{LSo*@od6D#ih%u` zFpcf0S=BR<&oISP7c{iF zdj}0fB%jB`89bzWYzC(^Z4}Ad^v;5mZE5ab!wwibo@lT#uty)>HH;}uzx*tH?(}P= z0Q0bTq1u=g2`o)SPRM-0Kwr$mEHS*z$?=2RkY5yQD8hsMN=pl8k$4avyCLXLn=F}prMfdNE* z0L3`jBrj3y_n`?eB{olac0XNv!14$8r(nObKZAMW&TC%f&*kddBufj>y)LKtW=HfC zX=wdJG4&*{n2z=SNE6%LuI}yKQD%6nSCW0<%qu4Eu!RCmssmWhUF4RCgm#SpCK2cV z`5B>cd-r=O!ko_JR}0R7WfnDhGORUz*6t$(pw9ez2*8fv#dl@#NBRk@h)v&sf9LzJ zBk})(j`IIxjeioZfQ#lY{V}577oD{EO)Ker;^|?zGXLk92F@n~q`dmEY=9_`69gc_ z%B8AT2h6xZ{k?S9~yPvL@q;d4*Ym(*LBgIov81<+f7KqNm%+#R}|M>dfSR zC%@2lP0&Hjl!o$S9&|0MMCH`&D?4<4tf45=KWCC5DKa7Qn+agmv2+A_k@h>o zW(LxAS3C8OeZdCSy6r`d?&|x#hRMR7(er2kxVitmaC-MZQY_SlrYKb64UlJ=GGiH* zXNIarq>jfm-1}if;qN;fG$!UgT&zx%FZeNU8ri zr7isDx53ojGuZLlS)G)NwvcX|H2}U8Lx26xf3KhOmymc9WvEj!57z#+>8ZAqgKT(t z5n0@W@gHbp^ZeCs7{jZ}x>TLZzEQDwHr3C9hGDuBM&85)Df!!!d66iw_VvHomQ$bx z^?R)PE<{Xa(e?|SeeeC27VO-KwYyC!geyP&o5js{vs~#?v>smpnW|U1(R#<2-{Nmq4)d&!cML*KOX!PDThuL$I;ir~y+#KQ zLV-8=i&r|=r<(S|$KU`3!%QZ)6xVe`~utU_ae+L3I#0n z{R5AhUht?@00t3aGOxRBHQbGlydh~c;CWgiWd%3mKK3hDq|CNs&Jsr}?MASF$0vH> zioGZLz`A{&cV$62x|~%ha6ao`oa#PaYU3K=#52;n-R`xYclwLe|44$fCTWr2gqYT@g-!aunSda z;ZX@hV#ow(=;#1%00T|D%Kf9$@y?|ExD``PJgt4*_WmHst&4-1jQD(-pclR|=mR#2g^9p5;$#n@uEN|^enM@YA9Qr&>tA8KphyUd zo&cY)+D;iner3=<-1|6hte1FiZGk%Eak+Cd2$^s4c)@xNacbh$7|26Vc#UmU*ep0{ z!apep2u36f=c@9gULs2q%r<^jeWUoM?)?0;ByZ=06_r#~wA_XAwBBqVx*U#-p3RqZ zF_hHH#x*8XPIjkfm`<9LWZh!rhLM{nBO~*o`K9pbRdVz=>tg47vOD!Fz{zj(RQKu8 zdP9Gz^JIWyON+^IO2G2;Rcf5va3i3h53 zZQMbcMxAK1BZo)*rS!oT=n8InFn&$+`R3XDif1HvzrgI+Cow7cy($hR)!yX+w}yiYGft2A45bsSCUpT5jZdhjI%YUx8!D z`=Pw-7A`{Q?$8Yy6^!hW?XMqya5XqDD1I70YQKTw(Lf~@jGK<(#nj2Tw3>x{tw?cj z9Z**tqovN0urJ~4Wjzz`aaaq4vot2*&*_wa@W1cOPYiX|(rJwmO907Y3 zBWh1i9GJ9U6hS^ezcsQwKx(SYjJJZ*YJsGY=l+2G#AH@wj$moathSJNbKq@sp_vA- zWJG=7^`5nO#taS)?}TD28J@+8q8=`#tcpvq8s5NU%A+`QqJ1eJ+CCa0fCuM%5?H;0 zPp$xkv_-6SWI4!3z{Lop4|>aKv{+ISUfzPd@N+7Uf`@f$1CM0{5@jr>G2v0A-|pk-u3<{(g-jI;GRHG9JY13e(t_IAb~>`gOD>G zG6(5;Pil9b7CFj3E;Nk7ET9B5>vMxKSwD6Af2ev3sJNP-TQtF4f_rdx_XKx$cXxM! zI|O%k*Wfm2aCe8`?hfyK|Gn?s`_^KyV5aAsp6=??T~)jGzJB)c;9FdbYsC#wBIv>U zm^2MFL_r7vs6Z(x(FYFed7$FZcb!X_`1E9o+g{`Rw_AE%36S4kQN7ge4zBulR1#8a9CL#LZ z4quWJ&p16GwfM z0hXw3r&VNY=;RMuj;l4ANFfOguKH`oR{RH$ZIvcnnN-~X*gJVR+xd3!eD4QK9Y3@H zDfVB18?nZfo)#J*kk$DX@_f+g9G%t`E7Y1_Kn1}Yf+|#@{9h)7c5iPGuW}MCGFn5IK2DKSlgGq|^gjbOAuX%R-)JT$4kF_a2uMq# zTCC9=M3s$oktv}LkBu#?bKtV?e#Z5GdJlTrxA!ltFNYOgs^=DxkdPvwn~$AX?con* zS$12i!bB%u7Pe5s8=q!0giI5fzl4=f&|gI@FgK4R7|{-T?tK1YR@ga1pb z$w32|WG+s6o6ijtp(d)(ca;DI3>nn%16BxZ(6>NrZ0yjV-%$+a%M^=B$o>OZsZ0pz z*&*55+S+V&6X-6jG@2uijEoEn4%XXm39Q?30=83Ck#BNv69!1oj2%C74~U2| zh{<8IBB}@CD!|{U+G@gBNFG?OH%{kpr70B0Wa8t`*-XJ*eMM++V!>wZPW$~^!fYaA z@QJz5LDMDUVQIU5ki~n5&8V;sTaPILkh4?P`7M6Fuf*wKof=_kj6y&l)G!}uu~t{Q!?EtYiH8JRF)eEAj>&7@gCd&I zOv8x^fT2NveRT?r%d7jIxEs$cgTt96AV_8!Yx2?L7>yqRajqVG6>dIZG!Mgl8E3B`^LxZFzi;O@UVm5wJiG;ra447m9V>B8EO)@%) zf`%faC`|#^iZ;FNPN&L`DCfY;OVVU?K!`;d0>iaSWN?7la+HlChN%B&mt@vR$im8M z==2sfJ6T?+Oziz)!o>s0Y(9*PEP>O9>!LjoHUvweq&yvX&NL>Dh?!eV* zFvDeaYJGg81#CU$FXNig^b7_rhDd!&!p7FnLXIq^Lz)B2KG8(HDZn1Cl$HBKT9`b$ ziz4*kJ8SK4@>_EjFO#pH>6T6Nmy~&UMf-6^Gg+4ZnV6dv-??pd>#G;D!WA4XwI}IF zG~5*ky0Sj3L?J0zL~_LKW;nLEIzM3O1q#719v1vvE~yP4rZqfV!eIR`#OPzv+~Q)u z@M*D;J-BZ-ObT75q?i}Wjv*?7ykv2S4<|FXaXPmz+@2T)bIEsjVa}to`v!v%8z-mP z@aS+dZt{@PQ8=;KY#BQxFkRP$yCXyNm~oT!Cl$9;b|ZL4X1_(75_x=iLqEb9xu3?) z@P4{>9aB+g_sp>T zrMThzQ~7u{M}T5Te?%NoX-gqa?Qoc(mgE?{!AIwFG+w&6k`aQXq@&A4t?_HOSP7%f zP!grL@>Hk8psNbc z(0xZoUkEh3OI-kn1&qE2O)*7-etyn>oY5aAQpyA{LHa==KnTr9L?MFipshzJ%!^nZ zcd^GWz^m3ZLLEe$A8__yJvuZSy)cqvHe_VX9!DP4o7+M@{Z+-cU!g9P)$77=4|kKH|s0h#TNAB0ZW{&a}bM7|Dh)a zr`=+gU+^bYbFLI+zrn~Nu&9XYU^3%JUTLB%UW);&yvbzN@h?dqDJZNg?$nDRDYaTn z=~_F(p-_f2IP6yBr0kei+B`J|uBFkq&o~;;NLJd6kvnKJusO@q zijp9{gch5#SeX!SKD<{gD+w9Np%yCbEw_1+o-Wmvmd^!!;4EQ&b}BO+*;M71RHyDF z9vbzN5mRI({i9l}UJF2-j(}68rlmE%Zp&!rWhwosTp;Kd-O-L7XhVveKsB1Lg zY(F8RWCgkvNrRBEYh1pn4J4=VEY7c4jc2$;f_W5!zY`NDL&BHNEV})Q!D~jz`8_nS z5>-cqIfMyN7Hc|NRFxa`x4R~(FU*+3k}|kr!<(Zks;Z7u{5f@`WuTDD2o{FF5U+q0 z%f*VS%Y(xR4qO9d=|mF#Iqe?bGWlOCO>#LCms4MBJfEEi`74%HWKK?MX|-dRjq43$ zwcUop&D7D@++zL$Pja=m=EW`c>zR+ zk4s8QN>aV(B9sH)h=_t{5SUa83JWBNQhw$0N=i$Wa?wWqXL)}8P#HWM*bOEitXL+< zuaIw64te*%WeP&U(6x*|Bs{oChht2QKul82Ri&NXsp)fK%=Ti$yzVyU_d^6^W?0Tc zZz~!ENV_afZC)!j=<>9cOSXV&AD)W(m2bc=Z)`&=mrHxKY&Uwe^@!Y6K_FoN({TWRnl^?p=qur%jZWM&R-vysVSi+y)h1+c(@ zkzL6)8_n6iuMdjAjs_L@uBw`psy=%t2mnMA?nacWIa0D*F%NV71(x)^+4JS_D%Jd$ zT$r`AGBi89$W4nud;NP$l5zy0B{XR;Z|x&^wcP_Xy1Xk*m0+sO5mCSq&JPT~tk$Ie zB-v(5QAk!8ue@9m29l-W7Ue7FsengV1OL9wW_@PafJ;H)-ro^?G2MN+W}6MU;|r$; zwMA5}A!YcI3-k9A4B%{*on36o=IR~c6l%bUAOn$IZCj<^7MWd~eD}~+Z$ZIP83H&% z&8cTY=eNGcjVbb>M)mPYDDuv-Z(ZO?hL(>Xxcd)cI=(wQ12sPJ1_+J``M>Nz|z~jOy8=|kdx#!x8^`@t4t32%%m-lFR7%^jZ zh?{j-6xtj$reh@&D(Xu+un??$=rS%najLZHb*^I+T5CKg30L&$kfP%V?rmlLjV zIGrnkE2Q}5!I#Z<`!=SsaAy7%9I@_q8UyT*sFkYb@+$&henH@_$!Am>viiLSkFn=A zYwgK37kU{TKEa|QC{~=*)U?Cr*R!2HIkU4H5H5+^8Z{taC{_(W$vopDHFRZS8WEH$ z&y~i~EP`T;R(^4RFYy zd72J6gL~0IH`*&J+#=%Q00ONe>72pzHJ0FPSyjwcmcMJm_s-2tL8~F^p+?}01F{3d zi>G6`zA>q5;XbTN^@RlfL5b22a!L=$7ji02{=t=vl50O6Sn&dkP@}qEAix4X{E2X$ z=GYKr=jt?&VxbwChVr!&6CTyg!rr!c%o;g|3ctAfar!f*XevWNMaK}8%LY@b+4kQQ^5)dV zDu)lg)~vXJb1;+NESp`&-e>Ff8LNautT0!gZ9!mw)ywe%tdGVu4&2wl-ub}S4w5&6 zyXmM%`Lv@x_{dNcjx#9)MP|wMkC=|<16_BgYftH!jqFxoAqSC=nN1BmzLa3eAF%kv zAxJC;h;ft}9Fzuu+GQFtb$5ap%cu9-q)(Up-WAL3e*$4yu^jtlTUdNmFd0;Fbkuk_ zq$S84sWnZIh(=^na|X-a*mfJ7BO;JU2aJq{g{`%by8=*->~CW&9%KKYzCunrgoxK$ z%#d_@?fs$4U`;-!Yo=QRKodsA&SrQAb< zWjS69t~>N2Mq^{Lrp?e0Y~_s7xEK;Mn_?ed8{RFR=Yi~}jp51d2C(fq_Qh&i-@sVJ zi*}kSG+rOS<}z4VoPro-Tu>2EXZ^2Z%_zyqlL2Ldcx#4^U-2R78g!fe4eimtkmv4< z;RFR_z#;=>*dTdtb!-b>Bi0RUc?QCS+XLq? zB4y{GFNJ8a-_udSf|-98P)g?F`L$%4=e$wM0}L^jwHlJOuYc(n^I-s5wREQT@Xz;G zeZIHlM4OFn=em-0anm#&zpk*@X0x2PLqU&!GyYdcg`eBk!$hTB^^m#4ar|WXkl=%C zia6MB=X=1{-t>ND|9E~fwpniu+D$kAot+(Bg8$qi{S(|)%TA6)&z+N;SBh#&d*p)O z+w%M_F*!bf2@E*o|3-nv92CSxL1+#l!B)bhvnIa6kz!hBLqNn3f; z-J6e*kZh&HnQT1m9Ow8Rg%!+7fUuZnUz(P7`?a%G! zBpe%Q6$MquK?s5vU?hdl@6DW7Cd{E%yp+|-#N_Y+}ti7COi~m z{D`YK!Hq7=5}>7^>au(Jl~zT^Hur;>cpW2_iSF*fDD_r-7xqqm;PZ!Sm(|4St# zjNkN!ZT9@Zu)h83*+5;Ce#P_Iq?FPCE~Lp2r-+Pv`@-3{00kAtO=BpQ%$KkX+ro_L z$^4FpQ5g0+85zV|7u&p=ftB1YT7rNZfhUkmS=JG?2v0VomSk&bnq6Cy1`e;?HF_C% zS|hl65*Fb>C}A;o|5WH!>vO+z;|Ret%qowJN#s}m39;=MEql~}fnTaC^A*NQManP3 z9Sm8SUs7vuyVqK*(jBf~$15wdBj#lV?M1F) z*00DPaH`g=kigVaoo%U$dDq7MOF~fDzoHC}9Xh>s&TC5^fAbN;_(#GtGL9qXrh@=I z>JD@%YR)ddx)`;E@s~dI1{YtpD*3OqJz_Hr0S<(Ri)AVKFlY=~26OBTS&#|>UpE@` zXwR90u3q1kg|euuuCi9oufO48MJ<%hYFSPHG|NmGR~E-7MtP%Jm$>WuEgQR#i&n*i=Kl*K263wEc4x!{%ox! zH+UIB3?oKJRdpy9N8Un$>rN1~3QRdL7gymDyNOEaDrs>O2%GC=43&L`S~%QZ5E-id zIJ-u(t$=?Rq5g=5i;5H(DcZ%+`3CoC$;o(!GgFhFU@8V@o(HdZVwK=b2rDIk-a zEd}jeXFdFs{tDu;E=?;a`}KqKg~(M2{m1rsZT^`97a#;pN=+PlzSaT+poTizoF!ys zO&`uyq6v60MHMxA{PRRKUh2=oR8^%eib;wS#`6C3^0^6T}(ZPq%z5h>|%gCi>t z$Hi}@{`CU`&X_W$xT`uSk{`pOFK%isY74=1vNJ>`hdHR6locTThPQ4$%R{3SZKDp3 zl9PIvpPd2RE(uI}o=z6lvLu3UM=<;2kbYAP~m2tzcUXpdR;8_tQHMubV0uTu48BcodxJeg%8epBA(_F(%s&r2`qfsk7t6aEF!UHecv-U0;)E z?5SNy=QJiid}6hLiIN*oXv`fHQgitO3Z-aBe|c3^QE@eR$A+Atp8)-95^5AB98h^JTIOs*8Ih4<;{%1{PTT>=8W zMBZR+(RQAVP55)LjdWmeU{|Qwenn2z7Toh$bUe);)0q-0F(=_~cNfN4rFCIm-fzh{ za~8{W365&rkZIvGc55g!v&rw2BVuy_H0|EtNvdk7xR`yx$Ij{erU+=O zs;cb48u;T`eDOog94C)0h<=01%Nmh4H_OeI{MCAleHBcuCtNfSiw&PYSb-TSuI!4s zX>f8;HZ*Z$hEL6!m>)4t`|g<;mvjRM{2IUquG#Z1)OwR##6Q-=KE^h2h3zHc9L?wpx zug>k(ZIy>ta%#kUwCZ_0T_u=*Aaujj{IsMR@MWp-xxscG>k5nT31R|KA%jC&m)q^= zy{+-WW95w(*F(nBIMQK7SI%l_jO{%kQ?A%B8M&h*6H8glM>Qb6R#ehnBaZ~P@B%)k z{y@t8nuYDD&=W6goTR}^pEFJ}j70ga&@^KfM^~&?XC4$&nt$(Ra9mvf%$RE|H&|jBi^Um@XpW@` zII_)A#Flh7WXNi}Z4>+rP7!b(J~Ms^3Fe}vqRMMGVvIQ_ctUQAsLuQS8(m&&h-tA_ zlc+O+g&$zFPUJMgZ#2kAD1YMY_TS8KB z49R8n4N%X){;?!8JE*^^a!%v(BWoLRtn$2NcU$5d2?*>lfvS0g&N<^vA2X^q_@gxgvwaQ0 zs^0W*n;qaa2L2}nL-gkyn~Scvs;Y~wpw;2G--WaO7H%B`Kz8Qw`Mwi*^0EYG%Xa|M6(BjE=w|cV~T%wCuFVQ zQ>(3v2{!kNCVp9YUVS-aKLn8)`qz;W$)W*K1vM?H+_e~JUMQO52t|*V_M_voUT+P4 zZAqT{V3gp{(Ak9rb{9;5c@PQ?X)Y`V1&W2z7>!dzE_T( zXaQFBN=$rMxh<(L8T_pqpkolIpu4l6u+Y-hmVgIm4q@}xLhxhwc}?LiQx`~lJA^KU(6qm3*;$T`JV_4l`e1D}|mVY-UkwlCGlMn5c? zUR)gtc)_IW3qqmr?OXJ}!#gU22oBUQ3!aMzh+J|gpbp&WzrAw#qtFGUoqn)Ggq9Z= z6N|VYHZ!+>}tZr3JzR0Syn~8I=$U2FA~{Z+UIy z@kpprHYQX!{YvH4RQZjyc)HB6z)aSW_6d(nNE8;gMGS%ed5R8V?#gH=j49ZG&`{uer;lq*qG2T%!f(<+dvzf>VBzabb{L-bx!Y+nem`iivM z00sUR-Gt~eXB=zWuOTRDW_7Xu@?DeTFf>vGwh+*rLb0wEq$eq6%?w{R#lW1jr4oS4 z{?E@a^Oec%FfnT?x#Y|E-|_u^M2J-O^JSdAiVCB8jcGPphwX0psBxW-D}m~9)9h{I zB#ut1k_axW5gu~*j`9fu)mQKc+TD%vZJ~lf{{EB_-!p`QLj>ZS_VG-ym z3kL4xBITPAV0wH@udy*hR0T_`!pBla_rH4qJU8J?OoaZwUj45>UZzbPGyy*d{y@Yv zo&5i63JeG$OY8sn=>K}d*W!O(yMuJJ*zx_p+5#ai1O{o~24B-kA}pc8ELdf4jpGhz z{;wu?jw8UROU`2bw#=Z4wCVf5ZuN5Z_b`Y(tgz{=9Oe*a4{k5HEm6iAMbq=LcztAQdeJ^)=Y4bnVFdZP`gOkbiNVGHXP`p@tinC zg$oI5ATq8wHbFH5oc|WPq_fD0W0PIya-&c2>G0JNhdZUf|!lX<;X-bLCzScPy~lYLdbrLAITUKXAx*& zPbL20AmVoX5BNX9#mQvC^tkZ%JrlX6vnCHA@au&O7_aPDHhK@)TB=cl=$+|rI7AEL zNdIHFI{!@+Fl1eS0V~bM2YM+0=effO*sKd5VDrBC4RP^u;<+jg&wpV;|IZivU%kx! z^*`4C|LZc*|6UQ2=`aun+tx>&0ZTIn(z!%VYrp{pXqk-*h89(Th6nX*Ns|cIpU%t^ zNIkfNUIf2OicnR-Fx3MzLL#;XI(L^I&z>50XStyBa0=y?NdR^MvgA40Ha{xC&Z zWsJc=4SF(XvD$M1r1@kNBB-cV+pO#v+PurEr~il;lj@3_FoX|IvKRkn&;-ge#;jCa z`jErql7Q)B1N^4+tkBm?z9!9pP)jX*YJb3#N?45^&)2BI zK+6muj1Med$lE>)Fbj*LGVJARFfedPWyD`hsAgASLn`b;xt?Fu_5B2-Q^$=(S`EY{ zsRh_d^n77M`kjwA>k(TN1l)R87}1@?V*edfP8!N*<#&v}EVcn- z`vom6?nfra%0_pW&{m%u0xs>a*cGvE(dXr96d9IC56DoX1{4-oC7nn91i2-aRFNe1 zG&u(@Dl+K7C*tQ@{h=4i;)Rwp9F@rej}fma2HvJD-od#Y-7J}onsBf)Q2BD;=Hb2j z-^eK1sm75_chgL8D_R;`{I=Jhj$SKjPBdV;1O0`slx;jv(^$CPx!nr{hS0awA(1*Y zuF-k}XSR5u<_)yXhQmfc&N{UP-%x1OSecgNXew%ZQV|}q#P^g{d?KY>@{qqmh+J(z z!SUc?4hB^`DPVkVZ=NYbf+@g0jKD!*f`$1E%?OTFTcv@~mBfN`V!j=fdA#-no&UbH z;|zRnW{B-#L_T}eQw0(m1s?U8erzsa79JRgxdn!-?-mesyO*ErftUQaf|xRfMio4A z#n7VIX(f^J?uHq-8M}CV$TKSL{&7xcTaRNV-{Wm9#zAcI0%neEzy=9CJ)*~T1ZK-8 zbv~Y_{N>ctFw4u!0W9nFC~a+>@i3Cr310bnOPpk(IFr>pl??~pzN%~I>xGkyuDAw1 z85!B{q$C-cvXHKQ)3Xi#8%-jm=@Ao#QwtMQQ|I&hC5NH)bO;|pLjR}7&Zp5ee2WW{ zzNQ(MCRfE~YsN1X6Cl&AC!{9TnN5W;*{D*-!RoC7dV~EiM!ty3#;7e_Z~prdHxY%$ z{u^o<^BiwNg-s>c7yn48ou^4p3rTD-1?f=euQd?(oHw3=XC z1PSGlPdTeh?q4fcx{a{}SUou3`={ArD($-iF7&{~B_Ial@7HhV1ZRv}L;o|?k@0;- zq^Joo86B_?Pn^4lyE?~rvA1`5`62{7xtVY}wtQo_BMWQO!^P^R4%Y%>qcm=73P{q1 z70rg2>QfFS-KB79m4vxQ4K8=ge54peYqfgIF}2Q@c;6ibmddk6Lz3|5NHS{fkojQj zW;+dOV{sp41uCYbx5{60)W=BL%Hsb&D7) z)4nKvW71*3LVmmE1Q@`_I`7_YU7+bSs(_5oV#~4J@>uTYi@VR?%caf98(^&wwG#Az*tlgWBk#0AZ(y~E>kqvhFPpN8h)f}H7J)|yBj74BY%{LbW> zJtZZ3dIta6^O*ieU*sR{x`Bb)$}N70&Tl_B5mvRsRbTOtyl?Impx_jl z>vf#=$#vYWpEVE|YxzF;rn;`|r5@Q?d`FaOdY&mre7l}HeUr|XhhAyb8y)8`+r0tN zgFSH2Sk;c`y5E|tOb#2S{jlH1$K$ZabF%yLR)NzoIhNzXKK!&R+FYF^&xi>($KP$ecUeI=U*kh`t z2?ojjfA+6wxJ|x+_Q3@NGq*HF^}Gn-4;c>XQ}qg3K23US zsjz>U;nQO6^fSLUmWuih^^Y{P7qq>^+B?gs;g;uI^dF=PkyFy94`|Sir81h2O?IKn zb4U3LItms#ksxb7m_Q-~-Sg65t0oN=6+nDE_Ti5I>NH3!k{9xuk?8&$dj(X-dk(bS zw?xQzv_6$NS*Nw%1Unry#u@b!eZ-_TNxW?%(3_h-WC^ZsKE zCC|F3iVsH||BJWTWVY1m)ehhL(kr+3g9n|^BHMfC4Ha&S-z%Ztd)U_XRgj>$kQUXK zuWWRN*Kc>-xmW(~8$Yc?@W)cd_fzl~2lJ`OiV^oR1=~{fKaX2{E*~<}^U`2+NjU_P zYyD1n$J5ynOG}*hmM*q0)@muq@0M|bW>bSAz_hqpwyxQ`z1GyjVImAR*CF4YYmr$w zcrl@&$2xp<7^E4O^teK>i($hyqbXkMsKlp!&NEkS|FJQZ}d`b>P${Id>5bhj5vvS%y*B|z6)MhppOhOoF`C1x2&#vpYjoz?qmk0L#zFGH~W37AITL&eyjAU}hgY!avM@ESg zzGQORm-y(@&!y-LpdoLGJBt0Cj_bAO!4WWoW&C)?x|_c^h!-c!@9fT|wQr5-GmN*$ zM{1yq6TVZaJ9+0U6PWHx1_%P;{BDeI3RP5MKUAu}eH$VW{J?3+;*8_W@eC~exTh(k zh~7E7orLO5&XRffr^u#eXTDUU)c39N={46Ml#G=f(m#*fQF2WUXQhEH__-h-5e2iO zkNg?(+5IQx`F6_0$&RI+Goz@8Bmqs;E!EC=EQNjmOLot_=b3x%rT|HEE;X}&3UF<_ zB*3PJ$;XT&{yQj|GRL}9j2W%_y`EQTTz`Gs^k%H>yrEfhzxcOHTVp;rs+#4wsMMge z_k1kxH{ST^1=V9|c#=fj`Mh{~=j95(Y=$r}hr+ASKOR!UV5lDQD^umRO-7BDb;^BS zYcf5r>-BF-djuvUk<}Wk?!DYDZTH7-yZhRt&A;KG4qkQAJ*1rV-{Hxm@uiF;4x?hC z4y8Qm6*iOve8Du+@e#-nFZEJ}Y+3hXKBsqO<8a>_{wZUH@m-JitZW^aZZ=(K`A;fY zJ*3PXu%~r9FhBb2shP=VirjB1Wq@I(=(-ReX0yl5w@NsPVa*)dm3;i5rGSg9s5f|E z%c>Y@>3JmG{4^jv3p+9XUBA}Qv4sp*2eB0EJ^7K}@AN)iU#zRN zx?)Re^t>==1)o4Ip4XSiS5bm*LCMz54r}+)nk~jeg=P!@4m^F`?UtVJ@lrivg2v?K z?YYYHRnVp5eox@VuRuJdSUwa0hLsymeNdD{(`;{icJ<~A=^^Ah4nd|m9)>iwzNXY( zrBdb`ZafMa^begkx!>>JKbKLh$!3m8I(cAg>%B0lwntFsHCH4Y0;MqO`u>TbghAGf z{9z0BA91S>#*evw8?a0Hzf!^7xwu|!`G1D__goRF*)9*HW9f*ru1t)wpT=drzZ#Aj zMUNxw%oZoYDrYjeAY-bEEBfRWA9QejgS)&TIiDBDe;jZXIz89cFkwGPX+I$kqI zeIy0bLL?dhjVV>e(5~sBq07SUs`llKdGKCj#K8ma<-b*FMlw?BEZ+{!*<*On1>An% z7{kF(roF*TXL=bwqRIkizJ(el9bam28a6;7&&SYa!SHHrZE2Gt|B+<{?D#UoRD^;N z>7qD%&&!3uCi4HhKivte^?d^`-~YK+X?5hNR;tyv%uMX7>xu49E+j3uJ6@2d?$$2% z%KJTQZ~FL?Yr9<@b{0o1cOCmmRj!8mApoFt)1fy}ba5-b=eJ4?BWI6?8KUdSF~+NY zqOB?D%BAa%SE4*#<+g)9NIL&>>Wn)H%&8o?iDpEf!*2cC3-8M1&ho%9Ms1PYj=1Dg zH-ZP8cB8!tyq?jj9mRErcXf}`E@Th$=U1EM)`-y)9uXBjEPYqV(_HVgt@mriO&@#2 z;^ccBpBu8@Q2JoT-Koi|MC#G6xW4zpsxCxr?^3>$nl}yRFo}dTX4z`Z&3- z(rio_&G2e}=}YJECE=*fy8OIa>iih$uvylfT0bUL^s>^ZFE%?`dR4-06(b0z%#zXB z5s6*D0es+D%fhxc93X1azmwP1MG!R@x`7cpXl4F#httHyIkPDB$cGuA_=nP+K~v?GnyyA!-L zR#$|txv3pJx4su0mjXPzJb%X}4i`T8#HEbzcSeqNJdVlv9@km_9UjhZYJ?pi=BVJo zL=HzEA|robR#t2uU+f;NU2LcJywi8-5|9l5wBd7~WHjzvhV?VSJnS&=qOgb{%NfN1 zP$DLPNRdTjVphaqHG_+^sc{KTXVJ{FroMqSp?nAnibYjNzjhZe@CL<>=~ECGN?pB(pKkr7K9hh>RqsGtZ4s{a+0 z8aA#10M5Jn`|0KN@%fcT%j#8O;RU@;U%MRdcV8j21WCE@ANaF&61hYbmUZrr3=e13 zLwka0WCo5rIIOPU$WPVk%*QCeLVqetQ@TQHF$ecT;FYpWA){gb_AW{ zaZb;ygxJC1@_3^}E^f(7=-W|<_4XgcWR{gzfS6>pcsq{nPr1$(m0w(h_0(ukk(gu& zn3!JB3|w@Pp$x&GuqniT3?o1=fqgaVd;4cPjI6uxUG&m)Zjk`MmhDGV;|dh1*zMu1S3w{jF|86aqFi#D zsV~_3JT^IaW?fwSdh}KDSeXn$lG~F^EbOLl&%bo-eE0|G@OUrev%0rB?00T%L;(bz zpdr2w4`r!w zsC2}}Fg(DU`y}&)N%?4jvm3=41a5YnA3R2dq%-$lR2LRn?+rGbU!c3tfA#Me?Ccgd zxi!tquX>CZ&H%%zUYglBrPYT6e`q|Tg2dJ|J3kBiZb}CEJvg?v_t0@JpNokNujYq? z!Sl}&AZdV@TH$bxk(wAEk0kaB9MDegfIgATgxR_5nfyX*qhZ6*?!BMb8iq?1#(Z@d zC;dN>I632rid`2TNg(lmJX@UQzS(xR-j>)LD;H{Nrl_v|U)U4or?@)u&Q3f4|D9Vq z95ix9K&o@LFi_z66RbDI|L7A#VND$Od5Yurd~5G`Fs?&Vt;_eZq(6JSIfgg(IlOfF z1Z#SK&v%t7=(xyje$^ZFxeYD&j8_v3!vc2$wPcQ}cU1Fl#r0JpyDm+oGGY!OAr17j zq22f?_7h2(fhXwovMq(k_maWxX$U-c0PbLtC@MmzX)sQ)EvAy8EwWVKJC_C(Dl~h( z$>rkXgLApz1kvxam$A-7ZoeJA^t$g|f9G`Tj=r2p0w^+MDsiD^L&WBa&D!qG}p7-;Kq^g=cKYOB-E3k`BH-Tj9+=G`) z`@I+Yjp3=B_g}P(xuR}b=-9Y@2gbuSF*?pOf(pM5O=xm5UH z5jZh<5&`z8od`EQ&t2jizaw`#o=1x2C4516xrCxP2J&s=W8jE%7F&CL=AXOY^7t8^ zMTM5%ZyYDsUsc%+x+L`aMM>oS+g(pvRMnJpW>P|{L+d&dr^S@J ztN_p0{ebi}_S^T@@Pa;}x?NI0R}7n?o%-s<_011_qq5N3_03N3&V#9ABW=Tu?n915 zI5wNxHiJT5;FHkWt;z9{-~AhwXB~P#ou-D{?Sf3SoAcDlUfUy9&w=;jXD007XSk6% zWi9`QcFK6}i2lb7nZN&uDbL;w4i<*Am_1`?!OWZ*$aHMTdF}B-#M72Zg3{M57)3-h zYSFN#>7kiOK-X@X!rMBWWM{S%hr>sm7-9{xUKEpU?!t+6N-tPe)1*Ve%(Z+ zGL289Q+hYBFa%7C{;1OGSm_JTFZ|SDl$%kCeP+mjQVs3Z;lHn#z`*;3}riJ^fAwCB~O?x6|JErc|_m%pSgZcU^x z0&uKMzw)*&hs|0H>ou+(?hSBxO7i=uTN9}XG6O;0V_W|g@oElJA3x)ZqJ{jfPQ$ov z#~WePk&uI->WmO!&5v@tj;Y-O#i;9xRgK9Bc^w#128b7?^ZfCadIll;^*;7|g8R8{ zfm^_a=s3Q%jL>0=xd>qcEN%L4UkT=FZ+2O0QN9(kbW*{;u;Kxg55dD&y+1_%aC4cj ztoS^xZEeS{)ri)w!8op#QLlk+?W_N_uU#HgZaq=VQDW|*5Bqg00?Tib4dLQ-2f6Jd zDntfXGn$qsAwrq*b~5U-q~zj@oh~skf6UVWfK&<#9qQ$mA^jrO zD}qqoNag!cUJ*H1z|u_>rmp7^d0NvIn$WJ-{T$U3f5udwKFp|_zb2gKdBB1hJGn17 z#V;=BU+SkvLc=V8| z<8dG3vv=ywWVsGgpyNm4B%T)%;=I#lej8-JImE868wi6;&NmQI+*5PDn9X~1pS=lQ z=%1fv-~}?$nh8aasI=gz7!3YZ>i;vbVdC_8CC=|J|Koc9)TMu5QJw|U>LptlZ}{GYH`v9hOo&jZ68 zpNHc7O5CQCnAEoY_S3e{ZvAg5ya7b-2QA~d%E1L+`p76Kl6GO|+OA_SnQNG0azD-} zRXF}4e9F&W*M0zTt|G>!ni_^p|4(1PkK5eag<8Ml+^tvVP5(oBA3bE->T00WVQy_n z8~_(GGc&umKTglgd~GL^RaJnXD&3YVaj^k%5j&;zc0_S+dzN-x?;V{Tj##W_<0PBR zCg|psiGWD;*OctG-wT&rlUtu2g0=*{X}jAT-`?X=&sWvtJWauG59Ie7q^FE7Hwmh? zTJcoy{J;e?TGAJQ=&jwpwT|b+J>SbyA_(Itp!*AuZE#pYB^0xg0@FqGZhI<#M**v| zOlu!HQO*3X&e2-XBkZ%|Ud!+Gu;&}szgPU2!Fiw@xE?r=Z)$%q_`lw6J>52r;Rv{L z%vhpQEq?jx?|yX)j(Mel!hxK@?@=fWL!gT+U{|)1z5Y0+&uacax9M>%`1YKyKfAdR zQi1KlIqxv0`*^jH`x#nf$o=*K%5~gKC>QRD1)f=dKStqBDk_i8PRtfUl~%pM$izgP zMpV^*v(P1Pef$%Ddo%CZUB&Abn|Z32$zaK;dBEHyF{-BmJuq-k5Go^YyFNlO_7yWC z0Pe-`UZKsYmRjdK%`460&9pJ&4lYN+Zj!`ViT#l_66tp6u z=%0z*cL?Z0{iM%}fF*Cvp1(cD3+`}KJ#jy&%n$$ZT_W@Xr-`gEOoI*@^RxfbBTu;v zzwPP`4L+7bhv)+r}TCH~X zKJ|0ZRXuB}W|6_}qoQkY!^L@eQ0q5yb_eRu#H4sd8f8HR{+wM}uOXDu3YBkOZ|N6(9 z1~iS$L6_$76_jVC<%d5qqG+?#+3c^G?Y`xg*zs}s|Iqc;QB_9Wzpv8WoeI+39g-p~ zE#2MS4bsvL5`uI|mzxwxK_oZb-5q!Np7WmHxntb>hhxaz``P=+wdR`h`~6I%uE)UT zm9As|yO;e(~7I78^OZ*|wYuC|GqHoqfPw2cXp)si7(ps~X1a9ZnT zx8_;Szarn5xa`wY5~XBWN$~W^`mV!z%lb#U1F5ezFe*!QZ^ zLt!Ou#*mJKBXKc@Y;tn4lM`0ve%MIa`}vpJgic zVb`{1HS&6KnEYC}Kc`{bcxkQQEiHZZXrGpmBkhnBXtUP^HSHH<+`Xxzm!tOx!-^x< z-AT0jAZ;#WNx{YRC=#lwEWBHa?_P6GNMA>={F#Piw9a6gpBgn>at7|c@v$vpSpMTR zdky0>Zy!slHWJ;OZ$3S*ctGzcdrE9%bu*2XbC{Y^WiU3{yeuhciYh-Q;<>{JJkxRr zC=&EmDBpiRil@)a=5X-|&?ek4G@zsc>V_zLb7TNWcxhXzzcZ zzbt;VfxNS-1QVT$ydGhUoqJ$EeTw4i#Mqw;>=^Jd+Z zY3Hoso5Ygd=a56CcW#`4ejC;@<@gWlHQkn;mbK)9sXXb!`y!RIOYqS#LB{9hcN`JFLX<36Qwsz}Fc2D2*5N^g&{+%x=+bpVieL@4BPSYJ$_wn1s?5&Ih9I&Dvd%D zvWz8%#q#8xSTYx?hgp6vE)Hhe2rkx^Afm`%H7_U6=AxUnx|f|#E2@<*6z^@z%IB2z zT?so&VCAjg7pKL<}oD7Xjn#&Lhv37zPic;A*5K9neMjlK>43gY{1(K3SnCqE}%^ z2peJitKX`l3!VPzSk~Fjur@g^$6IH)U0I`;cnDv2pb14rJcb;i8%<-b~a)SKln|vm6Zgw2US56m#-O+`$PD7jy zUArGG#xoQ?`VjnUpK&z8ApAViJ=^9k8YK*pDtaiSvF@lu8${uLif)VDA**7ge% zm-;E~P8(R=<|DJkO79K2!3NV!7n}ADBhug8Yx)ES8;TPo1-QsJZ*s?1EjUHxg& zbq;m>oRcL7`6S`ccI(6FX}{GyE;<;kuaV=r~3W)1yZU1X37V*VF?lJsF|#~Nn$bL-*J@$DXYRoTBk|2-_kaU+(U)Vj+7?RLQU*$b+3zbdIK7$S;ph5jitBD-x#;N` zEvDqzRCTq+KY3dgMj41|pJE*SC{t8O#1K@aG(~~zoZ@DDOc@oU42+#u%Dsx0Az=Ra z^MbhHQ&h}$^e~(GQe~O&&BAi+S|{cXE(UAM#s?Qu$vRmn4x0z5>aJ5koSsVIvu&|D z-|omkihH3Mz3(Z_%Q|veT9_qRaA5 zXATQ0kQrRvl%*)FYfOJZpfLSQL(2dnM&TP)p1VJ*r4u#t-54cYr@_Kyu!@h{QOFghMUpxYboYe(1SB?h0jLj3Oee47gwJ=>VZILrGjDBt zU^t9D-tz|hXgZ{EbHA>u>7am?6fTf)A3&x3)r2C5$snzrH3`voutcI_FY_a#^>uFt zK~31_@?!@QZ@R{Zj|Pe#-s5m!c-`L)dfl|n>|6#r5Pj#?s0UsdfH)eYiT5GryxH5LRnb_ z%`3{w=f0fU1ni0Z-6EfHR*$qJS|bT_=*z!$OW~hlSIe2$sOBe!mAmdmmVD0b+t7tX z3nrn{a^};bKK=m@0hAgv6He*@u=M9jbUrP9BcockC6ae@p0BN?nV?Mg{lM`{TRnEo zc;CXzXcK3E>9jE*~LCk3fyj11^7#Fy?^+#oc|%E#RV8X@rBbqMb6TJxWt{dEOB z07~<|3|SVfOH^sAGF1yR zaLth4YvzM`8{IchW~&ErfNNDTfNJYcAb$E_%dmwW~Do6#PUn2VN({Wz%c3kVG6w^M&m5V10ud z{y-EdtYVE4-0L7|v~uait~e1MVX;SFA}3BCikZ!r@%W4pK*z4iF`@c080zpA8?D-M z#do2SF@v^kIr6t5y3fh^{j=>3brozNAB>$QYWa(Nz%@pA7M)U8k#brVa|`@FS4CeE zyu5!{LkN9dK)HKX!p$GV6^=^MfQWhm^G#$VqHULazAl1EEj|*774{uvDn5kwr_JvZ z?>nR&nP+Db;T4vwh*2BJ_T|;G8*23^9?IX~b?CZ)*F&DTpPz7C94G4T6oFl7sDJMZ zj^ccvCC}FA-#&%2ouR0|DA46?c_ur+#Zbaj;!&P3Sg_+&*Z5jfS63ya0}YI z$$gDXQ|o>izk!LXDWXM6pAmkC z)?Jq^g4x#dd(6rC-(0hFS&!>!84^Zhlcc)#ysX`uwu?T)mw)U&%GygK3pLqotP(EK z@^|G%1^hHx@V6jBC1hP`pBdY1a(oOE(YQz4etSX!v1v5Wq; zVrAmP;do$i#Rhu7L%ZxQI-Hp6iZ5gI4~K@}vh{O>8e%j&h2MdC8Hfp}%}$)Qdqe>b zqogAZNev(brx+VEMCb+yo)-*| zb%Vju&c17dsW0-TkcY~Lwshbftn)BMcI@ts-^?D~ zy$H%r_D0z|Irh3ybvZH2us9)`Kw45E&Zt0yxqzc!P!)fw^T3N+6qlKgBCsC)Jk0HlelDPbVb0!r2JEiKBJ7fx< zh_tDQK8ZXupo#pLucApgV6?nAv2)>^`nIG6X=7=>8{fz5MqtN7oH20adA=KlJ(yLC z3P`aHGcpV)!=hbvXe5ln8`p{MXZ2@r$|`aHi_4wb(!#6=gO6KjbGeg061K`@dz zR=!zN>pbk>wtixpxx$kWyu5wP7KiJ147s8r(x%Ynz3D!a8F`V}3IaE4X`pI^mi^Sz zOflLnqeuBCwkJY!B8dntr1ui02*b+Qf;jx(R#sL_>W?bL+3KYOyK#x&%|`3q^) zcoOaZm#4!16|EEF|8moSOBl~**`C*}Xyuq!8GfIzft=J!9V1(=oI85I`hU&wPL zh@32)0zq4OIeoNCPdb_uFckgwXLcpAjZ{aHeXM)o?b77 zif{kS2>oXg0UABXCbj?UN_~m-M1HH^_v_rBKkk(yrm;EQlH6dTv51fqaKpeSCsi|% z#J@0n$zMyX_&TL=0#Q)Jr`!v9Cy0)WA57fwC9N1>_vt16`GDT3YtVebOnLd)m}~c( zZRI@gVpOvi=p+`vDpvUpFaZDg&KCdkyMI>dvDPHbUtsEG;TB-C>p!EV;SyA|WM>R7&fT0($xK^2wQ*e=aHGW*ubr@QFpn ze5cQ%!gGV~47mw3j8v8V?8jf9!biYmDQ{>)HZcjq|KkkOa?>AV|Hp}EM+3IoRVLsK zIll!)5a1$74){O!AON=Aa)DcQZbsa1#SC_M5CpT}4lp!=C4ct{>lN7O`d;}41r8?C zogVgBWJw;=?|U%9|Jx6r@;h;sk0#4(wG!Q*}R!|NVA8&41t3bn-U(A$k`&Oed68@!xw8d~}jd`v1$Bgi5H_v`{%~-&BzNRT9KH zWEl4oLm!?UaVZHSp--Dn{$vLHo^S&lgz4*pM}8)C_)OnBH?2qO>#_eSHyshwF)HvezKf&qcuc z!=_F}O;^b6$`}V1SLeIaO9I8OB~2K;>_h@CZ#e4eQnU`fmX=!X=!)V4d&o#OR}5I( z;}GJGR!>4D319nbGg`8V#H4JzX*!-2aJ!jR02qOlLF-aywrHUF2_?YFXmgapj(ZSP!%`M%}H_L=olzmoiCYpkFU0k<>DF)5?M zi|1zu;h;4nE+J6tOdecJqb%BBaif1{72|c-4~J&Zgcw-vicMWw^)9Zi{$u~M%8DqY zzj=HrXn2DRsM$JI7p=-&j=$CUI57AK$COsbVkTS9VvY6c+0$YO1{%DQl2sz#J_cKK zv;`aIwT1EQp37cwOcIX%(0HU{B9bNAqee{U;^NE@bVs3~p%H$(;NmC4kcnd~scwoN zt3HBkG84pMmEuaPBDuFZU8GYZ!NGuWd207Zp*3(K=Db#N6S?^oHN4q_j}y{w(?8)3 z`a~RGtLZl;)Yo%@=;*ClMSlnrHy&^qmQw_n7&m?dX7n)rT&paE5;+A0Zg_Zj;L5?C z2n{vSVJ0akV9mjxi!T4NFIeKeh7QUxKSzFoun(7Hudt&dr>V&UPr9J?OAt8E9Zz@r zm3ocQK!4IhO-0YfCT2&j852J7bX;Ri5>br{jK)tVdUtm|);10hZZwd>+XNjTh(o4r z$kBcRZzG4F7e!~M2;k>@*+&4_5|F=;v$RAkL5`+!YL!U15qYWi8ggl!6#;fWdz6>o z@Wt!buUqt34?IXqhU5@ol9Q6&$;r|7?e-mCQ(_BaAR`+;Eee3j@R~>aT)q2(@i}M_ z`kOlrv?9d{shv>ajxl%Y28E`#Q@|qfqP!f3WN$Cu0>bWwM&0r#q0h>#*ze$pwdRJi zhVq(DC>yX3K|i0`k1U}&%Wc)B4Rc87=>4lsufm8PeDzrgvr3Gc=a7({O-K-UEAVGl z>glc*kX{qz@#QS$*co`OdTZ7gjDlt6r>H37>!W(eW{wh_QY5TCCXnfXiO-<{IfKgoKwGQ%E?KZ5Iv4;5ukdJnv&wBSAfyhp5RYC zj~8gU-&XsV>Atqn#NC9Cv?ETo#0W4?BLqA`wBOEN1?D7_@99HC*i1Ww3NK95#g*7U8 zEyM3Yu7t4`+8uIkVR5roq|O|yAJj~UMT~K(KY4i^F3HyTt~4Y(k%t8SUR|Dg_&7nC(>Q$=;w{vf2AnwtC^9{pNf z9lw`FLPb?H^lQXO%bI~aS3h*vyri_wY87TO@+*h;q?Akog|wd@Ga?CzDt>rtgJoiF zZvQvce!N(sx4ODQpe)Lq!567o6iu8cmQ$-j$TB*5^AM26EE>AFDD07%hJ#Hp@V!he zL)4y;ItFFv9i@z{C855)zLb;{yXich#aPDJj%vS|S#c2(kywCmVqzkgLy~e+<&-@M zi$KN3eh&{tW+OQ*>%F`!lZeQmqtpukec#-~2e8%N$q!}UX63E}Xi}b`*AkU|O3hQL^}3nTZ$sla7rKQDmjmNJq<=H`V`1vENL)fvSyQzsWVUF0>DMeQam9Ub9w{l4 zGuyNR0>~AkW7U(BkWE^}tiDBo27qfXENxEzYRO_e*@yhSsqr5M>f!dBftAtdIT!&a zIZ6Aw5k-+~Tw$#d8~_$#knw|}hUG&`-AFE1Oktr!eFNud%e|Ggy%2NDL9I{*pC>Q% z*?Cz-1q~Bd^6mN72W^!fpB`3;+LT=7_vP%bF@fk*Ob3(#k6O2r^7EAq3@E&NWmnLU z`^6#0=f7uWWL;cv;KRewC`Dmnre$1RQ6sFAGO(0gTsY_E=HAfIte$%9xCh>pN_QP7 z(Y73D!CNvLNL5ZNo5~9zpl}fD0L@RZxGuT9KjkA)-Mrlf!RETV?}>j{see3;s6dqA z^X2RLs~OeK<~2z;2W2G}O@anO)>n`{%Rot7pXa;e$;k{sM~bFA%{D>7-{h)#u7_Y> z5*6J;Av4wd=|}!T);p+JB7SgUUI*Cq^L#)c?a+okIFTU0*!xH2JN?t`g>r_7CpVk$ z_0@zl!fsY7s$**?VwWq;v;UUk#hvmIS26X_%GoYN{57vY=2{dkJw;xKwA#+z&Ksi_ z5;U)QLZgypl9SV;SXK&(8c<>3<=upnOB9OP#d6=3hNhJaK-QnUl(u>dLC>4$xWpnE z4j%>4U1ScoW}eliR(eLVw+=Fb)@2NchR)dBya#kf$mV@Nv12pYBVvo4?(Xh(_T4cJ z_{d|>SOZTP2oSyJGK=2~ke`|Dt}Z~a@fBBFoHvT!U>pf)KDfEVFMKw=WrvuT`9%CE}ua@;S_LrW5i7Vdf*~l zo%qt;m>5(>#hoh0Rgy$zT3S$GU?CbfmisM%1Fjfz-2AFV;_8^G*Y+d3hS1zCbtaD` z4(?!rg_!{_MyZ^7wBVsn2i zc5vI++MH&=h-sdkoq>kU1h{l@CVijm^gdEn+3Vl92d_G@JNI~5DC9{QLy*qSUEW2< z6}MNQ)|4K98;r*a`5q!+F`hfT!BIq%nH*d0Yi+YHg&t${G`G#!^(r9|zIRAL@y$rV z@1^;W=QlXaE+~T>mSbeJaV#bDOo>6I=_T<7WZ1?zbr;M7c(Gr;8S&3$68A~-?;KbS zu8UoAe43gg z7*a&R{e^YiU3s7l6Y$Ric$nE}+a=JLar#~{1K7-s(dK)%UZb<(s1_)N&Hf&-kOj9# zdu}dGI|!YHi)7+V4)4(Ip!KPL{@}T|y386H4uakl^o-1A>jQDXSdv+?WkEth>MTeG zmIh}KM9SKRVh|GzwA7jEoI)5uY&;Y^AR{O!2)fryJU8GI#2Rgl5a0NV&d<+d-s0aq z547-ePDY|5q_br8d|OKdA+oALT{>v@X(q)FrW?D(7UxDl=2kjx46L8vo2t ze(5ZNeOX*wtfHecR6cEM?Rfl(lQB9eNgsTKR+u?9Bm`Ss^QfO2Eh#y9uHBQZLbIme z>(}rQ?AteQ`Wi|rWB>e7-x|*z>?&sz)ow+Z;?CfArgCU*fA%DiS5QDRH}{=wu}00z zB$kquR@2ZQ4MSf4ln}GMsbyGX;z(0vZx8kp-NGGJ0nBKSlSMsn3KICsrnut{Dw*vx z_l+T&9gAco3RzM*a}L~!y(V>J*m_FxiZl!iiBNN2fW|BOR{Nr&|JT*w!l$U{!j_f{ z`-P^Yw6p=xacZuvAT+qk!*qmaIK^qGFXn~=zt*e6!J^sfDx)_V8B|yO6bnR6H6(U26$^t4hv%?qq<;i zNDanvAU+0{Dy1ZipslS9;o84+YUn#dGLcYQM#R7tBxZBP(K0D9Ps!(woyX61} z7(cjg`f%fXapi`Ki`!oug*#Vginz~b_lEi3MS@|x*1!fV6B!vn-6lJWfs0)<(zF3^ zL9MK;%vO8g-8?)_pQ2OMHMFMwF1R_=E^)=qn(^j*9?d}Hv&F=$^sTiOd0GC3iW$22orSFa(L%;$$h_8&sC{`E@ ztY4bGvUSg|Oh#tC$72fgy)o{ADl!`yMi`=Q&xk#dNVf`9`Z?0rcS4?aia;5BbL==E z+key7T6lup?Mjw_gkqqlA+6T^@Z;4X)b~&FRD$W&8qGhy?Pu(Y`iIBq3vV<(s_3uV zIisCoceIB>O&>JtQM;#qRc5NG;HM@Wnb|+Dc6~u$a%(I_+(*E}|ETs%sc8W#>veQ#_tJ65zD*q$k#UGQpK_ zdZr8*M4!zfi|+)< z=9PNM-SrMGI@i+>ZUsXj&Hm6)+6iv_X<8L~6oN>6->@Ob3WNGAXx8rq!6`8zPNP(bPFt$nDNdaN5ep5 zHql3A64>7g`Jz#VOV_X^ajb8sgrkwCww#{A<*oTul%aVa7OBE0pU-CW1Urc;M8ejb zaWm`8h^24m4xmlZY1KuBTz~*<>(Cln!<;h`!`A)YSNt=V3tso*C|f2MZ^Gvj?GlCT z{)7G)>jgte(@oacTB)P9LxO7UwxF=@3MjJirt=RCnLMJo8pmBS3CAb4Z9&#_v^4qK z6n8IiW$|&a@dv-_oM#H!V)!;y^_qH~ws$|Ldc&UY}Rr;mkL0D`6oqPq1UK4A`UdstMj=e`S+QTUsP07CQi8^ zu>^*(2GH1v*KYQmyCQmHVMvYURpX09xTAu1jh7|va-zhcnmjvFz*M? zw+RYUu<>Tcfu_ClLW1AQ%S8*7oJ~MRr8hG9Ggjd2g(>muVJHL+x0f5BWk9M8gwhzg zni?87IJl=?9S2pF#RYXyO-;No!7udnp@05P|NgT$Qm#=kr`w9Dh$>p`(5PLzU!^0>DEt_Ef+AS$+@!fjvRn;qOhqtUZX;*XkSpEwG|{rEdI0!Daju6C*jr{ZUs}?!Cer5Rs%ag$)eIfQ*{6Ao)MnXV$#nFDAy5 z`wnpUpVPDD<>gT;G^+|rn&S8NNWf1=C5W|9CQ$H1gB1X{3&f@SmsU(!C9rTwQ6*F~ zGypAf-J0@+Xzt;1cm6ZrcI)|HPLE`87fMGx{Lj z&yi>Agp*bU`?k#%_(*D*>rT*p)6bT{;fkPT;DW*EV#q&@hIbH;m6Ih-PY~dD%$CV+ z1Bdy1tIW;Ii>d!0S@+Q%5KtoAe+D(=dzMc}TeyDC&XxK2v340PPQmD@r@tk~LqZ)t zrfmJX?RK<=a%DX5j;qmK<6&pXx6FF)c@!?=Ojtchlt%(7&A@}0mub=E&^)K}0H*6a z_qe{f5)S&O<#69~a$aw6GhM%@b$D#G>;CAgoicpUfP%^14OM{KxM#~leFb;|XbkW7 zMy0~|MZ;0w?5cCB67hI&dIqd(0yKGVPWu5_b?X-6)76RLY;$vT`*BycJX?3lzkj~R z_X1D{w(hQDgB;B`;s(oFliP|#uTk^GM`%8W#{*pSIc{V?m|GU;uHG$nhv{KAr=X|K zU(WAyn-Z3S*HgIOx|>FdcwMla7f8@oW=oypk*qT{@G4dmPBaXdNIIYA1#fU*uwbOo zjT-O3;*PQ0<-*nUb;!2+l*RZ;Ec_HgiAke?)BN|RGx$luT${Rem)Qx0+>;%t>dvE& z7eU$bV`Ayq0LFjL))w1&&v@J2eq<))fB*vz2G(Cm_I}&hp02m}TF&?S*DBmDc&(X( zw&!@<*|?F?lKpSEnRB`y9*+S>*ZI<%&}Ax)&vjKgy{^cP&2!O%2^#}HEPAx?^e+>e z^X}Jl7r-7rt2%y8a!wv}g|x;*2E0IEOgFg2KZ~Ss*$2#?UUa@%vpMg@$3x$5OS%y% z@L9cMF>J#9=II7Kt%Q0bxXNPVihR(K*rE0KOcir0jOv!Bim-V!)=nql8N)yk%UoZI z<>%7`YY~-Dsvk#AXB$PBuD3MlPOH*{=L=#_;W2Ci`E}s}l3H~BO8&*5yb=P^!XG~8 z4|eDI26sPPI;v}FHEhI&Z&+BO>ysgH@e)@e3aKFC{n)<*#VJr@mJQUOOG_iz!JKG= zI#g=P*E+a}X=teOq*hikJ9OU4ICO4W0PwxFt*zvYdl(jw#2V+U{5lhtgk{pKrWIri zA?Jq_Q+r6l#AZF?b+gF(QO0d#K5KVx^*Fj4C%6Gkn1SDmns;H<3C zpYnWO1r4qfS2hT*OjN2%Yt((L@~gGs0dxtIo)!+j%{JQ%VQ1mLk`X_7RJ>Nj*v|fN zjbmV#c>#jn=lpa@kb{9jp|PZV@t-~+f!w4Tt>O>-H8Q=XuZ{4)>vPgUmV~=*ZH=5( z3gT#xm<}JScDNH31!7atZbx>ei3xX*GQ#k!wcvbgOu%Dk~WJz=W&ZJQ|KF;W>ZsBTsKQAJ|W#xY4$=O^5+r|5LkR_)cseKP}+tZFN0i0 zpn*@g?DH-6^z?M-6py0muRmo(5fI9!8@jxwnTCv#A&?@f)4^DBKi=CzK}f*G0ThuR z>!&KZy7E#|aKyyK86|R(YN)^u(!3yWUrFP4nU>vh^5DvW77DU3KuEyAzyS2QqyJvd z5HJ<&?CcDMHU7vsMGm-{p4dlfa4Q0VBimZ2g*T>(?k!$qms*Y9qG5ymG^ z_s2zyDAvdvlvPuom41q^xXL&~8@HWqZKw7)~f{q_IUsD7;7#jqhD>hZ@k7S;dhYCLujw2>bnG0-5Aen8#kFe*i-ad!8Zb=|?LQ7UMg7}#&rE3G zMy$1TqW_+^yMMn%cnI~`JBhf6)9JV55BAJ%v)AKK*E&lEbs^V=-g#xa1z)W6yocZ) zuImt^km_JixW?P!Jq-eria$~4AyeOuI#L?->yDp1$d8{-)CB(Acyn3%Dk(%Re_@!F zI&WkIyYE)yjk$Dk3V~!goi?lvAxeSu+@kBavUZ~%4U?gFCg1ZVl2)DoafQhjG8by8 z*<3x(ab>TYe3hB-UMBFo)zo@Xij`E2GO!WG*5bPwZe`*0)d zpQ5R*wqOdu&mTF#_O^RIPIhblzH+)-xeySf#0Rt{?}xx*4S8|j~qPa#@d@{0|FPJ;reMGF6g`r#<>zWxjZed26DLaUB|YG4uo<> zo1oTKKBBF=#Ad}CpK~mWOe0x~t8WwgbrX`RrM{quDJi~$$||)bjEunG`M%p#dzb!Y zlyt_Gp9VkO=ME41R0-c#i3DC07av_q21DSMvCVsxWL&8Eo6_Zp9&|SQ&-^MD(D&2e@+d{^0 zbbOzeX{)j`?#!}qw@bKn5e>iNu*(1LD74$qqIUab`|k$0^}Z1s?>}JU!`3N-8C_6E zKCt^Z>yID`?K^ImZQjJX^>#2}qDd2F{>I4KEA9@b+HFAIV=ve?*guvlBzF$KiqGo? z&pn0OMydQ(bV~F&_;IkoTEBsn_tK367B+ub+RBPOZf}}O{c?54y}@x@b+XFJ4=&)| z1Bw_xX;71H7`T97Ltl_sPu8OSP{t3maiyRh%$gnppqQWY5{Ks9_f<7g`}#P$is|Zv z$oR?PdkPq6V7o>06JWGn(QC5OlDsvdYWVWym7l0#)T$Cd{N|4<`}hbN`rYE^k3WLB zA^_sK{4DNr=Io|V$NlD}QiP(zfNlTp6J*=9du7JFTea*14GEt^SYeKrZHIxQv-0HR zuRRZkEZW;@KR}5FEq=41N?@np9mW};x6O9Y0kEMNq({0BP)1u_Epx(?DG0#20|N|Z zmWOSZes^=0cJw)6aXl;7yH64|GxBfWz63d|*$nXs!8hF8Sf5!g1JY=On3BE49)G4A z`i~}3%eEfW4}bgc^@LV~o{uj*Hn#r!6ruW{ZyLGav!8IdM#aqMiislGV#w zWNvuG7N|pgLqnNfD<>$5kqP>RUBse+lKZFVXet(#&o({lrz>v!PJ%FR9W~UP1#?@V zM^h!v0Jax9!kose|9W&k$br4ro|x|5h41tnvhkUZehfs3S-ilmtV+ zVcy044L}YEXl4ZTS~NJ{{8VjnfXa0GTz;c^hj~+zK=f+yuk+TJ7%i&o!LBh z*VO)GXt7q4DQ5E)DCdik3AluT;sWSG1L)K@kD~SU^(Q`^vvy5uz78M*4=w`%%SX^E zr?;sFt4lCiJ1sSj;~X{RgX?sMofAd}-)+2d*4c#5z*74XY&>L z-xDl)UfaiZ+i>Rx-ipYcMbqBW`-#=EyXVrJ2bStDq`^g^wtaV$(DY!G%M=Jsl5Y5I zKJg0S%3&}@d9i<5E5UMlEOhbdz?Qq3B(hgfbpZJ_5(e^D*X+B4g|?(@hn8@7CO%HL zHTxIpH9Dc~NA01xq`c11mM8`PQ}lX$hl?ILW{vz97A8WD-2vYWw<&)(Sxu9*MpJQt z#)IVIXDWGI^=h@;S3Dtm(>6{soy{)56wUF)Q27_U?w{j7Ny6C)E~$G?3;Nft*Z!F7 zUu@NS$O4)ibVft)eKWm=VfA<%(AFc}RwI=ylG0r77LzBt)ttPLHY@t-U5}jy^!!n; z#ZF#$E(zzgX;8@v*S%3!ES4U&c(_ug?BwB_xu;@IZZ*YKQM8iWVbk-%k`x)MQYB@4SZ*I>+NG_c?cj^ z`K0a8b?OtMOmfJi9zOQy>$1M{*6-rZ zRgcGl`CQB1a?)Sz+s@D45&6}raZ$@Zsixj{w=>_Cy9m*L4dNF0B4apDc3A6+=J4bS z9S7u83B8XGNqzE`Kq|y7q(9ko-O&CJWv`RjYGw&oFI6wzzjBvqlu>NmjTdUU?`rp6 z>&liBsm~9+$4vKvT9>KRDQT$qA3)n5`+RUQ92M7g3ed6|JD6*gRO=#TRX7S@8f|Gf z*Pvw{96jNi4oKADMh(9#C?XI94P zD991LP)j8Vyx-+2_uu2ujXAC5)xY-?UmO#fq#~n}X`A7E&A6RY8K+vDO&xOCKaXrY zlJTF-$T+`$&Jn|>Ik|rXsTEveVz~y3Q6Nk0(|QNgsxGd|3R_xzyKa*Ol87dzrq+`! z9H0byFx$GHf>JcTy*{zp3zQpz9tYz6(fHQOT_PY_BolV}+|hw65(XZ1ewPg-AR1Dy zQN?W@lvj5{bKYDZ8u_&aN&;_aHB0QX|MvCuO_Zt8?M+w6%E%z#Z3)FEB$P_WY`Go% z!R|KP-uZ31(-u$fmm!=DWIHzMHA-IE^jRg?goLuGj2i4Hp%LKO`%`0>@GF%mF(cz= zovB>TB9TUSfdAdqzOt1z5kr|ZXr>~81Va1>V=Q9gw`OKb{~c9uPM<0aN)>dHK zE9iR@UH#w(GA=TDdSoTm&ddy%v9StN)YNqghoHD!xG%WSWKYe>nM4~$3VPToZI9(5 zqoA0K=RwU8Iv5_F9Ol|m?H4?gva;R-sHjsrluX1Y1spyuDXF}V3~k*euq%hw{<3-t zx^9Zt&wqcttRW8O-!yBJou?^;?=c|gXIhqSw3!C3!XL(-pFe*Nn%Sq};%eyY67oC( z&RmdX5pcO6%FNW!PLl>p5!nQa{!N#}tgPsn{jYCB5oQl~(WX!yC>AL|O;#M7&o~mE zzV%CNGMx8*;bChs@Ck#xA>lFF?ExYnD&V!B$08?JJT?%CN=Vo~Nh}KAeK&S^{pwMu zzrX)?kuPRRw@7Zfflub&D&6ybLc`BVSrU4BdMlzvIvd-Ys~+vDJaL~tW1*m+yi=B! z291m2NC(TOD{jnxqr`I3GABL>YD|5bX~70F7*(IO22r-_Fj%Qf;y1L4G zrX1T=vug954Tk6eQ5%Gg(*I}lW_P_9LoTcw;x~hKy%f*BXyvfVf9|dha*TcczLxX)As-_;P@f5MN+?&&zzXi>t}@n3h@iP ztQqFPB}Jwaoh-YFj-OT@_`bF8w;f=e5M)mW=P%L7C*soceX%sK`-7vFU=dxI1v2AE z`9jQ%Upv7`o6b{NEq99X>2ZA;`D5ndI=+Z4bLUvg920&XxH+x0WW04j>~}F_c|k55 z7J1y6_)2&8t~cM3hz@ZaM*pW@0D1Q^5?q>pfLnh2(bcM__vyCpsW0jYe*8DVT&Pe2 zyZJBQ3-XBs0Lvw)!9+nX@UOWtqgWaUzU;=PARaqw^hHwoCZC<9YG-&&Dj%pXv*2;K zJLmbTDMPAUS_)_P-1zm4>E-*b`#ZI!Bc;NXp8nadV)8+IcwX+9GG!S-)E?}mqDn%zR2)VeJ|m{zH_=3e?Wghd$XWbHCfI9h3CwEm=xIR~N|tdS+t%~ZWI z%qD7j6?x3L+h#nHb46eqpzA!j52HRTKM%3j3%o88zCClxYTW-J&!)H)$1sjXO7YQS z9#xupd7Fw^=F2zp!D#h|gSiW#nZ*nC@ov$W;kN6w=^5Jd4Qfy9jaq!qcVvP4hknA> zs3nTo11otf83K=rS7iJF?-y0>Jnz(ac&E5^x{axQugJf6jvp<$588jXor-oR<*jq* z9hhu4B|_k_{kt)5OFQvh&J;Y+eaGF;@!{d)+r8^kF-!^B&35Ly^_%KtAHtnY2PeKe zO9GVf_;JNd3K9WH1f+gBt-*efmDP48Lf5e?aTxKU$Yt}FSBHUSmCi7TwRa}JqJkF1 z=y9Yx5>wohob~*9N$;VC1WqsboF%0U_-;8B9e(qq~Cu;Xmj|SnF#^i1EYQSwl-Sd$zyWkRDNtoyCmiP{ckq!+C|u#F6;fJ zVLRLW{36YK_0s3`UKx%E2&2K8!=wGwOStmMl$=-NtN+5^5yO^@b%wHwz3CXlqxMJx z5#P@l8J`O0oB+naPqea!G~bx$yEPPKhC6asdm~+iX~K)-1_k8ph(Ri?ruzxZ0p=H} zT22d9d}?5wmR9pXo={_U_VfUQS++|I)<7Odi%~P%G%PIWHOiLPOXB+%!J(1bwN}Uw z2n5t7BKBz&i{+AO0ZF6Q`CRjFwXQ4>2E?dY{3%yON2%%l^5q5aW6Q|U+Riu@>$MVr zr$)p@7u1MFTC;!9rZ==GeFs^Q^O zaOEY~6xeUUD$&^3_}?Pc?*v)+4DhKA=TqB{Thmiu@B>$CX?A;X(jZykV$REu&5#m-^|_H?bcuwq4Mnqg(w>WP;g@YX*Z+sDzYMCQi?+7m1b26L2=4A0 z9D=($!Ciy91cF;|4Nh)fYKJ?E|Zex#Dh7UTOy>`8xp?Xw`=TphPUN=Wz2ivs_xB<*>5B-5MOMtg*6EaRC35gtl6NVr+?h- zVI5d4i2|{!va%^Ow49@3R&ULzEv99Mq>0v0^kJl@20QTEtdBf)=@C0e z5w&(bF8y6p*jEU*`Z+)P2)*x$%NY&pQ#~!KE&Ae-GMlTSQ;bCK^CkQqR}1a+>q0+G z3Joh6L051djr5_4NJ+RuHlx@KPkofgXgFp??RY~+W`HSFz3-Qv=}ykidhDb@6wVp; zRm(HI>U{z`PSo%UB;>0}(UO*!e!OF?(5&uXThKfhC_OiO{E4p6 z_DbD`iYIpwlp~)f{+z(yVuyLreTSjvd2Z3O?aruMpA)XASFp^oD%l2`)G&MrYXXnG z29@VviccR<6EV@Q%5T9GKj{z@bpZ}Ohc!4teF$=&^WEzICbc{u0Dn{vna zL0z#2y=Z#3e%+7t0T);;$d?GcqoJ=W+`|sc`XADz`oBQ42)j|Xw#rtGjr7An=>)aq zjUEg#FzY)RJliqOQi%Ljj^#+b{Bq~S)lb1W6TUSfs!anC6KkNC{_@6X=zpaVu78Cm zKksPT-~anyK4TJ=&o==Qy?;3(x&(ht)T1V0*iD|ek3w$vMA}$)ghz=(Vg$Ok<)XQOv4_qir02aI=pbBm1xIn z;q*jtRT@0{0Vwu3c0Gk3aadknf$}cr^=2QR4)R8`A4e}9IPB&bh0}$yJU6n2d!=GN z3{84o0i2hsHP4Nd#Xum-P$BD{n>2tk0-s~uObHBetLp(U9vObXa9(u1FawKcu?2VGw@1tXunh?`bdc=JKhd|qMaSqVs>trE zPQxSkruBg6o1(0u#RQ1-rU$kmHZnv*CBc z^Z{UBYEU+1oF6;V zD5d0sLCEuU`#L}5U(RW{P0$nMhmI$QRS^5pd?`zSo-xi*sLQnEB2+sHO`#q^dU1lz z?^8ikTNNlSI~ocs;{0F(>@sa@T{_IcSPB6P(lwvkowt{FP#xtbYD1RLsFrWZ2(mK+ z(o(cfmn1H~$VN2ELWv>eTj(x#^R+#GR~v??Ie)3sWJ1a}F8Jx?0$0BTEX2^eYgR%> z?Y@7{9TebLr=e$$y~d_b6^^@QIhbG}yR+tZC*ba#u@8co1~ZC>k>)uW|1@oeRsEDN z_z9Fejf@#83%CFb*Ob1@IEPwXgO<5~u<(6X9(%D>M&9 z$owx|`c#>hy56{D+m-Sl@e;aM4vw_XzY>_ji zE~lNioDcI3je_yM@9g1J6YgwjcT8>;gM|INi_HBQIiEm67iCRvxei^rwz!2;UNzK` z@xi%2URWGtD%@NQG!Bk~9|=qJWIVGvXKC^!8nPG}nn5Oo+x_Xfq;7nVg@F&cCF*Hm z8U2|a552;u`UsX*%r*JYzwJi*| z(d-Z9i%xiXTbaFTA){eNQBBw78TV-Wsx)L&s=nTp&+itG*>gBz zrk;wrG%+Pd%`~ZVwn@CDQ#hVTNLp$7a-o)0x5-`%sA)KO4zuVwbj3)>#3$*sIHDtp zNn7H`Bqzz=#^0U5fYfG(#yzo7JlS|Ne~e8RnftxnF#N3QCFh`Jp_P|a+|izK_VZZ+ zaWQ^Ylt0k^;u5t!gA@E?&W*jkz77qqWB~X`y{n5dpVo9&M%W9^FM+4`wcI~18Chw8 zBV4&vwIcce_U?(`Q;Wr!D}Qm#f!oXe?!N2eA=~w}Jc>O1375s| z%dTsYl{rwgX1g{hB{?y7NQfu|CGq7Zd5rvSU{mVwhX*IRQoRYkla_Q(6N*zz4)RzWswP zlRh$z2?PK}rE6z<5_{4(eg+zaBXwo(fRcyD$1Qq8;q^Ie1c6|&Xlw>{AR*}a_FPi? zF=|d=CahQo2W4xp#OnH5=Ei3Fo}Hhka`=VRPxdoFjauc87k-6hJ<60-M^St7f8}>k z7I21v%TG?rlmGHNE5P5E%}tc$dRA?z%Nfyg-Gw%UnRMu}Qf9W)3U+@CoVXhM#pYM2 z_$&@n%WIb}{!A$c{N9dphS+Y~j2NFk3-M_E(9k$-i=R|DDq&B0r8I}RiV+bCp}6Yd zd^4)&x}VT1e`7xdL;`L{z{MvGtB;F*OW?~s&no@ysL5_HKUyT6dSb?Cb)M#Qk%U&b zzChGl8tT@3lvZ-!Ij|+H(bsBBiveyN32qc(qH4s5T zhhbuyf>N@=Y@kOf=59H!?^vtxyrI*YzRKox36*OW)3^V=_~egpgt3hqYkjFgi1$Km3YHd{;c_Pg3IN=!{PNID*H&b!e1K&^`V2AbTmL)Hm>3?Ko)I3S^$dR5h$jIKRZx9RwQ*n{9Ly%PHe8?FJzX|_EwI-bk<#e1I&V<%H(F0zi2MRk+OIml`wP0f$Mp~V7}GM6RP89Da@>2vwVbJYP$B8M zvxT|6m~5#8xsFGYfN#$hsHkCmhRmR!L$%=`W(_L6uxTX*l{S}X&kLmgibnH(Kqs2O z=2;ykWD)Ff->EiUoFZQhJh_uxWaM@fW^3yfo25Y_!!?}%BT6&cyTtJMDO!Q_zd z+y^i|cMCmLxY)WLm%o~PS7><^HuS$Ysm2%jf!-H!btv)Pm!|b6y6J=!VFy>rh9`O( zqaMY{S+&q?o0O&VS{wlxnUbC+l~}+N`+??_!*;Gp41|)lb$7yORF_m$)k_*fC5y|H z08-nxj*ySyE&mCApQKox~m5s0iu6GtOKA3k4euUoQ5BIJ$*T3NL~>QL9) zvmKU{2_QRLv`6XfqqJUa#8=GXD*Q6w0!Z9)vsW>nri(cmmh81t-3PBHzbN=T9QNKb z0en;&*l_C40_jTn_DD^HJiA$~M&CUI!$>4RY^F{u7~2%ydtslzZ7#%yYK7j(B|wR` zYNa+v5ZiVxvQS?i=_Wu&TvL-Kpk_dW5_URY&G&bWVNcq|c&ScWPi&hD+^@{PR#(lg z>HIrpF8&A_mDFE;xiGqRgE9IVzh|A~TRj9QwCp21dt8W4^n4Y(owI8}hE>euw%BRA zBNB4K+Nz!Ha)z9VFS%JcJ~Q8IE7vWBHmf<6*^_g&H+&^*J3q*B4D9)0hR5v!)mPn? zL~>?ZcbJy4WOd@h0s1BiiCp9;S*`-7&tJp~j7 z%xCWv7g?W9M@iv4BxgGPuNl3Pol+ zP+eei6xRbLKrZEBzb4l=@ruV`i^h~Ww|!S$Q@^`lq|@yHy;s>}+r@I{T;(>#&etmZz~;;F}SljGzywjHkrC%pV5rI0|#_21)Ks}&eca94Oy z-^*f3QqLc@lpIkOrGaFyR`OPnND1&3!C5FYXWeo1C8k6x*~<}`0kYaKG>-`St;Sy zO-e)GJLH)gXkjP={@;}OF4)IBUzGs$eiSN?_gNFqlgk!q3nSs{^KHIW`}|l|cVtzS zJtLOeM@0gjpV_?%=pItRWHk!|qg{N}QB%J-zj1bg=oO;FAbcNEEv7 zz!Vh|Sq+3U4Wxa|>>A;St!Ben}HRRuX9;Rz?58?2}`ivyml zE4mG4gM>AF>6(eP$hfM{J2XsXnP{NqJpVBUmhQo61s=n#pK1rpNXIildkmVcr;BU~ zSPC_H$PAh@CCVbt$izy`%x7g7g#Bs>LVtq)t~iB;&J?@CrZVY{{qBTiL-2K%Kd7N& ze1E{uwzyTp;j-g-ZJ+e(q01ghpaYiqEDQ{lW7#Wd7^>;d6$xo4z7E{2s{NtM)#-oG=2WacT|oV8WtA! zz(<6*8)GPi$N^`w2MD@0fhsJAwwC*7$bqE>H@8VfA6nVs;xdJ}8YFwC@~PHN^3gB! z`L&2awJaJoA~R+Z34T{mlc+xwp0O{6Wg`w3){uzm2P#A!uA>JGGXoqZG^t1M4?%S| zuqA7o1*n#DWB^Y5jQ)H~-39ESKt2U+jRS|MADztV0zW8~iys#sUJR|qWJt*)0IS?Z zh(%mG#8K$X5A|Kug!h)nrQU@NSvC8linJVG@%!QOaW*dB6n z$%w<2`UWr7A)3jJCV8dv=gz&Kkah{OWWmU!5GtA_zBOSyRLqU!5_5Eg(ifU0zJu-@x0aE^9hXSgv(M;DP_-lE(HJ&9I zOL^Fzh#b}kadmUv5{8@(L7vp&O^pft1G-Gw0y^k)x2sEf0vLq+{V4vV3a=?9SYgW0 zA#2Rp3((k&+D~4whGaDC(5=ydvynf=5ox@JI@u@!Ci&z=7TLa_MqaM0+^=>V9d<$m zl*oU?d&E_--1^9bW+$_uS9E?~(H;4?9i^p_VUea5igTJ;RVf( zQi;=WlxiG^TWq{MNxW`#lHyBEe{QRBx?y2}`Mkoy_3EHUG}Q}6sjqu(Y0J@Y2l_l$ zC#D{J7~3quWRdWs)T5y3o^ z(0MFQs1Kj$VS>?SWypFo$nL_Tf=LOXb?Jb|=hl*5^=A2SP3_kM5+rp-`GI;YFn4m< zC7L*KFt`zLJ0J+YV9gIxx{(U!Z{u2ZUC5Ve-L`^r7@=TFxj*Qu{|kI(W&%7+51%HY zEHdGweqxs>*D_XmWi6Z_L*-(pbb$SWLnI<&krd9Iz+UWITR?ZsViY1l`5uAa=m6s% z(;6nNSmeMS^=+nD8Tcp16GxB5hX~s*ou+)5wEbu}IKlLyJdE`>*V?|E$$cP>%dGm@ zmE!Z7A8e^A<%Z3|5;8^udpTKVKC6BYZvqN0U|PZFBMGP6O}UQC-B){~Yhj~Fql5<{ z(r%1nZqwVvx?9_|Sf}gshw)Our~Oikk~F$0aj(bk5oo>vR`Uzpi8@a4w0ww;D$u#U z`_A#zxqYP@Z_-@{w}GX%4~hQ{_$?Xm+Ft;`sZ$A%vd`AX)>DqWjAT)%`ap^w(CV0f($!@!75lJJtgd=G5T()y$XPXYI&tan|#`GS*MCqIE z%yNFIVppU69LVwy{&FM&oPl@zaFc8dI$<3hre%v(73_p}4B)jQR{%#dlXs;>0xp*S zhw`zywgUJxp^RolF;nkWPCC*E0NjPy*$RR2|8a|ws9yg=e*Ry~3=sXy^B-vD|MQ;{ zS^q^y8<=w{GSm$<;{Kl(UjzRe>7tlOG-}%Q21dlu=bM{)-PAB0uh<5r|MNy!+T?$y z1bAb?kB+Z|;XyWUPxvOteSbKSVqLZW7d`Xu14{oxZF*-vz#RL_iA*l(936WDuo!I1 zISEVk{=e_Eop+!I0l=f%cM1leu(qJ*b4M*@obTcgv`x`goo1*(w5p+T_hSyP#HN65 z(1)8RKo-!;IWGU^%Pbq10*(Uy^=EEMO2sDR6Q5d6kx-aA<@jR?CM&BZ z)qwzWAf{SF0~`=|q?n{mLk@)!0hu5JgZ(~wni*^pl)jm`Rs3cPUD{ok{Et?pld`6>)_?9xj< z`OeGE=)jRjYAY$ye)#ZyD=P^+b0WzE1ls?N;IHewQNT3x#i!|(6cC=MXru%O2hU_t z!I$WD&1ofj|MdA`{CP=5NY ztr{0Kif@JDeE^y4aEOkgb5Zp1EYDxz?!XOnCyRlTkJ2PK@zj&>JvQ{Yxn<5ah{_k3nr9~GkXbHp;R(6LjL;)thXobjsp0Plz_bqP>%s!5C9*dqN4I`+)~07>ihSMC>w&%uy70# z9BBtb;qd$r3k(dbP>YQIRE7vkPvd5RD{mnzOG{>d{v%F+MwV)k!{#5QtXihqNv|sR zk-7PS6nUFaJYT5+N5S`q?YD!jjE`l&k->;L1zNtU;LW0YZ8-=399xUVVQM%ybxhb84^1tSjEwS>M$-A z5l`Ime*C>^qYW~x-TZPLM>8dtcv*B`xc8*_r%i+OF6mmRveu-Reggg|c44?$b3xW? z#0;CllfirGe_Pgi@_h>9f=y6(g_mk*&{|_{=pTAULL_xJ`%pb*EJmdKZB=_b@g7V3 zfxQA?!N-U=Uhh=y5n6#kOrq418d8kA*-TWd>>vH#Mpf(R?~Ku=rafKn9~wX7@`1fB zQbO@2bYje4gGrDB*5*#X)ox$>8fPRo!X>@#)k9C^A{#Mze}rwiAud6Hn;f@s7F)mEDJ;@(3x+yJo6M4YI)s4k?pvCpjfpQGpu78&+|1!JxBK>4M2)dwnHlAK zSVPcyCE;QU1mZr}AHwmPwN~5EqqOG)f4K{-rxTY^1uL8qPcDl6`W$<;(}<0RRb=d` zyGRtgX$EU5GI_K6cSrrmCmS~;=35XgC|Le zyR8+<(Z-IwMeHXi0Pr;ziwa842}TtN$lq$_E7NFT=c)wOcbt*nQ_8a5KehH=*syge zm0yH}!(Hm8B|{?$be9f=l}(Pc?;n9wXjhb0iua-{LBNGbc#0B?E3!|dpdTw`3j)k!l#@M@>Kal)YiqqvPS8HOg>)D)8 zlxW5R$CJ^|m&=>FLDlUQz@fN{8q!A>7rO5IHr-Cbtx~?9FNVK*z6BkQyF!7g8^`wpf|ho-gabsv?QF@ zPTYb{ohh_D4$D@mp5s8tFvZRV(7KXw-Df>Ip0*wlAslN&3zd>`)@j!ajo_1a6c!>E zZI~`{HXxX*K@m0ACsJH)qGnf@z_#Eau*r-o&CMMHl-hMGP!pT1|I)X|d6cM1#HDh* z-@MyA91_s1s*z)h`^E46^mRav+g^Y2cq6b-X}n@Uaa>&WbCqt+1t5601I0@- zW&Y5H(%zUp#GMArMlhlhn-?JXEN z_aQHAH$n${p_GOk7<%QlU$mV$UKr55a)ieb4M#MrQ_iVA;zxvET@yOipEg^7Z)YDE z_1ed)74goGoBsbYnr5PUnoyWH%1-|5t8IO1_)ZH_+`M?0S>O?;z(B(zrQy~lZz*_(WNT-YR3b$ipnuzCN;|2b^(YBsV&Ksf+x_I@R5#gj z<9FsgEemTB`?u^1NhG6mqHC`o9zaSnv!=1uGlv$$TU zHB2SPJMEOI`aRuIFv^R4P-+japbuNvg9E=HrI?iVh0`LWVZ$3U?-8XWf$8f){Ajp@!N?-1#b|o1@QzBI5k_6PgK-P%BL#8oUf$=ZbEr*Q zwQl?mC!klgJhB2?K8hcrfi!A#bGBa(c27FH&Ew} zC9FLq#^n$u55|Zi048`alwUb*Tlrgo%U&%>qvID6ggnGhTT1oWx*fzSOnMI)wEP~W z?0d`yA#x~yHUM~_0Ah*zpMnp$z(Qn}lL!SCm^H^Dt9)VzwP<+J$tr&-7H{(fFugCU z^^P{$_!HIx5FwvYHjlH;rG8XSn6Y#yoZ(HOX;r7~ftUum z>Wu!;$<~i`h3UdrqY%Dy$)$pd3-Q0apK@35rmW}|^aELR|Dp)GZ4j$F?;FDt(&NY< z1oW3x4zjwej(4zmLISs4-kcRpCVvRO&?$>Y#nr_^wwg6xM1L40)7v{#r`4~ea(-Ch z29!paej+Eb)kJeyb!Lvcm3uNR4}r?FCAydI^7NmNY8Z%Pcvrq?$|0HSA^{6CkyqRq zQ!qa6wTTb-@#@_Q`&uE{j1XLCl?Wr&NmJa@0im;8cIc^btGmU%ugvUVznfMcm^r z(V$;?9=2T8!*`hBY+je5ZFh%?4Q*HUhTQ}S`CE~(7GUINR*%n){GJy|pmU+a*>ajC z9X@j}@fPoG>{tS}AERv^rC;3eUYfuDiLL3ILhmcXBkgm?tOgoX6^{nOFt;bt*H>6D zC`5930Yc?k-6+01)y01tXDVDh9kN-2yC7d?yJT2wrIwbuydeXusI-vJ!Z)%eS8GyL ziUa)l?~W&~l{cvQxL}R&C6+ZbiZ{M(nU|cI^|fJRp-ozx>9YGslD0h@DgPZw8IoHb zuG?YG?)k3J;f&E_r(w~5IeNrqOon_sM`p31`DGR7?qoh+EhN+L`KD&q8yOIngg!Uf z)doJGP+-`xnI7&Toor;K67z=~QJ!sjxae=GE7=2=0#dQ!=sxfe3>|HAr{t%I+?5a* zQZ+kTYRA>U;?Ya0FIz5y->Jq^NR~!!vE6mze>fE@lSr%&B;?bC`?}n;_uCFM-Q+34 z?|CNOef~AlnV+x27502qy`!jpxDgLG0U&pEz2Ez0dfG=+EI;lwusG{MsKEi`5A9k% zK7;3bTE`Qg)VD5}X48Yso{%bo&P=Y#_syv~^Xm2hj17Oz5SD=FxOpKM*S<0mL8r-1 zM(wsF_mlaCiW04$7$E^*ORTlg z;QJ5|zq`kAoEdfccEoT`TU_gZ@o}F?N1{{Ly%y!dC)2_W9H+A|7vrojPu zJQ%(C8jCCNll{8;H-DMrR=Y7#?ypM&703b*FCW^@fk*h)DxJ=7jS~;GUtf^8=)*1_ zF(;h`g-~yhh&d)`nWS%)zayRfO)`!TIRcgF(nUuV(9>~4|1BvfCn$p;$6{sTWQa|v z0m@&o$I?vy!kF`l@Tg;jdp*$L`JbP^JGi1w-2lR+!wZ-;}58l#rT1HD*T%&>8PPrig1_DX$#yqnkPf7kS@wM(R zMN{HXlZTfZWl8 z4My{WASx76MU%zN^(x(aOxPsXQH3>`Dt$*dCBR61UsFcVN zc^Ub+7Mfh0@CrU<=(94wGa+2NFaz*mKN4z0t*z-&ZGaeCu^w_H5@8G(6}TH*Cf>;c zxn~9iPE&gIQjc*t#&nT{@f8o}wL3Gsxn@jpxNrlmR0bOT(aDX#aniu560>H9!zI|u z-BQA1PiNHw^sCWUn~0SlzX?`q$K&tG5;^tJ4LDf=A7+aytbcf+^E)ERAD=g~H@s-)o zXZgYEbivzxHBP(fB+{;@RN{6|=Mx~Hs7#BNkutW$#l7`B^J=bIH4JFCe*Vpnx8l(L zo#qasheUd%TF6GVn>%$}>FKzscLkUzSK7YuxfWDTCPWqT4iXs!#&1$VJ*}$kiDvr)A9Y+vl zsrI;gQ*)U~f7bpmkn97M5BO4CJ$0L{qqY{N`Mx)6Js-d^DmZU*sI&gbn?RG)QTLhyCedkxU?yDb0&+I=w55Wza0^wQXv_!Ovo6~Qpvch z`6XZ<4pt^NEEnFe+)n1^v;#F?byK3;p6ifAQuA>=kpRJf!2+8bxMLGYPXJl#+DLH>A7VfP4hG0-a; z79GVak?r?5O%zW{?RubyDH{nm7r1mAyJ7_#yTer4M^Z%ss96Ml^?Mfw=As3UXjE>` z89!}54OpZH57(!h3{N~HX;Xicf*NT$JhWbJv;m}tXRZ60QRY?_Np4i-w0^1BHn8KR*JKg<`U0~b-|}yHNZKT1}TFwe9-^S`(LrTEi^15 zLJhF%{j+tQE|Fet$FS6!4`bXD^LoiKSWI_gGpJns(rD*)6@H3^UoaY7L)`#@EmoAg zoqoItd#L`&l*(hh+6U>>n+n|QGXcGTG-m&2V_y5luRla*QuB0b?YWHn8ov3%va`-b z|CE|;HE=cbbEij4Wj1+J9{sGeF)($tCJNU(YzA6zym{nstaJK{lca$?dV94$i9=KoYC$CIr^KZKw2GIa?4FP)s(hQ z(;Wa}kk5m8W1wSxn^dy@$p3Zfch?gGZhZ7K^gd(QXW5WESa*j*^rQ%t(p^Sb_p{=c z*K*uXIdYYi`}9+4KvyOG7=j!^g9+^IHI%`JXXj>k!I>A<4`Hr~B<85`W}+&i z<9xt|Kh@D%G6FS{0Nk?J$#^^v}2APW-3F$J&}?l9oC+hTTycj;2pc z3N=w%Tt7u+unzHBNv4E&&q^;0YK-f>u4?>50;!ufTrpEHm3Pq>f{Aatd{`~-N!Gp3 z4S(A&|A}b`AgdmSTb3%V+kQdyI?ccZz>lOc0q-G@a#+9m3d>XS63~M00>Og~%IhG| z#%s@2)oemy@*6qC=`{UQmpxc|SP3Rvesh9DC3{O-{A0dKx2vaNfEB^TgiqEqWP75Y z@dCcDY?^VilO_`6cZq=YE6fw7u#Q*$CmTak26gzV1{*4F$KEE)!Rx~ip6lT%-(le& zy|@kC!dGqL9{Q(-Psrmi>!B%Ap;nfDe+IEdW*an^dO1b7M@2dE7s^h&cGh%&a}(28 zMm*3%d@?+F5DUmw;N@ zF8Eh{pH)WznqFL(wAagaj_mHoSTu@l80`j{1aF^8EGYBk{Byk?x!3)UWOMy)9mESw zqar_{w)MRAeWFsYl<(wkvi{paf^ABCy5yQTRr^`Iuoqv*hf%FmVK3|;ujoq(!6I>3 zGTqVT%Zx^`a>Qid7b$HhpQMcFxVG_?>uojE%l#i#UYqCbwM!uY+)GWVg`+{z_?!h` zJls{J@Bs#5omOVi#I!V-=PNTwsc_s2$4pIUN5nqXn1kJh(4YFI6g3LoxlRJ7%fB&a zF*t2kp_(Vh^ZOzoP;*K~p4|yQSAF@Om?(-T2+$X9E z(Ra%v0T3?JGVhL)RoG%bLh>i4?$Xj${=6lplBIAmvY9GlCg+BgPi17#FW=-~3=Roy z@z~~SbeK(z$n(p+&uLeyv5dPRS^o6ukEDJ&K}KUB^rK%6UJyL>e)*(KI)$Nazt)n8 zo0}*83Nwx;;=w4BKt#zQkjClwv8y2TT{IwoSIDy+wKbaFwKWkb3W3O0y+13B_nIw> zsj@M#Dqu?RT)iNJg(15^36nd0JJ%|STHhwmD48(hiN@*u%P_D;cgM?F5=$kgtp1RR z{}S~d1r|cYn9{{^DH;402x_HDd(ZGYwMP!(41Y@i7ogzH&}+xlHR7t@Xx!q+z_!z( zD#As~5&qF3ZQO^%w>%vj;bx^s4l35^Guco@peh13y&+qf1=9+UGQygeOw)d?g^Oy!B-$r?^)g|xM#LCRD-|mo3=NZE^M6*T z?s~&gu}l2od<~z~7_E8r4p7UG zh~>Tcqe&&V%Du~8&!$nywuL_V3C~yQ^qD0H4SsE28@9^xmj=v%%*_!(FQ`c>`GVRs z2sm|hbpVzhK=}fMe83}6>w17<*(nkM>|ejHzXCpHCSUV6wNRnp6NkV^Kmc*Qv)Y`& z|0Ik;ERU?PpHEn|){(c_!Y>H^)43Wj%bWTJMi+T)glkp?75hG&Eu{E8Us?IxANc|^ zW2b}dtnW{dJMy@vLqnwuwff#Xh@`Nf;alrP=ODvmXQaSnh|O#3x;c=Fsw9w#_6UXv zZ~hR`7nBcm&9R~$hn9u;TJ$YU<5oqdgF?lfE%Xn%QLYj0nAu$tH4+JDdW*~6=gA?- zCb7?-RZN_gq}3%kNdig2@vTMC(+9*DviiilwDBAso)k50j!-<#grxJtD82Vv1#FfC zzh~6Ei!NVv%(TlTLBUC>)VUDx>9k_);_iVo7Te!h-?E8NPS;`<4i1{{+F2XXO#6Z@ zNXr7zNj<_1oT(*Ves6XjIo7$ZocD$U?q}+tsH5S{lbY^>djZnz=@(M-yNeSiUuZqG zgspj{u9~b}OPcRmo6;cZc~zF9Ptc*EDFRQ4Gt?s~em}Unf0+-)E>+3P6?;c0Niqb% zL?;79=23obvzM;EB3%7P*1>(^2-)F}ScKu!tV}`qdWQj+2`dqkXCNaLmnBbalZzgX z1yasY<>&lPLAD*jwg-IiY3ZC=(#E% zy0>5Gxv_c2V`OqxSE#K$fLWFafh5KK=T%P|he#wn7>z)YVD3}hFVj0oamt(`YSJF| zxIdmNDH4`02r?+tb+-$^61y$VhiN2F@4{$pdviZ$vq7yJh@UvoD4Qu@hlf|KGHUH` zGRoPz*>?pQJX~+~C0wnKB`oFq2$P4(@iO>?G8-d6nerq8?jKK3pdKcbTcL4R(Lj{= zrjaP+X5{Hh=kWu>k&M;k}2cd95dIVPkj>*D^6f@6Xj7 zV?3#Hsl(svs&{{QL|hgN&~J&;RiC0;n@M_l=5U0R?evE|mVaRzQ~fHZ+yWJ!&`P2~ z2nFAad+p1uqX{vC%G0&OQsi;TIWMMCWEYHrgm@#%7I}5&XRh{3HXrE6vfD#T&Q@m1 zyeatU;|S+Vq%2|zVNr~8si9*m@r%CdgM1w)x4(mosLGsCVQwA6>_+XA5G!Vj6h#V7 z`At+w!f$~Lu08x+a~xxGw2AA`FsXd_ko`M))plv3_L=)M;Q@U3_PpaJdiK}5G_T8Q z-xiaZJ4Wqyfi_m=!=mh@TgNXymoGobZ3gQ+;VC+ff)?)T*tEh z5L@fQ>7bj1)}Hk<(k1rT6aTrZ*j^-2-d@~5I=(F$VT(TQMBTjqkpUhRRUDJweOX$y z(g91x;}?T}#tb!;U>Ag=-zB*_rdh2HjOvyuXB=WN8A~3d98n)E>QBc74@vqb?Nk_D z-loFq;Ynp`nNFwH)EFYUhwHu(NV?D}91xgUyU`deH{z=+7i1&BIMgWlK z4I};M$-W1VLM4~mo-;;@VygqBo@ee`%#mhq*?a{iPuz*3{jMyrlDJu`?{T}nh!2{x2>}9) z`!+EZ)XA>JUOpa9CcNS4A&^H<>e~!6S3wXYaKby3d;4zlpJ2cZULXL>3vihL_hUsx zSw(P(Hr#;eO}M-L((kz8$?l5(o6x8?3h|p6`x^Qxye{I8G687ex@NF9H*3yCYO(yDrU+=<(-(=^*S`;W{^wiU8x>iGApG9Y+H>?{lc9PEiG%-`? z&Z-(iy7rffgTe_&$ST^!^6L_%4BdP99>5qyl$Ivc?g7YQl}LO|=tbVZ90?*GEamuo z<_B%8et;84sX%on)$MpOs;ZImnqvk}*oD*5qy`Zhvt7{)+%H?DUzeSC@Y>(i39DVd ztL4_W9Wg0vw$Wp5n0t>Bg99E*P7s;MP7twp4M)Z+5tEanKkvm~XIhg`(u8RxVS&JO z6#FQXl;rHYN+gmyc8Yp1RqSfjVTcQuQ@OSDovB4$uMuMo-XqV)x3Vq{cCKI`bg!=V zyq^AQ0d{lrnhxF!3!wA#x^H0oI5ez4E3knK#C4ugFmVtDnn1>Fv5-+yV<&7tF}ls} zUdfOi>?DZnCo7BW{le$4nXTaS*qehPmTkj=g68uEOqx1fetgI$^Q9hfy5M?ibf6X{ zt%@a_{`zqv@PUbKi~Qd?y1`}6@3SEOIMw(^;`)0LRcx;eTF~$^S9gQ)R*m2TI0npn zLF>?YWGVc9%i(dxN0w{~PKH7PV75Su%xosqE)p)me0Zi<@M<^N?R+Mx{k(;E?O^9# z;N0@4ru%B;8oT56S{?`%>2@_{z^iPQx7wMUwtsdHj5ZIT5i=h8 z7UnATvS3O4pd@&Xrs^OcM7&7X+B~QkIkVXcLDzi=B5Z+g5Qcu|YynSO0-9B;`p@)$ z=7Ivs*?I5rakdqxt9=6+g37t0;|U^Q$&`wy)%Q)v)qn$HNomjr9932HU5kV7$;mIx ztAq;jTa}Inbq7w|F!^w!QRk3-EUfN9rJ|sNCb}UW*~y^4S@HG8(=M^S=o-ZtC9-n1 zFzdZ-GMdlMT~GUV@ier_89530dVc&b{;AA*!+IR+W<9~sjJl1HAX4Ah)hf67>Xknn zYKA83$|Bce$;zfa;N6#3uP`zm+L+T-Kcth}r`+N|X|Vw2;qs$Lrm$cz(RzR#!6(qH z*Lz_r@URJo773Km{>+Lha?1*eFNLJh!7rb4oX#W-%me{YgOOO9nxyYZV`)Z{ef693 zD-JvBFBhez;^J4{P&D34_(YRK;;b|q~ANeHX zWgPWTSmbDU7^usA4~t2wx84$`5qYH=4KNr4OLd!!EM5m@mg%$~Z8$pu3L^f>|5fX} zd(%!*y=u`#iv#QgKEFp+*AL<1!a&^Q7~8ZTO(te?R19@N3VU*9NLHIEt8FW zDt+N(oHJcCLiFCZvy-7qTe^x6NZ&7Br-2KYgqUNKh?)>61%;y=Px$Bhl1C`d}g^J#Zoc5t%&q5dho5dpd zjELVZRD5YI2!E|N+W0cJt!~1xp=45NDLJwzBfgYrH_;#ya_tY@4-hF#luBh)Zz@|1 zjEJy~17L%{4yC%U&yCeugx&4m;!fU;-?yj$rENY2p;2!5c$O*;cPL=^uC=+*WWRnb z;}*Ch_)Bx-gaNq0yn=(RwTm%;iRfXm_l21zv!ZVLbkP?tL7A5Qw_p?I&SJY6hmH?g z9Kk}N(i%Y`5HSZ}L!1~>{In>D`Q1#PM?1Z*&L-LHzk4N|n~aD5Dl%^!(jw-p(jb;` z;9pUjiHeRdF>JN|eI_8;wGbi1nF+&%$=BgYC_NA^_l8!ds z`2jhZR|U;|rj#)!4lNkq*#byGK+gCk1?Em^;If_(LvMrL{o(V#Qwv zQHB1fMjeP`i3pVBAE}B>%Um{djcj7jI`)f=DX$Uno80R3>Q$mU`*BOpCtqA#ZlcQc zlS|@`F^#&2WFxri0(O+x*$qk+g!MD~wnQ~F5D?6F9tH+$;3x_Tt>=H@|793ZO-!Dc zIMZA5-=u59kxOv+^~q_k;r^k?3pogAV9!cNor)w%N)NUc|8(I$1vFiWsm}WyL$sCX zOn7U}$U?_5+l>bwXvDb?Po^N!Gt$x>|KJmMG0Y6eo%IECVv-)5Yz9*+3imFIL zY1sZ1R~DH7_#~_?;g1fsr1VV7v5Zv9}EjYp5T|;mNcX#LQ{LXpa=bXBA>(;H}k13|7 zdr$A4-o3wjt@Qy3rjxuIpLrRvJ|hzrb~D-I@gm`Kk}&S{3#hv7*WGs;vpVWwqK?OY z=xFx10Xu7dM??N77#LUr!1&Pjsi|r8>f~e_Kh|C;k{vO_Cvb-kO8N zhrIQt$CCDUnFiEa(pYvOhF=KCdA3=aEZgS{I@{~X<HwjHT~Thigc=@5o4JSatg%iHUbB^)V+Vko=l9#!kIZrq^7Be+ zP`{nV=IFBQ8GCl~G10{_=9RTrs7KAM!n$K+pfDhy##G?oDu9ul^7?o-C-v>A?SY#>I%#9i=zO?)HAFx#CPLGS z9>|Q~MS;L=mF%kiz`}rq040t~(fA=%Bv(tknm#?3sixx~Gu$&LiUeM25C$S#%? zvfMn+BtN2?gC<#>(7gs;H5`^6@%QIxS*=oWVMa`Nc-pyIQL5sO-yvV^d?Jx_?@j9? zd#}T~FT}<~`aa|MZ(D0@*fF;5@jsP{;PYkS%UQjHB*yjCP|G9rJXkz3xHQ%dz zf))N=HQdk=w&-EL$j@&!$cfQBlHzkMc#gQT5Bld)1zwl)(U13_pn4J%O$E*_Z?=>r z&`abHvut7#6-f5iL3um-Ba2ES)7Jc9&ZgsY_<33~*oyS6O8BVyyuy%yz6VgM9G2z{ zW#WtCp!3~cS`easbIsH%KC;G~;(sMq&$QydxEUj4n%BbMcFkR{*22boqm1yaFKKf< zeE+BRd6Pp9D4N@pfU7RI4#=oFzXz}k4zWx0giV-)gpmN1mR*uz)T$ z2NqucO5!3Tw=Sd^)@NIIQZ}w0>*%pW#T1+L)_ z*Dq$762O|;&`(!fHs<%e9FNx&>#dIcXWKH_-0Yz`AGgSK27Ax8J;Vn4)hI)y$8+>5|uW$Spy%~b(pl?l1na<<)95b)Um!ZNT zEbUP-s`2F}7M0$#8dJ|x>=@WCbd7>p9XEVf@uN=H?4nH87%hbOG~!~~fF@oiw=EkghVzUiI0`n3hX>vmqeO>Q_kfT^a6 z2h7*NU!RR^?4{|K8W)O-VnQH^U?&&p$8Nvj0Gj<9%V8M5zlImKIN(s#vF4G^wSeDc zSBMS1;O9bSs|2v{+nO70d$r&Ck`+#QlfdXJj)c>TZd8^UcRM*{rn>^-R9KR0G)UCn_`ZzwuwP z)t!YvJW1qi#d|}((bZw*SJXvzdHUn=CO=ZKFej*>z?4PCtgL)mt>kWIdCbWdU)fo| zq#!WTnlgC6d$CS0T~Y(z#f97!4BBVv(0*c4R>S;I?67&HGg~AIXyMCE9(H|1c>Orr zfRHaqNNd{oo9g{r%ne5SBm*B|ZCFHwD4u^P+<)y8k1u8Ao-*O^>gs@JAyRmM7NEM; z(F1;zj>85yp2gkvrBhc#1R%#1s{Y18Ivxz;18lFz5Brw4b@*Cms~ULX+k#KM!y_X! zKtoWJzaguA5Cj$J=On%ns@I#kaoe|D$pC(jdH|J8LPu3y(;o-mszFoJueeX3mDGPu z>0cMc)gw*Cf}`@e$sGGs%fi(oH&1NV{+kyxYhfYPR)O8f(z~2_5L%W>X-uiKdyqpgnz--#mDRDfh4ehEDsc)y;}#E zBkLK9VyOOOQ)kwHt(FdBL8U~1Pgwq!mxdAY|JOD57C;Y42~R6=X_9Y5DsxWzABRz+ z{AW*3D0QeMknv+W|I>tb@$!oTIAY|15K8Y-5e0h&>3B8le{Tw8jVa0gWK&`>uO<2S zuGGTo50>(<`#k>?NQR`V(QA650Pnzk28;*4X**PalamvhloYgZ%+T=^|MzYuQ~frl zrY;^D-w^@Wis~lM0Ti2mm<|;&rhw^?IpWmI1 z<87!PsNOk+H@GOguHV@LQ335gkSDDV_!F`;9hLoaxMvD}#ze5W_Cc$G zrz#5qKo$Z>&E>SzB0Y8Ey$t&}iw%5PYUNsJYx_MV?~kBl)E@w?O>XY~zA*UFXo?T55<79w&*3S&Z1LlIR&Bfp1V8nfGIWdu*O*0}Z|tJF_=f8@+y zsF`PtxJU4|j5sf z1~Ppuy13lm5?j27b%OQ$wn!URO}q!_JS&|IE@k(RBI+|Xjol7d6!z3(^!!_g(R9-? zFKgmceV;A_m%#n%%d!7#PkFY>iYiNHcBN2XKmKb}^8+ka`%`s4w>E&m)e?~&LN1#> z%>alJZgaD1bv}%ou%%)kLy~mo@ea;)n1KJAB~d()zR7Xgyat8a2_A?FTmXHWxqu?B z!FDYj$d4QgzwqEq*{IW&)8e-;c16z?@oo=yqsR&~-qeHGOi{o7N5edUIoluTSr;~Ka1wZE0B zT3%_gJAJ@F-uw_LSSp@4hjxJf5(j0TNX$lrgYm0s3cN#{8Ik;84P-JZa66?{FH=as z{zgLuKRhZYi33!Z`_)So+K}~OT}$G#G9t>pBv#BO`oBKU)T;aRVg*Ddnz~okzxz(@ z_87Ka&;#yn7PU(C91W!74OtkFeQSsID_KN{W^zU(-_P5V?2ceP0+98vO zhoCeab-LVEHt7jh(_ABjhywi~S43R?*j5K&fTFYMh?V&ZF|lV?HefF_SA38z#p_){q^F;Bk493-C3Fv#^aw z$rg9h+0*stIXw&L@wGDnrP_S26y)Ef*ioP?NdpaR-})1;Y)OY%ryX3|!{tbzc)7(2 z<;##c#_O^hOi;CdR4aNoR}ax6K|7?%cH!<4S@UHux-rpST;L{tZOm?u|_#v4u0*Dd~O@&{*y{Sh$Uk^JI;GL@y{fZud z<^2d$iQ8ZU?G!6>o@>#tb>rd+LY!7kxme7M+{y=nV^gx_tfNDq^;_9C*S&COevtv~ zFZ7+D72`n!B0Om>QeFwOl7 zln`QXKp1g#U_cB|7Wm}T*(Fq=5)3_qqO;mC@0}Z$Y#OZR!=KN)ax!dN;Ur_Bw@&sG zCsRb;-(Jhq8AG#HnjFY^vfj4sw)gn#icA`Gw8UZ6e%n0MqPc%ZM)XusqE}+Th>HJk zl3yOAbkj>DNadM>Ko8i?$3H8AkBQWRA5vnnv^*is9!p^Q?CBhNWNM-COKFo%mS?S5`|as9Kdp z!Nbo*+=v!Cd`mR*#(+eQexSRWIu+2OJ}@Ix-}kqG9|v*Y+9eeFwGGPSv+VBfyFYi} zt@=)7L6*rlkXZ*<$frF$$&ROTMA1Fn57=gZ`P`^v->P0gXsA z;E-umVL?GYtV}0l-ylP#gec2lgW>v~=@l5QH+qJMcIWY`ul5L-RI07LFF66OsA!Bp zZ^oSAwjauxV$hWX*n>Dd8I0j1-Fq9Hy2EVeS3_Gr6Ix|b$~*<3*AS$=IKJv3b}yy`7`)!{Hxg01~&sx$e#DG^WJ3l%Q6YcPFR-|JF{T&MKK;v!l)8c{7#veLcp%& z;z{`{XDGc;68Y47Ak-iP7iZvV`xrnbsnT+EH`M(222+Yp?7WPuE=(%C>U)2>D&PzG zHF@0fa&}(tj}xl?6XJ(loe6wIBF@T0`5NkA~YsEgiWcd+kWfzwTo zLJX=%U{R>tAFMWiw%X0ET(eSUziJJS?TNMq@k-AYh$Tl5F2J7nGF`~RpxdWgS(VX349EJ>th~5IxoyxOk>Jb3}xq zQGY0!p4-|l=PxVhZLUY6l%G#|UH(Fd6DT7KEapeSfav9RA}&FQ-h%wY#a{@$#WU|$ z{(5ew;T9BHgW&51`}#0akecz~lGV)zpfim;#C0QNUV+%Wp=#pwAaJ zqp3eKjMjI!n1_Ts6lN+jJ7BWXSh?zQum5wc;X@v6>42!b@mymi|3jA~ccwEY6=k~1 zrwwBo+EdTF0*{Jf_l`$ydJOs`g*BMzpT^*J?YwD20Htv|nnBNN&P6N)<_F7cR}78O zRU(eZRZ9sl8|-FOxWT{k?2z-lgaY)DNNRJ`Z?=iDrF|P8ULQ9m0I^$CQyTv+hnPFP zW)z`RODRd~{b^4=ap%r9UiJ0pO^nrgBLf3I^x5fbQKeo`xgL)NB8`=#vbd4wVci#3 zn1xkGjPPQkhp}wpo$69G!ANYR3X>;&>IdZ-0A<+kL(S|t4Q~8NE#a;baL{@@J*(L& zAj84!w%Bf^CPb6Tu*>lM_|f8h!CaN)jI`G3+?xmG%i-D~UI|`x zh}~*AGX0nJT$7^TU`$6iARD8~Qh%b-hQ!xWAIo?A^%P0$MlputJCRtDvstj@?J z&_g`C(fNSO<;}F5lhE=a7I!?**9&F#B`y@RT^0i{Q@J5bY+s}OVl3~gP09A_NqSqa z2fQQBZ_>YHSO&7RWg(5KMbyWCP{&1%9>L3{dO@>qa*M1Nm`;q_Kgv z4{;2PC+LoIB)0gR5?osJV@w3LH{T?T0Y_BNhMi?5j~l*A=P^(v&r^Thb6fkYZ5z4@-j59atAR|RFoj#e`F5}UeS}M{^~y0grX^ext6oqHM+4wWG@YDw z?K~N1WD*yE2Z8yu?=TUe(H;_pZPULb_4z45kMG2>s_mKv+gBh;B1v6tKmlZ|d9ivt z_uw!XA%`m%x#&2bcGXM9|J2pi@^UriaZnqQ%D;;jjC3ORWxA~I3k6^z*HrpEnAcb6 z(Nn}NYr}S>N2nk}F-E;az0;>)^6N;CEuYHJ_nx6DUk$HZp~*LEc)24dQNL|QkH?$U z4arz}zD$h<-R%6$kD|>g-sgsTgodcyb7X3nT|Qn#g(o>qKUI;f8?OWnpQyJ}zHQni z3jzkY)_lQu5D`yiHxyMz6V77dN#E>|OlrM8CvnFaonYj1w_ndN3&hMfO4$Wl+K#f+ z6u>8pH}PEuKI0F=elxy-XG+&km%eZ{_(^EhA=aB-4;eYcweBn3R6&d}OQT2Ui>IFB z5{VWw9rjRqA8KkusAYfB_wVO)RyiQ+uf*qo>{ zKvNzdON@<}@LN=pxnTQ%)gEkqj7J#}<*;mMgd-DB&s+Rh!xJ}i-dN6r!DYdBg?I{H-+kD8y5ksxhrYa8|ozVOB9p@VSLk<20^{da{yx(ut zlS(#619B{`izg0$mtkN~%5B65y=@%Ck(J!QVrW4E$^Yo+A^=O^ugCZrXMF!+v#);u zD)^U-A4VRkYAr3pN<*IIInk>7?e58PXPBrYo4e1^SR}p!MW3X8PyLjDWDqEz5c(eELXd(&H2Qo#wb_LA^-`Ew?MN9PjSE zsoUqCGaorZ=EyM9vmN*32)ZGIC^GWE88YZv)6;4_K{IZQs+R0;EBCCoyLj~4cQ9Z* zJ+73|1QXq3Fb?nU*~QW;(avorth|k1M=r+N9N!^gX5BW7C?g3JgYhRBVgwWe*Sdpa zt{jy4Zx-hwaoPO6H;u&JZC}m-mn*9?HJinx#X@HvAUz;3+uuoQHjr*rOGAdyRBVOT zyz&L25U5^)?s3(BsWS2=-<%+NOBhkR%XqSu>-V8yq93?W=%Zh$sPcI8M^*Jz7kVbi zI5+~uiL6DfC?ISW6#hFrf=uq-l=Q-VRW6-7`!eCoXdzpaVv_Fl z`fo*465!+pC|g%yt$mA4N|XKKZg#oKgOtv(oi;Lcb#%;heWI%9WdHslKAMo>vUN^{ zo>om7Y)n$;NV;W+f!mcNtgsN%dcFcjtE9YNtz4>&v+`i3QUGPmg`*W20f(Ls@GH>r z8v5`jSk()fj{j<6xjl7jaoys!)~pEC&y?z#EwK|Smh*^f0%Z>-C<=}qsek46J$bMi zJ9&v@FP2Y}v5xM^U=!Njv@|rc?;;Wlfjk2DZ{SjDGDcuLp7wVztv1ryA6u-mWhnFY z3!~D&3iw?})_${vx$Jf{n8CJh4+Q+rwyGn1`qh0+4@;|A)t8&s*J8bjd)E0VlmFv{ zUJt)?Tb3dzT0HX`4g5xmt8oD?@cUPR6MvkYv}}pxCqe=+S7M7IYXa*K`h2$?CEcyYq>(1dJ=*S4sGT$10t8&{oc1WT<>OoxyD=h4$6n=_VGdozUu=<^km!s$v zH$G0-4yn?s6%5uDZun3OA0Z^m(M?$s=s7AN*6MCfMZt0%z|%m)oOy34XF5Ay(4FBA zy7mL$w%!`^#NC&GHuCUR3v9)x`@l9_oUqrlCNlYv*nNb*3ssFQ1jZ&ftVryHQ zaU|5w907;z`yng)e8|ryFCfpJqbwxRAWJ0EAk2!$Z1wwzRL8*vGIxh50~ev1sW7b9Hm|! zSrbzddP!TDu$SAnnuaF54-V|Me~`N_w5+jRHl!7E{|H2-GFuT=JD&$L5kielO8swqPd$deG0C#FFL~jTNkr}CxlTN~ z8`)v|a-?7;;Jub_(|#Fl%?JYdPE}Oj?`DnEm-^YMQbrPwb#Tz`H5OvMyuvHDiclDw z-(tJS@ZxeFd_&G^ecai6SAR4`Yr1k0STLl8{Xw#d1t0^R_QrSfLWuH#!aE{9dniD$ z$mL@~wYYW(8y$8vX^QGn8MPO!Ix_XFOHiE zPmiD=0PbrdeK#PhX8i&iM0og+_L+s`aMfxuleY(8R%t!0iTLWhkQq$e!;7hRm=&zn z^x6w>3S_A2YFy8e1}wltS^f?+zByb?)&H6tn|#zl86dpC&RO{!M4ZBC4%mAicbnu3 z&32+QzNpteN*7XP?cR)FWD2^3>mUDNarxst$$O1F7T;h;x0Zc8&eW!GJxuqS)@j63 zRKSp01j<1&=>0q@XMV&*7y9!Vmsl=+IK=b`tw%fgr5RhktnG`v(SsCpAgaQ13~C8b(-C#l8e;KQ-I8PgNz!Du{rkR`FvT(9D=gCSml z8tR!wI=L|tQjuK>m6g&j!uk|j94p;hW!AckBp9$S=F zwp&M0jfZY0s5yv8X1Gu3n>mEZle*@V15n!P<;EY3%d$ScSv#`fnWG^o1C;$yyr#uHkG=z(VTigUcbD_0VcQCuvB zW)cvIIe)N<=kwHh(V%cvroY$tEoK);lY5EwnDtf2mh$4J|2Sfub|k+cgqSGH<8%2< zk7ZY!60i?nb1$XwCc0}puTQ9V&8DiEU8KE2MSZwGW}SqIM-N{Hw=c!NS&{K^vDQB= zfvRp$|GVZoem5Tz|M=TP#=}9q6+OQPw0?Z^jm~nV*Cp*1)~ZlY9)X^eJ-P`>{&zCF ztM3E0#h=}o&&Cmq4!#RZyhw9a>Gau+X|P!C@%}kkoP3Q*2_S&{a;?;nxzYr4gPQ+I z)_{i2JW6E#6qBBC@bFtpk7-Os&|HaX*QL+uLY;uVS7+ZWhu1Lk%QfMZb@I;$!o`|& z#i0(_3CT7S8qFA(vr2!HKg#CZepk%L8kJiqhQ6BxX%Rd*WvV~r2vs^aFBmVQuq&NN z-*D-Y-@0{~x_aBXP7B8i6dn8$!@$U3oZW99L%ui|Vi0-l;1&BcWhRVp5m}4gnb~i3 zBPTOH#KY*In4YIOFY~JsRZKvZ67n|yB`lC}Z(tcDR;U;kBKvtI65pp6mZtR|n2^G# zZ!U6_7yz01(*44nKc(%7hmg}^DpPo~lzKFgF<{|%w^owaVmlZ~E|u9I8VMg2Lp5@5 zBI7UIXfjJS-yevr?S$YdBTecm;7qwO>-CEvkG z@QJv3Y-DkU%;T`A3X?`9lZsbR*i(YG%qlHYUdm_`;1Hd)onOsJCTMq9Q=}KaO`_S! zahbimK!imx4g+`K8JDP(w$90$!}{s@W5q^O+`-*2(x_EpFq)x(GXXE|xYXVTygA(W zGh9lA^llud{jJH#4}B?L?ZD9DHVcal%x+52_-AU#94I1G&$D?wCY{KjNoXj`HOl&1 z*es>_bGn~y2|S9gBMJ@L-5jG&LVHf?;IQO^AGVoJL1*I$nMSMYY&Q+9X2aat!5~Mz@@OW`+fm0e|ef zZ~(XO6{dRm@4u6#YvMZ;K1Y84ju3?aV{kd#;K1_oFRlIy6-(H~nXg9!(N{PB0mts^MtUGI)^3Vo8*v#VTq$QHzo)JI|Zf}pA2Qbd< ztUu#&e<30Ed7+U+{z$2mJb-aYJh8Ep=W`P`M<}0CqZ}hXyFVau+xa4pl zIYRgAx&$0_0k;HAkDQ#JRhfQ4bpR{M!D--71!Y=|xUMTnKivjQid3SO6Pa|;+vWp} z58Uf#hexDDMNJis&>xaZ+N6cV2CgQ8$3iTZ2UN zLYc`$0THN*0&$ zKuUmLP8F3f6!Ymgc`S?}*!X)ftL2_^bdGes=@1p%UDqV{T<=G+Y{efWux>p13)jxq z5K4$iA9eq1yS5!J)l-p4MCTf>rJsQ66A*A1bFJ{>$>XxJqE=2N=Gg1xDBI(yIo}Ks zmq-Novc|{dmVcdpZsK~rlt@W&z~!3Sk)4v-T}(4QS#pWQW9!UwX$uLXC!BmH?o|8* z9d*EEPa@FjW_pp^RO+VavLiHesmJj%^;;h1)m+U6B?V0!U~j%u3Mru`B=Xi3{wh76 zdb@-OuU0jYOBw*okPteaI;FS0j<%*LSm#*7qN6{tvu2hU9*oBt2e@~Pu{obC`tKk} zXY#u~VEf^~$=9KpX~H&DxUcej(fYD+TuI=-shA$60=6hncKi-%3F3%SY3Z6OZ9z2-fc-|by z%v_Mra%nhB5dQn%WrQm2^p(CF5D#n-5w9EC#QNvoRs1yb_7{n)*YBy;iF z0GHVTmQG5U@JdCiUdw9NxfZjZ?UNcC%1q?@hGlSkM`+QOMthqv-Q|Xo?Opg0Djc)m z>%wIF<#Ii4GO*2!axl_q-&cWkGo|yY;r*tXFY|&5g$F;i8k3M?8cUut^xaQyqY2mQ z1Nv6(_Jw}gk`C&q96^T7)wqtzmIA=aq-mRJf~u1rxT_09ww-Evoty)hU9G=jr#;4|1MOTvg+2C+nSXvYRID*Gp>9 z?MvCG7xo6-a6dO>t>5Eya;?s{zi&1=r#gW)Uc{!srbNr zYT#xzcW8EecbZzsS(nB5mvRdbTa_@Oq~pEW?v8j%6m$0WbNu#fyyL5>7QO``zORg1 zumv0E?qw`)TT?nCpRP@`GVn>uO|)hXkPtxgXlwsmYmG=v)k3u71*mi%g&4F)lYL;M z$3{1%-%fvOcLfC|$|0IXX42n%1NEGBNRBw{+8-^F-VyWmq|KEqb$r8ExhE=6Qezj7 z5U+n(;5b?CNQpdALp~E4K1w10Rvd&m!PK{>JNr(STVig;3FD)Qw>Oe2GZi|&TR6sL zdnBLo-8mk((|+(b=3i>WrkczaRi_V>NZzcC{s@bp0T8KiTF)w0EzHR4UB*1`i1~#Z z$GDC1LYL$9XH@~mtvbm!_dMP*xk_J_N{o`;mEL}HS$J6Np1EZL^1CE~_Kj9w$qupW4 z1&6~<^hG7<2Pym|OG;FVmxG!?)?mZ(_bt1vr2 zUss=Xvep>%Iy9yH%k|r2=HkQ-ie-(%iZDCGWERg*Fh>Tr%M+mi{X>x0h2s$A$x;(> z^++^XA@?cqx!9qWAE(W_bn^8R-ugR7Jh^fGl6{M>-xrL{bJO1LPh*8eMYUT^SoH6Y zTnbt88;c`sKq+veCRI8-W`kS#d1G)E;R-z6nwMtY=1KL$hx^xyD+V%=Fj zs?Tw|+>l(3(EM&|f@Q4?>-Ub9IZ3Fr zMkwSQ`-^U&#`V-fJpn$MA$>Z-*vTXX}m8f&_8j`nn84?_8_7(kxdRD1E5%$7B}zdQA2^ZT%ZLO4_u zpnauOV2zhty*@nfn;ntdOqA^LhUJgV^7!V%wYy8eHI-tG>59V6wAQ-!qt$G}6cDXN z{paV(kGX;Z4-N$)p~1a1FW@1u*>MxPxlV;fw*njpdf6PO0Tq64U6|<62ZCbnsR09? z%BL#WE_%Ju6DzhQ-wkrxk_ZUh##-}Z1BIay`@M1PKh@e}3n2Q9i?C~MC%IDXwBHqa zp&*S@5{5p_JIg`?qp3d=nX)5=B1JN(zikBHY&b#QO@ZtsDL09jjg?v>Z?8kcmk-c0 zu}D#X>sCg+JUrVq9jGZJm~tzTMRyPQ!;5tzDsFZ2tq0xn#S&pqw( znhb8i>S^mjVh1r$M4gI+CA1brP*MHEW4`h6zD=#Hxi#P3Dh+{vaw+PQhY~yJVU+i3 z7YCoKT+bZ~VgM|`cek09cS(m?0CY42!SRtFREZ;v$B0PtV|^{B&@~7(`-~O6iOMeE z{k}?5QX<7?t>Rnrv@>uo78wZql1dQl((j#$og@xkL@SPGX~?-5z=_0he?D87AhhhA+0 zx+THQV8WE!z06Cf)s0%b9%dyWv0y_Zz~gL5fq$i#UcVJ(Z)Yiy|M^8zIv$7(N42st zsY~)BzLv(;G`|bca=C%-E4Sty%v900z6Bkr(IAhwChP25)xKmk+I*$Hm8j zqP9U3)}-B_m>q<&N6j@Q57$w{*k0 z0@(#lE70TVuOH#y01KUSV8=5`{w}3~p5v|0R`N&w+Xqqh3d7_N5FmVwaG-AI+x5fIF^dga`>h05{`yU;c#Y1qO)+*tDUUDtCm4#M#Hr6w%~nk$c7R7gSSa- z14W=~*VQu4&S5=l$W1#k)|Be=dw59c_^QVi^>}j9F-`b+*$MIwkwhFqkg#ujk z_&7HL2srg*Krfx^o7I|%Nmr{p^Sh-4xiVvZKg45h(cyydQNrwT?KlaT1ji!5tugnh zM=`>ISeIgBqgKCi$>B<@GnPT4qoa@Rew}>wN|$q`)hv_JTY`s7|CUIn8;#T29-8eC z4u?@3n|RjYt)6l>^8QHuMXE*A@S)da!PgfbJ`Sqj%W^IwQMFiYYX0w14Ir!9Zm2w` z(_;SV)cyC@`)4Nfw6S-Cg|_?Z=DRkhk$I3j#XTPbUT62!ZFbPYwU@Se@B38LyRGKg zhb6Ft5BQYMjIWi|N{FBs+f+M`_HS`5-fkCb0-Y&6Dd%LO{$o>tLVK>PDNGKgyK=$( z`QP9&xvQPXmnPQ>YR*zK9xD_tF0WMkEoqu-_dvJ!k6kzm&jL*ItivA_fzd&-r`zVh zodP3$M;38Jm$>EfpG&bLvgOW>)T@56WuFA6P$`|GIYb6)G>C_hOrjoAxkbm^T8%znYs73VIjdzM`QD>E z{new=%Z<~IEd+_6sbEjHI`=U+oz43`+cm)$t-3Qi`1V+(!jnQU`+`QgOyS1+S-+gG z0vG_@I-j)CDME*q8_2DO;IS*06kR*vn#`Te`ZWENSn_shRK0J*D!NQxY<+gm>~F7k zG}iw6a~o2x^A8fYdpOw$s%!x^k7<=aO<4c+N-)8BouV6 zCFM4!cT1Jqk0t9qi`tD*De(kvD^kBi$~3qJ-Pn#LGY_VYSTx@$P+AN9kFg&lFW;gzWeDHi2gEFv>KRG$c%njjM^DZ;I8B z_);Vzsi)}i7P($(4XZW>eDVWbE_&?XEGR=>Z%~p_L1qw^uQH?dCKg z0^lDjVt8aPD=%3+<}-C@kiris&50hFIpos7kOz8g!Fr5g8oT;-%JjlT6O7YWkk6~G z_6nLgmFxY?%C1%tzEJsU?r-jBh>K^yL{t)8zSeSP2@IbzGj`3PL^Evi71|7%Z>!p+}+;@ZED^*_5@ zNz*Eq0aiu&xJ>S%S*o$s%Zjw_`?Hkg+glJW2m}yf|QBl3q3U^zx zY@hFMh?G<72Ch(z;%X7etL zRpOz^p+(PcMS$-AUMzPnYdz*Er70jzAoZ&1*iV;~3HBWuXgVgQn2wIlKTVH|izBC` z-1~RaffgJ(?-^3SF8;&@e|eSaj7|4TB6(p{9)#_!e16Wy{GYS=?~~ixmHbbyy#yhW ztI4_T3>AzutAQ4WG`dLi%9%1A-fzkNw;Ou9GIDZ=u_Gwnw}j;W>Dd45j=&YlzYYK2 z&4Jgw-!OX2|NAn5+-wZ{d-DEkOZ%1o?`r^z%vygp_nb&hvh zQeueMtJjnZ5UDge;GIbsO9IZ*YHU}R(9+Tp@L2N>6mQ_PlP^6xfDeNIdy?UFY#tF9 z-AAdKuO*y5&oqWG#ot?Sia%E0(*(Gdl{S>@zI!~?q>tXs)Lg#GoKNov4~Op2auPi!9PBdCKW{%1@A?m_mnv7n&zGwg`QCE(iV*Ik!p~I6 z%UY{f%l)!eF9Y7=C|A!HzBL(UCFD!-AF#-GOp*zNS#&Tr_&l@f&ay8w<`)gi_|E6f zVoFUZ@`|FO+P?P(P?Oi^)9|DAVZ(;2`F0`Yc#XM_yN+-jXiw zo8u56)URHnkfeKSmTS`FwH%K>a@I%N?BwEe`3Z(^Ty^D8ra7ciywGnbGj+U8>MkfF zA>docX+UHweP(f-_T69K;0zcG-x)Ab!Mn8f!T%FU+8rM@zcXl&RI_L%=ZY6G5hyS$ z92722qb#;Lgk=f#v9Gz&z`Rz+>iK|7tBA0UF>}yVD^89QpX;kctrX1uWVT3K-!04L z=eWzoijg5;n1uV+GiO4BT)&ySbC=M?Ai zCIS*e;r4H8MN191RE$0>^FPu@l_wSG+>Z8RMt!1tBM%U0`~ zW3o)s7uh;yg_$I53~=gP%6SSt_`huAJ7{;y42sZwT@mm`EP)^3$H(;jaleTyWJXzs zqViRltr*~L{4pgx-Bb313MrE|5Sjo>A|N2}UjCIH)SfmR`?+BpkscdMf9~O>-l|>5 zg;619@K{vxS}Wrjt_GK!XcZ_&Ki8hSgF9f2UGL%;ZVU@V8y}2kuw>U_6mN0ZJWhUE z4Fxhy7H%`3$Lp{Ve4g(Lu1#ZNlM_Gt$9|?KXS2Bp0V3^#-HO{qN8`4~@p#kg!=X+o zdv@2nG_LyYg;?!3Qu)Wek&@bgenlLTwO#g<7;bSgzM7wdN#`$#qFkyB{b|2Fy3Ukq zM;D&t3}Um}!@PUvPm9@O7%EzC{_!Q6p|2XD%jm8KC++q$_$xTPelW^V=Arqe<@Li; zn=m2~YdVnDJX}90vlDlBI713m9a@y%s>Q_fvvIu{*Su$s3z?c5hhU)*&_Etf0 zMeWyTfZ&$k?(Xgqf(xP$<~9fG^VoV@S%&HSfoF6LsUsxMAg zbyfF1z0cYEJkR>A#m5#fCjQ%gb)rmGp1pBn{G+DpiQgN|;jXC#8VL}UX<^XtR-e=g z+a+HR4*3yJzopthZkpTMf$RDym$u z(&jiXyT^UdwDh=(O1rt>a2&3E%>(oA5Hl7Aw zbbDmtk#;0(VZUo+lul%LsIbJTL}LG~1@5pt;a5&Fa&l?V%WE2_|9l<;|CC=qqLqjl z9oM#xsUn-l>3i*(m($HJXao$VVT(Mu5)V}#H`*NNjj5f}&v~0l6J1L+{CauE;f0>0 z{6PhxVU4>72JPpw7C3XA*naAWA9@!5!0dSSfEQ)`C3EXSDcer_>MV-*^ zuqp2x-TWda5K2io;Ja?puAzzCMl6MUm$66n4l}>4O7gj*iE}@TtUOx0sZXpS?V4@k zM#fj`uQt2)*{`l4UO>L27oCyFn`r~7bEYDP{Ww_o@;F}hL z!CTJ_Ps@GQ(BdNZUY>S8p|O~rkn7yOb<@%Cgy*T(m@Z}xAsyet9I(Bz@)Lk^`7rO7 z32%d{cK zWN@T1zb5qfJ|)%eeVacDjmY10D4oue1eroOq3zJ(5{^aej2x{uF_(3#_dGhX27oQ3 z$ES+Fn11XF9lNQR&v=-1X>_T5JcBH6j6osHGu!;W=uoORSlK~~W3+Y6>wF}VEZhY=6ilDr$97}BpDL()`nbh} zZ8^2w$*W?e*$g92w>rHP*R#Jxt^HZ6OJEig|H?XPJNoPqFstOECTB}cjT00R8HgB| zCYE!)nwm*F{Pn1md-8(8-lI>(#_$g5CW}GHFEBan3_IH)ZbGL~Cszk#etSPq5Lv(s zJfWIgm9g`hH5xaHE0-I>ztqT6NDtUHt5hoDK&0A0mC~UgNT!g`Eky^O$NWIV|2(TS zm=aMUMT&2}yvTw`ha;l77081G;DF?`TNw1lLw2{PWgo?qIcky2wv8j;Sd1voWl6=A z>N7DxyOT4i(Hu`Vo;h`Xnv$VLqVO>k4E@BCmLy6gvML3dA4OVhs>t-UAUi{r3JV?{ z9|O@;)^W!JAM;EY4KFTsn6Fm;)_m{)QGGQwb_j-1rs-e-%!LbG#6F<-XxU!cEV4f= zoZ0e!j$1URuC`?0(qWlZnoVZX3T%^t&QGU^|S+O{JI%oMNhnIQHH=a{GdOajlO@uBJL3F+fMk>0oZhPQ3+ z)o;VG|J83W5kDy=foZlyy;H8;gThFBEW0-*Znahl-9a?^ zU1Zv*f$Gv>oT`iKK_$}-Pb{mFRh3>XlIt|jbU$5$qjDwrzE^NGeO54n(bo8M%)s-l z#Nue_QTk8MOb&DJbKP zi6tsl!*raG@=OpnkrwDu-^!($20{i&$xRm||bA~lzl0dsXJr=dO z#C#3r$LSRl=DF3^y({P|;x{_9$mPi8YC|bDtaruzX?(z(J3xcT9)Q+r%9W~UZO|$7 zecy0pbh1fk(_Lah@<0X3&DzN|bLnZ%6Q$x=-oSAGJe65D&b5r&aKxk>KC2>Tu5JXj z;Z3GDJ8)V|=ZdpKpdbqSJ`$k{IxurqE?5j!8(3ak6sgwXgbvK0HZkrlEfd#-0Hw_w?m~TC!mOfEm#l#*PgiGoO z^`+*O&h7X7{Z+o0eD=Cwws%Kf&Zo%$lQ}Yg?rN=4X3R+UyDd#s<->ieKStH#Fg$ZV zvGcbmd7ymIMlT&YIE;*cao@CgPW+|SuCD3+kW{@+Pu9tajks4hj1H4dsma~qs9 z%Iq%OloLkeo!J2O{8^<9?u|6$Xz>bH9a3%(8^kaI)|i{4^^C27(2Lo!c~AEj%Sfyk zND?x>P@qI^{&HB*#co74zdvbqa?whwQaPyBn-Vv|vNP+G;Ssqj0!CKckn+;T+mVRb zE{e0r|En%fC_MfcEGCo6km0W)@-T8`TFh$H|55$hT1c&IwxBD_&|W`F7N9qbt`slS ze4A%eZt7-u^u$$vR~$YF>;MW(j8>K1dR~|YAo-gC| zed2(1x7#^sD0)<2d>KNji=su}F#DTr?{EwQFMa8e&4i&v+9vh+tWG7ZB+tLE;z0~> z+8nDG#2`AofJ>>=fDz{3@VR9K8s8H+x3ra}djb33q=8Q3V(i+!Hbck^={%ZfWa)CJLa7xi(zMhshcB9#JF{XzXeHipaSqBsS8($J>3`zu2sx-_;XGjTz zov{d|qyd5Ff8LLKID0q0N$&^5TdZ=GIHWs*{8O9}*iZ#m8J=y$8 zgwL`0_-I;M%Ra2$w3PI!RJB*lx3YTknw?&pR@llkT7UoC=9{pOdr#>0>v6hE(2}CrdZEO8Z)~-EzO;DMlFhIY;FV(4#`d4jvFiO!LtnBA!49(-li;1O z3uny)v(E_K^MllYjM*VA$rKk@&eIuw)v9HkWFs{?>kg*Sh`&5G?Rxmcw7#w=sL(JZ z9v+f>g+%;}tDf#Y+%!1~AqfPO;Fiky=7lzo8znHt z^E0_^k+BAg2SaTh5X-oLL?D6X1*vgTB7!XBveh6%Q6de4ZsFVDp;9*xkckTfagMO~ zAh&$z42diC0p$rnRcQBcFlKU!Cm{6~A*#?&WquHqRDNZpRT{*)9kJz9sdL2tBdC}o zy%RQTzxgSZQ467!k1GxQRW+ed44PkYf{Ot#thQ53D`p?Td37W1d9cDn6`YH040&PJ zkTk>9ZuU-2>vTU@wBL8!Hx-!fx`CPgVK*GMvtFRk3z01+Q}n(9RiR9Vrk4;wtCg5e zLZ9c$@z0bc0dR5pdqWWdH9@ogp|GeBu4R1Gjelr7r9eBQ-{4$zr~UB^N(6>dEdeS4h2P{PmGe^x^Bi=Oi4~YT>uLEPrl_fiJFn zj-GNJ$oSBK{qP8I+e-~5kKCBS{tQvIfhgkR8ha^eovcn5AMWgz2NROY;38v&5;H;C zU(xKUcP;g|nRQ7RXwsdUtrPYpNtd>!Z>;jzocC4f)T+NnN5ubhcnN~^^q%H73MV29I<>o5yP$n{*2X^)5v z!1B%9$6#k%U*bI7d1e8{x*7k&l_d~L=A2GL;jvU6LVxUB@T5QIW@=rmR_krpE`BExr37de+Qhp1N>XzC znJ!m;DxV7>72&Mmwt{ZW+v_+2Auq1?Sti-;^r-`bx1WNOM4L%Rd6#qZsOXyqUpl6K zt+Me^skYdyMywz=gdmb{kaYO4o{~kSy$(a6w(JxslwL?>Q7wV6c70COsum)bxANVR zhJRIRW$X?*yW3_PZ6W-pk!n_`$L{PJ;wLF?zboB?~~JEG6^V_i01$`?gLl8(Ra zy5hYatPn%C;%SW8yzMbVh`kn@@$g;Gk95|8S9IsdehB{K=W+Jbt3CiM=_#fwMS+d zAdaxD@{kp>jB{I+g7sI|5jQo0+05t?UCp_(+)jsGzv*54#(^o*us7X0xL$U=z!3KD zjoADS_cGvv%+8F}FUx7VYje7EJ3wLn(t+NpR;7?1`+Dc24{e}>gyn%eim>SS>v%mi;%H>dHr~Y~;*x6ERu@-4YFv)5Z zLj(Dxy^X9mTh{RX?Db^BI~pAxm#2Pftmm%hzDb7`3t!IGmO*J&e8%pDcE8}*9HS{` zxaQc1Q?;d9Gsz!a#-!!R+(Cs!}exSoCJ^^$eO4?Xt>p%hs$LvKSWrm6ooW|kunXlMSs zcR#4&ywT%~C*Zf(R5HdH^ovGo+20u4@33&ks~ZJSd-Q63)sKG>TS(|RwN=d*V+miLc9;o-z0#MRvC;M0=wh}_W6xJc z6{=bbw+k&RwhtkUR2`ORGLs@=C$3VeG#jju`B5nn9K9FBx9UiwN3o#G=wbDyy%i2C zqxV_sM^nd}#r0ehPN#;eaMDjdCo}2Z1ndaXL^=1bW zp~y$#B0~|E$DJh;buo`PSiG}xba6dd&Uw_`4-|I>=-*8{P30gm|tnJHBnLOagd&3@q# zNy5V!r@O}5bZ$|vS1kpfjXb(|J)Ct<*1DsFy1g5`CbfHVUZI^W81rox#(=oBJ>DJ% z3y&^+Kkdf&)XB`*CQ0J2g^}||M;7oc`uv`STUGo|ZxkcWRZr5 z48d~htYE|DKT`7Y64R%Jm1gEU6H|Tr4!T5FJJ#6DrG{K9^_h0|(HBEe{$yM&Jd--j zg}!0GF_2M>CsXx2YT19S)ByyJZ|8{RS}EhS;0E*}<1b}o3Ky-?p`aR%Vl$J_SR4_b zN*oo{2Y1Ik9$dD3;S$-@eEW?6fnS%N)~a%k-iH^%g{*bHEDGj zw)1ZO&}oaw;_)cv_*@gkB6B&kshrIejgAK6AsMXK`tSGD@&#fIg@a;IKesoGPXBI{ zE7o#+BeE5D3BhymyHs=9o-UFmA`t13#-p5wCZ0?D)%O+kAIfCpBi94yP2^R5yT|i)^2{GTC;Au0j9f5gc$YQEIOyUl1O^=P z)=~g@k9dcCKY#>jcZV|f=1z+e^095_xX)7TWjf=0XA)6=5~q^GksLQ?e02EBK;(5I zO>{PMcGdj)G|qf;G#@9Q!>82h2ZbPpRc!a_1t?_Xc7 z@zQa9qBJmAE$DjXG$MXIXCo18Xw6OKmN}U6M4sTQj9+NSJ5L-oMw*AqoaC4{@PPfg#lc_$2-!Zz~*#c&p}<`XFbq=&yyk+gjnR?`#HOAJb~Kuc%w;xMaHFCI`) z$RF*wT(ukiB9RCh4MjQ}#GpkQO}`{-pMSV`jq|J>*YSCJm4NAf6^OCMp7amr|C+$z zR;$(jbBkD|8$1tmH{~Wgz@uYSe0+G~mu7}xl43^OSyBpeqSJ)Hb%;ryO2xS+pjB}M zXwZITu!CvLVPgREvoQQ*lc|R{pJpHY++&cbRnqDbs0X3GQb+05#^9swix=3TmMM~AlFALGDn~kyDl0#XiLjb9J ze6u}y*XWuzmXO4q=iJB8?r1SMf8SkKq1XwLBJ;#1(5;_Rjl_L`a#k|poO5_%Ymw`J zr={=Hg3jL<=yA8e&C~JZt?#=f9vbTt=6Zmxl)yCYZ!87V!SHwQ9U~N?3^kjQo->T= zo^xE~y>_J@%S|{UcxQx^TanI2AA`_TkBWL>>TwVwu!!PIzcH&x(-YN?9;UVN0>Ugu z3-GV1HMmYNc2|lVS_(cU<&u%{c?V(7w{Cs68tuvOS(A*LEsN?kpKzqf=#dl2@4W`O z#fEx;{X@p^x9mpj0u*_C;P?m?0Q6Aiq58<{-XgbG84#nar>~sNYuF4F+_*ZSqL!1( zPK}zhX+9s@9H)25bJabhxTjV3X|=(rA!uDii`$VHHT>~txkfCeq;!6ofkzVUXC}GG z+|jO42jE$!6-BL=77x~qmlkvzOL$`t8rMJ+JhR39$<}rIHE;HI@qHFE8i9iukI2^4 zgv7)z#yxFEA<+~k zZxG3}N;#2cGOT`sD?K8S&b&8BDBm_l6Ya5C_N$s#7mw8N(vZhhtU7b$I%7>x5eqbH zu2wh5QtyWaB7>tf8ZSnp)($Ve2s+J8Iouo)xtye@*o=rSm?1_A;`oQfd=W+uh~1dp zon#)#n2g-(1(dWK7n9r@*QSe$;WVGXPkDYNGDXjpH(w9~gCHMFZ^m~ih>fR+!TETcZXppZNtlkAAaGFO&y+xNCK( zW+?qOfU2kd^9gF7AD>@ldf0JSZ*!u*Jbv(FjtyOG7sZt0l(K#M z&1~5Mr+*|IoHz?jW5AHyYTzHtnB~@B_bR^;&<%rWEbG*#C=I^6UDH73zs=;>xjyeL z&`z)1>j!_lWu&R>Fsg_0~b$N)%}QvCtZ; zs~y6;Rbyyx&asn}T9#UH?W?ud2ZML7^r%`LMAg&vAGtwc3dRvva>e^oPK{VkZ>PXfY%z+Cm=vV~cqw5OOcGt6-`R{J5lns%ZSHh{m@-GFP6FMD<=4+DI z6G=6f_w4hn+|iYw zQE)jLpO}VGDcw!c|GE`ojKgKl;B4*>8bYAFyuUwaE+eMm8XTM5i8!nb27jpI{g6cd z{bKa1k3glc8DeN6u%!P!M4Qm<3g7Z2qWbArBBa}W>D$F_!{zJM9o^d-QBF35^P(vD zGDToMK#R>(-Lo-=C1!gx2YPWJvlm>5-@x*n%rvnI9!}jphDJQR)|5SIcXbj~_Q)UD z0X<#OuX`Lxe|@b1uHpf7xvIn*hwnT3gy(8Ichotc&2ETu<%U^N4&QvvfY4+2B>UhM zK#c^*u-qGVi!s>PnrbUjr4E6u_2fjm!F;E^Fczc!V8noT2ERMgb6k!&p#BH8AYn0C zT&#}$ntqR-tVI$%QH$Q+;^iK8T=Witz)6qa9$}tP52t_E;A?d~=(v4b86L^=`C3YE z&o%M8CX2`AfrA_?qQZW@5$0y`Kb;Q!M=Oq7d zVY-d{t%?n%rETlx3oT7_5lXlLQR~;G9nF`L(qdWvD(_1M6SKTOi$@c@q8$IOEwBX} zN8_<(&mSbRPyll0aC)u8b1a6egCX`WChr{ZGz?C;So`bl#;xpI>NB?&L^(aY?kXC$*VN#C^&c? z=IjD5;@tk;;Gz%<4Tq@+nI5Myf-+fB?R%dBCv~`s@aR;8b3{S5w5fHP@?kAC=|bP= z%C^xHI8q!6s_FdkalNH3GxiO?XUq}Q6O;WP6>Z2Vj!8n>ps!dP6Yrtio$e;T z;zbB}TnLhee-Rr$Vrh|)?m?c(qSHvT^^uZdFzALa z6^bu4n@|G=_!C*&af~`#^Oq4V(RjRpdYyOs-BMe%#w4sBqo01)>5KyrX7ZQYl$!14 z$o5^!Nk4ynLcpSv>ie4TuyQK!{&H=*+LnDk979UN6U^N6nroHko2hfQj@vXjRt;37SLMi&!}E>AUkF2ukyxc*0SDL5ihqKll(#cN*7v?lnn>DB8Ucf5#>W^I(wUgujmCe=G3X2AMS&xbPB!vDty$3%NQu+bh5L5Bt~(NbTJ5o!u73fIFCe)N z<`<2mR}<&307TF_#iga&ZX5dM1)Ikmc%MFf@p?LSee7jg7Q5V5`Uvx9x$`>T-e+(X z5Y)U7s+Q}fP7GdW^LSx!x29&0>TdnRg9y`(_cJ&{0Ri!6iIg_uVv0fMO^+_-2U_sN z`;m7n5sz3ekv)WAvlgvJJ3)lSl;fLjzZ&8E8xJAw`v+m*#P%H(QMaW#LEKhqt;lit zS8CA8n*YT`A(HMgFHC%g)ob~r^W)R!Er^pf&rhu*K>;9nMYwSd28)BTork9b%ycNx z-UYRVw@zE3)Rd&Qo`>P!hQ|4Na~6O@YY5=)CFs|!v9 zs>!*7gDx&Rf57io|IrWy&eNK6bgm3y&_}bcfJ2If^_l*Mqhb`U_p`1JN5X$-iCx2x(rkxN+J|h z-A9rvMfQFve&oEovXOn zPd}3>Buxws4Jp?fvcR^UQqt4opELdnaK3>Qc=Yi8vu;vwKT|}>0l}Q7^-W&}UC0nF(8J0nJ|KK2O z@pvdHtN6y^KV`Ci()2fzGgF79Zc1s%vB|*pr#6_x z^OT_CHD#0cI)@?~7wFJNpFM;-IpXOVa9%Ii2d14!e-}E# z%J?|)EzT2w{7>Rnz9d)#_fS9#>#h4_r-#S1|Mw@GZid5+@^Zqv7MU!bp`kA4ZV1z3 zVsw3W`8&nV@7!LAvu-kj1+?xTc?=bXx)}g!mDY6}71_~o_LZn<(U zHiLVA3F#-7-Bs`c#YE`2mUs7g(Z%8uyIFLpCapn*0CV@R4DCJoO*eCP|1*YC|4Tx< z+hGwk-h7gs4cz|UDF)Z4sPvBBcDW2jBn4oEJ^GZLX1hA&7LU&uYvT%0*lgz8zs6T| z<&sX3h=ro7gMC3ckCaDRo-4FHr@pRsyse78DSQqkm9B@&Mf}dfczuy_-WU7$e`H3u zx9S4jbncxO_~bmA$D<~4S>kUyQHv7q+cJ0QTTO2SToJeS|B2^=JO7~t-c5i3235c&S4bR%j{_h*N2fDL7PU$N)C+Y5`%;fiB;^T1MS$mGo6 zGGiNpv~5FX2Xr3hFF&z0n{RpKZ{vtH9(?~SeoYj+O+Sh%C#Q7PM^2J{m(rGHGcFd!M|2h${MKNsBoN1hM#6`<=*#TI$ zQ7l;XCU_^N&EIvo@`?}a|6|Z(Z7=7Sl0oDB8zZ({=olEm(y3B19iAFuTT`C_>3iHm z6SDu-hQi0RkgP`_Y-y`kE}6A|?L;0nO*~5aKj;Z*+Tt-KC1uE9aj^~CKbqjbui&nK z-}3L6H1F7z{GYGRe_vN<|DSOU|4@kk*KCXNmiuTU$k31k7Z>+GM1xx=;Q)(6yDso1 z&;j%RlJ(Mwv@roPR76B_US3{6hAKR0-UOfyz#HI`kX%)`!eK#(6@|8+?F>9Tcz_T@ zoKUz7cz0p|G#T0H+qv8|xD5;c-;m3j34p{fFd)?}X8EUFpaM<451FOFVglE%W~v2* zz+UR2+htHlYcgOd#XZEK?^QdnQ;B~~Fk97k^oMJmwr&QZh5pSOdccxcLIRklh=CX9 z)Pdvv6D1R730wEm|G{qc0C21SJf0#VKc8f7ZtkiMEg1h_q!IAr-i?6){DVjlQo9724dxifS%&`ORfbNp)X(|7A1VpS9Ozc3bBl{5m>O!kb@qTc%OAc{3*sjDUe(LZ>CJxauppv5k`%K!@vHY zQ{cY`|9?|2|4*}H)C?$!RTt62bkN>Q&azTKk-rZE&vEaL|95EW!=X7G6PmOGqT9r>FZjTo4;KYb#+um(6DYsEy(OQ2cW5UaHWl*9mYE+kF@0!--l8HRUGF z!syaR#h#*Q*t_1#*6YT$0W6U13T4qMDYkw_eDrYDd6Rpa2MD*-$(NTG066pz$bG4L z`veew|Ing$!=jPc0-gKCE9M?jDEOr1{&FC&W3iXnJSp&o`Q)e72fu;>Bto|IG9s%y z|K|VTNd1J^8qEZ8J-XE_KgPA^OzbUh_)4mJ;7}=`V9%lP09uCL*9*d`R>I+u zan+7q=s0eBnYOjDTIAlVTlXmGvAI!of@C_qL~1?(sggFDsgXS6g+gY{?me0eecAsq zGa2K{kwIR_cr(Y3)ZtO|@IUuc3|O7-xKH>!A~R%Dovub%pL*8W-)k4mNJz83`E(o7 z;aXX__}^hVslvbBuTy6+{_wgJC#uwnU$5&K6}J~zjZ8_8RMQgrK`#h{w71wja&>;2 z#!3P2tSVg^b11hRx_9$ts{bYz+!;Qq+k-EaT=(+no3`qJ`4kMv-Y&fQWZv|dExe8) zNer>=RFK^9W<8DVvl;6Klb*P8X`F5We)etuY>OtF0GFavC6Q*h6Yhl65=k1LUP8GOEUzxOX zVo%SCy!Nh4O9z3dOlVuJ)fZNc_@opP$Ae-&1q*nez~TBMUDv#L^tQsI8s<{kw&L2yWy-tH*OHG3j=2rWj;Yr_R> z&Hk|42*4(`mx=fPw2Zr4{j?`*KKU3qaA^lf&v%5M!o7FCO1XQ@AY}wMJwI4oDyuUa zNH-qy-J@+L5_bJ+Ld}WN_SlaR%Dx*bkG13ze*UN+v=lxwqu51+-OH5Qm)$PxKqZ8$ zAoUsM&L<`n*?LPIS=WyG8THKkbWZ%`ZpCRX`lrCb3=(_fa-2nn0NCV|m~3uC-rO8= z1Nd_TnR`h&X);mGr^%;s0#z19)z#$fHhw0C$S(J|G9M+v>vgo8+~J@^rd7z~5fPSa zbyJl)_-xRbPi9UwHiwlj7Lcz!-H=g{L)0zG0?yIiE!Eq{=UC2UV2!*_X9EAdP*)q3 zhX4n!OC$q-p|ld=nleKd+Vzu-C`hFtxClCMTWju!T^p~{$w!55*6+_ct>ix)KBEy0 zZx%pR;A+ILdEXUey_Bn0eU2Q;eaGm}GgX7cSt=7&SN61D<@e#)BUg1M2{Dl^koBZb zr=xN)wGG9GpGmlsL6gFx0>=bKM(0`(e?W%DG=P#wP@PCbgeO;!XrcfIONxC$Cv-LY zge*O5-Gq*(^09LbB8{po!Do?78n1D8C=eeS`9spKL?Qj|3zXX@Yx_Eg%Qr3Tsknb=C5L_9VJ3$4e+pC z{|C&bb7{P{B}r7IkcL7rlDGBqjXb$hH)$rE$JoT?V);2Je!->XTmX>6`*{}*wI{r&qbe<40eq9M(x_tYk#?VCy}}L zCuV_b0#uIbp;*`6#8h<9{h2SVItAT3Ztyz^RD{=UC7acYVK%l3Pg?2#J=BPkK@whi zF+Vy6#7{^@BAb|%nbAux#pWzwe*mRL6<9#CU9>Cvs}4#ff$3TZ@miq28j3zbBIeCR z=8wC&u?g}#Nx(`sMV4zd{yGqiT}MGGs}G!H+*hYp3HFJ@(62e#oR+hNl)Jy1<2hWU zB_$;!MxtTkD2ilyKE+{jbNSo~Ith=+-b%qkA=*vorqtL<9frb7&-uEt?riXt|9RJt zvV_={N&cdQL7@Yo?{UZa!)!Ydwuj#2f<&=&)SsN*V6| zQh0pIden7!y!5Jr0JIVu?_1Y!aST$HTm4d0h>1gS`fGWGvSlsR+HdSdfP8h_zNcg= zNa4aM4I7@-1_&JA8ikvi$~L|`xPG{M&iknx{@FxQspV_MOV~&}CZ51dwvm0;V5pfe zi}5dh2Hh8YN*N6*nragBteB;3B?9645ZpZ9{zP$MH0?q<;MPk)NA-KyATfk}feuLi1 z12(omE9lIaiaac+vz6Wb2~_ICmIj|xrc&;KM4BM(@zTCnUy{4|>K@AO*H0nz>;{i~ z_Dv?aH{>^JGkJ#t4l&C4wD-B3@y{9ehleIlQ?rdenXV7t^J+e@CM4KuHKh~x<^o|XNen79bfFFC)b*BNcTmO)Q^RaXEq?SRB3!9n z*hmJqJ(Dcfq{Ym4?)sHlLh6|>S26QGRsn!RBAYH|zwhN9_R;J$vc7i_wlKp>EH1lH zsZ+*wx)Xh}i3I9)0?Mh!`#_vl#{>Sl*R>ktt8W1G`%e;>I0A5g2x2aMV$ zTJsV=2?o_@wEnXX+q1L0nfaE|iHlDqI(<*hRNJfxp!F3CjrBBo!_cAtD?spu|_x!IUh8{N-P7T z#CHv%tu-Se7{>({WZ18Fz&=1-7tv31u-s8avuhvj^{Feew-@*QJDda(uGE^g8ZN6F zLll<(cs_*vX1x~EVwVepz|s@xpJvZ^1WfwNZN?Qy@y%@KebBnX&1W@(`#0K+A0yqz}vqwZ;zS2e+Qun7vF2b+hef9+9z2TY+_fEg4;nQk0u!WdOe`I{89NYjN zHn;4kg9>mCBcZieO%_-4`?~Kr_75LD(3o_^<~jV{><9r%OO<+$Pt2`V(%V~vw$W)9 z?wXg>?5*QRxAe&U#Ayk>sk=9-e_Xwip0j>attLcd?tOLDgWs)6{2DvdS1zJw<3 z`@P~HF1=>p7rT+lY&^ASFu!?uCh%%VSSU5tTLEm|?GweM6iI61NvwN+W&BYyt{-1c zzeHQ9=acu(IjwRt(g1z@Ga2vvIVo}CF*$~3!C19s0kUds^X<=Pio7+TB8;4Z@9vKM z7GN5a??7+W7&Cg6;@S54ih+=N$<7uZSf$vb3Vp|vJ@9CYn`J=a#)(-s5;ML-CB&QY zBuD(E0rnG-iDB#CY#}$Me@i0{6mAkYudN>ttkh>B%0pSSM2SA%f7bfJ5&CG}*S3PL zMup}6Jy-*X5L5#)T-}fJ1GhL8yYs!iINRhuy>;Ul^)a9QLGoTRDzzF38|D2Gl#|tx zSh12Y3kCx|E>nzR!A~k3h8&Tq$xm|UJAm3107dH^-{G}gPe*JBiGK#zmtzlIII+^E z41Q#;z(!kYH-Vy_&ZXudi%dNwGQUeF;z?3yFj~~x0aJXJ=2bNo0)awJ*( zPVrff4Iyi7us<&~VTaR))M9cxG^P{mLLZ#Q2ouRHRlN+^!1Hq9zGS&l$!AU;7Ik1( zqi-kW7MWTbE&?Mh%9^qAnJe{+hR*=qSYjZVmJ$WB!kueq zq!KdMYe(jfcpiOX&fLlSGi7p4?Dvt|^c!^J^%mm?<^T}ZaIUNqJ zUNS_qN4x~GqnmGK{PXQARbtRGn=+!~VD7=9YQs?~RZuc~3u(JvaXM(5^SU?qKmHc0 zLoUl8z-Gy#)Y)R)>y;Ab?i}3Vn#G&uko*0MKO0+}sxcco+lBK-bUfYfGZ%pvv61Fi z-bEQ#V36N~BQoKi)_&6tzY>uLbPn$B^^?BXwJ;psJ71wpp)iYF&+LnO5>po!3XG%- zYJQ=iS2?`7R(A!IT%O5!LjFw_-lMrwxqqz5@tQuxa{cvSl-@1@IMKu1&m&bCK)ak(1-%3}>WGMGAe zqjFW$%c$0FN=+{;c{n=2M8fBb2O>Ki_dz~yDsbSG6yyUasZHE~?P>QbtvsRvTs_#n!XLPEfr-F*xxrASSO>%&P?h0pb=kN(l`81_pG@I;6F&wCgE`4&-;?oM~lyN-yU zprlk`;QHPAMV&^kfo)p&o}tdoHvp9iW$R^`0>Gp>r~N*#;nDl+eccf9g-3$77+ypK zX0IL|_qRyVD`Yh@sSC@nuyjEi7z5v1%;vvb=I;Rmmh1S_MZ1$S7M2^W>G!v&0xyH? z6L0(c>xauhhlhdb$ZOo0p&x5jTsKRw4GbqnNq<%A=I-^rfJna?AMzh zUxsJI5FM&ap+!F)`DH+QtW5GOr6CbmRpBjJXaD|Cdo3;Ue}7GgH!IuEb+`xheL z7wJ$GVui)pHCio>?9B_7u0k$yIDh_unG8+`7W>}09DVznLYsH#WLkru(3D7W-idOm zrA9|aX18PMRw2=f<$9{-Bl3%e;m*@}Lhufd@?1{eedX|tQz;R|mS}VH@}iq#x%V4A6wKX0jFA1T{fs3fdB5eg zgR>oHZ04y;AcaZO@)g6qGmirg0ifV`z@jnlkHRPea*>iF=tl!iH|9F;73FisCYp%9 zOJ5msvORd6Ep}b~#YcK~pb7{%ozmiA(_k<8kgE$G+^%ivU*-6Ss#-;Pxx}9CE0mWJ}DG@&tJ8s z48}kvU-Qhp2{y@AaCExT<$I3J1|~B2$}Fnk5gPpyLFPG9e_qMf@z_2XWVELsd^NSX z<EdFFzf&HSK z%RoawRAheOaN|JyscRuuZM?^Da|LS2^~UFI{3i?2DlZ<&a_rt*IbNnj{aUQK`sjsj zR>I~`v@t4~D)_5<9d}k!?3yw8h}BmmcFpb+S$(f9PIJG`P#_Dk?`Aqwsn`}n;qFL0 zDzRV!S1`R5R^edv2*cp_jN0m%rS{rlcB_HSaR1}AN2h@>)>|6{=SJHvz-#TjBK^Xc zN{~7iRK~n>`l}+z)XN3(|6uK{!s_apea|EWNYLP}!QEXFG7I8y50g0=W6Y{Cs($saH*iCIPK2tmxDV)u5|b@M z8zct{0hD3AA&jTfoGbGk+q$>`?Ab~*^7#-!)t0Wl#3W{AiMOdQ=KtgjOF)Nq9HdNU zMf&Tz>1L0VChv#GB--#NJD-U7Tp8l~x0o6om!&0w7}S_lvqOtG@2(Hhfgr>U3W*3t zs&TQ*DB?w~*llb)6^VG;(11MpXAJ7!LkJukQ}CvLIH%);J*vX`dd7X?6Wiypu@Vqk zHKjd9tytiyM0w!9FNnu-MDcax^Oio)?2IM#rvt#`c8t-wDZDTy7`>Pp&l4z=1MWHT8|&K zRDibG?+D}_#or7I^5u;;SQZ%RqfMi1>pAaBZc)rA&>9SJmQkmUbQ0N zZ}F!}^fVJH~Dy#d7n@t7ZkkAMUo zwLE7$$et*T<67S!mm_vp>PERq{xy?lPhjjIy5*;?P834+losT_aog=K!dTzCa{jYF zq;ge@C9-tqSy03?nBy(y+V$mkM1z-0DmE#S1=`=8FEUQL+^!o>WC>0#d#!z~@Fb>| zOQs?3Rvaf(A9CN0OZMw{m49lP#H61BF$l>1wgLYR^PnRd>kTsSGT%-MnJ20sYfcBk)zgND{NcOl!k@mkVv_-U3kXP?6>|Kh~cd zWeVLMw_9m{KhE~G0;0HGQchSBLrTq8%jUMvOT|YQ_xlg|qVRlHR6W;3b{A$GPv-br z_>d0(-E#1^a%f~^bL$M+nVb-n+a($l^!j_~+o^gG92$v`n3M*t@{}@wsEwwu!1`iE zKXR0@nU5w>v|6FmStx$I665ekL&l9<;57|L!{qoe7doE*^_S6G-A23ZQ=k;RHMEb_ zktYsN!b69Ppp-PVhI9&l?)m)o_5n+iC+3qV<4$72LZdT$nOwfcQ|Q~bZ$IGT%F3%5 zt0W|zd3Ink5C?bVisJsGv)0|LoTzh4>vDT{X0+5OAuSC(IZ@i^g{RjqqoR!=fi0Ip z0mB|#Jg$pDN-Fi$=oL&B9G{dV=IxE^@Ba)GSM)g4>~sGy&aEBXLo_b#xJXH!NFR!o*4AQ!}InrqtYu4ZbSt1dqU@~v`7-) zG1pI&T=U*l&={Vwa8gGY2(N98I^s^3x#|AEi09qU&aPN%kIpLqW9V`r z00dF*$B+1;7JM>0F?DVaIinY13>L`GuV24Kc>6)K{arGn`qt1?;%LPH%2XjC#J++b$(R!>(OU*9q1JLxc9OK3^+=J)#cU0OX7=cNY>V*+bqVUG_~nlz7@HJ7;MZ7C(eq zCA~`J%sf1_bJlZk6(9VtF%p17UH_?v;tmf9u;QZ4dMsSbCuwTEC%_&ADCS)9v!}84 zXYF`Ikwzyq?kl@$uHG*z#CMn=T~gBPz^%8wV7mc?RRtu+eAz&61Sia0w$x~F7&VIh zGNk~~S^;Jl`kwv=eQJW`59#MP$pKOnbzvCl4`14~QX6hC2$j5Us9}WI$wb)3K%#c)~a;Cy%zZfS?>K!LJ zBeD%Pglwwi9USP>e{qTe;}Uc~G=nW-Ekl|~)%X8yu1^#V;YL`H76=l(D|3z{{leFc!3R554x`$a=O%55uhhJHcY6d~p&F2fxKK^nwnZJwP!Lf4t73Wrl5=K%b)qZKXTWgxx`wP0n#3pF=wmV z=F2@IfoC#05@NUP8-7`ck|8t?z>kDezYO#Zyb9^Np3kw0Y>d>MYa7|Ya_wJl3E7 z^yuXpjvqfRK_<|{qly(HdD^c=64lBzl6mY&^To%lI`2+}J9Ryh=Jy+{og7X5bDm#E z;MFSE=yhsrRGZdl0ZQ>P1E&87&R6;2Py(u>0dfCNeZ4i5HptX3kT50|CcpdcyH#7l zUCfXlxOp;9-nR=(hYOwQM{U>ZQ#f3GVrD(>GPtVbzQl1rF)R{NI)s8v_Qo$gAAf~PTnRLQECd(2ELk(miY12meqjIp zZGQveT9B<9bPJDR8N0i9Z>LlDtuRSVNGqIK{l_AA`EQR48%1i1>0f(K*o<0%!eKF( zfLPEjIkGLpQH;|U6%X#cLc;s^XoWz{VLwj9;DH-ZFmBN3u=qVDDzx|4o+`b51)Zq8 zf9%iGUSfXt1k`fPIGD!NSHAiH_%+{$k3b&JnDYR@tpSmNn~nHGpeR9dg#qUs^M|n( zmmRIHO*|H}7J99GCiL0r7|Kz*h4%M=Z%ar>;CEt5{{fR#uC$^4TXma$c}Q%tIumzJ z{iF7z`?F%MQej|jI&&s3bQm=O`9<+RVz`TQ>3Y3gA=T1R5~V+ie(4u67=QjuEb5;Y zO~mWW&W(zWYsVwlU<)bsZNb!Qj~n~TZOi9%{03N)I&(m?B0Y?-m9f%3X{`=#RF>Eu zIhleUAO98By&q)80fJ&2K@`Tb)vD0|h&}`|uk*V=KqKJ`T>70a#~~RBp8DF}pumS864E&PGxhJ4?|}BiqSinkr;B zf52+>H*PIcjl+>n46$%bP}0L=i%902SYQ{~FrI%vK9~4;h@`wR8ex;8q*(~xbOn-u zf@JDv4k|M^y9NHNB~Vkug7^El>`j>#40P5))k#^Y>**>*$LoB7a2@P+T&H*2*n1Y_eo;^mGo)iW8j z3cZk{Oh{tNG4h*KM#GrJ1{)(!XRR)4!6{|sERohotg}+9ga|_JGL=eaYASJPcNH_x zGcIv=I+;#`Esnb!vd&}IKPaVIEH49`jK&7)FEjl+J=y>m0)@)t2TqBr8a@%Eni?oa zkmJAz$+w!_dTroeinTxxf#Oq+7=}hRV4CJ6$5RHWlG`w9tM*N#%9@bBK3SR^NWz{j z{Ib~8lG-G|4V!BUbvf)Oa5Zz4$uny~>c6G8TWusMK`1jT{;Fnt+|fku*gltiIg5;P zbWOQ*b1V+mUi_6InK>jSePR__@~>_ADcdk2PrMMZ@lnKNC6wgV?w6l*v%hrGkzk`3 zTPNW38Csx%jF?=9Eu`>k)T6 zXGCXrd(30k^|7G5jSUET%R5}3y9vV=FQobJ3qG4X}V^f`ahv8~N|1ThGY~7oTfFED!B$#lQY#jsX^l;<5qIzM%s)Pti^R> zdfa{kDqejceoe_&)u#RtBn`I3mx3v`Tx&d(+j(YcIaF|1aWFkfp)4(Ux1CQGJ9({r zsMBj_@nmz#8ZiLt8aNWm3+3P&LHh#^($%~=oY|O&K5Dc)AHOARYduTt3XP1gCiGmU z19>bVzO6Dg&fxjb)8MDhDiLg(h94RMi8g8zL`UUS2H;SY1r4Vr>&(M13cWA|yU{_J z(?7S}FIW!a}s_&lnz10 zfxMkZSIK1u#pcbP;f^;=O{L5IJ#LIk!E=!KwZ|NR;@%;X!(9qJ57>ePlAP9Wqu13P z*Mu)O_k#ULBQUF+Z*Z%% zMpD;&$7kDeD>?;UVbBiImt^(-^jF}2`DQyjUYYS&{UbQSIuPsx43g=}0=pfiye-hH za(S}i#&NSzdbO~3wG|o`907K%S>^*l7AFG9&Mg<0Hflo$J^+g#bYPy7n*i6;qdAkX za}Hk}i;b^s7l%@?vD}!w(QJLQxeemEln@lzmOZJy>ifFN@*=tos*!RSGm;r&KN$^& zejGAsdb&}sNsp>|-M%_KR1n7Lcds<|=%q2oMX^K*xsFLC$%-5-o>XIAyCg5XcZcOF z^qCwIF+pBIxeM^g#zE>RW}>WYNk=cg7XL0@~Vp^|J0@O zTz_2y0>a~C{-4I|&wh;%jrsTtl*pQhy$mg7I)m1fxf#pf`=eyqcXzQBkB_<4 z*Xk5Xg)s(XzWQpWIqRZ*-G8#DPV<0prI(VukeD;7>l{6Tc$7?`txnt)Ou=ThcHwh? z4`y>J6FAUn_9O{QGd|*~h=%s`_sGo=`3P!z$YuU@LBV6?Njb3duls$^v#IWgjF83G zXsm%2R>O;*+>td-7&?6pnO_o4y&C!?AtB+uly7LkdGL_?PP)?mn|a`5*Q0VzZFqS2 zBUC-6PLKa@?H(agN|BU2WB}TlRuy!RA%Qx{0;h=%k|(xvCl%AwB!IPQvG7$%qMV?? z8N?o#w6L)EE&B9u1loSH{Y!_P>IZK02%-F+tL>+gHt^v8TsHC>|2*wK*KAs^IUxJ> zpR1HTWb}XTQ!zzKmHe;UBnk(ySt9@Iw(u{}1milcuH~%Q7m0f=p% zO3FCV7=W*K)3;ly0-iGm{6T$4p%l;@<=3yTR+o+z+PI;{A7a7fco9bF2qM*CKf*~x zzKoZ~#QUX#p?QUcX4MTHI4qGvhEf~nIqV9Fg@sfwYB6u>a)7R2vrtgUv-syu0yJiXXpEhJkUX$(hlxyQ^VHM|o~ZM@L7FsSK?smY<=br;h-ju6@aKUMv&@ z5OJ6jpI*loiAE!Q1OOSw#>LeDW+o4aE&Q$2)%2?YX79Pk*4055lb|H=v=1d%gIOCK8>r`VG${}sKZgQybm>6 zQC3_!9agbgdj$NN>i@pfyRg3bMt#4U!*9m;w@=S2fXWk~j~k0PT6>y?P-P1>v1^F2 z&H!4X9PDdDSGTXcLHenlLIxdHj3U)|Gfw55!IfQPODC|vDiXGj2lVt!P4q7XZ)Y<9 zcy)zJ{7CsqdZEF(n&%{jl)czU1!l3Z9xHTT5pXTdo(SE+5z~>&~|O);Pk^!7OwK#;e5%_2rx8Y z=-EscSa|Q=UXpJcj&Udm(WvRuxXYQCP@0>Y&*6=(WtrQHCUK6Bc>kmUk}Ad4n2`fz zcoFMoTDN{8BaH4{4tw)|V4JFFn?nvX{GEC>@W{ho7$`ZZV;2eFiG2e{Xk1|u`UDQ-NmO*ggn2bJ)sOpaw8!2 zVTb92cNT0N1v68^I4Ng`9^e)ooa(*f`Nr^MTs;kDeMTFi)DcG62U?f-jrMU z5Hi?_-HCm;Ofy!wKx(?p5}k1SR=d-TlpS0*x^C{_@CcjSF)_j?)oDB!Szmpqvw3Ds z5_n%&Sj1s<`U#DQE%4et6N6E|@BSMSaUW%gj7tn5Pm;eMTE6lV6Hk?{LVdeg8|0Ch zUhml>T+rX{(RFVs{aF9T)bv0Jr^fO!dXRQg=3pun0fuK4?Z}SY}~lxy5!-rpEaZy$3gNn5s%$l z$iN(3%ZrVVpx)mFD#}`PL5t;@%l(ze`mGNQ&b54Jg%NsOcU&CPDyMh8dd}llD1<`a zpW0kEuXU^PJenM|a!}BSM3OK*#+qzRedOETElB4uM=FsQ3QeL4xY8dw!RBO^iXo88 zov1t|RJ<}FmPhH9BmVU{Riyj;E#Gb&#ii9;LWLD9TK$0Mi0|l9hRTacXrl39iR#$9 zyP^EL?Lki|F3olw1jP@cq-k#r6nu7wJP8^PU@3N4(fNuaW&x=h zeR}ap@`pp1uD4cw_PN5Qi6IF!cX+YTd4ASIA>?rwQHQK_|i2;ixtM#gRE8~FQ?vy-(+j=a?MRDU61diK+@RKKFiV+Ci^y)6Z z?80U7-f=lkU;ES95-6jQ&1P0rs+=tlo#JB%r372grxgcVf7@ec_oK=Cit+R?w;kT+ z17&YoTj)Ev;k^D1O>>?o-J;SAoh*jPz4Qd{L3{#)23Ngs^q&Q)jQ^C0)6&EUe8WCy zy67hRV$^$UYW26C;uT5T4eT+JHD6JKftq>%V7y|GC$heDWHG&xQshf_namWcyre=x zM&4VlA!%B5A~@3F?t>ol-9{3KObF};5moO^-*z8g?n2YOXg2Rv zc}|+#y~Do;<|b{K?a!7esL%mr_DnXJ>~C1`^D0KJI8=Wnz7?72;n4e5`uS0Yo~n4~ zD=qVJKDI6;*>c5UD$CR zhl|R)$Ckdw^_#`6tT=L*RpX~*K)RKOTg(a)Th+)t)<*_*1_w; zjh-+5Nv9`ki9$y274K@lOd=~Z@{t^3=t7hJOfp$x>PdW0JR1_5n>KO<(HnrrGo0uN z9=zB>p84g}-n`0Z>tcB^UC`vbV4lhjOR&`6@o*$H>+i?pcf!Ao02-p(v?)IdIC%4Ee639coVm7;?pz6 zLh!P|FQoqAnGVe{B?dWz+KDvrn9ChG5@$c0S2M3)Uu87>RP69>u99hj6To6&H9LN! zMiH=kr6h7i=b@NA0;HNp3nsfp{F#X`QM~!gr>)yxMlP0p#{-&SRX)2*CFmttt{jLY z%d!4pm#`Q?hdlEV(nCniNA$G-T$$~F8RQiI)(mH=e$32#Zv0mD8Q%SpG z8LK-|R{hYot9*_(SKCgut_6$FZzCQ56sQtmj`KYsqQM3%$)JryEU=We?K*^?a)XmxRf@x`@yk&Xmi=EpLazYPLU}FE7G33v&(vrj?qv~2$!nFLDknE{q>J` zsTCz-4NmUtOreh*eE9tetYPST!|~!iXNN>&UvaBY*z$3T+OPKyDzw`$@PaqLy~z)O zrz*CrV_?m-K9MhI&v#boOqiy$1NZDKbO=a3lTgMFkqJBkY2C^%mqh(gcH*TfLM(#A z=4eyF=9oy5=naX@4|SlAAdUnRS3Avx2Uj1HDQ7@-7#t2&EK*3cYaetpZitjI(b2DJ zbwzUQJjHKX7Dz714TuN)7tQyc)6Z~T=QS^&m1y3JdDTg$1HYU2#2m%i$_ba1&Z0;m%D4R^+_K{ zH=AQnn=b_m$-IboPLF*~>`BACo-(d{PX|-$cYlkbWJ(rHp5O zxO{WQ)~xPG(~6KL(%$o-rynql;}ipAMTO08^(2F8J@%q7F&4l@g@Dm=lk>je|Bj`| z7jXq>QROz}gu3nj29~6jx}eA0w4Ms!B1XTw(IXbBKX#==2u;LebJ|rz$Q~WdvFmWUIDZwqN|3X-D?+Ihw5V zFdQB(QQD|N%>4-t>>-{mVm=Xhp;}|r>mHpH9!*Z1gsrw6!^WG|EcA^;h<;4t@gY>1K;gu=H6~4#x@@& zAm15-UQ5Rk1oL)=4ku2SohKn{>!E;Agp;U7PKyfTx1-Oyxf5F+7j4t{J$TSXui5bA z`NLdj47)4Ti=s#t!-$oVV)W5179Po3Y(~zqyry9C52w%$p7PoukpZ?{K`VTj*TI^k znX)xRiDgb0_%}Z6V;0At???yNc1ZQbtKa?1brVjhFlz~W1yB6KMM0n2HmhHcSEiU^< z%iLEy4(-o`j|Qw7bA7XjC%#E10cqn~w$9XUe@$PJh(=V z-sHBrOxblYwfM6Ri*^Uu_CRpx*mvEycJX@sxU|XX38uOW=;RA!hAy}$=+y6ZhiK|g zR;r$Cmc8f&YBzp|ciGtx*k_~iNd-b<@qSv%i9;A*;?Ysot}*D1fmneKP1EWnC&M_JrwPd$O**<}-eTwgDRHY9v9f{?lRNS^X9@)tFtP6Fu0Aw@~?bK=L3mi`}fJNm(X0EEl$r*(!DU- zp;$0I3mv7X2P*sl5*-UY_2y!QVOz##uW!m&wt}QAurat6xpvGNyPq57IVsO?4s;ZG zi0VbPP4BSdXRM@3P{1mw&myy6rlc>yO*IIhE{P%fyy8vZnc!ZXx6eJQ-C`!NhT}D4 zHxnG{rt9Rnv*>%hDZZty^(f@QkF05Lw0jz)=QD7}HLO_d@BZ-zZ%U2pD#N{^Q0m!^ zfxNvVdweY=(mC=kI%HL46{*$zE56bQu7lZ-FUH>+Nd%`0EIm}5tY@nDW57L5o9%2z zSgV;e-`m{=wyGApdy86Jg>Q|jI-hm!U2UXGau8KErL=_uNcGVPdqFz}G8bl%sH1oo znvUr4mETt+_L~kT2B7z+hpI~Kwr+2`u)qg{?BgUiTv3?@m^QpdPPrBphQeWuB8OE}Q*Pfkeq^u99_iD;k?Iy^b!q$uns&rlWvPxM&X%AR>K#x|^34YY>xn(h$JB=^ z(cHyS`rGlZFt{k@)%_l)h(%>$$g0gm!oHY$8oHrhdSZ-Vx~Awue3f`CtWlcO@;1=l zOaNxISfShS9o^6;6k_NVG1>VHPg_C+Cgo3~;%W*%)Nd68{7Klt8DFf(JzX{sGzo-j zbv{fpy}O-ZjaWjvySpo-qOGx>Zyh_7{~;GiN6+*cLe5VgVKGj4F*BCl+VPSI1cL!N z0wP|!`Q;(k6?;SE*d?AusK&&XBlNi3TqQoj*LrqKG=vTBZy)g;U;^v4cPm1vW$~{V z!OuPy$(r~)zEu2fM5pUmN-pEcnwv}Qa(GSqa{^%aCARL6MgE0lpPQp)=Zk0{L}}pn zQHxfnEmygW%76TcV zd5}%Mmzr8n$eg2T8HCp-MckJ-*(LGfj|g4Zy)^e*mpI@V3E!B8Er_;8a4QB4S41FRE zIQE+0-?77dYQxKqeDrC~a@v&O;NWQ9&Hze_${lwX>JWjd*{u=A>i(0p9$nPX0rOOY z&#Q|tc>$*h475(}p#1x*a*QRo>shY~XqYP3lRh&kH!5wVI+(vtc0XU?qBG(!0;C9hjy zjGC&XAa-WfMkr<^7(@~-X)4jHoIiz+12fK#r<-#6u0=I+-;ShFF;d=HT8UrPmzwK0 z615PC&*w?^KB#Q?2?cJH!+NHbdnd~c*HR&)KVF)&r#D2d)JZ{+4~9+Z{)&j1BYuJK%2e>%d<`R@0f`)3JN`i`}vli`e?3XPQ8ZpYfLUY?CfZ*+&4iQ zm0E+$ylY}F;)onB$3h5XJaIp(IrbTu#&!VVxt;8$we5Y|DrmHa$VM}C(9uJevMcOg zKaiHorXeK8L|jnOOG$iz)f0Qv+J3R|z*T9O+Pa{vl`=r_5zY8+zo9~3=Z?_kn`n@Z z%t8eVQ{i%fX5tG9PLcBYg{<|AvFPJ_f0RD*I(Knm7jSh-^@A6EcB^~unh;i?&K|+6 z+^Es@*g!J~%PzI>lH7f+pQOsvh(JWhADxD0Pb6{R!h+rVvPM4ro)Ye!SPc4|Bw&q& zCVC%Ipua+{swkK&SDZD8evyj7>)sWXt~^J(dttryrxqj}BT~$17;u4F1T*#xdK)8L zfwi!%C+6@dsA>s&^!CMiF&u*Qona{gNISgRi@FH`%+>mx!TS2d->>@^l z>vNJhm-f0!h7dU4)+|3BW?t_5d^oCge>q_|cQn$52|e%HXE{w{(`386PNY@ZPHl0y z-MV1)yxzle=Tj^LqbLh@yoPUadH10QtIo@9Q4@dlL%Ow0>)lhBcB>O9ubwkItwL+~ zOtIdGIKb3D@6YLZ?S(w@nUVs>JeQt1-aqu^X%CKFL53RA4B$DQj{0NgcOHgbxT0NN ztS=o0#v}PGF%If5rOTP+hR5cg#C@l526kX_3&DPp@KF0+7<>K(-&rkReC<1&A{^g) z@$Vs{9;@(urV?k()OxpT(!Bl4VHxD+x5Pwk?OEC_wlcD381Gy zUDU6DTwy?{6JM15N&9D-B@Pt0t~Dhpl?AK$bXCR7?%q4(yZt)W2op6CBt)i7Cc|4s zIO*Ik2kzOs%PqoKVPw6LNXFS^K zq8%|gnH7caB%Cc3c8(@3zv_@$ZZ(^hLVnUCx*h{bc~T{Jn?R+tfJnoXZI{D&b~`=x zRHd%8m`F)UZFq46QmF?P;nKBwc2jAz62+nI>$Vqg#y7UgjFU-aade7OMIQfHaj)5* zN?o71hGl5l6oo_4L^AS%(en%xX;uV|q%F$AfL1k0vr;Sgo=!fi-dEaxu?1!wmg7Xk z(V!Q!xr10=enQy6@q{ST4RV%JByL;{GjH1O&o3$%Wh~~6{eC6xLB}Tp3Khz6QSfJT z`MdlF7LzX`THkj)t&oU{qY0$j z>_JR>A&ThR0f{p!w;%L2i^d^hC zC(aYxH`A52w6&ZneD#`$hfeU-N)K_5=Oh6oDlY$~rQU@x8r~!a;9}9u|Bjz4ch*kU zy(@V+&8yJwOt5C{ln>f4KZoDpJp2>P_fuRq!Nza}1Ha9omC*b2dYgp| zPB7W$iuynxFcOqsyQ}B}qo$!z(a_KUl7o`@@$U{G6%-zGHX5)h3i<*bIJEiLQr@*s z{^ViEELme|1qe01FdGhA-k*-S;=6Otug))coCd}MgOyxGQkxQPoe3g1JgZBy13)wHPJ-@3JD0?zU``58#;(W^e6k6 zB=dYusT^qHBFcYtFjfCqSc;7Qn*+1pY2N{Bo%0;S;w4cim4&nX#&x#_?S|X3Paw%1MVD*=d3a@3u|W8H>}z}OR_H~jN`Yo2cg*sPS?2AB^C?Q-1fTw(JKxhFW}bc{O${y$c&JGWsrL zER!=8EgSu(W0yh2sQ$?K3xBS5+>kXHoiw-2g2w*ePway0GbdwO*fmoR?nFTA%> zPJ3bT)UUv6AgL_#KJvmYgS$!^jP_6i8mJa}9viJ-;^N=@LweX1V2Olual4!CLC3&E zo~E1`;<8g~Ga#GKt`*<*Lm)bn-Ok7nShu}xC!Gq$$Ic?pTUaT0KKMMp$oj%is8~HP zJl5RMBU7rVG`MAw4@rPWAv@tbfA%k}Oa*QGATNK3!bB$r8Zzt8k&DZQ|OxV4Gkkv{{OX;Q5O8*Qv2 z6j_UL?)I5A##bD&BOj@#s4!99%KR1{%MlLCN>R{m1B8ncU?q` zV6&V&=*jCe9(`)N&SpC_NdelnT5I?B-T6MO#7aN~t72_2S=!RJ@RGhZ?n^J8KoSCJ zV>To}`gk*JPQ-X%_wWJz^K(>E-z}0(ZJmXg%O=hj-ePl=Hh01`rI+-pgNq1Bk`!1~ zK5^s#XQ$EM!@CMC{h`>dM=>y5>r^#3sE{_@_i^}^+lc7!{h zw*>!=Kc`0%U4U#F%=%gf#&UTR!z%+%|MN9}qqnA#K)O4xQ=$XG1qNB`%#O-zj8=D9 z4xe)iJxz~tIn1YZ3b#$=Yh&S#WsZ_S^m=>E%Om&^W&-s4Lmz!Z$wbo5z{G$@8EuA* zMBbivmm?mEaru-mVYz6f`Zr#&a^?SjxgHTpA9(FCRqNPS#FbkB4wue7bBOxKVGmF4TJ&rPT?Q!C5sTzBGlL@Be}!K{l;hEQn6?WZe zI$GPP({%r`MpA6;;PIpY?y?S$noD!hRnVvWwNoC=WRFsA00rZ2YlE7Esxt4?aA6h-wp2 z;Wz-&3OB}@N#~cdx^(o+mS?p%*o$t>7eC(n-kgmJo!(#WldZJt+c>R}Vf z!bf)Y?-7wlpNv85k%2^sYP03=c1tP#Hguoc(+xn5A#041bUbIWTkJ=_h} z3e$FfQ5kK5LX12oQ&RI3^jLdLW@M~N?>gnJn}2Y`3HkrRh~m4nm@p{<=4^1Q7l#Is z5}mBGrhokUW`3tTvq1mE0WsipH8gO&yuAK>UEqJ>Qea?U_=n-SxO*2O20(HDfNa!r?6s`O2*DBs$^ct; zJ_(Q?lWG5ab_rr>0f9zr;ZVNseH+00)c$YCZ0evy<>SJ_LWOQq)xF6b-r2*GR*EF> z6kxF4_>;**P@MBH=%r++l6-uq{SS}4QA=})^7~B^b@Lcm=8=hBO~6YY6$M%N=(#b6duI$&nK(er_QMsSP zeNyTOw0e*KLyZtV0@VTrvAkY^Mef>C{@dR*@3i67Uluj4)VEko@DYMO1^!FAJsUT+ z7u%l*G*&VAGA8JG$!mr`95WounyoLFeVu>&qjJ*ug7RD=k)_t0TwW zR3$&6YpJwOZR|2mIUUoD+RLp5@yx>V^WwQL52$g8CbcVdrPNdpMQC1&k5Bh`c^tD7hIzZOfstBc zDS!YlOvN-C&P~U{)+?Gld4AiK|T38@aQ{%Kf{k=P0z8y8} zgI;_s@h35v!auV)LL05M`twu7T}a9`l4Is14^&q?4>RvKInzfVr_+1ZWJd``P#|0v zV3|5So?G+5WXa_}{)8sjjN>MDM|CUvp1S$%BTrA9xXDnlL*wUi4g1r(4XEQ^&6isX z(&{icZ{olWzNF-&brU0PToOTdDrWxvL7?JB^lxfc39t#HCbmh#URqqPhzJeBiE@9E%ooz%_$mGdW%wClEh#@;V;=Xw7As<}Ktox@E z^zm<%u5^1@j{Lh&zMr~E-Zy-4p;rgB{wq4YQ}{;fXZH)$_Cx~iR?>j1%}|wkWNiXv zZ~U&}jkyog{ne3NH5@wCNA8HZmh$j6n&+=^4jtapjoO?U-1cHRHXH|#oeev;li!tD zi*9=})uJl`4X+{Q;{LBe5OR8cpcSsqpL}cJm#xKA5>oT?F-a@y|#E3h_sy$%Ar1xeUJ64lV~C6 zU&||qIyO@AN_6}-h~}B&Ty`_9lRQR$sFHWNd#So(aM1JDy|lY-hg7uJRx+OT2ia~^ z&F8=EI50i0?LDC@sL*sR2mehkGM|Hyp-|{J-bvS(BxFU#;PZQskc2#|9|G#eOI3F7 zd)l1A2hqvbKi!|am#^3TghbpJ$bjlTP~)0Q2@^&38B_{1@_L;AF2Pp2CGY1w1Gfp0 z5yGRd$Pv8ACm=h(D@#3jqBWmBmUN;>HlS8)s_Ce z9;KCdI#-Y-qkCjPj?ZswZ)*vGy{|t}D;9Z@KLS(`igDqS#`&b{&~j?$&myyvHEij; z_-hrv^TQpyWEQ7Cl_-l=FxD5#!|%#jE`!={Q4)WA%jJLmuA1J|j89}+(slAb0B}!l zaafA|636jwe3W1X-cB~(k0#5?fq`yzAujv59K@5hFx&<)&t(plu1m2TZz!i7W4gP( z_u09)rpf&ic2ctQaKC9fyY1^|i>Kz7zx4Gs2Dy(3NXM;bIwBd@2tD6u^Rql}Y~Kwh*i9&=o?nH~iKQ;bzSRFII>nxiXXw?!KMO|9Y zQ=7|Nzmx>S`I#>4yBIEME~3)!^H|>XzAq?7TDURxE}JbEo)5tUN#G`7B~=wwFUNb{ zF;6JJL&u?5iUj5vLa@;7Ewo=#(Q*VnRdv5m<0b7e`mijf1~u`_GOI5j<_H|;k66Q& zp{N1HU3Pja>7NfzADoXo0?p;g4+c|xJ48U21D2JJ`AIlhPN&ZfG#0m{5VpPbPqMcuhc1YPs% ze|_8fnVM_)IOJ85EiZXw(SA9F$Q4_i_iL6~F)mPa1cqnWi#W4dOuoNT%&GE(_T+Wi zC}*8)T{ERfIb610TKd1*JI|=5wsujww+f@2-7EF3JUL}g+&QOC->>XTg-~#`FxxG%Ar*_{nr$k5X z4DH;3w;cyF2KE4gM1=?%E596DUHOzJI%eawIu5$bfwVsJUi@e-ZT2E}<5+sR1Uu30 z{78~d*PUTa(4!1S(bs=ptu<%Ews?HC4H<&NeP#Q2$K*z$*y7fr*whb>BCSL`cB&^v zbb;4IW3c~WGVLeb1-`AR5mswD6HCFmt*Ih#nBUsxVsf$iT_%@h$~cv#otkUt*#Vmr zu*<^;8|H35vzJH}%rMZCOZlyXpi=;|+V<(KwOCOv9}+e=((b+g82Q|W@?>kW@CEXT z-50J^(FT_iAg|#Wgg&H4rKZN|M-`Y!-+-!GyMJ)BKndAwSA?(nFu1W8OUEwCn-xJq z|6G#mqje{%3~y5S^Qg}~DqE0ZTfYFQh{)PwV)_ZV-ld7uuE zoZN3IHZ{gx3!gn-FED-&TO7>4Lmc*8pCJFaNL|hA@y|;1(M0q>0A}4LK0X_{hR`i?ZyxGF>#ZLk zBSnMeZ&9zefS@PAU#%obpk3a$J@hG^+|jED5{1y~d8mwX9Bo(7uDQ|D&Kv2^gs-u6n0*d{axwoQS1nVV0-5ZGS2!e0R^3_AcM}%IQ+O= z4l8w|)|T=c<|f^$VcE!m(IX>BHcApuMj4^g3-aKIUKwB_J#YNg;!Bmh82l$-ag@ofBguxTZO{?;;v zqswCidTldgE=Ky73`X{tRaMqldbibh1cx0a6Cd!IHYPSKUEK-Rl?(WFLhG}2zk8@1 z-8OAyjVDuZ-@W|tD!5arw*Md@AxYQtb2tYgcx}Tf4cjG&bp&xS==k^^(+#Ws;L6tUbC%YevdZQtvw=sPxxRn<$U|Ak6re0| z^ZtZke!EtI2--&9d0MBbO51^&6h71X#2H>=#N+iJt<_+snzd|QA5mZm*NI`TX> zASJ~~atdhatMU4qlJj2o$YgupTn2^YQbi040 z!?!Mrh9{g9Uo&8cpp`x?0nA*J7LPdZlAXK7z2Ju#Y_UxJ+i(Sxk5$0%P6py^2|ac& zbVL$x-AgzR#XJZ&!o>xgV?~%@zicxn#@N}UvwE!ALi-4)$1YQE-`hBvH&;k7D|?V( zNi($YrHymm4|r98@oT16pw-l36%6d{czE4f`x8S2XSqMrbS88m+?` zNV@lI@4H*meh48@d+yPg+&QINz>^$B2-B?hYoxhgNB7|E7#QxvEqdAhx^lN{-|Whs z7-X};%G|QAd*w6sa(%?AGX~x!;RPRl_xWYO#5p0L+8VkKD&} z`MYA?z8Qg5kYAF?WY6t4Wks^I=BYC`M&28h3R&wRw}j`}#^!Y1rUCV|`79v$uiN4w z9}x|+l@||)>Fa(eb+|J5o;42y{2n0#T!*n4qCv}RT6^q;rZj%uP9F`$$D$346c=a3 z`OMox1tEN&hX1m%J{{d?+%5zo1b|352VCKt8!!mv7?w?Ahq7_=Cl~6qiyc%svyvrd z(z?BUAOAd=x9=Gr9BHxCw0};%B>k!D|5L2r)r8EdJgQ()%cRbaL^L=D<>Iq2Hh3Xo z6Yp3HLK3Kf!ZNOIWMB1a@wLY(0KZ-fNl@2=DJ6NYTU4>B;e%NB z?gzDQ3#k~G6HjHy4eLWe&yuVh9ms;VeDJB0ND>2dekMt}%D|$J#1&P>5}*dtmc$3& z8B#9Pm7|jZvnGwohHb|wWao8cjuzCt(B@T~zLXIyK?SuQY$CLC@DFuJ6(X=>j6-o_ zO9SBsW01Z<5zd7xMhp4~jRHF?go)V3C`u`e0J<9Po-GAtyoqPl@OT>D)BH;%iXsjt zS*Xj@Hm>JdzAB?^LUk6`Mlt#0(PDpr{~+7a5?SE<4WLYxX*G zuZ;s_vyI{QFIQSl{^sAG)i)rm9!ugN&vP+6iBuvL>i0^5|Nh36KXW0h;f2@EL~PIV zY*9glq<5Yj4&Q%Lfc%gaz_z@k>`|w!N(}aFr;w}>pXzU#(vaFnfsXO9TwN0##Uxz& z=OIx{BUgl{T}jy^#qb5SIX})nd&$O&$K+ru$YjR{`f^r(tqC;OS4XW(SZi|HOQF?d zPbr`8x1Q8jY9*Shh*3f=@uk(8BeXze(SpxHz#8+}`bcor1BNZ(mE-MKOHCv+y0Y;s z@`16c7;@1GhW$MD_?>)Bl=kBJf$?np{?MA|7-XkP{_{_m@0NIxQqr4%6FiDo>f+UC zjt6Pvv8!GI`q9uvk>(LWYK6I00$o9^jWF)E(}3%@R=mKPRlm1|QH81AgalM*pkI?K zd5^;fwx`SWq5Ny=$Ja^gF{?j?8Bv_{K2a$2AKJD05wUL5M~Y}g)%%6Ax)3N6KmES1 z2`Q3i<*TGTs&wgNj2@kK|AmW`0E1u-p0QVa1AkGdTt7xdapC_)lt z+s`(c`f{NJajjBm9@3fFbv{DfP$MI^@PZQJ<;PpN1VbB}uUg7Gurc54<*K+B__%Y_inho{kIk zw;iK{rucIkV4hj&Z<43;eA92gk*f?mQx%YMVVqHlB)3mDbO|ao8+ZTl(1z}KzC)U* zo%Xgp$DE7l*x8a8sr)M`V_7VvI@y+H4ISsEiqH+h7!Mhe=@aYK_$1Rb%iSmB<~48A zcc-clF&C4^F2EEQN&KV0KQ0#(cw#7f(t`v+7wKBhR-O3F>qC>1?-!VBZ`Hdi%Ui~= zSUWXB>%7;szLf}dVD{yo#8{o|9)HZ`%#1(bk{?t{*axM_8p z0ype-8od3872biP<~1rWI1jNnTSw>t+SqH`$-$I)*!0V1L-%M!U$03#XqiTT?+8}t z`@l4mUTrH~a@uuvK~(!{GIS^VrLJrcW6l$A@a6$q1>CGsyhB@4Z zBfgfDEdMIbvzhhZPsmPGS;S8+E9&YpHG4gI3q0f=V+%fq$PalLqL+k=*UQMQNOo3# zC8IYI($c2cL0de>TZ=jEHzPgIC;T_(D^I@gTtW}4f~RANSti1K7IE=4P$1APM79u2 znDe9-Gf!k_51NRn@lmqrQ*eUJbOC;0MT1eM9qTj+7Y$kk z)>|9>?x^u*9bQ>OH@mY?qGP!oYa_TxmqT8VPUk)vp(mg39YZ})nKj^G6);%qv&hEF zMlu&`KoOUelNvGReIray;X0WsHz?7xV>BNqqf9->(j#;LlT+z_&^Q@k5REESv89k* z)Y&LgT4?sBdt%2O7D)_rhCqTz_F8gyg?xi8L034r^>d2K9rjvHM;M(wM=y~1Y$zba z-wY&ImBHKJ`|q`fU0VjrF9qSmuTKYSE9BJ;`P*Jyfe1)w`{!XXw4U7q0hee!Msd7} zKGkIw`e-rm++)(v_+U6m4?09*jP2WoA0mfm=19^ME|)C?nh&0?#sWmnLe~(yO?Qmh z;_&4H+r;R=%AWro8m*_W5&0``yiv);wPklSM>j$sSZ{9eBs!{Jo-HD+WcRuL%l>(~ zAC0R8qK%g!*M(J$p*7$2DFZ@AVD9?*1S?S5xmfoZ43*=L$4OLrvN2eJ_PY!q^i01+mCN?Y0Jh|qhrzKLo9`Xr(v|RB{y$WQnBg3(3q$b;!}_gxp9xC zB7a`9v-^usFu%Qh@5I<>pVP%u463s?I=t!kECZc5M7FT+!^V`%Ug4+yFG8Tu-3Zu4 zh8uw5-2{vjBw^`PT-5OFWFGqHqfUM@3XM{v zeZ%~a#dHoz$-*4$XQ4gU?e)09C6hCfgl>>SaSbPTO{yPA|_3M zE0hIwWHd5-W$p%$n=&@z+$%@2%x!Lu9hia{)pI;wMSGzU!U33`g0FAx< zdzM|f#;uAkW)Z3Gu6VvK>xsT^WaP^&`bP4@TpeJtG60)fn>7mjtpCUqX43PBIhv{> zijpUeTrkEq4Fw%6TyqgJZMWH=8mHIIc3^Ie!xYIA5X-+mF5S))>{2c&zX!ELt{1sYwO&PQ!fWu+SJunAwxzKyb`Fy>3l$0Fw3 zV8TkRMlo#nkwfjy?IZh-DuNU$Nj$2?hSsE zpJ!3}wH`!Cqf$u;#d%|wf*mMRNEhc`M$J(+?LU=iRrN=3%E)0r+0x_s@8t&RNp;)(s@vsEI5EZ=9bv z56*^C9!-B1#(&!jI9x{zXEeMuwh9c3WDW=&wP;DmF=)XH*ujOMHl+4N_G=p(2Wa*QQ0_U966-5$mJD>gqeU^bbvyBvO;f=WH&N3Lg*iKYnZjtbm<=R)rL- z>N`(A^cj8Jty+~Y^KH7iIN% zDA%^^7B(#f5wfmR!t`jH2IMoz0SY+mU3)U~K@LWFB1#!$N)FFddMtc@ zO(D%vWoDHQ0n&OJEY7LK#J#68T1he;$@D#?w_)yZh zrm~TEhdbej(g;(*mYn@;LgSOsB>~81LAu=3-Ys5B1~(Xg`+i@w^HvLRC!1{*-|_n zd{$NX;%I7vN}Krk$}C?TM?zA{GuEOrO&{(7Z0Nze9$JEcRmbcXj* z+mNd9Ra({_EDF|C_SG3Su#~XfTyEL?z69-|2zNb;wq7Mi4h8X>B`_0LL1ySdEj5;i zoICdR9QSEx5H`O&s0GcR?fTUbWii`u`i{J3YVWe82d9o)XC`X=?IQDrO#_B8XZbP^ zWU=+U!$@K&@V5bG@J+T=J3chaEo(66RDRfeKX|CQKnnbKR-AiMBbZV`?$#Y;RSGOn zTeG5JNhio%TE|?hpcFRhlNZ>})S!b|jATY5$AZ6<+;>Jr#?i_@W(kr?Pa%`nCJf`o z+;+m@v2nimuMQd-BaeiIDX6l1z1R?tfDsw^HH%ulHP=C zf`^2?Lz@}ug;;!9gc0(a*M70;2%4xckNhzz8=dDcYCrRxBzdjEw*T!FP(+>LF2S#f zYBmf8JUIB+KV@*yfbK>Z3eA>I&Q440ahyKx<+zkfr*Ku<``I@I{Myk}dTA`Z7aU2l z-g)y$QgZfiHBfW!%^T9O>m{u@G3Ae?#wlT4gD!+&L}#tk9A(qhuU16xq>PIC9+beX ze6q(*@mbW^w8-7A2kFC93dhf@6)h?7b0*;(p$p3x7e2mIb0&Z1>u#%F`P{r!Wi_wTM^{WSEnY|)u1Yi{!z zc|nnh>B%3QIxlW}Mj3@myI#1jO$@RZYbq0v(O31ht9(`i7}Aa-ztw6!z9Cjx;?+80 ziShx=TpmQ&cT)%`3!wqGioBGmby#V|nY7=yZo@&eMf(Cz7qw*9m&qbJy=UT$H9Fb} zlMHx2ep=E)q*g?!An()cwMu@v@aBt)47ZL~eE1gda@-_hXTMd&+Z`abYta0APY2%K z1{7TcZ^n1=Sv6;>DqIiiDO~h_qX6s!FwyTKqK?x|Y@X{Q;FZ;)i-RF&0G`*-|E6Bd zObDc44hkxal(akHXhd{klp~4JSA_fPEvHM%NU}xL$t?|yJ3E$wV+$|!DbNdK9o@AT z>0b!v-T>MWlX*_+7=srS`30=ne2i=$W)2X=22#)AImHZ4iMElpa^%B)u+0iklxt$- zFXG3~hSCp5v@`2ptG2x1H%ZAF0=D;{E?HIETykv`Sq>w zxutJAR*=I*nf*WSrH4j`JkaLNpVe$}au?)Sh~RRITRY0zLa4L6IhG(y$&YMvEI;xX zo#ocv)wlfFKo9)gv=|Wknz)b&&=N#|5dkx@xq(;qeX&^@*Fk}I-i3;}EoMgpLpR}m z+em4OQ^=quQm4VA{}Bxp>craC9f&A4;RlDlTAViwJT&<6-S?~-)p#{q_G-RLUXzH3 z(d)Sz5dAhqxbo{75>it&l%7As{7%#tk#ZP>WqWn^i~uQ=N)=`^t;btKj6U;HBHs-( zHSdnsIng|36&@UV%oQe1!f=xiSqH=SN;*z8GhLE>r57~2dhu_-z)RAuPYws-_AeLa z)mam^ROdElZG$0WnM1>Q5X!k#SV5Z50|sMC_+)N^t-9w<$;!*&>x9VtjwB8ahBF&W zBEn<3zHwxP(B3BU)pOqdBr>_qV>(3i{>b6(Z+A;L&9t}A6IYYra7$n-vr$zhf=N15 zxKRCjP40kaoI&34R)H#MC0R^DXFu^g1`-I>>ZK{bpOPw8QJ&;}PJ`M}4!E-ut=2I0a`= zXvN*RK3y-qAI{sbLQ6oGL09W!66vFW51(Yy3O>MTalomXlf zGCRS6TQ7`iLt)soqwx*V0S%p^jrgvfyVO;$7f;20eaqqS46^TPZIXgey3C1Lj~7^F zh$_(JE$RJO*U3OYA8p6PWI+37KCp;w9*-Lh}Kv~-|KPP`mDk>h{IT&1N=A3kAE{|cqHHFQ8M^B2eNGlJy8QdQd zaCT*0ZgO_d=(T6WNBLY~b+S+SsFhso*!so^gGsjWQwTCPTPz4jji6QJpAy29^O`ou zKUJzulaKuEF#pv7s&W33x&2hW{mhRv!6N(SznJ9c-uhf##or{c+g*9zqNun?xw@!| zbdeIoEW(K|*y2`}7jtl%NV2HDH;f2BS?Zv?xT6KyB&l_LMw?Wek#xrA;>qrf*`K<^ zDB(_VcNePZ`lxqp$`-Q1dhtG}rMlB!#krReR~yA97gXFYm0 z6SQ*!NY#nAx|%brJQsomz*qP?6i6-9D3jxS?d`BgmVpx6*aE8!f{TM*2U*<2TseOO z5X&*3^|B_E#~s|ei@gUW4r>H|FIV;aj>fcN4~vu43R|yM(!^d(MXcCzL2)x&B3J!N z<>`lXr?LmPVzAwf@+{}#PQwxNDFHIu4MZ0OMsGvZi5+?lbhWRqXpG8DZYsil_IU>$ z(?jo|fv7TFagO4CJ;~W#&b06H$~7D0_OJP`qS*GUw;7(P1{Ee`Sv5 zXI5=TFwx=e%h9VIFEepB74A*@nbw=M@R|LT{#9W&EfXAs#?I7bW(!rekZczU)a zsdxt++VwCNy(1mC!_9;NtPcSAP0MH)STe`E~PEn3A6UC8D@J|V!itH zIOy(R&Ir=xXGDlXyyE5Bt*H$fed;pjfb>+=*J@8Ny}c^k-~-O@1)4WsJ2+GY%=`^N zaKM^P{I>AlK?*uq6KtTy)Dx%as_FcE9SM(9!_{7Ag`F>?r6}>uwbdEgi zwl+^3gRMd=Zdo6G~O|OGxINQTj z=*3@ayn#>xIRo}1rJ%tBYX;8zH9Ipv@9tsq7NbQI-yp#bc>4_lK8 zBiqyHxXgM!XZ1pyv@y)(C22}^P0wCw{Hk5A>#N>~+5@35wDp9@cX z3gr2z`ML11X=@&;t;Tj^6b37|Xld@Sa~SZhfsy#Sms0Z1NOp4K@z3@Q0!^E;Pl>2c zfh6^*a#MA%J5QOG&1c9YD=Y>+@==|KkB^<6$iTWtcoWDh3DyqgwDO?hHLB>9&~`?$ z^6=+4i}q!b;KGHY890gZ$tz}eP<7K*s-eK-@8T(d>uYK{N|(L2wJTx=tFo2zUb?Jy zcu+b{etB?eB_8YK>KC;ilzr1s*|af2)yU{E$<{QRxO7h@X2>KbOG}E8Yl|d4At}r- zTT4kZywMz&2E9~L%l75uI&~bZE>zQB`*QuevS3CqHCUyQPQ z0~?>?l9*S+6Ss>(ql3J zhyR2JGE}y#&_4lUMAVhbI4)*%ta@%iK`El|_t}=j1`f4{{;}bTUMXIBMCsX(anD|h zlr#2M;Z=}}@5SNu_%OpGY5{cE=^`e3$gPx~)OP!=#NNPiFHLTt*Ww(=>r(Fi#i%51 z)_XCJ*R?%oqf#MjOdgjW@VyMq8mtW9&~|zG0J93fZ5x1|sK)=kz)l@GCOF_-o&zbZ|R*?5IzK23(1F1Zxs5+ zSpt7wmGvHc*sQ7*|M*4^f0{s!3|E`=8W3X(en;@grwG7u zf71c7IY7A^ObT$cEq^%d=p}!&;B~;C9tCb{|ImLsT_@kgehEx-k0DDZsmyKZi%60j z17&w_XLn!Equ63U;Ty4k(F!m-{7?xNUm8mVR5IeA;T+-@Y{3eD)L#vP{|QIeq&eSB z`Fb}H?fZsq%@sdfIWi_1<^!%UB%!`{d z^&i0(SJUbL$TZiMklq#`pM9OKVxVDbED!_L<-;9cKK_3g-UNQr)OU`VfB_M(BL2}s z;v)a$H;e`BegM_{A4iP^FmXk>LjgnPIP)KCIJ~I6@D`$fF~Viy(zA>*r{}e$DxBve0B2@!zxWG)BEGN(cx$;- z`-J%Tw*d5AQ@+*vPZN&>SEWb+J>>iMcUKR6PgdL1{yF_WJ){?&j>G?#`qKY(>*jwa urd9rjFZKUl@V`{D|62;$|M$D}QsEv~T)34-to04x&{Wk`seEc3`hNgT)V~%0 literal 0 HcmV?d00001 diff --git a/submissions/vansh-singhal/level6/factory_capacity.csv b/submissions/vansh-singhal/level6/factory_capacity.csv new file mode 100644 index 000000000..795ff52f0 --- /dev/null +++ b/submissions/vansh-singhal/level6/factory_capacity.csv @@ -0,0 +1,9 @@ +week,own_staff_count,hired_staff_count,own_hours,hired_hours,overtime_hours,total_capacity,total_planned,deficit +w1,10,2,400,80,0,480,612,-132 +w2,10,2,400,80,40,520,645,-125 +w3,10,2,400,80,0,480,398,82 +w4,10,2,400,80,20,500,550,-50 +w5,10,2,400,80,30,510,480,30 +w6,9,2,360,80,0,440,520,-80 +w7,10,2,400,80,40,520,600,-80 +w8,10,2,400,80,20,500,470,30 \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/factory_production.csv b/submissions/vansh-singhal/level6/factory_production.csv new file mode 100644 index 000000000..ca6ce43e1 --- /dev/null +++ b/submissions/vansh-singhal/level6/factory_production.csv @@ -0,0 +1,69 @@ +project_id,project_number,project_name,product_type,unit,quantity,unit_factor,station_code,station_name,etapp,bop,week,planned_hours,actual_hours,completed_units +P01,4501,Stålverket Borås,IQB,meter,600,1.77,011,FS IQB,ET1,BOP1,w1,48.0,45.2,28 +P01,4501,Stålverket Borås,IQB,meter,600,1.77,012,Förmontering IQB,ET1,BOP1,w1,32.0,35.5,25 +P01,4501,Stålverket Borås,IQB,meter,600,1.77,013,Montering IQB,ET1,BOP1,w1,28.0,26.0,22 +P01,4501,Stålverket Borås,IQB,meter,600,1.77,014,Svets o montage IQB,ET1,BOP1,w1,35.0,38.2,20 +P01,4501,Stålverket Borås,SB,styck,40,4.0,018,SB B/F-hall,ET1,BOP1,w1,16.0,14.5,4 +P01,4501,Stålverket Borås,SP,styck,180,2.0,019,SP B/F-hall,ET1,BOP1,w1,12.0,13.0,7 +P01,4501,Stålverket Borås,IQB,meter,600,1.77,011,FS IQB,ET1,BOP1,w2,48.0,50.0,32 +P01,4501,Stålverket Borås,IQB,meter,600,1.77,012,Förmontering IQB,ET1,BOP1,w2,32.0,30.0,28 +P01,4501,Stålverket Borås,IQP,styck,90,2.80,015,Montering IQP,ET1,BOP2,w2,25.0,28.0,9 +P01,4501,Stålverket Borås,SR,styck,8,45.0,021,SR B/F-hall,ET1,BOP2,w2,40.0,42.0,1 +P02,4502,Kontorshus Mölndal,IQB,meter,350,1.50,011,FS IQB,ET1,BOP1,w1,30.0,28.0,20 +P02,4502,Kontorshus Mölndal,IQB,meter,350,1.50,012,Förmontering IQB,ET1,BOP1,w1,22.0,24.5,18 +P02,4502,Kontorshus Mölndal,IQB,meter,350,1.50,013,Montering IQB,ET1,BOP1,w1,18.0,17.0,16 +P02,4502,Kontorshus Mölndal,IQP,styck,70,2.70,015,Montering IQP,ET1,BOP1,w1,19.0,21.0,7 +P02,4502,Kontorshus Mölndal,SD,styck,30,3.00,018,SB B/F-hall,ET1,BOP1,w1,9.0,8.5,3 +P02,4502,Kontorshus Mölndal,IQB,meter,350,1.50,011,FS IQB,ET1,BOP1,w2,30.0,32.0,24 +P02,4502,Kontorshus Mölndal,IQB,meter,350,1.50,014,Svets o montage IQB,ET1,BOP1,w2,25.0,23.0,20 +P02,4502,Kontorshus Mölndal,SP,styck,120,1.75,019,SP B/F-hall,ET1,BOP2,w2,14.0,15.5,8 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,011,FS IQB,ET1,BOP1,w1,72.0,70.0,40 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,012,Förmontering IQB,ET1,BOP1,w1,48.0,52.0,35 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,013,Montering IQB,ET1,BOP1,w1,38.0,36.5,30 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,014,Svets o montage IQB,ET1,BOP1,w1,42.0,48.0,28 +P03,4503,Lagerhall Jönköping,SB,styck,60,6.00,018,SB B/F-hall,ET1,BOP1,w1,36.0,38.0,6 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,011,FS IQB,ET1,BOP1,w2,72.0,75.0,45 +P03,4503,Lagerhall Jönköping,IQP,styck,110,2.90,015,Montering IQP,ET1,BOP2,w2,32.0,30.0,11 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,016,Gjutning,ET1,BOP2,w2,28.0,35.0,8 +P03,4503,Lagerhall Jönköping,IQB,meter,900,1.89,017,Målning,ET1,BOP2,w3,24.0,22.0,20 +P04,4504,Parkering Helsingborg,IQB,meter,450,1.65,011,FS IQB,ET1,BOP1,w1,38.0,36.0,24 +P04,4504,Parkering Helsingborg,IQB,meter,450,1.65,012,Förmontering IQB,ET1,BOP1,w1,25.0,27.0,20 +P04,4504,Parkering Helsingborg,IQB,meter,450,1.65,013,Montering IQB,ET1,BOP1,w1,20.0,19.0,18 +P04,4504,Parkering Helsingborg,IQP,styck,55,2.85,015,Montering IQP,ET1,BOP1,w1,16.0,18.0,6 +P04,4504,Parkering Helsingborg,SB,styck,25,7.50,018,SB B/F-hall,ET1,BOP1,w1,19.0,22.0,3 +P04,4504,Parkering Helsingborg,IQB,meter,450,1.65,011,FS IQB,ET1,BOP1,w2,38.0,40.0,28 +P04,4504,Parkering Helsingborg,SP,styck,100,2.00,019,SP B/F-hall,ET1,BOP2,w2,12.0,11.0,6 +P04,4504,Parkering Helsingborg,SR,styck,12,120.0,021,SR B/F-hall,ET1,BOP2,w2,60.0,65.0,1 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,011,FS IQB,ET2,BOP3,w1,95.0,90.0,50 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,012,Förmontering IQB,ET2,BOP3,w1,65.0,68.0,42 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,013,Montering IQB,ET2,BOP3,w1,50.0,48.0,38 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,014,Svets o montage IQB,ET2,BOP3,w1,58.0,62.0,35 +P05,4505,Sjukhus Linköping ET2,IQP,styck,150,2.88,015,Montering IQP,ET2,BOP3,w1,30.0,33.0,10 +P05,4505,Sjukhus Linköping ET2,SB,styck,50,5.00,018,SB B/F-hall,ET2,BOP3,w1,25.0,28.0,5 +P05,4505,Sjukhus Linköping ET2,SD,styck,45,2.75,018,SB B/F-hall,ET2,BOP3,w1,12.0,11.5,4 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,011,FS IQB,ET2,BOP3,w2,95.0,98.0,55 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,016,Gjutning,ET2,BOP3,w2,35.0,40.0,12 +P05,4505,Sjukhus Linköping ET2,IQB,meter,1200,1.85,017,Målning,ET2,BOP3,w2,28.0,26.0,25 +P05,4505,Sjukhus Linköping ET2,SR,styck,20,274.0,021,SR B/F-hall,ET2,BOP3,w3,120.0,115.0,2 +P06,4506,Skola Uppsala,IQB,meter,500,1.60,011,FS IQB,ET1,BOP1,w2,40.0,38.0,26 +P06,4506,Skola Uppsala,IQB,meter,500,1.60,012,Förmontering IQB,ET1,BOP1,w2,28.0,30.0,22 +P06,4506,Skola Uppsala,IQB,meter,500,1.60,013,Montering IQB,ET1,BOP1,w2,22.0,20.0,18 +P06,4506,Skola Uppsala,IQP,styck,80,2.75,015,Montering IQP,ET1,BOP1,w2,22.0,24.0,8 +P06,4506,Skola Uppsala,SB,styck,35,4.50,018,SB B/F-hall,ET1,BOP1,w2,16.0,18.0,4 +P06,4506,Skola Uppsala,SP,styck,140,1.50,019,SP B/F-hall,ET1,BOP2,w3,14.0,12.0,10 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,011,FS IQB,ET1,BOP1,w1,45.0,42.0,22 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,012,Förmontering IQB,ET1,BOP1,w1,30.0,33.0,18 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,014,Svets o montage IQB,ET1,BOP1,w1,35.0,32.0,16 +P07,4507,Idrottshall Västerås,SB,styck,45,3.50,018,SB B/F-hall,ET1,BOP1,w1,16.0,18.0,5 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,011,FS IQB,ET1,BOP1,w2,45.0,48.0,26 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,016,Gjutning,ET1,BOP2,w2,20.0,22.0,5 +P07,4507,Idrottshall Västerås,HSQ,meter,400,2.05,017,Målning,ET1,BOP2,w3,18.0,16.0,15 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,011,FS IQB,ET1,BOP1,w1,65.0,62.0,36 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,012,Förmontering IQB,ET1,BOP1,w1,42.0,45.0,30 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,013,Montering IQB,ET1,BOP1,w1,35.0,38.0,25 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,014,Svets o montage IQB,ET1,BOP1,w1,40.0,44.0,22 +P08,4508,Bro E6 Halmstad,SP,styck,200,2.50,019,SP B/F-hall,ET1,BOP1,w1,20.0,18.0,8 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,011,FS IQB,ET1,BOP1,w2,65.0,68.0,42 +P08,4508,Bro E6 Halmstad,IQP,styck,95,2.93,015,Montering IQP,ET1,BOP2,w2,28.0,30.0,10 +P08,4508,Bro E6 Halmstad,IQB,meter,800,1.80,016,Gjutning,ET1,BOP2,w3,22.0,25.0,8 +P08,4508,Bro E6 Halmstad,SR,styck,15,180.0,021,SR B/F-hall,ET1,BOP2,w3,90.0,85.0,2 \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/factory_workers.csv b/submissions/vansh-singhal/level6/factory_workers.csv new file mode 100644 index 000000000..3110285cc --- /dev/null +++ b/submissions/vansh-singhal/level6/factory_workers.csv @@ -0,0 +1,15 @@ +worker_id,name,role,primary_station,can_cover_stations,certifications,hours_per_week,type +W01,Erik Lindberg,Operator,011,"011,012","MIG/MAG,TIG,ISO 9606",40,permanent +W02,Anna Berg,Operator,011,"011,014","MIG/MAG,TIG",40,permanent +W03,Lars Jensen,Operator,012,"012,013","Surface treatment,CE marking",40,permanent +W04,Maria Stone,Operator,013,"013","Blasting,Surface protection",40,permanent +W05,Johan Peters,Operator,014,"014,015","Hydraulics,Mechanics,Crane",40,permanent +W06,Karen Nilsen,Inspector,015,"015","SIS,SS-EN 1090,NDT",40,permanent +W07,Per Hansen,Operator,016,"016,017","Casting,Formwork",40,permanent +W08,Sofia Arden,Operator,017,"017","Surface treatment,Spray painting",40,permanent +W09,Magnus Stone,Operator,018,"018,019","Sheet metal,Assembly",40,permanent +W10,Elin Frank,Operator,019,"019,018","Assembly,Welding",32,permanent +W11,Victor Elm,Foreman,all,"011,012,013,014,015,016,017,018,019,021","Leadership,CE,ISO 9001",45,permanent +W12,Lena Dale,Quality Manager,015,"015","ISO 9001,SS-EN 1090,Audit",40,permanent +W13,Ahmed Hassan,Operator,011,"011","MIG/MAG",40,hired +W14,Petra Steen,Operator,012,"012,013","Surface treatment",40,hired \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/requirements.txt b/submissions/vansh-singhal/level6/requirements.txt new file mode 100644 index 000000000..a3479b2ec --- /dev/null +++ b/submissions/vansh-singhal/level6/requirements.txt @@ -0,0 +1,5 @@ +streamlit +neo4j +python-dotenv +pandas +plotly \ No newline at end of file diff --git a/submissions/vansh-singhal/level6/seed_graph.py b/submissions/vansh-singhal/level6/seed_graph.py new file mode 100644 index 000000000..93037269c --- /dev/null +++ b/submissions/vansh-singhal/level6/seed_graph.py @@ -0,0 +1,326 @@ +import os +import pandas as pd +from neo4j import GraphDatabase +from dotenv import load_dotenv + +load_dotenv() + +URI = os.getenv("NEO4J_URI") +USER = os.getenv("NEO4J_USER") +PASSWORD = os.getenv("NEO4J_PASSWORD") + + +def normalize_station(code) -> str: + """Normalize station code to 3-digit zero-padded string. e.g. 11 → '011'""" + try: + return f"{int(str(code).strip()):03d}" + except (ValueError, TypeError): + return str(code).strip() + + +def create_constraints(session): + constraints = [ + "CREATE CONSTRAINT IF NOT EXISTS FOR (p:Project) REQUIRE p.project_id IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (s:Station) REQUIRE s.station_code IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (p:Product) REQUIRE p.product_type IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (w:Worker) REQUIRE w.worker_id IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (w:Week) REQUIRE w.week_id IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (c:Certification) REQUIRE c.name IS UNIQUE", + "CREATE CONSTRAINT IF NOT EXISTS FOR (e:Etapp) REQUIRE e.etapp_id IS UNIQUE", + ] + for c in constraints: + session.run(c) + print("✓ Constraints created") + + +def seed_projects(session, prod: pd.DataFrame): + rows = prod[["project_id", "project_number", "project_name"]].drop_duplicates() + for _, row in rows.iterrows(): + session.run( + """ + MERGE (p:Project {project_id: $project_id}) + SET p.project_number = $project_number, + p.project_name = $project_name, + p.name = $project_name + """, + project_id=row["project_id"], + project_number=int(row["project_number"]), + project_name=row["project_name"], + ) + print(f"✓ {len(rows)} Project nodes") + + +def seed_stations(session, prod: pd.DataFrame): + rows = prod[["station_code", "station_name"]].drop_duplicates() + for _, row in rows.iterrows(): + session.run( + """ + MERGE (s:Station {station_code: $station_code}) + SET s.station_name = $station_name, + s.name = $station_name + """, + station_code=row["station_code"], + station_name=row["station_name"], + ) + print(f"✓ {len(rows)} Station nodes") + + +def seed_products(session, prod: pd.DataFrame): + rows = prod[["product_type", "unit"]].drop_duplicates() + for _, row in rows.iterrows(): + session.run( + """ + MERGE (p:Product {product_type: $product_type}) + SET p.unit = $unit, + p.name = $product_type + """, + product_type=row["product_type"], + unit=row["unit"], + ) + print(f"✓ {len(rows)} Product nodes") + + +def seed_etapps(session, prod: pd.DataFrame): + for etapp in prod["etapp"].unique(): + session.run( + "MERGE (e:Etapp {etapp_id: $etapp_id})", + etapp_id=etapp, + ) + print(f"✓ {prod['etapp'].nunique()} Etapp nodes") + + +def seed_weeks(session, capacity: pd.DataFrame): + for _, row in capacity.iterrows(): + session.run( + """ + MERGE (w:Week {week_id: $week_id}) + SET w.own_staff_count = $own_staff_count, + w.hired_staff_count = $hired_staff_count, + w.own_hours = $own_hours, + w.hired_hours = $hired_hours, + w.overtime_hours = $overtime_hours, + w.total_capacity = $total_capacity, + w.total_planned = $total_planned, + w.deficit = $deficit + """, + week_id=row["week"], + own_staff_count=int(row["own_staff_count"]), + hired_staff_count=int(row["hired_staff_count"]), + own_hours=int(row["own_hours"]), + hired_hours=int(row["hired_hours"]), + overtime_hours=int(row["overtime_hours"]), + total_capacity=int(row["total_capacity"]), + total_planned=int(row["total_planned"]), + deficit=int(row["deficit"]), + ) + print(f"✓ {len(capacity)} Week nodes") + + +def seed_workers_and_certs(session, workers: pd.DataFrame): + for _, row in workers.iterrows(): + # Worker node + session.run( + """ + MERGE (w:Worker {worker_id: $worker_id}) + SET w.name = $name, + w.role = $role, + w.hours_per_week = $hours_per_week, + w.type = $type + """, + worker_id=row["worker_id"], + name=row["name"], + role=row["role"], + hours_per_week=int(row["hours_per_week"]), + type=row["type"], + ) + + # Certifications + HAS_CERTIFICATION + for cert in str(row["certifications"]).split(","): + cert = cert.strip() + if not cert: + continue + session.run( + """ + MERGE (c:Certification {name: $cert}) + WITH c + MATCH (w:Worker {worker_id: $worker_id}) + MERGE (w)-[:HAS_CERTIFICATION]->(c) + """, + cert=cert, + worker_id=row["worker_id"], + ) + + # WORKS_AT (primary station — skip "all") + primary = str(row["primary_station"]).strip() + if primary != "all": + sc = normalize_station(primary) + session.run( + """ + MATCH (w:Worker {worker_id: $wid}) + MATCH (s:Station {station_code: $sc}) + MERGE (w)-[:WORKS_AT]->(s) + """, + wid=row["worker_id"], + sc=sc, + ) + + # CAN_COVER + for station in str(row["can_cover_stations"]).split(","): + sc = normalize_station(station.strip()) + session.run( + """ + MATCH (w:Worker {worker_id: $wid}) + MATCH (s:Station {station_code: $sc}) + MERGE (w)-[:CAN_COVER]->(s) + """, + wid=row["worker_id"], + sc=sc, + ) + + print(f"✓ {len(workers)} Worker nodes + certifications + WORKS_AT + CAN_COVER") + + +def seed_relationships(session, prod: pd.DataFrame): + rel_counts = {"BELONGS_TO": 0, "PRODUCES": 0, "PROCESSED_AT": 0, + "SCHEDULED_AT": 0, "SCHEDULED_IN": 0} + + # BELONGS_TO (Project → Etapp) + for _, row in prod[["project_id", "etapp"]].drop_duplicates().iterrows(): + session.run( + """ + MATCH (p:Project {project_id: $pid}) + MATCH (e:Etapp {etapp_id: $eid}) + MERGE (p)-[:BELONGS_TO]->(e) + """, + pid=row["project_id"], + eid=row["etapp"], + ) + rel_counts["BELONGS_TO"] += 1 + + # PRODUCES (Project → Product) + for _, row in prod[["project_id", "product_type", "quantity", + "unit_factor", "unit"]].drop_duplicates( + subset=["project_id", "product_type"]).iterrows(): + session.run( + """ + MATCH (p:Project {project_id: $pid}) + MATCH (d:Product {product_type: $ptype}) + MERGE (p)-[r:PRODUCES]->(d) + SET r.quantity = $qty, + r.unit_factor = $uf, + r.unit = $unit + """, + pid=row["project_id"], + ptype=row["product_type"], + qty=float(row["quantity"]), + uf=float(row["unit_factor"]), + unit=row["unit"], + ) + rel_counts["PRODUCES"] += 1 + + # PROCESSED_AT (Product → Station) + for _, row in prod[["product_type", "station_code"]].drop_duplicates().iterrows(): + session.run( + """ + MATCH (d:Product {product_type: $ptype}) + MATCH (s:Station {station_code: $sc}) + MERGE (d)-[:PROCESSED_AT]->(s) + """, + ptype=row["product_type"], + sc=row["station_code"], + ) + rel_counts["PROCESSED_AT"] += 1 + + # SCHEDULED_AT (Project → Station, one per production row) + for _, row in prod.iterrows(): + session.run( + """ + MATCH (p:Project {project_id: $pid}) + MATCH (s:Station {station_code: $sc}) + MERGE (p)-[r:SCHEDULED_AT {week: $week, product_type: $ptype}]->(s) + SET r.planned_hours = $planned, + r.actual_hours = $actual, + r.completed_units = $completed, + r.etapp = $etapp, + r.bop = $bop + """, + pid=row["project_id"], + sc=row["station_code"], + week=row["week"], + ptype=row["product_type"], + planned=float(row["planned_hours"]), + actual=float(row["actual_hours"]), + completed=int(row["completed_units"]), + etapp=row["etapp"], + bop=row["bop"], + ) + rel_counts["SCHEDULED_AT"] += 1 + + # SCHEDULED_IN (Project → Week) + for _, row in prod[["project_id", "week"]].drop_duplicates().iterrows(): + session.run( + """ + MATCH (p:Project {project_id: $pid}) + MATCH (w:Week {week_id: $wid}) + MERGE (p)-[:SCHEDULED_IN]->(w) + """, + pid=row["project_id"], + wid=row["week"], + ) + rel_counts["SCHEDULED_IN"] += 1 + + for rel, n in rel_counts.items(): + print(f" {rel}: {n}") + print(f"✓ Relationships seeded") + + +def print_summary(session): + nodes = session.run("MATCH (n) RETURN count(n) AS c").single()["c"] + rels = session.run("MATCH ()-[r]->() RETURN count(r) AS c").single()["c"] + labels = [r["label"] for r in session.run("CALL db.labels() YIELD label")] + rel_types = [r["relationshipType"] for r in + session.run("CALL db.relationshipTypes() YIELD relationshipType")] + print(f"\n── Graph Summary ──────────────────────") + print(f" Nodes: {nodes}") + print(f" Relationships: {rels}") + print(f" Node labels ({len(labels)}): {labels}") + print(f" Rel types ({len(rel_types)}): {rel_types}") + print(f"───────────────────────────────────────") + + +def seed(): + # Load CSVs + prod = pd.read_csv("factory_production.csv") + workers = pd.read_csv("factory_workers.csv") + capacity = pd.read_csv("factory_capacity.csv") + + # Normalize station codes to "011" format + prod["station_code"] = prod["station_code"].apply(normalize_station) + + print("\n🔌 Connecting to Neo4j…") + driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD)) + + with driver.session() as s: + print("\n📐 Creating constraints…") + create_constraints(s) + + print("\n🌱 Seeding nodes…") + seed_projects(s, prod) + seed_stations(s, prod) + seed_products(s, prod) + seed_etapps(s, prod) + seed_weeks(s, capacity) + seed_workers_and_certs(s, workers) + + print("\n🔗 Seeding relationships…") + seed_relationships(s, prod) + + print("\n📊 Final graph state…") + print_summary(s) + + driver.close() + print("\n✅ Done — graph is ready!\n") + + +if __name__ == "__main__": + seed() \ No newline at end of file From 30810ee72450f629203769d4058fdf215e385e6a Mon Sep 17 00:00:00 2001 From: Vansh Singhal Date: Wed, 13 May 2026 17:42:35 +0530 Subject: [PATCH 8/9] Level 5 Vansh Singhal --- submissions/vansh-singhal/level5/answers.md | 71 +++++++++++---------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/submissions/vansh-singhal/level5/answers.md b/submissions/vansh-singhal/level5/answers.md index 4ec69b510..3a93bc7a6 100644 --- a/submissions/vansh-singhal/level5/answers.md +++ b/submissions/vansh-singhal/level5/answers.md @@ -100,25 +100,25 @@ The graph query directly follows operational relationships between workers, cert ## 1. Main Bottleneck Areas -From the capacity data: +From `factory_capacity.csv`: -- Week 1 deficit: `-132 hours` -- Week 2 deficit: `-125 hours` +- Week `w1` deficit: `-132 hours` +- Week `w2` deficit: `-125 hours` +- Week `w4` deficit: `-50 hours` -### Main overload contributors +From `factory_production.csv`, the stations with the most frequent overruns (`actual_hours > planned_hours by 10%`) are: -| Station | Issue | -|---|---| -| 011 – FS IQB | Extremely high actual hours across multiple projects | -| 014 – Svets o montage | Frequent overruns above planned hours | -| 016 – Gjutning | Only one primary worker and repeated over-capacity usage | - -### Projects contributing most +| Station | Overrun Cases | Avg Variance | +|---|---|---| +| SB B/F-hall | 4 | 13.2% | +| Gjutning | 3 | 17.6% | +| Montering IQP | 3 | 11.7% | -- P05 – Sjukhus Linköping -- P03 – Lagerhall Jönköping +### Projects contributing most to overload -Stations where `actual_hours > planned_hours` by more than 10% were identified as bottlenecks. +- P02 — Sjukhus Linköping +- P05 — Datacenter Malmö +- P07 — Lagerhall Jönköping --- @@ -129,12 +129,18 @@ MATCH (p:Project)-[r:RUNS_ON]->(s:Station) WHERE r.actual_hours > r.planned_hours * 1.10 -RETURN s.station_name AS station, +RETURN +s.station_name AS station, collect({ project: p.project_name, planned: r.planned_hours, - actual: r.actual_hours + actual: r.actual_hours, + variance_pct: + round( + ((r.actual_hours-r.planned_hours) + /r.planned_hours)*100,2 + ) }) AS overruns, count(*) AS total_overruns @@ -146,9 +152,9 @@ ORDER BY total_overruns DESC This query: -- checks where actual hours exceed planned hours by more than 10%, -- groups overloaded projects by station, -- and identifies stations causing repeated production bottlenecks. +- detects projects exceeding planned hours by more than 10%, +- groups overloads by station, +- and highlights recurring bottleneck stations. --- @@ -159,7 +165,9 @@ This query: Use a relationship property: ```text -PROCESSED_AT { +RUNS_ON { + planned_hours, + actual_hours, variance_pct, alert: true } @@ -167,7 +175,7 @@ PROCESSED_AT { ### Why? -The bottleneck is tied to a specific production event, not a completely separate entity. Using relationship properties keeps the overload information directly connected to the station-processing activity and makes bottleneck detection easier during graph traversal. +The overload belongs to a specific production activity between a project and station. Keeping bottleneck data on the relationship makes variance analysis and alert traversal simpler and more efficient. --- @@ -190,8 +198,6 @@ Embed project descriptions containing: "450 meters of IQB beams for hospital extension in Linköping, tight delivery timeline, high welding workload" ``` -This allows semantic similarity matching between new and past projects. - --- ## 2. Hybrid Query @@ -199,19 +205,20 @@ This allows semantic similarity matching between new and past projects. ```cypher -- Vector similarity + graph filtering -- -MATCH (p:Project) - -WHERE vector.similarity( -p.embedding, -$new_project_embedding -) > 0.85 +CALL db.index.vector.queryNodes( + 'project_embeddings', + 5, + $new_project_embedding +) +YIELD node, score -MATCH (p)-[r:RUNS_ON]->(s:Station) +MATCH (node)-[r:RUNS_ON]->(s:Station) WHERE r.actual_hours <= r.planned_hours * 1.05 RETURN -p.project_name AS similar_project, +node.project_name AS similar_project, +score, collect(DISTINCT s.station_name) AS stations_used, @@ -220,7 +227,7 @@ avg( /r.planned_hours ) AS variance -ORDER BY variance ASC +ORDER BY score DESC ``` ### Explanation From 1ed19da8d93dcff1c9eab02fc9af25ddb9520bd5 Mon Sep 17 00:00:00 2001 From: Vansh Singhal Date: Wed, 13 May 2026 17:53:14 +0530 Subject: [PATCH 9/9] Level 6 Vansh Singhal --- submissions/vansh-singhal/level6/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submissions/vansh-singhal/level6/README.md b/submissions/vansh-singhal/level6/README.md index 48d026501..3708b3359 100644 --- a/submissions/vansh-singhal/level6/README.md +++ b/submissions/vansh-singhal/level6/README.md @@ -159,4 +159,4 @@ Change your URI scheme in `.env` from `neo4j+s://` to `neo4j+ssc://` to skip cer Make sure your virtual environment is activated before running any commands. **`KeyError` on secrets in `app.py`** -When running locally, the app falls back to `.env`. Make sure `.env` exists and is filled in correctly. \ No newline at end of file +When run in locally, the app falls back to `.env`. Make sure `.env` exists and is filled in correctly. \ No newline at end of file