From 1141594d20024931f9e7eebcfdf22404e1fb3406 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro Date: Sun, 21 Dec 2025 21:57:39 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20Primeira=20Vers=C3=A3o=20traduzida?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 25 + CarneiroTech.csproj | 14 + CarneiroTech.sln | 25 + Content/Cases/en/asp-to-dotnet-migration.md | 329 + Content/Cases/en/cnpj-fast-process.md | 382 + Content/Cases/en/cnpj-migration-database.md | 469 + .../Cases/en/industrial-learning-platform.md | 588 + .../Cases/en/pharma-digital-transformation.md | 577 + .../Cases/en/sap-integration-healthcare.md | 211 + Content/Cases/es/asp-to-dotnet-migration.md | 329 + Content/Cases/es/cnpj-fast-process.md | 382 + Content/Cases/es/cnpj-migration-database.md | 469 + .../Cases/es/industrial-learning-platform.md | 588 + .../Cases/es/pharma-digital-transformation.md | 577 + .../Cases/es/sap-integration-healthcare.md | 211 + Content/Cases/pt/asp-to-dotnet-migration.md | 329 + Content/Cases/pt/cnpj-fast-process.md | 382 + Content/Cases/pt/cnpj-migration-database.md | 469 + .../Cases/pt/industrial-learning-platform.md | 588 + .../Cases/pt/pharma-digital-transformation.md | 577 + .../Cases/pt/sap-integration-healthcare.md | 211 + Controllers/CasesController.cs | 61 + Controllers/HomeController.cs | 100 + Controllers/LanguageController.cs | 28 + DEPLOY_README.md | 363 + Dockerfile | 44 + IMPLEMENTATION_SUMMARY.md | 308 + MUDANCAS_TEMA_VERMELHO.md | 215 + Models/CaseMetadata.cs | 20 + Models/CaseModel.cs | 8 + Models/ContactFormModel.cs | 20 + Models/ErrorViewModel.cs | 8 + Models/SitemapItem.cs | 9 + Program.cs | 36 + Properties/launchSettings.json | 38 + QUICK_START.md | 340 + README.md | 303 +- Resources/SiteStrings.cs | 99 + Services/CaseService.cs | 208 + Services/ICaseService.cs | 12 + Services/IMarkdownService.cs | 7 + Services/LanguageService.cs | 90 + Services/MarkdownService.cs | 76 + Views/Cases/Details.cshtml | 184 + Views/Cases/Index.cshtml | 91 + Views/Home/Index.cshtml | 302 + Views/Home/Privacy.cshtml | 6 + Views/Shared/Error.cshtml | 25 + Views/Shared/_Layout.cshtml | 156 + Views/Shared/_Layout.cshtml.css | 48 + Views/Shared/_ValidationScriptsPartial.cshtml | 2 + Views/_ViewImports.cshtml | 3 + Views/_ViewStart.cshtml | 3 + appsettings.Development.json | 8 + appsettings.json | 9 + deploy-to-oci.sh | 52 + docker-compose.yml | 26 + wwwroot/assets/favicon.ico | Bin 0 -> 23462 bytes wwwroot/assets/img/about/1.jpg | Bin 0 -> 19668 bytes wwwroot/assets/img/about/2.jpg | Bin 0 -> 10187 bytes wwwroot/assets/img/about/3.jpg | Bin 0 -> 18029 bytes wwwroot/assets/img/about/4.jpg | Bin 0 -> 16175 bytes wwwroot/assets/img/close-icon.svg | 1 + wwwroot/assets/img/header-bg.jpg | Bin 0 -> 4497411 bytes wwwroot/assets/img/header-bg_old.jpg | Bin 0 -> 238317 bytes wwwroot/assets/img/logos/facebook.svg | 34 + wwwroot/assets/img/logos/google.svg | 35 + wwwroot/assets/img/logos/ibm.svg | 24 + wwwroot/assets/img/logos/microsoft.svg | 42 + wwwroot/assets/img/map-image.png | Bin 0 -> 364038 bytes wwwroot/assets/img/navbar-logo.svg | 1 + wwwroot/assets/img/portfolio/1.jpg | Bin 0 -> 18415 bytes wwwroot/assets/img/portfolio/2.jpg | Bin 0 -> 32450 bytes wwwroot/assets/img/portfolio/3.jpg | Bin 0 -> 17771 bytes wwwroot/assets/img/portfolio/4.jpg | Bin 0 -> 26923 bytes wwwroot/assets/img/portfolio/5.jpg | Bin 0 -> 17628 bytes wwwroot/assets/img/portfolio/6.jpg | Bin 0 -> 32511 bytes wwwroot/assets/img/team/1.jpg | Bin 0 -> 40338 bytes wwwroot/assets/img/team/2.jpg | Bin 0 -> 61067 bytes wwwroot/assets/img/team/3.jpg | Bin 0 -> 57725 bytes wwwroot/css/custom.css | 368 + wwwroot/css/site.css | 22 + wwwroot/css/styles.css | 11316 ++++++++++++++++ wwwroot/favicon.ico | Bin 0 -> 5430 bytes wwwroot/img/LogoPequeno.png | Bin 0 -> 203065 bytes wwwroot/img/logo-optimized.svg | 26 + wwwroot/img/logo.svg | 67 + wwwroot/js/scripts.js | 54 + wwwroot/js/site.js | 4 + wwwroot/lib/bootstrap/LICENSE | 22 + .../lib/bootstrap/dist/css/bootstrap-grid.css | 4997 +++++++ .../bootstrap/dist/css/bootstrap-grid.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.min.css | 7 + .../dist/css/bootstrap-grid.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-grid.rtl.css | 4996 +++++++ .../dist/css/bootstrap-grid.rtl.css.map | 1 + .../dist/css/bootstrap-grid.rtl.min.css | 7 + .../dist/css/bootstrap-grid.rtl.min.css.map | 1 + .../bootstrap/dist/css/bootstrap-reboot.css | 427 + .../dist/css/bootstrap-reboot.css.map | 1 + .../dist/css/bootstrap-reboot.min.css | 8 + .../dist/css/bootstrap-reboot.min.css.map | 1 + .../dist/css/bootstrap-reboot.rtl.css | 424 + .../dist/css/bootstrap-reboot.rtl.css.map | 1 + .../dist/css/bootstrap-reboot.rtl.min.css | 8 + .../dist/css/bootstrap-reboot.rtl.min.css.map | 1 + .../dist/css/bootstrap-utilities.css | 4866 +++++++ .../dist/css/bootstrap-utilities.css.map | 1 + .../dist/css/bootstrap-utilities.min.css | 7 + .../dist/css/bootstrap-utilities.min.css.map | 1 + .../dist/css/bootstrap-utilities.rtl.css | 4857 +++++++ .../dist/css/bootstrap-utilities.rtl.css.map | 1 + .../dist/css/bootstrap-utilities.rtl.min.css | 7 + .../css/bootstrap-utilities.rtl.min.css.map | 1 + wwwroot/lib/bootstrap/dist/css/bootstrap.css | 11221 +++++++++++++++ .../lib/bootstrap/dist/css/bootstrap.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.min.css | 7 + .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../lib/bootstrap/dist/css/bootstrap.rtl.css | 11197 +++++++++++++++ .../bootstrap/dist/css/bootstrap.rtl.css.map | 1 + .../bootstrap/dist/css/bootstrap.rtl.min.css | 7 + .../dist/css/bootstrap.rtl.min.css.map | 1 + .../lib/bootstrap/dist/js/bootstrap.bundle.js | 6780 +++++++++ .../bootstrap/dist/js/bootstrap.bundle.js.map | 1 + .../bootstrap/dist/js/bootstrap.bundle.min.js | 7 + .../dist/js/bootstrap.bundle.min.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.esm.js | 4977 +++++++ .../bootstrap/dist/js/bootstrap.esm.js.map | 1 + .../bootstrap/dist/js/bootstrap.esm.min.js | 7 + .../dist/js/bootstrap.esm.min.js.map | 1 + wwwroot/lib/bootstrap/dist/js/bootstrap.js | 5026 +++++++ .../lib/bootstrap/dist/js/bootstrap.js.map | 1 + .../lib/bootstrap/dist/js/bootstrap.min.js | 7 + .../bootstrap/dist/js/bootstrap.min.js.map | 1 + .../jquery-validation-unobtrusive/LICENSE.txt | 23 + .../jquery.validate.unobtrusive.js | 435 + .../jquery.validate.unobtrusive.min.js | 8 + wwwroot/lib/jquery-validation/LICENSE.md | 22 + .../dist/additional-methods.js | 1512 +++ .../dist/additional-methods.min.js | 4 + .../jquery-validation/dist/jquery.validate.js | 1661 +++ .../dist/jquery.validate.min.js | 4 + wwwroot/lib/jquery/LICENSE.txt | 21 + wwwroot/lib/jquery/dist/jquery.js | 10881 +++++++++++++++ wwwroot/lib/jquery/dist/jquery.min.js | 2 + wwwroot/lib/jquery/dist/jquery.min.map | 1 + wwwroot/robots.txt | 4 + 147 files changed, 97502 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 CarneiroTech.csproj create mode 100644 CarneiroTech.sln create mode 100644 Content/Cases/en/asp-to-dotnet-migration.md create mode 100644 Content/Cases/en/cnpj-fast-process.md create mode 100644 Content/Cases/en/cnpj-migration-database.md create mode 100644 Content/Cases/en/industrial-learning-platform.md create mode 100644 Content/Cases/en/pharma-digital-transformation.md create mode 100644 Content/Cases/en/sap-integration-healthcare.md create mode 100644 Content/Cases/es/asp-to-dotnet-migration.md create mode 100644 Content/Cases/es/cnpj-fast-process.md create mode 100644 Content/Cases/es/cnpj-migration-database.md create mode 100644 Content/Cases/es/industrial-learning-platform.md create mode 100644 Content/Cases/es/pharma-digital-transformation.md create mode 100644 Content/Cases/es/sap-integration-healthcare.md create mode 100644 Content/Cases/pt/asp-to-dotnet-migration.md create mode 100644 Content/Cases/pt/cnpj-fast-process.md create mode 100644 Content/Cases/pt/cnpj-migration-database.md create mode 100644 Content/Cases/pt/industrial-learning-platform.md create mode 100644 Content/Cases/pt/pharma-digital-transformation.md create mode 100644 Content/Cases/pt/sap-integration-healthcare.md create mode 100644 Controllers/CasesController.cs create mode 100644 Controllers/HomeController.cs create mode 100644 Controllers/LanguageController.cs create mode 100644 DEPLOY_README.md create mode 100644 Dockerfile create mode 100644 IMPLEMENTATION_SUMMARY.md create mode 100644 MUDANCAS_TEMA_VERMELHO.md create mode 100644 Models/CaseMetadata.cs create mode 100644 Models/CaseModel.cs create mode 100644 Models/ContactFormModel.cs create mode 100644 Models/ErrorViewModel.cs create mode 100644 Models/SitemapItem.cs create mode 100644 Program.cs create mode 100644 Properties/launchSettings.json create mode 100644 QUICK_START.md create mode 100644 Resources/SiteStrings.cs create mode 100644 Services/CaseService.cs create mode 100644 Services/ICaseService.cs create mode 100644 Services/IMarkdownService.cs create mode 100644 Services/LanguageService.cs create mode 100644 Services/MarkdownService.cs create mode 100644 Views/Cases/Details.cshtml create mode 100644 Views/Cases/Index.cshtml create mode 100644 Views/Home/Index.cshtml create mode 100644 Views/Home/Privacy.cshtml create mode 100644 Views/Shared/Error.cshtml create mode 100644 Views/Shared/_Layout.cshtml create mode 100644 Views/Shared/_Layout.cshtml.css create mode 100644 Views/Shared/_ValidationScriptsPartial.cshtml create mode 100644 Views/_ViewImports.cshtml create mode 100644 Views/_ViewStart.cshtml create mode 100644 appsettings.Development.json create mode 100644 appsettings.json create mode 100644 deploy-to-oci.sh create mode 100644 docker-compose.yml create mode 100644 wwwroot/assets/favicon.ico create mode 100644 wwwroot/assets/img/about/1.jpg create mode 100644 wwwroot/assets/img/about/2.jpg create mode 100644 wwwroot/assets/img/about/3.jpg create mode 100644 wwwroot/assets/img/about/4.jpg create mode 100644 wwwroot/assets/img/close-icon.svg create mode 100644 wwwroot/assets/img/header-bg.jpg create mode 100644 wwwroot/assets/img/header-bg_old.jpg create mode 100644 wwwroot/assets/img/logos/facebook.svg create mode 100644 wwwroot/assets/img/logos/google.svg create mode 100644 wwwroot/assets/img/logos/ibm.svg create mode 100644 wwwroot/assets/img/logos/microsoft.svg create mode 100644 wwwroot/assets/img/map-image.png create mode 100644 wwwroot/assets/img/navbar-logo.svg create mode 100644 wwwroot/assets/img/portfolio/1.jpg create mode 100644 wwwroot/assets/img/portfolio/2.jpg create mode 100644 wwwroot/assets/img/portfolio/3.jpg create mode 100644 wwwroot/assets/img/portfolio/4.jpg create mode 100644 wwwroot/assets/img/portfolio/5.jpg create mode 100644 wwwroot/assets/img/portfolio/6.jpg create mode 100644 wwwroot/assets/img/team/1.jpg create mode 100644 wwwroot/assets/img/team/2.jpg create mode 100644 wwwroot/assets/img/team/3.jpg create mode 100644 wwwroot/css/custom.css create mode 100644 wwwroot/css/site.css create mode 100644 wwwroot/css/styles.css create mode 100644 wwwroot/favicon.ico create mode 100644 wwwroot/img/LogoPequeno.png create mode 100644 wwwroot/img/logo-optimized.svg create mode 100644 wwwroot/img/logo.svg create mode 100644 wwwroot/js/scripts.js create mode 100644 wwwroot/js/site.js create mode 100644 wwwroot/lib/bootstrap/LICENSE create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css create mode 100644 wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.js.map create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.min.js create mode 100644 wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map create mode 100644 wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt create mode 100644 wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js create mode 100644 wwwroot/lib/jquery-validation/LICENSE.md create mode 100644 wwwroot/lib/jquery-validation/dist/additional-methods.js create mode 100644 wwwroot/lib/jquery-validation/dist/additional-methods.min.js create mode 100644 wwwroot/lib/jquery-validation/dist/jquery.validate.js create mode 100644 wwwroot/lib/jquery-validation/dist/jquery.validate.min.js create mode 100644 wwwroot/lib/jquery/LICENSE.txt create mode 100644 wwwroot/lib/jquery/dist/jquery.js create mode 100644 wwwroot/lib/jquery/dist/jquery.min.js create mode 100644 wwwroot/lib/jquery/dist/jquery.min.map create mode 100644 wwwroot/robots.txt diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e7b690f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/CarneiroTech.csproj b/CarneiroTech.csproj new file mode 100644 index 0000000..cb01c91 --- /dev/null +++ b/CarneiroTech.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/CarneiroTech.sln b/CarneiroTech.sln new file mode 100644 index 0000000..90718dd --- /dev/null +++ b/CarneiroTech.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 18 +VisualStudioVersion = 18.1.11304.174 d18.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CarneiroTech", "CarneiroTech.csproj", "{BFC5463B-C1CF-69EE-98AF-C5790D1C99C2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BFC5463B-C1CF-69EE-98AF-C5790D1C99C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BFC5463B-C1CF-69EE-98AF-C5790D1C99C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BFC5463B-C1CF-69EE-98AF-C5790D1C99C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BFC5463B-C1CF-69EE-98AF-C5790D1C99C2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9322B71E-A202-497C-8EB5-48B61812278D} + EndGlobalSection +EndGlobal diff --git a/Content/Cases/en/asp-to-dotnet-migration.md b/Content/Cases/en/asp-to-dotnet-migration.md new file mode 100644 index 0000000..f63148b --- /dev/null +++ b/Content/Cases/en/asp-to-dotnet-migration.md @@ -0,0 +1,329 @@ +--- +title: "ASP 3.0 to .NET Core Migration - Cargo Tracking System" +slug: "asp-to-dotnet-migration" +summary: "Tech Lead in gradual migration of mission-critical ASP 3.0 system to .NET Core, with dual-write data synchronization and cost reduction of $20k/year in mapping APIs." +client: "Logistics and Tracking Company" +industry: "Logistics & Security" +timeline: "12 months (complete migration)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - ASP Classic + - .NET Core + - SQL Server + - Migration + - Tech Lead + - OSRM + - APIs + - Architecture +featured: true +order: 2 +date: 2015-06-01 +seo_title: "ASP 3.0 to .NET Core Migration - Carneiro Tech Case Study" +seo_description: "Case study of gradual ASP 3.0 to .NET Core migration with data synchronization and $20k/year cost savings in API expenses." +seo_keywords: "ASP migration, .NET Core, legacy modernization, SQL Server, OSRM, tech lead, routing API" +--- + +## Overview + +Mission-critical cargo monitoring system for high-value loads (LED TVs worth $600 each, shipments up to 1000 units) using GPS satellite tracking. The application covered the entire lifecycle: from driver registration and evaluation (police background checks) to real-time monitoring and final delivery. + +**Main challenge:** Migrate legacy ASP 3.0 application to .NET Core with zero downtime, maintaining 24/7 critical operations. + +--- + +## Challenge + +### Critical Legacy System + +The company operated a mission-critical system in **ASP 3.0** (Classic ASP) that couldn't stop: + +**Legacy technology:** +- ASP 3.0 (1998 technology) +- SQL Server 2005 +- On-premises failover cluster (perfectly capable of handling the load) +- Integration with GPS satellite trackers +- Google Maps API (cost: **$20,000/year** just for route calculation) + +**Constraints:** +- 24/7 system operation with high-value cargo +- No downtime allowed during migration +- Multiple interdependent modules +- Team needed to continue developing features during migration + +--- + +## Solution Architecture + +### Phase 1: Infrastructure Preparation (Months 1-3) + +#### Database Upgrade +``` +SQL Server 2005 → SQL Server 2014 +- Full backup and validation +- Stored procedure migration +- Index optimization +- Performance testing +``` + +#### Dual-Write Synchronization Strategy + +I implemented a **bidirectional synchronization system** that allowed: + +1. **New modules (.NET Core)** wrote to the new database +2. **Automatic trigger** synchronized data to the legacy database +3. **Old modules (ASP 3.0)** continued working normally +4. **Zero downtime** throughout the entire migration + +```csharp +// Synchronization implementation example +public class DualWriteService +{ + public async Task SaveDriver(Driver driver) + { + // Write to new database (.NET Core) + await _newDbContext.Drivers.AddAsync(driver); + await _newDbContext.SaveChangesAsync(); + + // SQL trigger automatically syncs to legacy database + // ASP 3.0 modules continue functioning + } +} +``` + +**Why this approach?** +- Enabled **module-by-module** migration +- Team could continue developing +- Simple rollback if needed +- Reduced operational risk + +--- + +### Phase 2: Gradual Module Migration (Months 4-12) + +I migrated modules in increasing complexity order: + +**Migration sequence:** +1. ✅ Basic registrations (drivers, vehicles) +2. ✅ Risk assessment (police database integration) +3. ✅ Cargo and route management +4. ✅ Real-time GPS monitoring +5. ✅ Alerts and notifications +6. ✅ Reports and analytics + +**Migrated application stack:** +- `.NET Core 1.0` (2015-2016 was the beginning of .NET Core) +- `Entity Framework Core` +- `SignalR` for real-time monitoring +- `SQL Server 2014` +- RESTful APIs + +--- + +### Phase 3: Cost Reduction with OSRM ($20k/year Savings) + +#### Problem: Prohibitive Google Maps Cost + +The company spent **$20,000/year** just on Google Maps Directions API for truck route calculation. + +#### Solution: OSRM (Open Source Routing Machine) + +I implemented a solution based on **OSRM** (open-source routing engine): + +**Solution architecture:** + +``` +┌─────────────────┐ +│ Frontend │ +│ (Leaflet.js) │ +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ ┌──────────────┐ +│ API Wrapper │─────▶│ OSRM Server │ +│ (.NET Core) │ │ (self-hosted)│ +└────────┬────────┘ └──────────────┘ + │ + ▼ +┌─────────────────┐ +│ Google Maps │ +│ (display only) │ +└─────────────────┘ +``` + +**Implementation:** + +1. **OSRM Server configured** on own server +2. **User-friendly API wrapper** in .NET Core that: + - Received origin/destination + - Queried OSRM (free) + - Returned all route points + - Formatted for frontend +3. **Frontend** drew the route on Google Maps (visualization only, no routing API) + +```csharp +[HttpGet("route")] +public async Task GetRoute(double originLat, double originLng, + double destLat, double destLng) +{ + // Query OSRM (free) + var osrmResponse = await _osrmClient.GetRouteAsync( + originLat, originLng, destLat, destLng); + + // Return formatted points for frontend + return Ok(new { + points = osrmResponse.Routes[0].Geometry.Coordinates, + distance = osrmResponse.Routes[0].Distance, + duration = osrmResponse.Routes[0].Duration + }); +} +``` + +**Frontend with Leaflet:** + +```javascript +// Draw route on map (Google Maps only for tiles) +L.polyline(routePoints, {color: 'red'}).addTo(map); +``` + +#### OpenStreetMap Attempt + +I tried to also replace Google Maps (tiles) with **OpenStreetMap**, which worked technically, but: + +❌ **Users didn't like** the appearance +❌ Preferred the familiar Google Maps interface + +✅ **Decision:** Keep Google Maps for visualization only (no routing API cost) + +**Result:** Savings of **~$20,000/year** while maintaining route quality. + +--- + +## Results & Impact + +### Complete Migration in 12 Months + +✅ **100% of modules** migrated from ASP 3.0 to .NET Core +✅ **Zero downtime** throughout the entire migration +✅ **Productive team** throughout the process +✅ Faster and more scalable system + +### Cost Reduction + +💰 **$20,000/year saved** by replacing Google Maps Directions API +📉 **Optimized infrastructure** with SQL Server 2014 + +### Technical Improvements + +🚀 **Performance:** .NET Core application 3x faster than ASP 3.0 +🔒 **Security:** Modern stack with active security patches +🛠️ **Maintainability:** Modern C# code vs legacy VBScript +📊 **Monitoring:** SignalR for more efficient real-time tracking + +--- + +## Unexecuted Phase: Microservices & Cloud + +### Initial Planning + +I participated in the **design and conception** of the second phase (never executed): + +**Planned architecture:** +- Migration to **Azure** (cloud was just starting in 2015) +- Break into **microservices**: + - Authentication service + - GPS/tracking service + - Routing service + - Notification service +- **Event-driven architecture** with message queues + +**Why it wasn't executed:** + +I left the company right after completing the .NET Core migration. The second phase was planned but not implemented by me. + +--- + +## Tech Stack + +`ASP 3.0` `VBScript` `.NET Core 1.0` `C#` `Entity Framework Core` `SQL Server 2005` `SQL Server 2014` `OSRM` `Leaflet.js` `Google Maps` `SignalR` `REST APIs` `GPS/Satellite` `Migration Strategy` `Dual-Write Pattern` + +--- + +## Key Decisions & Trade-offs + +### Why dual-write synchronization? + +**Alternatives considered:** +1. ❌ Big Bang migration (too risky) +2. ❌ Keep everything in ASP 3.0 (unsustainable) +3. ✅ **Gradual migration with sync** (chosen) + +**Rationale:** +- Critical system couldn't stop +- Enabled module-by-module rollback +- Team remained productive + +### Why OSRM instead of others? + +**Alternatives:** +- Google Maps: $20k/year ❌ +- Mapbox: Paid license ❌ +- GraphHopper: Complex setup ❌ +- **OSRM: Open-source, fast, configurable** ✅ + +### Why not OpenStreetMap for tiles? + +**UX-based decision:** +- Technically worked perfectly +- Users preferred familiar Google interface +- **Compromise:** Google Maps for visualization (free) + OSRM for routing (free) + +--- + +## Lessons Learned + +### 1. Gradual Migration > Big Bang + +Migrating module by module with synchronization enabled: +- Continuous learning +- Route adjustments during the process +- Team and stakeholder confidence + +### 2. Open Source Can Save a Lot + +OSRM saved **$20k/year** without quality loss. But requires: +- Expertise to configure +- Own infrastructure +- Continuous maintenance + +### 3. UX > Technology Sometimes + +OpenStreetMap was technically superior (free), but users preferred Google Maps. **Lesson:** Listen to end users. + +### 4. Plan for Cloud, but Validate ROI + +In 2015, cloud was just starting. On-premises infrastructure (SQL Server cluster) was perfectly capable. **Don't force cloud if there's no clear benefit.** + +--- + +## Context: Why 2015 Was a Special Moment? + +**State of technology in 2015:** + +- ☁️ **Cloud in early stages:** AWS existed, Azure growing, but low corporate adoption +- 🆕 **.NET Core 1.0 launched** in June 2016 (we used RC during the project) +- 📱 **Microservices:** New concept, Docker in early adoption +- 🗺️ **Google Maps dominant:** Paid APIs, few mature open-source alternatives + +**Challenges of the time:** +- Non-existent ASP→.NET migration tools +- Scarce .NET Core documentation (version 1.0!) +- Architecture patterns still consolidating + +This project was **pioneering** in adopting .NET Core right at the beginning, when most were migrating to .NET Framework 4.x. + +--- + +**Result:** Successful migration of 24/7 critical system, $20k/year savings, and solid foundation for future evolution. + +[Want to discuss a similar migration? Get in touch](#contact) diff --git a/Content/Cases/en/cnpj-fast-process.md b/Content/Cases/en/cnpj-fast-process.md new file mode 100644 index 0000000..cd49beb --- /dev/null +++ b/Content/Cases/en/cnpj-fast-process.md @@ -0,0 +1,382 @@ +--- +title: "CNPJ Fast - Alphanumeric CNPJ Migration Process" +slug: "cnpj-fast-process" +summary: "Creation of structured methodology for migrating applications to the new Brazilian alphanumeric CNPJ format, sold to insurance company and collection agency." +client: "Consulting Firm (Internal)" +industry: "Consulting & Digital Transformation" +timeline: "3 months (process creation)" +role: "Solution Architect & Process Designer" +image: "" +tags: + - Process Design + - CNPJ + - Migration Strategy + - Regulatory Compliance + - Consulting + - Sales Enablement +featured: true +order: 3 +date: 2024-09-01 +seo_title: "CNPJ Fast - Alphanumeric CNPJ Migration Methodology" +seo_description: "Case study of creating a structured process for migrating to Brazilian alphanumeric CNPJ, sold to insurance company and collection agency." +seo_keywords: "CNPJ alphanumeric, migration process, regulatory compliance, consulting, methodology" +--- + +## Overview + +With the introduction of **alphanumeric CNPJ** by the Brazilian Federal Revenue Service, companies faced the challenge of adapting their legacy applications that stored CNPJ as numeric fields (`bigint`, `numeric`, `int`). + +I created **CNPJ Fast**, a structured methodology to assess, plan, and execute CNPJ migrations in corporate applications and databases. + +**Result:** Process sold to **2 clients** (insurance company and collection agency) before implementation. + +--- + +## Challenge + +### Complex Regulatory Change + +**Regulatory context:** +- Brazilian Federal Revenue Service introduced **alphanumeric CNPJ** +- CNPJ is no longer just numbers (14 digits) +- Now accepts **letters and numbers** (alphanumeric format) + +**Impact on companies:** + +```sql +-- BEFORE: Numeric CNPJ +CNPJ BIGINT -- 12345678000190 + +-- AFTER: Alphanumeric CNPJ +CNPJ VARCHAR(18) -- 12.ABC.678/0001-90 +``` + +**Identified problems:** + +1. **Database:** `BIGINT`, `NUMERIC`, `INT` columns don't support characters +2. **Primary keys:** CNPJ used as PK in several tables +3. **Foreign keys:** Relationships between tables +4. **Volume:** Millions of records to migrate +5. **Applications:** Validations, masks, business rules +6. **Testing:** Ensure integrity after migration +7. **Downtime:** Limited maintenance windows + +**Without a structured process**, companies risked: +- Data loss +- Database inconsistencies +- Broken applications +- Extended downtime + +--- + +## Solution: CNPJ Fast Process + +### 5-Phase Methodology + +I designed a structured process that could be replicated across different clients: + +``` +┌─────────────────────────────────────────────┐ +│ PHASE 1: DISCOVERY & ASSESSMENT │ +│ - Application inventory │ +│ - Database schema analysis │ +│ - Identification of impacted tables │ +│ - Data volume estimation │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ PHASE 2: IMPACT ANALYSIS │ +│ - Dependency mapping │ +│ - Analysis of primary/foreign keys │ +│ - Identification of business rules │ +│ - Risk assessment │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ PHASE 3: MIGRATION PLANNING │ +│ - Migration strategy (phased commits) │ +│ - Automated SQL scripts │ +│ - Rollback plan │ +│ - Maintenance windows │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ PHASE 4: EXECUTION │ +│ - Batch data migration │ +│ - Application updates │ +│ - Integration testing │ +│ - Integrity validation │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ PHASE 5: VALIDATION & GO-LIVE │ +│ - Regression testing │ +│ - Performance validation │ +│ - Coordinated go-live │ +│ - Post-migration monitoring │ +└─────────────────────────────────────────────┘ +``` + +--- + +### Phase 1: Discovery & Assessment + +**Objective:** Understand the complete migration scope + +**Deliverables:** + +1. **Application Inventory** + - List of applications using CNPJ + - Technologies (ASP 3.0, VB6, .NET, microservices) + - Criticality of each application + +2. **Schema Analysis** + ```sql + -- Automated discovery script + SELECT + t.TABLE_SCHEMA, + t.TABLE_NAME, + c.COLUMN_NAME, + c.DATA_TYPE, + c.CHARACTER_MAXIMUM_LENGTH + FROM INFORMATION_SCHEMA.TABLES t + JOIN INFORMATION_SCHEMA.COLUMNS c + ON t.TABLE_NAME = c.TABLE_NAME + WHERE c.COLUMN_NAME LIKE '%CNPJ%' + AND c.DATA_TYPE IN ('bigint', 'numeric', 'int') + ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME; + ``` + +3. **Volume Estimation** + - Total records per table + - Size in GB + - Estimated migration time + +**Example output:** + +| Table | Column | Current Type | Records | Criticality | +|--------|--------|------------|-----------|-------------| +| Clients | CNPJ_Client | BIGINT | 8,000,000 | High | +| Suppliers | CNPJ_Supplier | NUMERIC(14) | 2,500,000 | Medium | +| Transactions | CNPJ_Payer | BIGINT | 90,000,000 | Critical | + +--- + +### Phase 2: Impact Analysis + +**Objective:** Map all dependencies and risks + +**Key analysis:** + +```sql +-- Identifies PKs and FKs involving CNPJ +SELECT + fk.name AS FK_Name, + tp.name AS Parent_Table, + cp.name AS Parent_Column, + tr.name AS Referenced_Table, + cr.name AS Referenced_Column +FROM sys.foreign_keys fk +INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id +INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id +INNER JOIN sys.columns cp ON fkc.parent_column_id = cp.column_id + AND fkc.parent_object_id = cp.object_id +INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id +INNER JOIN sys.columns cr ON fkc.referenced_column_id = cr.column_id + AND fkc.referenced_object_id = cr.object_id +WHERE cp.name LIKE '%CNPJ%' OR cr.name LIKE '%CNPJ%'; +``` + +**Risk Assessment:** + +- **High:** Tables with CNPJ as PK and >10M records +- **Medium:** Tables with FK to CNPJ +- **Low:** Tables without constraints + +--- + +### Phase 3: Migration Planning + +**Gradual migration strategy:** + +To avoid database locks, I designed a **phased commits** strategy: + +```sql +-- Strategy for large tables (>1M records) + +-- 1. Add new VARCHAR column +ALTER TABLE Clients +ADD CNPJ_Client_New VARCHAR(18) NULL; + +-- 2. Migration in batches (phased commits) +DECLARE @BatchSize INT = 100000; +DECLARE @RowsAffected INT = 1; + +WHILE @RowsAffected > 0 +BEGIN + UPDATE TOP (@BatchSize) Clients + SET CNPJ_Client_New = FORMAT(CNPJ_Client, '00000000000000') + WHERE CNPJ_Client_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + WAITFOR DELAY '00:00:01'; -- Pause between batches +END; + +-- 3. Remove constraints (PKs, FKs) +ALTER TABLE Clients DROP CONSTRAINT PK_Clients; + +-- 4. Rename columns +EXEC sp_rename 'Clients.CNPJ_Client', 'CNPJ_Client_Old', 'COLUMN'; +EXEC sp_rename 'Clients.CNPJ_Client_New', 'CNPJ_Client', 'COLUMN'; + +-- 5. Recreate constraints +ALTER TABLE Clients +ADD CONSTRAINT PK_Clients PRIMARY KEY (CNPJ_Client); + +-- 6. Remove old column (after validation) +ALTER TABLE Clients DROP COLUMN CNPJ_Client_Old; +``` + +**Why this approach?** + +- Avoids locking entire table +- Allows pausing/resuming migration +- Minimizes production impact +- Facilitates rollback if needed + +--- + +### Phases 4 & 5: Execution and Validation + +**Execution checklist:** + +- [ ] Complete database backup +- [ ] Execute migration scripts in batches +- [ ] Update applications (validations, masks) +- [ ] Integration testing +- [ ] Referential integrity validation +- [ ] Performance testing +- [ ] Coordinated go-live +- [ ] 24h post-migration monitoring + +--- + +## Sales Enablement: UX Presentation + +**Collaboration with UX Manager:** + +The company's UX manager created an **impactful visual presentation** of the CNPJ Fast process: + +**Presentation content:** +- Infographics of the 5-phase process +- Examples of time/cost estimates +- Use cases (insurance, banks, fintechs) +- Executive checklist +- Documentation templates + +**Result:** Presentation used by sales team for prospecting. + +--- + +## Results & Impact + +### Sales Achieved + +**Client 1: Insurance Company** +- Stack: ASP 3.0, VB6 components, .NET, microservices +- Scope: Complete legacy application migration +- Status: **Project sold** (execution by another team) +- Value: [Confidential] + +**Client 2: Collection Agency** +- Scope: Database migration (~100M records) +- Status: **Project sold and in execution** (by me) +- Particularity: Process was **restructured** to meet specific needs +- See complete case study: [CNPJ Migration - 100M Records](/cases/cnpj-migration-database) + +--- + +### Business Impact + +**2 projects sold** before first execution +**Replicable process** for new clients +**Positioning** as specialist in regulatory migrations +**Knowledge base** for future similar projects + +--- + +### Technical Impact + +**Tested methodology** in real scenarios +**Reusable documentation** (scripts, checklists, templates) +**Acceleration** of similar projects (from weeks to days) + +--- + +## Tech Stack + +`SQL Server` `Migration Strategy` `Process Design` `Regulatory Compliance` `ASP 3.0` `VB6` `.NET` `Microservices` `Batch Processing` `Database Optimization` + +--- + +## Key Decisions & Trade-offs + +### Why structured process? + +**Alternatives:** +1. Ad-hoc approach per project +2. Manual consulting without methodology +3. **Replicable and scalable process** + +**Justification:** +- Reduces Discovery time +- Standardizes deliveries +- Facilitates sales (ready presentation) +- Allows execution by different teams + +### Why separate into 5 phases? + +**Benefits:** +- Client can approve phase by phase +- Allows adjustments during process +- Facilitates risk management +- Incremental deliveries + +--- + +## Lessons Learned + +### 1. UX/Presentation Matters for Sales + +The visual presentation made by the UX manager was **crucial** to closing both contracts. Good technical process + poor presentation = no sales. + +### 2. Process Sells, Not Just Execution + +Creating a **documented methodology** has more commercial value than just offering "consulting hours." + +### 3. Each Client is Unique + +The client requested **process restructuring**. A good process should be: +- Structured enough to be replicable +- Flexible enough to customize + +### 4. Multidisciplinary Collaboration + +Working with UX manager (presentations) + sales team (sales) + technical (execution) = success. + +--- + +## Next Steps + +**Future opportunities:** + +1. **Expansion:** Offer CNPJ Fast to more sectors (banks, fintechs, retail) +2. **Product:** Transform into automated tool (SaaS) +3. **Training:** Enable clients' internal teams +4. **Evolution:** Adapt process for other regulatory migrations (PIX, Open Banking) + +--- + +**Result:** Structured methodology that became a sellable product, generating revenue before the first technical execution. + +[Want to implement CNPJ Fast in your company? Get in touch](#contact) diff --git a/Content/Cases/en/cnpj-migration-database.md b/Content/Cases/en/cnpj-migration-database.md new file mode 100644 index 0000000..ed08981 --- /dev/null +++ b/Content/Cases/en/cnpj-migration-database.md @@ -0,0 +1,469 @@ +--- +title: "Alphanumeric CNPJ Migration - 100 Million Records" +slug: "cnpj-migration-database" +summary: "Execution of massive CNPJ migration from numeric to alphanumeric in database with ~100M records, using phased commit strategy to avoid database locks." +client: "Collection Agency" +industry: "Collections & Financial Services" +timeline: "In execution" +role: "Database Architect & Tech Lead" +image: "" +tags: + - SQL Server + - Database Migration + - CNPJ + - Performance Optimization + - Batch Processing + - Big Data +featured: true +order: 4 +date: 2024-11-01 +seo_title: "Alphanumeric CNPJ Migration - 100M Records | Carneiro Tech" +seo_description: "Case study of massive CNPJ migration in database with 100 million records using phased commits and performance optimizations." +seo_keywords: "database migration, SQL Server, CNPJ, batch processing, performance optimization, phased commits" +--- + +## Overview + +A collection agency that works with transitory data databases (no proprietary software) needs to adapt its systems to the new Brazilian **alphanumeric CNPJ** format. + +**Main challenge:** Migrate ~**100 million records** in tables with `BIGINT` and `NUMERIC` columns to `VARCHAR`, without locking the production database. + +**Status:** Project in execution (migration script preparation). + +--- + +## Challenge + +### Massive Data Volume + +**Company context:** +- Collection agency (does not develop proprietary software) +- Works with **transitory data** (high turnover) +- SQL Server database with critical volume + +**Initial analysis revealed:** + +| Table | Column | Current Type | Records | Size | +|--------|--------|------------|-----------|---------| +| Debtors | CNPJ_Debtor | BIGINT | 8,000,000 | 60 GB | +| Transactions | CNPJ_Payer | NUMERIC(14) | 90,000,000 | 1.2 TB | +| Companies | CNPJ_Company | BIGINT | 2,500,000 | 18 GB | +| **TOTAL** | - | - | **~100,000,000** | **~1.3 TB** | + +**Identified problems:** + +1. **Tables with 8M+ rows** using `BIGINT` for CNPJ +2. **90 million records** in transactions table +3. **CNPJ as primary key** in some tables +4. **Foreign keys** relating multiple tables +5. **Impossibility of extended downtime** (24/7 operation) +6. **Disk space restrictions** (requires efficient strategy) + +--- + +## Strategic Decision: Phased Commits + +### Why NOT do ALTER COLUMN directly? + +**Naive approach (DOESN'T work):** + +```sql +-- NEVER DO THIS ON LARGE TABLES +ALTER TABLE Transactions +ALTER COLUMN CNPJ_Payer VARCHAR(18); +``` + +**Problems:** +- Locks entire table during conversion +- Can take hours/days on large tables +- Blocks all operations (INSERT, UPDATE, SELECT) +- Risk of timeout or failure mid-operation +- Complex rollback if something goes wrong + +--- + +### Chosen Strategy: Column Swap with Phased Commits + +**Based on previous experience**, I decided to use a gradual approach: + +``` +┌─────────────────────────────────────────────┐ +│ 1. Create new VARCHAR column at END │ +│ (fast operation, doesn't lock table) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 2. UPDATE in batches (phased commits) │ +│ - 100k records at a time │ +│ - Pause between batches (avoid lock) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 3. Remove PKs and FKs │ +│ (after 100% migrated) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 4. Rename columns (swap) │ +│ - CNPJ → CNPJ_Old │ +│ - CNPJ_New → CNPJ │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 5. Recreate PKs/FKs with new column │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 6. Validation and old column deletion │ +└─────────────────────────────────────────────┘ +``` + +**Why this approach?** + +**No complete table lock** (incremental operation) +**Can pause/resume** at any time +**Real-time progress monitoring** +**Simple rollback** (just drop new column) +**Minimizes production impact** (small commits) + +**Decision based on:** +- Previous experience with large volume migrations +- Knowledge of SQL Server locks +- Need for zero downtime + +**Note:** This decision was made **without consulting AI** - based purely on practical experience from previous projects. + +--- + +## Implementation Details + +### Phase 1: Create New Column + +```sql +-- Fast operation (metadata change only) +ALTER TABLE Transactions +ADD CNPJ_Payer_New VARCHAR(18) NULL; + +-- Add temporary index to speed up lookups +CREATE NONCLUSTERED INDEX IX_Temp_CNPJ_New +ON Transactions(CNPJ_Payer_New) +WHERE CNPJ_Payer_New IS NULL; +``` + +**Estimated time:** ~1 second (independent of table size) + +--- + +### Phase 2: Batch Migration (Core Strategy) + +```sql +-- Migration script with phased commits +DECLARE @BatchSize INT = 100000; -- 100k records per batch +DECLARE @RowsAffected INT = 1; +DECLARE @TotalProcessed INT = 0; +DECLARE @StartTime DATETIME = GETDATE(); + +WHILE @RowsAffected > 0 +BEGIN + BEGIN TRANSACTION; + + -- Update batch of 100k records not yet migrated + UPDATE TOP (@BatchSize) Transactions + SET CNPJ_Payer_New = RIGHT('00000000000000' + CAST(CNPJ_Payer AS VARCHAR), 14) + WHERE CNPJ_Payer_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + SET @TotalProcessed = @TotalProcessed + @RowsAffected; + + COMMIT TRANSACTION; + + -- Progress log + PRINT 'Processed: ' + CAST(@TotalProcessed AS VARCHAR) + ' rows. Batch: ' + CAST(@RowsAffected AS VARCHAR); + PRINT 'Elapsed time: ' + CAST(DATEDIFF(SECOND, @StartTime, GETDATE()) AS VARCHAR) + ' seconds'; + + -- Pause between batches (reduces contention) + WAITFOR DELAY '00:00:01'; -- 1 second between batches +END; + +PRINT 'Migration completed! Total rows: ' + CAST(@TotalProcessed AS VARCHAR); +``` + +**Configurable parameters:** + +- `@BatchSize`: 100k (balanced between performance and lock time) + - Too small = many transactions, overhead + - Too large = prolonged lock, production impact +- `WAITFOR DELAY`: 1 second (gives time for other queries to run) + +**Time estimates:** + +| Records | Batch Size | Estimated Time | +|-----------|------------|----------------| +| 8,000,000 | 100,000 | ~2-3 hours | +| 90,000,000 | 100,000 | ~20-24 hours | + +**Advantages:** +- Doesn't freeze application +- Other queries can run between batches +- Can pause (Ctrl+C) and resume later (WHERE NULL picks up where it left off) +- Real-time progress log + +--- + +### Phase 3: Constraint Removal + +```sql +-- Identifies all PKs and FKs involving the column +SELECT name +FROM sys.key_constraints +WHERE type = 'PK' + AND parent_object_id = OBJECT_ID('Transactions') + AND COL_NAME(parent_object_id, parent_column_id) = 'CNPJ_Payer'; + +-- Remove PKs +ALTER TABLE Transactions +DROP CONSTRAINT PK_Transactions_CNPJ; + +-- Remove FKs (tables that reference) +ALTER TABLE Payments +DROP CONSTRAINT FK_Payments_Transactions; +``` + +**Estimated time:** ~10 minutes (depends on how many constraints exist) + +--- + +### Phase 4: Column Swap (Renaming) + +```sql +-- Rename old column to _Old +EXEC sp_rename 'Transactions.CNPJ_Payer', 'CNPJ_Payer_Old', 'COLUMN'; + +-- Rename new column to original name +EXEC sp_rename 'Transactions.CNPJ_Payer_New', 'CNPJ_Payer', 'COLUMN'; + +-- Change to NOT NULL (after validating 100% populated) +ALTER TABLE Transactions +ALTER COLUMN CNPJ_Payer VARCHAR(18) NOT NULL; +``` + +**Estimated time:** ~1 second (metadata change) + +--- + +### Phase 5: Constraint Recreation + +```sql +-- Recreate PK with new VARCHAR column +ALTER TABLE Transactions +ADD CONSTRAINT PK_Transactions_CNPJ +PRIMARY KEY CLUSTERED (CNPJ_Payer); + +-- Recreate FKs +ALTER TABLE Payments +ADD CONSTRAINT FK_Payments_Transactions +FOREIGN KEY (CNPJ_Payer) REFERENCES Transactions(CNPJ_Payer); +``` + +**Estimated time:** ~30-60 minutes (depends on volume) + +--- + +### Phase 6: Validation and Cleanup + +```sql +-- Validate that 100% was migrated +SELECT COUNT(*) +FROM Transactions +WHERE CNPJ_Payer IS NULL OR CNPJ_Payer = ''; + +-- Validate referential integrity +DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS; + +-- If everything OK, remove old column +ALTER TABLE Transactions +DROP COLUMN CNPJ_Payer_Old; + +-- Remove temporary index +DROP INDEX IX_Temp_CNPJ_New ON Transactions; +``` + +--- + +## CNPJ Fast Process Customization + +### Differences vs. Original Process + +The original **CNPJ Fast** process was **restructured** for this client: + +**Main changes:** + +| Aspect | Original CNPJ Fast | Client (Customized) | +|---------|-------------------|---------------------| +| **Focus** | Applications + DB | DB only (no proprietary software) | +| **Discovery** | App inventory | Schema analysis only | +| **Execution** | Multiple applications | Massive SQL scripts | +| **Batch Size** | 50k-100k | 100k (optimized for volume) | +| **Monitoring** | Manual + tools | Real-time SQL logs | +| **Rollback** | Complex process | Simple (DROP COLUMN) | + +**Reason for restructuring:** +- Client has no proprietary applications (only consumes data) +- 100% focus on database optimization +- Much larger volume than typical cases (100M vs ~10M) + +--- + +## Tech Stack + +`SQL Server` `T-SQL` `Batch Processing` `Performance Tuning` `Database Optimization` `Migration Scripts` `Phased Commits` `Index Optimization` `Constraint Management` + +--- + +## Key Decisions & Trade-offs + +### Why 100k per batch? + +**Performance tests:** + +| Batch Size | Time/Batch | Lock Duration | Contention | +|------------|-------------|---------------|-----------| +| 10,000 | 2s | Low | Minimal | +| 50,000 | 8s | Medium | Acceptable | +| **100,000** | 15s | **Medium** | **Balanced** | +| 500,000 | 90s | High | Production impact | +| 1,000,000 | 180s | Very high | Unacceptable | + +**Choice:** 100k offers best balance between performance and impact. + +--- + +### Why create column at END? + +**SQL Server internals:** +- Add column at end = metadata change (fast) +- Add in middle = page rewrite (slow) +- For large tables, position matters + +--- + +### Why WAITFOR DELAY of 1 second? + +**Without delay:** +- Batch processing consumes 100% of I/O +- Application queries slow down +- Lock escalation may occur + +**With 1s delay:** +- Other queries have window to execute +- Distributed I/O +- User experience preserved + +**Trade-off:** Migration takes +1s per batch (~25% slower), but system remains responsive. + +--- + +## Current Status & Next Steps + +### Current Status (December 2024) + +**Preparation Phase:** +- Discovery complete (100M records identified) +- Migration scripts developed +- Tests in staging environment +- Performance validation in progress +- Awaiting production maintenance window + +### Next Steps + +1. **Complete production backup** +2. **Production execution** (24/7 environment) +3. **Real-time monitoring** during migration +4. **Post-migration validation** (integrity, performance) +5. **Lessons learned documentation** + +--- + +## Lessons Learned (So Far) + +### 1. Previous Experience is Gold + +Decision to use phased commits came from **practical experience** in previous projects, not from documentation or AI. + +**Similar previous situations:** +- E-commerce data migration (50M records) +- Encoding conversion (UTF-8 in 100M+ rows) +- Historical table partitioning + +--- + +### 2. "Measure Twice, Cut Once" + +Before executing in production: +- Exhaustive tests in staging +- Scripts validated and reviewed +- Rollback tested +- Time estimates confirmed + +**Preparation time:** 3 weeks +**Execution time:** Estimated at 48 hours + +**Ratio:** 10:1 (preparation vs execution) + +--- + +### 3. Customization > One-Size-Fits-All + +The original CNPJ Fast process needed to be **restructured** for this client. + +**Lesson:** Processes should be: +- Structured enough to repeat +- Flexible enough to adapt + +--- + +### 4. Monitoring is Crucial + +Scripts with **detailed progress logs** allow: +- Estimate remaining time +- Identify bottlenecks +- Pause/resume with confidence +- Report status to stakeholders + +```sql +-- Log example +Processed: 10,000,000 rows. Batch: 100,000 +Elapsed time: 3600 seconds (10% complete, ~9h remaining) +``` + +--- + +## Performance Optimizations + +### Optimizations Implemented + +1. **Temporary index WHERE NULL** + - Speeds up lookup of unmigrated records + - Removed after completion + +2. **Optimized batch size** + - Balanced between performance and lock time + +3. **Transaction log management** + ```sql + -- Check log growth + DBCC SQLPERF(LOGSPACE); + + -- Adjust recovery model (if allowed) + ALTER DATABASE MyDatabase SET RECOVERY SIMPLE; + ``` + +4. **Execution during low-load hours** + - Overnight maintenance window + - Weekend (if possible) + +--- + +**Expected result:** Migration of 100 million records in ~48 hours, without significant downtime and with possibility of fast rollback. + +[Need to migrate massive data volumes? Get in touch](#contact) diff --git a/Content/Cases/en/industrial-learning-platform.md b/Content/Cases/en/industrial-learning-platform.md new file mode 100644 index 0000000..cef11bb --- /dev/null +++ b/Content/Cases/en/industrial-learning-platform.md @@ -0,0 +1,588 @@ +--- +title: "Industrial Training Platform - From Wireframes to Complete System" +slug: "industrial-learning-platform" +summary: "Solution Design for microlearning platform in industrial gas company. Identification of critical unmapped requirements (admin, registrations, exports) before client presentation, avoiding rework and ensuring real usability." +client: "Industrial Gas Company" +industry: "Industrial & Manufacturing" +timeline: "4 months" +role: "Solution Architect & Tech Lead" +image: "" +tags: + - Solution Design + - EdTech + - Learning Platform + - Requirements Analysis + - Tech Lead + - User Stories + - .NET + - Product Design +featured: true +order: 5 +date: 2024-06-01 +seo_title: "Industrial Training Platform - Solution Design" +seo_description: "Case study of Solution Design for microlearning platform, identifying critical requirements before client presentation and leading development to production." +seo_keywords: "solution design, learning platform, microlearning, requirements analysis, tech lead, industrial training" +--- + +## Overview + +Industrial gas company requests platform to train employees using **microlearning** methodology (short and objective content). + +**Initial requirement:** "We just want the structure - track, microlearning, test question and score." + +**Problem:** Incomplete specification that would result in a system **impossible to use** (no way to register content, no administrators, no export of results). + +**Solution:** Critical requirements analysis **before client presentation**, identifying functional gaps and proposing complete solution. + +--- + +## Challenge + +### Beautiful Wireframes, Incomplete Functionality + +**Initial situation:** + +UX created beautiful wireframes showing: +- Learning tracks +- Microlearnings (video/text + image) +- Test questions (multiple choice) +- Score per employee + +**Identified problem:** + +Nobody (client, UX, commercial) thought about: + +**How does content enter the system?** +- Who registers tracks? +- Who creates microlearnings? +- Who writes questions? +- Manual interface or import? + +**Who manages the system?** +- Is there admin concept? +- Can HR create admins? +- Can area manager see only their team? + +**How does data leave the system?** +- HR needs reports +- Compliance needs evidence +- How to export data? +- Format: Excel? PDF? API? + +**Real risk:** + +If we developed exactly what was requested: +- System would work technically +- **But would be completely unusable** +- Client would have to pay for rework to include basic CRUD +- Rework + additional cost + frustration + +--- + +## Solution Design Process + +### Step 1: Critical Analysis (Before Presentation) + +**Action taken:** Called meeting with UX **before** presenting to client. + +**Points raised:** + +**"How does the first content enter the system?"** +- UX: "Ah... we didn't think about that. Will you populate the database?" +- Me: "And when client wants to add new track? Will we modify production database?" + +**"Who is the system owner?"** +- UX: "HR, I imagine." +- Me: "Just one person? What if they leave the company? How do they delegate?" + +**"Did HR ask for reports?"** +- UX: "It wasn't mentioned in the briefing." +- Me: "HR always needs reports. It's for compliance (NR, ISO)." + +--- + +### Step 2: Identified Functional Requirements + +I proposed 4 additional **essential** modules: + +#### 1. Administration System + +**Features:** +- Standard user: Only takes training +- Admin user: Manages content + sees reports +- Admin can promote other users to admin +- Access control (general admin vs area admin) + +**Why it's critical:** +System is static without this (content never updates). + +--- + +#### 2. Content CRUD + +**a) Track Registration:** +- Track name +- Description +- Microlearning order +- Active/inactive track (allows unpublishing) + +**b) Microlearning Registration:** +- Title +- Type: Simple text (2 paragraphs) OR Video +- Image upload (if text) +- Video URL (if video) +- Order within track + +**c) Question Registration:** +- Question (text) +- 3 answer options: + - "Great" (green) + - "So-so" (yellow) + - "Poor" (red) +- Points per answer (e.g., 10, 5, 0 points) +- Custom feedback per answer + +**Why it's critical:** +Client needs to update content without calling dev/DBA. + +--- + +#### 3. Data Export + +**Features:** +- Export to Excel (.xlsx) +- Filters: + - By period (start/end date) + - By track + - By employee + - By area/department +- Exported columns: + - Employee name + - ID number + - Completed track + - Total score + - Completion date + - Individual answers (for audit) + +**Why it's critical:** +HR needs to evidence training for: +- Regulatory Norms (NR-13, NR-20 - flammable gases) +- ISO audits +- Labor lawsuits + +--- + +#### 4. User Management + +**Features:** +- Import employees (CSV/Excel upload) +- Manual registration +- Activate/deactivate users +- Assign mandatory tracks by area +- Pending notifications + +**Why it's critical:** +Company has 500+ employees, manual registration is unfeasible. + +--- + +### Step 3: Client Presentation + +**Approach:** + +1. Showed UX wireframes (beautiful interface) +2. Asked: "How will you register the first track?" +3. Client: "Ah... good question. We hadn't thought about that." +4. Presented the 4 additional modules +5. Client: "Makes total sense! Without this we can't use it." + +**Result:** +- Proposal approved **with additional modules** +- Adjusted scope (timeline + budget) +- Zero future rework +- Client recognized added value + +--- + +## Implementation + +### My Role in the Project + +**1. Solution Architect** +- Identification of non-functional requirements +- Architecture design (modules, integrations) +- Technology definition + +**2. Tech Lead** +- Technical team leadership (3 devs) +- Code review +- Code standards definition +- Technical risk management + +**3. Technical Product Owner** +- Creation of complete **user stories** +- Backlog prioritization +- Continuous refinement with client + +--- + +### Chosen Tech Stack + +**Backend:** +- `.NET 7` - REST APIs +- `Entity Framework Core` - ORM +- `SQL Server` - Database +- `ClosedXML` - Excel generation + +**Frontend:** +- `React` - Web interface +- `Material-UI` - Components +- `React Player` - Video player +- `Chart.js` - Progress charts + +**Infrastructure:** +- `Azure App Service` - Hosting +- `Azure Blob Storage` - Video/image storage +- `Azure SQL Database` - Managed database + +--- + +### Created User Stories + +I wrote **32 user stories** covering all flows. Examples: + +**US-01: Register Track (Admin)** +``` +As system administrator +I want to register a new training track +So that employees can take the courses + +Acceptance criteria: +- Admin accesses "Tracks" menu → "New Track" +- Fills in: Name, Description, Status (Active/Inactive) +- Can add existing microlearnings to track +- Defines microlearning order (drag & drop) +- System validates mandatory fields +- Saves and displays success message +``` + +**US-15: Complete Microlearning (Employee)** +``` +As employee +I want to complete a microlearning from my track +To learn about the topic and earn points + +Acceptance criteria: +- Employee accesses assigned track +- Sees list of microlearnings (uncompleted first) +- Clicks microlearning → opens screen with: + - Text (2 paragraphs) + Image OR + - Embedded video player +- "Continue" button appears after: + - 30s (if text) + - End of video (if video) +- Marks microlearning as seen +- Test question appears automatically +``` + +**US-22: Export Results (Admin)** +``` +As administrator +I want to export training results to Excel +To generate compliance and audit reports + +Acceptance criteria: +- Admin accesses "Reports" → "Export" +- Selects filters (period, track, area) +- Clicks "Generate Excel" +- System processes and downloads .xlsx file +- Excel contains columns: Name, ID, Track, Points, Date, Answers +- Readable format (bold headers, auto-adjusted columns) +``` + +--- + +## Key Features Implemented + +### 1. Gamified Scoring System + +**Mechanics:** +- Each question worth points (configurable) +- "Great" answer: 10 points +- "So-so" answer: 5 points +- "Poor" answer: 0 points + +**Employee dashboard:** +- Total score +- Ranking (optional, configurable) +- Badges for completed tracks +- Visual progress (% bar) + +**Why it works:** +Factory floor employees engage more with gamification elements. + +--- + +### 2. Adaptive Microlearning + +**Content types:** + +**Text + Image:** +- 2 paragraphs (max 300 words) +- 1 illustrative image +- Ideal for: Procedures, norms, concepts + +**Video:** +- Short videos (2-5 min) +- Embedded player (YouTube/Vimeo or upload) +- Ideal for: Demonstrations, equipment operations + +**Why microlearning?** +- Employees complete during breaks (10-15min) +- Short content = higher retention +- Facilitates updates (vs long courses) + +--- + +### 3. Delegated Administration System + +**Hierarchy:** + +``` +General Admin (HR) + ↓ can promote +Area Admin (Managers) + ↓ can view only +Employees from their area +``` + +**Permissions:** +- General admin: Creates tracks, promotes admins, sees all data +- Area admin: Sees only their area reports +- Employee: Only takes training + +**Audit:** +- Logs of who created/edited each content +- History of admin promotions +- SOX/ISO compliance + +--- + +### 4. Export for Compliance + +**Generated Excel format:** + +| ID | Name | Area | Track | Completion Date | Points | Status | +|-----------|------|------|--------|----------------|--------|--------| +| 1001 | John Silva | Production | NR-20 Safety | 11/15/2024 | 95/100 | Approved | +| 1002 | Mary Santos | Logistics | Gas Handling | 11/14/2024 | 78/100 | Approved | + +**Additional sheet: Answer Details** +- Allows audit: "Did employee X answer question Y correctly?" +- Evidence for labor lawsuits +- NR-13/NR-20 compliance + +--- + +## Results & Impact + +### System in Production + +**Current status:** In use for 4+ months + +**Adoption metrics:** +- 500+ registered employees +- 12 active tracks +- 150+ created microlearnings +- 8,000+ completed training sessions +- 100+ exported reports (compliance) + +**Completion rate:** 87% (industry average: 45%) + +--- + +### Client Impact + +**Before:** +- In-person training (high cost, difficult scheduling) +- Paper evidence (losses, difficult audit) +- Difficulty updating content + +**After:** +- Asynchronous training (employee completes when possible) +- Digital evidence (facilitated compliance) +- HR updates content without calling IT +- 70% reduction in training cost + +**Client feedback:** +> "If we had implemented only what we initially requested, the system would be useless. The pre-analysis saved the project." + +--- + +### Solution Design Value + +**ROI of pre-sale analysis:** + +**Scenario A (without analysis):** +1. Develop interface only (2 months) +2. Client tests and realizes CRUD is missing (1 month later) +3. Rework to add modules (2+ months) +4. **Total: 5+ months + client frustration** + +**Scenario B (with analysis - what we did):** +1. Identify requirements beforehand (1 week) +2. Approve complete scope (1 week) +3. Develop correct solution (4 months) +4. **Total: 4 months + satisfied client** + +**Savings:** 1+ month of rework + opportunity cost + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React` `Material-UI` `Azure App Service` `Azure Blob Storage` `ClosedXML` `Chart.js` `User Stories` `Solution Design` `Tech Lead` + +--- + +## Key Decisions & Trade-offs + +### Why not use ready-made LMS? (Moodle, Canvas) + +**Alternatives considered:** +1. Moodle (open-source, free) +2. Totara/Canvas (corporate LMS) +3. **Custom development** + +**Justification:** +- Generic LMS: Unnecessary complexity (forums, wikis, etc) +- Client wants **only microlearning** (simplicity) +- LMS license cost > custom dev cost +- Client AD/SSO integration (easier custom) +- UX optimized for factory floor (mobile-first, touch) + +--- + +### Why 3 answer options (vs 4-5)? + +**Choice:** Green (Great), Yellow (So-so), Red (Poor) + +**Justification:** +- Factory floor employees prefer simplicity +- Universal colors (traffic light) +- Avoids choice paradox (fewer options = more engagement) +- Clearer gamification + +--- + +### Why Excel Export (vs Online Dashboard)? + +**Both were implemented**, but Excel is critical for: + +**Regulatory compliance:** +- Auditors ask for "digitally signed file" +- NR-13/NR-20 require physical evidence +- Labor lawsuits accept Excel + +**Flexibility:** +- HR can do custom analyses in Excel +- Combine with other data sources +- Presentations for board + +--- + +## Lessons Learned + +### 1. Solution Design Prevents Rework + +**Lesson:** 1 week of critical analysis saves months of rework. + +**Application:** +- Always question incomplete specifications +- Think about "the day after" (who manages this in production?) +- Involve client in requirements discussions + +--- + +### 2. UX ≠ Functional Requirements + +**Lesson:** Beautiful wireframes don't replace requirements analysis. + +**UX focuses on:** How user **uses** the system +**Solution Design focuses on:** How system **works** end-to-end + +Both are necessary and complementary. + +--- + +### 3. Asking "How?" is More Important than "What?" + +**Client says:** "I want tracks and microlearnings" +**Solution Designer asks:** "How does the first track enter the system?" + +This simple question revealed 4 missing modules. + +--- + +### 4. Well-Written User Stories Accelerate Development + +**Investment:** 2 weeks writing 32 detailed user stories + +**Return:** +- Devs knew exactly what to build +- Zero ambiguity +- Very few bugs (clear requirements) +- Client validated stories before coding + +**Lesson:** Time spent planning reduces development time. + +--- + +### 5. Compliance is Hidden Requirement + +**In regulated industries** (health, energy, chemical), there will always be: +- Audit needs +- Evidence exports +- Logs of who did what + +**Lesson:** Ask about compliance **before**, not after. + +--- + +## Challenges Overcome + +| Challenge | Solution | Result | +|---------|---------|-----------| +| Incomplete specification | Pre-sale critical analysis | Correct scope from start | +| Client without technical knowledge | User stories in business language | Client validated requirements | +| Employees with low digital literacy | Simplified UX (3 buttons, colors) | 87% completion rate | +| NR-13/NR-20 compliance | Excel export with details | Approved in 2 audits | +| Managing 500+ users | CSV import + admin hierarchy | Onboarding in 1 week | + +--- + +## Next Steps (Future Roadmap) + +**Planned features:** + +1. **Push Notifications** + - Remind employee of pending training + - Notify of new mandatory track + +2. **Native Mobile App** + - Offline-first (downloaded videos) + - Employees without computer + +3. **Digital Certificates** + - Digitally signed PDF + - QR code for validation + +4. **Data Intelligence** + - Which microlearnings have most errors? + - Identify knowledge gaps by area + +--- + +**Result:** Functional system in production, satisfied client, zero rework - all because 1 week was invested in **thinking before coding**. + +[Need critical requirements analysis? Get in touch](#contact) diff --git a/Content/Cases/en/pharma-digital-transformation.md b/Content/Cases/en/pharma-digital-transformation.md new file mode 100644 index 0000000..6de611e --- /dev/null +++ b/Content/Cases/en/pharma-digital-transformation.md @@ -0,0 +1,577 @@ +--- +title: "Pharma Lab Digital MVP - From Zero to Production" +slug: "pharma-digital-transformation" +summary: "Squad leadership in greenfield project for pharmaceutical lab, building digital platform MVP with complex integrations (Salesforce, Twilio, official APIs) starting from absolute zero - no Git, no servers, no infrastructure." +client: "Pharmaceutical Laboratory" +industry: "Pharmaceutical & Healthcare" +timeline: "4 months (2-month planned delay)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - MVP + - Digital Transformation + - .NET + - React + - Next.js + - Salesforce + - Twilio + - SQL Server + - Tech Lead + - Greenfield +featured: true +order: 3 +date: 2023-03-01 +seo_title: "Pharma Digital MVP - Digital Transformation from Scratch" +seo_description: "Case study of building digital MVP for pharmaceutical lab from scratch: no Git, no infrastructure, with complex integrations and successful delivery." +seo_keywords: "MVP, digital transformation, pharma, .NET, React, Next.js, Salesforce, greenfield project, tech lead" +--- + +## Overview + +Pharmaceutical laboratory at the **beginning of digital transformation** hires consulting firm to build discount platform for prescribing physicians, starting from WordPress prototype. + +**Unique challenge:** Start greenfield project in company **without basic development infrastructure** - no Git, no provisioned servers, no defined processes. + +**Context:** Project executed in multi-squad environment. **Successful production delivery** despite initial infrastructure challenges, with controlled 2-month delay. + +--- + +## Challenge + +### Digital Transformation... Starting from Absolute Zero + +**Company initial state (2023):** + +**No Git/versioning** +- Code only on local machines +- Non-existent history +- Impossible collaboration + +**No provisioned servers** +- Non-existent development environment +- Staging not configured +- Production not prepared + +**No development processes** +- No CI/CD +- No code review +- No structured task management + +**No experienced internal technical team** +- Team unfamiliar with modern stacks +- First contact with React, REST APIs +- Inexperience with complex integrations + +**Technical starting point:** +- Functional prototype in **WordPress** +- Content and texts already approved +- UX/UI defined +- Business rules documented (partially) + +--- + +### Required Complex Integrations + +The MVP needed to integrate with multiple external systems: + +1. **Salesforce** - Discount order registration +2. **Twilio** - SMS for login validation (2FA) +3. **Official physician API** - CRM validation + professional data +4. **Interplayers** - Discount record sending by CPF +5. **WordPress** - Content reading (headless CMS) +6. **SQL Server** - Data persistence + +**Additional complexity:** +- Different credentials/environments per integration +- Varying SLAs (Twilio critical, WordPress tolerant) +- Provider-specific error handling +- LGPD compliance (sensitive physician data) + +--- + +## Solution Architecture + +### Strategy: Start Small, Build Solid + +**Initial decision:** Explain to the team the process we would follow, establishing foundations before coding. + +### Phase 1: Basic Infrastructure Setup (Weeks 1-2) + +Even without provisioned servers, I started essential setup: + +**Git & Versioning:** +```bash +# Structured repository from day 1 +git init +git flow init # Defined branch strategy + +# Monorepo structure +/ +├── frontend/ # Next.js + React +├── backend/ # .NET APIs +├── cms-adapter/ # WordPress integration +└── docs/ # Architecture and ADRs +``` + +**Process explained to team:** +1. Everything in Git (atomic commits, descriptive messages) +2. Feature branches (never commit directly to main) +3. Mandatory code review (2 approvals) +4. CI/CD prepared (for when servers are ready) + +**Local environments first:** +- Docker Compose for local development +- External API mocks (until credentials arrive) +- Local SQL Server with data seeds + +--- + +### Phase 2: Modern & Decoupled Architecture + +``` +┌─────────────────────────────────────────────────────┐ +│ FRONTEND (Next.js + React) │ +│ - SSR for SEO │ +│ - Client-side for interactivity │ +│ - API consumption │ +└────────────┬────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ BACKEND APIs (.NET 7) │ +│ - REST APIs │ +│ - Authentication/Authorization │ +│ - Business logic │ +│ - Orchestration layer │ +└────┬────┬────┬────┬────┬─────────────────────────┬──┘ + │ │ │ │ │ │ + ▼ ▼ ▼ ▼ ▼ ▼ +┌────────┐ ┌──────┐ ┌──────┐ ┌────────┐ ┌────────┐ ┌──────────┐ +│Salesf. │ │Twilio│ │CRM │ │Interpl.│ │WordPr. │ │SQL Server│ +│ │ │ │ │API │ │ │ │(CMS) │ │ │ +└────────┘ └──────┘ └──────┘ └────────┘ └────────┘ └──────────┘ +``` + +**Chosen stack:** + +**Frontend:** +- `Next.js 13` - SSR, routing, optimizations +- `React 18` - Components, hooks, context +- `TypeScript` - Type safety +- `Tailwind CSS` - Modern styling + +**Backend:** +- `.NET 7` - REST APIs +- `Entity Framework Core` - ORM +- `SQL Server 2019` - Database +- `Polly` - Resilience patterns (retry, circuit breaker) + +**Why Next.js instead of keeping WordPress?** +- Performance (SSR vs monolithic PHP) +- Optimized SEO (critical for pharma) +- Modern experience (SPA when needed) +- Scalability +- WordPress kept only as CMS (headless) + +--- + +### Phase 3: Integrations (Project Core) + +#### 1. Salesforce - Campaigns and Order Registration + +**Implemented solution:** + +Salesforce was configured to manage two main functionalities: + +**a) Discount campaigns:** +- Marketing configures campaigns in Salesforce (medication X, discount Y%, period) +- Backend queries active campaigns via API +- Frontend (Next.js) displays available discount percentage based on: medication + active campaign + +**b) Order registration:** +- User informs: physician CRM, state, patient CPF, medication +- System validates data (real CRM via official API, valid CPF) +- Percentage calculated automatically (Salesforce campaigns + CMS rules) +- Order registered in Salesforce with all data (LGPD compliance) + +**Overcome technical challenges:** +- OAuth2 authentication with automatic refresh token +- Rate limiting (Salesforce has API/day limits) +- Retry logic for transient failures (Polly) +- CPF masking for logs (LGPD) + +--- + +#### 2. Twilio - SMS Authentication (2FA) + +**Implemented solution:** + +Two-factor authentication system to ensure security: + +**Login flow:** +1. User enters phone number +2. Backend generates 6-digit code (valid for 5 minutes) +3. SMS sent via Twilio ("Your code: 123456") +4. User enters code in frontend +5. Backend validates code + expiration timestamp +6. JWT token issued after successful validation + +**Compliance and audit:** +- Phone numbers masked in logs (LGPD) +- Complete audit (who, when, which SMS) +- Delivery rate: 99.8% + +--- + +#### 3. Official Physician API (Regional Medical Council) + +**Implemented solution:** + +Automatic physician validation via official medical council API: + +**Performed validations:** +- CRM exists and is active in council +- Physician name matches informed CRM +- Specialty is allowed (lab business rule) +- State corresponds to registration state + +**Optimizations:** +- 24-hour cache to reduce official API calls +- Fallback if API is down (notifies admin) +- Automatic retry for transient failures + +**Why this matters:** +Ensures only real and active physicians can prescribe discounts, avoiding fraud. + +--- + +#### 4. WordPress as Headless CMS + +**Implemented solution:** + +Marketing continues managing content in WordPress (familiar), but frontend is modern Next.js. + +**Architecture:** +- WordPress: Manages texts, images, campaign rules +- WordPress REST API: Exposes content via JSON +- Next.js: Consumes API and renders with SSR (SEO optimized) + +**Benefits:** +- Marketing doesn't need to learn new tool +- Modern frontend (performance, UX) +- Optimized SEO (Server-Side Rendering) +- Clear separation of responsibilities (content vs code) + +--- + +### Phase 4: Resilience & Error Handling + +With multiple external integrations, failures are inevitable. The solution was to implement **resilience patterns** using Polly library (.NET): + +**Implemented patterns:** + +**1. Retry** +- If Salesforce/Twilio/CRM API fail, system automatically retries 2-3x +- Wait grows exponentially (1s, 2s, 4s) to avoid overload +- Only transient errors (timeout, 503) are retried + +**2. Circuit Breaker** +- If service fails 5x in a row, "opens circuit" for 30s +- During 30s, doesn't try anymore (avoids wasting resources) +- After 30s, tries again (may have recovered) + +**3. Timeout** +- Each integration has maximum response time +- Avoids indefinitely stuck requests + +**4. Fallback (Plan B)** +- Salesforce down: Order goes to queue, processes later +- Twilio down: Alert administrator via email +- CRM API down: Uses cache (24h old data) +- WordPress down: Displays pre-loaded static content + +**Strategies per integration:** + +| Integration | Retry | Circuit Breaker | Timeout | Plan B | +|----------|-------|-----------------|---------|----------| +| Salesforce | 3x (exponential) | 5 failures/30s | 10s | Retry queue | +| Twilio | 2x (linear) | 3 failures/60s | 5s | Admin alert | +| CRM API | 3x (exponential) | No | 15s | Cache | +| WordPress | No | No | 3s | Static content | + +**Production result:** +- Salesforce had maintenance (1h) → System continued working (queue processed later) +- Twilio had instability → Automatic retry resolved 95% of cases +- Zero downtime perceived by users + +--- + +## Overcoming Infrastructure Challenges + +### Problem: Servers Not Provisioned + +**Temporary solution:** +1. 100% local development (Docker Compose) +2. External service mocks (when credentials delayed) +3. CI/CD prepared but not active (awaiting infra) + +**When servers arrived (week 6):** +- Deploy in 2 hours (already prepared) +- Zero surprises (everything tested locally) +- Smooth rollout + +--- + +### Problem: Delayed Integration Credentials + +**Impact:** Twilio and Salesforce took 3 weeks to be provisioned. + +**Solution:** Create "mock" (simulated) versions of each integration: +- Twilio mock: Logs instead of sending real SMS +- Salesforce mock: Saves order to local JSON file +- CRM API mock: Returns fictional physician data + +**How it works:** +- Development environment: Uses mocks (no credentials needed) +- Production environment: Uses real integrations (when credentials arrive) +- Automatic switch based on configuration + +**Result:** Team stayed 100% productive for 3 weeks, testing complete flows without depending on credentials. + +--- + +### Problem: Team Inexperienced with Modern Stack + +**Context:** Team had no experience with React, TypeScript, modern .NET Core, REST APIs. + +**Enablement approach:** + +**1. Pair Programming (1h/day per developer)** +- Tech lead works alongside dev +- Screen sharing + real-time explanation +- Dev writes code, tech lead guides + +**2. Educational Code Review** +- Not just "approve" or "reject" +- Comments explain the **why** of each suggestion +- Example: "Always handle request errors! If API crashes, user needs to know what happened." + +**3. Living Documentation** +- ADRs (Architecture Decision Records): Why did we choose X and not Y? +- READMEs: How to run, test, deploy +- Onboarding guide: From zero to first feature + +**4. Weekly Live Coding (2h)** +- Tech lead solves real problem live +- Team observes thinking process +- Q&A at end + +**Result:** +- After 4 weeks, team was autonomous +- Code quality consistently increased +- Devs started doing code review among themselves (peer review) + +--- + +## Results & Impact + +### Successful Delivery Despite Challenges + +**Context:** Program with multiple squads working in parallel. + +**Achieved result:** +- **MVP delivered to production successfully** +- Controlled 2-month delay (significantly less than other program initiatives) +- All integrations working as planned +- Zero critical bugs in production (first week) + +**Why was delivery successful?** + +1. **Anticipated setup** - Git, processes, local Docker from day 1 +2. **Strategic mocks** - Team wasn't blocked waiting for infra +3. **Solid architecture** - Resilience from the start +4. **Continuous upskilling** - Team learned by doing +5. **Proactive communication** - Risks reported early + +--- + +### MVP Metrics + +**Performance:** +- Loading time: <2s (95th percentile) +- Lighthouse score: 95+ (mobile) +- SSL A+ rating + +**Integrations:** +- Salesforce: 100% orders synchronized +- Twilio: 99.8% delivery rate +- CRM API: 10k validations/day (average) +- SQL Server: 50k records/month + +**Adoption:** +- 2,000+ registered physicians (first 3 months) +- 15,000+ processed discount orders +- 4.8/5 satisfaction (internal survey) + +--- + +### Client Impact + +**Digital transformation initiated:** +- Git implemented and adopted +- Established development processes +- Internal team enabled in modern stacks +- Cloud infrastructure configured (Azure) +- Evolution roadmap defined + +**Foundation for future projects:** +- Architecture served as reference for other initiatives +- Documented code patterns (coding standards) +- Reused CI/CD pipelines + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React 18` `Next.js 13` `TypeScript` `Tailwind CSS` `Salesforce API` `Twilio` `WordPress REST API` `Docker` `Polly` `OAuth2` `JWT` `LGPD Compliance` + +--- + +## Key Decisions & Trade-offs + +### Why Next.js instead of pure React? + +**Requirements:** +- Critical SEO (pharma needs to rank) +- Performance (physicians use mobile) +- Dynamic content (WordPress) + +**Next.js offers:** +- SSR out-of-the-box +- API routes (BFF pattern) +- Automatic optimizations (image, fonts) +- Simplified deploy (Vercel, Azure) + +--- + +### Why keep WordPress? + +**Alternatives considered:** +1. Migrate content to database + custom CMS (time) +2. Strapi/Contentful (costs + learning curve) +3. **WordPress headless** (best trade-off) + +**Advantages:** +- Marketing team already knows how to use +- Approved content was already there +- WordPress REST API is solid +- Zero cost (already running) + +--- + +### Why .NET 7 instead of Node.js? + +**Context:** Client had preference for Microsoft stack. + +**Additional benefits:** +- Superior performance (vs Node in APIs) +- Native type safety (C#) +- Entity Framework (mature ORM) +- Easy Azure integration (future deploy) +- Client team had familiarity + +--- + +## Lessons Learned + +### 1. Infrastructure Delayed? Prepare Alternatives + +Don't wait for servers/credentials to start: +- Local Docker is your friend +- Mocks allow progress +- CI/CD can be prepared before having where to deploy + +**Lesson:** Control what you can control. + +--- + +### 2. Processes > Tools + +Even without corporate Git, I established: +- Branching strategy +- Code review +- Commit conventions +- Documentation standards + +**Result:** When tools arrived, team already knew how to use them. + +--- + +### 3. Upskilling is Investment, Not Cost + +Pair programming and code reviews took time, but: +- Team became autonomous faster +- Code quality increased +- Natural knowledge sharing +- Simplified onboarding of new devs + +--- + +### 4. Resilience from the Start + +Implementing Polly (retry, circuit breaker) at the start saved in production: +- Twilio had instability (resolved automatically) +- Salesforce had maintenance (queue worked) +- CRM API had slowness (cache mitigated) + +**Lesson:** Don't leave resilience for "later". Failures will happen. + +--- + +### 5. Clear Risk Communication + +I reported weekly: +- Blockers (infrastructure, credentials) +- Risks (deadlines, dependencies) +- Alternative solutions (mocks, workarounds) + +**Result:** Stakeholders knew exact status and had no surprises. + +--- + +## Challenges & How They Were Overcome + +| Challenge | Impact | Solution | Result | +|---------|---------|---------|-----------| +| No Git | Total blocker | Local setup + GitLab Cloud | Team productive day 1 | +| No servers | No dev environment | Local Docker Compose | Complete local dev/test | +| Delayed credentials | Integration blocked | Mock services | Progress without blocker | +| Inexperienced team | Low quality code | Pair prog + Code review | Ramp-up in 4 weeks | +| Multiple integrations | High complexity | Polly + patterns | Zero prod downtime | + +--- + +## Next Steps (Post-MVP) + +**Roadmap suggested to client:** + +1. **Phase 2: Feature expansion** + - Dashboard for physicians (order history) + - Push notifications (Firebase) + - E-commerce integration (direct purchase) + +2. **Phase 3: Optimizations** + - Distributed cache (Redis) + - CDN for static assets + - Advanced analytics (Amplitude) + +3. **Phase 4: Scale** + - Kubernetes (AKS) + - Microservices (break monolith) + - Event-driven architecture (Azure Service Bus) + +--- + +**Result:** MVP delivered to production despite starting literally from zero, establishing solid foundations for client's digital transformation. + +[Need to build an MVP in a challenging scenario? Get in touch](#contact) diff --git a/Content/Cases/en/sap-integration-healthcare.md b/Content/Cases/en/sap-integration-healthcare.md new file mode 100644 index 0000000..4d38fc5 --- /dev/null +++ b/Content/Cases/en/sap-integration-healthcare.md @@ -0,0 +1,211 @@ +--- +title: "SAP Healthcare Integration System" +slug: "sap-integration-healthcare" +summary: "Bidirectional integration processing 100k+ transactions/day with 99.9% uptime" +client: "Confidential - Healthcare Multinational" +industry: "Healthcare" +timeline: "6 months" +role: "Integration Architect" +image: "" +tags: + - SAP + - C# + - .NET + - Integrations + - Enterprise + - Healthcare +featured: true +order: 1 +date: 2023-06-15 +seo_title: "Case Study: SAP Healthcare Integration - 100k Transactions/Day" +seo_description: "How we architected SAP integration system processing 100k+ daily transactions with 99.9% uptime for healthcare company." +seo_keywords: "SAP integration, C#, .NET, SAP Connector, enterprise integration, healthcare" +--- + +## Overview + +**Client:** Healthcare Multinational (confidential) +**Size:** 100,000+ employees +**Project:** Benefits integration +**Timeline:** 6 months +**My Role:** Integration Architect + +--- + +## Challenge + +Client had internal benefits management system that needed to sync with SAP ECC to process payroll. + +### Main pain points: +- Manual process prone to errors +- 3-5 day delay between systems +- 100k employees waiting for processing +- Load spikes (month-end) + +### Constraints: +- Limited budget (no SAP BTP) +- Small internal SAP team (2 developers) +- Tight deadline (6-month go-live) +- Legacy .NET Framework 4.5 system + +--- + +## Solution + +Bidirectional integration architecture: + +``` +[Internal System] ←→ [Queue] ←→ [SAP Connector] ←→ [SAP ECC] + ↓ ↓ + [MongoDB Logs] [ABAP Z_BENEFITS] +``` + +### Components: +- .NET Service with SAP Connector (NCo 3.0) +- Custom ABAP transaction (Z_BENEFITS) +- Queue system (RabbitMQ) for retry logic +- MongoDB for audit and troubleshooting +- Scheduler (Hangfire) for batch processing + +### Flow: +1. System generates changes (new hires, modifications) +2. Service processes batch (500 records/batch) +3. SAP Connector calls Z_BENEFITS via RFC +4. SAP returns status (success/error) +5. Automatic retry if failure (max 3x) +6. MongoDB logs for troubleshooting + +--- + +## Results + +### Metrics: +- **100k+** transactions/day processed +- **99.9%** uptime +- Reduced **5 days → 4 hours** (delay) +- **80%** reduction in processing time +- **Zero** manual errors (vs 2-3% before) + +### Benefits: +- Employees receive benefits on-time +- HR team saves 40h/month (manual work) +- Complete audit (compliance) +- Scalable (30% year-over-year growth without refactor) + +--- + +## Tech Stack + +`C#` `.NET Framework 4.5` `SAP NCo 3.0` `RabbitMQ` `MongoDB` `Hangfire` `Docker` `SAP ECC` `ABAP` `RFC` + +--- + +## Decisions & Motivation + +### Decision 1: SAP Connector vs SAP BTP + +**Options evaluated:** +- SAP BTP (events, modern APIs, cloud) +- SAP Connector (direct RFC, on-premise) + +**We chose:** SAP Connector + +**Motivation:** +- Client had on-premise SAP ECC (not S/4) +- Budget didn't allow BTP license +- SAP team comfortable with ABAP/RFC +- Needs met with RFC (didn't need real-time event-driven) + +**Accepted trade-off:** +- Less "modern" than BTP, but 100% functional +- $0 additional cost vs $30k+/year BTP +- 2 months faster delivery (no BTP learning curve) + +--- + +### Decision 2: Queue System vs Direct Calls + +**Options evaluated:** +- Direct synchronous calls (simpler) +- Queue with retry (more complex) + +**We chose:** Queue + Retry + +**Motivation:** +- SAP occasionally unavailable (maintenance) +- Load spikes (month-end = 200k requests) +- Ensure zero data loss +- Resilience > simplicity (critical environment) + +**Implementation:** +- RabbitMQ with dead-letter queue +- Exponential retry (1min, 5min, 15min) +- Alerts if 3 consecutive failures + +**Result:** +- Zero data loss in 2 years production +- HR team doesn't need to "keep watch" + +--- + +### Decision 3: Custom ABAP vs Standard + +**Options evaluated:** +- Standard SAP BAPIs (zero ABAP code) +- Custom transaction (Z_BENEFITS) + +**We chose:** Custom transaction + +**Motivation:** +- Standard BAPIs didn't have business-specific validations +- Client wanted logic centralized in SAP (single source of truth) +- Allowed complex validations (eligibility, dependents, limits) + +**Trade-off:** +- Requires ABAP maintenance (internal SAP team) +- But: Client preferred vs duplicate logic (risk of desync) + +--- + +### Alternatives NOT Chosen + +**Webhook/Callback (Event-Driven):** +- Client had no infrastructure to expose APIs +- Internal system behind firewall +- Batch polling works well for the case + +**Kubernetes Microservices:** +- Overkill for single integration +- Team had no K8s expertise +- Simple Docker sufficient + +**Real-time Sync (<1min):** +- Business doesn't need (daily batch ok) +- Infrastructure cost would increase 3x +- 4h delay acceptable for payroll + +--- + +## Learnings + +### What worked very well: +- Involve SAP team from day 1 (buy-in) +- MongoDB for logs (10x faster troubleshooting) +- Retry logic saved countless times + +### What I would do differently: +- Add health check endpoint earlier +- Monitoring dashboard from start (added later) + +### Lessons for next projects: +- Client "limited budget" ≠ "limited solution" - creativity solves +- Document ALL architectural decisions (team turnover) +- Simplicity beats complexity when both work (KISS) + +--- + +## Need Something Similar? + +Complex SAP integrations, legacy systems, or high-availability architecture? + +[Let's talk about your challenge →](/#contact) diff --git a/Content/Cases/es/asp-to-dotnet-migration.md b/Content/Cases/es/asp-to-dotnet-migration.md new file mode 100644 index 0000000..3f219ae --- /dev/null +++ b/Content/Cases/es/asp-to-dotnet-migration.md @@ -0,0 +1,329 @@ +--- +title: "Migración ASP 3.0 a .NET Core - Sistema de Rastreo de Cargas" +slug: "asp-to-dotnet-migration" +summary: "Tech Lead en la migración gradual de sistema crítico ASP 3.0 a .NET Core, con sincronización de datos entre versiones y reducción de costos de $20k/año en APIs de mapeo." +client: "Empresa de Logística y Rastreo" +industry: "Logística & Seguridad" +timeline: "12 meses (migración completa)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - ASP Classic + - .NET Core + - SQL Server + - Migration + - Tech Lead + - OSRM + - APIs + - Arquitectura +featured: true +order: 2 +date: 2015-06-01 +seo_title: "Migración ASP 3.0 a .NET Core - Case Carneiro Tech" +seo_description: "Caso de migración gradual de aplicación ASP 3.0 a .NET Core con sincronización de datos y reducción de $20k/año en costos de APIs." +seo_keywords: "ASP migration, .NET Core, legacy modernization, SQL Server, OSRM, tech lead, routing API" +--- + +## Descripción General + +Sistema crítico de monitoreo de cargas de alto valor (TVs LED de $600 cada una, cargamentos de hasta 1000 unidades) utilizando rastreo GPS vía satélite. La aplicación cubría todo el ciclo: desde registro y evaluación de conductores (verificación de antecedentes policiales) hasta monitoreo en tiempo real y entrega final. + +**Desafío principal:** Migrar aplicación legacy ASP 3.0 a .NET Core sin downtime, manteniendo operación crítica 24/7. + +--- + +## Desafío + +### Sistema Legacy Crítico + +La empresa operaba un sistema mission-critical en **ASP 3.0** (Classic ASP) que no podía detenerse: + +**Tecnología legacy:** +- ASP 3.0 (tecnología de 1998) +- SQL Server 2005 +- Cluster failover on-premises (perfectamente capaz de soportar la carga) +- Integración con rastreadores GPS vía satélite +- Google Maps API (costo: **$20,000/año** solo para cálculo de rutas) + +**Restricciones:** +- Sistema operando 24/7 con cargas de alto valor +- Imposibilidad de downtime durante migración +- Múltiples módulos interdependientes +- Equipo necesitaba continuar desarrollando features durante la migración + +--- + +## Arquitectura de Solución + +### Fase 1: Preparación de Infraestructura (Meses 1-3) + +#### Upgrade de Base de Datos +``` +SQL Server 2005 → SQL Server 2014 +- Backup completo y validación +- Migración de stored procedures +- Optimización de índices +- Pruebas de performance +``` + +#### Estrategia de Sincronización Dual-Write + +Implementé un **sistema de sincronización bidireccional** que permitía: + +1. **Módulos nuevos (.NET Core)** escribían en la base de datos nueva +2. **Trigger automático** sincronizaba datos hacia la base de datos legacy +3. **Módulos antiguos (ASP 3.0)** continuaban funcionando normalmente +4. **Zero downtime** durante toda la migración + +```csharp +// Ejemplo de sincronización implementada +public class DualWriteService +{ + public async Task SaveDriver(Driver driver) + { + // Escribe en base de datos nueva (.NET Core) + await _newDbContext.Drivers.AddAsync(driver); + await _newDbContext.SaveChangesAsync(); + + // Trigger SQL sincroniza automáticamente hacia base de datos legacy + // Módulos ASP 3.0 continúan funcionando + } +} +``` + +**¿Por qué este enfoque?** +- Permitió migración **módulo por módulo** +- Equipo podía continuar desarrollando +- Rollback sencillo si fuera necesario +- Reducción de riesgo operacional + +--- + +### Fase 2: Migración Gradual de Módulos (Meses 4-12) + +Migré los módulos en orden de complejidad creciente: + +**Orden de migración:** +1. ✅ Registros básicos (conductores, vehículos) +2. ✅ Evaluación de riesgo (integración con base policial) +3. ✅ Gestión de cargas y rutas +4. ✅ Monitoreo GPS en tiempo real +5. ✅ Alertas y notificaciones +6. ✅ Reportes y analytics + +**Stack de la aplicación migrada:** +- `.NET Core 1.0` (2015-2016 era el inicio de .NET Core) +- `Entity Framework Core` +- `SignalR` para monitoreo real-time +- `SQL Server 2014` +- APIs RESTful + +--- + +### Fase 3: Reducción de Costos con OSRM (Ahorro de $20k/año) + +#### Problema: Costo Prohibitivo de Google Maps + +La empresa gastaba **$20,000/año** solo en Google Maps Directions API para cálculo de rutas de camiones. + +#### Solución: OSRM (Open Source Routing Machine) + +Implementé una solución basada en **OSRM** (motor de ruteo open-source): + +**Arquitectura de la solución:** + +``` +┌─────────────────┐ +│ Frontend │ +│ (Leaflet.js) │ +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ ┌──────────────┐ +│ API Wrapper │─────▶│ OSRM Server │ +│ (.NET Core) │ │ (self-hosted)│ +└────────┬────────┘ └──────────────┘ + │ + ▼ +┌─────────────────┐ +│ Google Maps │ +│ (display only) │ +└─────────────────┘ +``` + +**Implementación:** + +1. **Servidor OSRM configurado** en servidor propio +2. **API wrapper amigable** en .NET Core que: + - Recibía origen/destino + - Consultaba OSRM (gratuito) + - Devolvía todos los puntos de la ruta + - Formateaba para el frontend +3. **Frontend** dibujaba la ruta en Google Maps (solo visualización, sin API de rutas) + +```csharp +[HttpGet("route")] +public async Task GetRoute(double originLat, double originLng, + double destLat, double destLng) +{ + // Consulta OSRM (gratuito) + var osrmResponse = await _osrmClient.GetRouteAsync( + originLat, originLng, destLat, destLng); + + // Retorna puntos formateados para el frontend + return Ok(new { + points = osrmResponse.Routes[0].Geometry.Coordinates, + distance = osrmResponse.Routes[0].Distance, + duration = osrmResponse.Routes[0].Duration + }); +} +``` + +**Frontend con Leaflet:** + +```javascript +// Dibuja ruta en el mapa (Google Maps solo para tiles) +L.polyline(routePoints, {color: 'red'}).addTo(map); +``` + +#### Intento con OpenStreetMap + +Intenté sustituir también Google Maps (tiles) por **OpenStreetMap**, que funcionó técnicamente, pero: + +❌ **A los usuarios no les gustó** la apariencia +❌ Preferían la interfaz familiar de Google Maps + +✅ **Decisión:** Mantener Google Maps solo para visualización (sin costo de API de rutas) + +**Resultado:** Ahorro de **~$20,000/año** manteniendo calidad de las rutas. + +--- + +## Resultados e Impacto + +### Migración Completa en 12 Meses + +✅ **100% de los módulos** migrados de ASP 3.0 a .NET Core +✅ **Zero downtime** durante toda la migración +✅ **Equipo productivo** durante todo el proceso +✅ Sistema más rápido y escalable + +### Reducción de Costos + +💰 **$20,000/año ahorrados** con sustitución de Google Maps Directions API +📉 **Infraestructura optimizada** con SQL Server 2014 + +### Mejoras Técnicas + +🚀 **Performance:** Aplicación .NET Core 3x más rápida que ASP 3.0 +🔒 **Seguridad:** Stack moderno con parches de seguridad activos +🛠️ **Mantenibilidad:** Código C# moderno vs VBScript legacy +📊 **Monitoreo:** SignalR para tracking real-time más eficiente + +--- + +## Fase No Ejecutada: Microservicios & Cloud + +### Planificación Inicial + +Participé en el **diseño y concepción** de la segunda fase (nunca ejecutada): + +**Arquitectura planificada:** +- Migración a **Azure** (cloud estaba apenas comenzando en 2015) +- División en **microservicios**: + - Servicio de autenticación + - Servicio de GPS/tracking + - Servicio de rutas + - Servicio de notificaciones +- **Event-driven architecture** con message queues + +**Por qué no fue ejecutada:** + +Salí de la empresa inmediatamente después de concluir la migración a .NET Core. La segunda fase quedó planificada pero no fue implementada por mí. + +--- + +## Tech Stack + +`ASP 3.0` `VBScript` `.NET Core 1.0` `C#` `Entity Framework Core` `SQL Server 2005` `SQL Server 2014` `OSRM` `Leaflet.js` `Google Maps` `SignalR` `REST APIs` `GPS/Satellite` `Migration Strategy` `Dual-Write Pattern` + +--- + +## Decisiones Clave & Trade-offs + +### ¿Por qué sincronización dual-write? + +**Alternativas consideradas:** +1. ❌ Big Bang migration (demasiado arriesgado) +2. ❌ Mantener todo en ASP 3.0 (insostenible) +3. ✅ **Migración gradual con sync** (elegido) + +**Justificación:** +- Sistema crítico no podía detenerse +- Permitió rollback módulo por módulo +- Equipo continuó productivo + +### ¿Por qué OSRM en vez de otros? + +**Alternativas:** +- Google Maps: $20k/año ❌ +- Mapbox: Licencia paga ❌ +- GraphHopper: Configuración compleja ❌ +- **OSRM: Open-source, rápido, configurable** ✅ + +### ¿Por qué no OpenStreetMap para tiles? + +**Decisión basada en UX:** +- Técnicamente funcionó perfectamente +- Usuarios preferían interfaz familiar de Google +- **Compromiso:** Google Maps para visualización (gratis) + OSRM para rutas (gratis) + +--- + +## Lecciones Aprendidas + +### 1. Migración Gradual > Big Bang + +Migrar módulo por módulo con sincronización permitió: +- Aprendizaje continuo +- Ajustes de ruta durante el proceso +- Confianza del equipo y stakeholders + +### 2. Open Source Puede Ahorrar Mucho + +OSRM ahorró **$20k/año** sin pérdida de calidad. Pero requiere: +- Expertise para configurar +- Infraestructura propia +- Mantenimiento continuo + +### 3. UX > Tecnología A Veces + +OpenStreetMap era técnicamente superior (gratuito), pero usuarios prefirieron Google Maps. **Lección:** Escuchar a los usuarios finales. + +### 4. Planifique Cloud, pero Valide el ROI + +En 2015, cloud estaba comenzando. La infraestructura on-premises (cluster SQL Server) era perfectamente capaz. **No fuerce cloud si no hay beneficio claro.** + +--- + +## Contexto: Por qué 2015 fue un Momento Especial + +**Estado de la tecnología en 2015:** + +- ☁️ **Cloud en pañales:** AWS existía, Azure creciendo, pero adopción corporativa aún baja +- 🆕 **.NET Core 1.0 lanzado** en junio/2016 (usamos RC durante proyecto) +- 📱 **Microservicios:** Concepto nuevo, Docker en adopción inicial +- 🗺️ **Google Maps dominante:** APIs pagas, pocas alternativas open-source maduras + +**Desafíos de la época:** +- Herramientas de migración ASP→.NET inexistentes +- Documentación .NET Core escasa (versión 1.0!) +- Patrones de arquitectura aún consolidándose + +Este proyecto fue **pionero** al adoptar .NET Core al inicio, cuando la mayoría migraba a .NET Framework 4.x. + +--- + +**Resultado:** Migración exitosa de sistema crítico 24/7, ahorro de $20k/año, y base sólida para evolución futura. + +[¿Quiere discutir una migración similar? Póngase en contacto](#contact) diff --git a/Content/Cases/es/cnpj-fast-process.md b/Content/Cases/es/cnpj-fast-process.md new file mode 100644 index 0000000..f793301 --- /dev/null +++ b/Content/Cases/es/cnpj-fast-process.md @@ -0,0 +1,382 @@ +--- +title: "CNPJ Fast - Proceso de Migración a CNPJ Alfanumérico" +slug: "cnpj-fast-process" +summary: "Creación de metodología estructurada para migración de aplicaciones al nuevo formato de CNPJ alfanumérico brasileño, vendida a aseguradora y empresa de cobranza." +client: "Empresa de Consultoría (Interno)" +industry: "Consultoría & Transformación Digital" +timeline: "3 meses (creación del proceso)" +role: "Solution Architect & Process Designer" +image: "" +tags: + - Process Design + - CNPJ + - Migration Strategy + - Regulatory Compliance + - Consulting + - Sales Enablement +featured: true +order: 3 +date: 2024-09-01 +seo_title: "CNPJ Fast - Metodología de Migración CNPJ Alfanumérico" +seo_description: "Caso de creación de proceso estructurado para migración a CNPJ alfanumérico brasileño, vendido a aseguradora y empresa de cobranza." +seo_keywords: "CNPJ alfanumérico, migration process, regulatory compliance, consulting, methodology" +--- + +## Descripción General + +Con la introducción del **CNPJ alfanumérico** por la Receita Federal brasileña, las empresas enfrentaban el desafío de adaptar sus aplicaciones legacy que almacenaban CNPJ como campos numéricos (`bigint`, `numeric`, `int`). + +Creé **CNPJ Fast**, una metodología estructurada para evaluar, planificar y ejecutar migraciones de CNPJ en aplicaciones y bases de datos corporativas. + +**Resultado:** Proceso vendido a **2 clientes** (aseguradora y empresa de cobranza) antes incluso de la implementación. + +--- + +## Desafío + +### Cambio Regulatorio Complejo + +**Contexto regulatorio:** +- Receita Federal brasileña introdujo **CNPJ alfanumérico** +- CNPJ deja de ser solo números (14 dígitos) +- Pasa a aceptar **letras y números** (formato alfanumérico) + +**Impacto en las empresas:** + +```sql +-- ANTES: CNPJ numérico +CNPJ BIGINT -- 12345678000190 + +-- DESPUÉS: CNPJ alfanumérico +CNPJ VARCHAR(18) -- 12.ABC.678/0001-90 +``` + +**Problemas identificados:** + +1. 🗄️ **Base de datos:** Columnas `BIGINT`, `NUMERIC`, `INT` no soportan caracteres +2. 🔑 **Claves primarias:** CNPJ usado como PK en varias tablas +3. 🔗 **Foreign keys:** Relaciones entre tablas +4. 📊 **Volumen:** Millones de registros para migrar +5. 💻 **Aplicaciones:** Validaciones, máscaras, reglas de negocio +6. 🧪 **Pruebas:** Garantizar integridad después de migración +7. ⏱️ **Downtime:** Ventanas de mantenimiento limitadas + +**Sin un proceso estructurado**, empresas arriesgaban: +- Pérdida de datos +- Inconsistencias en la base de datos +- Aplicaciones rotas +- Downtime prolongado + +--- + +## Solución: CNPJ Fast Process + +### Metodología en 5 Fases + +Diseñé un proceso estructurado que podría ser replicado en diferentes clientes: + +``` +┌─────────────────────────────────────────────┐ +│ FASE 1: DISCOVERY & ASSESSMENT │ +│ - Inventario de aplicaciones │ +│ - Análisis de schemas de base de datos │ +│ - Identificación de tablas impactadas │ +│ - Estimación de volumen de datos │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 2: IMPACT ANALYSIS │ +│ - Mapeo de dependencias │ +│ - Análisis de claves primarias/foráneas │ +│ - Identificación de reglas de negocio │ +│ - Evaluación de riesgo │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 3: MIGRATION PLANNING │ +│ - Estrategia de migración (phased commits) │ +│ - Scripts SQL automatizados │ +│ - Plan de rollback │ +│ - Ventanas de mantenimiento │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 4: EXECUTION │ +│ - Migración de datos en lotes │ +│ - Actualización de aplicaciones │ +│ - Pruebas de integración │ +│ - Validación de integridad │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 5: VALIDATION & GO-LIVE │ +│ - Pruebas de regresión │ +│ - Validación de performance │ +│ - Go-live coordinado │ +│ - Monitoreo post-migración │ +└─────────────────────────────────────────────┘ +``` + +--- + +### Fase 1: Discovery & Assessment + +**Objetivo:** Entender el alcance completo de la migración + +**Entregables:** + +1. **Inventario de Aplicaciones** + - Lista de aplicaciones que usan CNPJ + - Tecnologías (ASP 3.0, VB6, .NET, microservicios) + - Criticidad de cada aplicación + +2. **Análisis de Schema** + ```sql + -- Script de descubrimiento automático + SELECT + t.TABLE_SCHEMA, + t.TABLE_NAME, + c.COLUMN_NAME, + c.DATA_TYPE, + c.CHARACTER_MAXIMUM_LENGTH + FROM INFORMATION_SCHEMA.TABLES t + JOIN INFORMATION_SCHEMA.COLUMNS c + ON t.TABLE_NAME = c.TABLE_NAME + WHERE c.COLUMN_NAME LIKE '%CNPJ%' + AND c.DATA_TYPE IN ('bigint', 'numeric', 'int') + ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME; + ``` + +3. **Estimación de Volumen** + - Total de registros por tabla + - Tamaño en GB + - Tiempo estimado de migración + +**Ejemplo de output:** + +| Tabla | Columna | Tipo Actual | Registros | Criticidad | +|--------|--------|------------|-----------|-------------| +| Clientes | CNPJ_Cliente | BIGINT | 8.000.000 | Alta | +| Proveedores | CNPJ_Proveedor | NUMERIC(14) | 2.500.000 | Media | +| Transacciones | CNPJ_Pagador | BIGINT | 90.000.000 | Crítica | + +--- + +### Fase 2: Impact Analysis + +**Objetivo:** Mapear todas las dependencias y riesgos + +**Análisis de claves:** + +```sql +-- Identifica PKs y FKs que involucran CNPJ +SELECT + fk.name AS FK_Name, + tp.name AS Parent_Table, + cp.name AS Parent_Column, + tr.name AS Referenced_Table, + cr.name AS Referenced_Column +FROM sys.foreign_keys fk +INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id +INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id +INNER JOIN sys.columns cp ON fkc.parent_column_id = cp.column_id + AND fkc.parent_object_id = cp.object_id +INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id +INNER JOIN sys.columns cr ON fkc.referenced_column_id = cr.column_id + AND fkc.referenced_object_id = cr.object_id +WHERE cp.name LIKE '%CNPJ%' OR cr.name LIKE '%CNPJ%'; +``` + +**Evaluación de Riesgo:** + +- 🔴 **Alto:** Tablas con CNPJ como PK y >10M registros +- 🟡 **Medio:** Tablas con FK hacia CNPJ +- 🟢 **Bajo:** Tablas sin constraints + +--- + +### Fase 3: Migration Planning + +**Estrategia de migración gradual:** + +Para evitar bloqueo de base de datos, diseñé estrategia de **phased commits**: + +```sql +-- Estrategia para tablas grandes (>1M registros) + +-- 1. Agregar nueva columna VARCHAR +ALTER TABLE Clientes +ADD CNPJ_Cliente_New VARCHAR(18) NULL; + +-- 2. Migración en lotes (commits faseados) +DECLARE @BatchSize INT = 100000; +DECLARE @RowsAffected INT = 1; + +WHILE @RowsAffected > 0 +BEGIN + UPDATE TOP (@BatchSize) Clientes + SET CNPJ_Cliente_New = FORMAT(CNPJ_Cliente, '00000000000000') + WHERE CNPJ_Cliente_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + WAITFOR DELAY '00:00:01'; -- Pausa entre lotes +END; + +-- 3. Remover constraints (PKs, FKs) +ALTER TABLE Clientes DROP CONSTRAINT PK_Clientes; + +-- 4. Renombrar columnas +EXEC sp_rename 'Clientes.CNPJ_Cliente', 'CNPJ_Cliente_Old', 'COLUMN'; +EXEC sp_rename 'Clientes.CNPJ_Cliente_New', 'CNPJ_Cliente', 'COLUMN'; + +-- 5. Recrear constraints +ALTER TABLE Clientes +ADD CONSTRAINT PK_Clientes PRIMARY KEY (CNPJ_Cliente); + +-- 6. Remover columna antigua (tras validación) +ALTER TABLE Clientes DROP COLUMN CNPJ_Cliente_Old; +``` + +**¿Por qué este enfoque?** + +- ✅ Evita lock de tabla entera +- ✅ Permite pausar/reanudar migración +- ✅ Minimiza impacto en producción +- ✅ Facilita rollback si es necesario + +--- + +### Fase 4 & 5: Execution y Validation + +**Checklist de ejecución:** + +- [ ] Backup completo de la base de datos +- [ ] Ejecutar scripts de migración en lotes +- [ ] Actualizar aplicaciones (validaciones, máscaras) +- [ ] Pruebas de integración +- [ ] Validación de integridad referencial +- [ ] Pruebas de performance +- [ ] Go-live coordinado +- [ ] Monitoreo 24h post-migración + +--- + +## Sales Enablement: Presentación UX + +**Colaboración con Gestor de UX:** + +El gestor de UX de la empresa creó una **presentación visual impactante** del proceso CNPJ Fast: + +**Contenido de la presentación:** +- 📊 Infografías del proceso de 5 fases +- 📈 Ejemplos de estimaciones de tiempo/costo +- 🎯 Casos de uso (aseguradoras, bancos, fintechs) +- ✅ Checklist ejecutivo +- 📋 Templates de documentación + +**Resultado:** Presentación utilizada por el equipo comercial para prospección. + +--- + +## Resultados e Impacto + +### Ventas Realizadas + +**Cliente 1: Aseguradora** +- Stack: ASP 3.0, VB6 components, .NET, microservicios +- Alcance: Migración completa de aplicaciones legacy +- Estado: **Proyecto vendido** (ejecución por otro equipo) +- Valor: [Confidencial] + +**Cliente 2: Empresa de Cobranza** +- Alcance: Migración de base de datos (~100M registros) +- Estado: **Proyecto vendido y en ejecución** (por mí) +- Particularidad: Proceso fue **reestructurado** para atender necesidades específicas +- Ver caso completo: [Migración CNPJ - 100M Registros](/cases/cnpj-migration-database) + +--- + +### Impacto en el Negocio + +💰 **2 proyectos vendidos** antes incluso de la primera ejecución +📈 **Proceso replicable** para nuevos clientes +🎯 **Posicionamiento** como especialista en migraciones regulatorias +📚 **Base de conocimiento** para futuros proyectos similares + +--- + +### Impacto Técnico + +🔧 **Metodología probada** en escenarios reales +📖 **Documentación reutilizable** (scripts, checklists, templates) +🚀 **Aceleración** de proyectos similares (de semanas a días) + +--- + +## Tech Stack + +`SQL Server` `Migration Strategy` `Process Design` `Regulatory Compliance` `ASP 3.0` `VB6` `.NET` `Microservices` `Batch Processing` `Database Optimization` + +--- + +## Decisiones Clave & Trade-offs + +### ¿Por qué proceso estructurado? + +**Alternativas:** +1. ❌ Enfoque ad-hoc por proyecto +2. ❌ Consultoría manual sin metodología +3. ✅ **Proceso replicable y escalable** + +**Justificación:** +- Reduce tiempo de Discovery +- Estandariza entregas +- Facilita ventas (presentación lista) +- Permite ejecución por diferentes equipos + +### ¿Por qué separar en 5 fases? + +**Beneficios:** +- Cliente puede aprobar fase a fase +- Permite ajustes durante el proceso +- Facilita gestión de riesgos +- Entregas incrementales + +--- + +## Lecciones Aprendidas + +### 1. UX/Presentación Importa para Ventas + +La presentación visual hecha por el gestor de UX fue **crucial** para cerrar los 2 contratos. Proceso técnico bueno + presentación mala = sin ventas. + +### 2. Proceso Vende, No Solo Ejecución + +Crear una **metodología documentada** tiene más valor comercial que solo ofrecer "horas de consultoría". + +### 3. Cada Cliente es Único + +El cliente solicitó **reestructuración del proceso**. Un buen proceso debe ser: +- Estructurado lo suficiente para ser replicable +- Flexible lo suficiente para personalizar + +### 4. Colaboración Multidisciplinaria + +Trabajar con gestor de UX (presentaciones) + equipo comercial (ventas) + técnico (ejecución) = éxito. + +--- + +## Próximos Pasos + +**Oportunidades futuras:** + +1. 🌎 **Expansión:** Ofrecer CNPJ Fast para más sectores (bancos, fintechs, retail) +2. 📦 **Producto:** Transformar en herramienta automatizada (SaaS) +3. 📚 **Capacitación:** Capacitar equipos internos de clientes +4. 🔄 **Evolución:** Adaptar proceso para otras migraciones regulatorias (PIX, Open Banking) + +--- + +**Resultado:** Metodología estructurada que se convirtió en producto vendible, generando ingresos antes incluso de la primera ejecución técnica. + +[¿Quiere implementar CNPJ Fast en su empresa? Póngase en contacto](#contact) diff --git a/Content/Cases/es/cnpj-migration-database.md b/Content/Cases/es/cnpj-migration-database.md new file mode 100644 index 0000000..974879d --- /dev/null +++ b/Content/Cases/es/cnpj-migration-database.md @@ -0,0 +1,469 @@ +--- +title: "Migración CNPJ Alfanumérico - 100 Millones de Registros" +slug: "cnpj-migration-database" +summary: "Ejecución de migración masiva de CNPJ numérico a alfanumérico en base de datos con ~100M registros, usando estrategia de commits faseados para evitar bloqueo." +client: "Empresa de Cobranza" +industry: "Cobranza & Servicios Financieros" +timeline: "En ejecución" +role: "Database Architect & Tech Lead" +image: "" +tags: + - SQL Server + - Database Migration + - CNPJ + - Performance Optimization + - Batch Processing + - Big Data +featured: true +order: 4 +date: 2024-11-01 +seo_title: "Migración CNPJ Alfanumérico - 100M Registros | Carneiro Tech" +seo_description: "Caso de migración masiva de CNPJ en base de datos con 100 millones de registros usando commits faseados y optimizaciones de performance." +seo_keywords: "database migration, SQL Server, CNPJ, batch processing, performance optimization, phased commits" +--- + +## Descripción General + +Una empresa de cobranza que trabaja con bases de datos de información transitoria (sin software propietario) necesita adaptar sus sistemas al nuevo formato de **CNPJ alfanumérico** brasileño. + +**Desafío principal:** Migrar ~**100 millones de registros** en tablas con columnas `BIGINT` y `NUMERIC` a `VARCHAR`, sin bloquear la base de datos en producción. + +**Estado:** Proyecto en ejecución (preparación de scripts de migración). + +--- + +## Desafío + +### Volumen Masivo de Datos + +**Contexto de la empresa:** +- Empresa de cobranza (no desarrolla software propio) +- Trabaja con **datos transitorios** (alta rotación) +- Base de datos SQL Server con volumen crítico + +**Análisis inicial reveló:** + +| Tabla | Columna | Tipo Actual | Registros | Tamaño | +|--------|--------|------------|-----------|---------| +| Deudores | CNPJ_Deudor | BIGINT | 8.000.000 | 60 GB | +| Transacciones | CNPJ_Pagador | NUMERIC(14) | 90.000.000 | 1.2 TB | +| Empresas | CNPJ_Empresa | BIGINT | 2.500.000 | 18 GB | +| **TOTAL** | - | - | **~100.000.000** | **~1.3 TB** | + +**Problemas identificados:** + +1. 🔴 **Tablas con 8M+ líneas** usando `BIGINT` para CNPJ +2. 🔴 **90 millones de registros** en tabla de transacciones +3. 🔑 **CNPJ como clave primaria** en algunas tablas +4. 🔗 **Foreign keys** relacionando múltiples tablas +5. ⚠️ **Imposibilidad de downtime prolongado** (operación 24/7) +6. 💾 **Restricciones de espacio** en disco (necesita estrategia eficiente) + +--- + +## Decisión Estratégica: Phased Commits + +### ¿Por qué NO hacer ALTER COLUMN directo? + +**Enfoque ingenuo (NO funciona):** + +```sql +-- ❌ NUNCA HAGA ESTO EN TABLAS GRANDES +ALTER TABLE Transacciones +ALTER COLUMN CNPJ_Pagador VARCHAR(18); +``` + +**Problemas:** +- 🔒 Bloquea la tabla entera durante la conversión +- ⏱️ Puede tomar horas/días en tablas grandes +- 💥 Bloquea todas las operaciones (INSERT, UPDATE, SELECT) +- 🚨 Riesgo de timeout o falla en medio de la operación +- 🔙 Rollback complejo si algo sale mal + +--- + +### Estrategia Elegida: Column Swap con Commits Faseados + +**Basado en experiencia anterior**, decidí usar enfoque gradual: + +``` +┌─────────────────────────────────────────────┐ +│ 1. Crear nueva columna VARCHAR al FINAL │ +│ (operación rápida, no bloquea tabla) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 2. UPDATE en lotes (commits faseados) │ +│ - 100k registros a la vez │ +│ - Pausa entre lotes (evita contención) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 3. Remover PKs y FKs │ +│ (tras 100% migrado) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 4. Renombrar columnas (swap) │ +│ - CNPJ → CNPJ_Old │ +│ - CNPJ_New → CNPJ │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 5. Recrear PKs/FKs con nueva columna │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 6. Validación y eliminación columna vieja │ +└─────────────────────────────────────────────┘ +``` + +**¿Por qué este enfoque?** + +✅ **Sin lock de tabla completa** (operación incremental) +✅ **Puede pausar/reanudar** en cualquier momento +✅ **Monitoreo de progreso** en tiempo real +✅ **Rollback simple** (basta eliminar nueva columna) +✅ **Minimiza impacto en producción** (commits pequeños) + +**Decisión tomada basada en:** +- 📚 Experiencia anterior con migraciones de gran volumen +- 🔍 Conocimiento de locks de SQL Server +- 🎯 Necesidad de zero downtime + +**Nota:** Esta decisión fue tomada **sin consultar IA** - basada puramente en experiencia práctica de proyectos anteriores. + +--- + +## Detalles de Implementación + +### Fase 1: Crear Nueva Columna + +```sql +-- Operación rápida (metadata change solamente) +ALTER TABLE Transacciones +ADD CNPJ_Pagador_New VARCHAR(18) NULL; + +-- Agrega índice temporal para acelerar lookups +CREATE NONCLUSTERED INDEX IX_Temp_CNPJ_New +ON Transacciones(CNPJ_Pagador_New) +WHERE CNPJ_Pagador_New IS NULL; +``` + +**Tiempo estimado:** ~1 segundo (independiente del tamaño de la tabla) + +--- + +### Fase 2: Migración en Lotes (Core Strategy) + +```sql +-- Script de migración con commits faseados +DECLARE @BatchSize INT = 100000; -- 100k registros por lote +DECLARE @RowsAffected INT = 1; +DECLARE @TotalProcessed INT = 0; +DECLARE @StartTime DATETIME = GETDATE(); + +WHILE @RowsAffected > 0 +BEGIN + BEGIN TRANSACTION; + + -- Actualiza lote de 100k registros aún no migrados + UPDATE TOP (@BatchSize) Transacciones + SET CNPJ_Pagador_New = RIGHT('00000000000000' + CAST(CNPJ_Pagador AS VARCHAR), 14) + WHERE CNPJ_Pagador_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + SET @TotalProcessed = @TotalProcessed + @RowsAffected; + + COMMIT TRANSACTION; + + -- Log de progreso + PRINT 'Processed: ' + CAST(@TotalProcessed AS VARCHAR) + ' rows. Batch: ' + CAST(@RowsAffected AS VARCHAR); + PRINT 'Elapsed time: ' + CAST(DATEDIFF(SECOND, @StartTime, GETDATE()) AS VARCHAR) + ' seconds'; + + -- Pausa entre lotes (reduce contención) + WAITFOR DELAY '00:00:01'; -- 1 segundo entre lotes +END; + +PRINT 'Migration completed! Total rows: ' + CAST(@TotalProcessed AS VARCHAR); +``` + +**Parámetros configurables:** + +- `@BatchSize`: 100k (balanceado entre performance y lock time) + - Muy pequeño = muchas transacciones, overhead + - Muy grande = lock prolongado, impacto en prod +- `WAITFOR DELAY`: 1 segundo (da tiempo a otras queries para ejecutar) + +**Estimaciones de tiempo:** + +| Registros | Batch Size | Tiempo Estimado | +|-----------|------------|----------------| +| 8.000.000 | 100.000 | ~2-3 horas | +| 90.000.000 | 100.000 | ~20-24 horas | + +**Ventajas:** +- ✅ No bloquea aplicación +- ✅ Otras queries pueden ejecutar entre los lotes +- ✅ Puede pausar (Ctrl+C) y reanudar después (WHERE NULL toma desde donde paró) +- ✅ Log de progreso en tiempo real + +--- + +### Fase 3: Remoción de Constraints + +```sql +-- Identifica todas las PKs y FKs que involucran la columna +SELECT name +FROM sys.key_constraints +WHERE type = 'PK' + AND parent_object_id = OBJECT_ID('Transacciones') + AND COL_NAME(parent_object_id, parent_column_id) = 'CNPJ_Pagador'; + +-- Remueve PKs +ALTER TABLE Transacciones +DROP CONSTRAINT PK_Transacciones_CNPJ; + +-- Remueve FKs (tablas que referencian) +ALTER TABLE Pagos +DROP CONSTRAINT FK_Pagos_Transacciones; +``` + +**Tiempo estimado:** ~10 minutos (depende de cuántas constraints existen) + +--- + +### Fase 4: Column Swap (Renombramiento) + +```sql +-- Renombra columna antigua a _Old +EXEC sp_rename 'Transacciones.CNPJ_Pagador', 'CNPJ_Pagador_Old', 'COLUMN'; + +-- Renombra nueva columna al nombre original +EXEC sp_rename 'Transacciones.CNPJ_Pagador_New', 'CNPJ_Pagador', 'COLUMN'; + +-- Altera a NOT NULL (tras validación de 100% completado) +ALTER TABLE Transacciones +ALTER COLUMN CNPJ_Pagador VARCHAR(18) NOT NULL; +``` + +**Tiempo estimado:** ~1 segundo (metadata change) + +--- + +### Fase 5: Recreación de Constraints + +```sql +-- Recrea PK con nueva columna VARCHAR +ALTER TABLE Transacciones +ADD CONSTRAINT PK_Transacciones_CNPJ +PRIMARY KEY CLUSTERED (CNPJ_Pagador); + +-- Recrea FKs +ALTER TABLE Pagos +ADD CONSTRAINT FK_Pagos_Transacciones +FOREIGN KEY (CNPJ_Pagador) REFERENCES Transacciones(CNPJ_Pagador); +``` + +**Tiempo estimado:** ~30-60 minutos (depende del volumen) + +--- + +### Fase 6: Validación y Limpieza + +```sql +-- Valida que 100% fue migrado +SELECT COUNT(*) +FROM Transacciones +WHERE CNPJ_Pagador IS NULL OR CNPJ_Pagador = ''; + +-- Valida integridad referencial +DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS; + +-- Si todo OK, remueve columna antigua +ALTER TABLE Transacciones +DROP COLUMN CNPJ_Pagador_Old; + +-- Remueve índice temporal +DROP INDEX IX_Temp_CNPJ_New ON Transacciones; +``` + +--- + +## Personalización del Proceso CNPJ Fast + +### Diferencias vs. Proceso Original + +El proceso **CNPJ Fast** original fue **reestructurado** para este cliente: + +**Cambios principales:** + +| Aspecto | CNPJ Fast Original | Cliente (Personalizado) | +|---------|-------------------|---------------------| +| **Foco** | Aplicaciones + DB | Solo DB (sin software propio) | +| **Discovery** | Inventario de apps | Solo análisis de schema | +| **Ejecución** | Múltiples aplicaciones | Scripts SQL masivos | +| **Batch Size** | 50k-100k | 100k (optimizado para volumen) | +| **Monitoreo** | Manual + herramientas | Logs SQL en tiempo real | +| **Rollback** | Proceso complejo | Simple (DROP COLUMN) | + +**Motivo de la reestructuración:** +- Cliente no tiene aplicaciones propias (solo consume datos) +- Foco 100% en optimización de base de datos +- Volumen mucho mayor que casos típicos (100M vs ~10M) + +--- + +## Tech Stack + +`SQL Server` `T-SQL` `Batch Processing` `Performance Tuning` `Database Optimization` `Migration Scripts` `Phased Commits` `Index Optimization` `Constraint Management` + +--- + +## Decisiones Clave & Trade-offs + +### ¿Por qué 100k por batch? + +**Pruebas de performance:** + +| Batch Size | Tiempo/Batch | Lock Duration | Contención | +|------------|-------------|---------------|-----------| +| 10.000 | 2s | Bajo | ✅ Mínimo | +| 50.000 | 8s | Medio | ✅ Aceptable | +| **100.000** | 15s | **Medio** | **✅ Balanceado** | +| 500.000 | 90s | Alto | ❌ Impacto en prod | +| 1.000.000 | 180s | Muy alto | ❌ Inaceptable | + +**Elección:** 100k ofrece mejor balance entre performance e impacto. + +--- + +### ¿Por qué crear columna al FINAL? + +**Internals de SQL Server:** +- Agregar columna al final = metadata change (rápido) +- Agregar en medio = reescritura de páginas (lento) +- Para tablas grandes, posición importa + +--- + +### ¿Por qué WAITFOR DELAY de 1 segundo? + +**Sin delay:** +- ❌ Batch processing consume 100% del I/O +- ❌ Queries de aplicación se vuelven lentas +- ❌ Lock escalation puede ocurrir + +**Con delay de 1s:** +- ✅ Otras queries tienen ventana para ejecutar +- ✅ I/O distribuido +- ✅ Experiencia del usuario preservada + +**Trade-off:** Migración toma +1s por batch (~25% más lenta), pero sistema permanece responsivo. + +--- + +## Estado Actual & Próximos Pasos + +### Estado Actual (Diciembre 2024) + +📝 **Fase de Preparación:** +- ✅ Discovery completo (100M registros identificados) +- ✅ Scripts de migración desarrollados +- ✅ Pruebas en ambiente de homologación +- 🔄 Validación de performance +- ⏳ Esperando ventana de mantenimiento para producción + +### Próximos Pasos + +1. **Backup completo** de producción +2. **Ejecución en producción** (ambiente 24/7) +3. **Monitoreo en tiempo real** durante migración +4. **Validación post-migración** (integridad, performance) +5. **Documentación de lessons learned** + +--- + +## Lecciones Aprendidas (Hasta Ahora) + +### 1. Experiencia Anterior Vale Oro + +Decisión de usar phased commits vino de **experiencia práctica** en proyectos anteriores, no de documentación o IA. + +**Situaciones similares anteriores:** +- Migración de datos en e-commerce (50M registros) +- Conversión de encoding (UTF-8 en 100M+ rows) +- Particionamiento de tablas históricas + +--- + +### 2. "Measure Twice, Cut Once" + +Antes de ejecutar en producción: +- ✅ Pruebas exhaustivas en homologación +- ✅ Scripts validados y revisados +- ✅ Rollback probado +- ✅ Estimaciones de tiempo confirmadas + +**Tiempo de preparación:** 3 semanas +**Tiempo de ejecución:** Estimado en 48 horas + +**Ratio:** 10:1 (preparación vs ejecución) + +--- + +### 3. Personalización > One-Size-Fits-All + +El proceso CNPJ Fast original necesitó ser **reestructurado** para este cliente. + +**Lección:** Los procesos deben ser: +- Estructurados lo suficiente para repetir +- Flexibles lo suficiente para adaptar + +--- + +### 4. Monitoreo es Crucial + +Scripts con **log detallado** de progreso permiten: +- Estimar tiempo restante +- Identificar cuellos de botella +- Pausar/reanudar con confianza +- Reportar estado a stakeholders + +```sql +-- Log example +Processed: 10.000.000 rows. Batch: 100.000 +Elapsed time: 3600 seconds (10% complete, ~9h remaining) +``` + +--- + +## Optimizaciones de Performance + +### Optimizaciones Implementadas + +1. **Índice temporal WHERE NULL** + - Acelera lookup de registros no migrados + - Removido tras conclusión + +2. **Batch size optimizado** + - Balanceado entre performance y lock time + +3. **Transaction log management** + ```sql + -- Verificar crecimiento del log + DBCC SQLPERF(LOGSPACE); + + -- Ajustar recovery model (si permitido) + ALTER DATABASE MyDatabase SET RECOVERY SIMPLE; + ``` + +4. **Ejecución en horario de menor carga** + - Ventana de mantenimiento nocturna + - Fin de semana (si es posible) + +--- + +**Resultado esperado:** Migración de 100 millones de registros en ~48 horas, sin downtime significativo y con posibilidad de rollback rápido. + +[¿Necesita migrar volúmenes masivos de datos? Póngase en contacto](#contact) diff --git a/Content/Cases/es/industrial-learning-platform.md b/Content/Cases/es/industrial-learning-platform.md new file mode 100644 index 0000000..d00ec2e --- /dev/null +++ b/Content/Cases/es/industrial-learning-platform.md @@ -0,0 +1,588 @@ +--- +title: "Plataforma de Capacitación Industrial - De Wireframes a Sistema Completo" +slug: "industrial-learning-platform" +summary: "Solution Design para plataforma de microlearning en empresa de gases industriales. Identificación de requisitos críticos no mapeados (admin, registros, exportación) antes de la presentación al cliente, evitando retrabajo y garantizando usabilidad real." +client: "Empresa de Gases Industriales" +industry: "Industrial & Manufactura" +timeline: "4 meses" +role: "Solution Architect & Tech Lead" +image: "" +tags: + - Solution Design + - EdTech + - Learning Platform + - Requirements Analysis + - Tech Lead + - User Stories + - .NET + - Product Design +featured: true +order: 5 +date: 2024-06-01 +seo_title: "Plataforma de Capacitación Industrial - Solution Design" +seo_description: "Caso de Solution Design para plataforma de microlearning, identificando requisitos críticos antes de la presentación al cliente y liderando desarrollo hasta producción." +seo_keywords: "solution design, learning platform, microlearning, requirements analysis, tech lead, industrial training" +--- + +## Descripción General + +Empresa de gases industriales solicita plataforma para capacitar empleados usando metodología de **microlearning** (contenidos cortos y objetivos). + +**Requisito inicial:** "Queremos solo la estructura - ruta de aprendizaje, microlearning, pregunta de test y puntuación." + +**Problema:** Especificación incompleta que resultaría en sistema **imposible de usar** (sin forma de registrar contenido, sin administradores, sin exportar resultados). + +**Solución:** Análisis crítico de requisitos **antes de la presentación al cliente**, identificando gaps funcionales y proponiendo solución completa. + +--- + +## Desafío + +### Wireframes Bonitos, Funcionalidad Incompleta + +**Situación inicial:** + +UX creó wireframes hermosos mostrando: +- ✅ Rutas de aprendizaje +- ✅ Microlearnings (video/texto + imagen) +- ✅ Preguntas de test (opción múltiple) +- ✅ Puntuación por empleado + +**Problema identificado:** + +Nadie (cliente, UX, comercial) pensó en: + +❌ **¿Cómo entra contenido en el sistema?** +- ¿Quién registra rutas? +- ¿Quién crea microlearnings? +- ¿Quién escribe preguntas? +- ¿Interfaz manual o import? + +❌ **¿Quién gestiona el sistema?** +- ¿Existe concepto de admin? +- ¿RRHH puede crear admins? +- ¿Gestor de área puede ver solo su equipo? + +❌ **¿Cómo salen datos del sistema?** +- RRHH necesita reportes +- Compliance necesita evidencias +- ¿Cómo exportar datos? +- ¿Formato: Excel? PDF? API? + +**Riesgo real:** + +Si desarrolláramos exactamente lo que fue pedido: +- Sistema funcionaría técnicamente ✅ +- **Pero sería completamente inutilizable** ❌ +- Cliente tendría que pagar refacción para incluir CRUD básico +- Retrabajo + costo adicional + frustración + +--- + +## Proceso de Solution Design + +### Etapa 1: Análisis Crítico (Antes de la Presentación) + +**Acción tomada:** Convoqué reunión con UX **antes** de presentar al cliente. + +**Puntos levantados:** + +**"¿Cómo entra el primer contenido al sistema?"** +- UX: "Ah... no pensamos en eso. ¿Ustedes van a poblar la base de datos?" +- Yo: "¿Y cuando cliente quiera agregar nueva ruta? ¿Vamos a alterar BD en producción?" + +**"¿Quién es el dueño del sistema?"** +- UX: "RRHH, imagino." +- Yo: "¿Solo una persona? ¿Y si sale de la empresa? ¿Cómo delega?" + +**"¿RRHH pidió reportes?"** +- UX: "No fue mencionado en el briefing." +- Yo: "RRHH siempre necesita reportes. Es para compliance (NR, ISO)." + +--- + +### Etapa 2: Requisitos Funcionales Identificados + +Propuse 4 módulos adicionales **esenciales**: + +#### 1. Sistema de Administración + +**Funcionalidades:** +- Usuario estándar: Solo realiza capacitaciones +- Usuario admin: Gestiona contenido + ve reportes +- Admin puede promover otros usuarios a admin +- Control de acceso (admin general vs admin de área) + +**Por qué es crítico:** +Sin esto, sistema es estático (contenido nunca se actualiza). + +--- + +#### 2. CRUD de Contenido + +**a) Registro de Rutas:** +- Nombre de la ruta +- Descripción +- Orden de los microlearnings +- Ruta activa/inactiva (permite despublicar) + +**b) Registro de Microlearnings:** +- Título +- Tipo: Texto simple (2 párrafos) O Video +- Upload de imagen (si texto) +- URL de video (si video) +- Orden dentro de la ruta + +**c) Registro de Preguntas:** +- Pregunta (texto) +- 3 opciones de respuesta: + - "Excelente" (verde) + - "Regular" (amarillo) + - "Malo" (rojo) +- Puntuación por respuesta (ej: 10, 5, 0 puntos) +- Feedback personalizado por respuesta + +**Por qué es crítico:** +Cliente necesita actualizar contenido sin llamar a dev/DBA. + +--- + +#### 3. Exportación de Datos + +**Funcionalidades:** +- Exportar a Excel (.xlsx) +- Filtros: + - Por período (fecha inicio/fin) + - Por ruta + - Por empleado + - Por área/departamento +- Columnas exportadas: + - Nombre del empleado + - Matrícula + - Ruta completada + - Puntuación total + - Fecha de conclusión + - Respuestas individuales (para auditoría) + +**Por qué es crítico:** +RRHH necesita evidenciar capacitación para: +- Normas Reglamentarias (NR-13, NR-20 - gases inflamables) +- Auditorías ISO +- Procesos laborales + +--- + +#### 4. Gestión de Usuarios + +**Funcionalidades:** +- Importar empleados (upload CSV/Excel) +- Registro manual +- Activar/desactivar usuarios +- Asignar rutas obligatorias por área +- Notificaciones de pendientes + +**Por qué es crítico:** +Empresa tiene 500+ empleados, registro manual es inviable. + +--- + +### Etapa 3: Presentación al Cliente + +**Abordaje:** + +1. Mostré wireframes del UX (interfaz bonita) +2. Pregunté: "¿Cómo van a registrar la primera ruta?" +3. Cliente: "Ah... buena pregunta. No habíamos pensado en eso." +4. Presenté los 4 módulos adicionales +5. Cliente: "Tiene total sentido! Sin esto no podemos usar." + +**Resultado:** +- Propuesta aprobada **con módulos adicionales** +- Alcance ajustado (timeline + presupuesto) +- Zero retrabajo futuro +- Cliente reconoció valor agregado + +--- + +## Implementación + +### Mi Rol en el Proyecto + +**1. Solution Architect** +- Identificación de requisitos no funcionales +- Diseño de arquitectura (módulos, integraciones) +- Definición de tecnologías + +**2. Tech Lead** +- Liderazgo técnico del equipo (3 devs) +- Code review +- Definición de estándares de código +- Gestión de riesgos técnicos + +**3. Product Owner Técnico** +- Creación de **user stories** completas +- Priorización de backlog +- Refinamiento continuo con cliente + +--- + +### Stack Técnico Elegido + +**Backend:** +- `.NET 7` - APIs REST +- `Entity Framework Core` - ORM +- `SQL Server` - Base de datos +- `ClosedXML` - Generación de Excel + +**Frontend:** +- `React` - Interfaz web +- `Material-UI` - Componentes +- `React Player` - Player de video +- `Chart.js` - Gráficos de progreso + +**Infraestructura:** +- `Azure App Service` - Hospedaje +- `Azure Blob Storage` - Almacenamiento de videos/imágenes +- `Azure SQL Database` - Base de datos gestionada + +--- + +### User Stories Creadas + +Escribí **32 user stories** cubriendo todos los flujos. Ejemplos: + +**US-01: Registrar Ruta (Admin)** +``` +Como administrador del sistema +Quiero registrar una nueva ruta de capacitación +Para que empleados puedan realizar los cursos + +Criterios de aceptación: +- Admin accede menú "Rutas" → "Nueva Ruta" +- Completa: Nombre, Descripción, Estado (Activa/Inactiva) +- Puede agregar microlearnings existentes a la ruta +- Define orden de los microlearnings (drag & drop) +- Sistema valida campos obligatorios +- Guarda y muestra mensaje de éxito +``` + +**US-15: Realizar Microlearning (Empleado)** +``` +Como empleado +Quiero realizar un microlearning de mi ruta +Para aprender sobre el tema y ganar puntos + +Criterios de aceptación: +- Empleado accede ruta asignada +- Ve lista de microlearnings (no completados primero) +- Hace clic en microlearning → abre pantalla con: + - Texto (2 párrafos) + Imagen O + - Player de video embebido +- Botón "Continuar" aparece después de: + - 30s (si texto) + - Final del video (si video) +- Marca microlearning como visto +- Pregunta de test aparece automáticamente +``` + +**US-22: Exportar Resultados (Admin)** +``` +Como administrador +Quiero exportar resultados de capacitación a Excel +Para generar reportes de compliance y auditorías + +Criterios de aceptación: +- Admin accede "Reportes" → "Exportar" +- Selecciona filtros (período, ruta, área) +- Hace clic "Generar Excel" +- Sistema procesa y descarga archivo .xlsx +- Excel contiene columnas: Nombre, Matrícula, Ruta, Puntos, Fecha, Respuestas +- Formato legible (headers en negrita, columnas autoajustadas) +``` + +--- + +## Características Clave Implementadas + +### 1. Sistema de Puntuación Gamificado + +**Mecánica:** +- Cada pregunta vale puntos (configurable) +- Respuesta "Excelente": 10 puntos +- Respuesta "Regular": 5 puntos +- Respuesta "Malo": 0 puntos + +**Dashboard del empleado:** +- Puntuación total +- Ranking (opcional, configurable) +- Badges por rutas completadas +- Progreso visual (barra de %) + +**Por qué funciona:** +Empleados de planta se enganchan más con elementos de gamificación. + +--- + +### 2. Microlearning Adaptativo + +**Tipos de contenido:** + +**Texto + Imagen:** +- 2 párrafos (máx 300 palabras) +- 1 imagen ilustrativa +- Ideal para: Procedimientos, normas, conceptos + +**Video:** +- Videos cortos (2-5 min) +- Player embebido (YouTube/Vimeo o upload) +- Ideal para: Demostraciones, operaciones de equipo + +**¿Por qué microlearning?** +- Empleados realizan en el intervalo (10-15min) +- Contenido corto = mayor retención +- Facilita actualización (vs cursos largos) + +--- + +### 3. Sistema de Administración Delegada + +**Jerarquía:** + +``` +Admin General (RRHH) + ↓ puede promover +Admin de Área (Gerentes) + ↓ puede visualizar solo +Empleados de su área +``` + +**Permisos:** +- Admin general: Crea rutas, promueve admins, ve todos los datos +- Admin de área: Ve solo reportes de su área +- Empleado: Solo realiza capacitaciones + +**Auditoría:** +- Logs de quién creó/editó cada contenido +- Histórico de promociones a admin +- Compliance SOX/ISO + +--- + +### 4. Exportación para Compliance + +**Formato del Excel generado:** + +| Matrícula | Nombre | Área | Ruta | Fecha Conclusión | Puntos | Estado | +|-----------|------|------|--------|----------------|--------|--------| +| 1001 | João Silva | Producción | Seguridad NR-20 | 15/11/2024 | 95/100 | ✅ Aprobado | +| 1002 | María Santos | Logística | Manejo Gases | 14/11/2024 | 78/100 | ✅ Aprobado | + +**Pestaña adicional: Detalle de Respuestas** +- Permite auditoría: "¿Empleado X acertó pregunta Y?" +- Evidencia para procesos laborales +- Compliance NR-13/NR-20 + +--- + +## Resultados e Impacto + +### Sistema en Producción + +**Estado actual:** En uso hace 4+ meses + +**Métricas de adopción:** +- 👥 500+ empleados registrados +- 📚 12 rutas activas +- 📖 150+ microlearnings creados +- ✅ 8.000+ capacitaciones completadas +- 📊 100+ reportes exportados (compliance) + +**Tasa de conclusión:** 87% (media industria: 45%) + +--- + +### Impacto en el Cliente + +**Antes:** +- Capacitaciones presenciales (costo alto, agenda difícil) +- Evidencias en papel (pérdidas, difícil auditoría) +- Dificultad en actualizar contenido + +**Después:** +- Capacitación asíncrona (empleado realiza cuando puede) +- Evidencias digitales (compliance facilitado) +- RRHH actualiza contenido sin llamar a TI +- Reducción del 70% en costo de capacitación + +**Feedback del cliente:** +> "Si hubiéramos implementado solo lo que pedimos inicialmente, el sistema sería inútil. El análisis previo salvó el proyecto." + +--- + +### Valor del Solution Design + +**ROI del análisis preventa:** + +**Escenario A (sin análisis):** +1. Desarrollar solo interfaz (2 meses) +2. Cliente prueba y percibe que falta CRUD (1 mes después) +3. Refacción para agregar módulos (2+ meses) +4. **Total: 5+ meses + frustración del cliente** + +**Escenario B (con análisis - lo que hicimos):** +1. Identificar requisitos antes (1 semana) +2. Aprobar alcance completo (1 semana) +3. Desarrollar solución correcta (4 meses) +4. **Total: 4 meses + cliente satisfecho** + +**Economía:** 1+ mes de retrabajo + costo de oportunidad + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React` `Material-UI` `Azure App Service` `Azure Blob Storage` `ClosedXML` `Chart.js` `User Stories` `Solution Design` `Tech Lead` + +--- + +## Decisiones Clave & Trade-offs + +### ¿Por qué no usar LMS listo? (Moodle, Canvas) + +**Alternativas consideradas:** +1. ❌ Moodle (open-source, gratuito) +2. ❌ Totara/Canvas (LMS corporativo) +3. ✅ **Desarrollo custom** + +**Justificación:** +- LMS genérico: Complejidad innecesaria (foros, wikis, etc) +- Cliente quiere **solo microlearning** (simplicidad) +- Costo de licencia LMS > costo de dev custom +- Integración con AD/SSO del cliente (más fácil custom) +- UX optimizada para planta (mobile-first, touch) + +--- + +### ¿Por qué 3 opciones de respuesta (vs 4-5)? + +**Elección:** Verde (Excelente), Amarillo (Regular), Rojo (Malo) + +**Justificación:** +- Empleados de planta prefieren simplicidad +- Colores universales (semáforo) +- Evita paradoja de la elección (menos opciones = más engagement) +- Gamificación más clara + +--- + +### ¿Por qué Export Excel (vs Dashboard online)? + +**Ambos fueron implementados**, pero Excel es crítico para: + +**Compliance regulatorio:** +- Auditores piden "archivo firmado digitalmente" +- NR-13/NR-20 exigen evidencia física +- Procesos laborales aceptan Excel + +**Flexibilidad:** +- RRHH puede hacer análisis personalizados en Excel +- Combinar con otras fuentes de datos +- Presentaciones para dirección + +--- + +## Lecciones Aprendidas + +### 1. Solution Design Previene Retrabajo + +**Lección:** 1 semana de análisis crítico economiza meses de refacción. + +**Aplicación:** +- Siempre cuestionar especificaciones incompletas +- Pensar en el "día siguiente" (¿quién gestiona esto en producción?) +- Involucrar cliente en discusiones de requisitos + +--- + +### 2. UX ≠ Requisitos Funcionales + +**Lección:** Wireframes bonitos no sustituyen análisis de requisitos. + +**UX se enfoca en:** Cómo usuario **usa** el sistema +**Solution Design se enfoca en:** Cómo sistema **funciona** end-to-end + +Ambos son necesarios y complementarios. + +--- + +### 3. Preguntar "¿Cómo?" es Más Importante que "¿Qué?" + +**Cliente dice:** "Quiero rutas y microlearnings" +**Solution Designer pregunta:** "¿Cómo entra la primera ruta al sistema?" + +Esta pregunta simple reveló 4 módulos faltantes. + +--- + +### 4. User Stories Bien Escritas Aceleran Desarrollo + +**Inversión:** 2 semanas escribiendo 32 user stories detalladas + +**Retorno:** +- Devs sabían exactamente qué construir +- Zero ambigüedad +- Muy pocos bugs (requisitos claros) +- Cliente validó historias antes de codificar + +**Lección:** Tiempo gastado en planificación reduce tiempo de desarrollo. + +--- + +### 5. Compliance es Requisito Oculto + +**En industrias reguladas** (salud, energía, químico), siempre habrá: +- Necesidad de auditoría +- Exportación de evidencias +- Logs de quién hizo qué + +**Lección:** Preguntar sobre compliance **antes**, no después. + +--- + +## Desafíos Superados + +| Desafío | Solución | Resultado | +|---------|---------|-----------| +| Especificación incompleta | Análisis crítico preventa | Alcance correcto desde inicio | +| Cliente sin conocimiento técnico | User stories en lenguaje de negocio | Cliente validó requisitos | +| Empleados con baja familiaridad digital | UX simplificado (3 botones, colores) | 87% tasa de conclusión | +| Compliance NR-13/NR-20 | Export Excel con detalle | Aprobado en 2 auditorías | +| Gestión de 500+ usuarios | Import CSV + jerarquía de admins | Onboarding en 1 semana | + +--- + +## Próximos Pasos (Roadmap Futuro) + +**Funcionalidades planificadas:** + +1. **Notificaciones Push** + - Recordar empleado de capacitación pendiente + - Avisar de nueva ruta obligatoria + +2. **App Mobile Nativo** + - Offline-first (videos descargados) + - Empleados sin computadora + +3. **Certificados Digitales** + - PDF firmado digitalmente + - QR code para validación + +4. **Inteligencia de Datos** + - ¿Qué microlearnings tienen más error? + - Identificar gaps de conocimiento por área + +--- + +**Resultado:** Sistema funcional en producción, cliente satisfecho, zero retrabajo - todo porque 1 semana fue invertida en **pensar antes de codificar**. + +[¿Necesita análisis crítico de requisitos? Póngase en contacto](#contact) diff --git a/Content/Cases/es/pharma-digital-transformation.md b/Content/Cases/es/pharma-digital-transformation.md new file mode 100644 index 0000000..3dee40b --- /dev/null +++ b/Content/Cases/es/pharma-digital-transformation.md @@ -0,0 +1,577 @@ +--- +title: "MVP Digital para Laboratorio Farmacéutico - De Cero a Producción" +slug: "pharma-digital-transformation" +summary: "Liderazgo de squad en proyecto greenfield para laboratorio farmacéutico, construyendo MVP de plataforma digital con integraciones complejas (Salesforce, Twilio, APIs oficiales) partiendo de cero absoluto - sin Git, sin servidores, sin infraestructura." +client: "Laboratorio Farmacéutico" +industry: "Farmacéutica & Salud" +timeline: "4 meses (2 meses de retraso planificado)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - MVP + - Digital Transformation + - .NET + - React + - Next.js + - Salesforce + - Twilio + - SQL Server + - Tech Lead + - Greenfield +featured: true +order: 3 +date: 2023-03-01 +seo_title: "MVP Digital Farmacéutico - Transformación Digital de Cero" +seo_description: "Caso de construcción de MVP digital para laboratorio farmacéutico partiendo de cero: sin Git, sin infraestructura, con integraciones complejas y entrega exitosa." +seo_keywords: "MVP, digital transformation, pharma, .NET, React, Next.js, Salesforce, greenfield project, tech lead" +--- + +## Descripción General + +Laboratorio farmacéutico en el **inicio de transformación digital** contrata consultoría para construir plataforma de descuentos para médicos prescriptores, partiendo de prototipo en WordPress. + +**Desafío único:** Comenzar proyecto greenfield en empresa **sin infraestructura básica** de desarrollo - sin Git, sin servidores aprovisionados, sin procesos definidos. + +**Contexto:** Proyecto ejecutado en ambiente de múltiples squads. **Entrega exitosa en producción** a pesar de los desafíos iniciales de infraestructura, con retraso controlado de 2 meses. + +--- + +## Desafío + +### Transformación Digital... Partiendo de Cero Absoluto + +**Estado inicial de la empresa (2023):** + +❌ **Sin Git/versionamiento** +- Código solo en máquinas locales +- Histórico inexistente +- Colaboración imposible + +❌ **Sin servidores aprovisionados** +- Ambiente de desarrollo inexistente +- Homologación no configurada +- Producción no preparada + +❌ **Sin procesos de desarrollo** +- Sin CI/CD +- Sin code review +- Sin gestión de tareas estructurada + +❌ **Sin equipo técnico interno experimentado** +- Equipo sin familiaridad con stacks modernos +- Primer contacto con React, APIs REST +- Inexperiencia con integraciones complejas + +**Punto de partida técnico:** +- Prototipo funcional en **WordPress** +- Contenido y textos ya aprobados +- UX/UI definido +- Reglas de negocio documentadas (parcialmente) + +--- + +### Integraciones Complejas Requeridas + +El MVP necesitaba integrar con múltiples sistemas externos: + +1. 🔐 **Salesforce** - Registro de pedidos de descuento +2. 📱 **Twilio** - SMS para validación de login (2FA) +3. 🏥 **API oficial de médicos** - Validación de CRM + datos profesionales +4. 🎯 **Interplayers** - Envío de registros de descuento por CPF +5. 📄 **WordPress** - Lectura de contenido (CMS headless) +6. 💾 **SQL Server** - Persistencia de datos + +**Complejidad adicional:** +- Diferentes credenciales/ambientes por integración +- SLAs variados (Twilio crítico, WordPress tolerante) +- Tratamiento de errores específico por provider +- Compliance LGPD (datos sensibles de médicos) + +--- + +## Arquitectura de Solución + +### Estrategia: Start Small, Build Solid + +**Decisión inicial:** Explicar al equipo el proceso que seguiríamos, estableciendo fundaciones antes de codificar. + +### Fase 1: Setup de Infraestructura Básica (Semanas 1-2) + +Incluso sin servidores aprovisionados, inicié setup esencial: + +**Git & Versionamiento:** +```bash +# Repositorio estructurado desde día 1 +git init +git flow init # Branch strategy definida + +# Estructura de monorepo +/ +├── frontend/ # Next.js + React +├── backend/ # .NET APIs +├── cms-adapter/ # WordPress integration +└── docs/ # Arquitectura y ADRs +``` + +**Proceso explicado al equipo:** +1. ✅ Todo en Git (commits atómicos, mensajes descriptivos) +2. ✅ Feature branches (nunca commit directo en main) +3. ✅ Code review obligatorio (2 aprobaciones) +4. ✅ CI/CD preparado (para cuando servidores estén listos) + +**Ambientes locales primero:** +- Docker Compose para desarrollo local +- Mock de APIs externas (hasta que lleguen credenciales) +- SQL Server local con seeds de datos + +--- + +### Fase 2: Arquitectura Moderna & Desacoplada + +``` +┌─────────────────────────────────────────────────────┐ +│ FRONTEND (Next.js + React) │ +│ - SSR para SEO │ +│ - Client-side para interactividad │ +│ - Consumo de APIs │ +└────────────┬────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ BACKEND APIs (.NET 7) │ +│ - REST APIs │ +│ - Authentication/Authorization │ +│ - Business logic │ +│ - Orchestration layer │ +└────┬────┬────┬────┬────┬─────────────────────────┬──┘ + │ │ │ │ │ │ + ▼ ▼ ▼ ▼ ▼ ▼ +┌────────┐ ┌──────┐ ┌──────┐ ┌────────┐ ┌────────┐ ┌──────────┐ +│Salesf. │ │Twilio│ │CRM │ │Interpl.│ │WordPr. │ │SQL Server│ +│ │ │ │ │API │ │ │ │(CMS) │ │ │ +└────────┘ └──────┘ └──────┘ └────────┘ └────────┘ └──────────┘ +``` + +**Stack elegido:** + +**Frontend:** +- `Next.js 13` - SSR, routing, optimizaciones +- `React 18` - Componentes, hooks, context +- `TypeScript` - Type safety +- `Tailwind CSS` - Styling moderno + +**Backend:** +- `.NET 7` - APIs REST +- `Entity Framework Core` - ORM +- `SQL Server 2019` - Base de datos +- `Polly` - Resilience patterns (retry, circuit breaker) + +**¿Por qué Next.js en vez de mantener WordPress?** +- ✅ Performance (SSR vs PHP monolítico) +- ✅ SEO optimizado (crítico para farmacéutica) +- ✅ Experiencia moderna (SPA cuando necesario) +- ✅ Escalabilidad +- ✅ WordPress mantenido solo como CMS (headless) + +--- + +### Fase 3: Integraciones (Core del Proyecto) + +#### 1. Salesforce - Campañas y Registro de Pedidos + +**Solución implementada:** + +Salesforce fue configurado para gestionar dos funcionalidades principales: + +**a) Campañas de descuento:** +- Marketing configura campañas en Salesforce (medicamento X, descuento Y%, período) +- Backend consulta campañas activas vía API +- Frontend (Next.js) muestra porcentaje de descuento disponible basado en: medicamento + campaña activa + +**b) Registro de pedidos:** +- Usuario informa: CRM del médico, UF, CPF del paciente, medicamento +- Sistema valida datos (CRM real vía API oficial, CPF válido) +- Porcentaje es calculado automáticamente (campañas de Salesforce + reglas del CMS) +- Pedido es registrado en Salesforce con todos los datos (compliance LGPD) + +**Desafíos técnicos superados:** +- Autenticación OAuth2 con refresh token automático +- Rate limiting (Salesforce tiene límites de API/día) +- Retry logic para fallas transitorias (Polly) +- Enmascaramiento de CPF para logs (LGPD) + +--- + +#### 2. Twilio - Autenticación por SMS (2FA) + +**Solución implementada:** + +Sistema de autenticación de dos factores para garantizar seguridad: + +**Flujo de login:** +1. Usuario informa teléfono +2. Backend genera código de 6 dígitos (válido por 5 minutos) +3. SMS enviado vía Twilio ("Su código: 123456") +4. Usuario digita código en frontend +5. Backend valida código + timestamp de expiración +6. Token JWT emitido tras validación exitosa + +**Compliance y auditoría:** +- Teléfonos enmascarados en logs (LGPD) +- Auditoría completa (quién, cuándo, qué SMS) +- Tasa de entrega: 99.8% + +--- + +#### 3. API Oficial de Médicos (Consejo Regional de Medicina) + +**Solución implementada:** + +Validación automática de médicos vía API oficial de los consejos de medicina: + +**Validaciones realizadas:** +- CRM existe y está activo en el consejo +- Nombre del médico corresponde al CRM informado +- Especialidad es permitida (regla de negocio del laboratorio) +- UF corresponde al estado de registro + +**Optimizaciones:** +- Cache de 24 horas para reducir llamadas a API oficial +- Fallback en caso de API fuera del aire (notifica admin) +- Retry automático para fallas transitorias + +**Por qué esto importa:** +Garantiza que solo médicos reales y activos puedan prescribir descuentos, evitando fraudes. + +--- + +#### 4. WordPress como CMS Headless + +**Solución implementada:** + +Marketing continúa gestionando contenido en WordPress (familiar), pero frontend es Next.js moderno. + +**Arquitectura:** +- WordPress: Gestiona textos, imágenes, reglas de campañas +- WordPress REST API: Expone contenido vía JSON +- Next.js: Consume API y renderiza con SSR (SEO optimizado) + +**Beneficios:** +- ✅ Marketing no necesita aprender nueva herramienta +- ✅ Frontend moderno (performance, UX) +- ✅ SEO optimizado (Server-Side Rendering) +- ✅ Separación clara de responsabilidades (contenido vs código) + +--- + +### Fase 4: Resiliencia & Error Handling + +Con múltiples integraciones externas, fallas son inevitables. La solución fue implementar **patrones de resiliencia** usando biblioteca Polly (.NET): + +**Patrones implementados:** + +**1. Retry (Reintentar)** +- Si Salesforce/Twilio/CRM API fallan, sistema intenta automáticamente 2-3x +- Espera crece exponencialmente (1s, 2s, 4s) para evitar sobrecarga +- Solo errores transitorios (timeout, 503) son reintentados + +**2. Circuit Breaker (Disyuntor)** +- Si servicio falla 5x seguidas, "abre el circuito" por 30s +- Durante 30s, no intenta más (evita desperdiciar recursos) +- Tras 30s, intenta nuevamente (puede haber vuelto) + +**3. Timeout** +- Cada integración tiene tiempo máximo de respuesta +- Evita requisiciones trabadas indefinidamente + +**4. Fallback (Plan B)** +- Salesforce fuera: Pedido va a cola, procesa después +- Twilio fuera: Alerta administrador vía email +- CRM API fuera: Usa cache (datos de 24h atrás) +- WordPress fuera: Muestra contenido estático precargado + +**Estrategias por integración:** + +| Integración | Retry | Circuit Breaker | Timeout | Plan B | +|----------|-------|-----------------|---------|----------| +| Salesforce | 3x (exponencial) | 5 fallas/30s | 10s | Cola de retry | +| Twilio | 2x (lineal) | 3 fallas/60s | 5s | Alerta admin | +| CRM API | 3x (exponencial) | No | 15s | Cache | +| WordPress | No | No | 3s | Contenido estático | + +**Resultado en producción:** +- Salesforce tuvo mantenimiento (1h) → Sistema continuó funcionando (cola procesó después) +- Twilio tuvo inestabilidad → Retry automático resolvió 95% de los casos +- Zero downtime percibido por los usuarios + +--- + +## Superando Desafíos de Infraestructura + +### Problema: Servidores No Aprovisionados + +**Solución temporal:** +1. Desarrollo 100% local (Docker Compose) +2. Mocks de servicios externos (cuando credenciales se retrasaron) +3. CI/CD preparado pero no activo (esperando infra) + +**Cuando llegaron servidores (semana 6):** +- Deploy en 2 horas (ya estaba preparado) +- Zero sorpresas (todo probado localmente) +- Rollout suave + +--- + +### Problema: Credenciales de Integración Retrasadas + +**Impacto:** Twilio y Salesforce demoraron 3 semanas en ser aprovisionadas. + +**Solución:** Crear versiones "mock" (simuladas) de cada integración: +- Mock de Twilio: Registra en log en vez de enviar SMS real +- Mock de Salesforce: Guarda pedido en archivo JSON local +- Mock de CRM API: Retorna datos ficticios de médicos + +**Cómo funciona:** +- Ambiente de desarrollo: Usa mocks (no necesita credenciales) +- Ambiente de producción: Usa integraciones reales (cuando lleguen credenciales) +- Cambio automático basado en configuración + +**Resultado:** Equipo continuó 100% productivo durante 3 semanas, probando flujos completos sin depender de credenciales. + +--- + +### Problema: Equipo Inexperto con Stack Moderno + +**Contexto:** Equipo no tenía experiencia con React, TypeScript, .NET Core moderno, APIs REST. + +**Abordaje de capacitación:** + +**1. Pair Programming (1h/día por desarrollador)** +- Tech lead trabaja al lado del dev +- Compartir pantalla + explicación en tiempo real +- Dev escribe código, tech lead guía + +**2. Code Review Educativo** +- No solo "aprobar" o "reprobar" +- Comentarios explican el **por qué** de cada sugerencia +- Ejemplo: "Siempre trate errores de requisiciones! Si API cae, usuario necesita saber qué pasó." + +**3. Documentación Viva** +- ADRs (Architecture Decision Records): ¿Por qué elegimos X y no Y? +- READMEs: Cómo ejecutar, cómo probar, cómo deployar +- Onboarding guide: De cero a primera feature + +**4. Live Coding Semanal (2h)** +- Tech lead resuelve problema real en vivo +- Equipo observa proceso de pensamiento +- Q&A al final + +**Resultado:** +- Tras 4 semanas, equipo estaba autónomo +- Calidad de código aumentó consistentemente +- Devs pasaron a hacer code review entre sí (peer review) + +--- + +## Resultados e Impacto + +### Entrega Exitosa A Pesar de los Desafíos + +**Contexto:** Programa con múltiples squads trabajando en paralelo. + +**Resultado alcanzado:** +- ✅ **MVP entregado en producción con éxito** +- ✅ Retraso controlado de 2 meses (significativamente menor que otras iniciativas del programa) +- ✅ Todas las integraciones funcionando según planificado +- ✅ Zero critical bugs en producción (primera semana) + +**¿Por qué la entrega fue exitosa?** + +1. **Setup anticipado** - Git, procesos, Docker local desde día 1 +2. **Mocks estratégicos** - Equipo no quedó bloqueado esperando infra +3. **Arquitectura sólida** - Resiliencia desde el inicio +4. **Upskilling continuo** - Equipo aprendió haciendo +5. **Comunicación proactiva** - Riesgos reportados temprano + +--- + +### Métricas del MVP + +**Performance:** +- ⚡ Tiempo de carga: <2s (95th percentile) +- 📱 Lighthouse score: 95+ (mobile) +- 🔒 SSL A+ rating + +**Integraciones:** +- 📊 Salesforce: 100% de pedidos sincronizados +- 📱 Twilio: 99.8% delivery rate +- 🏥 CRM API: 10k validaciones/día (media) +- 💾 SQL Server: 50k registros/mes + +**Adopción:** +- 👨‍⚕️ 2.000+ médicos registrados (3 primeros meses) +- 🎯 15.000+ pedidos de descuento procesados +- ⭐ 4.8/5 satisfacción (encuesta interna) + +--- + +### Impacto en el Cliente + +**Transformación digital iniciada:** +- ✅ Git implementado y adoptado +- ✅ Procesos de desarrollo establecidos +- ✅ Equipo interno capacitado en stacks modernos +- ✅ Infraestructura cloud configurada (Azure) +- ✅ Roadmap de evolución definido + +**Base para futuros proyectos:** +- Arquitectura sirvió de referencia para otras iniciativas +- Patrones de código documentados (coding standards) +- Pipelines CI/CD reutilizados + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React 18` `Next.js 13` `TypeScript` `Tailwind CSS` `Salesforce API` `Twilio` `WordPress REST API` `Docker` `Polly` `OAuth2` `JWT` `LGPD Compliance` + +--- + +## Decisiones Clave & Trade-offs + +### ¿Por qué Next.js en vez de React puro? + +**Requisitos:** +- SEO crítico (farmacéutica necesita ranquear) +- Performance (médicos usan mobile) +- Contenido dinámico (WordPress) + +**Next.js ofrece:** +- ✅ SSR out-of-the-box +- ✅ API routes (BFF pattern) +- ✅ Optimizaciones automáticas (image, fonts) +- ✅ Deploy simplificado (Vercel, Azure) + +--- + +### ¿Por qué mantener WordPress? + +**Alternativas consideradas:** +1. ❌ Migrar contenido a BD + CMS custom (tiempo) +2. ❌ Strapi/Contentful (costos + learning curve) +3. ✅ **WordPress headless** (mejor trade-off) + +**Ventajas:** +- Equipo de marketing ya sabe usar +- Contenido aprobado ya estaba ahí +- WordPress REST API es sólida +- Costo cero (ya estaba ejecutándose) + +--- + +### ¿Por qué .NET 7 en vez de Node.js? + +**Contexto:** Cliente tenía preferencia por stack Microsoft. + +**Beneficios adicionales:** +- Performance superior (vs Node en APIs) +- Type safety nativa (C#) +- Entity Framework (ORM maduro) +- Integración fácil con Azure (deploy futuro) +- Equipo del cliente tenía familiaridad + +--- + +## Lecciones Aprendidas + +### 1. Infraestructura Retrasada? Prepare Alternativas + +No espere servidores/credenciales para comenzar: +- Docker local es su amigo +- Mocks permiten progreso +- CI/CD puede ser preparado antes de tener dónde deployar + +**Lección:** Controle lo que puede controlar. + +--- + +### 2. Procesos > Herramientas + +Incluso sin Git corporativo, establecí: +- Branching strategy +- Code review +- Commit conventions +- Documentation standards + +**Resultado:** Cuando llegaron herramientas, equipo ya sabía usarlas. + +--- + +### 3. Upskilling es Inversión, No Costo + +Pair programming y code reviews tomaron tiempo, pero: +- ✅ Equipo quedó autónomo más rápido +- ✅ Calidad de código aumentó +- ✅ Knowledge sharing natural +- ✅ Onboarding de nuevos devs simplificado + +--- + +### 4. Resiliencia Desde el Inicio + +Implementar Polly (retry, circuit breaker) al inicio salvó en producción: +- Twilio tuvo inestabilidad (resuelta automáticamente) +- Salesforce tuvo mantenimiento (queue funcionó) +- CRM API tuvo lentitud (cache mitigó) + +**Lección:** No deje resiliencia para "después". Fallas van a ocurrir. + +--- + +### 5. Comunicación Clara de Riesgos + +Reporté semanalmente: +- Bloqueos (infraestructura, credenciales) +- Riesgos (plazos, dependencias) +- Soluciones alternativas (mocks, workarounds) + +**Resultado:** Stakeholders sabían exactamente el estado y no tuvieron sorpresas. + +--- + +## Desafíos & Cómo Fueron Superados + +| Desafío | Impacto | Solución | Resultado | +|---------|---------|---------|-----------| +| Sin Git | Bloqueo total | Setup local + GitLab Cloud | Equipo productivo día 1 | +| Sin servidores | Sin ambiente de dev | Docker Compose local | Dev/test local completo | +| Credenciales retrasadas | Integración bloqueada | Mock services | Progreso sin bloqueo | +| Equipo inexperto | Código de baja calidad | Pair prog + Code review | Ramp-up en 4 semanas | +| Múltiples integraciones | Complejidad alta | Polly + patterns | Zero downtime prod | + +--- + +## Próximos Pasos (Post-MVP) + +**Roadmap sugerido al cliente:** + +1. **Fase 2: Expansión de funcionalidades** + - Dashboard para médicos (histórico de pedidos) + - Notificaciones push (Firebase) + - Integración con e-commerce (compra directa) + +2. **Fase 3: Optimizaciones** + - Cache distribuido (Redis) + - CDN para assets estáticos + - Analytics avanzado (Amplitude) + +3. **Fase 4: Escala** + - Kubernetes (AKS) + - Microservicios (quebrar monolito) + - Event-driven architecture (Azure Service Bus) + +--- + +**Resultado:** MVP entregado en producción a pesar de comenzar literalmente de cero, estableciendo fundaciones sólidas para transformación digital del cliente. + +[¿Necesita construir un MVP en escenario desafiante? Póngase en contacto](#contact) diff --git a/Content/Cases/es/sap-integration-healthcare.md b/Content/Cases/es/sap-integration-healthcare.md new file mode 100644 index 0000000..0a6a430 --- /dev/null +++ b/Content/Cases/es/sap-integration-healthcare.md @@ -0,0 +1,211 @@ +--- +title: "Sistema de Integración SAP Healthcare" +slug: "sap-integration-healthcare" +summary: "Integración bidireccional procesando 100k+ transacciones/día con 99.9% uptime" +client: "Confidencial - Multinacional Healthcare" +industry: "Healthcare" +timeline: "6 meses" +role: "Arquitecto de Integración" +image: "" +tags: + - SAP + - C# + - .NET + - Integraciones + - Enterprise + - Healthcare +featured: true +order: 1 +date: 2023-06-15 +seo_title: "Caso: Integración SAP Healthcare - 100k Transacciones/Día" +seo_description: "Cómo arquitectamos sistema de integración SAP procesando 100k+ transacciones diarias con 99.9% uptime para empresa healthcare." +seo_keywords: "integración SAP, C#, .NET, SAP Connector, enterprise integration, healthcare" +--- + +## Descripción General + +**Cliente:** Multinacional Healthcare (confidencial) +**Tamaño:** 100.000+ empleados +**Proyecto:** Integración de beneficios +**Timeline:** 6 meses +**Mi Rol:** Arquitecto de Integración + +--- + +## Desafío + +El cliente tenía sistema interno de gestión de beneficios que necesitaba sincronizar con SAP ECC para procesar nómina. + +### Dolores principales: +- Proceso manual sujeto a errores +- 3-5 días de delay entre sistemas +- 100k empleados esperando procesamiento +- Picos de carga (fin de mes) + +### Constraints: +- Presupuesto limitado (sin SAP BTP) +- Equipo SAP interno pequeño (2 desarrolladores) +- Plazo ajustado (6 meses go-live) +- Sistema legacy .NET Framework 4.5 + +--- + +## Solución + +Arquitectura de integración bidireccional: + +``` +[Sistema Interno] ←→ [Queue] ←→ [SAP Connector] ←→ [SAP ECC] + ↓ ↓ + [MongoDB Logs] [ABAP Z_BENEFITS] +``` + +### Componentes: +- .NET Service con SAP Connector (NCo 3.0) +- ABAP transaction personalizada (Z_BENEFITS) +- Queue system (RabbitMQ) para retry logic +- MongoDB para auditoría y troubleshooting +- Scheduler (Hangfire) para batch processing + +### Flujo: +1. Sistema genera cambios (new hire, alteraciones) +2. Service procesa batch (500 registros/vez) +3. SAP Connector llama Z_BENEFITS vía RFC +4. SAP retorna estado (éxito/error) +5. Retry automático si falla (máx 3x) +6. Logs MongoDB para troubleshooting + +--- + +## Resultado + +### Métricas: +- **100k+** transacciones/día procesadas +- **99.9%** uptime +- Reducción de **5 días → 4 horas** (delay) +- **80%** reducción tiempo procesamiento +- **Zero** errores manuales (vs 2-3% antes) + +### Beneficios: +- Empleados reciben beneficios a tiempo +- Equipo RRHH economiza 40h/mes (trabajo manual) +- Auditoría completa (compliance) +- Escalable (crecimiento 30% año sin refactor) + +--- + +## Tech Stack + +`C#` `.NET Framework 4.5` `SAP NCo 3.0` `RabbitMQ` `MongoDB` `Hangfire` `Docker` `SAP ECC` `ABAP` `RFC` + +--- + +## Decisiones & Motivación + +### 💡 Decisión 1: SAP Connector vs SAP BTP + +**Opciones evaluadas:** +- SAP BTP (eventos, APIs modernas, cloud) +- SAP Connector (RFC directo, on-premise) + +**Elegimos:** SAP Connector + +**Motivación:** +- Cliente tenía SAP ECC on-premise (no S/4) +- Presupuesto no permitía licencia BTP +- Equipo SAP cómodo con ABAP/RFC +- Necesidades atendidas con RFC (no necesitaba event-driven real-time) + +**Trade-off aceptado:** +- Menos "moderno" que BTP, pero 100% funcional +- Costo $0 adicional vs $30k+/año BTP +- Delivery 2 meses más rápido (sin learning curve BTP) + +--- + +### 💡 Decisión 2: Queue System vs Llamadas Directas + +**Opciones evaluadas:** +- Llamadas síncronas directas (más simple) +- Queue con retry (más complejo) + +**Elegimos:** Queue + Retry + +**Motivación:** +- SAP ocasionalmente indisponible (mantenimiento) +- Picos de carga (fin de mes = 200k reqs) +- Garantizar zero pérdida de datos +- Resiliencia > simplicidad (ambiente crítico) + +**Implementación:** +- RabbitMQ con dead-letter queue +- Retry exponencial (1min, 5min, 15min) +- Alertas si 3 fallas consecutivas + +**Resultado:** +- Zero pérdida datos en 2 años producción +- Equipo RRHH no necesita "estar pendiente" + +--- + +### 💡 Decisión 3: ABAP Personalizado vs Standard + +**Opciones evaluadas:** +- BAPIs standard SAP (zero código ABAP) +- Transaction personalizada (Z_BENEFITS) + +**Elegimos:** Transaction personalizada + +**Motivación:** +- BAPIs standard no tenían validaciones específicas del negocio +- Cliente quería lógica centralizada en SAP (single source of truth) +- Permitió validaciones complejas (elegibilidad, dependientes, límites) + +**Trade-off:** +- Requiere mantenimiento ABAP (equipo SAP interno) +- Pero: Cliente prefirió vs lógica dual (riesgo desincronización) + +--- + +### ❌ Alternativas NO Elegidas + +**Webhook/Callback (Event-Driven):** +- Cliente no tenía infraestructura exponer APIs +- Sistema interno detrás de firewall +- Polling batch funciona bien para el caso + +**Microservicios Kubernetes:** +- Overkill para integración única +- Equipo no tenía expertise K8s +- Docker simple suficiente + +**Real-time Sync (<1min):** +- Negocio no necesita (batch diario ok) +- Costo infra aumentaría 3x +- 4h delay es aceptable para nómina + +--- + +## Aprendizajes + +### ✅ Lo que funcionó muy bien: +- Involucrar equipo SAP desde día 1 (buy-in) +- MongoDB para logs (troubleshooting 10x más rápido) +- Retry logic salvó innumerables veces + +### 🔄 Lo que haría diferente: +- Agregar health check endpoint más temprano +- Dashboard de monitoreo desde inicio (agregamos después) + +### 📚 Lecciones para próximos proyectos: +- Cliente "presupuesto limitado" ≠ "solución limitada" - creatividad resuelve +- Documentar TODAS decisiones arquitecturales (team turnover) +- Simplicidad vence complejidad cuando ambas funcionan (KISS) + +--- + +## ¿Necesita Algo Similar? + +Integraciones SAP complejas, sistemas legacy, o arquitectura de alta disponibilidad? + +[Conversemos sobre su desafío →](/#contact) diff --git a/Content/Cases/pt/asp-to-dotnet-migration.md b/Content/Cases/pt/asp-to-dotnet-migration.md new file mode 100644 index 0000000..6b46567 --- /dev/null +++ b/Content/Cases/pt/asp-to-dotnet-migration.md @@ -0,0 +1,329 @@ +--- +title: "Migração ASP 3.0 para .NET Core - Sistema de Rastreamento de Cargas" +slug: "asp-to-dotnet-migration" +summary: "Tech Lead na migração gradual de sistema crítico ASP 3.0 para .NET Core, com sincronização de dados entre versões e redução de custos de R$ 100k/ano em APIs de mapeamento." +client: "Empresa de Logística e Rastreamento" +industry: "Logística & Segurança" +timeline: "12 meses (migração completa)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - ASP Classic + - .NET Core + - SQL Server + - Migration + - Tech Lead + - OSRM + - APIs + - Arquitetura +featured: true +order: 2 +date: 2015-06-01 +seo_title: "Migração ASP 3.0 para .NET Core - Case Carneiro Tech" +seo_description: "Case de migração gradual de aplicação ASP 3.0 para .NET Core com sincronização de dados e redução de R$ 100k/ano em custos de APIs." +seo_keywords: "ASP migration, .NET Core, legacy modernization, SQL Server, OSRM, tech lead, routing API" +--- + +## Overview + +Sistema crítico de monitoramento de cargas de alto valor (TVs LED de R$ 3.000 cada, carregamentos de até 1000 unidades) usando rastreamento GPS via satélite. A aplicação cobria todo o ciclo: desde cadastro e avaliação de motoristas (background check policial) até monitoramento em tempo real e entrega final. + +**Desafio principal:** Migrar aplicação ASP 3.0 legada para .NET Core sem downtime, mantendo operação crítica 24/7. + +--- + +## Challenge + +### Sistema Legado Crítico + +A empresa operava um sistema mission-critical em **ASP 3.0** (Classic ASP) que não podia parar: + +**Tecnologia legada:** +- ASP 3.0 (tecnologia de 1998) +- SQL Server 2005 +- Cluster failover on-premises (perfeitamente capaz de suportar a carga) +- Integração com rastreadores GPS via satélite +- Google Maps API (custo: **R$ 100.000/ano** apenas para cálculo de rotas) + +**Restrições:** +- Sistema operando 24/7 com cargas de alto valor +- Impossibilidade de downtime durante migração +- Múltiplos módulos interdependentes +- Equipe precisava continuar desenvolvendo features durante a migração + +--- + +## Solution Architecture + +### Fase 1: Preparação da Infraestrutura (Meses 1-3) + +#### Upgrade do Banco de Dados +``` +SQL Server 2005 → SQL Server 2014 +- Backup completo e validação +- Migração de stored procedures +- Otimização de índices +- Testes de performance +``` + +#### Estratégia de Sincronização Dual-Write + +Implementei um **sistema de sincronização bidirecional** que permitia: + +1. **Módulos novos (.NET Core)** gravavam no banco novo +2. **Trigger automático** sincronizava dados para o banco legado +3. **Módulos antigos (ASP 3.0)** continuavam funcionando normalmente +4. **Zero downtime** durante toda a migração + +```csharp +// Exemplo de sincronização implementada +public class DualWriteService +{ + public async Task SaveDriver(Driver driver) + { + // Grava no banco novo (.NET Core) + await _newDbContext.Drivers.AddAsync(driver); + await _newDbContext.SaveChangesAsync(); + + // Trigger SQL sincroniza automaticamente para banco legado + // Módulos ASP 3.0 continuam funcionando + } +} +``` + +**Por que essa abordagem?** +- Permitiu migração **módulo por módulo** +- Equipe podia continuar desenvolvendo +- Rollback simples se necessário +- Redução de risco operacional + +--- + +### Fase 2: Migração Gradual dos Módulos (Meses 4-12) + +Migrei os módulos em ordem de complexidade crescente: + +**Ordem de migração:** +1. ✅ Cadastros básicos (motoristas, veículos) +2. ✅ Avaliação de risco (integração com base policial) +3. ✅ Gestão de cargas e rotas +4. ✅ Monitoramento GPS em tempo real +5. ✅ Alertas e notificações +6. ✅ Relatórios e analytics + +**Stack da aplicação migrada:** +- `.NET Core 1.0` (2015-2016 era o início do .NET Core) +- `Entity Framework Core` +- `SignalR` para monitoramento real-time +- `SQL Server 2014` +- APIs RESTful + +--- + +### Fase 3: Redução de Custos com OSRM (Economia de R$ 100k/ano) + +#### Problema: Custo Proibitivo do Google Maps + +A empresa gastava **R$ 100.000/ano** apenas com Google Maps Directions API para cálculo de rotas dos caminhões. + +#### Solução: OSRM (Open Source Routing Machine) + +Implementei uma solução baseada em **OSRM** (motor de roteamento open-source): + +**Arquitetura da solução:** + +``` +┌─────────────────┐ +│ Frontend │ +│ (Leaflet.js) │ +└────────┬────────┘ + │ + ▼ +┌─────────────────┐ ┌──────────────┐ +│ API Wrapper │─────▶│ OSRM Server │ +│ (.NET Core) │ │ (self-hosted)│ +└────────┬────────┘ └──────────────┘ + │ + ▼ +┌─────────────────┐ +│ Google Maps │ +│ (display only) │ +└─────────────────┘ +``` + +**Implementação:** + +1. **OSRM Server configurado** em servidor próprio +2. **API wrapper amigável** em .NET Core que: + - Recebia origem/destino + - Consultava OSRM (gratuito) + - Retornava todos os pontos da rota + - Formatava para o frontend +3. **Frontend** desenhava a rota no Google Maps (apenas visualização, sem API de rotas) + +```csharp +[HttpGet("route")] +public async Task GetRoute(double originLat, double originLng, + double destLat, double destLng) +{ + // Consulta OSRM (gratuito) + var osrmResponse = await _osrmClient.GetRouteAsync( + originLat, originLng, destLat, destLng); + + // Retorna pontos formatados para o frontend + return Ok(new { + points = osrmResponse.Routes[0].Geometry.Coordinates, + distance = osrmResponse.Routes[0].Distance, + duration = osrmResponse.Routes[0].Duration + }); +} +``` + +**Frontend com Leaflet:** + +```javascript +// Desenha rota no mapa (Google Maps apenas para tiles) +L.polyline(routePoints, {color: 'red'}).addTo(map); +``` + +#### Tentativa com OpenStreetMap + +Tentei substituir também o Google Maps (tiles) por **OpenStreetMap**, que funcionou tecnicamente, mas: + +❌ **Usuários não gostaram** da aparência +❌ Preferiam a interface familiar do Google Maps + +✅ **Decisão:** Manter Google Maps apenas para visualização (sem custo de API de rotas) + +**Resultado:** Economia de **~R$ 100.000/ano** mantendo qualidade das rotas. + +--- + +## Results & Impact + +### Migração Completa em 12 Meses + +✅ **100% dos módulos** migrados de ASP 3.0 para .NET Core +✅ **Zero downtime** durante toda a migração +✅ **Equipe produtiva** durante todo o processo +✅ Sistema mais rápido e escalável + +### Redução de Custos + +💰 **R$ 100.000/ano economizados** com substituição do Google Maps Directions API +📉 **Infraestrutura otimizada** com SQL Server 2014 + +### Melhorias Técnicas + +🚀 **Performance:** Aplicação .NET Core 3x mais rápida que ASP 3.0 +🔒 **Segurança:** Stack moderna com patches de segurança ativos +🛠️ **Manutenibilidade:** Código C# moderno vs VBScript legado +📊 **Monitoramento:** SignalR para tracking real-time mais eficiente + +--- + +## Fase Não Executada: Microserviços & Cloud + +### Planejamento Inicial + +Participei do **design e concepção** da segunda fase (nunca executada): + +**Arquitetura planejada:** +- Migração para **Azure** (cloud estava apenas começando em 2015) +- Quebra em **microserviços**: + - Serviço de autenticação + - Serviço de GPS/tracking + - Serviço de rotas + - Serviço de notificações +- **Event-driven architecture** com message queues + +**Por que não foi executada:** + +Saí da empresa logo após concluir a migração para .NET Core. A segunda fase ficou planejada mas não foi implementada por mim. + +--- + +## Tech Stack + +`ASP 3.0` `VBScript` `.NET Core 1.0` `C#` `Entity Framework Core` `SQL Server 2005` `SQL Server 2014` `OSRM` `Leaflet.js` `Google Maps` `SignalR` `REST APIs` `GPS/Satellite` `Migration Strategy` `Dual-Write Pattern` + +--- + +## Key Decisions & Trade-offs + +### Por que sincronização dual-write? + +**Alternativas consideradas:** +1. ❌ Big Bang migration (muito arriscado) +2. ❌ Manter tudo em ASP 3.0 (insustentável) +3. ✅ **Migração gradual com sync** (escolhido) + +**Justificativa:** +- Sistema crítico não podia parar +- Permitiu rollback módulo por módulo +- Equipe continuou produtiva + +### Por que OSRM em vez de outros? + +**Alternativas:** +- Google Maps: R$ 100k/ano ❌ +- Mapbox: Licença paga ❌ +- GraphHopper: Configuração complexa ❌ +- **OSRM: Open-source, rápido, configurável** ✅ + +### Por que não OpenStreetMap para tiles? + +**Decisão baseada em UX:** +- Tecnicamente funcionou perfeitamente +- Usuários preferiam interface familiar do Google +- **Compromisso:** Google Maps para visualização (grátis) + OSRM para rotas (grátis) + +--- + +## Lessons Learned + +### 1. Migração Gradual > Big Bang + +Migrar módulo por módulo com sincronização permitiu: +- Aprendizado contínuo +- Ajustes de rota durante o processo +- Confiança da equipe e stakeholders + +### 2. Open Source Pode Economizar Muito + +OSRM economizou **R$ 100k/ano** sem perda de qualidade. Mas requer: +- Expertise para configurar +- Infraestrutura própria +- Manutenção contínua + +### 3. UX > Tecnologia às Vezes + +OpenStreetMap era tecnicamente superior (gratuito), mas usuários preferiram Google Maps. **Lição:** Ouvir os usuários finais. + +### 4. Planeje Cloud, mas Valide o ROI + +Em 2015, cloud estava começando. A infraestrutura on-premises (cluster SQL Server) era perfeitamente capaz. **Não force cloud se não há benefício claro.** + +--- + +## Context: Por que 2015 foi um Momento Especial? + +**Estado da tecnologia em 2015:** + +- ☁️ **Cloud engatinhando:** AWS existia, Azure crescendo, mas adoção corporativa ainda baixa +- 🆕 **.NET Core 1.0 lançado** em junho/2016 (usamos RC durante projeto) +- 📱 **Microserviços:** Conceito novo, Docker em adoção inicial +- 🗺️ **Google Maps dominante:** APIs pagas, poucas alternativas open-source maduras + +**Desafios da época:** +- Ferramentas de migração ASP→.NET inexistentes +- Documentação .NET Core escassa (versão 1.0!) +- Padrões de arquitetura ainda se consolidando + +Este projeto foi **pioneiro** ao adotar .NET Core logo no início, quando a maioria migrava para .NET Framework 4.x. + +--- + +**Resultado:** Migração bem-sucedida de sistema crítico 24/7, economia de R$ 100k/ano, e base sólida para evolução futura. + +[Quer discutir uma migração similar? Entre em contato](#contact) diff --git a/Content/Cases/pt/cnpj-fast-process.md b/Content/Cases/pt/cnpj-fast-process.md new file mode 100644 index 0000000..9d7af75 --- /dev/null +++ b/Content/Cases/pt/cnpj-fast-process.md @@ -0,0 +1,382 @@ +--- +title: "CNPJ Fast - Processo de Migração para CNPJ Alfanumérico" +slug: "cnpj-fast-process" +summary: "Criação de metodologia estruturada para migração de aplicações ao novo formato de CNPJ alfanumérico brasileiro, vendida para seguradora e empresa de cobrança." +client: "Empresa de Consultoria (Interno)" +industry: "Consultoria & Transformação Digital" +timeline: "3 meses (criação do processo)" +role: "Solution Architect & Process Designer" +image: "" +tags: + - Process Design + - CNPJ + - Migration Strategy + - Regulatory Compliance + - Consulting + - Sales Enablement +featured: true +order: 3 +date: 2024-09-01 +seo_title: "CNPJ Fast - Metodologia de Migração CNPJ Alfanumérico" +seo_description: "Case de criação de processo estruturado para migração ao CNPJ alfanumérico brasileiro, vendido para seguradora e empresa de cobrança." +seo_keywords: "CNPJ alfanumérico, migration process, regulatory compliance, consulting, methodology" +--- + +## Overview + +Com a introdução do **CNPJ alfanumérico** pela Receita Federal brasileira, empresas enfrentavam o desafio de adaptar suas aplicações legadas que armazenavam CNPJ como campos numéricos (`bigint`, `numeric`, `int`). + +Criei o **CNPJ Fast**, uma metodologia estruturada para avaliar, planejar e executar migrações de CNPJ em aplicações e bancos de dados corporativos. + +**Resultado:** Processo vendido para **2 clientes** (seguradora e empresa de cobrança) antes mesmo da implementação. + +--- + +## Challenge + +### Mudança Regulatória Complexa + +**Contexto regulatório:** +- Receita Federal brasileira introduziu **CNPJ alfanumérico** +- CNPJ deixa de ser apenas números (14 dígitos) +- Passa a aceitar **letras e números** (formato alfanumérico) + +**Impacto nas empresas:** + +```sql +-- ANTES: CNPJ numérico +CNPJ BIGINT -- 12345678000190 + +-- DEPOIS: CNPJ alfanumérico +CNPJ VARCHAR(18) -- 12.ABC.678/0001-90 +``` + +**Problemas identificados:** + +1. 🗄️ **Banco de dados:** Colunas `BIGINT`, `NUMERIC`, `INT` não suportam caracteres +2. 🔑 **Chaves primárias:** CNPJ usado como PK em várias tabelas +3. 🔗 **Foreign keys:** Relacionamentos entre tabelas +4. 📊 **Volume:** Milhões de registros para migrar +5. 💻 **Aplicações:** Validações, máscaras, regras de negócio +6. 🧪 **Testes:** Garantir integridade após migração +7. ⏱️ **Downtime:** Janelas de manutenção limitadas + +**Sem um processo estruturado**, empresas arriscavam: +- Perda de dados +- Inconsistências no banco +- Aplicações quebradas +- Downtime prolongado + +--- + +## Solution: CNPJ Fast Process + +### Metodologia em 5 Fases + +Desenhei um processo estruturado que poderia ser replicado em diferentes clientes: + +``` +┌─────────────────────────────────────────────┐ +│ FASE 1: DISCOVERY & ASSESSMENT │ +│ - Inventário de aplicações │ +│ - Análise de schemas de banco │ +│ - Identificação de tabelas impactadas │ +│ - Estimativa de volume de dados │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 2: IMPACT ANALYSIS │ +│ - Mapeamento de dependências │ +│ - Análise de chaves primárias/estrangeiras │ +│ - Identificação de regras de negócio │ +│ - Avaliação de risco │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 3: MIGRATION PLANNING │ +│ - Estratégia de migração (phased commits) │ +│ - Scripts SQL automatizados │ +│ - Plano de rollback │ +│ - Janelas de manutenção │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 4: EXECUTION │ +│ - Migração de dados em lotes │ +│ - Atualização de aplicações │ +│ - Testes de integração │ +│ - Validação de integridade │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ FASE 5: VALIDATION & GO-LIVE │ +│ - Testes de regressão │ +│ - Validação de performance │ +│ - Go-live coordenado │ +│ - Monitoramento pós-migração │ +└─────────────────────────────────────────────┘ +``` + +--- + +### Fase 1: Discovery & Assessment + +**Objetivo:** Entender o escopo completo da migração + +**Entregáveis:** + +1. **Inventário de Aplicações** + - Lista de aplicações que usam CNPJ + - Tecnologias (ASP 3.0, VB6, .NET, microserviços) + - Criticidade de cada aplicação + +2. **Análise de Schema** + ```sql + -- Script de descoberta automática + SELECT + t.TABLE_SCHEMA, + t.TABLE_NAME, + c.COLUMN_NAME, + c.DATA_TYPE, + c.CHARACTER_MAXIMUM_LENGTH + FROM INFORMATION_SCHEMA.TABLES t + JOIN INFORMATION_SCHEMA.COLUMNS c + ON t.TABLE_NAME = c.TABLE_NAME + WHERE c.COLUMN_NAME LIKE '%CNPJ%' + AND c.DATA_TYPE IN ('bigint', 'numeric', 'int') + ORDER BY t.TABLE_SCHEMA, t.TABLE_NAME; + ``` + +3. **Estimativa de Volume** + - Total de registros por tabela + - Tamanho em GB + - Tempo estimado de migração + +**Exemplo de output:** + +| Tabela | Coluna | Tipo Atual | Registros | Criticidade | +|--------|--------|------------|-----------|-------------| +| Clientes | CNPJ_Cliente | BIGINT | 8.000.000 | Alta | +| Fornecedores | CNPJ_Fornecedor | NUMERIC(14) | 2.500.000 | Média | +| Transações | CNPJ_Pagador | BIGINT | 90.000.000 | Crítica | + +--- + +### Fase 2: Impact Analysis + +**Objetivo:** Mapear todas as dependências e riscos + +**Análise de chaves:** + +```sql +-- Identifica PKs e FKs envolvendo CNPJ +SELECT + fk.name AS FK_Name, + tp.name AS Parent_Table, + cp.name AS Parent_Column, + tr.name AS Referenced_Table, + cr.name AS Referenced_Column +FROM sys.foreign_keys fk +INNER JOIN sys.tables tp ON fk.parent_object_id = tp.object_id +INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id +INNER JOIN sys.columns cp ON fkc.parent_column_id = cp.column_id + AND fkc.parent_object_id = cp.object_id +INNER JOIN sys.tables tr ON fk.referenced_object_id = tr.object_id +INNER JOIN sys.columns cr ON fkc.referenced_column_id = cr.column_id + AND fkc.referenced_object_id = cr.object_id +WHERE cp.name LIKE '%CNPJ%' OR cr.name LIKE '%CNPJ%'; +``` + +**Avaliação de Risco:** + +- 🔴 **Alto:** Tabelas com CNPJ como PK e >10M registros +- 🟡 **Médio:** Tabelas com FK para CNPJ +- 🟢 **Baixo:** Tabelas sem constraints + +--- + +### Fase 3: Migration Planning + +**Estratégia de migração gradual:** + +Para evitar travamento de banco, desenhei estratégia de **phased commits**: + +```sql +-- Estratégia para tabelas grandes (>1M registros) + +-- 1. Adicionar nova coluna VARCHAR +ALTER TABLE Clientes +ADD CNPJ_Cliente_New VARCHAR(18) NULL; + +-- 2. Migração em lotes (commits faseados) +DECLARE @BatchSize INT = 100000; +DECLARE @RowsAffected INT = 1; + +WHILE @RowsAffected > 0 +BEGIN + UPDATE TOP (@BatchSize) Clientes + SET CNPJ_Cliente_New = FORMAT(CNPJ_Cliente, '00000000000000') + WHERE CNPJ_Cliente_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + WAITFOR DELAY '00:00:01'; -- Pausa entre lotes +END; + +-- 3. Remover constraints (PKs, FKs) +ALTER TABLE Clientes DROP CONSTRAINT PK_Clientes; + +-- 4. Renomear colunas +EXEC sp_rename 'Clientes.CNPJ_Cliente', 'CNPJ_Cliente_Old', 'COLUMN'; +EXEC sp_rename 'Clientes.CNPJ_Cliente_New', 'CNPJ_Cliente', 'COLUMN'; + +-- 5. Recriar constraints +ALTER TABLE Clientes +ADD CONSTRAINT PK_Clientes PRIMARY KEY (CNPJ_Cliente); + +-- 6. Remover coluna antiga (após validação) +ALTER TABLE Clientes DROP COLUMN CNPJ_Cliente_Old; +``` + +**Por que essa abordagem?** + +- ✅ Evita lock de tabela inteira +- ✅ Permite pausar/retomar migração +- ✅ Minimiza impacto em produção +- ✅ Facilita rollback se necessário + +--- + +### Fase 4 & 5: Execution e Validation + +**Checklist de execução:** + +- [ ] Backup completo do banco +- [ ] Executar scripts de migração em lotes +- [ ] Atualizar aplicações (validações, máscaras) +- [ ] Testes de integração +- [ ] Validação de integridade referencial +- [ ] Testes de performance +- [ ] Go-live coordenado +- [ ] Monitoramento 24h pós-migração + +--- + +## Sales Enablement: Apresentação UX + +**Colaboração com Gestor de UX:** + +O gestor de UX da empresa criou uma **apresentação visual impactante** do processo CNPJ Fast: + +**Conteúdo da apresentação:** +- 📊 Infográficos do processo de 5 fases +- 📈 Exemplos de estimativas de tempo/custo +- 🎯 Casos de uso (seguradoras, bancos, fintechs) +- ✅ Checklist executivo +- 📋 Templates de documentação + +**Resultado:** Apresentação usada pelo time comercial para prospecção. + +--- + +## Results & Impact + +### Vendas Realizadas + +**Cliente 1: Seguradora** +- Stack: ASP 3.0, VB6 components, .NET, microserviços +- Escopo: Migração completa de aplicações legadas +- Status: **Projeto vendido** (execução por outra equipe) +- Valor: [Confidencial] + +**Cliente 2: Empresa de Cobrança** +- Escopo: Migração de banco de dados (~100M registros) +- Status: **Projeto vendido e em execução** (por mim) +- Particularidade: Processo foi **reestruturado** para atender necessidades específicas +- Ver case completo: [Migração CNPJ - 100M Registros](/cases/cnpj-migration-database) + +--- + +### Impacto no Negócio + +💰 **2 projetos vendidos** antes mesmo da primeira execução +📈 **Processo replicável** para novos clientes +🎯 **Posicionamento** como especialista em migrações regulatórias +📚 **Base de conhecimento** para futuros projetos similares + +--- + +### Impacto Técnico + +🔧 **Metodologia testada** em cenários reais +📖 **Documentação reutilizável** (scripts, checklists, templates) +🚀 **Aceleração** de projetos similares (de semanas para dias) + +--- + +## Tech Stack + +`SQL Server` `Migration Strategy` `Process Design` `Regulatory Compliance` `ASP 3.0` `VB6` `.NET` `Microservices` `Batch Processing` `Database Optimization` + +--- + +## Key Decisions & Trade-offs + +### Por que processo estruturado? + +**Alternativas:** +1. ❌ Abordagem ad-hoc por projeto +2. ❌ Consultoria manual sem metodologia +3. ✅ **Processo replicável e escalável** + +**Justificativa:** +- Reduz tempo de Discovery +- Padroniza entregas +- Facilita vendas (apresentação pronta) +- Permite execução por diferentes equipes + +### Por que separar em 5 fases? + +**Benefícios:** +- Cliente pode aprovar fase a fase +- Permite ajustes durante o processo +- Facilita gestão de riscos +- Entregas incrementais + +--- + +## Lessons Learned + +### 1. UX/Apresentação Importa para Vendas + +A apresentação visual feita pelo gestor de UX foi **crucial** para fechar os 2 contratos. Processo técnico bom + apresentação ruim = sem vendas. + +### 2. Processo Vende, Não Apenas Execução + +Criar uma **metodologia documentada** tem mais valor comercial do que apenas oferecer "horas de consultoria". + +### 3. Cada Cliente é Único + +O cliente pediu **reestruturação do processo**. Um bom processo deve ser: +- Estruturado o suficiente para ser replicável +- Flexível o suficiente para customizar + +### 4. Colaboração Multidisciplinar + +Trabalhar com o gestor de UX (apresentações) + time comercial (vendas) + técnico (execução) = sucesso. + +--- + +## Next Steps + +**Oportunidades futuras:** + +1. 🌎 **Expansão:** Oferecer CNPJ Fast para mais setores (bancos, fintechs, varejo) +2. 📦 **Produto:** Transformar em ferramenta automatizada (SaaS) +3. 📚 **Treinamento:** Capacitar equipes internas de clientes +4. 🔄 **Evolução:** Adaptar processo para outras migrações regulatórias (PIX, Open Banking) + +--- + +**Resultado:** Metodologia estruturada que virou produto vendável, gerando receita antes mesmo da primeira execução técnica. + +[Quer implementar CNPJ Fast na sua empresa? Entre em contato](#contact) diff --git a/Content/Cases/pt/cnpj-migration-database.md b/Content/Cases/pt/cnpj-migration-database.md new file mode 100644 index 0000000..0dc0fd7 --- /dev/null +++ b/Content/Cases/pt/cnpj-migration-database.md @@ -0,0 +1,469 @@ +--- +title: "Migração CNPJ Alfanumérico - 100 Milhões de Registros" +slug: "cnpj-migration-database" +summary: "Execução de migração massiva de CNPJ numérico para alfanumérico em banco de dados com ~100M registros, usando estratégia de commits faseados para evitar travamento." +client: "Empresa de Cobrança" +industry: "Cobrança & Serviços Financeiros" +timeline: "Em execução" +role: "Database Architect & Tech Lead" +image: "" +tags: + - SQL Server + - Database Migration + - CNPJ + - Performance Optimization + - Batch Processing + - Big Data +featured: true +order: 4 +date: 2024-11-01 +seo_title: "Migração CNPJ Alfanumérico - 100M Registros | Carneiro Tech" +seo_description: "Case de migração massiva de CNPJ em banco de dados com 100 milhões de registros usando commits faseados e otimizações de performance." +seo_keywords: "database migration, SQL Server, CNPJ, batch processing, performance optimization, phased commits" +--- + +## Overview + +Uma empresa de cobrança que trabalha com bancos de dados de informação transitória (sem software proprietário) precisa adaptar seus sistemas ao novo formato de **CNPJ alfanumérico** brasileiro. + +**Desafio principal:** Migrar ~**100 milhões de registros** em tabelas com colunas `BIGINT` e `NUMERIC` para `VARCHAR`, sem travar o banco de dados em produção. + +**Status:** Projeto em execução (preparação de scripts de migração). + +--- + +## Challenge + +### Volume Massivo de Dados + +**Contexto da empresa:** +- Empresa de cobrança (não desenvolve software próprio) +- Trabalha com **dados transitórios** (alta rotatividade) +- Banco de dados SQL Server com volume crítico + +**Análise inicial revelou:** + +| Tabela | Coluna | Tipo Atual | Registros | Tamanho | +|--------|--------|------------|-----------|---------| +| Devedores | CNPJ_Devedor | BIGINT | 8.000.000 | 60 GB | +| Transações | CNPJ_Pagador | NUMERIC(14) | 90.000.000 | 1.2 TB | +| Empresas | CNPJ_Empresa | BIGINT | 2.500.000 | 18 GB | +| **TOTAL** | - | - | **~100.000.000** | **~1.3 TB** | + +**Problemas identificados:** + +1. 🔴 **Tabelas com 8M+ linhas** usando `BIGINT` para CNPJ +2. 🔴 **90 milhões de registros** em tabela de transações +3. 🔑 **CNPJ como chave primária** em algumas tabelas +4. 🔗 **Foreign keys** relacionando múltiplas tabelas +5. ⚠️ **Impossibilidade de downtime prolongado** (operação 24/7) +6. 💾 **Restrições de espaço** em disco (precisa estratégia eficiente) + +--- + +## Strategic Decision: Phased Commits + +### Por que NÃO fazer ALTER COLUMN direto? + +**Abordagem ingênua (NÃO funciona):** + +```sql +-- ❌ NUNCA FAÇA ISSO EM TABELAS GRANDES +ALTER TABLE Transacoes +ALTER COLUMN CNPJ_Pagador VARCHAR(18); +``` + +**Problemas:** +- 🔒 Trava a tabela inteira durante a conversão +- ⏱️ Pode levar horas/dias em tabelas grandes +- 💥 Bloqueia todas as operações (INSERT, UPDATE, SELECT) +- 🚨 Risco de timeout ou falha no meio da operação +- 🔙 Rollback complexo se algo der errado + +--- + +### Estratégia Escolhida: Column Swap com Commits Faseados + +**Baseado em experiência anterior**, decidi usar abordagem gradual: + +``` +┌─────────────────────────────────────────────┐ +│ 1. Criar nova coluna VARCHAR no FINAL │ +│ (operação rápida, não bloqueia tabela) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 2. UPDATE em lotes (commits faseados) │ +│ - 100k registros por vez │ +│ - Pausa entre lotes (evita contenção) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 3. Remover PKs e FKs │ +│ (após 100% migrado) │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 4. Renomear colunas (swap) │ +│ - CNPJ → CNPJ_Old │ +│ - CNPJ_New → CNPJ │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 5. Recriar PKs/FKs com nova coluna │ +└─────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────┐ +│ 6. Validação e exclusão da coluna antiga │ +└─────────────────────────────────────────────┘ +``` + +**Por que essa abordagem?** + +✅ **Sem lock de tabela completa** (operação incremental) +✅ **Pode pausar/retomar** a qualquer momento +✅ **Monitoramento de progresso** em tempo real +✅ **Rollback simples** (basta dropar nova coluna) +✅ **Minimiza impacto em produção** (commits pequenos) + +**Decisão tomada baseada em:** +- 📚 Experiência anterior com migrações de grande volume +- 🔍 Conhecimento de locks do SQL Server +- 🎯 Necessidade de zero downtime + +**Nota:** Essa decisão foi tomada **sem consultar IA** - baseada puramente em experiência prática de projetos anteriores. + +--- + +## Implementation Details + +### Fase 1: Criar Nova Coluna + +```sql +-- Operação rápida (metadata change apenas) +ALTER TABLE Transacoes +ADD CNPJ_Pagador_New VARCHAR(18) NULL; + +-- Adiciona índice temporário para acelerar lookups +CREATE NONCLUSTERED INDEX IX_Temp_CNPJ_New +ON Transacoes(CNPJ_Pagador_New) +WHERE CNPJ_Pagador_New IS NULL; +``` + +**Tempo estimado:** ~1 segundo (independente do tamanho da tabela) + +--- + +### Fase 2: Migração em Lotes (Core Strategy) + +```sql +-- Script de migração com commits faseados +DECLARE @BatchSize INT = 100000; -- 100k registros por lote +DECLARE @RowsAffected INT = 1; +DECLARE @TotalProcessed INT = 0; +DECLARE @StartTime DATETIME = GETDATE(); + +WHILE @RowsAffected > 0 +BEGIN + BEGIN TRANSACTION; + + -- Atualiza lote de 100k registros ainda não migrados + UPDATE TOP (@BatchSize) Transacoes + SET CNPJ_Pagador_New = RIGHT('00000000000000' + CAST(CNPJ_Pagador AS VARCHAR), 14) + WHERE CNPJ_Pagador_New IS NULL; + + SET @RowsAffected = @@ROWCOUNT; + SET @TotalProcessed = @TotalProcessed + @RowsAffected; + + COMMIT TRANSACTION; + + -- Log de progresso + PRINT 'Processed: ' + CAST(@TotalProcessed AS VARCHAR) + ' rows. Batch: ' + CAST(@RowsAffected AS VARCHAR); + PRINT 'Elapsed time: ' + CAST(DATEDIFF(SECOND, @StartTime, GETDATE()) AS VARCHAR) + ' seconds'; + + -- Pausa entre lotes (reduz contenção) + WAITFOR DELAY '00:00:01'; -- 1 segundo entre lotes +END; + +PRINT 'Migration completed! Total rows: ' + CAST(@TotalProcessed AS VARCHAR); +``` + +**Parâmetros configuráveis:** + +- `@BatchSize`: 100k (balanceado entre performance e lock time) + - Muito pequeno = muitas transações, overhead + - Muito grande = lock prolongado, impacto em prod +- `WAITFOR DELAY`: 1 segundo (dá tempo de outras queries rodarem) + +**Estimativas de tempo:** + +| Registros | Batch Size | Tempo Estimado | +|-----------|------------|----------------| +| 8.000.000 | 100.000 | ~2-3 horas | +| 90.000.000 | 100.000 | ~20-24 horas | + +**Vantagens:** +- ✅ Não trava aplicação +- ✅ Outras queries conseguem rodar entre os lotes +- ✅ Pode pausar (Ctrl+C) e retomar depois (WHERE NULL pega de onde parou) +- ✅ Log de progresso em tempo real + +--- + +### Fase 3: Remoção de Constraints + +```sql +-- Identifica todas as PKs e FKs envolvendo a coluna +SELECT name +FROM sys.key_constraints +WHERE type = 'PK' + AND parent_object_id = OBJECT_ID('Transacoes') + AND COL_NAME(parent_object_id, parent_column_id) = 'CNPJ_Pagador'; + +-- Remove PKs +ALTER TABLE Transacoes +DROP CONSTRAINT PK_Transacoes_CNPJ; + +-- Remove FKs (tabelas que referenciam) +ALTER TABLE Pagamentos +DROP CONSTRAINT FK_Pagamentos_Transacoes; +``` + +**Tempo estimado:** ~10 minutos (depende de quantas constraints existem) + +--- + +### Fase 4: Column Swap (Renomeação) + +```sql +-- Renomeia coluna antiga para _Old +EXEC sp_rename 'Transacoes.CNPJ_Pagador', 'CNPJ_Pagador_Old', 'COLUMN'; + +-- Renomeia nova coluna para o nome original +EXEC sp_rename 'Transacoes.CNPJ_Pagador_New', 'CNPJ_Pagador', 'COLUMN'; + +-- Altera para NOT NULL (após validação de 100% preenchido) +ALTER TABLE Transacoes +ALTER COLUMN CNPJ_Pagador VARCHAR(18) NOT NULL; +``` + +**Tempo estimado:** ~1 segundo (metadata change) + +--- + +### Fase 5: Recriação de Constraints + +```sql +-- Recria PK com nova coluna VARCHAR +ALTER TABLE Transacoes +ADD CONSTRAINT PK_Transacoes_CNPJ +PRIMARY KEY CLUSTERED (CNPJ_Pagador); + +-- Recria FKs +ALTER TABLE Pagamentos +ADD CONSTRAINT FK_Pagamentos_Transacoes +FOREIGN KEY (CNPJ_Pagador) REFERENCES Transacoes(CNPJ_Pagador); +``` + +**Tempo estimado:** ~30-60 minutos (depende do volume) + +--- + +### Fase 6: Validação e Limpeza + +```sql +-- Valida que 100% foi migrado +SELECT COUNT(*) +FROM Transacoes +WHERE CNPJ_Pagador IS NULL OR CNPJ_Pagador = ''; + +-- Valida integridade referencial +DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS; + +-- Se tudo OK, remove coluna antiga +ALTER TABLE Transacoes +DROP COLUMN CNPJ_Pagador_Old; + +-- Remove índice temporário +DROP INDEX IX_Temp_CNPJ_New ON Transacoes; +``` + +--- + +## Customização do Processo CNPJ Fast + +### Diferenças vs. Processo Original + +O processo **CNPJ Fast** original foi **reestruturado** para este cliente: + +**Mudanças principais:** + +| Aspecto | CNPJ Fast Original | Cliente (Customizado) | +|---------|-------------------|---------------------| +| **Foco** | Aplicações + DB | Apenas DB (sem software próprio) | +| **Discovery** | Inventário de apps | Apenas análise de schema | +| **Execução** | Múltiplas aplicações | Scripts SQL massivos | +| **Batch Size** | 50k-100k | 100k (otimizado para volume) | +| **Monitoramento** | Manual + ferramentas | Logs SQL em tempo real | +| **Rollback** | Processo complexo | Simples (DROP COLUMN) | + +**Motivo da reestruturação:** +- Cliente não tem aplicações próprias (apenas consome dados) +- Foco 100% em otimização de banco +- Volume muito maior que casos típicos (100M vs ~10M) + +--- + +## Tech Stack + +`SQL Server` `T-SQL` `Batch Processing` `Performance Tuning` `Database Optimization` `Migration Scripts` `Phased Commits` `Index Optimization` `Constraint Management` + +--- + +## Key Decisions & Trade-offs + +### Por que 100k por batch? + +**Testes de performance:** + +| Batch Size | Tempo/Batch | Lock Duration | Contenção | +|------------|-------------|---------------|-----------| +| 10.000 | 2s | Baixo | ✅ Mínimo | +| 50.000 | 8s | Médio | ✅ Aceitável | +| **100.000** | 15s | **Médio** | **✅ Balanceado** | +| 500.000 | 90s | Alto | ❌ Impacto em prod | +| 1.000.000 | 180s | Muito alto | ❌ Inaceitável | + +**Escolha:** 100k oferece melhor balanço entre performance e impacto. + +--- + +### Por que criar coluna no FINAL? + +**SQL Server internals:** +- Adicionar coluna no final = metadata change (rápido) +- Adicionar no meio = reescrita de páginas (lento) +- Para tabelas grandes, posição importa + +--- + +### Por que WAITFOR DELAY de 1 segundo? + +**Sem delay:** +- ❌ Batch processing consome 100% do I/O +- ❌ Queries de aplicação ficam lentas +- ❌ Lock escalation pode ocorrer + +**Com delay de 1s:** +- ✅ Outras queries têm janela para executar +- ✅ I/O distribuído +- ✅ Experiência do usuário preservada + +**Trade-off:** Migração leva +1s por batch (~25% mais lenta), mas sistema permanece responsivo. + +--- + +## Current Status & Next Steps + +### Status Atual (Dezembro 2024) + +📝 **Fase de Preparação:** +- ✅ Discovery completo (100M registros identificados) +- ✅ Scripts de migração desenvolvidos +- ✅ Testes em ambiente de homologação +- 🔄 Validação de performance +- ⏳ Aguardando janela de manutenção para produção + +### Próximos Passos + +1. **Backup completo** de produção +2. **Execução em produção** (ambiente 24/7) +3. **Monitoramento em tempo real** durante migração +4. **Validação pós-migração** (integridade, performance) +5. **Documentação de lessons learned** + +--- + +## Lessons Learned (Até Agora) + +### 1. Experiência Anterior Vale Ouro + +Decisão de usar phased commits veio de **experiência prática** em projetos anteriores, não de documentação ou IA. + +**Situações similares anteriores:** +- Migração de dados em e-commerce (50M registros) +- Conversão de encoding (UTF-8 em 100M+ rows) +- Particionamento de tabelas históricas + +--- + +### 2. "Measure Twice, Cut Once" + +Antes de executar em produção: +- ✅ Testes exaustivos em homologação +- ✅ Scripts validados e revisados +- ✅ Rollback testado +- ✅ Estimativas de tempo confirmadas + +**Tempo de preparação:** 3 semanas +**Tempo de execução:** Estimado em 48 horas + +**Ratio:** 10:1 (preparação vs execução) + +--- + +### 3. Customização > One-Size-Fits-All + +O processo CNPJ Fast original precisou ser **reestruturado** para este cliente. + +**Lição:** Processos devem ser: +- Estruturados o suficiente para repetir +- Flexíveis o suficiente para adaptar + +--- + +### 4. Monitoramento é Crucial + +Scripts com **log detalhado** de progresso permitem: +- Estimar tempo restante +- Identificar gargalos +- Pausar/retomar com confiança +- Reportar status para stakeholders + +```sql +-- Log example +Processed: 10.000.000 rows. Batch: 100.000 +Elapsed time: 3600 seconds (10% complete, ~9h remaining) +``` + +--- + +## Performance Optimizations + +### Otimizações Implementadas + +1. **Índice temporário WHERE NULL** + - Acelera lookup de registros não migrados + - Removido após conclusão + +2. **Batch size otimizado** + - Balanceado entre performance e lock time + +3. **Transaction log management** + ```sql + -- Verificar crescimento do log + DBCC SQLPERF(LOGSPACE); + + -- Ajustar recovery model (se permitido) + ALTER DATABASE MyDatabase SET RECOVERY SIMPLE; + ``` + +4. **Execução em horário de menor carga** + - Janela de manutenção noturna + - Final de semana (se possível) + +--- + +**Resultado esperado:** Migração de 100 milhões de registros em ~48 horas, sem downtime significativo e com possibilidade de rollback rápido. + +[Precisa migrar volumes massivos de dados? Entre em contato](#contact) diff --git a/Content/Cases/pt/industrial-learning-platform.md b/Content/Cases/pt/industrial-learning-platform.md new file mode 100644 index 0000000..ca51c12 --- /dev/null +++ b/Content/Cases/pt/industrial-learning-platform.md @@ -0,0 +1,588 @@ +--- +title: "Plataforma de Treinamento Industrial - De Wireframes a Sistema Completo" +slug: "industrial-learning-platform" +summary: "Solution Design para plataforma de microlearning em empresa de gases industriais. Identificação de requisitos críticos não mapeados (admin, cadastros, exportação) antes da apresentação ao cliente, evitando retrabalho e garantindo usabilidade real." +client: "Empresa de Gases Industriais" +industry: "Industrial & Manufatura" +timeline: "4 meses" +role: "Solution Architect & Tech Lead" +image: "" +tags: + - Solution Design + - EdTech + - Learning Platform + - Requirements Analysis + - Tech Lead + - User Stories + - .NET + - Product Design +featured: true +order: 5 +date: 2024-06-01 +seo_title: "Plataforma de Treinamento Industrial - Solution Design" +seo_description: "Case de Solution Design para plataforma de microlearning, identificando requisitos críticos antes da apresentação ao cliente e liderando desenvolvimento até produção." +seo_keywords: "solution design, learning platform, microlearning, requirements analysis, tech lead, industrial training" +--- + +## Overview + +Empresa de gases industriais solicita plataforma para treinar funcionários usando metodologia de **microlearning** (conteúdos curtos e objetivos). + +**Requisito inicial:** "Queremos apenas a estrutura - trilha, microlearning, pergunta de teste e pontuação." + +**Problema:** Especificação incompleta que resultaria em sistema **impossível de usar** (sem forma de cadastrar conteúdo, sem administradores, sem exportar resultados). + +**Solução:** Análise crítica de requisitos **antes da apresentação ao cliente**, identificando gaps funcionais e propondo solução completa. + +--- + +## Challenge + +### Wireframes Bonitos, Funcionalidade Incompleta + +**Situação inicial:** + +UX criou wireframes lindos mostrando: +- ✅ Trilhas de aprendizado +- ✅ Microlearnings (vídeo/texto + imagem) +- ✅ Perguntas de teste (múltipla escolha) +- ✅ Pontuação por funcionário + +**Problema identificado:** + +Ninguém (cliente, UX, comercial) pensou em: + +❌ **Como conteúdo entra no sistema?** +- Quem cadastra trilhas? +- Quem cria microlearnings? +- Quem escreve perguntas? +- Interface manual ou import? + +❌ **Quem gerencia o sistema?** +- Existe conceito de admin? +- RH pode criar admins? +- Gestor de área pode ver apenas seu time? + +❌ **Como dados saem do sistema?** +- RH precisa de relatórios +- Compliance precisa de evidências +- Como exportar dados? +- Formato: Excel? PDF? API? + +**Risco real:** + +Se desenvolvêssemos exatamente o que foi pedido: +- Sistema funcionaria tecnicamente ✅ +- **Mas seria completamente inutilizável** ❌ +- Cliente teria que pagar refação para incluir CRUD básico +- Retrabalho + custo adicional + frustração + +--- + +## Solution Design Process + +### Etapa 1: Análise Crítica (Antes da Apresentação) + +**Ação tomada:** Chamei reunião com UX **antes** de apresentar ao cliente. + +**Pontos levantados:** + +**"Como o primeiro conteúdo entra no sistema?"** +- UX: "Ah... não pensamos nisso. Vocês vão popular o banco?" +- Eu: "E quando cliente quiser adicionar nova trilha? Vamos alterar banco em produção?" + +**"Quem é o dono do sistema?"** +- UX: "O RH, imagino." +- Eu: "Apenas uma pessoa? E se ela sair da empresa? Como ela delega?" + +**"RH pediu relatórios?"** +- UX: "Não foi mencionado no briefing." +- Eu: "RH sempre precisa de relatórios. É para compliance (NR, ISO)." + +--- + +### Etapa 2: Requisitos Funcionais Identificados + +Propus 4 módulos adicionais **essenciais**: + +#### 1. Sistema de Administração + +**Funcionalidades:** +- Usuário padrão: Apenas faz treinamentos +- Usuário admin: Gerencia conteúdo + vê relatórios +- Admin pode promover outros usuários a admin +- Controle de acesso (admin geral vs admin de área) + +**Por que é crítico:** +Sem isso, sistema é estático (conteúdo nunca atualiza). + +--- + +#### 2. CRUD de Conteúdo + +**a) Cadastro de Trilhas:** +- Nome da trilha +- Descrição +- Ordem dos microlearnings +- Trilha ativa/inativa (permite despublicar) + +**b) Cadastro de Microlearnings:** +- Título +- Tipo: Texto simples (2 parágrafos) OU Vídeo +- Upload de imagem (se texto) +- URL de vídeo (se vídeo) +- Ordem dentro da trilha + +**c) Cadastro de Perguntas:** +- Pergunta (texto) +- 3 opções de resposta: + - "Ótimo" (verde) + - "Mais ou menos" (amarelo) + - "Ruim" (vermelho) +- Pontuação por resposta (ex: 10, 5, 0 pontos) +- Feedback customizado por resposta + +**Por que é crítico:** +Cliente precisa atualizar conteúdo sem chamar dev/DBA. + +--- + +#### 3. Exportação de Dados + +**Funcionalidades:** +- Exportar para Excel (.xlsx) +- Filtros: + - Por período (data início/fim) + - Por trilha + - Por funcionário + - Por área/departamento +- Colunas exportadas: + - Nome do funcionário + - Matrícula + - Trilha concluída + - Pontuação total + - Data de conclusão + - Respostas individuais (para auditoria) + +**Por que é crítico:** +RH precisa evidenciar treinamento para: +- Normas Regulamentadoras (NR-13, NR-20 - gases inflamáveis) +- Auditorias ISO +- Processos trabalhistas + +--- + +#### 4. Gestão de Usuários + +**Funcionalidades:** +- Importar funcionários (upload CSV/Excel) +- Cadastro manual +- Ativar/desativar usuários +- Atribuir trilhas obrigatórias por área +- Notificações de pendências + +**Por que é crítico:** +Empresa tem 500+ funcionários, cadastro manual é inviável. + +--- + +### Etapa 3: Apresentação ao Cliente + +**Abordagem:** + +1. Mostrei wireframes do UX (interface bonita) +2. Perguntei: "Como vocês vão cadastrar a primeira trilha?" +3. Cliente: "Ah... boa pergunta. Não tínhamos pensado nisso." +4. Apresentei os 4 módulos adicionais +5. Cliente: "Faz total sentido! Sem isso não conseguimos usar." + +**Resultado:** +- Proposta aprovada **com módulos adicionais** +- Escopo ajustado (timeline + orçamento) +- Zero retrabalho futuro +- Cliente reconheceu valor agregado + +--- + +## Implementation + +### Meu Papel no Projeto + +**1. Solution Architect** +- Identificação de requisitos não-funcionais +- Desenho de arquitetura (módulos, integrações) +- Definição de tecnologias + +**2. Tech Lead** +- Liderança técnica da equipe (3 devs) +- Code review +- Definição de padrões de código +- Gestão de riscos técnicos + +**3. Product Owner Técnico** +- Criação de **user stories** completas +- Priorização de backlog +- Refinamento contínuo com cliente + +--- + +### Stack Técnico Escolhido + +**Backend:** +- `.NET 7` - APIs REST +- `Entity Framework Core` - ORM +- `SQL Server` - Banco de dados +- `ClosedXML` - Geração de Excel + +**Frontend:** +- `React` - Interface web +- `Material-UI` - Componentes +- `React Player` - Player de vídeo +- `Chart.js` - Gráficos de progresso + +**Infraestrutura:** +- `Azure App Service` - Hospedagem +- `Azure Blob Storage` - Armazenamento de vídeos/imagens +- `Azure SQL Database` - Banco gerenciado + +--- + +### User Stories Criadas + +Escrevi **32 user stories** cobrindo todos os fluxos. Exemplos: + +**US-01: Cadastrar Trilha (Admin)** +``` +Como administrador do sistema +Quero cadastrar uma nova trilha de treinamento +Para que funcionários possam realizar os cursos + +Critérios de aceitação: +- Admin acessa menu "Trilhas" → "Nova Trilha" +- Preenche: Nome, Descrição, Status (Ativa/Inativa) +- Pode adicionar microlearnings existentes à trilha +- Define ordem dos microlearnings (drag & drop) +- Sistema valida campos obrigatórios +- Salva e exibe mensagem de sucesso +``` + +**US-15: Realizar Microlearning (Funcionário)** +``` +Como funcionário +Quero realizar um microlearning da minha trilha +Para aprender sobre o tema e ganhar pontos + +Critérios de aceitação: +- Funcionário acessa trilha atribuída +- Vê lista de microlearnings (não completados primeiro) +- Clica em microlearning → abre tela com: + - Texto (2 parágrafos) + Imagem OU + - Player de vídeo embarcado +- Botão "Continuar" aparece após: + - 30s (se texto) + - Final do vídeo (se vídeo) +- Marca microlearning como visto +- Pergunta de teste aparece automaticamente +``` + +**US-22: Exportar Resultados (Admin)** +``` +Como administrador +Quero exportar resultados de treinamento para Excel +Para gerar relatórios de compliance e auditorias + +Critérios de aceitação: +- Admin acessa "Relatórios" → "Exportar" +- Seleciona filtros (período, trilha, área) +- Clica "Gerar Excel" +- Sistema processa e baixa arquivo .xlsx +- Excel contém colunas: Nome, Matrícula, Trilha, Pontos, Data, Respostas +- Formato legível (headers em negrito, colunas autoajustadas) +``` + +--- + +## Key Features Implemented + +### 1. Sistema de Pontuação Gamificado + +**Mecânica:** +- Cada pergunta vale pontos (configurável) +- Resposta "Ótimo": 10 pontos +- Resposta "Mais ou menos": 5 pontos +- Resposta "Ruim": 0 pontos + +**Dashboard do funcionário:** +- Pontuação total +- Ranking (opcional, configurável) +- Badges por trilhas concluídas +- Progresso visual (barra de %) + +**Por que funciona:** +Funcionários de chão de fábrica engajam mais com elementos de gamificação. + +--- + +### 2. Microlearning Adaptativo + +**Tipos de conteúdo:** + +**Texto + Imagem:** +- 2 parágrafos (máx 300 palavras) +- 1 imagem ilustrativa +- Ideal para: Procedimentos, normas, conceitos + +**Vídeo:** +- Vídeos curtos (2-5 min) +- Player embarcado (YouTube/Vimeo ou upload) +- Ideal para: Demonstrações, operações de equipamento + +**Por que microlearning?** +- Funcionários fazem no intervalo (10-15min) +- Conteúdo curto = maior retenção +- Facilita atualização (vs cursos longos) + +--- + +### 3. Sistema de Administração Delegada + +**Hierarquia:** + +``` +Admin Geral (RH) + ↓ pode promover +Admin de Área (Gerentes) + ↓ pode visualizar apenas +Funcionários da sua área +``` + +**Permissões:** +- Admin geral: Cria trilhas, promove admins, vê todos os dados +- Admin de área: Vê apenas relatórios da sua área +- Funcionário: Apenas realiza treinamentos + +**Auditoria:** +- Logs de quem criou/editou cada conteúdo +- Histórico de promoções a admin +- Compliance SOX/ISO + +--- + +### 4. Exportação para Compliance + +**Formato do Excel gerado:** + +| Matrícula | Nome | Área | Trilha | Data Conclusão | Pontos | Status | +|-----------|------|------|--------|----------------|--------|--------| +| 1001 | João Silva | Produção | Segurança NR-20 | 15/11/2024 | 95/100 | ✅ Aprovado | +| 1002 | Maria Santos | Logística | Manuseio Gases | 14/11/2024 | 78/100 | ✅ Aprovado | + +**Aba adicional: Detalhamento de Respostas** +- Permite auditoria: "Funcionário X acertou pergunta Y?" +- Evidência para processos trabalhistas +- Compliance NR-13/NR-20 + +--- + +## Results & Impact + +### Sistema em Produção + +**Status atual:** Em uso há 4+ meses + +**Métricas de adoção:** +- 👥 500+ funcionários cadastrados +- 📚 12 trilhas ativas +- 📖 150+ microlearnings criados +- ✅ 8.000+ treinamentos concluídos +- 📊 100+ relatórios exportados (compliance) + +**Taxa de conclusão:** 87% (média indústria: 45%) + +--- + +### Impacto no Cliente + +**Antes:** +- Treinamentos presenciais (custo alto, agenda difícil) +- Evidências em papel (perdas, difícil auditoria) +- Dificuldade em atualizar conteúdo + +**Depois:** +- Treinamento assíncrono (funcionário faz quando pode) +- Evidências digitais (compliance facilitado) +- RH atualiza conteúdo sem chamar TI +- Redução de 70% no custo de treinamento + +**Feedback do cliente:** +> "Se tivéssemos implementado apenas o que pedimos inicialmente, o sistema seria inútil. A análise prévia salvou o projeto." + +--- + +### Valor do Solution Design + +**ROI da análise pré-venda:** + +**Cenário A (sem análise):** +1. Desenvolver apenas interface (2 meses) +2. Cliente testa e percebe que falta CRUD (1 mês depois) +3. Refação para adicionar módulos (2+ meses) +4. **Total: 5+ meses + frustração do cliente** + +**Cenário B (com análise - o que fizemos):** +1. Identificar requisitos antes (1 semana) +2. Aprovar escopo completo (1 semana) +3. Desenvolver solução correta (4 meses) +4. **Total: 4 meses + cliente satisfeito** + +**Economia:** 1+ mês de retrabalho + custo de oportunidade + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React` `Material-UI` `Azure App Service` `Azure Blob Storage` `ClosedXML` `Chart.js` `User Stories` `Solution Design` `Tech Lead` + +--- + +## Key Decisions & Trade-offs + +### Por que não usar LMS pronto? (Moodle, Canvas) + +**Alternativas consideradas:** +1. ❌ Moodle (open-source, gratuito) +2. ❌ Totara/Canvas (LMS corporativo) +3. ✅ **Desenvolvimento custom** + +**Justificativa:** +- LMS genérico: Complexidade desnecessária (fóruns, wikis, etc) +- Cliente quer **apenas microlearning** (simplicidade) +- Custo de licença LMS > custo de dev custom +- Integração com AD/SSO do cliente (mais fácil custom) +- UX otimizada para chão de fábrica (mobile-first, touch) + +--- + +### Por que 3 opções de resposta (vs 4-5)? + +**Escolha:** Verde (Ótimo), Amarelo (Mais ou menos), Vermelho (Ruim) + +**Justificativa:** +- Funcionários de chão de fábrica preferem simplicidade +- Cores universais (semáforo) +- Evita paradoxo da escolha (menos opções = mais engajamento) +- Gamificação mais clara + +--- + +### Por que Export Excel (vs Dashboard online)? + +**Ambos foram implementados**, mas Excel é crítico para: + +**Compliance regulatório:** +- Auditores pedem "arquivo assinado digitalmente" +- NR-13/NR-20 exigem evidência física +- Processos trabalhistas aceitam Excel + +**Flexibilidade:** +- RH pode fazer análises customizadas no Excel +- Combinar com outras fontes de dados +- Apresentações para diretoria + +--- + +## Lessons Learned + +### 1. Solution Design Previne Retrabalho + +**Lição:** 1 semana de análise crítica economiza meses de refação. + +**Aplicação:** +- Sempre questionar especificações incompletas +- Pensar no "dia seguinte" (quem gerencia isso em produção?) +- Envolver cliente em discussões de requisitos + +--- + +### 2. UX ≠ Requisitos Funcionais + +**Lição:** Wireframes bonitos não substituem análise de requisitos. + +**UX foca em:** Como usuário **usa** o sistema +**Solution Design foca em:** Como sistema **funciona** end-to-end + +Ambos são necessários e complementares. + +--- + +### 3. Perguntar "Como?" é Mais Importante que "O Quê?" + +**Cliente diz:** "Quero trilhas e microlearnings" +**Solution Designer pergunta:** "Como a primeira trilha entra no sistema?" + +Essa pergunta simples revelou 4 módulos faltantes. + +--- + +### 4. User Stories Bem Escritas Aceleram Desenvolvimento + +**Investimento:** 2 semanas escrevendo 32 user stories detalhadas + +**Retorno:** +- Devs sabiam exatamente o que construir +- Zero ambiguidade +- Pouquíssimos bugs (requisitos claros) +- Cliente validou histórias antes de codificar + +**Lição:** Tempo gasto em planejamento reduz tempo de desenvolvimento. + +--- + +### 5. Compliance é Requisito Oculto + +**Em indústrias reguladas** (saúde, energia, químico), sempre haverá: +- Necessidade de auditoria +- Exportação de evidências +- Logs de quem fez o quê + +**Lição:** Perguntar sobre compliance **antes**, não depois. + +--- + +## Challenges Overcome + +| Desafio | Solução | Resultado | +|---------|---------|-----------| +| Especificação incompleta | Análise crítica pré-venda | Escopo correto desde início | +| Cliente sem conhecimento técnico | User stories em linguagem de negócio | Cliente validou requisitos | +| Funcionários com baixa familiaridade digital | UX simplificado (3 botões, cores) | 87% taxa de conclusão | +| Compliance NR-13/NR-20 | Export Excel com detalhamento | Aprovado em 2 auditorias | +| Gestão de 500+ usuários | Import CSV + hierarquia de admins | Onboarding em 1 semana | + +--- + +## Next Steps (Roadmap Futuro) + +**Funcionalidades planejadas:** + +1. **Notificações Push** + - Lembrar funcionário de treinamento pendente + - Avisar de nova trilha obrigatória + +2. **App Mobile Nativo** + - Offline-first (vídeos baixados) + - Funcionários sem computador + +3. **Certificados Digitais** + - PDF assinado digitalmente + - QR code para validação + +4. **Inteligência de Dados** + - Quais microlearnings têm mais erro? + - Identificar gaps de conhecimento por área + +--- + +**Resultado:** Sistema funcional em produção, cliente satisfeito, zero retrabalho - tudo porque 1 semana foi investida em **pensar antes de codificar**. + +[Precisa de análise crítica de requisitos? Entre em contato](#contact) diff --git a/Content/Cases/pt/pharma-digital-transformation.md b/Content/Cases/pt/pharma-digital-transformation.md new file mode 100644 index 0000000..25d2ce4 --- /dev/null +++ b/Content/Cases/pt/pharma-digital-transformation.md @@ -0,0 +1,577 @@ +--- +title: "MVP Digital para Laboratório Farmacêutico - Do Zero à Produção" +slug: "pharma-digital-transformation" +summary: "Liderança de squad em projeto greenfield para laboratório farmacêutico, construindo MVP de plataforma digital com integrações complexas (Salesforce, Twilio, APIs oficiais) partindo do zero absoluto - sem Git, sem servidores, sem infraestrutura." +client: "Laboratório Farmacêutico" +industry: "Farmacêutica & Saúde" +timeline: "4 meses (2 meses de atraso planejado)" +role: "Tech Lead & Solution Architect" +image: "" +tags: + - MVP + - Digital Transformation + - .NET + - React + - Next.js + - Salesforce + - Twilio + - SQL Server + - Tech Lead + - Greenfield +featured: true +order: 3 +date: 2023-03-01 +seo_title: "MVP Digital Farmacêutico - Transformação Digital do Zero" +seo_description: "Case de construção de MVP digital para laboratório farmacêutico partindo do zero: sem Git, sem infraestrutura, com integrações complexas e entrega bem-sucedida." +seo_keywords: "MVP, digital transformation, pharma, .NET, React, Next.js, Salesforce, greenfield project, tech lead" +--- + +## Overview + +Laboratório farmacêutico no **início da transformação digital** contrata consultoria para construir plataforma de descontos para médicos prescritores, partindo de protótipo em WordPress. + +**Desafio único:** Começar projeto greenfield em empresa **sem infraestrutura básica** de desenvolvimento - sem Git, sem servidores provisionados, sem processos definidos. + +**Contexto:** Projeto executado em ambiente de múltiplas squads. **Entrega bem-sucedida em produção** apesar dos desafios iniciais de infraestrutura, com atraso controlado de 2 meses. + +--- + +## Challenge + +### Transformação Digital... Partindo do Zero Absoluto + +**Estado inicial da empresa (2023):** + +❌ **Sem Git/versionamento** +- Código apenas em máquinas locais +- Histórico inexistente +- Colaboração impossível + +❌ **Sem servidores provisionados** +- Ambiente de desenvolvimento inexistente +- Homologação não configurada +- Produção não preparada + +❌ **Sem processos de desenvolvimento** +- Sem CI/CD +- Sem code review +- Sem gestão de tarefas estruturada + +❌ **Sem equipe técnica interna experiente** +- Time sem familiaridade com stacks modernas +- Primeiro contato com React, APIs REST +- Inexperiência com integrações complexas + +**Ponto de partida técnico:** +- Protótipo funcional em **WordPress** +- Conteúdo e textos já aprovados +- UX/UI definido +- Regras de negócio documentadas (parcialmente) + +--- + +### Integrações Complexas Requeridas + +O MVP precisava integrar com múltiplos sistemas externos: + +1. 🔐 **Salesforce** - Registro de pedidos de desconto +2. 📱 **Twilio** - SMS para validação de login (2FA) +3. 🏥 **API oficial de médicos** - Validação de CRM + dados profissionais +4. 🎯 **Interplayers** - Envio de registros de desconto por CPF +5. 📄 **WordPress** - Leitura de conteúdo (CMS headless) +6. 💾 **SQL Server** - Persistência de dados + +**Complexidade adicional:** +- Diferentes credenciais/ambientes por integração +- SLAs variados (Twilio crítico, WordPress tolerante) +- Tratamento de erros específico por provider +- Compliance LGPD (dados sensíveis de médicos) + +--- + +## Solution Architecture + +### Estratégia: Start Small, Build Solid + +**Decisão inicial:** Explicar ao time o processo que iríamos seguir, estabelecendo fundações antes de codificar. + +### Fase 1: Setup de Infraestrutura Básica (Semanas 1-2) + +Mesmo sem servidores provisionados, iniciei setup essencial: + +**Git & Versionamento:** +```bash +# Repositório estruturado desde dia 1 +git init +git flow init # Branch strategy definida + +# Estrutura de monorepo +/ +├── frontend/ # Next.js + React +├── backend/ # .NET APIs +├── cms-adapter/ # WordPress integration +└── docs/ # Arquitetura e ADRs +``` + +**Processo explicado ao time:** +1. ✅ Tudo no Git (commits atômicos, mensagens descritivas) +2. ✅ Feature branches (nunca commit direto em main) +3. ✅ Code review obrigatório (2 aprovações) +4. ✅ CI/CD preparado (para quando servidores estiverem prontos) + +**Ambientes locais primeiro:** +- Docker Compose para desenvolvimento local +- Mock de APIs externas (até credenciais chegarem) +- SQL Server local com seeds de dados + +--- + +### Fase 2: Arquitetura Moderna & Desacoplada + +``` +┌─────────────────────────────────────────────────────┐ +│ FRONTEND (Next.js + React) │ +│ - SSR para SEO │ +│ - Client-side para interatividade │ +│ - Consumo de APIs │ +└────────────┬────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ BACKEND APIs (.NET 7) │ +│ - REST APIs │ +│ - Authentication/Authorization │ +│ - Business logic │ +│ - Orchestration layer │ +└────┬────┬────┬────┬────┬─────────────────────────┬──┘ + │ │ │ │ │ │ + ▼ ▼ ▼ ▼ ▼ ▼ +┌────────┐ ┌──────┐ ┌──────┐ ┌────────┐ ┌────────┐ ┌──────────┐ +│Salesf. │ │Twilio│ │CRM │ │Interpl.│ │WordPr. │ │SQL Server│ +│ │ │ │ │API │ │ │ │(CMS) │ │ │ +└────────┘ └──────┘ └──────┘ └────────┘ └────────┘ └──────────┘ +``` + +**Stack escolhido:** + +**Frontend:** +- `Next.js 13` - SSR, routing, otimizações +- `React 18` - Componentes, hooks, context +- `TypeScript` - Type safety +- `Tailwind CSS` - Styling moderno + +**Backend:** +- `.NET 7` - APIs REST +- `Entity Framework Core` - ORM +- `SQL Server 2019` - Banco de dados +- `Polly` - Resilience patterns (retry, circuit breaker) + +**Por que Next.js em vez de manter WordPress?** +- ✅ Performance (SSR vs PHP monolítico) +- ✅ SEO otimizado (critical para farmacêutica) +- ✅ Experiência moderna (SPA quando necessário) +- ✅ Escalabilidade +- ✅ WordPress mantido apenas como CMS (headless) + +--- + +### Fase 3: Integrações (Core do Projeto) + +#### 1. Salesforce - Campanhas e Registro de Pedidos + +**Solução implementada:** + +O Salesforce foi configurado para gerenciar duas funcionalidades principais: + +**a) Campanhas de desconto:** +- Marketing configura campanhas no Salesforce (medicamento X, desconto Y%, período) +- Backend consulta campanhas ativas via API +- Frontend (Next.js) exibe percentual de desconto disponível baseado em: medicamento + campanha ativa + +**b) Registro de pedidos:** +- Usuário informa: CRM do médico, UF, CPF do paciente, medicamento +- Sistema valida dados (CRM real via API oficial, CPF válido) +- Percentual é calculado automaticamente (campanhas do Salesforce + regras do CMS) +- Pedido é registrado no Salesforce com todos os dados (compliance LGPD) + +**Desafios técnicos superados:** +- Autenticação OAuth2 com refresh token automático +- Rate limiting (Salesforce tem limites de API/dia) +- Retry logic para falhas transitórias (Polly) +- Mascaramento de CPF para logs (LGPD) + +--- + +#### 2. Twilio - Autenticação por SMS (2FA) + +**Solução implementada:** + +Sistema de autenticação de dois fatores para garantir segurança: + +**Fluxo de login:** +1. Usuário informa telefone +2. Backend gera código de 6 dígitos (válido por 5 minutos) +3. SMS enviado via Twilio ("Seu código: 123456") +4. Usuário digita código no frontend +5. Backend valida código + timestamp de expiração +6. Token JWT emitido após validação bem-sucedida + +**Compliance e auditoria:** +- Telefones mascarados nos logs (LGPD) +- Auditoria completa (quem, quando, qual SMS) +- Taxa de entrega: 99.8% + +--- + +#### 3. API Oficial de Médicos (Conselho Regional de Medicina) + +**Solução implementada:** + +Validação automática de médicos via API oficial dos conselhos de medicina: + +**Validações realizadas:** +- CRM existe e está ativo no conselho +- Nome do médico corresponde ao CRM informado +- Especialidade é permitida (regra de negócio do laboratório) +- UF corresponde ao estado de registro + +**Otimizações:** +- Cache de 24 horas para reduzir chamadas à API oficial +- Fallback em caso de API fora do ar (notifica admin) +- Retry automático para falhas transitórias + +**Por que isso importa:** +Garante que apenas médicos reais e ativos possam prescrever descontos, evitando fraudes. + +--- + +#### 4. WordPress como CMS Headless + +**Solução implementada:** + +Marketing continua gerenciando conteúdo no WordPress (familiar), mas frontend é Next.js moderno. + +**Arquitetura:** +- WordPress: Gerencia textos, imagens, regras de campanhas +- WordPress REST API: Expõe conteúdo via JSON +- Next.js: Consome API e renderiza com SSR (SEO otimizado) + +**Benefícios:** +- ✅ Marketing não precisa aprender nova ferramenta +- ✅ Frontend moderno (performance, UX) +- ✅ SEO otimizado (Server-Side Rendering) +- ✅ Separação clara de responsabilidades (conteúdo vs código) + +--- + +### Fase 4: Resiliência & Error Handling + +Com múltiplas integrações externas, falhas são inevitáveis. A solução foi implementar **padrões de resiliência** usando biblioteca Polly (.NET): + +**Padrões implementados:** + +**1. Retry (Tentar novamente)** +- Se Salesforce/Twilio/CRM API falham, sistema tenta automaticamente 2-3x +- Espera cresce exponencialmente (1s, 2s, 4s) para evitar sobrecarga +- Apenas erros transitórios (timeout, 503) são retentados + +**2. Circuit Breaker (Disjuntor)** +- Se serviço falha 5x seguidas, "abre o circuito" por 30s +- Durante 30s, não tenta mais (evita desperdiçar recursos) +- Após 30s, tenta novamente (pode ter voltado) + +**3. Timeout** +- Cada integração tem tempo máximo de resposta +- Evita requisições travadas indefinidamente + +**4. Fallback (Plano B)** +- Salesforce fora: Pedido vai para fila, processa depois +- Twilio fora: Alerta administrador via email +- CRM API fora: Usa cache (dados de 24h atrás) +- WordPress fora: Exibe conteúdo estático pré-carregado + +**Estratégias por integração:** + +| Integração | Retry | Circuit Breaker | Timeout | Plano B | +|----------|-------|-----------------|---------|----------| +| Salesforce | 3x (exponencial) | 5 falhas/30s | 10s | Fila de retry | +| Twilio | 2x (linear) | 3 falhas/60s | 5s | Alerta admin | +| CRM API | 3x (exponencial) | Não | 15s | Cache | +| WordPress | Não | Não | 3s | Conteúdo estático | + +**Resultado em produção:** +- Salesforce teve manutenção (1h) → Sistema continuou funcionando (fila processou depois) +- Twilio teve instabilidade → Retry automático resolveu 95% dos casos +- Zero downtime percebido pelos usuários + +--- + +## Overcoming Infrastructure Challenges + +### Problema: Servidores Não Provisionados + +**Solução temporária:** +1. Desenvolvimento 100% local (Docker Compose) +2. Mocks de serviços externos (quando credenciais atrasaram) +3. CI/CD preparado mas não ativo (aguardando infra) + +**Quando servidores chegaram (semana 6):** +- Deploy em 2 horas (já estava preparado) +- Zero surpresas (tudo testado localmente) +- Rollout suave + +--- + +### Problema: Credenciais de Integração Atrasadas + +**Impacto:** Twilio e Salesforce demoraram 3 semanas para serem provisionadas. + +**Solução:** Criar versões "mock" (simuladas) de cada integração: +- Mock do Twilio: Registra no log em vez de enviar SMS real +- Mock do Salesforce: Salva pedido em arquivo JSON local +- Mock da CRM API: Retorna dados fictícios de médicos + +**Como funciona:** +- Ambiente de desenvolvimento: Usa mocks (não precisa de credenciais) +- Ambiente de produção: Usa integrações reais (quando credenciais chegarem) +- Troca automática baseada em configuração + +**Resultado:** Time continuou 100% produtivo durante 3 semanas, testando fluxos completos sem depender de credenciais. + +--- + +### Problema: Time Inexperiente com Stack Moderno + +**Contexto:** Equipe não tinha experiência com React, TypeScript, .NET Core moderno, APIs REST. + +**Abordagem de capacitação:** + +**1. Pair Programming (1h/dia por desenvolvedor)** +- Tech lead trabalha ao lado do dev +- Compartilhamento de tela + explicação em tempo real +- Dev escreve código, tech lead guia + +**2. Code Review Educativo** +- Não apenas "aprovar" ou "reprovar" +- Comentários explicam o **porquê** de cada sugestão +- Exemplo: "Sempre trate erros de requisições! Se API cair, usuário precisa saber o que aconteceu." + +**3. Documentação Viva** +- ADRs (Architecture Decision Records): Por que escolhemos X e não Y? +- READMEs: Como rodar, como testar, como deployar +- Onboarding guide: Do zero à primeira feature + +**4. Live Coding Semanal (2h)** +- Tech lead resolve problema real ao vivo +- Time observa processo de pensamento +- Q&A ao final + +**Resultado:** +- Após 4 semanas, time estava autônomo +- Qualidade de código aumentou consistentemente +- Devs passaram a fazer code review entre si (peer review) + +--- + +## Results & Impact + +### Entrega Bem-Sucedida Apesar dos Desafios + +**Contexto:** Programa com múltiplas squads trabalhando em paralelo. + +**Resultado alcançado:** +- ✅ **MVP entregue em produção com sucesso** +- ✅ Atraso controlado de 2 meses (significativamente menor que outras iniciativas do programa) +- ✅ Todas as integrações funcionando conforme planejado +- ✅ Zero critical bugs em produção (primeira semana) + +**Por que a entrega foi bem-sucedida?** + +1. **Setup antecipado** - Git, processos, Docker local desde dia 1 +2. **Mocks estratégicos** - Time não ficou bloqueado esperando infra +3. **Arquitetura sólida** - Resiliência desde o início +4. **Upskilling contínuo** - Time aprendeu fazendo +5. **Comunicação proativa** - Riscos reportados cedo + +--- + +### Métricas do MVP + +**Performance:** +- ⚡ Tempo de carregamento: <2s (95th percentile) +- 📱 Lighthouse score: 95+ (mobile) +- 🔒 SSL A+ rating + +**Integrações:** +- 📊 Salesforce: 100% de pedidos sincronizados +- 📱 Twilio: 99.8% delivery rate +- 🏥 CRM API: 10k validações/dia (média) +- 💾 SQL Server: 50k registros/mês + +**Adoção:** +- 👨‍⚕️ 2.000+ médicos cadastrados (3 primeiros meses) +- 🎯 15.000+ pedidos de desconto processados +- ⭐ 4.8/5 satisfação (pesquisa interna) + +--- + +### Impacto no Cliente + +**Transformação digital iniciada:** +- ✅ Git implementado e adotado +- ✅ Processos de desenvolvimento estabelecidos +- ✅ Time interno capacitado em stacks modernas +- ✅ Infraestrutura cloud configurada (Azure) +- ✅ Roadmap de evolução definido + +**Base para futuros projetos:** +- Arquitetura serviu de referência para outras iniciativas +- Padrões de código documentados (coding standards) +- Pipelines CI/CD reutilizados + +--- + +## Tech Stack + +`.NET 7` `C#` `Entity Framework Core` `SQL Server` `React 18` `Next.js 13` `TypeScript` `Tailwind CSS` `Salesforce API` `Twilio` `WordPress REST API` `Docker` `Polly` `OAuth2` `JWT` `LGPD Compliance` + +--- + +## Key Decisions & Trade-offs + +### Por que Next.js em vez de React puro? + +**Requisitos:** +- SEO crítico (farmacêutica precisa rankar) +- Performance (médicos usam mobile) +- Conteúdo dinâmico (WordPress) + +**Next.js oferece:** +- ✅ SSR out-of-the-box +- ✅ API routes (BFF pattern) +- ✅ Otimizações automáticas (image, fonts) +- ✅ Deploy simplificado (Vercel, Azure) + +--- + +### Por que manter WordPress? + +**Alternativas consideradas:** +1. ❌ Migrar conteúdo para banco + CMS custom (tempo) +2. ❌ Strapi/Contentful (custos + learning curve) +3. ✅ **WordPress headless** (melhor trade-off) + +**Vantagens:** +- Time de marketing já sabe usar +- Conteúdo aprovado já estava lá +- WordPress REST API é sólida +- Custo zero (já estava rodando) + +--- + +### Por que .NET 7 em vez de Node.js? + +**Contexto:** Cliente tinha preferência por Microsoft stack. + +**Benefícios adicionais:** +- Performance superior (vs Node em APIs) +- Type safety nativa (C#) +- Entity Framework (ORM maduro) +- Integração fácil com Azure (deploy futuro) +- Time do cliente tinha familiaridade + +--- + +## Lessons Learned + +### 1. Infraestrutura Atrasada? Prepare Alternativas + +Não espere servidores/credenciais para começar: +- Docker local é seu amigo +- Mocks permitem progresso +- CI/CD pode ser preparado antes de haver onde deployar + +**Lição:** Controle o que você pode controlar. + +--- + +### 2. Processos > Ferramentas + +Mesmo sem Git corporativo, estabeleci: +- Branching strategy +- Code review +- Commit conventions +- Documentation standards + +**Resultado:** Quando ferramentas chegaram, time já sabia usá-las. + +--- + +### 3. Upskilling é Investimento, Não Custo + +Pair programming e code reviews levaram tempo, mas: +- ✅ Time ficou autônomo mais rápido +- ✅ Qualidade de código aumentou +- ✅ Knowledge sharing natural +- ✅ Onboarding de novos devs simplificado + +--- + +### 4. Resiliência Desde o Início + +Implementar Polly (retry, circuit breaker) no início salvou em produção: +- Twilio teve instabilidade (resolvida automaticamente) +- Salesforce teve manutenção (queue funcionou) +- CRM API teve lentidão (cache mitigou) + +**Lição:** Não deixe resiliência para "depois". Falhas vão acontecer. + +--- + +### 5. Comunicação Clara de Riscos + +Reportei semanalmente: +- Bloqueios (infraestrutura, credenciais) +- Riscos (prazos, dependências) +- Soluções alternativas (mocks, workarounds) + +**Resultado:** Stakeholders sabiam exatamente o status e não tiveram surpresas. + +--- + +## Challenges & How They Were Overcome + +| Desafio | Impacto | Solução | Resultado | +|---------|---------|---------|-----------| +| Sem Git | Bloqueio total | Setup local + GitLab Cloud | Time produtivo dia 1 | +| Sem servidores | Sem ambiente de dev | Docker Compose local | Dev/test local completo | +| Credenciais atrasadas | Integração bloqueada | Mock services | Progresso sem bloqueio | +| Time inexperiente | Código de baixa qualidade | Pair prog + Code review | Ramp-up em 4 semanas | +| Múltiplas integrações | Complexidade alta | Polly + patterns | Zero downtime prod | + +--- + +## Next Steps (Pós-MVP) + +**Roadmap sugerido ao cliente:** + +1. **Fase 2: Expansão de funcionalidades** + - Dashboard para médicos (histórico de pedidos) + - Notificações push (Firebase) + - Integração com e-commerce (compra direta) + +2. **Fase 3: Otimizações** + - Cache distribuído (Redis) + - CDN para assets estáticos + - Analytics avançado (Amplitude) + +3. **Fase 4: Escala** + - Kubernetes (AKS) + - Microserviços (quebrar monolito) + - Event-driven architecture (Azure Service Bus) + +--- + +**Resultado:** MVP entregue em produção apesar de começar literalmente do zero, estabelecendo fundações sólidas para transformação digital do cliente. + +[Precisa construir um MVP em cenário desafiador? Entre em contato](#contact) diff --git a/Content/Cases/pt/sap-integration-healthcare.md b/Content/Cases/pt/sap-integration-healthcare.md new file mode 100644 index 0000000..1f31136 --- /dev/null +++ b/Content/Cases/pt/sap-integration-healthcare.md @@ -0,0 +1,211 @@ +--- +title: "Sistema de Integração SAP Healthcare" +slug: "sap-integration-healthcare" +summary: "Integração bidirecional processando 100k+ transações/dia com 99.9% uptime" +client: "Confidencial - Multinacional Healthcare" +industry: "Healthcare" +timeline: "6 meses" +role: "Arquiteto de Integração" +image: "" +tags: + - SAP + - C# + - .NET + - Integrações + - Enterprise + - Healthcare +featured: true +order: 1 +date: 2023-06-15 +seo_title: "Case: Integração SAP Healthcare - 100k Transações/Dia" +seo_description: "Como arquitetamos sistema de integração SAP processando 100k+ transações diárias com 99.9% uptime para empresa healthcare." +seo_keywords: "integração SAP, C#, .NET, SAP Connector, enterprise integration, healthcare" +--- + +## Overview + +**Cliente:** Multinacional Healthcare (confidencial) +**Porte:** 100.000+ funcionários +**Projeto:** Integração de benefícios +**Timeline:** 6 meses +**Meu Role:** Arquiteto de Integração + +--- + +## Desafio + +O cliente tinha sistema interno de gestão de benefícios que precisava sincronizar com SAP ECC para processar folha de pagamento. + +### Dores principais: +- Processo manual sujeito a erros +- 3-5 dias de delay entre sistemas +- 100k funcionários esperando processamento +- Picos de carga (final de mês) + +### Constraints: +- Budget limitado (sem SAP BTP) +- Time SAP interno pequeno (2 desenvolvedores) +- Prazo apertado (6 meses go-live) +- Sistema legado .NET Framework 4.5 + +--- + +## Solução + +Arquitetura de integração bidirecional: + +``` +[Sistema Interno] ←→ [Queue] ←→ [SAP Connector] ←→ [SAP ECC] + ↓ ↓ + [MongoDB Logs] [ABAP Z_BENEFITS] +``` + +### Componentes: +- .NET Service com SAP Connector (NCo 3.0) +- ABAP transaction customizada (Z_BENEFITS) +- Queue system (RabbitMQ) para retry logic +- MongoDB para auditoria e troubleshooting +- Scheduler (Hangfire) para batch processing + +### Fluxo: +1. Sistema gera mudanças (new hire, alterações) +2. Service processa batch (500 registros/vez) +3. SAP Connector chama Z_BENEFITS via RFC +4. SAP retorna status (sucesso/erro) +5. Retry automático se falha (max 3x) +6. Logs MongoDB para troubleshooting + +--- + +## Resultado + +### Métricas: +- **100k+** transações/dia processadas +- **99.9%** uptime +- Redução de **5 dias → 4 horas** (delay) +- **80%** redução tempo processamento +- **Zero** erros manuais (vs 2-3% antes) + +### Benefícios: +- Funcionários recebem benefícios on-time +- Time RH economiza 40h/mês (trabalho manual) +- Auditoria completa (compliance) +- Escalável (crescimento 30% ano sem refactor) + +--- + +## Tech Stack + +`C#` `.NET Framework 4.5` `SAP NCo 3.0` `RabbitMQ` `MongoDB` `Hangfire` `Docker` `SAP ECC` `ABAP` `RFC` + +--- + +## Decisões & Motivação + +### 💡 Decisão 1: SAP Connector vs SAP BTP + +**Opções avaliadas:** +- SAP BTP (eventos, APIs modernas, cloud) +- SAP Connector (RFC direto, on-premise) + +**Escolhemos:** SAP Connector + +**Motivação:** +- Cliente tinha SAP ECC on-premise (não S/4) +- Budget não permitia licença BTP +- Time SAP confortável com ABAP/RFC +- Necessidades atendidas com RFC (não precisava event-driven real-time) + +**Trade-off aceito:** +- Menos "moderno" que BTP, mas 100% funcional +- Custo R$ 0 adicional vs R$ 150k+/ano BTP +- Delivery 2 meses mais rápido (sem learning curve BTP) + +--- + +### 💡 Decisão 2: Queue System vs Calls Diretos + +**Opções avaliadas:** +- Chamadas síncronas diretas (mais simples) +- Queue com retry (mais complexo) + +**Escolhemos:** Queue + Retry + +**Motivação:** +- SAP ocasionalmente indisponível (manutenção) +- Picos de carga (final do mês = 200k reqs) +- Garantir zero perda de dados +- Resiliência > simplicidade (ambiente crítico) + +**Implementação:** +- RabbitMQ com dead-letter queue +- Retry exponencial (1min, 5min, 15min) +- Alertas se 3 falhas consecutivas + +**Resultado:** +- Zero perda dados em 2 anos produção +- Time RH não precisa "ficar de olho" + +--- + +### 💡 Decisão 3: ABAP Customizado vs Standard + +**Opções avaliadas:** +- BAPIs standard SAP (zero código ABAP) +- Transaction customizada (Z_BENEFITS) + +**Escolhemos:** Transaction customizada + +**Motivação:** +- BAPIs standard não tinham validações específicas do negócio +- Cliente queria lógica centralizada no SAP (single source of truth) +- Permitiu validações complexas (elegibilidade, dependentes, limites) + +**Trade-off:** +- Requer manutenção ABAP (time SAP interno) +- Mas: Cliente preferiu vs lógica dupla (risco dessincronia) + +--- + +### ❌ Alternativas NÃO Escolhidas + +**Webhook/Callback (Event-Driven):** +- Cliente não tinha infraestrutura expor APIs +- Sistema interno atrás de firewall +- Polling batch funciona bem para o caso + +**Microserviços Kubernetes:** +- Overkill para integração única +- Time não tinha expertise K8s +- Docker simples suficiente + +**Real-time Sync (<1min):** +- Negócio não precisa (batch diário ok) +- Custo infra aumentaria 3x +- 4h delay é aceitável para folha + +--- + +## Aprendizados + +### ✅ O que funcionou muito bem: +- Envolver time SAP desde dia 1 (buy-in) +- MongoDB para logs (troubleshooting 10x mais rápido) +- Retry logic salvou inúmeras vezes + +### 🔄 O que faria diferente: +- Adicionar health check endpoint mais cedo +- Dashboard de monitoramento desde início (adicionamos depois) + +### 📚 Lições para próximos projetos: +- Cliente "budget limitado" ≠ "solução limitada" - criatividade resolve +- Documentar TODAS decisões arquiteturais (team turnover) +- Simplicidade vence complexidade quando ambas funcionam (KISS) + +--- + +## Precisa de Algo Similar? + +Integrações SAP complexas, sistemas legados, ou arquitetura de alta disponibilidade? + +[Vamos conversar sobre seu desafio →](/#contact) diff --git a/Controllers/CasesController.cs b/Controllers/CasesController.cs new file mode 100644 index 0000000..51bcd6d --- /dev/null +++ b/Controllers/CasesController.cs @@ -0,0 +1,61 @@ +using Microsoft.AspNetCore.Mvc; +using CarneiroTech.Services; + +namespace CarneiroTech.Controllers; + +public class CasesController : Controller +{ + private readonly ICaseService _caseService; + private readonly ILogger _logger; + + public CasesController(ICaseService caseService, ILogger logger) + { + _caseService = caseService; + _logger = logger; + } + + // GET: /cases + public async Task Index(string? tag) + { + var cases = string.IsNullOrEmpty(tag) + ? await _caseService.GetAllCasesAsync() + : await _caseService.GetCasesByTagAsync(tag); + + var allTags = await _caseService.GetAllTagsAsync(); + + ViewData["Title"] = string.IsNullOrEmpty(tag) + ? "Cases - Carneiro Tech" + : $"Cases: {tag} - Carneiro Tech"; + ViewData["Description"] = string.IsNullOrEmpty(tag) + ? "Explore our portfolio of technical consulting projects and solution design cases." + : $"Technical consulting cases related to {tag}."; + ViewData["SelectedTag"] = tag; + ViewBag.AllTags = allTags; + + return View(cases); + } + + // GET: /cases/{slug} + [Route("cases/{slug}")] + public async Task Details(string slug) + { + var caseModel = await _caseService.GetCaseBySlugAsync(slug); + + if (caseModel == null) + { + _logger.LogWarning($"Case not found: {slug}"); + return NotFound(); + } + + ViewData["Title"] = !string.IsNullOrEmpty(caseModel.Metadata.SeoTitle) + ? caseModel.Metadata.SeoTitle + : caseModel.Metadata.Title; + ViewData["Description"] = !string.IsNullOrEmpty(caseModel.Metadata.SeoDescription) + ? caseModel.Metadata.SeoDescription + : caseModel.Metadata.Summary; + ViewData["Keywords"] = caseModel.Metadata.SeoKeywords; + ViewData["OgImage"] = caseModel.Metadata.Image; + + return View(caseModel); + } +} diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs new file mode 100644 index 0000000..b208f87 --- /dev/null +++ b/Controllers/HomeController.cs @@ -0,0 +1,100 @@ +using System.Diagnostics; +using System.Text; +using Microsoft.AspNetCore.Mvc; +using CarneiroTech.Models; +using CarneiroTech.Services; + +namespace CarneiroTech.Controllers; + +public class HomeController : Controller +{ + private readonly ILogger _logger; + private readonly ICaseService _caseService; + + public HomeController(ILogger logger, ICaseService caseService) + { + _logger = logger; + _caseService = caseService; + } + + public async Task Index() + { + var featuredCases = await _caseService.GetFeaturedCasesAsync(); + + ViewData["Title"] = "Carneiro Tech - Solution Design & Technical Consulting"; + ViewData["Description"] = "20+ years connecting business and technology. Specialized in technical proposals, MVP definition, and due diligence."; + ViewData["Keywords"] = "solution design, technical consulting, SAP integration, enterprise architecture, MVP definition, due diligence"; + + return View(featuredCases); + } + + public IActionResult Privacy() + { + ViewData["Title"] = "Privacy Policy - Carneiro Tech"; + return View(); + } + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public IActionResult Error() + { + return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); + } + + [Route("sitemap.xml")] + public async Task Sitemap() + { + var cases = await _caseService.GetAllCasesAsync(); + + var sitemap = new StringBuilder(); + sitemap.AppendLine(""); + sitemap.AppendLine(""); + + // Homepage + sitemap.AppendLine($@" + https://carneirotech.com/ + {DateTime.UtcNow:yyyy-MM-dd} + weekly + 1.0 + "); + + // Cases index + sitemap.AppendLine($@" + https://carneirotech.com/cases + {DateTime.UtcNow:yyyy-MM-dd} + weekly + 0.9 + "); + + // Each case + foreach (var c in cases) + { + var lastMod = c.Metadata.Date != DateTime.MinValue ? c.Metadata.Date : DateTime.UtcNow; + sitemap.AppendLine($@" + https://carneirotech.com/cases/{c.Metadata.Slug} + {lastMod:yyyy-MM-dd} + monthly + 0.8 + "); + } + + sitemap.AppendLine(""); + + return Content(sitemap.ToString(), "application/xml"); + } + + [HttpPost] + public IActionResult Contact(ContactFormModel model) + { + if (!ModelState.IsValid) + { + TempData["Error"] = "Por favor, preencha todos os campos corretamente."; + return RedirectToAction("Index", new { fragment = "contact" }); + } + + // TODO: Implement email sending logic here (SendGrid, SMTP, etc.) + _logger.LogInformation($"Contact form submitted: {model.Name} - {model.Email}"); + + TempData["Success"] = "Mensagem enviada com sucesso! Retornaremos em breve."; + return RedirectToAction("Index", new { fragment = "contact" }); + } +} diff --git a/Controllers/LanguageController.cs b/Controllers/LanguageController.cs new file mode 100644 index 0000000..13978d9 --- /dev/null +++ b/Controllers/LanguageController.cs @@ -0,0 +1,28 @@ +using Microsoft.AspNetCore.Mvc; +using CarneiroTech.Services; + +namespace CarneiroTech.Controllers +{ + public class LanguageController : Controller + { + private readonly ILanguageService _languageService; + + public LanguageController(ILanguageService languageService) + { + _languageService = languageService; + } + + [HttpPost] + public IActionResult SetLanguage(string language, string returnUrl = "/") + { + _languageService.SetLanguage(HttpContext, language); + + if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl)) + { + return Redirect(returnUrl); + } + + return RedirectToAction("Index", "Home"); + } + } +} diff --git a/DEPLOY_README.md b/DEPLOY_README.md new file mode 100644 index 0000000..8a8f57e --- /dev/null +++ b/DEPLOY_README.md @@ -0,0 +1,363 @@ +# CarneiroTech - Deployment Guide + +## 🚀 Deploy para Produção (OCI) + +O site CarneiroTech está hospedado no servidor OCI (Oracle Cloud Infrastructure) com IP final **218**. + +### Arquitetura + +``` +Internet + ↓ +Nginx (Port 80/443) + ↓ +Docker Container (Port 5008) + ↓ +ASP.NET Core MVC App +``` + +--- + +## 📋 Informações do Servidor + +- **Servidor**: `ubuntu@129.146.116.218` +- **Diretório**: `/home/ubuntu/apps/carneirotech` +- **Container**: `carneirotech-web` +- **Porta Interna**: `5008` +- **Domínio**: `carneirotech.com` +- **SSL**: Let's Encrypt (auto-renovação configurada) + +--- + +## 🔧 Como Fazer Deploy + +### Opção 1: Deploy Automático (Recomendado) + +Execute o script de deploy da sua máquina local: + +```bash +cd /mnt/c/Users/ricar/Nextcloud/CarneiroTech/Site/aspnet/CarneiroTech +./deploy-to-oci.sh +``` + +O script irá: +1. ✅ Criar pacote compactado excluindo bin/obj +2. ✅ Transferir para servidor via SCP +3. ✅ Extrair arquivos +4. ✅ Fazer backup da imagem anterior +5. ✅ Fazer build da nova imagem +6. ✅ Parar container antigo +7. ✅ Subir container novo +8. ✅ Verificar health check +9. ✅ Limpar imagens antigas (mantém últimas 3) + +**Rollback automático:** Se o health check falhar, o script restaura automaticamente a versão anterior. + +--- + +### Opção 2: Deploy Manual + +1. Conectar no servidor: +```bash +ssh ubuntu@129.146.116.218 +cd ~/apps/carneirotech +``` + +2. Transferir arquivos alterados (da sua máquina): +```bash +scp arquivo.cs ubuntu@129.146.116.218:~/apps/carneirotech/Controllers/ +``` + +3. No servidor, fazer rebuild e restart: +```bash +./deploy.sh +``` + +--- + +## 🔍 Comandos Úteis + +### Ver logs do container +```bash +ssh ubuntu@129.146.116.218 "docker logs carneirotech-web --tail=50 -f" +``` + +### Verificar status +```bash +ssh ubuntu@129.146.116.218 "docker ps --filter name=carneirotech" +``` + +### Entrar no container +```bash +ssh ubuntu@129.146.116.218 "docker exec -it carneirotech-web bash" +``` + +### Reiniciar container +```bash +ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose restart" +``` + +### Ver logs do Nginx +```bash +ssh ubuntu@129.146.116.218 "sudo tail -f /var/log/nginx/access.log" +ssh ubuntu@129.146.116.218 "sudo tail -f /var/log/nginx/error.log" +``` + +### Testar Nginx config +```bash +ssh ubuntu@129.146.116.218 "sudo nginx -t" +``` + +### Recarregar Nginx +```bash +ssh ubuntu@129.146.116.218 "sudo systemctl reload nginx" +``` + +--- + +## 📁 Estrutura de Arquivos no Servidor + +``` +/home/ubuntu/apps/carneirotech/ +├── Content/ # Markdown files dos cases +├── Controllers/ # MVC Controllers +├── Models/ # Models +├── Services/ # Services (CaseService) +├── Views/ # Razor Views +├── wwwroot/ # Static files (CSS, JS, images) +├── Dockerfile # Docker build instructions (ARM64) +├── docker-compose.yml # Docker Compose config +├── deploy.sh # Deploy script (no servidor) +└── CarneiroTech.csproj # Project file + +/etc/nginx/sites-available/ +└── carneirotech.com.conf # Nginx proxy config + +/etc/letsencrypt/live/carneirotech.com/ +├── fullchain.pem # SSL certificate +└── privkey.pem # SSL private key +``` + +--- + +## 🔐 SSL / HTTPS + +O certificado SSL é gerenciado automaticamente pelo **Let's Encrypt** via Certbot. + +### Renovação Automática + +O Certbot está configurado para renovar automaticamente. Verifique o status: + +```bash +ssh ubuntu@129.146.116.218 "sudo certbot certificates" +``` + +### Renovar Manualmente (se necessário) + +```bash +ssh ubuntu@129.146.116.218 "sudo certbot renew" +``` + +### Adicionar www.carneirotech.com + +Quando você adicionar o registro DNS para `www.carneirotech.com`: + +1. Adicionar ao Namecheap (A record apontando para 129.146.116.218) +2. Atualizar certificado SSL: +```bash +ssh ubuntu@129.146.116.218 "sudo certbot certonly --nginx -d carneirotech.com -d www.carneirotech.com --expand" +``` + +3. Atualizar nginx config: +```bash +ssh ubuntu@129.146.116.218 "sudo nano /etc/nginx/sites-available/carneirotech.com.conf" +``` + Adicionar `www.carneirotech.com` no `server_name` de ambos os blocos server. + +4. Recarregar nginx: +```bash +ssh ubuntu@129.146.116.218 "sudo nginx -t && sudo systemctl reload nginx" +``` + +--- + +## 🧹 Manutenção + +### Limpar imagens Docker antigas + +```bash +ssh ubuntu@129.146.116.218 "docker image prune -a" +``` + +### Limpar containers parados + +```bash +ssh ubuntu@129.146.116.218 "docker container prune" +``` + +### Ver uso de disco + +```bash +ssh ubuntu@129.146.116.218 "df -h" +``` + +### Ver uso de Docker + +```bash +ssh ubuntu@129.146.218 "docker system df" +``` + +--- + +## 🐛 Troubleshooting + +### Site não carrega (502 Bad Gateway) + +1. Verificar se container está rodando: +```bash +ssh ubuntu@129.146.116.218 "docker ps --filter name=carneirotech" +``` + +2. Ver logs do container: +```bash +ssh ubuntu@129.146.116.218 "docker logs carneirotech-web --tail=100" +``` + +3. Reiniciar container: +```bash +ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose restart" +``` + +### Container não sobe (unhealthy) + +1. Ver logs detalhados: +```bash +ssh ubuntu@129.146.116.218 "docker logs carneirotech-web" +``` + +2. Verificar health check manualmente: +```bash +ssh ubuntu@129.146.116.218 "curl http://localhost:5008/" +``` + +3. Entrar no container para debug: +```bash +ssh ubuntu@129.146.116.218 "docker exec -it carneirotech-web bash" +``` + +### Build falha + +1. Verificar se há espaço em disco: +```bash +ssh ubuntu@129.146.116.218 "df -h" +``` + +2. Limpar cache do Docker: +```bash +ssh ubuntu@129.146.116.218 "docker builder prune -a" +``` + +3. Fazer build com logs detalhados: +```bash +ssh ubuntu@129.146.116.218 "cd ~/apps/carneirotech && docker compose build --no-cache --progress=plain" +``` + +### SSL expirado + +Renovar manualmente: +```bash +ssh ubuntu@129.146.116.218 "sudo certbot renew --force-renewal" +``` + +--- + +## 📊 Monitoramento + +### Health Check Endpoint + +O container tem health check automático configurado: +- **URL**: `http://localhost:5008/` +- **Intervalo**: 30s +- **Timeout**: 3s +- **Start Period**: 40s + +### Ver status de saúde + +```bash +ssh ubuntu@129.146.116.218 "docker inspect carneirotech-web | grep -A 10 Health" +``` + +--- + +## 🔄 Workflow de Desenvolvimento + +1. **Desenvolver localmente** (Windows) + ```bash + cd C:\Users\ricar\Nextcloud\CarneiroTech\Site\aspnet\CarneiroTech + dotnet run + ``` + +2. **Testar mudanças** (http://localhost:5000) + +3. **Fazer deploy para produção** + ```bash + ./deploy-to-oci.sh + ``` + +4. **Verificar em produção** (https://carneirotech.com) + +--- + +## 📝 Notas Importantes + +- ⚠️ O servidor usa **ARM64** (Ampere). O Dockerfile está otimizado para isso. +- ⚠️ Não use `docker-compose` sem `deploy.sh` - pode causar downtime sem rollback. +- ⚠️ Sempre teste localmente antes de fazer deploy. +- ⚠️ O script de deploy faz backup automático - use sem medo! +- ⚠️ Arquivos Markdown (Content/Cases/*.md) são incluídos no build. + +--- + +## ✅ Checklist de Deploy + +Antes de fazer deploy, verifique: + +- [ ] Código compilou localmente sem erros +- [ ] Testou localmente (dotnet run) +- [ ] Commitou mudanças no Git (quando configurar) +- [ ] Executou `./deploy-to-oci.sh` +- [ ] Verificou logs: `docker logs carneirotech-web` +- [ ] Testou site: `https://carneirotech.com` +- [ ] Verificou que cases Markdown aparecem corretamente + +--- + +## 🆘 Suporte + +Em caso de problemas críticos: + +1. Ver logs em tempo real: + ```bash + ssh ubuntu@129.146.116.218 "docker logs carneirotech-web -f" + ``` + +2. Rollback para versão anterior (automático no deploy.sh) + +3. Se precisar voltar manualmente: + ```bash + ssh ubuntu@129.146.116.218 + cd ~/backups/carneirotech + # Ver backups disponíveis + docker images | grep carneirotech-web + # Usar backup específico + docker tag carneirotech-carneirotech-web + cd ~/apps/carneirotech + docker compose up -d + ``` + +--- + +**Deployment criado em:** 21 de Dezembro de 2024 +**Última atualização:** 21 de Dezembro de 2024 +**Servidor:** OCI (Oracle Cloud) - ARM64 (Ampere) +**Status:** ✅ Produção diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4a0f73e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,44 @@ +# Dockerfile for ASP.NET Core MVC on ARM64 (Ampere/OCI) + +# Build stage +FROM mcr.microsoft.com/dotnet/sdk:8.0-jammy-arm64v8 AS build +WORKDIR /src + +# Copy csproj and restore dependencies +COPY ["CarneiroTech.csproj", "./"] +RUN dotnet restore "CarneiroTech.csproj" -a arm64 + +# Copy everything else and build +COPY . . +RUN dotnet build "CarneiroTech.csproj" -c Release -o /app/build -a arm64 + +# Publish stage +FROM build AS publish +RUN dotnet publish "CarneiroTech.csproj" -c Release -o /app/publish -a arm64 /p:UseAppHost=false + +# Runtime stage +FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-arm64v8 AS final +WORKDIR /app + +# Install curl for health checks +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* + +# Copy published app +COPY --from=publish /app/publish . + +# Copy Content folder (markdown files) - already included in publish +# COPY Content ./Content + +# Expose port +EXPOSE 5008 + +# Health check +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:5008/ || exit 1 + +# Set environment variables +ENV ASPNETCORE_URLS=http://+:5008 +ENV ASPNETCORE_ENVIRONMENT=Production + +# Run app +ENTRYPOINT ["dotnet", "CarneiroTech.dll"] diff --git a/IMPLEMENTATION_SUMMARY.md b/IMPLEMENTATION_SUMMARY.md new file mode 100644 index 0000000..9052ab5 --- /dev/null +++ b/IMPLEMENTATION_SUMMARY.md @@ -0,0 +1,308 @@ +# Carneiro Tech - Implementation Summary + +## What Has Been Built + +A complete, production-ready ASP.NET MVC Core website for Carneiro Tech with the following features: + +### ✅ Core Features Implemented + +1. **Modern, Responsive Design** + - Agency Bootstrap template fully integrated + - Custom CSS with logo colors (#ffc800 yellow/gold) + - Mobile-first responsive layout + - Professional consulting appearance + +2. **Markdown-Based Portfolio System** + - Easy case management with .md files + - YAML front matter for metadata + - Automatic HTML conversion + - In-memory caching (60 min) + - Tag-based filtering + +3. **SEO Optimized** + - Dynamic meta tags (title, description, keywords) + - Open Graph tags for social sharing + - Twitter Card support + - JSON-LD structured data (Organization schema) + - XML sitemap at `/sitemap.xml` + - robots.txt configured + +4. **Portfolio/Cases Section** + - Homepage with featured cases (up to 6) + - Full cases listing page at `/cases` + - Individual case detail pages at `/cases/{slug}` + - Tag filtering functionality + - Custom hover effects with overlay text + - Gradient backgrounds for cases without images + +5. **Docker Ready** + - Multi-stage Dockerfile + - docker-compose.yml for easy deployment + - .dockerignore for optimized builds + - Volume mapping for Content folder + +## Project Structure + +``` +aspnet/CarneiroTech/ +├── Controllers/ +│ ├── HomeController.cs # Homepage, sitemap, contact +│ └── CasesController.cs # Cases list & details +├── Models/ +│ ├── CaseModel.cs # Case data model +│ ├── CaseMetadata.cs # YAML front matter model +│ ├── ContactFormModel.cs # Contact form validation +│ └── SitemapItem.cs # Sitemap data model +├── Services/ +│ ├── IMarkdownService.cs # Markdown parsing interface +│ ├── MarkdownService.cs # Markdown implementation +│ ├── ICaseService.cs # Case management interface +│ └── CaseService.cs # Case management implementation +├── Views/ +│ ├── Home/ +│ │ └── Index.cshtml # Homepage with all sections +│ ├── Cases/ +│ │ ├── Index.cshtml # Cases listing with filters +│ │ └── Details.cshtml # Individual case page +│ └── Shared/ +│ └── _Layout.cshtml # Main layout with SEO +├── Content/ +│ └── Cases/ +│ ├── sap-integration-healthcare.md # Case 1 +│ ├── legacy-modernization.md # Case 2 +│ └── mvp-definition.md # Case 3 +├── wwwroot/ +│ ├── css/ +│ │ ├── styles.css # Bootstrap Agency theme +│ │ └── custom.css # Custom Carneiro Tech styles +│ ├── js/ +│ │ └── scripts.js # Bootstrap theme scripts +│ ├── img/ +│ │ └── logo.svg # Carneiro Tech logo +│ └── robots.txt +├── Dockerfile +├── docker-compose.yml +├── .dockerignore +├── README.md +└── IMPLEMENTATION_SUMMARY.md (this file) +``` + +## Homepage Sections + +The homepage includes all major sections: + +1. **Hero/Masthead** + - "Conectando Negócio e Tecnologia" tagline + - Call-to-action button to services + +2. **Services Section** (#services) + - Solution Design + - Technical Consulting + - Technical Proposals + +3. **Portfolio/Cases** (#portfolio) + - Featured cases (up to 6) + - Link to full cases page + +4. **About Section** (#about) + - Timeline with 4 milestones + - Professional journey + - Icons for each phase + +5. **Contact Form** (#contact) + - Name, Email, Phone, Message fields + - Form validation + - Success/Error messages + - Note: Email sending needs to be implemented (TODO comment in code) + +## Three Example Cases Created + +### 1. SAP Integration Healthcare +- **Slug:** `sap-integration-healthcare` +- **Topic:** Enterprise integration with SAP ECC +- **Tags:** SAP, C#, .NET, Integrações, Enterprise, Healthcare +- **Highlights:** 100k+ transactions/day, 99.9% uptime +- **Featured:** Yes + +### 2. Legacy Modernization +- **Slug:** `legacy-modernization` +- **Topic:** Migration from monolith to microservices +- **Tags:** .NET, Azure, Microserviços, Cloud, Modernização, Arquitetura +- **Highlights:** Strangler pattern, AKS, zero downtime +- **Featured:** Yes + +### 3. MVP Definition +- **Slug:** `mvp-definition` +- **Topic:** Startup consulting for MVP validation +- **Tags:** MVP, Product Design, Technical Consulting, Startup, EdTech, Strategy +- **Highlights:** Reduced scope 50→8 features, validated with 1000+ users +- **Featured:** Yes + +Each case includes: +- Overview section +- Challenge description +- Solution architecture +- Results/metrics +- Tech stack +- Decision-making process (why certain choices were made) +- Lessons learned + +## Key Features & Customizations + +### Portfolio Hover Effect +- Yellow overlay (#ffc800) on hover +- Text summary appears on hover +- Smooth transitions +- Works on all devices + +### Color Scheme +- Primary: #ffc800 (yellow/gold from logo) +- Dark: #212529 +- Gradients for backgrounds without images +- Professional, modern feel + +### SEO Features +All pages include: +- Title (max 60 chars recommended) +- Description (max 160 chars) +- Keywords +- Canonical URLs +- Open Graph tags +- Twitter Cards +- Structured data (JSON-LD) + +### Performance Optimizations +- In-memory caching (cases cached for 60 min) +- Static file serving +- Minified CSS/JS from CDN +- Lazy loading compatible + +## How to Run + +### Local Development + +```bash +cd aspnet/CarneiroTech +dotnet run +``` + +Open: `http://localhost:5000` + +### Docker + +```bash +cd aspnet/CarneiroTech +docker-compose up -d +``` + +Open: `http://localhost:8080` + +## Next Steps / TODOs + +### Essential for Production: + +1. **Replace placeholder logo colors** + - Extract actual colors from `/logo/LogoNovo.svg` + - Update custom.css color variables + +2. **Update LinkedIn URL** + - In `_Layout.cshtml` footer + - Currently: `https://linkedin.com/in/ricardo-carneiro` + +3. **Implement Contact Form Email** + - Add SendGrid or SMTP configuration + - Update `HomeController.Contact` method + - Add email credentials to appsettings.json + +4. **Add Real Portfolio Images** + - Currently cases use gradient backgrounds + - Add images to `/wwwroot/img/cases/` + - Update markdown front matter `image:` field + +5. **Update Domain URLs** + - Replace `carneirotech.com` with your actual domain + - Files to update: + - `_Layout.cshtml` (canonical, OG tags) + - `HomeController.cs` (sitemap) + +### Nice to Have: + +1. **Analytics** + - Add Google Analytics 4 + - Add tracking code to `_Layout.cshtml` + +2. **Dark Mode** + - Implement toggle switch + - CSS variables for theming + +3. **RSS Feed** + - Create `/feed.xml` endpoint + - List all cases + +4. **Search Functionality** + - Add search bar + - Filter cases by text + +5. **Admin Panel** + - CRUD for cases (instead of editing .md files) + - Cache invalidation button + +6. **Performance** + - Image optimization (WebP format) + - Lazy loading for images + - CDN for static assets + +## Testing Checklist + +- [x] Build succeeds without errors +- [x] All routes defined +- [x] Markdown parsing works +- [x] SEO meta tags present +- [x] Sitemap generates +- [ ] Run locally and verify homepage +- [ ] Verify cases listing page +- [ ] Verify individual case pages +- [ ] Test tag filtering +- [ ] Test contact form validation +- [ ] Test responsive design (mobile/tablet) +- [ ] Test in different browsers +- [ ] Validate HTML +- [ ] Test Docker build +- [ ] Test Docker run + +## Deployment Checklist + +- [ ] Update all placeholder URLs +- [ ] Add real logo and images +- [ ] Configure email sending +- [ ] Set up SSL certificate +- [ ] Configure production environment variables +- [ ] Test in staging environment +- [ ] Set up monitoring/logging +- [ ] Configure backup for Content folder +- [ ] Set up CI/CD pipeline (optional) +- [ ] Update DNS records +- [ ] Test production deployment + +## Support & Documentation + +- **README.md** - Complete setup and usage guide +- **This file** - Implementation overview +- **Code comments** - Inline documentation +- **Markdown examples** - 3 complete case studies + +## Technologies Used + +- **ASP.NET Core 8** - Web framework +- **C# 12** - Programming language +- **Markdig 0.44.0** - Markdown parsing +- **YamlDotNet 16.3.0** - YAML parsing +- **Bootstrap 5** - CSS framework +- **Font Awesome 6** - Icons +- **Docker** - Containerization + +--- + +**Built on:** 2025-12-19 +**Framework:** ASP.NET MVC Core 8 +**Status:** Production Ready (pending customizations listed above) diff --git a/MUDANCAS_TEMA_VERMELHO.md b/MUDANCAS_TEMA_VERMELHO.md new file mode 100644 index 0000000..871ebaa --- /dev/null +++ b/MUDANCAS_TEMA_VERMELHO.md @@ -0,0 +1,215 @@ +# Mudanças Implementadas - Tema Vermelho + +## ✅ Alterações Realizadas + +### 1. **Esquema de Cores - Do Amarelo para Vermelho** + +Todas as cores amarelas foram substituídas por tons de vermelho inspirados no logo: + +**Paleta de Cores:** +- **Vermelho Principal:** `#C42127` (vermelho vibrante do logo) +- **Vermelho Escuro:** `#8B1E23` (tom mais escuro para hover/sombras) +- **Vermelho Accent:** `#E63946` (vermelho brilhante para destaques) +- **Fundo Claro:** `#FAF7F5` (bege/creme quente) +- **Creme:** `#FFF8F0` (creme claro para navbar) + +### 2. **Menu/Navbar com Fundo Claro** + +**Antes:** Navbar escuro (dark) +**Depois:** Navbar com fundo bege claro (`#FAF7F5`) + +**Mudanças:** +- Fundo claro e confortável +- Links do menu em cinza escuro (`#2c3e50`) +- Hover em vermelho (`#C42127`) +- Sombra sutil para destaque +- Menu mobile com fundo creme +- Ícone do menu (hamburguer) em vermelho + +### 3. **Logo Otimizado** + +**Antes:** `logo.svg` (745KB, muito pesado) +**Depois:** `logo-optimized.svg` (<2KB, otimizado) + +**Características do novo logo:** +- **Fundo transparente** ✅ +- Design de espiral/concha inspirado no logo original +- Gradiente vermelho +- Tamanho reduzido 370x +- Altura aumentada de 40px para 45px (melhor visibilidade) + +**Arquivo:** `/wwwroot/img/logo-optimized.svg` + +### 4. **Efeito Hover no Portfolio - Corrigido** + +**Problema:** Quadrado amarelo pequeno e sem sentido no hover + +**Solução:** +- Overlay vermelho cobrindo **toda a imagem** do portfolio +- Texto do resumo aparece em branco sobre fundo vermelho +- Transição suave de opacidade +- Card levanta levemente no hover (translateY) +- Sombra vermelha ao redor do card +- Zoom sutil na imagem (scale 1.05) + +**Efeito visual:** +1. Ao passar o mouse sobre um case +2. Overlay vermelho aparece cobrindo toda a área +3. Texto do resumo fica visível em branco +4. Card levanta 5px com sombra vermelha +5. Imagem dá zoom leve + +### 5. **Elementos Atualizados com Vermelho** + +#### Botões: +- `btn-primary`: Fundo vermelho, texto branco +- Hover: Tom mais escuro + levanta + sombra +- `btn-outline-primary`: Borda vermelha, preenche vermelho no hover + +#### Badges/Tags: +- Fundo vermelho com texto branco +- Tags clicáveis nos cases + +#### Ícones de Serviços: +- Círculos em vermelho (antes amarelo) +- Ícones brancos sobre vermelho + +#### Timeline: +- Círculos da timeline em vermelho +- Ícones brancos + +#### Seção de Contato: +- Fundo gradiente vermelho (C42127 → 8B1E23) +- Inputs com foco em vermelho + +#### Detalhes do Case: +- Bordas de heading: vermelho +- Bordas de code blocks: vermelho +- Bordas de blockquotes: vermelho +- Links: vermelho + +#### Masthead/Hero: +- Gradiente vermelho de fundo + +#### Gradientes de Cases sem Imagem: +6 variações de gradientes vermelhos + +### 6. **Arquivos Modificados** + +``` +✏️ /wwwroot/css/custom.css (reescrito completamente) +✏️ /Views/Shared/_Layout.cshtml (navbar light + logo otimizado) +✏️ /Views/Home/Index.cshtml (gradientes vermelhos) +✏️ /Views/Cases/Index.cshtml (gradientes vermelhos) +✏️ /Views/Cases/Details.cshtml (bordas vermelhas) +➕ /wwwroot/img/logo-optimized.svg (novo logo) +``` + +## 🎨 Comparação Visual + +### Antes (Amarelo): +- 🟡 Botões amarelos (#ffc800) +- 🟡 Hover amarelo nos cases +- 🟡 Timeline amarela +- ⚫ Navbar escuro +- 📦 Logo 745KB + +### Depois (Vermelho): +- 🔴 Botões vermelhos (#C42127) +- 🔴 Hover vermelho cobrindo todo o case +- 🔴 Timeline vermelha +- ⚪ Navbar bege claro +- ✨ Logo 2KB transparente + +## 🚀 Como Testar + +### Se o app já está rodando: +1. Pare a aplicação (Ctrl+C no terminal) +2. Rode novamente: `dotnet run` +3. Abra: `http://localhost:5000` + +### Se não está rodando: +```bash +cd aspnet/CarneiroTech +dotnet run +``` + +### Verificar mudanças: +1. **Homepage** - Veja os ícones vermelhos, botão vermelho +2. **Navbar** - Fundo claro, logo otimizado +3. **Cases** - Passe o mouse sobre um case → overlay vermelho +4. **Detalhes do Case** - Bordas vermelhas nos headings +5. **Contato** - Fundo vermelho na seção + +## 📝 Notas Técnicas + +### CSS Variables (custom.css): +```css +:root { + --primary-red: #C42127; + --dark-red: #8B1E23; + --accent-red: #E63946; + --light-bg: #FAF7F5; + --cream: #FFF8F0; +} +``` + +Todas as cores agora usam essas variáveis, facilitando ajustes futuros. + +### Navbar Classes: +- Mudado de `navbar-dark` para `navbar-light` +- Adicionado estilo customizado para fundo claro +- Links com cor escura e hover vermelho + +### Portfolio Hover: +```css +.portfolio-hover { + position: absolute; + width: 100%; + height: 100%; + background: rgba(196, 33, 39, 0.95); + /* Cobre todo o card */ +} +``` + +## ✨ Próximos Passos (Opcional) + +Se quiser fazer ajustes finos: + +1. **Ajustar tom de vermelho:** + - Edite as variáveis CSS no topo de `custom.css` + - Todos os elementos atualizam automaticamente + +2. **Mudar fundo do menu:** + - Edite `--light-bg` ou `--cream` em `custom.css` + - Exemplos de cores alternativas: + - `#F5F5DC` (bege mais escuro) + - `#FFFAF0` (creme floral) + - `#FDF5E6` (linho antigo) + +3. **Logo personalizado:** + - Substitua `/wwwroot/img/logo-optimized.svg` + - Ou use seu logo original (se otimizar o SVG) + +## 🐛 Troubleshooting + +**Logo não aparece:** +- Verifique se `/wwwroot/img/logo-optimized.svg` existe +- Limpe o cache do browser (Ctrl+Shift+R) + +**Cores não mudaram:** +- Limpe cache do browser +- Verifique se `custom.css` está sendo carregado (DevTools → Network) + +**Build falha:** +- Se a app está rodando, pare primeiro +- Execute: `dotnet clean && dotnet build` + +--- + +**Todas as mudanças solicitadas foram implementadas! ✅** + +- ✅ Amarelo → Vermelho +- ✅ Logo com fundo transparente +- ✅ Menu com fundo claro (bege) +- ✅ Hover do portfolio corrigido (overlay vermelho cobrindo toda a área) diff --git a/Models/CaseMetadata.cs b/Models/CaseMetadata.cs new file mode 100644 index 0000000..db8df79 --- /dev/null +++ b/Models/CaseMetadata.cs @@ -0,0 +1,20 @@ +namespace CarneiroTech.Models; + +public class CaseMetadata +{ + public string Title { get; set; } = string.Empty; + public string Slug { get; set; } = string.Empty; + public string Summary { get; set; } = string.Empty; + public string Client { get; set; } = string.Empty; + public string Industry { get; set; } = string.Empty; + public string Timeline { get; set; } = string.Empty; + public string Role { get; set; } = string.Empty; + public string Image { get; set; } = string.Empty; + public List Tags { get; set; } = new(); + public bool Featured { get; set; } + public int Order { get; set; } + public DateTime Date { get; set; } + public string SeoTitle { get; set; } = string.Empty; + public string SeoDescription { get; set; } = string.Empty; + public string SeoKeywords { get; set; } = string.Empty; +} diff --git a/Models/CaseModel.cs b/Models/CaseModel.cs new file mode 100644 index 0000000..57404c0 --- /dev/null +++ b/Models/CaseModel.cs @@ -0,0 +1,8 @@ +namespace CarneiroTech.Models; + +public class CaseModel +{ + public CaseMetadata Metadata { get; set; } = new(); + public string ContentHtml { get; set; } = string.Empty; + public string ContentMarkdown { get; set; } = string.Empty; +} diff --git a/Models/ContactFormModel.cs b/Models/ContactFormModel.cs new file mode 100644 index 0000000..9833cd0 --- /dev/null +++ b/Models/ContactFormModel.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace CarneiroTech.Models; + +public class ContactFormModel +{ + [Required(ErrorMessage = "Nome é obrigatório")] + public string Name { get; set; } = string.Empty; + + [Required(ErrorMessage = "Email é obrigatório")] + [EmailAddress(ErrorMessage = "Email inválido")] + public string Email { get; set; } = string.Empty; + + [Required(ErrorMessage = "Telefone é obrigatório")] + [Phone(ErrorMessage = "Telefone inválido")] + public string Phone { get; set; } = string.Empty; + + [Required(ErrorMessage = "Mensagem é obrigatória")] + public string Message { get; set; } = string.Empty; +} diff --git a/Models/ErrorViewModel.cs b/Models/ErrorViewModel.cs new file mode 100644 index 0000000..45cf87f --- /dev/null +++ b/Models/ErrorViewModel.cs @@ -0,0 +1,8 @@ +namespace CarneiroTech.Models; + +public class ErrorViewModel +{ + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); +} diff --git a/Models/SitemapItem.cs b/Models/SitemapItem.cs new file mode 100644 index 0000000..8a0250e --- /dev/null +++ b/Models/SitemapItem.cs @@ -0,0 +1,9 @@ +namespace CarneiroTech.Models; + +public class SitemapItem +{ + public string Url { get; set; } = string.Empty; + public DateTime LastModified { get; set; } + public string ChangeFrequency { get; set; } = "weekly"; + public decimal Priority { get; set; } = 0.5m; +} diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..8f996e6 --- /dev/null +++ b/Program.cs @@ -0,0 +1,36 @@ +using CarneiroTech.Services; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddControllersWithViews(); +builder.Services.AddMemoryCache(); +builder.Services.AddHttpContextAccessor(); + +// Register custom services +builder.Services.AddSingleton(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (!app.Environment.IsDevelopment()) +{ + app.UseExceptionHandler("/Home/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseStaticFiles(); + +app.UseRouting(); + +app.UseAuthorization(); + +app.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + +app.Run(); diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json new file mode 100644 index 0000000..e817642 --- /dev/null +++ b/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:32693", + "sslPort": 44347 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5203", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7177;http://localhost:5203", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/QUICK_START.md b/QUICK_START.md new file mode 100644 index 0000000..1debfb5 --- /dev/null +++ b/QUICK_START.md @@ -0,0 +1,340 @@ +# Quick Start Guide - Carneiro Tech Website + +## Immediate Next Steps + +### 1. Test Locally (5 minutes) + +```bash +cd aspnet/CarneiroTech +dotnet run +``` + +Then open: `http://localhost:5000` + +**What to check:** +- ✅ Homepage loads with all sections +- ✅ Click "Cases" in navbar → should show 3 cases +- ✅ Click on a case → should show full details +- ✅ Click on tags → should filter cases +- ✅ Sitemap at `/sitemap.xml` works +- ✅ Responsive design (resize browser) + +--- + +### 2. Customize for Your Brand (30 minutes) + +#### A. Update Logo Colors + +Open `/wwwroot/css/custom.css` and update: + +```css +/* Find and replace #ffc800 with your primary color */ +/* Find and replace #667eea and #764ba2 with your gradient colors */ +``` + +To extract colors from your logo: +1. Open `/logo/LogoNovo.svg` in a browser +2. Use browser DevTools to inspect +3. Copy hex color codes +4. Replace in custom.css + +#### B. Update LinkedIn URL + +Open `/Views/Shared/_Layout.cshtml` (line ~93): + +```html + +``` + +#### C. Update Domain URLs + +Find and replace `carneirotech.com` with your actual domain: + +Files to update: +- `/Views/Shared/_Layout.cshtml` (lines 12, 16, 47, 48) +- `/Controllers/HomeController.cs` (sitemap URLs) + +--- + +### 3. Add Your Own Cases (15 minutes per case) + +#### Create New Case File + +```bash +cd Content/Cases +# Create new file (use VSCode, Notepad, etc.) +touch my-new-case.md +``` + +#### Copy Template + +Use one of the existing cases as template: +- `sap-integration-healthcare.md` (technical integration) +- `legacy-modernization.md` (architecture/migration) +- `mvp-definition.md` (consulting/strategy) + +#### Fill Front Matter + +```yaml +--- +title: "Your Project Title" +slug: "your-project-slug" # Will be URL: /cases/your-project-slug +summary: "Short description for cards (2-3 lines)" +client: "Client Name or Confidential" +industry: "Industry" +timeline: "X months" +role: "Your Role" +image: "" # Leave empty for gradient or add /img/cases/yourimage.jpg +tags: + - Tag1 + - Tag2 + - Tag3 +featured: true # Shows on homepage +order: 1 # Lower number = higher priority +date: 2024-01-15 # YYYY-MM-DD format +seo_title: "SEO Title (max 60 chars)" +seo_description: "SEO description (max 160 chars)" +seo_keywords: "keyword1, keyword2, keyword3" +--- +``` + +#### Write Content + +```markdown +## Overview + +Brief overview... + +--- + +## Challenge + +What was the problem? + +### Pain Points: +- Point 1 +- Point 2 + +--- + +## Solution + +How did you solve it? + +\`\`\`csharp +// Code examples work +public void Example() {} +\`\`\` + +--- + +## Results + +Metrics and outcomes. + +--- + +## Tech Stack + +\`Tag1\` \`Tag2\` \`Tag3\` + +--- + +[Call to action link](/#contact) +``` + +#### Preview + +Restart app or wait 60min (cache expires): + +```bash +dotnet run +# Navigate to: http://localhost:5000/cases/your-project-slug +``` + +--- + +### 4. Configure Email (30 minutes) + +For the contact form to work, you need to implement email sending. + +#### Option A: SendGrid (Recommended) + +1. Sign up at sendgrid.com +2. Get API key +3. Add NuGet package: + ```bash + dotnet add package SendGrid + ``` +4. Update `HomeController.cs` Contact method: + ```csharp + // Replace TODO with SendGrid code + var apiKey = Configuration["SendGrid:ApiKey"]; + var client = new SendGridClient(apiKey); + var from = new EmailAddress("noreply@carneirotech.com", "Carneiro Tech"); + var subject = $"Novo contato: {model.Name}"; + var to = new EmailAddress("ricardo@carneirotech.com"); + var plainTextContent = model.Message; + var htmlContent = $"Nome: {model.Name}
..."; + var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent); + await client.SendEmailAsync(msg); + ``` + +#### Option B: SMTP (Gmail, Outlook, etc.) + +1. Add NuGet package: + ```bash + dotnet add package MailKit + ``` +2. Configure SMTP settings in appsettings.json +3. Implement SMTP sending logic + +--- + +### 5. Add Portfolio Images (Optional) + +1. Create folder: `/wwwroot/img/cases/` +2. Add your images (jpg, png, webp) +3. Update case markdown front matter: + ```yaml + image: "/img/cases/my-project.jpg" + ``` + +**Recommended image size:** 800x600px (4:3 ratio) + +--- + +### 6. Docker Deployment (Production) + +#### Build + +```bash +cd aspnet/CarneiroTech +docker build -t carneirotech:latest . +``` + +#### Run + +```bash +docker run -d \ + -p 80:80 \ + -p 443:443 \ + --name carneirotech \ + -v $(pwd)/Content:/app/Content:ro \ + carneirotech:latest +``` + +#### Or use Docker Compose + +```bash +docker-compose up -d +``` + +**Access:** `http://localhost:8080` + +--- + +## Common Issues & Solutions + +### Issue: "404 Not Found" on case pages + +**Solution:** Check slug in markdown matches URL +- Markdown: `slug: "my-case"` +- URL: `/cases/my-case` (must match exactly) + +### Issue: Cases not appearing + +**Solution:** +1. Check markdown file is in `Content/Cases/` +2. Verify front matter YAML is valid +3. Restart app (cache clears) +4. Check date format: `YYYY-MM-DD` + +### Issue: Build fails + +**Solution:** +```bash +dotnet clean +dotnet restore +dotnet build +``` + +### Issue: CSS not loading + +**Solution:** +1. Check file exists: `/wwwroot/css/custom.css` +2. Verify `_Layout.cshtml` includes it +3. Clear browser cache (Ctrl+Shift+R) + +### Issue: Logo not appearing + +**Solution:** +1. Check file: `/wwwroot/img/logo.svg` +2. Verify navbar reference in `_Layout.cshtml` +3. Check image dimensions (logo should be ~40px height) + +--- + +## Performance Tips + +1. **Enable Response Caching** + - Add to `Program.cs`: `builder.Services.AddResponseCaching();` + - Add to pipeline: `app.UseResponseCaching();` + +2. **Enable Response Compression** + - Add to `Program.cs`: `builder.Services.AddResponseCompression();` + +3. **Optimize Images** + - Use WebP format + - Compress before uploading + - Tools: TinyPNG, Squoosh + +4. **CDN for Static Assets** + - Upload `/wwwroot/` to CDN + - Update references in `_Layout.cshtml` + +--- + +## Production Deployment Checklist + +- [ ] Update all `carneirotech.com` URLs to your domain +- [ ] Configure SSL certificate (Let's Encrypt recommended) +- [ ] Set `ASPNETCORE_ENVIRONMENT=Production` +- [ ] Configure email sending (SendGrid or SMTP) +- [ ] Add Google Analytics (optional) +- [ ] Test all pages +- [ ] Test contact form +- [ ] Verify sitemap: `/sitemap.xml` +- [ ] Verify robots.txt: `/robots.txt` +- [ ] Test responsive design +- [ ] Run Lighthouse audit +- [ ] Set up monitoring (e.g., Application Insights) +- [ ] Configure backup for Content folder +- [ ] Test Docker deployment +- [ ] Set up CI/CD (optional) + +--- + +## Resources + +- **README.md** - Full documentation +- **IMPLEMENTATION_SUMMARY.md** - What was built +- **Example Cases** - 3 markdown examples in `Content/Cases/` + +--- + +## Support + +If you encounter issues: + +1. Check the README.md for detailed documentation +2. Review IMPLEMENTATION_SUMMARY.md for architecture +3. Look at example cases for markdown syntax +4. Check Controller code for logic + +--- + +**Ready to launch in ~2 hours** (including customizations) + +Good luck! 🚀 diff --git a/README.md b/README.md index 6844730..903226b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,303 @@ -# CarneiroTech +# Carneiro Tech - Professional Consulting Website +Professional website for Carneiro Tech - Solution Design & Technical Consulting, built with ASP.NET MVC Core and Bootstrap. + +## Features + +- **Modern Design**: Agency Bootstrap template adapted for consulting +- **Markdown-based Cases**: Easy portfolio management with .md files +- **SEO Optimized**: Meta tags, Open Graph, Twitter Cards, JSON-LD structured data +- **Responsive**: Mobile-first design using Bootstrap 5 +- **Tag Filtering**: Filter cases by technology/category +- **Sitemap**: Automatic XML sitemap generation +- **Docker Ready**: Containerized for easy deployment + +## Tech Stack + +### Backend +- ASP.NET MVC Core 8 +- C# 12 +- Markdig (Markdown parsing) +- YamlDotNet (YAML front matter) + +### Frontend +- Bootstrap 5 (Agency template) +- Font Awesome icons +- Google Fonts (Montserrat, Roboto Slab) + +### Deployment +- Docker & Docker Compose +- Ready for OCI (Oracle Cloud Infrastructure) + +## Project Structure + +``` +CarneiroTech/ +├── Controllers/ +│ ├── HomeController.cs # Homepage, sitemap, contact +│ └── CasesController.cs # Cases list and details +├── Models/ +│ ├── CaseModel.cs +│ ├── CaseMetadata.cs +│ ├── ContactFormModel.cs +│ └── SitemapItem.cs +├── Services/ +│ ├── ICaseService.cs +│ ├── CaseService.cs +│ ├── IMarkdownService.cs +│ └── MarkdownService.cs +├── Views/ +│ ├── Home/ +│ │ └── Index.cshtml # Homepage +│ ├── Cases/ +│ │ ├── Index.cshtml # Cases list +│ │ └── Details.cshtml # Individual case +│ └── Shared/ +│ └── _Layout.cshtml # Main layout with SEO +├── Content/ +│ └── Cases/ # Markdown case files +│ ├── sap-integration-healthcare.md +│ ├── legacy-modernization.md +│ └── mvp-definition.md +├── wwwroot/ +│ ├── css/ # Bootstrap template CSS +│ ├── js/ # Bootstrap template JS +│ ├── img/ # Images and logo +│ └── robots.txt +├── Dockerfile +├── docker-compose.yml +└── README.md +``` + +## Getting Started + +### Prerequisites + +- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) +- [Docker](https://www.docker.com/get-started) (optional, for containerized deployment) + +### Installation + +1. **Clone the repository** + ```bash + git clone + cd CarneiroTech + ``` + +2. **Restore dependencies** + ```bash + dotnet restore + ``` + +3. **Run the application** + ```bash + dotnet run + ``` + +4. **Open in browser** + Navigate to: `http://localhost:5000` or `https://localhost:5001` + +### Running with Docker + +1. **Build and run with Docker Compose** + ```bash + docker-compose up -d + ``` + +2. **Access the application** + Navigate to: `http://localhost:8080` + +3. **Stop the container** + ```bash + docker-compose down + ``` + +## Adding New Cases + +### 1. Create a Markdown File + +Create a new file in `Content/Cases/` folder: + +```bash +touch Content/Cases/my-new-case.md +``` + +### 2. Add Front Matter + Content + +```markdown +--- +title: "My Amazing Project" +slug: "my-amazing-project" +summary: "Short summary for cards and SEO" +client: "Client Name" +industry: "Industry" +timeline: "3 months" +role: "Your Role" +image: "/img/cases/project.jpg" +tags: + - Tag1 + - Tag2 + - Tag3 +featured: true +order: 1 +date: 2024-01-15 +seo_title: "SEO optimized title (max 60 chars)" +seo_description: "SEO description (max 160 chars)" +seo_keywords: "keyword1, keyword2, keyword3" +--- + +## Overview + +Your case content here in Markdown format... + +### Subsection + +More content... + +- Bullet points +- Work great + +\`\`\`csharp +// Code blocks work too +public void Example() { + Console.WriteLine("Hello!"); +} +\`\`\` +``` + +### 3. Refresh the Application + +The case service uses in-memory caching (60 minutes). Either: +- Wait for cache expiration +- Restart the application +- Implement cache invalidation + +### 4. Access Your Case + +Navigate to: `/cases/my-amazing-project` + +## Markdown Features + +Supported Markdown features: +- **Headers** (H1-H6) +- **Bold**, *italic*, ~~strikethrough~~ +- Lists (ordered and unordered) +- Links and images +- Code blocks with syntax highlighting +- Tables +- Blockquotes +- Horizontal rules + +## SEO Features + +### Meta Tags +- Dynamic title, description, keywords per page +- Canonical URLs +- Author meta tag + +### Open Graph +- Full OG tags for social sharing +- Dynamic OG images per case +- Locale support (pt_BR) + +### Twitter Cards +- Summary cards with large images +- Dynamic content per page + +### Structured Data +- JSON-LD Organization schema +- Professional service markup +- Enhanced search results + +### Sitemap +- Auto-generated XML sitemap +- Accessible at `/sitemap.xml` +- Includes homepage, cases index, and all individual cases + +### Robots.txt +- Located at `/robots.txt` +- Allows all crawlers +- Points to sitemap + +## Configuration + +### Caching + +Cases are cached in memory for 60 minutes. To adjust: + +Edit `Services/CaseService.cs`: +```csharp +private const int CACHE_MINUTES = 60; // Change this value +``` + +### Site URL + +Update the canonical URL and sitemap URLs in: +- `Views/Shared/_Layout.cshtml` (line 12) +- `Controllers/HomeController.cs` (Sitemap method) + +Replace `https://carneirotech.com` with your domain. + +## Deployment + +### Docker Deployment + +1. **Build the image** + ```bash + docker build -t carneirotech:latest . + ``` + +2. **Run the container** + ```bash + docker run -d -p 8080:80 --name carneirotech carneirotech:latest + ``` + +### Docker Compose Deployment + +```bash +docker-compose up -d +``` + +### OCI (Oracle Cloud) Deployment + +1. Push image to OCI Container Registry +2. Create Container Instance +3. Configure port mapping (80/443) +4. Set environment variables +5. Mount volume for Content folder (optional) + +## Customization + +### Logo + +Replace `/wwwroot/img/logo.svg` with your logo. + +Update navbar logo reference in `_Layout.cshtml` if needed. + +### Colors + +The template uses Bootstrap 5 with custom colors. To customize: + +Edit `/wwwroot/css/styles.css`: +- Primary color: `#ffc800` (yellow/gold) +- Dark color: `#212529` +- Fonts: Montserrat, Roboto Slab + +### Content + +Edit the following views to customize content: +- `Views/Home/Index.cshtml` - Homepage content +- `Views/Shared/_Layout.cshtml` - Navigation, footer +- `Controllers/HomeController.cs` - Contact form logic + +## License + +This project is private and proprietary. + +## Support + +For issues or questions, contact: ricardo@carneirotech.com + +--- + +**Built with ❤️ for Carneiro Tech** diff --git a/Resources/SiteStrings.cs b/Resources/SiteStrings.cs new file mode 100644 index 0000000..0e032d2 --- /dev/null +++ b/Resources/SiteStrings.cs @@ -0,0 +1,99 @@ +namespace CarneiroTech.Resources +{ + public class SiteStrings + { + public static Dictionary> Translations = new() + { + // Navigation + ["nav.services"] = new() { ["pt"] = "Serviços", ["en"] = "Services", ["es"] = "Servicios" }, + ["nav.cases"] = new() { ["pt"] = "Cases", ["en"] = "Cases", ["es"] = "Casos" }, + ["nav.about"] = new() { ["pt"] = "Sobre", ["en"] = "About", ["es"] = "Acerca de" }, + ["nav.contact"] = new() { ["pt"] = "Contato", ["en"] = "Contact", ["es"] = "Contacto" }, + + // Hero Section + ["hero.greeting"] = new() { ["pt"] = "Bem-vindo ao Carneiro Tech", ["en"] = "Welcome to Carneiro Tech", ["es"] = "Bienvenido a Carneiro Tech" }, + ["hero.tagline"] = new() { ["pt"] = "É um prazer ter você aqui!", ["en"] = "It's A Great Pleasure To Have You Here!", ["es"] = "¡Es un placer tenerlo aquí!" }, + ["hero.title"] = new() { ["pt"] = "Solution Design & Consultoria Técnica", ["en"] = "Solution Design & Technical Consulting", ["es"] = "Solution Design y Consultoría Técnica" }, + ["hero.cta"] = new() { ["pt"] = "Saiba Mais", ["en"] = "Learn More", ["es"] = "Más Información" }, + + // Services Section + ["services.title"] = new() { ["pt"] = "Serviços", ["en"] = "Services", ["es"] = "Servicios" }, + ["services.subtitle"] = new() { ["pt"] = "Transformando desafios técnicos em soluções eficientes", ["en"] = "Transforming technical challenges into efficient solutions", ["es"] = "Transformando desafíos técnicos en soluciones eficientes" }, + + ["service.solution.title"] = new() { ["pt"] = "Solution Design", ["en"] = "Solution Design", ["es"] = "Solution Design" }, + ["service.solution.desc"] = new() { ["pt"] = "Desenho completo de soluções técnicas, identificando requisitos não explícitos e propondo arquiteturas adequadas ao contexto do projeto.", ["en"] = "Complete technical solution design, identifying non-explicit requirements and proposing architectures suitable for the project context.", ["es"] = "Diseño completo de soluciones técnicas, identificando requisitos no explícitos y proponiendo arquitecturas adecuadas al contexto del proyecto." }, + + ["service.modernization.title"] = new() { ["pt"] = "Modernização de Sistemas", ["en"] = "System Modernization", ["es"] = "Modernización de Sistemas" }, + ["service.modernization.desc"] = new() { ["pt"] = "Migração de aplicações legadas para tecnologias modernas, com estratégias que garantem continuidade operacional e zero downtime.", ["en"] = "Migration of legacy applications to modern technologies, with strategies that ensure operational continuity and zero downtime.", ["es"] = "Migración de aplicaciones heredadas a tecnologías modernas, con estrategias que garantizan continuidad operativa y cero tiempo de inactividad." }, + + ["service.architecture.title"] = new() { ["pt"] = "Arquitetura de Software", ["en"] = "Software Architecture", ["es"] = "Arquitectura de Software" }, + ["service.architecture.desc"] = new() { ["pt"] = "Definição de arquiteturas escaláveis, resilientes e adequadas ao contexto, considerando custos, prazos e manutenibilidade.", ["en"] = "Definition of scalable, resilient and context-appropriate architectures, considering costs, deadlines and maintainability.", ["es"] = "Definición de arquitecturas escalables, resilientes y adecuadas al contexto, considerando costos, plazos y mantenibilidad." }, + + ["service.consulting.title"] = new() { ["pt"] = "Consultoria Técnica", ["en"] = "Technical Consulting", ["es"] = "Consultoría Técnica" }, + ["service.consulting.desc"] = new() { ["pt"] = "Análise de viabilidade técnica, otimização de processos, redução de custos operacionais e escolha de tecnologias adequadas.", ["en"] = "Technical feasibility analysis, process optimization, operational cost reduction and selection of appropriate technologies.", ["es"] = "Análisis de viabilidad técnica, optimización de procesos, reducción de costos operativos y selección de tecnologías adecuadas." }, + + // Portfolio/Cases Section + ["portfolio.title"] = new() { ["pt"] = "Cases de Sucesso", ["en"] = "Success Cases", ["es"] = "Casos de Éxito" }, + ["portfolio.subtitle"] = new() { ["pt"] = "Conheça alguns projetos onde transformei desafios complexos em soluções elegantes", ["en"] = "Discover some projects where I transformed complex challenges into elegant solutions", ["es"] = "Conozca algunos proyectos donde transformé desafíos complejos en soluciones elegantes" }, + ["portfolio.viewcase"] = new() { ["pt"] = "Ver Case Completo", ["en"] = "View Full Case", ["es"] = "Ver Caso Completo" }, + + // About Section + ["about.title"] = new() { ["pt"] = "Sobre", ["en"] = "About", ["es"] = "Acerca de" }, + ["about.subtitle"] = new() { ["pt"] = "Mais de uma década transformando desafios técnicos em soluções eficientes", ["en"] = "Over a decade transforming technical challenges into efficient solutions", ["es"] = "Más de una década transformando desafíos técnicos en soluciones eficientes" }, + ["about.text"] = new() { + ["pt"] = "Com mais de 10 anos de experiência em engenharia de software, especializei-me em Solution Design, arquitetura de sistemas e modernização de aplicações legadas. Meu diferencial está em identificar requisitos não explícitos, antecipar problemas e propor soluções que realmente funcionam na prática.", + ["en"] = "With over 10 years of experience in software engineering, I specialize in Solution Design, systems architecture and legacy application modernization. My differential is in identifying non-explicit requirements, anticipating problems and proposing solutions that really work in practice.", + ["es"] = "Con más de 10 años de experiencia en ingeniería de software, me especializo en Solution Design, arquitectura de sistemas y modernización de aplicaciones heredadas. Mi diferencial está en identificar requisitos no explícitos, anticipar problemas y proponer soluciones que realmente funcionan en la práctica." + }, + + // Contact Section + ["contact.title"] = new() { ["pt"] = "Contato", ["en"] = "Contact", ["es"] = "Contacto" }, + ["contact.subtitle"] = new() { ["pt"] = "Vamos conversar sobre seu desafio técnico", ["en"] = "Let's talk about your technical challenge", ["es"] = "Hablemos sobre su desafío técnico" }, + ["contact.name"] = new() { ["pt"] = "Seu Nome *", ["en"] = "Your Name *", ["es"] = "Su Nombre *" }, + ["contact.email"] = new() { ["pt"] = "Seu Email *", ["en"] = "Your Email *", ["es"] = "Su Email *" }, + ["contact.phone"] = new() { ["pt"] = "Seu Telefone", ["en"] = "Your Phone", ["es"] = "Su Teléfono" }, + ["contact.message"] = new() { ["pt"] = "Sua Mensagem *", ["en"] = "Your Message *", ["es"] = "Su Mensaje *" }, + ["contact.send"] = new() { ["pt"] = "Enviar Mensagem", ["en"] = "Send Message", ["es"] = "Enviar Mensaje" }, + ["contact.sending"] = new() { ["pt"] = "Enviando...", ["en"] = "Sending...", ["es"] = "Enviando..." }, + ["contact.success"] = new() { ["pt"] = "Mensagem enviada com sucesso! Entraremos em contato em breve.", ["en"] = "Message sent successfully! We'll get in touch soon.", ["es"] = "¡Mensaje enviado con éxito! Nos pondremos en contacto pronto." }, + ["contact.error"] = new() { ["pt"] = "Erro ao enviar mensagem. Por favor, tente novamente ou entre em contato via email.", ["en"] = "Error sending message. Please try again or contact via email.", ["es"] = "Error al enviar mensaje. Por favor, inténtelo de nuevo o contacte por email." }, + ["contact.or"] = new() { ["pt"] = "OU", ["en"] = "OR", ["es"] = "O" }, + ["contact.whatsapp"] = new() { ["pt"] = "Falar via WhatsApp", ["en"] = "Chat on WhatsApp", ["es"] = "Hablar por WhatsApp" }, + ["contact.whatsapp.subtitle"] = new() { ["pt"] = "Resposta rápida e direta", ["en"] = "Quick and direct response", ["es"] = "Respuesta rápida y directa" }, + + // Footer + ["footer.rights"] = new() { ["pt"] = "Carneiro Tech - Todos os direitos reservados", ["en"] = "Carneiro Tech - All rights reserved", ["es"] = "Carneiro Tech - Todos los derechos reservados" }, + ["footer.privacy"] = new() { ["pt"] = "Privacidade", ["en"] = "Privacy", ["es"] = "Privacidad" }, + ["footer.terms"] = new() { ["pt"] = "Termos", ["en"] = "Terms", ["es"] = "Términos" }, + + // Case Details + ["case.client"] = new() { ["pt"] = "Cliente", ["en"] = "Client", ["es"] = "Cliente" }, + ["case.industry"] = new() { ["pt"] = "Indústria", ["en"] = "Industry", ["es"] = "Industria" }, + ["case.timeline"] = new() { ["pt"] = "Prazo", ["en"] = "Timeline", ["es"] = "Plazo" }, + ["case.role"] = new() { ["pt"] = "Papel", ["en"] = "Role", ["es"] = "Rol" }, + ["case.tags"] = new() { ["pt"] = "Tecnologias", ["en"] = "Technologies", ["es"] = "Tecnologías" }, + ["case.back"] = new() { ["pt"] = "← Voltar para Cases", ["en"] = "← Back to Cases", ["es"] = "← Volver a Casos" }, + + // WhatsApp message + ["whatsapp.message"] = new() { + ["pt"] = "[Site] Olá! Eu gostaria de conversar com você sobre uma possível proposta comercial.", + ["en"] = "[Website] Hello! I would like to talk to you about a possible business proposal.", + ["es"] = "[Sitio] ¡Hola! Me gustaría hablar con usted sobre una posible propuesta comercial." + }, + }; + + public static string Get(string key, string language) + { + if (Translations.TryGetValue(key, out var translations)) + { + if (translations.TryGetValue(language, out var text)) + { + return text; + } + // Fallback to Portuguese if translation not found + return translations.GetValueOrDefault("pt", key); + } + return key; // Return key if not found at all + } + } +} diff --git a/Services/CaseService.cs b/Services/CaseService.cs new file mode 100644 index 0000000..c9eaeda --- /dev/null +++ b/Services/CaseService.cs @@ -0,0 +1,208 @@ +using CarneiroTech.Models; +using Microsoft.Extensions.Caching.Memory; +using System.Globalization; + +namespace CarneiroTech.Services; + +public class CaseService : ICaseService +{ + private readonly IMarkdownService _markdownService; + private readonly IMemoryCache _cache; + private readonly IWebHostEnvironment _environment; + private readonly ILanguageService _languageService; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly string _casesBasePath; + private const string CACHE_KEY_PREFIX = "cases_"; + private const int CACHE_MINUTES = 60; + + public CaseService(IMarkdownService markdownService, IMemoryCache cache, IWebHostEnvironment environment, + ILanguageService languageService, IHttpContextAccessor httpContextAccessor) + { + _markdownService = markdownService; + _cache = cache; + _environment = environment; + _languageService = languageService; + _httpContextAccessor = httpContextAccessor; + _casesBasePath = Path.Combine(_environment.ContentRootPath, "Content", "Cases"); + } + + private string GetCurrentLanguage() + { + if (_httpContextAccessor.HttpContext != null) + { + return _languageService.GetCurrentLanguage(_httpContextAccessor.HttpContext); + } + return "pt"; // Default fallback + } + + private string GetCasesPath(string language) + { + return Path.Combine(_casesBasePath, language); + } + + public async Task> GetAllCasesAsync() + { + var language = GetCurrentLanguage(); + var cacheKey = $"{CACHE_KEY_PREFIX}{language}"; + + if (_cache.TryGetValue(cacheKey, out List? cachedCases) && cachedCases != null) + { + return cachedCases; + } + + var cases = new List(); + var casesPath = GetCasesPath(language); + + if (!Directory.Exists(casesPath)) + { + // Try Portuguese as fallback + casesPath = GetCasesPath("pt"); + if (!Directory.Exists(casesPath)) + { + Directory.CreateDirectory(casesPath); + return cases; + } + } + + var markdownFiles = Directory.GetFiles(casesPath, "*.md"); + + foreach (var file in markdownFiles) + { + var caseModel = await ParseCaseFileAsync(file); + if (caseModel != null) + { + cases.Add(caseModel); + } + } + + // Sort by order (ascending) and date (descending) + cases = cases.OrderBy(c => c.Metadata.Order) + .ThenByDescending(c => c.Metadata.Date) + .ToList(); + + _cache.Set(cacheKey, cases, TimeSpan.FromMinutes(CACHE_MINUTES)); + + return cases; + } + + public async Task> GetFeaturedCasesAsync() + { + var allCases = await GetAllCasesAsync(); + return allCases.Where(c => c.Metadata.Featured).ToList(); + } + + public async Task GetCaseBySlugAsync(string slug) + { + var allCases = await GetAllCasesAsync(); + return allCases.FirstOrDefault(c => c.Metadata.Slug.Equals(slug, StringComparison.OrdinalIgnoreCase)); + } + + public async Task> GetAllTagsAsync() + { + var allCases = await GetAllCasesAsync(); + var tags = allCases.SelectMany(c => c.Metadata.Tags) + .Distinct() + .OrderBy(t => t) + .ToList(); + return tags; + } + + public async Task> GetCasesByTagAsync(string tag) + { + var allCases = await GetAllCasesAsync(); + return allCases.Where(c => c.Metadata.Tags.Contains(tag, StringComparer.OrdinalIgnoreCase)) + .ToList(); + } + + private async Task ParseCaseFileAsync(string filePath) + { + try + { + var content = await File.ReadAllTextAsync(filePath); + var frontMatter = _markdownService.ParseFrontMatter(content, out string bodyContent); + + var metadata = new CaseMetadata + { + Title = GetStringValue(frontMatter, "title"), + Slug = GetStringValue(frontMatter, "slug"), + Summary = GetStringValue(frontMatter, "summary"), + Client = GetStringValue(frontMatter, "client"), + Industry = GetStringValue(frontMatter, "industry"), + Timeline = GetStringValue(frontMatter, "timeline"), + Role = GetStringValue(frontMatter, "role"), + Image = GetStringValue(frontMatter, "image"), + Tags = GetListValue(frontMatter, "tags"), + Featured = GetBoolValue(frontMatter, "featured"), + Order = GetIntValue(frontMatter, "order"), + Date = GetDateValue(frontMatter, "date"), + SeoTitle = GetStringValue(frontMatter, "seo_title"), + SeoDescription = GetStringValue(frontMatter, "seo_description"), + SeoKeywords = GetStringValue(frontMatter, "seo_keywords") + }; + + var htmlContent = _markdownService.ConvertToHtml(bodyContent); + + return new CaseModel + { + Metadata = metadata, + ContentHtml = htmlContent, + ContentMarkdown = bodyContent + }; + } + catch (Exception) + { + // Log error here if needed + return null; + } + } + + private string GetStringValue(Dictionary dict, string key) + { + return dict.ContainsKey(key) ? dict[key]?.ToString() ?? string.Empty : string.Empty; + } + + private List GetListValue(Dictionary dict, string key) + { + if (!dict.ContainsKey(key)) return new List(); + + if (dict[key] is List list) + { + return list.Select(item => item?.ToString() ?? string.Empty).ToList(); + } + + return new List(); + } + + private bool GetBoolValue(Dictionary dict, string key) + { + if (!dict.ContainsKey(key)) return false; + + var value = dict[key]?.ToString()?.ToLower(); + return value == "true" || value == "yes" || value == "1"; + } + + private int GetIntValue(Dictionary dict, string key) + { + if (!dict.ContainsKey(key)) return 0; + + if (int.TryParse(dict[key]?.ToString(), out int result)) + { + return result; + } + + return 0; + } + + private DateTime GetDateValue(Dictionary dict, string key) + { + if (!dict.ContainsKey(key)) return DateTime.MinValue; + + var dateString = dict[key]?.ToString(); + if (DateTime.TryParse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result)) + { + return result; + } + + return DateTime.MinValue; + } +} diff --git a/Services/ICaseService.cs b/Services/ICaseService.cs new file mode 100644 index 0000000..f38c420 --- /dev/null +++ b/Services/ICaseService.cs @@ -0,0 +1,12 @@ +using CarneiroTech.Models; + +namespace CarneiroTech.Services; + +public interface ICaseService +{ + Task> GetAllCasesAsync(); + Task> GetFeaturedCasesAsync(); + Task GetCaseBySlugAsync(string slug); + Task> GetAllTagsAsync(); + Task> GetCasesByTagAsync(string tag); +} diff --git a/Services/IMarkdownService.cs b/Services/IMarkdownService.cs new file mode 100644 index 0000000..3002efc --- /dev/null +++ b/Services/IMarkdownService.cs @@ -0,0 +1,7 @@ +namespace CarneiroTech.Services; + +public interface IMarkdownService +{ + string ConvertToHtml(string markdown); + Dictionary ParseFrontMatter(string content, out string bodyContent); +} diff --git a/Services/LanguageService.cs b/Services/LanguageService.cs new file mode 100644 index 0000000..f5b06e1 --- /dev/null +++ b/Services/LanguageService.cs @@ -0,0 +1,90 @@ +using Microsoft.AspNetCore.Http; +using System.Globalization; + +namespace CarneiroTech.Services +{ + public interface ILanguageService + { + string GetCurrentLanguage(HttpContext context); + void SetLanguage(HttpContext context, string language); + string DetectBrowserLanguage(HttpContext context); + } + + public class LanguageService : ILanguageService + { + private const string LanguageCookieName = "CarneiroTech_Language"; + private readonly string[] _supportedLanguages = { "pt", "en", "es" }; + private const string DefaultLanguage = "pt"; + + public string GetCurrentLanguage(HttpContext context) + { + // 1. Check cookie first (user preference) + if (context.Request.Cookies.TryGetValue(LanguageCookieName, out var cookieLanguage)) + { + if (_supportedLanguages.Contains(cookieLanguage)) + { + return cookieLanguage; + } + } + + // 2. Detect from browser Accept-Language header + var browserLanguage = DetectBrowserLanguage(context); + if (!string.IsNullOrEmpty(browserLanguage)) + { + // Save detected language to cookie + SetLanguage(context, browserLanguage); + return browserLanguage; + } + + // 3. Fallback to default (Portuguese) + return DefaultLanguage; + } + + public void SetLanguage(HttpContext context, string language) + { + if (_supportedLanguages.Contains(language)) + { + var cookieOptions = new CookieOptions + { + Expires = DateTimeOffset.UtcNow.AddYears(1), + HttpOnly = false, // Allow JavaScript to read for client-side logic + Secure = true, + SameSite = SameSiteMode.Lax, + Path = "/" + }; + + context.Response.Cookies.Append(LanguageCookieName, language, cookieOptions); + } + } + + public string DetectBrowserLanguage(HttpContext context) + { + var acceptLanguageHeader = context.Request.Headers["Accept-Language"].ToString(); + + if (string.IsNullOrEmpty(acceptLanguageHeader)) + { + return DefaultLanguage; + } + + // Parse Accept-Language header + // Format: "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7,es;q=0.6" + var browserLanguages = acceptLanguageHeader + .Split(',') + .Select(lang => lang.Split(';')[0].Trim()) + .Select(lang => lang.Split('-')[0].ToLower()) // Get only language code (pt from pt-BR) + .Distinct() + .ToList(); + + // Find first supported language + foreach (var browserLang in browserLanguages) + { + if (_supportedLanguages.Contains(browserLang)) + { + return browserLang; + } + } + + return DefaultLanguage; + } + } +} diff --git a/Services/MarkdownService.cs b/Services/MarkdownService.cs new file mode 100644 index 0000000..a6d8ee9 --- /dev/null +++ b/Services/MarkdownService.cs @@ -0,0 +1,76 @@ +using Markdig; +using YamlDotNet.Serialization; + +namespace CarneiroTech.Services; + +public class MarkdownService : IMarkdownService +{ + private readonly MarkdownPipeline _pipeline; + + public MarkdownService() + { + _pipeline = new MarkdownPipelineBuilder() + .UseAdvancedExtensions() + .Build(); + } + + public string ConvertToHtml(string markdown) + { + return Markdown.ToHtml(markdown, _pipeline); + } + + public Dictionary ParseFrontMatter(string content, out string bodyContent) + { + bodyContent = content; + var frontMatter = new Dictionary(); + + if (!content.StartsWith("---")) + { + return frontMatter; + } + + var lines = content.Split('\n'); + var yamlLines = new List(); + var bodyLines = new List(); + var inFrontMatter = false; + var frontMatterEnded = false; + + for (int i = 0; i < lines.Length; i++) + { + var line = lines[i]; + + if (i == 0 && line.Trim() == "---") + { + inFrontMatter = true; + continue; + } + + if (inFrontMatter && line.Trim() == "---") + { + inFrontMatter = false; + frontMatterEnded = true; + continue; + } + + if (inFrontMatter) + { + yamlLines.Add(line); + } + else if (frontMatterEnded) + { + bodyLines.Add(line); + } + } + + if (yamlLines.Any()) + { + var yaml = string.Join("\n", yamlLines); + var deserializer = new DeserializerBuilder().Build(); + frontMatter = deserializer.Deserialize>(yaml) + ?? new Dictionary(); + } + + bodyContent = string.Join("\n", bodyLines).Trim(); + return frontMatter; + } +} diff --git a/Views/Cases/Details.cshtml b/Views/Cases/Details.cshtml new file mode 100644 index 0000000..840d47c --- /dev/null +++ b/Views/Cases/Details.cshtml @@ -0,0 +1,184 @@ +@model CarneiroTech.Models.CaseModel + + +
+
+ +
+
+

@Model.Metadata.Title

+

@Model.Metadata.Summary

+ + +
+ @if (!string.IsNullOrEmpty(Model.Metadata.Client)) + { +
+ Cliente: @Model.Metadata.Client +
+ } + @if (!string.IsNullOrEmpty(Model.Metadata.Industry)) + { +
+ Indústria: @Model.Metadata.Industry +
+ } + @if (!string.IsNullOrEmpty(Model.Metadata.Timeline)) + { +
+ Timeline: @Model.Metadata.Timeline +
+ } + @if (!string.IsNullOrEmpty(Model.Metadata.Role)) + { +
+ Meu Role: @Model.Metadata.Role +
+ } +
+ + + @if (Model.Metadata.Tags.Any()) + { +
+ @foreach (var tag in Model.Metadata.Tags) + { + @tag + } +
+ } +
+
+ + +
+
+
+ @Html.Raw(Model.ContentHtml) +
+
+
+ + + +
+
+ +@section Scripts { + + + + + + +} diff --git a/Views/Cases/Index.cshtml b/Views/Cases/Index.cshtml new file mode 100644 index 0000000..4f7782c --- /dev/null +++ b/Views/Cases/Index.cshtml @@ -0,0 +1,91 @@ +@model List +@{ + var selectedTag = ViewData["SelectedTag"] as string; + var allTags = ViewBag.AllTags as List ?? new List(); +} + + +
+
+
Portfolio
+
Nossos Cases
+
+
+ + +
+
+ + @if (allTags.Any()) + { +
+
+
Filtrar por tecnologia:
+
+ Todos + @foreach (var tag in allTags) + { + @tag + } +
+
+
+ } + + +
+ @if (Model != null && Model.Any()) + { + foreach (var caseItem in Model) + { +
+ +
+ +
+
+

@caseItem.Metadata.Summary

+
+
+ @if (!string.IsNullOrEmpty(caseItem.Metadata.Image)) + { + @caseItem.Metadata.Title + } + else + { +
+ } +
+
+
@caseItem.Metadata.Title
+
@caseItem.Metadata.Industry
+
+ @foreach (var tag in caseItem.Metadata.Tags.Take(3)) + { + @tag + } +
+
+
+
+ } + } + else + { +
+

+ @if (!string.IsNullOrEmpty(selectedTag)) + { + Nenhum case encontrado para a tag "@selectedTag". + } + else + { + Em breve, novos cases serão adicionados. + } +

+ Ver Todos os Cases +
+ } +
+
+
diff --git a/Views/Home/Index.cshtml b/Views/Home/Index.cshtml new file mode 100644 index 0000000..4ff9a49 --- /dev/null +++ b/Views/Home/Index.cshtml @@ -0,0 +1,302 @@ +@model List +@{ + ViewData["Title"] = ViewData["Title"] ?? "Carneiro Tech - Solution Design & Technical Consulting"; +} + + +
+
+
Solution Design & Technical Consulting
+
Conectando Negócio e Tecnologia
+ Saiba Mais +
+
+ + +
+
+
+

Serviços

+

20+ anos conectando negócio e tecnologia

+
+
+
+ + + + +

Solution Design

+

Desenho de soluções técnicas que conectam objetivos de negócio com arquitetura de sistemas. Experiência com integrações SAP, arquiteturas enterprise e modernização de legados.

+
+
+ + + + +

Technical Consulting

+

Assessoria técnica para tomada de decisão: definição de MVP, priorização de backlog, análise de viabilidade técnica e due diligence de produtos digitais.

+
+
+ + + + +

Technical Proposals

+

Elaboração de propostas técnicas detalhadas: estimativas, arquitetura, tecnologias, riscos e roadmap de implementação para projetos complexos.

+
+
+
+
+ + +
+
+
+

Cases

+

Projetos que transformaram negócios

+
+
+ @if (Model != null && Model.Any()) + { + foreach (var caseItem in Model.Take(6)) + { + + } + } + else + { +
+

Em breve, novos cases serão adicionados.

+
+ } +
+ +
+
+ + +
+
+
+

Sobre

+

Ricardo Carneiro - Carneiro Tech

+
+
    +
  • +
    +
    +
    +

    2000-2005

    +

    Início da Jornada

    +
    +

    Primeiros passos na tecnologia: desenvolvimento web, banco de dados e sistemas corporativos. Formação sólida em Engenharia de Software.

    +
    +
  • +
  • +
    +
    +
    +

    2005-2015

    +

    Enterprise & SAP

    +
    +

    Especialização em integrações SAP e arquiteturas enterprise. Projetos em multinacionais nos setores healthcare, varejo e manufatura.

    +
    +
  • +
  • +
    +
    +
    +

    2015-2020

    +

    Digital Transformation

    +
    +

    Liderança técnica em transformação digital: cloud migration, modernização de legados e implementação de metodologias ágeis.

    +
    +
  • +
  • +
    +
    +
    +

    2020-Hoje

    +

    Consultoria Independente

    +
    +

    Fundação da Carneiro Tech: consultoria especializada em Solution Design, Technical Proposals e Due Diligence para empresas de diversos portes.

    +
    +
  • +
  • +
    +

    + Vamos +
    + Trabalhar +
    + Juntos! +

    +
    +
  • +
+
+
+ + +
+
+
+

Contato

+

Vamos conversar sobre seu desafio técnico

+
+ + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ + +
+
+ OU +
+ + + Falar via WhatsApp + +
+ Resposta rápida e direta +
+
+
+
+ + diff --git a/Views/Home/Privacy.cshtml b/Views/Home/Privacy.cshtml new file mode 100644 index 0000000..af4fb19 --- /dev/null +++ b/Views/Home/Privacy.cshtml @@ -0,0 +1,6 @@ +@{ + ViewData["Title"] = "Privacy Policy"; +} +

@ViewData["Title"]

+ +

Use this page to detail your site's privacy policy.

diff --git a/Views/Shared/Error.cshtml b/Views/Shared/Error.cshtml new file mode 100644 index 0000000..a1e0478 --- /dev/null +++ b/Views/Shared/Error.cshtml @@ -0,0 +1,25 @@ +@model ErrorViewModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

diff --git a/Views/Shared/_Layout.cshtml b/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..0ba75d9 --- /dev/null +++ b/Views/Shared/_Layout.cshtml @@ -0,0 +1,156 @@ + + + + + + + + @ViewData["Title"] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @RenderBody() + + +
+
+
+
Copyright © @DateTime.Now.Year Carneiro Tech - Ricardo Carneiro
+
+ +
+ +
+
+
+ + + + + + + + + + @await RenderSectionAsync("Scripts", required: false) + + diff --git a/Views/Shared/_Layout.cshtml.css b/Views/Shared/_Layout.cshtml.css new file mode 100644 index 0000000..c187c02 --- /dev/null +++ b/Views/Shared/_Layout.cshtml.css @@ -0,0 +1,48 @@ +/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification +for details on configuring this project to bundle and minify static web assets. */ + +a.navbar-brand { + white-space: normal; + text-align: center; + word-break: break-all; +} + +a { + color: #0077cc; +} + +.btn-primary { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.nav-pills .nav-link.active, .nav-pills .show > .nav-link { + color: #fff; + background-color: #1b6ec2; + border-color: #1861ac; +} + +.border-top { + border-top: 1px solid #e5e5e5; +} +.border-bottom { + border-bottom: 1px solid #e5e5e5; +} + +.box-shadow { + box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); +} + +button.accept-policy { + font-size: 1rem; + line-height: inherit; +} + +.footer { + position: absolute; + bottom: 0; + width: 100%; + white-space: nowrap; + line-height: 60px; +} diff --git a/Views/Shared/_ValidationScriptsPartial.cshtml b/Views/Shared/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..5a16d80 --- /dev/null +++ b/Views/Shared/_ValidationScriptsPartial.cshtml @@ -0,0 +1,2 @@ + + diff --git a/Views/_ViewImports.cshtml b/Views/_ViewImports.cshtml new file mode 100644 index 0000000..78ddf02 --- /dev/null +++ b/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using CarneiroTech +@using CarneiroTech.Models +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/Views/_ViewStart.cshtml b/Views/_ViewStart.cshtml new file mode 100644 index 0000000..a5f1004 --- /dev/null +++ b/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} diff --git a/appsettings.Development.json b/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/appsettings.json b/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/deploy-to-oci.sh b/deploy-to-oci.sh new file mode 100644 index 0000000..e3d66b7 --- /dev/null +++ b/deploy-to-oci.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# +# Local Deploy Script - CarneiroTech to OCI +# Usage: ./deploy-to-oci.sh +# + +set -e + +SERVER="ubuntu@129.146.116.218" +APP_DIR="/home/ubuntu/apps/carneirotech" +LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo "🚀 CarneiroTech - Deploy to OCI" +echo "================================" +echo "" + +# Create tarball excluding unnecessary files +echo "📦 Creating deployment package..." +cd "$LOCAL_DIR" +tar --exclude='bin' \ + --exclude='obj' \ + --exclude='.vs' \ + --exclude='*.user' \ + --exclude='.git' \ + --exclude='deploy-to-oci.sh' \ + -czf /tmp/carneirotech-deploy.tar.gz . + +echo "✅ Package created: $(du -h /tmp/carneirotech-deploy.tar.gz | cut -f1)" +echo "" + +# Transfer to server +echo "📤 Transferring to server..." +scp /tmp/carneirotech-deploy.tar.gz "$SERVER:$APP_DIR/" +rm /tmp/carneirotech-deploy.tar.gz + +# Extract and deploy on server +echo "📥 Extracting on server..." +ssh "$SERVER" << 'ENDSSH' +cd /home/ubuntu/apps/carneirotech +tar -xzf carneirotech-deploy.tar.gz +rm carneirotech-deploy.tar.gz +echo "✅ Files extracted" +echo "" + +# Run deploy script +echo "🚀 Running deployment..." +./deploy.sh +ENDSSH + +echo "" +echo "✨ Deployment completed!" +echo "🌐 Check your site at: https://carneirotech.com" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..de4af6e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + carneirotech-web: + build: + context: . + dockerfile: Dockerfile + container_name: carneirotech-web + restart: unless-stopped + ports: + - "127.0.0.1:5008:5008" + environment: + - ASPNETCORE_ENVIRONMENT=Production + - ASPNETCORE_URLS=http://+:5008 + networks: + - carneirotech-network + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5008/"] + interval: 30s + timeout: 3s + retries: 3 + start_period: 40s + +networks: + carneirotech-network: + driver: bridge diff --git a/wwwroot/assets/favicon.ico b/wwwroot/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9356735ca323587d5730a74bd017d9cb2153479b GIT binary patch literal 23462 zcmeI2Ym8l0701uz4!r`E5nmsKGBw!J7NUL^oNvCW6eRJ5T2QE1Vib%Li7*|q0n*&DMgTO~-9{XjsE?EY|;o%Gf&I*P@A7F%Gk z1r~A(tWf385-t_C2zLk%3S+|mde?_^MUNdn{E3_Ia-1r7u5hEUM`+Ig#NQyCE5JJ+ zq^?S=6K)m8g_*RE7Yi@^X9zs+aFZoU_|wAUf>+0W=pWPbJ|!F}91ikPCHaidkG6>A zZ0Y%0Asw>9nEM+cwmx&=cenCcbBMLrM&;A5@o1)P`jT?H@DOOPLFMpMA*DV~$^RPR zfyB7{8TTvh+rqBI_?zW_tZ*>o1U>W-A+JN|`m+447fu&y!g+${zfZP{1+JdYCuM^N zK6v5xe2e;r<#)U=m$F(9ds-;wVU?-F_kAf3|nsE*~qWO@Y`y%a+gg11j$b_>Rg}7IM2=@N&xa-I}aI>p0PI1xp*b6oIi7z=l@^X$fqoPn;Qi9iu~nrOZI+!kBsA0 zK zP@rt&RkcQje>Q~iGPKUTPxh*I;`@C;u5mXX!k(DDo)ym-j@Ku1PV)PM6Ave2 z;>p5H#oHpu zIJ2{Oo|FElNDlhOzZ@Rc8ZpAW!~ALGg6=~xB!VF@EHkk ztt$A1imWHRd|I;Q>$?y~*>-^x9%oZF)-f^St-tpx*jgWjIGOW^v+|-HV`aM>Ee>>5 z^Gx{}p|O;GOYA#@_X)wui*fKk1fHKeJgohO5_nj*Soy#cGk;o-dV`b`4sYz73NPO?--wmp zEjUC7b?`VsdkTyCW+|;)SnJG0{-|J!_ohVB>m44x&zRqbnBS~C(48j43S+;wH~B^^ ziQ{**^j4009e+>#PKO8X^iemPq_j5SMBhzwu$G~U|by@r2C#d)-q=k8FDZ0w1wICSr+h%KAH zzY&|$NxJH|2>X>Nd0$*>(W5bkDZv?0x_QHNr!8L7m%p; z&K(|4nqN)Qf0ocuP#%ASbgEIsSPFn`y8%*uiH6ePL-Vsu<9LJx1a6AFdrO~n1Ht* z{AD7K=YG2kR{dCSrbuW%cvgUDHqRNptmjyDIgmYwmGUl!{}RhNpbMRatqjC*e&wBI zZVtp*rVmJIwH4=AseQD}PhZ&Y@Kg5`VN9^{+!I0Kor`krL|ev6=v?$&u_TUPs4pyc zVk|ZF@#df#t$>m)bl(1sl5glX)JHdk0wZjk(OP|BZ$xa-<#dM!?(>R{PMQBB;jN7r zuT#YP9fvt`CbC1pR$I;H?>PLP6(gbF2TzP4==p?xA3QFBr|8Q6hhxmM+UoqGV?}wH z>|UR^wIa4?=IqqU1>Lnp$BOdm08dK2ijVQypWNP3bgU>}C%ae2brrEib6q!&Ib6I8 z))p}m8awZbAuxRIkC#j;fiYk)@uuP)oG2qNtC9d8`uxxW{Vs^EEz?Ee<5JZbMED&m=I z7`v_b7o_Jm`;Z(hBWpS<9v$_I{f6Zll+VfPJqP`-g{t;qt>JO3mn|e0$mqp>D-AZCkF_#O- zl|o*(^7UESigO?R{kwv<7cR!rpXREa^r()IU)A`P=SUs42&V}(fo~+Ym9LD~pBKD& z0RQy@Jn+FA(?-NGJ{8}aZs$xG?|&wg>l?a%LjHV*I}+n^PQKHtg(nl^neX~Fj*B{4 zSbv4qt9d;S#+AG-imu7rI5LMZo*#_%@SfRJKBowWqA-ShT=<9Jtbxtpa}dvo>Fp#THm>fd$wC?Oa+~5asg9 z@EI{du4{2TCXg30$T8oQXcM<2_?8C{Y0nS=#z(pgHa1Xe)jH)?y>+aHuui$zXbtJ7=MiF?gUzArif(yys5v}3k`1HJhDZ4`)G3dQ zjx>jxlqa(`<<_9e6ScPZhQ=CG<#Ed6^>(d2HZ)$R+?Z5(aH3ou8=S1S#|I~C^1(d4 ztRU%IL+BgrUb)epXtcAgeyThyrT&hhFP5{Opr5UBk-u0T>gMo@+zR=3>)5T=^!iS< zgV$E$b=t7oo@x==ywlFb_AkDd$!zLl5*M^Ak(-LFa%-GcrtmH!WhNMF4G literal 0 HcmV?d00001 diff --git a/wwwroot/assets/img/about/1.jpg b/wwwroot/assets/img/about/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ee7ce9a94d889c338aa465468ff79ec65db52e9 GIT binary patch literal 19668 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 literal 0 HcmV?d00001 diff --git a/wwwroot/assets/img/about/2.jpg b/wwwroot/assets/img/about/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c490eef6f2182c6b90ea2c23e1b5a6a0bf993796 GIT binary patch literal 10187 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 X)q2l(F>+FTl~=|E{Gv#~dszBE+#BwU literal 0 HcmV?d00001 diff --git a/wwwroot/assets/img/about/3.jpg b/wwwroot/assets/img/about/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..954caf140f3a19ba2dbf22d244d55000f91becc2 GIT binary patch literal 18029 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 E*3``gs-cmHPF_R+RFB$gNqpL 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 literal 0 HcmV?d00001 diff --git a/wwwroot/assets/img/close-icon.svg b/wwwroot/assets/img/close-icon.svg new file mode 100644 index 0000000..3924563 --- /dev/null +++ b/wwwroot/assets/img/close-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wwwroot/assets/img/header-bg.jpg b/wwwroot/assets/img/header-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..527987c3e2d8de8d6b1d541c107c1722bdd91957 GIT binary patch literal 4497411 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

=@yS#| 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

lKpp{3fh9p=+M5QY+iA}45BiNFP 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 z zg4TnV{4oyX%qXHAOqP3@I__r+!a$hZWOA}Yk;`~}FKw+eJtj>W@xl^;f&koA75dGX zN*8+h;jdtpqHAJq%s-?d7KHz>>8BAKLt|^67dSWcK$r$&7|WRyR8r>0MWO-rJWVQ& zW zh)Hjo5;D?CHG6hZq1+jTaR8i7Z)ck)925Yr>5`wEvMJc(Y#$oU9HMtKI|wlr?)7(3KW*oj91OVa~FVSpZ0TE+VDK{?X8->8@kFyS?ht z1XA6`e@Mp;S-suvh=tStt#y1VU%e7NckZgGrmO&FT5MVW#LO8$iDs@rSLZ6gjk}j= zDz2^)gzC-;?yXr8;0JoWyi&e(QgQS8BEb1b0>8^sM zg~f=tQ#{USO$7~Oiqa!#caxv+6?XwRixbj#t_8evo2Kndmycfn6ROuDiQm&dlkQfG zw%u`@1|)Tun`LU>UDJ#L1OcqGL{8hH9HC3HSvv`6!bky+PF9_|UO5VvO?_*A|bh z)Y~n$x6NEFAv{iB*I_-8TxJQ7-DVPqrRuH-Aj za(y+P;bN7LwyhZ66LN(0LS+x_*Kg?IcIaWYC99e5QFYM9Il7h zl5}s*akz^=0qX+{uGOp#!gplnDQ+8x-39>9F7|y2` z03Yz?EM1T$-g=PU@U2xhia-J!U#i=KvvCu6fEJH>ZW6B&UyC!sly=iZV!;XI6M+_p z79kQkDdrr0+r#8$I0nk1zb4o4uq)*%kQxk6+zEE}GyaImu{U>cvI-owV{_v8c*CaP zf(f)I@Hp;cP!>P1#}r1a@As}oKiGVpf=k``v=_+8^5W_SaYklQYO!|ETv#Wcyx2&PRD5Z{&64=6xPp>A&&0^4)W&w&UKj z3ze00UhybIPGCcdiHXw$GGTi&nf;{k3zrGBhX+aMxOJe~BU-@@L6_#!h-vCB?W4}; zenxV1Yd~Q$+{c7jz0{9i{J5fpdxqO$-h1{@bXow3-V1M5tcRu~x7qCjp*h+f4OnDr z;ugG0DX(mp+k$u%fsbknw;A5)*Ht=&i(QOJ=&6(2FT}F$bgY~mfI7~KcY-Z<*=-@( zd$S12W4KSM;~4%Y*BFA7EGAq9EqZ|xA#L~ni{=&unjE%=dE!64>z@ubb~P}h=qlel z5=NJt`yaY9mt7X-K%hmTX_s1-i#WH>_cd zY~G_>j9>j&XadaUMk$rw>g=JFeTQDG7`!xWPfs%mCvNj*)A{tVCe*}zH~#D{7>NpE zDC>_(Ul6LM9-}JX$lVMLc5s!{oS8N8>Nh5nC*Z-V8PI%V`+G$;fI7`(0Zd=>NnNvO zReg>7&?)F%0#38-$*+$0rQ@XfZxWlszEy>g|S9yHIPy^u|w<$75tUqB+8 zwmt6r*30r6jp8P+?z!)LRl^jL_umbBpS9w7-X)7rh4%{@6z(#J+WV{3fRGUI7G!A9 zL!zZQ$2B`jx~U#{7@wunS074s0qlcEnX2F5&5aJDa4G1@V>OtGH6}=fv??Qhw=8Z_ zu<=Y%c0iE);nXp^K0=E^nA4{-wJ7IQzT;A(agBww$+7I6#QmD`Drc38P6~qMwj;am zV_E{}G#tZ<+EPeVd|37ER zp`{%p3p6HEw)|y;Hy0Plej^Gme!Q96xAy8&?LHcyFPo}+&ih8Na`2?&&Onbxa}iCc z4urJg;zEt1E0m&&RHdOdJJOBX=~@2dzXdcYD=fT3N$3--D04k)1X2$&GQ03&(^Jq z?0TE8hXk0r0PrD%tTW{gJWg)_TZlxNqnhVoLP0lP?g=Nbu>)}Z73a5 zJ68nkpLu}sUvl^T9s;l*Jqty7VLi~6_zaJaWn9NCd#G~{h_Qm77z(IMQnVvI!UV@q zA3KM$;cOE+R+-RJZY6yq3>ViT13_0Jxe8Qwa?6dJ>nX$Xubx>j02FGWzGOo<4CzA- zi0mnw3rCJBv$iW$J{{k3M>AJA8lYM4!@<2>9sjox=Q9_!|JO#iOfQKD3mhG;>~Ajh zfrFP;rdgf7DfnkBbq3F>gZYWGb8EjJeMR5kHpf|@pdg$NxY~^zCoirfk_JsLXs*DR zjhziTdKLPEn)Be+>6vbsLD5>km0CA;+15j)9i%wf0Ct%Ok;r2dBY)#SuW~i=VR`va zH@JS5s^rrE2?|2SO+*zF<*#UDjd2+$#eYozEvC}Sy8WiqRU#&Z*bvm76pqmk$TLC_ z0V2!g;HFPqh0`4=X1GY7$4cv!T{52V>oSL*4MOvdal0Qz8+N9G+6h8U`r>z!mHPo_ zmh;|d!AA-0Aw4cH7Y|n!o8!)5d&GbyZRUY7SvvHPgj5q(bNUpe+t8^u5kAR<838<3 zHlRW_YMfDAJpv zeV+Ev-K5;j-p_2Q$59A=$}>hq^)31w*!_3PLeD5LE8o@ZfTd5&L(V}Zz`b&A zAI)uWVWQ*q$~R`)Qv$vO0zD3_Z-?pTiSbptbp1^6RqiDHX+AVKPi58oMCgijaSheh zq)HBZhW%uyC*o~;;waPo#kk* zun|OaT)4I4qxSP7TMiroN@DAF}vQ`>^%ktV;t*e>j*=)+HI4 zFGhbY`YA>-8Ez+nz_}SLBP{P16=6J){ z&=%eZra4u&_-pxKSt_q*(TtR8s%4?5Nl+P{?u|AZjs!%zydEQhUQAw)&AOks8Fl5g zvWLLETwODBzn<;f`J**Ag4^Gbnbe7VnN<+mfp0ZxGCVRm^Q& zRh;Px0hLEB&3hV+mX`a^8z(56BBGb~6F~yOuIj(sUC19dn(fIFlJ~n;n4d7D`*F*W z(ddS_4(PZ;>Bg9x$4gd--wh z`<&$ah``1T{RkXqBa@CFT#paPPtFWQymlKq-?(U0%HaWynxyRY&9PuYy1d|Q0t-#p zl)DozzITqK-be`p_dQ+R^yYfo|PBpnQ%Hozvi2=5nGqD;l0+UYpJv%t!fx zpvtLQ$+kRmv-U#KHqkiVNQ*77hY#|E!D?$cJ0?0pv}G^yg3*R#z!jNBBre2s?dw?& zyK?$`X`E)Z{`CJ;oTe9_)|)Qz{?9-!e%dD1xTR=6vS5uwk*a-Slk`3{teIgXUnmc` zoEms<3TSEDk00bsPS^o5^Xib|?x)G!hc(vPziS?U4H#~=QSlfiy?6@M>GqbD+$tBq=A9B1847=8W0lMA&%_C_pA&(7$@-#80R0( zdjwbqo1rLSqm`9@K4mKOc2@T_W&gYh9-5&{l``YGh zqR%{jOHN9BuyIP&1$@H*rew%31H5g0DQvrBU%K2qS z6SE}pM#LQ*tjLUkFTIJbp~HGO-J3Bd{xZIlb3tx0RpjAf%g%qUz;|)#`Xdo+3pO-{ z2Pj`6AZ0`b9a#MaW)Q7~f$9}0Zz7mrBM9_DZHE@cI8$B3J8|2dY!nVE7o^VlDo=L+ zUDJ$?)pOnx;IVsf>XTIOSl8b7Bys1oo#n?b)1aulVzS-#e&hEvIihC)pG#c0SHNIS zWNztwVc}&OW%y6pUO@}zSXG+x<->U+$K{;2g2(`dbvFFr9q<_Z!fZ2x?~$DDe6Z~) zi@=fz5g0LG^e;Y&Sg|TBsAD-@2B!IU#;27PxlmycjbUzpm_LGy11BY>ZCnr8LaHId zIN^!SI9@XfFf1nrDT4`O&Ur^PiSfrc6bV=bE+utqqKDYMM3@IZyaS&Lv$~vN>Us^k z&)4c$N2-5oL>6I%EIwN&Qz0EWGxW{71%V-Nd9;nE@xXPe>x@5+3+sLDS+inchGxae5mT6zCN_pwcO>Y?=(bcs! z&>4+8?+OwaJ`g;-0L{&@Kj{2LIZg7~C>^*L1`sKzd`snLYWd)dfff6T%^@CFJdXPs27w$> zKKMJ*fSBO}mtF>y6l%|M9TgHMi&I_-mnPWlAxi||?8A!&S+|cb75v`Ow-BjZA7UIF zHLq8^pT>Iks(&(xH7-;I9lf*0c)s$C!EvAcm%wXV37&lI)J56q#?p1uuavy6r3=s3 z2<-84?tR^}y^&}$Y_b2!dtE&DxZ4s`bIZ-*R2@h~5C1v**T(b7Lh`T8tl)66; zsTwRu6Q9-^A3cyqmR9lsZwt=RANCYZxUShSsh^3z&5HR9*XO2Ytz%_N_51cwntJ-- z4AjG%MhzO4aP7oVYyl-cTicdvP-Oko0QV(&uK^a`W4h*&HIGJV(!nRE@1Q+$KISW> zdEp7ottCkM-xXi7$CGzxRJ66LTa{ayjyQD8YD+)@AiO6^lp#V>%dv8d(+rM@9}gIR zILi)c(Pv_1q&jQ#pNCf7-Eh0Yz7H!k$Fq z8v%vT`Ajyv5xrhYsFGirv7HpZ;+20RqNk5&iAf7>33b6kVr1b}ByYTsu3=_E>#|b$ zDv?zmTAj>|{plY+0BJej4|kIvJL!&{L>juWWEbxx z9*=BF$^_8MnF1>#M$^**%#|&dAs~;mGEX*=e*mBu^L6sAFL*yvml;c$32=>~@j$X5 zGM#7ug8UIC*oCO}}HTGXz04vi{H(Tsw1^SH>eJZ1P%Rbd3RFJ;d)s;IOz z!mq}LH@S0l%SNx`lkd#*?oP62;ehhiO{F_SSws%*BHX8+JvmT4GTtPu3#czPb~T1E zF)*I}BxPZ-VM1As?+-1pN^4`nCh!XFa|1P9e-Q7rk?UWr?bJi+ak-EjM_giwc&q8P z(?3@~`qix5_r6yVw5KdNUbF>z4YFu#0Y zuFNYKVNLuFx-PwObh5R`q``RtWtx%JFK~U}h3pnN2GiuNn@2&xY6IAVU&EzfSt8&>3>4sZF`b zX+*qznX9T360El+zVb?=)@dfc2j8Ko3mvv)9_ZJTNS1Nv;1#2tIDsjkQkD7Oxv4?tzqZ!hK=&|`P=Cz-=(Bk~0q7VtaK@-eEdmcf)XcN!sXc$l7U zbd!TD1|jC3F6PI~>Vq2mi1gAu;W9!k5aFHH{2mK)`e@>==1$q-;3v5+N!uw-vN_&J z*46xBnd{XpcF3Nma{7D@lMJN>bBXl>sm9WiLiL;(66xYWh+ikIq;rWHa*A(AALqTXpjY&}3U!Vrn8Sp3NA&8osmpN1ZIv3jm? zQyq+vX`5fP>KZF_(^10P0*9vtzi{(N=%UbS=bF|BFt(MSi26<2T&wh!8RpC1yJ**NqtZK-ue_R`mBo<3Dh&oR|iP8CYkq&p`tP*715J+q4(f;)+^ z;qgH6+N?j`*S<#c8rg@*LOBSgV<{N$R=v@_JAB6TL~3CoA+|33%$PI03B};OXG~Ua zOWWj8TVK+fnrNH0xiZs#-OILA{-=Udk(B)b34cd%0RV@jLVGlQ2qB*S8*X;h(Zn`A zmXGyK=W=>xsyp-Ct{sV#AQ1!P>@^@-(b0mBHsg8f*9zoICq<4b&ok9D+mi3C>)vbX zKC7DB&o02UCZ}msxh=11f50>=gb_P=^Kca$`YXRNFew^MfM`Vpkq?@(-hG_Qz0LF}~}}qsMFb_lIU`I{qI$ ztmcVtWXD1Hl`>0(nUiUKKgcf`Gb=|fYCbPY$$jV@oBa$yHvlB7zt7-YW@s9#Kl~%O z$X=!Lsm$CgyXFyN?Fu@3LN~3a`LQ-WyOF6QvZ~Neocq`VVb&(v^NY|ni{RE4)HqV= z)r$-rC6%tD7(>JgQNd=CIqOp)0%35h+|lltKD`zHTI}vmtV)f}Rra0`=xf${Ep($- zF|+#I$j|S}-^snpceXHItY9RH42f(M7cE!ijLT)DH|Mg=AaS)_bc-BkzWQNZcjR4) z#`Bk%2QG{|zqbOwiPNK#g}}*=&|5gyL@nUfS@zeiNC|^W2%{Ib?!KY+Yj_hSJyD*e z-<;=F+5gHkH#w(`Uv$9+l8WX%$3KlTlq7O=$BX~$f2jq5THbpNEy4a*jae;< zt&-y^?AvZwH-Yu&Y$Rp);6zBJkW=IIsvQra*&DN(_fDeP?I?aE-3o=B=XTHJW2v6- zJPktvq6}^l zT(ZW_80g{UaOKFN;MBe1?wP6z)ptv$D_ZXAchkP`8=n3$c7mlHrl!xi?>39}h%0m&xEn+Qq;XD5EhC@U0B{N__y(14D3?1^Zh%Rra^&oxD=sjS z0yI)LNV>C-`rd!a5`C0j-O53I_hB{CXWh|6C)9`-<;cO_&Sf)x|B1PCVM$H1(&lyq z3f{*YHdRTa^Dz@ocE>u!WS5XwK?2ZsgQ)@h0L|65!-i|3o!ftZQT>V{BllR(lUEsD z3Iw&#X;GWQyE%{I#uJ_pTi58nNdMIvJR*|xi3GwwWAkF6r8tn6o$;gv;&9#gj2l+) zAN5V_%Co9JWnHs0&*epoIBYvH;v!n%NL2I}DYHV%6!i49h6-KMNdXQB3hpx`g*Ww`s+m)- zK8#+C3p|%PoDh06j-N`qUqa5!8*KE5sl~6#*$IYeudhNs4D2rYcXZ$v4Aa~ zp`&nt{_H#(c>CFIo*%{Aw=LYfzi@LsTwK_%UMTHfOyx&uc)k4dwn}J_QDXlaFd|L4 zp8#{{d$^38sbY*^m7+31z)Zf`-KKNNGhVpU$RABkk*3Sf>bva8lxp%rCC*K;V!!+9nH+mT-LwN;ywmtM8QUCQgDHD zMgKwg2r!Am7TKA1Bu7QcaCD;Q=Wnh~k7{8Qs+^{JRnCd|-ABP@qDRFXQ|AWXwI#`v z{J6FQ*Zy~fde^$rQ_eEsH3q*^Z4o@Aa~!6+`zohQ{gI#m&q#la@c zot{S!6};6u3JYeQ=MrePz{wkj7ZSj}w|H5wa@QWcaQF=b$ zK+f~iNkUn5$^&tK%@@2Q(am_9&+$gRKfryKPwnC%N%MKuIa}MZQdEAz)W<39dwE`j za?#-0ls?DJ#BnXhh5nUNLtQL92(x`R5b{vicg?b&u5|4nPgcKKfQVD0BSdl{1hZ*5 zlyrHj$7^~4)&iyyIuK< z(yY;-n}16ej%H|h$=Q&}L$3ry-4P6YDJrf}hwSpzW)Gifk>-)~$R<5pJwo_b%}Xqp zKt3pp&1}CWnw`slY>eN{&c5&wTaIr(l#)^X#@NqWD&)?eDqB1ZrnHV)?_#B!$^G|R z)eR5@VDYjGaywZ{yTN@Hs-&e0ISk%XoQOFPtdmt zJFMhCe93gtV^-eeAB!>2=(Bh=*@PgXJXIJPEy8Kh;_C%e1a~z zy|c&5=2c8Ux(&_;qR~{GX)Z5qkStxuBT!dyR*rxeIJ`F&mjH{Brkv|bvc%fNmRTnq zJil3=yr2Uu@}~PzV`%`s<$eABD24z_#*$kI0Z+Q9Bq2p#5iF*=^GuyFXMOgxc-m_1 z3~J!lSGr6ghqvk)udZ88>!%F|#&?i*uGh32GPS}RX^O6wv(?Y+V7|udP3vd$rOiv9 zgrb<<{k|wV{?DFq2i2+&&6yjmt+Ay>I*Bh;tf@LeEJ zN%x*`BlGvj*{WX?tV~xcF?5uY#ASC2me(e>{p!>w?2vOmbTpPFDV?J^dFZ zzqP!N#7i|Fo3p;TLf19L6uiYVk>6JMfM)LFww$Zj zJJlO*y3q23+D0Y0_P zAC0BP_%oNn9L&gpLj32S(?3J+?#>MjPg6DA&xNV4&2b91w`JSp`MsxH2)Glx4{`#* zeaY%c8QOUH$ti?Sd9?hT+&`~6S17P$-CBpP-xM*vA*tnL@1(Vb-goTnM>A(4!SnT5}y?UV4+kD zm~X1PVutrNt~0c=?KU>o5Ss*h!KP_3KopN~JznYYQQ}$%L;!Cus=Cg{c~eI7HM6c8 z?a|3jzHzqHS?6}t_82|+4owh~+lpZ-FIj5O9~9C3`XL?%X|!rFQ10J&WxZ4}Dv6Vt z`17}0Z)}&=2g$Fc!-^Mo!t0F>(^&97{u^Z49dukYAk7n{ickNr=hWb!l8yUX_L??? zqrPHk(rYi}c&*XAq3#?gsE$MnebbVem{pz2>5~heDun(S(PxR2FjKxBHIwjiQaZ79 zb3*UkajETtl#a+QRFe<5W;J_w83>jFj;B9nc8Xi z{lFKL5`d!~UB;=J_5e1G2UfY56IX;H&TFLssPo1L>xGnuC|clJ0uCCz{W#(17FF-ukFStPpcUjj__c0{$nln7y z0;PLsVr#!^fUmX{VT~~7KOfy=|Enl?woWz1pUCSn-SvG22Myi zZ7$!9@P)u~cHKTS0IZh8N#;(tITXN>UI1{;2_j7Tuy*mV?rV>x3?lnBRGmNkxng&P zB%bOl< zXuZ{uO!9sxbD)srR2B<8FBHsPCBunNM`LC%))1Gh?Ult^G6V*OvF+LO3oPw!l6PV% zP?`abjRS@Opv_BcWp?)#mI16Wdz-OZhBLS%rsP8b z2W6$hTmkMx3ej|QCR1Ph3)&eT-@+I8&x>iuXSo06YA}@7hTP)4DING_xay%IKEE$N zxyE?Up|&HE(fAS?UH4NKdMMT=Sm@~Wq+L5tadU3#p+S1sfTc_E=eSQ|eG~bI-3{7)&I}*#JChO4Pf@zz*9iIxpB(Py?=T6BE_&y}K}6O+H*($+X|OHY%$Mn&%VR2R8W(@% zN?J^MXBe+>lI=`CI$~?{2m152_jxxO*W%5u0JaA;dS9-^%O)3$OM2`M((xvV@XD}H z`)qH7PlM(swgl1#jSW{@Jo8KlvsvLYUO=&80<)z%tI=yES8lO?qMFs6@Omb=BBMTh}DKF7oG$83U^nxa$LA`7i*e1$$;s>BI3eY|2Hc z`ZWIXT6s`(L?3c2jV1Uf3|W{M0c3i;sRqsb;!a?=>AKFc^-5uRR{542pb?D_eo5S? zA6ry{CY+8kUi?=g#b(p-e=y82C_g8+=5CW?jF0#))({1PukObmw4E4f3x-=dJY8@4 z34^>~?Ip29u(J-NKd4LtGk}L(?y!y#k6y6>iUVZz`|8WOUUdzV0-v!~pjGnee}gmd z6`DuE9Od0FJEDZpvGn+h!1IHWGSM3Yy^rp<}Y81ZJl$L~8mnW8|F+ zH79~9jg5v8DHFD{Cy+dv#dq<}8iT^KqK7(L(XMu~Lv1Jg(!-@f-kKUE)ijSwGUa3c z42vY`T&6eewfZ3SYSIK{i3zpO#fnpiKDnk|VRhWyne-~6`j(W6$xmY_Vcd_0is>=& z8zBGm=%qGk{p{(q3iLGTHup6ZHnXo?LHn9(`k60sS%l4+(Q~rnRgA(7)3h2THgdLx zFPKhBvTkOxV={+a6hNbJ@7d$}Ik>j7U;Pse!g^3MUb=QBsl8(6uKNcwg z72VqmP_%^+O-mLU@4N#QiM{_pQwU<5vH#bo=pdr~l#ZjW&&j@~m+*Q!vE$+h_?14SVNnd>9g0gx} ziPpob;k954_n-xdqCUX>ZbzPUh(n_l%*yMRmHqdv_qW-R;#!`71kZzV2C? zDu88*ySnH9)!(7`grUQLz#EkKPEAool)(HpMYk@ud&GaSal*ms$ zhUYPb2@k3UukrN4CHq>83S(uFjko4lG4}D(Abz@=+~)(+ZB#p~70ROU!CIT3TquU1 z0T?$C3Sv}|Q?GzV=$m+~cZ231tFXR}_j+6Tu6%6yYgG}i zZljqs$0l_j4~z)f-@IhzIxgdO-w)G?q1IeX)MwwDqRDz$Yh}sy>Y<%8C6$NFFSdY| z0!hY^BMw8s$GsG>d$zEC>KG$6qVKQLzPuh3kgo|+9zV9|2s`!6SH><8o&{FzdvK#3 z2(6D+bcHBGaUiB^)|4R!5$^AB1AVH;_~yGQ-hLGD{w0xuuJA=jBpX8N0;L5|DLK+v z)hUq@<{NJqWgS1j=!S0DN+ng?6tt1M6R%=m38X}XkA=A&;k27N=Sp(ajCRc`K$;Sj zt7vWeSI0WECUJkF5-hhfWG6rO)wFV;vIA9xNx6UMUn-y5`up%}AC0ggXWm7WL^(TSwY} zU<}oDL$#FTQ%^$6TRd?_bxtqWan6}ZiI^7PS~E8Y8wXmD@Yq}99nV%6T$2dX|vpEbRdCx zREWTvc>#Ji(ZiAF_0&Ed#E+F0pDN{3HIMhGA9a7sKhuT;2w8O50A_I@Nffk*yA|>Q zSHXlE)?&fV<=W9a_CQVii!(D0MPbj(Q%pZ%v|}8pT>(PW*JaOMu%CD0K4w6l>S~v1 z5B;VO7@)DS4kvx%5Kw{iz_%v(Wl@Tl#_JG%#`i$KCcx+_r?EYT#ba*i@h7k*o)S_q z26y+t8|UFO+sUPetJ0n%zcrt)YQDQf!KRS@?`9Hxcl}2KxBAwItw={N5AxN?r^Iw{ zz~#LHpsQ*5d`i^+RDZYK6{yr?W7VYNNl<$S!uFc+->D zeBdf7P&{FBE3WMKVoEk#`bHD)@pcQAl9X?idLf|MGOJtPE~W`p!$V3Rf~~I#a4-r9 z^RDNU!-_;}z~WjHy~-Y?_aV6cERC>0`q$$fO(lfn-Jm|7?G}?(~NlMM&GpboZ-z3+t4LD^dT>B{|fMUx9*7}*ERjiDWs1Rs*XN~zyN662>$n3Rw^fwWwb6c%Jcbo8t0b^gf0zDT*RQt?>}$o z0@8D6z@17_fe)4d5soYb6k4qJ;Ft~^rp~zdIkUC8GOLFEd+6=DC*9M?%PPvUl!Wlv z)v=eG@0;xepQAZ_*RS(#kbVMl<}{DbwI=RcZk;sA#G#JJLtnK>zGbTSKtV(~ISfpP z738>RmaA;dpaPGZ?cE1me=IgX`c<#B)s?|cMECouP@mt`IyYCYT`*wD)d1$crrn8{ zK0xf>ZF{2p{k`+#TxSsHX>l0a;8!u?P4yw-{B zVRom62U&OmLVbk>_{ zNoF3|IE22|+BE5y`b+#}5DHkjiLd@8PwJX2II^34JfbT~7yuKgfUjn+C4*my?r>OI zOQ^3T?8K4Ip-&{aQ^WSxRnc>2xY|`=pa1enUT+IDs~(eWbUuzEJjJPs>EV+GrPffM zixiNuMJIT+&_5e>M&%rnm2I-rk=NsO(dWOIEoACMdG+>;--~KEz;`WLH9#$OR7q=Q z^hvJjcWLAy*e6Fxl!(-#S_dqQg0qm#`TMU+l3Pg{;UjCl&()oYXkH>!jD@Z|kPR(V ze;jLPPrkbWHqAd6HowJqPYepSp?U`Z!dk&8S!IKu%k7nL-f(mEdF zD8qy&O6M%)$at#Y0{*FIS5;o269@JMSj~-tH%9u45d7slp(o^6>3<3!?e2IfX~-Ed zbs0<(T)et)gv4hG*I(}K=_rfMntG-t^x+clB&w}P{>vBD%70ueib&0%>SRjXQP`Qp z|9uJq3$^=2C&wSDAINsW=4a2+DbbYV;0rMFk}CtXCRSU6KyEB1HZ5TwEt*&(`ge)@ zHX&wp)K3<@c(t{TZ+ai?P@z!WhZPma)&$m;*^CURZ|P5DJxZD2K|PJcKkl0 z%ElxmdR`BpZJ8PXT=$|QTwpi9rm`~zd2$5_W=|pw^XaB6NDAHC6U%7>-WHx+2&o5h zRt1hu3>W;l(B_biR5S~rL87kY@7+rklY@ZiImrUrZ3OO^ga{H*J=}dBH<#Eo-F*fu_Uu<)z`&%+( zXWlP=1~I+eR5!2ZZ{S&fcfq|`{X@xdzq|5OPpmAU_a|o6e4z@ChF^ed#cYku0)e)H zy}lhZYCdhqq}c@OiYw}_3h~o{jUPrOeXqD3o$UQEHk*m(>HCZ8WzADdK*tf;eQVXe zBdOQqx;@}F^1VCON)PTY-VK6_x6Ye**OV}XkfX2Rt~euJ(ErENy9Y#B=6&2~np(8v z5v`WV6P{31P%4qpl#mBmgz#)mW(wkg$XuO7Zp+pKY?88q!pa~jA%>)&kfF0hMv4ds zo)DQ0IVcF^j4;mOzW4oH)BC=EJkM&v%ze17-}O6u4;j>6(*_wXH^1z#M~usM@`^LJ z55;N+L?=$!a$0$kpk_MzeWuqJ#RHW{3;oM*VDov4^tWDgs1;a z*DR;gyg%tseL9~Ez)02go&hni20ASMy4qf6TL*F?jYy4tM^k`{Zp$IArUcO?WI!K^ z>DR28JAp3au(da#dZM46)4-OUm9vRP3B zgJYWLA!%bP(Crhe)Yo;Y<+9Wf>2^ZjcCk*nFWdll(~)n8WfWHG+M(a9TsXFAlUuMr zJ(d=0%r**HChObM4Q9#sbJXL#0~ilrSE4eO%E3c)Kl};E&Dn_^Djd&KYrj%j8+v$l z=%0lMl#Nq)jI)|4i}JOA=cd;nXAn-&{dc6i}W0aHn zR?uJ^fY>+L$BFjogL({N;h~Q97R&(qdGX&;woMu#Lrg+tIt=@?v=k#tWq#1$LMr!UJ?6(3}Ysrr5)gPBfX$yjjG@?nmb>a~lUC zjffI{<~KxvDWpWKF&-z(Rz(n8?FlqM{GvP7&vJ2ZF)wl?F|xmFk`~n)G0<-+_IA>W zMo1#V_Ass5_;ltkVF7@`IO@n>j>c$RYln+uX5pw3vtGZ;97CX-DU6iSSoP3R_fhfP zSvJR~L;ndR<}_!3Ir&buh@-EZr~GK!bCjP(J9P@6T$>5`I6=I@p<Sot#pVX&oM&p>|H7VTj@~aKIOo+XdY=SFMiPnQsQxJ&lG8RCb~%zORcceFK?Bn z<-QPx;k7>;SS4Cp;B!ye)P?b%zb38iJt^1JkeFcKmYl zif;Vd>f7b7^qD|ODT1b( z`dQ-mTFewa<*^Jy_eO21J+Vjr%hG^*N;wJGqa%@h&Z?|;X~u$gxuv}|CdrmfO0Z?j zA(k%bgr@s8t76V|U{N-`b#)(WZA$Q-8vrpArFybE_Rj1UdV!*Mc-JzGM#wz@!GrL+ zc?UZ6QUR!<^WtJs_gLVisAtG)esLY(FeW>5ek~So=}Yu&|6~J9|24WGLeWTM%JXxG zWMEnVJmVYI=jRkWaQ z{EgRR1F%mOuM|xl&1J%7G9DY)=nRW{aVQJe3!U&hyEPep5E;Moy9LzyJ+$z72RX zHqLY-#X$#n>6>rLS@K<`kG}i@UCe;!!zW?OCF^ghn{3yRCbAez5MJd9!FO5SvS8_; z$>y_2c0^m&0Jj8NO`xJ1;0p~WfaXZSWGTl%_);3iN$sfdqRjr+pXdhsJ#%Pm+jIKd z^+d)Ik(aCdbhaO2@5SoGOzGEbV{jwoi5fAIubn(OQT@8>KL)@$40|B0kIIA>D2Un~ zF15aQ^-a1%KGxR#!x+$tyzAorxAYIM3EoY=zj!(1EL-(ElnZ;~s+`qN+iiD`5p!Na zZOU&8YHqB_=q||6sZ(tC1Q{=_g<}bPqG(H&%HIRL303y5K@=sn!n)d)H-4wH1%)9n z!bUEn#3hM88n3xvLvkBcG0+AH(sKFZDGPyYS~XY#jNWXG5FO64pNgm0(L(@psmiM$VNr|40vjs5Bxq;f1 zJM;qlP_+;{2On$uyW`aCRS!rosQ6=p$0pGi8TD-3`Dg}x59sLwd!CQ%zqY5=upvbi ziL%s(^tx!5d{=@1y^y&?OqOM{d{!^RMR6QH ztKGYnHnh$EQZXGS5IE??cE<=raezGi)QH^zNIP5D%4K=OR}DDicrYhJniU%}N&RX* zLUqaXArKQ=ZRHEV8GSjGcpUo6yE6~haRvg|5befU1J>5BgGJt@e^w$AxBR7bJ90us z)T7-h2e5rn%q{TJ8rFG{rgrjj{lf)5N}PWibjF`69Ql!Q@eYsbmXv2gN>#p|GFclI z)FQe!mB}>2--hb0)n7KMZ}F=`q}EAlElk6V-mOz`8wq-ElJ6;X!zze9!0#5VT_w~) z-^BE*)OsXm-l~UYrZ}QQw_FZ4pi0(tJ_Cp@lV~;}=p=#S^H4uC zz{~ue?KK6rGwpQ!WdH$2{BaOcOKPrLF;ujjd?78Y?Y;gjRHXJ%ITDewcxPevcy=>| z=-rtbCn4QZFLfP2dt^`hi=F}ue-tZ=0`C#UyBjt|6pFHE`y4Jgs#DB^`ZK*}11VXP zCP_rK10P{^H^qN5s3i5}jM}+p=X6(0A|6q9R0z3HW^{~Z>nb(7rl z+E~V*!fo-PKC+zA)1^Qvz0_5FdCj=|qTQ@2Y|QAQ?wXaKKhS?LXAVr6&ufx&qk_6$ z7i3aHa1czOpWegyEzq_?hcxA=3yFvah|7C)bMyx0 z?|p-RnflbhVn1V)ZeM|$opWE&;%ga|2g@fTujY<%yg0?0|0U2v%MQdlV~b4WGuYe#Lm2kLgM*T8-N$Nb_!;m zwbd!fFC-<=N0tt;ddB9g^u0H&pWWbd6_ovXoe%9`t;V+KwIBQWg-a0vxQ>#Un(DHf zTvR^p%fU`)`G9Z7(d}EXiqIk6MRKpIkFqyIY4*S_fW9YwvJaIdBxq>zPY#0<^%H9x zJyqFCi+e+D0|zyW_}J-1pIC0I)=q!QF7(L4$S}SxsPS*)K3QF()aw}jY#tONJ*vg6 zZA3H@{)A<@d@1bnO&c5bV=43Xiyy}=PEryv@x7;S+0&5|G6R6ivu&s!Y!@T+V>UlO zu*CHiW6k#^G1~PY&P#b^#gtou_;I#xFR_l^_xA34#*b|h?5p!JbMn5m8*Qx^k8o(c zoFDW$oZJiD7GCL0Yvw&0BL}WP3FAZ**Eh>(-lcVYo1p%(m!eqnI)cxq3!E`9Jj5s78Os}382XU5i&ljF-wNJ1bLPa#5H{hYr&?WW zaVx`td#?8Fm2NfjfUj4K)i)Iz+N2$D&9|v?4A$BkY)IfBYIb{%`4v4>bADy8V0OLuKVh zbZRe{NK=K;%kOXN1SuWVP%sFu^E`nZR7uKhJMXN!-MX0J7h%;VMjbGZA9 zH5WdqlgcjXt%k0F06fQ+sG;tzU$lzyNkAhZgoN;L<}!93V?TF#%;XQ4QfRtrqnxkR z-4k<0oC&mswoQJVDJuZ7I|W>yGEZcxFyLMTC9%5Q0Z#Lk7~x;un&g9jLX*_^+VJ#; zx?TiS!70Umn@7)%m9LwBNjSVjbfaI^RKAb%_E(if+R!Ts6vuAzztO0Jm_Y*B`eXOY|R|`cv-Rzm7 zKIX7~c6v~c3u=%ED^9}eisy~r=bTr9oEIsJg&8Z{w^q$w`b`h``!BFBz%UW9PwYt7 zOx@`+qF&XdEEN1|p<%RNjoR?k3F-p$jbK!DM!o;aFNVi`NJ-L#fKY-QU?sajpM&7C z-0?BhOR=N?=(4kB_*be);Ic#lUxz$N=W0rOeoD!TjO;&%rYRN-Isyxrtw3**mJ>7= zaT|Zx*+BYoM$?8+IHZIE@@W=I9C|1}zb=j8kzAs}DOn`lRBxg8EW*tj{4QUz6bxzV z!FBqUe>ijx&PVq2(>=!J01|lEmWLGtB%!Rn`}KXr202%Ks44v4;EqC?f&_=h5^5pe z#ns5VCT#B}MoScg17y=yGvSuQg zfZ_40aUCI+RnvNo*yB|;xOj+oj#=u9r`D#S_R0a<-e>l5d8;+Rp3g_$8uPr|70~42 zen0FK2(9!Q{bO&ZowSxXd4eMkH!NvKU;ptxoC5k5I{bab@2uw6XNi;1bPX)kpQ2`^ z786ME8}G%5w}gw%s=}!im*1A})=KPj{S4k?kH*9Yx&i?JD0_+VH0zF&>x|ce z9t8b%PWbcg+iWbt){{C#sq8JyU_H;X1sn;RANxpOpx$CLfYaSMk|~3yP?cE`6(URu zb>%4H1o-6Dj%LAx9#Ri zmk;3$S+;_&vptFx!q$va4$Le};k@pu89L*@^-1c74_Wa>gZ!CSC|X?_y|5Eq*i&G} zfMwTT#RZCkr$%qOfpW|hrSLcYy#|2Q+sU3I8j$05$d#Tk?y2>q8B)N%bf{}WeNJF} zMN07dtf&CxqQ)T9H7pxc~qblrLi@r?~KF}XT_FsNgt^u0O zUwosM>Ti=f0KqnQqfL2%ODrkhKQ9XuH4k{6?$7Eq-TSY-c8o}uOSF3%SyXNKpnz>cfM;S;qVi+-QRz=*mUQnP??rblwar~gTm7_Ge*nRR zfZ2)XMw0sF8Yk-8&#R2rR+7X z*x}{!Y4P{Xi?h;%!BX`S^^TSWz1JNRe46ETK^|y6aX9H0a^USZJW(R7seJ?Mas~Y^ z^97-g7H08LeXGpQc)V{3Y01I=B8&{Z>1K#>`ibdqv0Re$2?R>I7pFi#D|zxkm!Xc%5JY~>R0yE`q5os zWAF--!-oxu?X+%7#!HDU1oIeY;|i!^|C-o!TW=i+LyHaX0l+yRWz^-Z9b&77OK0Mj z(}YAh3)gPx#L$O@UjqI4sj(sq>V-IP$WWCARB`qm7tk8|__dids#Drk7n8~GFg9Mm zOXXpsvNXnA9bWj&{gN#c|3mQgn=1}Nnok@dt;Kl{;`s4^Q1pRbq>IAKy zKYSejMVpV{qj&`vkpA)4eZ1;&1)VXPG7T&&;&noOFGbbC!TCqSSbY^RfiQ8$>f4g& zC(-@PG;)M_daAe?gd~mB~l+rCi zBS+kFT54RVycHW4AAtr+K0iu**_f+THGx;q$Xjak;_+i@Hwy8u<`p3uZHAF3d~rSp z_{iI@V1n!xA{x+Dzq8HK>v=3KiJgyzZ^D9a>>0l*4}B5w?-jHXIsNg;#bmxdqG)L-O;1E>=|K0{QLcEXb~K%RDDGH~FD4Pg8i^p@UfcwJKPKND`+Kk~1Pn)ZoYx3m~nfXbQk zpnb5+0lnRvgPK+o<^)os=k#4M(G;%Kd`gbSJxS48+%~L?w#K{tC&*iE{8^eV_IS-F zKpi}%Yq|#Ss_T0U!;ge*R0Dq{Af#Emm~>!jcZy+Hqh%2dN_vUm8Z^g5CC327+9Xbz zp38reZXOpvoX2@qD~35hZ{D}O51_-<3X4c#9~l~oD*;@jmNn6 zf*#9gL@xFV=&)z6lDh)Et4lmq?)c>#d(gYb85!^5L^S4sHouximJz@oc|^<-Oj5N5HEn3Oe5d|i1FNpt^7iqo zrS_7B1jjVJe!f_X$)rUUc<+$5e!$}gu&SC|282(Ikg7}9!nKTW>RqO5(0BsyG?ozO zAK&02tgEvas7CEqb%CF8mD!&QXZ8NK9|>Wnw51RHL)79^%&z^lD<$E^f|iF=+UWQ` z66d|r4l!-nE;50hD_jb%G{$w0lbQ;Zs%(sGMXuy~d4r~PZ7P%+DBQ{gdSBa0lna@A zl*{U-OJG;Jx)WaCb}|M0@!3q3^|{=l6Py4ShCxk6J3YtnKZ7WaK;%*@H-6^SFBe^h z&IzRLFP#KwH-5$!&6e<)I|KFA(oHn~rTZ8Uc;~M!OjA+c#GO7g<~qp87~gX%Lil#n zD=vINfb@G{SJgFM2*WT z{HnBZMO?>{^^-^MemU{`fJSW?Y6h{7J{0RzTmKok@wuy>B#j1;Xd7%1%eAZJ3X3r( z1Q7XU&k1%*xRZ3E-$$%wdI|04;p7ZgMe1N<-jcF2`l%mQAnLVGx`U0~e&$1iFPYPt zxMPn<@6oC@1S||<`a3Z))#aT#^vjR%ELPEadL64c(|xi3u#T?zq&(UsMM-S7XlN5o z)mS@YJQf*RK=w0{@D%;J3n&$$gp!J@pj0vJ+st9P_EYL-Tl&nJ^Os|~C(kDeqmY53 z8ZEtN&ps*qsk=u)*H8|K&Ktl^;N!e_tl%_lk0x(FKs|-HehZcEZ>UJGm?H$Slz5>n zZPG3>6VDzoWsA0~dC&I|!;0wfA#jSlA%N{WDgV!j6$uzw^&nK#8>O-WBa%WS@c|KZ zzVvL1zqcAdMiI@#U0ct3+KnP0X?Y&*nUNct#fU6|BZj9C`Syd3fJPjf|G)p@vFb$X zYG+MRVf+$DO8wUfA3;9z{8L(_as2Q-q}3_=Vy`*5e-+{?Tw}R)oXJw zj%P@rHU$N~4Hbk0AdeUksvPmGRT~)r-G&3l2S4Pe!K2;YIb>+;W6JjAPf<9k{apCm z#~Vrw)+#}?X?Nd4C$s!L0IlH>J;v~f_k&!cD(_JQ4x;rpcqpdZoCg!hTHktAIL!WB*LPGkGM15$$ht>eWh?D zIbFhkQvuuZu-p;s7olZ!Idk{RQoTjRn1|1$JD+so2f`x%7^@q@m9HJ>ta&uuA%}ke z0Eqg|Cp3wzdt>7h6`?7q+@CdIm|nz0$v6?SbHj5pSeJ4&wdrXAJ$3t^(^}ee_NTmt z_unQn*KguA;f?3%-Z0Qc0U0jrV#<)U;FZ<%@EB1qJ^O-&xIH0M ztA6&B+k(d<44Hc6?|{4WKc}=&F;e5QR}av3LhLi@flw5o5j9QFJJ2Pe== zOq~z#FD%K8YtSS2e8lPs%v#uc8^>AnGlQ2W%vdRH5ny7d z1ISB^i>nfQ_ve%$4H^IzS~#pXgsu3zuZXmD+R&Q>7sGhZE)}MIukx{_-Cu!3%A}zwf^S@ScRN`*q@oWe6@y-nz#Fu8Kz^ z%)$=Ckx~m)nCh1jZ(K+d9Eo$NxjE5VjXk{`0m_PP9ML>lDQbqgV2+|MH;r||^TnnU z+LYENjOo#|_Ru_b(+Kn{8N*Tp9?k}O+$`(u7F;~JtWnB|m+GjBZ|@vw%6$r-U^K5H zuKPPKe4_+`0zwdvj@-;4%$Zf7GWbs{;`NG^GjHv{58@ggUe9ip&A86$TJ<%IkosM& zl&V@BC@Q*Q*Oqy0ZkBcOc-V-yB)mNkff3nqvL~~|`bdXT3)u$RRvW$5mKPnvu!0@m znyF1v=xHE_i!=i--sDCCkL zo5V%i&!&FvKI9L}R##&ETDi27<&f*NG)?h4ZhKERago4<&`ADW9JRLv!gBsOZ8zz> zOt`^M4UFV&s(g&Pz_iv4Oe3@oQr1 zXBpboZQuhqyg??bpKTnit7V+1ii{7LzH@XMy1`F-og;j8buC+`-=dIKv14{_AF}GO zMKBW?XlcV|h4>tb!A7k~>o?zf*u<;oCN1tGf*!EIP$g?g?tcpt%0U;C;_W)NA)vd0 zhw<{dHAd017#G_bh_jeRjQW|WDHp!%$E7SmCqF>>W|ID4gJ+jPpC)>%x~HCd6n9lb zJlXy7IkxN^^$ekWgA{^&L67NP9+r4dOJ}Hbyu8`+qNi5{@rWV)%a=ovh>1B#N?LFz zn@qS95xoty&cE3^&t8#_K^uCuG0r17Vv8s zm15#@T!do#Ki>0F4)ng{E3QM3CZ|5Jdhl>A>N9Y4U98gX15v0Iama}VL70szCX;xsbLrsY~a4ZCes z&Uat}?^bK6Z0~qNw0D2l9(rHt-uI-vIe7x}qm}qRu|w%1s@LvbDON)Wz%^mITsCeJ z7y`AR_K8v<5r$zOphIiZ%=)K9_*#U!Vms8vS6)rDY!wjkzO<@WNI8kWnO1=tu6duE zojtSIF_JAn`bIAk^OAvaM0fw-wHe4%dkPjs<1SZnf~JRYEQ>k#*fe?LFEEJFQef-i zE=>c~W@$CS9G~u-8rXw z^LjDcWzNWTR4hxlsz&uwYaxXYYL0GKzwk_IEE}U^(9Lg5CdH~9E}K(gUc{LM&;&CUh$ zVS*z@6(UjHp>OxP?-&~7BCal#78E$esUC3vm8rT`2GdV#KJx5&rVRiXy%99QY6I-C z$e?9Yo7cN^g^A&I&vnJ=(Pu^^D0k5hDe>gYlj}%K3HZHr@NS={&`o420z+Zpx?{!= zT5BjEohHA8R53~|gm>?kaj}$^NY(}51v&A*G)3l!oEQ)AnNrL~TW!(}NXdT(-vU;9 zNCj1;`nJEiW1Rbck_6^IHw738N(;Xa^cSYCq!z{2gC=E}1?TYdrjIyWUyx&j{G!d9 zs$yNM@A5gL;{5eTc!7w0Uv`@Vg8p#ndS7&>E)dB|pTK>c4?W)+zkg`# z;mo2T^jT7b8{PM!c}W5&-H+}9EO$Qpq;2l)gUc&o2I)~M8AZlE{)2ZhK>XhFeu=lr z^5XH-fkMseIC3el&%>QCF$)zwk<-5`QBHf^ckrc=#b0u}LPsRAaVjxl}hYYFm*p(hHtWEeY*7WFf4fR z=RMS|VwbGk;-K{jS#&P0vK*X1uxP$M+iC|~KO}Oa-O%omPs~gW=^A71e!3%TtVAf! z85`LX(VxcVmnENa#;KqokSKoAV0#Pho01+&|OH8 zV+5^umptNS3H<7pQ68XeITN&NL^#~pSE@W|Q_JVs0OxVO_0u3kH{)u?%L~ZLzsVVQ zxuOaFWtwZ6W1#02-KB(wX$QZV+7Ov3_WC7s9tQ46zu^h7Lxbp0^)h!`K-%a_KQYw1 zWIC1+@*&E3tTW-2Q0~)FT#N2}ikW5Gs^8M*s4Z{$uJpx-n&Z0XU{cOs=d0`DJzq+p zQG9gvDG#q9Ve}QKt zNSrGCm=Zm&?LsyoIEG)HG$N&(gb=94_!nyXyv5Cm8N?|qwAuUcu4;EJfCA#vK17L- zr|fFpkhyziXwC73vWo^PI-wao1$i^m zrCv~!{T2rP#b90EykM=HRy3#E*2G5}=J;51_P?%n*VL`}z`qGXmWTF^Yx^N!quipyIvtM5tZkx+9dwJjLBsN=xkdc9kGda%4Q6Sf(2grqpV}RwVc9gsv8^X)a zcjo_D1!V-C!&RJENwE@WZJKR+tnbFSIw9_xIHM=#eHFm6fWf$q((Iaz62JJK=cXqayXK45Q}WB$rXs-{|vRLEdthQV3t53 zv0j&pvMmu#XL)zx46_oxGTQ!hml>NE3+vkmm6qek1gCY>m>X0q&$c*u-uH4v$?Q|; z(jgXZ!dEXT7o#7@8XX1jq37@ei4q9D0Rh%lvZ?P>gR`PX;}M7 zjvje|6FQ0a(5XSCm~Fv>b3P~KPz4fu$mVd-qK4&mm#J$kf9K}lUM0-8sfkH?`?)=U zMhV5nJF?r-j}f5Ga`Y57pgKiy+V(L|rdo*bm<_Ei0;WH3L60e_r=2soHFZ;>V6jyH zo~-d}7<-aC5b~j;ul(Y-xW9BpmKPy@cJIH1@qwgg8keI@3wj^1BL%`BT1b8--x@Np z`QpKbUmfQ{%dld-`kGJ~F4}|OA)~r>Rd*Rm#q?QJtEqe2oA%dgMD!tTgv)I2u} zvhix5&rbWJ>tqr}AxNAgyWIfYm>hCW>E1cy#*O-Qpp5isW03x^t_cnDIcgJiH8yZ) zv-V0t0#?RZ>70mSR(CiX@FNkqP~TaHLOd(9I+_|Sd~{V4aZ*)r0Nfh zg0nEgTe*ha5p_$ZA}>bNH*=_T^8~+^j$7~Uoug^inADPzk5YJh zp8XuWpJ8#86CK~{dwVc30PH$E=stqmQ%hGz+hKG#f-Cn3ICDiPi>nufRc`jYl1n?{?& zV7rg`W@(JgAxPhmvsAx%ecI~|ZydzM_CD=nz5C}>k4E_VZPK0lS1_y+P}%6`$z}V< z7n`usa9d0ocPqfNGqMLc%-_wfsy4bu$#C8FWnD0RL|s5XWj+!Ff5^IPwwa~YBKAul z&pr>7B+wJ2gBkdyZXkJpJ1P&J%K)7=22&O$4==cMieWqGwigGIBRmbV(EvpEqk09N zOx8Vz2>o{+EpVO4of0Y*I%sg;UgXV2txw>3C3RxlfXkX+RZH&gl0JWgY%JM&InUsmDzP zHua=>X#$)W61&`t7k)Ff$DySrJ-^kTam@tjLEsyr^)Uh%B=ILgZn56`efM|lKB1Io z81KT(_qR-5>GJ$}%5`4#W#Y~HGxVW&;^!ciA1SwHE_4d?vEDuNCa$g#K);Dr$*$^WW#-BSy)>KcKK~R$`PNPw)b*Xi$%Jes+l45rW!5PJJKaCO?Adoo4_ZJ?-oY(rM^W3uA4s--j zZmq#=;+Oh`dQqyU!+l76v&2Un2}mRE9AV0}8%9XeLu}0GPNv!3jl6u5Ao4f`v~xU^ zPrM5KD$267500 zeO8Q)P-#_jO^FAbYl2CjVr|=wi&H5Mr4(N3%RU`zMc5jMY<_eonqN$P!wYH>UlUPXA1wbA+I>p4jl@>Gr;mp==&xZ*)3 z|5ERd?1X{1Fb_#-PhK`*rD~yv*V?fp7(V*T(9* z7C4$*%=|S)7eFGg*|2qfiv}2-0iMPqIOX1&OPCt$V?hTt#@U|yA%GodR+l5EWr4rK z1iB+?i2)({-%mMgRq=i+=#nzB64T`QL zLjm&bbQdxA2(?+0Z>XMa;8-paw1Ipscj^BhY*hIrN>ZP+Sp&dhVa1X-bsP{!?)y@* z17`>HRq$-v0<3pWBJMoRZEJ@^!NNn`vWL}~LQedD`wcV`loQ3QP&$eP+@?ffP2%M5 z(-G1!MgU@u9LrQa?`o(=iBvQL1l?UZ&b;D++UlPCMx3ZiFY+!X^Uz*%n&(&Lt%+oM zzJiB%%7jZQKoA4kVsRm&Nql%Y1@a^c*<&YDqem?l2}4_U&mhl&IbhS|TLBS1uSA16s4Zt5Z&df>Z*SO*nYn^ zl}Z8PL2}7&jxA?|{4BJNuJ=s)T@;@M>Y*P>T8uvL`chHIHOsyNs79;G2l<@7zwdUL z@I)Xr%80mw*G3o2X{u1CHOE;s1OWkj+vIyX+E0v{vZ_hD&%+474AP+?rQs{^#m)15 z^l^p4_ob7kaYXJ|?L5wB~H*u$^yJIQ)7^3B7; zH}j2kf@|}W(DaOH5~f32TjG>xwHf`T;_4t+Q_8f7v^Vhy7*h@X0`goAGPv!b>{88y zKRc5J$b>lL(1kmep{@!xO}?DI)B(HnJSc5JLKso?>w^cW+oYJ7X01qd(}aNbnLV81 zVjWZ?YkW+`Qtde4Wv6L-U2=7Jk-2sn0RxP-kx^)+V629XOqn>+n}V zy_+25eP#wvpEgTSUe_aL8vBF)~k^>pQQXd@zUQj>LZjev& zh3h_~m2=OZtD>B(?7cLrD3yU2O_$RECuanWxd$PT6b(?`+=}IOI z0nHDErr1;VJR5RcLP9}E&bQGslBb+nB|od$k?Am|^za!#%K<5Twqh#MZ0ZJ$NH-A~ zN#9aj6|@OlMO}W$=Fzl=L;( zU(kebxBZQ#3}$GIV>m|)mxRu1_*sBtf>lvLdcNJ&Y8Ae4>2VdVa?BocI7Z`Xjc5u8 zn*%XkY%qx7yZyqK#MyM3FL$m8{c=yKcQq(yC6Q~)-a=j0}l z)QhooV3wKW0Y&|iFg|j=I)>??(ET#<;Is6WAtxP23f5LAwBIQ!*UOwI$>%+f#<*D3 z_~5kpaOs`TZh0ncP~Uu$TwX8s#fWqSL*HCpqch$n27ZGm(q?bH5P6EDtQ;5|O}7v9 zNClt7@%;08jbUHpZk1&l4P~Uksb-iNai@2pQqYDfDio#v-Z_mR|I|#4PYHfogQ^RW zx)W*grZFZ`5P+Zd^My9`5tY3g-B78sosC{xmdLdIVq(_={cYkRORvhFZBIz-S`eNT z+~QIYGOK@mTti5~4m8{xE9a5fZK2bcqrACE>f03o)>&!hJ}|ZEPf$v_){f!sk`4Nk zd-4b@o@vvZP^Gl_npKvbG#0qrMo=EJ`sp47+N_%ABv|k5BxhM-VJc5w5VPoOnVuud z!Sj3f7-iBL9uHC>G?89_+aW=*BBblQYm)8W*q-mZSoM}RAQ~;^K~7q=iESK5>Xu&M zp!lF!O0b(!}cdi}3YRcR%QXS}6*ZVT-7kOp75L@CWoBnm~3MY_so0f$S3v!Z? zXNrz5dv2nja8J}*4`-+4adh`n-}JE9=7ztkh8=r-i0*Hvi(#1x~|h_xAQ=7~4&{gBFX+JyFN4V^!UH zqjIQp2mKGvF4KZu+)Tyg(b&NjIB7?=FFg*qOM2cVbk?@AED~qjP#2MbiU%cxrg2Fk zGZ<(I4Zu}N$@CNm9Ebds@oaazQ~VoRj{WLoDaz3df-1vZ^(_MLqf~WM3X7C8z1JsH z*I>GXnr^~!EpxGdP4RU^U-i^g5#5x4RQd~p$RBe?;=akQCSI$T!D-uJT}qed#V(ivlHt8W^e4)%hmQ2Sfd z7n5r#D6$DgY=iXZ2mS{T#N=BE=a60TyN`%qqSj!hc<4w#e{{14E5qFxlj zs+W>O>!SeR;T@|TcGUSVHk)+M$uP9r}F(FBNd!E`y6dy zG@PlK5C2gjeDAH)N)UJSCWT z9NTmCOhi%CKyX>Mxeou}^~~vx1%>drcvfIbiYM3Z$Y7MZ%u>DJO|Q7t z2}Erc$wY~KXmX)(Q*5G`uYQBRR-f5;7`1vt4NzL6Ef1TtU?7)Yf2)Wt2#unin}(Y< zje+29-RJ@sEp_N{kqtt>En;9sBEZr)TPEreoLo}O3h{eWhTAWau`I9C7km`UXq|88 zJ3~#)N_YO`?FUPs{r2@eB|R><1#-W?^h?Qgam2RvQnkkB;riT^QQlbAy(`+|)5_0! z?1qor#=4HuxI5m%0T66Gp0FkN#ZG-1?Rvz6PF!~$vmulUwkol;l|Oa(w`}Gs$2x3~ zNr!rlX68bx1F#Ln8exx7_608aT;*qEzs%-A)PD;>pe1)`Q7RRD0#^gwUpn!b4Ox7U zN;jIf6U?}X$GPwR?Y}`T_e?-Y(-&fs?Ye}n@0J#=x@~>do3A3a!F@D`x>!FxR~I6P zE+|o>KbPSmte1W9NJ^pp2zBZBDE^^aIFtwyU!Za)f(Hr4!k;z{O4~rC?V4Ou)5BAi zO(U4fDgY(@0Ud1V{vukO^`AST8v_flOETWM$`)COPWRa(9lop~NLPqk#zfH96qU?P zML|bPlxL4#^rzVbX6vrHJtZlOv~}V%XQfl#Ajk+1QYlILJ1+P0s_K9Gj}aMQdcljC zBr-?Pw$6KJn0oV~V_#W>jTwNa)Z4oo5fu&^eWlbAFRd@8? z+w5(CxR*9+f#vf2%0(Y~OeQ9_1~&i6woi=4Z3~EYehQv}=7Z(lkT@d0QW_eT*fB2@ z75b9(vxcn8)o+dIU3g>^JB?WRN@<#7#Epwndhjn(c4RVp28obN7fJY(Y(Q)C@z-m6 zN_p{WX3}YLFygIJ>91I3J4pJAHiNo45Uu3Alp+Uzr+W+l%te^&?Huq%`4DQD#T@Oc zPVQE@-%&n~YcXT7@r|5*14$1-O%S3T>5$P{^*2Y8`uqX7mW{TAIt41m-%rs{=LJu= zo+4ark&45teWQ(9o%s$0>cUYlsW=$;g2*1Roip0~@cqrRb%jYMT)Y$OuLvS<-|wDu z3_l-Fs=q=fSbmlQt!P@nTrKmlGPpbx*#oKu+TMs5gkO*%&>l+W6WnQ z-8WfID0K??x+2uEN1{?XMp0*&)J@Gh$Cvxq&9dPTr7pU$b0_O2IPg{YxzATuiHba5 z`#r*q#+*=}&bSKsnCqcGi8HgDY`%u>YXIlwqN-`P?ad?$u9C>8ji*6v}5Su{q9e zjp!d%6AU8~%-;to7p1O(r6sy&eSP!5o6ecFZ@Ahz(rhBhof!3291b1buSZWG@AS=5 zi=SAC7no3oS$-BqM$3Rv%@DlRX}YBKwnV7o`nHdZ-ehiMQJ?q8md*erH2`;Lq&xX) z*`E-gMAi)mf4FL)bW~3 z*hy5@X*KpEVIcEu^wszw58qU$gsW4pkoRLNAyrGFWH@|WB(!JI%UDE`%#hy z&R$t_5RE;17t>7J;i$lZ`y>u29eU%$p54c2?*;9nI_535N-c+&r&i0V@{Hfm3CEyg zUwi93(r7sgc@P2qb3ze~gmZftoO^5_zXMl22%;IUd>dvYP|fIbeX=I;+AcG=_T#%( zxf~&m9O4{_>~N-N_aUQgsf_FYTf4*vR5gxfi}WdIn*A zUc$9x7v>gt`OXl-l(a#bVk03TnT&6kZ-O?qi0ZocI%%`VqKC@T*^7_udJ^N$@81U- z;xxRp)8Cxdy^fJv%^bD87=WG#COro07!atNbVo&8*Nlf9m4a%#0Z2rj12Nr8D2si6 zJIPOq^km?2%UL>bbUYzQUE4YORdxlaWL1~p>TWU{H&H9Lkur%^8JgI8?4OgjO_X-< ziZ4hx6pqbmUKZRf&|pbAAC|1?4!0O!ov(h@ZtFAwg#hXOY}-c{ij)cgYo8f}=4jby zeeDRLI{e~?l$sNZ0h{q5>LO%(ooSLEmoqifVeE-&wg&?o$D4)lj~-`0l5)t^n%CtA zW5xSV8I(lCL&-ibo!aoEgTa&N4i_F}m?SE;`pC?5N{K;g%j@7Jxd-g6GkWLmu3t6L zL5axAZyKblx8MYNz|pgdL6b;k3Z+3iow19{9HPlSdl4izfY{H>6gf{^gN_Us>#F zkanJOjP6=SFXJYUj?6;G9x4DEQNK7SdOCuluOJP*(Z`xN-g7!SRgJqqdPPv+Cr zV|IO)>M(tB2}r3mxlSQx>sI;?F6}r0YuhT6U^puf&3a>Uop$jU`b%kqcF`Y9x>3k0 zb`>vrVWU`=ZWI=R$O(Y zhQ^ce`G4vu&Wz2oMhCjcld0YE>dJ{emMJUhq|?bvTPlIq<@iFqSUH+i>hS(Zqd7{6 zcGfagvEy8b!72V|ioqN@rzwPvr^m_TqOV81B0|dvia>v?U=?jTo>U;VvK-xJ;0(h|YyQq&F+>s77hY34d zf{{?Z^;a%vrZW(+s!% za$w`M8`k#Zk-O>j#uLe!2f?g^C|DjM_nRy6G#}0yJQsF`N0=iBT;8}0J4Q+OfT`f4 z?!Sw?F^B@|2NDY5ZBf2|=Y(=GrUkpn8JMm@S4{if>qYG?MW!{TV)4dubDe}1X-dND zi4TJM9O|WhR(lfI2(_skD;ned_H>*q`qJSWDiY4H;O^~L<7gapN{>eZ?uQ>=dEHMwi4DYrSrOf&<#UReo{U^rY!OQ_6LJ}InZ?Wzm5$%Q5& zT~!$5wAGaM(zmsAJGpwVTl?MPgYdF6J1i{L&l-H}D-MZR|4}h<-JhR-Mb`;!+E?#` z54N|{H*(fccGWykD4_4;ClODc3JW9`>tcDT*fuqn7wXew9kqGOzsUCDLXHkv>K6{T zNInHh*=|gMog+q=%rOQnMy(hjpMR?H=SOTbF8#^efKtS+e@)RTtjcZQ@9OM#F}C$_OB%q4FZ@9+YHlP>f)?B$&HCi!VBSdyQe&zKW&-ya$o#_ioP^Z2i`|| z5#o!LG#A;qRHyINJ3KDWa(EAWg-6KYS=+U1GG3kxm}5C+UP`oW%|x^Y$lj`|7ra}C z1i^d(emOG6eiljd`o4O;<~9LmSoS-MuB&hQ8uFVpSfEA`r{*-@-;u8IQI=PJY{sp0 zMmZO79f7KI@a4Fu>=4^k-hcAs$`MQa^=W_ALoP093T6GR@fkw)0LZR=Ap6ekX&^m$ ze(=_qw3Z-}dW$k&SxhsZQc@g-OL07}t-)Qr*=xjlbeG5|H);8zSRFpR7JgRG>4TxO_MNZTY!x9B9EGuvX40rTKN6PH4dMY_IQEBQ+g}|-; zI&cmJMFqRY28ZI+l14DqW#n`pgeK;f(>CYI<};8Ib*T z&j9dx7n%yzXK zOVgUmdW+0n-;_tdW!#p!lNI%C8ye_z+j2Gp6K1i?mfzIm#>06Rh zp>l&mcaYR|@QR}6PFiyU&+=WSI$rsTNO)O?^$<&WTi7OG-=HL_(^Q>$yw))|ip1b3 zN1R?EO_CuVi#Y%8&y&$bT_N4q2*V-Cb`iBL(sRI=#4k#qS^YQrq{dZ|Eg!D(9ufU4 zMoDU7`>qge?0KnU9e{X^`^m$WJDR7R*nF=$CSHV7aPOZ|%x>XQSM7HY4FpgqOM|(Y zklpWk(bM`cz<&N<9RPBIT(8Q+^B*UIQLPrJ=D-Ar>ebx5lT`=Y@G@oVB`8de2EcI$ zHPjnwL)l#FN4UfI%fm(brteZ-U116Dv255Gb=$wtFa10pZP@+@;oHx`4lU$Bu(q&;qOiM7 zpy7o};_6vF_Ou^tc~T|O8`Lj+N(mdTnrr8(+PJNqHZ2F6Gy(Dz6Eilx*NXQKmx zh|EehL!to5E#=+sQjS#i){r6Way>H0V5~h!`eQI()(E{rL)XtJqd1Hs-uGA;K#uZ( zK)MEyO{T`#@UuB_7)u6+)gf*Pg0&^Y=K^)^0;S@a;>iKFU+Wm&Wj{38Pw^00;fSj^ zG1x}sQ^S%sb+6R_NXYYc!bW3tVfw@C#tcVzDI2H0Iku-S71%Fv6@vo>O5F6+ljkr! zx(>|j1TfJa={xjkVRLMqR!&^BR^Re3reAf^=&J*LnrCUkTx?}X2k|YJPnVAk%}^Vu{TcfK4zfBG#NG?7K4@z^47QkT-iDOy3fz`xGZo35P_a zuwzyq@=X7T7=1>4(U{Gv5DDfsY%#J9@5u2~WBX-2lEp_ANO^n2uaLjo%y_|vrCKpg z-FDueq|L~2lh-+XchpMu8f!ua4Vn{ruFgN%OYI9mxzJs54zc^ z`UUf(Gw1j72F~$WSa&EZ{i>SFX7!q~f{@_GlQ!Grjgw*zr~qF+8nN4SBYwud(j(0k zb4SXq%FL#C^@yF@`yZCJsJ>A@zZKYMDGXf^5=|h4@FIdaO#gD1B#+BGP@_B0qy>zM z+760bc-{1kkMw=~kqPE10X8>tL);T#x6~H-PES%iSo_J?L~ZiJ7$+OqCJ2-R*q3vf z@jONP#RXvuD7Dsv&z;?VZ>$R%#MU#O@;&Oej*~P%Zc+T@TRm&`NAhZ={IbEX{-h+p zacDY(T0uYCVj_LZp3Y`+N61vFwy}NAF1{)N+oB-l-yY|}KfWekK~RMrm?(B**{(D7 zo6!V6nYxNq?4j=L>N(;o?Ns@=ydqsXG`IRAPeYwl4Z&wZMW8)Tgs#_?X3*Zw|Ebw> zkiV$}2oN)!Yoh0}b(H3!{QvNDE?`lXY1{|b(l%W*H99hBDIPF9pmab+L)Khm5yTWx zCNl+1nk9900(mX>!voc%te}t#q9~Ax3JMxB+p3`=f{K!eOeqHi0iA&v=k)IPd#3OD zu50&N7GZb~&vQTb;eWV7#=UCx!BY00rUtFYp4XpIdsA4bz`?1pU|o@N@8#t;T=RoD z8cqoFxDP(}CF3`5ORBNa#(HOaG~L8MNN;EsUT#`_L`_SozwI6JW)8Me3MNO`iMAJpVMIu;jff5dpKYQNNdFUC#c4 zF6~2KMhp;Un&Ep?$-iPSk=;M9EL#{jx@_!xIeOVFi_+D_=LB<>&idd`7C9*zDZsRS zrt-p3UpK|+zX-VP@>X>-k04sM-ubyzu-2>MRurswz2chuE%FroPA{UXN61Qt&5bPy z5L{I(pkvUNea5*)%m<;?$!BgBl&#A?Z`HsvCx^jQfkwYFZrzW9gc3cCYZBT z=or?h0_f4%dqZ#|z$fYj9{K9HcfFdIhzXjAnb!DchJ288n};XpYB@7wLeWEI<%8I1 z5PEo`D~&1GXjWQ*)cpuZDa}6GMggLaGG}z3f74K460kC<#%}jH>0^kUxH0FCQ-9c+ z<|QFnQtvU%e6S7D0m1U!;S%@cuJw-NNczC(3T_TVLpa{0*8H7OF$%yAYhx0v-bFhB zPl{{iju-Mp01}h9X>{dh4sMxEw-CDRXk7^oC}<;3{1HLmJaopK(8Z!c;I-{Xz)u-B z)yM~_(e!WDJ+)*T9yP_UaG$zjd$g{}d5|nqk3TG;arQs>9Dbxv6|OV})JDX$%I*MD zt1XoAH|ohO3**dGkEG_EVQi38<=PTm%uwfmpNZPYt`Y zw|~!gWWvs}U}CdXYCizQ!I|@`_LAucEpU;iqTpJneeb@dbcnTLflijNSu`WYpJ73- zV^zAQT-c0EOkpw30>41PO3-gV3_NNU;D3B!n5R$Q-jMNHmNZ%35EM}}40(iRO*p1A z&K`Dt{|wuau~y6?}KYkIbh zFF!MVmYn9F1$K{FvBfV`-ZFGySvoEF$Gi7UB2^l^?^6KLRkx_!Nuz}d5GB)hb zR9m+$qbu=WBy4F;@_rWU>xtMchxLDR`xNCjPgLa>IG=Khe5F4 zFynIiw*OP^Rq>tUOTmiixEf|DRocC^ew(BKGuRV}Xtd33!Upf_0c zr{RZi%I+8%!D8@P!5jH#>FydImGPEuZ}GW>_PL|2fpa3H{jy0;jLdy?>j?PU0{)Y6 z(k+W%F#cX@^%h2y%+*q&#+!UjumlBV2mINpi+{dtBwI;8&g^qo>?N`y^yP_sJc@%y zNfNVPf>~H9CjzaNA1_$+D@JC|7a;3QZXP)Q<5@!v7Up#tYr;tP#@f3PTpjpveX|)IVlL>FG)>;hK zKkr=0ZqaI|zAM$Ejku7%xXxubw<5!G40Vt_kluu%BnZlP^=WX6$LYEgNA-YgaT&jcXh}2T+=miUH=!jsyj%kB5zIpWQSIPo+LD#XAheVJ*R}HSA5^>SU>^(q%gHO%nnc zzFkR0rJ9OZ1e4#(OEKPise&K#dEl0*w)grvj`PPcOI5~gwnRt|47QHxgF$vY>EwMM z+QRa!8mqh>Xwcq8x|Wh%btcCxRP7h8X|u$HF-K|-9x2zog(^i2i!;l@(5~C@_`ndj)@B0Z1P-ol4A==o z8CwMe>qs#2eByj4r|RbqNu9ggFk?4r9Y&u0&7l+S{QTKl{RD3M2{9F9c07PxnzXmY za-O@?)lwonEQEe%{fuxcUq?)UczoG#nPwR@B_=Y;wj)1h`%YRE&~2CnF)q$sst+;m zA#Dz)gQLQ`Fss&mDoLM3b!M}RD6{C9w!NOSrS3{56(P!AXgV${9AWgKaISYHUO9hy zv_jpZ>E!L8?;Kb&u%;oFA_j~|s9Y+9w@}WQM>>Qc&8|VA2_6^?wCPjZ)UZ%?Rsa|>}B z7ES#*1~gO7PrWW32#Fs#yZPbch6~Noj~SMjIdyKrD<(|PqS~NZ;Y`$awj8m$v&NYk}e18vAY%6{LE|&;EqwZf)OF(rH3U z*=f!>eb?BD^oY2n@hlUN#_nQc z2+whndl%kiE-5l{+)&Wg6E%jjb0Xa|@0Ji(vWN`oyVCABF;l;PZ)2d!SKwslVrU`$ zm8;GpQKoCWCw|)b3YBv`WR8Dr%6vMlwb@&C_;y!j`7pt1|0cBgf_dxPBetu0D?~Nfhg0VcR;r*-kI`%% zyK^weLXTeQwDSt^E)aB`Lu4?+EXvlp@2kb{D%bf48RP`}*}pz7I>uG1_u14!8rt&W z6X_`Dg8csU=QP3=LD{jK>!EJF^-4Nm8kDGD;Ngn9XKvrcq3i6a0%{#1^BH%5&w_U{ zZxtQ2Y-VvUEzSQO+I7W7B-#Yo+}*?cFUQ|`7cS>9AN)lLoMh`G-DbCaIvb~Y1%Y{5 zq0-y=Vw=v+zCM}XCkhX>3gIPs+(cP1e`Ri|-G_@g^Bu`4LMCZJ&AXXg68;$+tpDCp zihviTrGd<0PGhK?3o?)~Gm$((YXHWro%%OOdx2{g@?q)yBCD?7GJ+4Aj>IX;eZ+2XQrF_hs1+p9F++Dhqu zm|_Tr-lDI9M{V>Au zSy!K_I8ZB2#{tp-EcFdToq4!ICGFub!c2nrr=r@ninJFvQ$K|`Fx$m0pAa&N@q z8TJ~GHP9mvxZ8>DO|5$>J14<@5enyr}KK_c{NSH^VQq)DaZU*yrf2e`b2p80y(Disy*5{DGRZp(-?J{2j-$H}(Ix zG}9LqWv6;?n>c4QkrnHIwPxP8WUnVj>qN@MTw`0wN5*YAboV!Ypk zqC;eIn8QLC6*%4(g6ujRjC}3OrcijrpLCw*tU`^=PjNOKX(UTMjl6gA#OBcWdo2Kl z-`x$fAB{a#oItD`of2DJ_5!@`u}I)gaho-TLlsf^{Q^#ObiSu6_8~Q<@~+8wUiDDX zQ-392Uw6Sy-S7oSx&A9iWr~QN^t%f`RIZ^A!e;sg=a)-pP-qJ^@j1?(3D=sDBo;O1 zcqn&@yR+NKhgc&lf(}?@&#Fg_3D8b`$FW=5IQ`l24#U&Osq+7r@jPhQIRtxk4>rm3 zEWz-X!N_3mYTl1gA}xX#yz#_D@ZfjI9EiJ=?*por!qGU3PsF9?P=4Fv-nl4x1ss!xUIbDl6@QyUG3>aZf7GeBrZj0 zARI%|ugWr6Hm`C+>wPQ|c~0TSj(x4rV3wT#8&>LX%L^Pm#vJE);ADCBC8C8>yw% zZM*OPhte&Z0hrhd7>H}gd4>a(up`xLlGl|Snz-Q0#e^7e}}pH-7rBRXKF>MwT{y_?%kGzH=H%fC!Me1<0rb~EGq@W zxUaUPB?KI2Kg1dxMZFX1#6c=prwVJw^cQNHV=llH4k(hRk&w{t^SE2-a>LEWRkS!% z-Qvu4Z_%6_%J4BN0E{UwdLBsD-I|H)yvyXhr}&QEc_z=UPLp>`blt+nfo?CZNj3*P zyAQwHNirbhV7X%DA@V{9lJ(4394peUnsPHPmQmuhX)!prg2#oh^4KTs>nk!vM#A|@`S1KO;+%gsY*Nn*5i5I2!PPWf z`^)Us2GmV=R|8~zGwYElc+A&LV>luX`h}X;_%;O69Owc3p?ui%Jhcwy*cv2rY(GjR z@U6SMR^*f(_jc%oz=*HEyfDabnBq<#36mEQE~oW-jd;mxSfZT>5X_t?9HgZVtq2&W zB46!i15|l_fs!MJs{fVA@dLseU)`Xu5oF&=2EfT?rS*PWP(+X>VIb6>q+m0|yKkRe zN|dO)ptl(e(osYkj{Lsemx4k5mOK)Orz{EKwE9J<{ffG27RCG>(P$7-pD6q-0F}oS zj=_qAdNE|ElEdqu=v619|cWK@T8CDMFnQ#L)9XaAJajuDqMIz@5ZO3ZEt zD!_lBrIA)!b!1X?B0M>d1pm+!%7@$xmUF*uIuDoPe7Jb61>o0-W{MXCpy4kokz#rG z3bj)fuY+;gpHOhmC)%VdObuTLIlUB}T$ z$=Bt>>}y{>ee39+{((R)`jiDrRY=NU*>xKl&se`bwvI?oc&KD(8 z4U8+V<{$i@+l1OUPu+trNY+)>Zbn`-E66Gv*0juK2E_iE-p`@gdeqxl7f~%$p9gS(^VoLE`BqRvPZU@!xOx3^1bRuM8PZ*)s0)vB z{&236A&!U%B(<4LU0MzwN7{8?0TPUy!gLmiH5^v@HojT%!If~}4(ZG-m=w`K(G|ORT_>I?~-&B!ok(sudumkz^X4 z()98&MI22-P*od5ZhbjgTf*Hf*>_-wl#4Xrwj>%0kSc?8Z~qaB8nEV03rd($_fLie zuC82|Epq*fW}`?w8tanRoi{w`7L6XDgF8vEiAqnTCk+CnQt#VKQc|Oyim!}^cXjDz zQN|aDCk1+)$fl$C^WBSVSuWyOKh>qhME86RwWO$bND!|ENYAT@mo%k7|BQF87P9c) zCw}yVb$^lxwyCpE`#4P}xQ{MM8j!qBY+gWYVO(C8(<*wFq zAUB>HUT(_MUgT}1dqwsHfz{iFlN}0&q6iyIJ1nov*;&(2o+-3)_4Y*|k(mKyKQGZC zdugTA{Hjm7SytP$jkpsFnrYh_v+k}&j%-@zySEv9N55Uu2ZvBWfGLt}xAonfv)dAQ z^|@4o-!#p4^Qo0Bof8&^*l!a&!JPkHnWzS_O-Dg#rfO?OH*Ya~l?~RwFm@2cR5{!} zlO1-6Np3KP%CxOd&>SdO;p`Dw!Q%)&dTPO1PwXBhonW_20Bg{mO&OyN}$( z0!CPcij3$?yPKq>gPzB%->HzVpbSb7m!TgoXtPH6y5miw|karz4(^kNWGMSq@e!-8%$^%MLb)j;~O zz@G2?swq|W{GxUa3Af%t*QTv(dutRi80~gLESNGOW}zejP{wAe49>zRrnP&gzlhM` z^(x*!|47H=$Dk?yNr?usr)$s2sa3XR?AYDHI_?!=9@)l&8qPT$^2)TUTmqE7O&-T( zi^cK+?@9eW_5a-J_yHIr`ZoQM)6dvLgW+vMr{YPkoV)FyqUZ9v%3D7-^QRWMsW@7c zR>W`2g0#EYGWEp&+|Hkqe?2Ftpee7>#n;5F7Fl(6NleV*mxy%Xy!|`6KcHb9`R=ug=6}RtOuP&sb zg<&5Pwj;cH;Q1GzyV$sUu>lp{S8f1Tts~bvo$=_gMkQWAt=v&f6~s2xoWV|23L5+1R8UH|26PH%J%03-!uX`fm*1E-DB&;Uvk zrzXU3uvx$po5DCqrp_MWyg9_lh^cgLpK6a^TPQ@v`t~->xe+cbzxHYbE(54|GOO^pH! zo{k_3e>zy0wAeMDxTNm}RVSbq!*P7GhRA*31?xmKA5^^%3*jACtC8&@QR5kcc~tZy zb|Al+<0=eT-XBV9T2=tU-oUXqhXek@lny#{P<9u_mKl$J9(c{(piD3qm3Sa-D>~zt z*u6yptuiq5iArwGH60~}KtXN6d%Dd6-p(vNwQLr7NzB?>8vNbkY7{>iF)?806BR|W zv(67J?2kad{X2(1M&L(l<#wSN>K5XEyZh~21T{ERK&5MY#IAMeV>3*_9v7+edx~)c zhCSju%-@%CPu2U1WECl%``Z*;iKxM_#5vv(tj0=AE%0Ph)rPt58j)8KI2`S2bpNgX9@G9)JXX|g#`Zb)h7??!GTpG2ME?bQ=Q|cc z%nile`8pUVcT(vcwaN4)SCnQdfv(vp%{h#w#chFD{3WWMJfg|9?rn?z$*hJoU$6y5 z#czTI8Lq7~OSFge4tteiS3e%?k~q`9rYXCt-7w%Jm6!a*sfn#Nxo&W};Nx)Z;}Ig= zHP8)XSPmVtbeFp^(RPcDXbM{6r+Rqnn&t~CJc!lm9%2LIjAaoqF^Sfl?EC+Yt+zVa9Y(pN!AlWEg!hwZ262Bfh@Nd9vR@Tz?G2Y z<>x*s>1jocy&%AV_E}eXp%xF=oK*@o4T6=sjVr#xJdsn9xfGS30czVHrU{NTCa|99 z;ad<1OX_}4RWe;NdXNMFoNK=hx_pS z=|q4|G45(+`b!ApHAY{cZ9qdRD^=->l>ke7vn6Iep?y|X6_gdyO|6i|4_x0ZUGL|V zblipPmOsR=eEZQesP4isfq?lR(UFJR6kjXqQ8PmUnn`Cl%c#f%7R0BU%(|K&{KR zsP5r}+o5&tH>ODQtVsbh}N1ZCtP+7o)jF80gDw$8z`xUIarVyXgY3>jR-p)KU` zeL|*H{8m*k|0qmg&Kn{nj~7}lTVQ?IyvN2Q?9+0T%Ynm#3-Yjk2V#AJnL z%<{6$X!qfadaRngaOVQ~X^MhO$WZ8p#&E1Bd4_?2T7}p^(@H6U;}zT5IdaDYQesp@ zPvuU4()wQ0xRnW%B>$Ew>u`Rt>U!~qOwv7-oo!vp?r!Hg+yb;+0$=YM+ZU?dV#x}F zbsM-3K$%;{sBxGtFMHsHPjx zq0#(z<)@03CZ6WO2>_cjO^^Pmk1eem`Q1W#%_!VHL#(tfa3snWIV(crwKk%WwzKej z^%fK%A(yK&B;U7$%XZwnD`we$%nNJZlXg-$K7(K-X3L7%cy z&xh0cXvfl4s@F{l`+q38JdMYlfPMXld2^Dw0V->h=6X4?n(!c?$Fs7W!N6)VEH}Mv z0Zs8W3>i^s6WO>MU6CRoLXcFj4+hP3!~lKDPQ#Mh^c+oARY@30t*MfVz}7^j=<%Fe;FThEDcrEo%8xg5bRqr_hb$TzOF>N|cQZ~HH1 zh+zqy&SXtp(3Hwu=B<5WR?n4==JXjX(n9ehk1CCqzq0SCsF`;5h})3l`v;hbPc=PA zQHS{>$zA>cV0#*a3$X^g;Qy@3AXo)EnO-R%($mj%zj3+DKJz$H2n%%~4PZu%r5edMBuuwblvF zY@0#MboiM_&6}2gvPm&@NmoC5nq*L37G$f7^M_83woXgZk8{om40d}N)VTOSbEO3$ zMyY(-Wg?3$_Ss5gRoSN<5muMzpImn9#%Y!YtHi(?dxVPcGvTloGv@mKVaIOMj=*$5Yl3ojE>d|N@_uimND zQ}!UL-&sK1X&JX#=OG=z#L9Vo@W%b*hFR<*+8^&&k1unoy5mgc4|4fsG!Fh;drs}2 zN&n8Xd$?(zvy-8^Gea3m_RsayxvzLRCq>b?IK;aB_ZjE;G5saUfGRY)0Go7lB^Dqy5%?*Z8$ba(pXtbJ7@$MnQ#}3x|8nArvD)B|NTE zK1+rpU~rVCtQz>d(qrL|`=E5XkKx97reft85S}S;Cd1{t^guC*U?p|*(K(3=wC`3eSxwW3=!QO6Hx(B8LSn{T}>ycveNmFg5kT*`BVf~I;}z(O+X>j*;9E0hfj?G zx08xc9*uRrs2tHc);qIFF?s5fx$dH$u)=wFc5^FZ77;)U2C}#gp_sAD-jMF4!(wp} z7shM1`ya9ui6hvjARrAm3k`S_%v9FT@Bm>sc#^lFND{a!$Gs9hpL~h|=-UIKO1dFZ zBgaqz3|UcAjhV+SR*`zdrsvLjmu-I+#jJl|MQzLj$l!(En(OfPS%oOTr`%#Pnj!wS zCbH9BRYk74QCFPlmZ3Yz2lxv61&_V0-?(B`z{jG z(+dtyj>1hNwpecbHP-a05JREM6;L?Oql+I*|F;{BHs4~o9hfEIsxIiok@nzk>HDVq z*)3{c+2D=3i6Sti*LgHn4+Gh#<{$$`xKEsGKVuMK+r3KFJ2`~5A#oNo1@Qu!u*~hl z8O8R|rf zlNN>qSWndtajmeT<~>K04}U1uoJ2lq`#5chPQGE;Kr# zr%&7L9N|F~a>PXGl{opjYAoslLeWckeYg=pAB^A_fJ6WR`Txo@(^r9!%B^uu$Uhjk z_Jqdr!X+QQ>6fo491n!P{c)KPi8?sJ8u>wh?(Mcm6j66p`TS?+%OuJEFYwT!!(;Ih z|4kD?`2WkMEtYH8*N&A&(dsbW%D75)pw;$<1JaoDF`76STgYeVHq2DE!+~cggBWs9 zTNT0=w80`{!Z1?*O`KPv9uVrh_crKj+4{G@QQHfsv>}Wr#x4?yDAldox<(jtopr-j zT%qI3b9R43gNaTfdUxTPj~-tbdEO$_VfrQRwBjxtdtP-$SFMvX&!H$-JygT98t+~} z+I`E#zdD+7z&K}Oh^!sD_SGHM+o|%G+zvEZz46v)K`QOd@%q`Xbn>FA1Tk7#BZ#=- zR_hlHc)e?u^0uf`dqM%R;hJ22T%&JSKHTM=uj@t2AgQ~NEuZw$o=!*M1ONU@%QCS` z6DL9oh?yN8HlV$|`U(~+13q(NjX}0lWl(I5suRX`tjL4tDPiB~^m_F#O7vOVg+rNL zJ82<{nMr(ppLdp)87oNM;7Zn4lV)lDrSA~kjX6w#=DmS&07NTK7wP#G^d~@>_&Us) zr|)+4{hnrjNpi;(;x!d6?L1q7&9ENo1rc|})!Pdcq zw#P1vx_J3V-DIIeK$yjwsq?EJ&CF1DR(W8qQNxHlaeYkPQ ziNpU%A5*@&qNZOLPhS+bH+O3U38Ytl*0=(s_uOaVK;M*0%?hQZ1OuGp8<+$TN7&(c zIH_)_NqzK~sX;@!S#exjY|v1#3qX%YcguGa3{s8sK8^Fa&fJ$7JNr~D==yPb|D~op z`Y{1T{>aCCRNnE;1@%UI5n_ewuGl3jWN$H|ic8@2^ax{cIBZ-~)B9&Q1-! zs@8pgzvoW*-u-G`cFcNR1U}%)OkEOl4p4RWJM_knOGPOhwdv@Lh`fD?l1qT7EY(zY zk1gG+9zb#lo-1aKpZh9BiAS&J3m3>N9|mM;1Ry$jweqydRmqq>E!%{c*)Qo);MXUM z(TDSO&K$#O)9!~p91cFe8|qZ;%u`%Q6v69O#&S>ezjgj( zD@O|E)CP%Hj$@O+GV|uMBlz}qEoZk>qLI+{dCN1yQ)hhAdMCtVSMxP&dYu^G=+Ar& zK79HF(-nDvj$53YEU!WcZkNIa$kA0U5YC2Y-g`;kJluXc=yajU^x#T?IEh+nuqPI1;*i79xKU?F(e=;(NY z7p^<$b3@c4EnB)DfIh!Q*ohM3LgDGn3xZ|BY;qi)rv3ns=#L>7kvMq`(z&5NZ_Iq!OgWX<8pr{*^ zcG`1-Rb*o1>`E40gEEt5bfjPjvSXP1_n(?~Tw189n}4UFC;s=Pt7xXIAEnB=0O7 zlS6OL@hb;fLmf_jr$I|=l5enD^lc|YNT*9Mn$w?2d1b)H9j`U%W7EeZ(SGB<>AckX zMHJ5B*>EY4kN@rW{O!Str=&O9ZRCHd-dlu`wfeZJPi9jc>(?<}$LG20jT#m>*x*{dQnAucCSX|L#I|Tp1!&ett|$+TjVdXHhjVc=B?iF^+qi3I_5jV?8SgY zQLTG_<8r&d!|3cJ6%39il~U1xFWl7sFC(@$;Ri}}zF+?cCwvqPi z`R^uQ9L$e4n+O%1-vln$6|V7?12M1sQI-X8;?{8-2=uFTh)SJ6OZf2H5=tJn`yh=* zrl?0j-9IF^`?8<`hi#c0+&tsZ1pzh@Od~Rm&k-1MuFHR9@~{OXgGixH_Ob$!J)&A` zTCFIIBGRt7Y;@=hlFk|*_0_QEn6)hALb2FX{%I|2q5ZC;6T%n%<9)X;wcpt)7=Se^ z3#0Za%1bMZc_soy;C#11THAW(qhhPdd`qj8rIY>jbwO=l?vOdg*aXyL#O-PxmvXRF zFT}|fiLHEQ`}5sM>W2;-B)3rvN3#j@-9NSmw>hYM?nt)fvppP+8DcLSt8PQTvY$n% zcQ$f?&12IPXXIL*ezBNZxBP*HBmY42ubN&JmB!>*=5J6Ao5;`5#>9nD)OPKF1{Sij z1?a_Dzk|?AXZoD^n^|nVscBBdBa!a<`d->{F$K_9%>ZQ_ax+#H>5eKK%BukIaLNn$ z-{(rnZl0maB*2w?e~u;O)eO+kBKAW!1;@?ce&9Zqru3JtwUwq`&Jdzt;6YOiSbe^T z*W%CenIl01%l)53|E%_8hb|Fq8r2__ro!JYx7q!@J}29$S2tb9 z02o*01S%w-r4$JJjGyeh=P^$H@|=(>_~~avPuurpUChA*!^PcdIWpV7i_iMIvo3iS z6dEL%jtnn*k?sR(JX3skG*`WpB`4NCvpe~kSydv%UU(}(Gs$Y`xvU-4q@LQujm?4i zC9tFk@(BzSBJ~|-8iReUTpgLA2Qb!?Jc409-e3X=l(wlQZgxetX7DU>z70~xA%Pr~ z@808Qa;h9+CDHDDlCiIZ?_E zL&)>X+Nfv-LZdr>Gai*5emh&}Zc3szCf=R}{L+1MM-q6h~%gYtUbK(}yQLCErFcxE(X)_Lo& z^BdVxgI5FZg*nWHf5eN|VC!syp?}#ID1@(bn2^KT&GWF}%4p7{=$?lvUNISq)1Lq$ z#L~`Bs$4UzCW8m?>nrD)|2cRuBERi;~8rJJ#x ziVmr}^V#LQm%=+lGNx#%>OFpJrU3ze09JD$20mN*Rtj7qg+=A~XI{rT^M(MbD|Cs3 z{zb^`VfuQ_M>nh|F42K&8BZ$o_VvZY;u?kjrOeHHx@P&`u8b?^?DQKpe78n2)zhw+ zJ3?t)m+DlYE{Z2%%Zxu{p)Se`y2;9fWV)lYbbDT>@2#(n{1*aEH%sh4v74?75 zhmBQ2{3$0THJm|P>#eLu5a8<8NJldK6)Sd*b<4P_{E4_vAUuE$nYDBfs!%@(8BhxU zEr+rcT^yl+JiL*FhEY<$`4#WRZNnH6sSqM^#>@Y%uI%m#xR{&rwa+DBR|eXPVb-PL z=l0}shMmdrxirci&=h5#87}5hpUrgX?j)N%=%Z{Km3d!wCbx4Qat->kTP^{ew|}bZ zxy)c$nJ6au5`e9i=`YZ+ll25bY{-5+I*@j4rdzRmrUMNXUapDj-HzqSQ6&chLN%;h zeaxIGt7x9tNpP1F{`vVZ>vGQ>auI}#h$kFDv|xECJp(_d9kvUhP7aCHs}@^H_gKW) zwY6)H?0M~OV6_;)D>}f?>-*XoM_FmwlVM^QmCWf?GA!#=B z9du6K<@$6UdG^gwNjhI;J713D^z_?%&VNYo$g^I-z$fovWF;>|>h?s=!>#%becf}* zAZ^4mo;rikmXW>ZH+0ZB^c-G?O^t2M-heR=;k={$?v1LDZBL7mFtOG-xr4UeC5ktD|Yqpk+~SN4^spm9S=C% zkC8%N8<8PB{1Sb1`@>HKB%<*oo=(5}}-PBo^38vRjW^NOBNmXEMC|X4;UAm!qQ+DE> z02f0=BS_BDOj!Zc01RTilgbs4lp?LByK5x=8CnkE%9U?yx$5%UA9-}=waKSJi(Th8F1XD^07HxD1Q}=h!WE@84bN0&kVJZ|w-H#nEu?P4 zoz+D^Z7l*Q%&4u}#P_R10EgXW##yzpaG|oZ2t%Ay z=lTqJ2SA?oqs$gSZZk1Yz4J(3K7FIYae+v>oQ6PLsA;&_VDgNS>8oQ{NKZ4JBq8{dabE7AFx9$KyHy0^J@+;+*VfDXW?zJlS+p887Q#OsLEMTuvYubNwR!THECf$L1CD; zvZFlTVIU9HZ~ZQAjWL0ZFmPkKx6DVlRj0uC^)T0$d!e$o8d4<3qGQs^b*^#|> z*pMI)d6>X81rx8Arfhms8E2FdT>HQau1klI!^(N^W?QwENW}9wm(W_3;A-L)X0CF7 z1QILghDF6S&x;6h;bD|#i4A^eV$rqMizu>$mtUxQpXBvgf*6dS%pV+m3A&(-?L22i z!P4zbaTV8eO;$w*0=>0&s#~S~RV^0=QasM{6}*5;nA}RE?ptDoa0K!E8q@^D(1~un zO5x7b`WY>*3^~hs^Q{Ss=g`0rwEg46o0+xGsE;>tUtWO=vW61bNn1ZEM?WyZtodB5 zg~j=Ov^HgTe2oqDeYvnms)~BsyDZ(eQM$9pZNJ&KNobCXLUu{!U~}PLzRuVwwP7Zg z<=eHY29f0j#0iVgzWsAdsD77XFO5n)ZUYN5p^h~scfF&prvtHR48tDLLIrZ0-1=p) zS?Mh}Wj9@qTf8FktxaP>4_Zfs^~R{v2$D(d$NNq-OAp!2KRPWse|lA$#)Y2O$CWX% zZaw+E=%Fn6o!gr=x9?wH-5@b)XPna%8ikZ2fkoX~`;2cdGE2{I(61X9Rmn&C;)h_) z+>|)1XldCN4(*s&@mjK{yk$;K)W%Hwy}W>{z|b_Lu<3`KN##QW@1`a|H)*nm329BlmiCzo9UzNl8>#@pxL zQ$M1nxxW-)@ysuG#wF>j>xFNfvORz5j*v@bQxOECD=}?}U9s0kMW^&gzxU5xUhq94 z8zJ&3W_uADE)_S+m57ig^2UCg^f%M<+j76VcMk#yYydzMe>)6pTDgKD=_9NwbfkMj z)yi9y=Rdlp30#miFsjDZH|DQ8prk$P;uf43VSinmMWG{{btZyo=qlAXt~MK;ldlp- zl%};py&IsijZLkgzY?3>1f;JIMc9WXp(1UYqZexZA@cWc39TcBG<*VHjioc#JNiVL zv`qk(>EhO>O&?mMyyZN2_#Czr>^&cWuu-=>f487JOk`8n%t0Wpi= zsVyY@Svb-5i!h)6Zg$J(Pc)3-U{yy=z(iHuBm(A(&GSNcQ)EVclE?3wKCO09Q~}6s z&Rc!C_=8dD3n6?S)5L_*X#VkI>e{Yyoh^RRYc*f^lJOIJVz;Y$r$8Ox&IM(Y6u$3A zM(KL4kfl*smqzrs7C*H`fMhd z5j2OCBRG-hQTG|k&7TvgZ5u6DXZKzfYT;t`?-h=88yVW5QM9$xpRsd83*HD^tAsVt z)goSDPXkpO;NquGY1WCJc6Gn*W#ZX(JE!h@wDx>JhctFL2Ep{#6?S_Bf5r(B0P=9u z_{-yF?B-E^pQJL?Tc&uYB@75Bp=u|kz4fHu@z-uFhHdU`iZA~oS<-s5%6UgVg>$@` z=LO*mB%tLljF4+c^(FucsWlJwcAU(($ob-UlCo7o?s}tsmv7f+{mNF&l7H0l@W9eQ z>#}$)pk3TMynT=}TQNColiU@>!{N^2b}!zT9yaR!#AUPirG@Jw^S0*;R4c zgSA<$n4mu-y>WiAouzBnjcsbQs#dZ6{D7Ty_$z+mOZpX*k0|L9x37i!5j~!4wAVCB z1p=rM2OC!nxc1@6ew}}EzRARdr^s&<3Ym{s59l>yD%X04-q2jzn493EGyV4!H;Aoz z@$CiNJ$e{0rTRha(H&Ub*7p79n&>Lu zhEXqov)NmuBnnhg^x9kUdC><+J2ETf#ub?$h&yZ1z#Njq)2#GEpi(kI42yb z67OC1!ktFNd$1GfMcvvoPTFrJVJCLRPZ_c?cTD`zH>imR(Vh3`Wn7HcyNOke&Na{C z7+f>ZpYQYaEMe$8MUiIL8;BZ`wOfEA1QxBqBkQ#t5(3@|gH%)ok3#P_X+#y=LY8oY zDaTEEY|HRsOAxcCq3--4-B%)9VWUZCJsKH0@I33PiW&E}Yu#VF^-ou|pT3TrX3Q(w zbm1*khqN*1*XNYiDPnM0CyLAiaU|xth8MV!Ma_wuf-3PD5K}SK>N;@Ju&Uxx46OZw zfwOFd({W?UKSIAzfVC?C0!AKl?!Ro3Z_sP5SgSPslG*s@LufnFhW|+e%4~5cq3l4i zncaS4(3@K9t#lQeJM?G$IW||qd;FXYRubj zD1Sym-1c%103)Fi}b51-o$;Qz_L(5o@)UjDaj6^v% zt~|40`jCy;aj06%5~pndu#hBD@DeIT+cJA$YvNbYm#T}p-i8OuA6EAKl6I-h0tMiX zW#}gIiV!UD#MJHK$zbZ}C#bH@_EDJeO)-`47+-n2WqWQpO@Tz{m}8~hx~NT3K}PCU zJz4l1Xv5^mm!tDJ|E{IDR4pX3WY=En_u-K?+%3e^qb%o{tj-}9%!$%n zO-UN(-rFWl9C6w{FKeeXp4kFc8h4{`koo?efod|+{s-x!oM4HlM;&;5WZBpEoskpg z_DxP;0is`tn@EU1BL|iujexTB_qDw`5*hu;x28%J_!b2eh-b{!hO_^jf)a2u(OU$6 zjy>%=hyt^`U>6}+dwJP_m?TJczPA6lVYpfx4g;eu{qbUOzR7AhqTVA1(WT+!tnFufD=k~cTuC0nizPz_vHjU&)O9a3_uN^ z18&ZgavXE{YuH2>Y!4Z`WQTPpSDUxviE8MPuqGVL>J4g$3MlH8!)y&{of%$gb*H{Y9%~ehV)-ZdFwBHKrmPv*fH$ z@em490${_ z-;_-r?_W(Hw>6;f`{Xuc;!fz;H}j?sb98K2j>oy4w1@O}^5W3Xe02$)NQ{Hd2t6;y zI(kv8lW`|ii&#o>ZyUAgc>`(MQCIdEASJd%>K`grA)%-Dm!qQ?x`oj@FsJ6zw2k+0 z6=o-C2zIeId=8nQIeoYCsIskT3@IdL0=Km92niU<%Ve5aOxQMC5Le#16qVnFel&vqC{@9{cS~^&pC=F%M0s@oj))E0i|bD z*0c4h&AXTHYNDxGEz^4QJWx&o*K zdFlJBT8U(w<4R#7(z5|+5dqBM=;Te0xPtD8#4?}fC&vpaC?t-J2S3!eX!nL|pY~EC zGbqthz@dTivi^GB9}iF8vc=Z0aOtTOH4++oIoGy`RJ$>#eHy0AL7 zG+k+nZ;sT#C2JoqHd-$>O+qf>U_^*#SNWctTr`s9Txj@I_{C!H@Ne3S2&!LrjsIJ~ zokqIpjUDC<%Fb_;wy6h9$9;mFvE2;btaOrX5B3|yC<`gZSu3#^Wop2 zc*(ENt1d@p*O>nPEaauk+j@ZrwX-48;W{W|jk&x&T8sSFl(&iI+DA_hr2Eo}=7EaV zkT1ezkt$Q2&NVgp%+JrQV!b0#=oQ9L5W;Wr~A(%}V3h16@{4A`NPsZ7opC_a59=em2zsl_mxi(W}U9N!6 zib^OtygbF-`EDhAJ6hed6~@>?*_LNa>PjYNE)fhFc|YT)@6S!sIV1|KJ7`~hiz%7? z@XzebUy%NG!nk#>kGRd*Np?XBg%B9bF-%ctPmdlq-err^Vp z@s{#^e&|6aesY=^mE)KRZDF?|BskN$l!=H>qfU{leo8#iYJD$blR~Rr=zA6w-y2QQ zMlzN8#un$FI)S6rDLYUz^MjGSHoP%R7?`h95;t=dJvG)2?t#P#F_^!P?^a&-7Isse ze6J9nZA9e&lW(By)mvMYm71^bJUe^9e~s$K=RS2=K(A)I!X>nBNVUwfs!nI;854ZF zd;6DP;t0S|r;qRZ@{%^wGGrj{bAG|)qW!0+N_DDfagQoSStyb0RoQkDGK3{&qdsGL z-%-DXc<*42pzwx}L&kK6!2jxdZt0`vC?Bvf4Z0CqS95jun|M7-9=K&8pxFUvXx_QD zgpK){3bh=Z(`Q+;wL-%Ep)g9nrd6tmLazgVh39;JFZ+5me`vmf*-WWeY>Dzu)j54L z)yygku7r0*E>q0ba zNHDU5!S>sZ2Df4%KH_pSpWn~+VAZ%9>qR z>zukagp-_Cri}cdUh(nHhUc}D8dN0MU?KZ2J+J4tv*)oHSEavP-aW}+4;1vkqeI>C zACGUl!wQbqnMsSc0e-}j!M}4=?`sKeYUZmh4-b-$5Jkf>c z#7LvSGIn9k7HgCwnuKIx&3u}I{$@R@mr3pEaY?(;84l2!E&~Ump+D8K;}dCIRR%NY z`MOhx{Ao*MsxmGmYPlf1Z$=Iu(9@KHrS{+-RI#Phm~%B1YyI4ZwISiEY%50%Z)`x8 z_Pr2F2L0*OOVoaI-TlrnjnVIl2ZgJ!#^y8Y6}+nN;}`}yEksJHl9Gbt%4X|7A2aXm zI^i%NMsfk z*aiY31}*T64n(5nkK7Sv_as@q&jSRSgPdzQcEKf^5j?s-m*@3eZQoK|T&Aj#57#FQ zxH;%$f{1ItM1uc6w--2rl1)jcrFG5MGz0&WQKddjn%x4`*-8a!5 z#7CV!qB_I79GzSn@T0a@;tn&dbro$E$#jn8$%+(~K(RovX@T<;1d9Q>)Tk`yIE$yU zL+Y8&qBt00hF&D{#D?Lfq*To^WJTZ&N`+*$QJaGN_qJ##cz+`2J)O%+sJQyJl9*JK zqHd}pISzCDlq&Vk<#SPr_yqma-BQ))Lu{v$IfKv9&Q&zfzj|e-+PX5~AIn*8;wqTkQ`wGjqRiNCuLljHTbu0b2bq>2294U zm0JFVI_S)Z*ha8PoqOiZoq1L6kUH*2_jO)66GJad%Ewtx@r_#VZAarq(y5H(;{%ds zlRKq*eSR_FSIE+yn7z`2J5;$%7{i+mGz#a-_Oc~G$+&c%}alYS&k zyYBPik2U6+ZHJhT-TxT8<8{VGEh~}_YdY%c#xPoZjoZrXb87CpB+uFg-QKcB#jYP2 zVeNXR)0+Pqg((ab_>S(lz<@mr9|qOhB${by^WI8*<5NU=Dtu~2?6l z_hDFF(xg*1_)|T+wL~Wg=ME??=g%VBON{+iTe$7|;WEnwQHye^OUXM_?z1_dr4IVE z#4759WH0iJN&VhHz=yz-4UN>c#xQna2LE!KDT1;9A>KyaJgJ(8^`T~J--4eu|AssE z-k6T}3U9_SyJMOp47H3+zdZExQO--*S;O#S_qmETd_&H`8Q;@5?0;rSFyCg}+$V|i zB~pU}9f$*07m2>r{NMufLTEyU>cuYMIi-E&8qQS}q+6!i(uHkSi} zOY9M;0>{=Nwf6nQY^6^xsR(cFDb$XwJO`H^Y@y*%~td)x{$20;J7Z7b?5+OEC zS!{EUNn7jEHimD0U!1VsWT*}~8i?T@oB&B`uet^`UGD$!?-GEKgvhujlHl)D&76ND zIPEpe4gSvK`4fs7RMlC$8*TI0xnvC`!v2N+z-RPwQ_95Q*qXC%zDUtQw0duw^nT&Z zb#I?n%FW$W8cMbp2eS|g#5zZuYd__br`?0w6v|^MRyLLuZe1?2F~pCvok+_3aR}-T z=G=x+Q1) zV&c4KTuXM)n5d3HdZr=RrQ3YC)ExJ7SK^{L(*yClV^zJpe=qqnvv7t1oz%%?_kM*I z(5l}z9&AKgT$$e^rU_x59lDI*ih>YWl zii~Z>D&1tTmjYXoL2bwD$f8k|w%$|TfN;{3IsN^D+c_=6MO&C8Tk{0Y+X2tELvT4g z;C1$?A&2Zf4K9{f`P$DMQ(=^ANUH1bJ{K}BCn-&YU#(v>Cdh~d>R3_Pnu?#0DXO*# zlOnTkdxws&o-dyhI&t4FmIRG=>GW6Yf=J-DFxD=wfO^Z@R~kjDv01)BjEUJ!- z(|4Z5Ugx6zD&%c}_p&-Z>?hR$KLR)P>v?88Y!MJV@cR=U{_;>ec8q2{eW&c4zvHgwUWPu>|QNLwy0)*Mo6)QYfozGlv$?@XZ?#)M#3;#ei)F6o)A-z z)7jBu2=!5bl7DlD0Iki8?fSpCED_y=6xbVjp9yMDYo|J?2?6V!#OPynBqGAl)U92p zi*%o3J)A}M#+0`uL+g0PIpC%&Lk1!9XmSkhv~zGBw)7{O<1=PO&S~qoWl%=&mY^V` zJ~{!Adl(yoE`5xWaHwzG0SeQfQIkHLI*7N~=4%{h4ISFI-sbo5AttEI`d>*N()t^P zO{_<#>cePza6^CsW4#_f+a>=OcaP)QWVya=(t8v8pJr}Nv}pP+u--O#4)A|R^mIOG zVqm>wYCh5b&hPsR7>eI5?|HyjA>BUdYXprX`eLV{kA&jv_oEXu8Zg1~kZb^%9^~R@ zX)M2wXEAJj8?{tH*)&ASl>>O;V-w||%4O2M6|zh#{Y^R}-q{$BSzqT=$?SPUbHPZL zQ=_9AM`{7`X-=C9=$L#SIIY|b1x%sz9`ucd?j2IlqNPbB&P8c+17(ZfY}QG;ufft- zxjraXpC@N{P9n9M{_3L3O-tkdrz%Y>%`EPA0Q(cZiB~IC%q;#)d=jIg^h#h%jSt^> zJ5ins=}0+%hokJB@TXDkpIr;bnSkJWtQd+r<<#>z@38w6oM?Y_1>U|%qY@M5K*$P1dN+-znK>qM!0W5`8OC@wH)L^m1 zcG1ZNWYk*}g+D>k-N(x|ZXWNieAoXB667pGk(%|Kz1+OP<@s}Qw424@S4|fuz&?vU zOs&70z&x}}@8{C}Wf9tPXkYT-r$Zu0E*v7)xsZ#WA^laYV-&i?-;^@dB9rx>AH-xo%Hhl0ZakO?@uaS%l%1!DvefLN4`h4&860Y0i(u6> zjBAbN8dx0I7j?7)y!7P9=VJA_C5?gjv1$DpW9(0$&LVHsq8}T$b9{pk#Y{IjK0fNZ zSa}GP{W)X){-#TNP0IdwyIQyrM_44h6CVj(fl0i>QYDux`CNJFlt3@jCB5wa&d6j` zsVbR>N5CWc%5?n#1w}hGUkZ>wM>MuQqzu?>y)PYRT9>(S1AcL$_&8Y2jIpL&EQ^zld1;W={SBKm^eTgGt_??Yy6>7(1 zJfelM5MX4U7aXo%%IiP#34|24ul^!g)B^GD;GVLA;KPES-f}fdz87BQT_ygy*)U{_{djHdNpXGi|GZY_~4 z7T9X%e?fRtZs=l=F6a4}oGK(At)=;EJ5$t0#=7dav}-9(J29Ex{*I;!$OdqY|1}M)F~_y$;s;8XfcDT(H_)1H<^+k2!t!jxlxwsYd={D%H#Dw1U@FxgH3I zblcckP|j02)K^r0Io#$sFT*-BZ||Y!q=g!%8!Ho}=P9Kg$rhWjd#$p+>cBDcsta6V ztW?dxLE3qzYvaOnk;bG~76uz!zxchjh;#pMhkEU>dJmLNaIy{y46(hJIs*~sXa|TT zc%%)CnS^YFH&YCj%bI|D3Rvu{6%;Rd%yTu7snu7J$?5pzh(m2~-8e|j7C!1Kk7BE6 zlZ)Yc;MMW`Z@@N@Ws7NYs(=)}a!3L=+^M;g73bKMkpj?$!X6ycngWC8Q|mxs!pNcs z3lVIq)?ge8d)=y)#eATYtE5|KYl(?zEFv+``3#NeE&$q1icvNe>`=^}t_0*#zly{# z3*Hwjl&J8s=bgp&^WblkAk~XydIFDUigGTy6j#rSU%!q(@?+wtm1AwyV553Q?vXBEFx4lQ!)>uXN@#?HSA?)XB=ge4`7bR~xf zz5O(v(E3>e5THmQu{zBB$qwp5+0*~DPK3cc9ow*=sF*|EqhLP@EyBVbB!4)}uBH$# z??%tu8PSM-Y;}{#ZZhdQAsYpJ>Bv{=QCJnjPA*L+Jy$fowVTF2G#{nQw>Goev9nOX zZA{o3tG1izfN?Ya34h&fUdxCMWwdYB&)N8*m}Dwbon$DqOQk{9H93SQ{B z7~5|!VZjt$N`9p1;2j99fs~zq4bZL?kn#5kDTV9UtX*Qg7|fQ&GCnV^Mm6e%QpbC! z#?Exufx@%S^g15X$q51#_|o@|S=Axb|JfwrsmU>-!gfbs>N1%|?=?A^3LPV4*?UK6 z)~K?!g2Y`?B{`!CtVN49ub+;t+8`Z+i&S;pH9Rq;XU!n-)j9XN@2%SL6h6ZBEC_H( z#We*+dSI}_S_*PTJ!J0NR4SM+c($VeQ4GM@eyEoavEh0>G7MI~&)M-uaqAv@qDjNb zOBX;(4uXIkNM|(al(0ZAZ;MmdQC})o`fU_^zq&c8cf#pck_8NoG#8{TEO4w5#T(Bk zonGjaE7jWbmQNCBM^`T<&HhN)6H9_1sNkEL?C-%Cpo$&OsrfIYZ6#pS$d|uDsuHAm zauyRJw8z%yP4jviI{l(CX*Xx1_(313nEXGNYc4F)>~k%Y_BFx&LCc^GMe5W?>Ij1z z(cOjac|iA1Jm9VxRq~LNepUQFoAy}wtv@DPRCKT|a%s!<^|%5Tt_{uVNU1P@(Bvi1|*(6kU2Sx(OD zsm1dGdW4vVuXjlu?W7p?pd*js;15b|NWH-p1GDUk_F21YdKh!!?F)gMf+@m4RPa(f zK>ctzHF{J4_3*gAywUfqE4*V&UP4J{^rNk(|EKzf{jKE52ASE!Q2};4tbEBGt`RA! z_o2RTrSRO&Cn`UMU~dL(luD#&wKflYKnOPN@nu_}HEou_5Tqz|BA4}u;-XuMRQ^p7 z@(7+C!=0d))lVpms)3{5**eG2S?GU>foV>jR6kTT>_04pyux7RL)NL6Dk%uHJL%+6 z^QTiuY=jcaM@mv3YzmI@3QTLz$|b8HW*JRgcfPevdSuly^>uMpwZ`>-jBx1zik59l z!R>jy(r2grurH*^s&)KjtIK^IcUu;ogLg`;wL^8-s(I2={{b;g*pUK9&5=(ZCKpS8 zuD=e6k9sx^{8o5qy2vt3_WR{MORKTWLbf9`K#7NSgYsnGIKl$yMKTgH8C0ST23n^y z!$jA;Cy-=q#L*V^(3l=?rJHiNDDa60ZVI0Iqs5E5Eg{(63cKvvnf0UzOIY6O&da4{VgA^W z!$@7u&+=_YwP1^Z3qCfXyjT2RRydG`0f(_>Cw>U1f7 z-nx*J7_@n*g$$%wrML3v18*Km+*M%ga5|JBC76b`ZRlUt#`q|H8b_EaFv79_bj*6b zaG{tj?6e8j5+y@;4vbRY4=-PSeqvw@@PBk<&*CjD`nt-(KguheQyJP8^RjBde+AcT zXNJ%r|0_bgEEi-i0Vs+k0SRX)3v8*I)*F=#4mPwuw@1=7d`lGLm*%(t8Ftbrs*#`y z&~rBfPNG7?O3Obz{=s*nkrci89pa9;3crOHZ7lAcK=3%hf=zggOE_3(wm z^38{DH_-~}{)R^JisXm=5LrlDF!}ytm#L;waBGFkbhB9W4=Cb1_LMkGqyE`TW4>w= zGR`9XJk0Jr>^xj`R2lcW1!cgjt+U+@P2Z?ljb2=ELvVkvI3l@Cu0aEv7y4+*o2C}9 z?##kTLe8wm@jy{3*U$WHl^zeSPWPC0W0?>X8oa)-_9jZdbnH?E$P%2V>w*E|6jnB( zkneC)lPD$63tb=o=*IbUV6PO~HL8DZ$rxN%fdn0A+LuXka2j_$Jk3d?i*IZWkLmud zzVf43&wG|e(ZK}jw=-DwO3+Vz7~@q2n+6uc3;RDUERV|>XI=KWpJ=>!oeuvwwt-fU zT1fB~y|ld=O(%bdkWqVwoM3a$Hk9hGpWOPw%SJoac;?Ir_h$;7!0xNqXbQ2cVEjZ# z5?I>j$dnDwt-Qjn6Tx{sPdPMqef1+?FW+9A>tg?rCPH1A5SglIRgH3pD-Vj&Or_Ge zAKy|cSIz5lFve$JY}Y2RAk`eNQNbVRQDJR}7amNdDll}P7FJ9v5S8}QrjRRjVMhA} zRH9Wc_Dj5Gj1{F_)3>g=_fo8CVqy5a9xVTy=T^}(sR%_Wb*!g`q;qLw8Q>fx@qp+H zajyAt9!L+=1pQj{qp`YhmWU>6y#J8%+dXq{YB&v<(vVu6xUj7>MKme0m||f*{^BF+ z=^4{s|32091G>`o_7Fs(l@DJn8qK@aR5XfQv^X#9tsU1AKG3znY}sGlqw9TEhe?E^ zvM8h=cOV;fmb`5q4g)Oi&YR3P=gYY_pCGE?%IZ5w4etm@6WdxC=fwsj#k$xj@;j?J z)}hk@Doy0*GYd}j*rSQwPKFb5ifkv3f*KOHH+U!M=?m&w|M}r%eG*6 z?y7Fdrj~6ij)~J$N%ik!g3{Z$s`23%W9v6U(4T@=DOeW&JcYPv zJ4gI6AGZ9)a`|Xp@1!ZkX%2wOPLbt2%pZ6WYCq>n41T$wIwbr*Qp=9+&g7&2@je4E z^-Lf}CcP#=y;lShp#)pfvpv?t0-C^S4wmS>FkMe=|=#Kahv z|KE^;Hrfo5z;1seS^&vUJm$QqIH-4%6VcA{L20v_5&*}eD%nRblR@$>Lka#@lD**M~eL`G(mP9bzaNeB_Eu38-x_~yP@ST*6pF5v@ znmGWw*D!Uq)KvEZ{7mI9D6^zb#Nf^rO}J`V6#Xj;E1X5B*-Q+l+uT+d8WJdMUZV#X zK9JoJHRA)25$K`po(h-H6MkYo1E~XW+_n^h*`h&Fq{fuj+PR`ndKo)I+9J_r~WiM8~UX6_IIrwz_+mI!gDy|PaeWj zv8Rv)8~e_x9o9d;XcdU(}Jg=6Mf`CyrsnTn0$ZBaiA*ALJ-37 z*MB(L$I=2~DW8x#RdaBoMOFn=H;VHw20AZz{A1Pje$v@1__2$m>ZBJ zIFMv@Cta=c3FCH-e<+g&7h=`r!K4^eq*}ymBAnkhPTfEaIK6`f`2hOZ;b^C{~4}9Xfabpzntw4Qq>u zb^X_nJ&R<+HPIMN;cFp84ro-5t#x*&%EmpIT zrN}+$7m8ebf91a~t82!S#uO1Z7~hWXz6;2?r5?qu?t(4pT0*!cph5jZD$Wio#uH{p|>p8;vm($Trx%MJ$MahAnV8TQjiv;v9($uN{t`%$0>q(wl>F9!4{C>F^SdN9>JnHvhwM}hYL9f z)9d`*gAcBK?Mfqd6K339>LN29f~MV6+NbT<@d;3-WrMOG23yZJK48@4CoB!jpsZRh z1mL(Kj+EWZo3f&R1&v_?f7SQos6^#Mwe3Y#Py9U(1Fdv){FP|F#EsmMs8bR{y$VT* z?Pvs))a=5YoXBEnguTra1`(&)#pTFjWvyVb2ni*n@aO;_o`9g-M7yFqZGD4ISyza< zTk4;3Cs+!MBaow2{8Mv#VmVmE$iY*doBp{5O^#eg@V>6~!tI^5aiTn2xBkEkMYtei|c4D1U);9@s zmSk^GJ=8n(#vjOkjip8q^#5GoHW1cR zaC_`Zk*qc39~5d`T){u36uL!QM|{0xOUfTQGz8u2M{*s$5JeUZXR}P^pT`IFL1`=& zp91B>4ENJI*P(qqF4JP^l4MavU4ij0plcV2FN?OMOU(UH(ZqyQbofsCNhmyc11lAq zR>~!5UZ{EEjI{vNjAG_&n2siD8-jQInLNdX#T~ zw+Wv0jOEy&o|t*bhr)Fr2dbrUXsxtJK39uVu%yBus((oB&yB^=kQB3Gi3dCZTBEf5 zzlXLW|9gg84Uau}a@hXW=TjF+9dku=B}RJSiSz9gPX_DG-s5UIk%HDXaHa^)j?ge5 zm1Z0l+eP;D5>35r>tPIS=pESK)O9P^*4kfvDM1V!*deoNTL6Wyo?VLun#T-cg@;tl z$G~v&9N8qlS)`UHX89H4)pCr6K+uaT{)>)>0ksfYfjt*c5f{AYkHWNv>wgxNI4N(i z(+=_p*_9?EYQUFv&w&ShzdSO;q23Er1GAnMQV;pY z=_TOd+iqJm%xU!l7!uJ{2)}gZ~b&9ji0UHEPV#G z_G5GO(}rZ^E~^ZklZwbh!gcOg-6XC#`TV@Oz$EHbs?A*aFrx;D7K1+>HgL%sI;r*S z9PSA_L>C|CdMKo#bLJORT{F?u*jclSV(kZ1S__arbNeJdIH^HrRd-ycuGu%IPdABf zxDe~hh!pb1BIe{tM@k$ywuX<_;jp0`dx*|@4_A{+1Hp{WUCcOWkW2<61+?vn^yCNS zJ6Om1vyz~|dJXNz)Uz0zkuRwT$S<8K1^t3%0NxNw)GJPK?_hu4k(?U;OZVLSK6*u%S37^m z%}u(6o1p?G0BuAC#rR zQpaAQwcIC-OrK{540&1b-Z-1+eANT`)Y!h*W;I-(SO^{LVB*C`aw-&&9vHW9DD97q zFAq-R8AkPf`qlC#-7@^P4A$31BL=hUSJns`XxoNQ?%EmL9Y-H_xcDwl`R}52&Ws!x zM%a?~Zy{8Jyqt?^-Ukz15Vj*KnKcqSIBMZ?3&D+2&b9Y}@TZ&1#)|Iixf41-;yP-2 zsh_-{EPW^f{E4jhFh|*P*ebD*Dt8YK{?T}eO>1h2n*IG``b^Z14QP4-CyjIuZY#VQ z-JN4!iO6pj@34Z|@z$3nHY%tpMZfS=2`%(DlA|?z(`UL+PZYX4=YGG;$&sCsBa@${ z=e_XiU{S-By${3D9i5`X*OLev$r||_qTz|c?=D@kH;Brgw!uwDFoC2>cgyDW;*o_h z_O;OXqN?w<5v%>)K6F3vX8x;kdW_HYtXN^VB#D1VV1!mMdjMS?PPXL1afY$?heRJq z#HX*Ha+9$VeXJ4bWy&T5wB^_4U+!yJF~LdS64^}Rp-{$+Jw%d0Gyz;w>}^1vnfedtne=1ya;9XP*NCdTps%s40a{ ze{C0h+;kY19nr)@3G;NpkLvlZ(YWpUUa%WV_7S$|4q3cmQZJYL zC0y{UM09Bs@twS{-ldZ{`Vlh~#V#j{f}o?J*G0F!f&sza{!S~cB`owSb0&4ig{%PWgzCkr6PoUBD5TMYJ{*;zHs2N|!8%-YDnuX~Cydni zO!EmW&Y0)_Xz09~UgtT9pB<(rRNUQ}cHNRa=X;Piv|BrwFKrz$0GHfBHhT5?)7CRz zQJRQBt!ue$ny={(yuh@mWrnV5IK$<=R?6$rx7;vx{o*1(qHRZ^%YcK!enXLI)1+K0 ztwzxJPq*i;K6~SJ7W99Qq`t9+-9sncmRsI`_gc+p*&S&Bmds0NhM~Yku`y=CW|mt+ zN_+9X(X5V%Fd}(zL5hLuPH3TT7t*L$-#Lh1pmUo9Eh5^@&vzHQqWUtL4bEG z@@ws#U3H&?%$(jiF37PTGn&QQ)%H!v{2t?dMc>52I6g=+U3lA^VMd>)N0#@-;S4)c)74v2$LHyJ@f#a0Lx#K4O104Ow%Bu{g0dY<> z$?Lp&1n6zcV>}Od%J$?F8$`0&P~Ll>;|VIuI23qvbkI_}f`rNv<+ zSaP5c?|(UgjaPTv3|5P@xxZJBa7EOmjYaU>MH||qyXM9G5iG+e4FB%(wvv#PV`pK$ zu`hRA&?^#ew9I8JD?C8HmtOZyoQd`ent*^ZKg7lqR{}N`81))9uB6t<$(HtyGxsU7+6pC3bNUFfp@fAarlb~Go zj!;J=GPK~nIS>nrqn+*ZB(WdL7IV;zUwPimb>J5vwAh4<)jDmV*|#}`Sd;RtNYHvd zJ;6fbFgMAcSD|$eIK|s+6J_1f8K2C%OvXe-_>iwcLo<66I)Eq#m}yJ(2>ikBZ{62u zBe{9s5?rI%=;1EpR8RC;v_}UMxC^ATu^FloPz;0~JFhS9c>}-FjTloQhzcI<&X4=0 z3Q1D(=@u@XKCY}R zV@utlPZE`dRsYb{Ti!RbeUFh09&#^|Y-`=@CS~&cpqKL=Xqt>|ar@aqT+u{AgBsSo zKU6#4+tjB#pU2s~<`?X^IZ?{q+r$G|It4~}1mkOvnEFm~@AtLK}eyYG?- zwzBAn(bJ;l{AON`y#qyQhI)je+*!eDWf*fw-~LA_;8D<=9MgGW8x1zX8Ta}QJ2yOb zT0x<<^Wpeq>h2dI{DFJs?{VO@D2h|O z0{It13U)E_7aS3Sf?b##z6qanyYW89&f#ljdI~ktBhqDXjdwU~TL%To-zz6MsvD0o zxI#VnU3x|B1=;Im7p?@G9w|sx- z-Rnl9k2ZpaxpeXPJiT3)QexILeWMCVeZz1@_*kzKbgo6A2DFMuF1&gyR-1J3Gg6@1 zZU*_aQaG1w7G9%&GCk?(X@V%qwN!bSTH;xz9>jyM%S)%+Feq^k9$HOk;N(NV0K2Laz%yG8%(fGoCI=Z-3HQAY)P?fk!RHfq|Lnh zr*hu=yC^=TFF;a^2}_eQO)2#_74H-RKNhy_{^JqCGi{6E35)+Zx^J{*wA6jN`8~(L zLs;16SJn{t+FvCSj<&dK0Ct4^IbzFo%}rJfJnnsi7TupIT2Pxg3ro;j!QY{Y*oml} z(}UO}YEfZX!%DnZAF&8Yr&i{ptdTR;)4rS((ERB{&pojYV<)1(sU{60PW1;vW%8xf7Y}2~>_#@i3a% z^_H$p8Db${;6Hg}1*i;+u+I0#BzO|fD#D^!FBUglQw(R;_kp0#5v#V()wC2N3bq2v zKoW1>|7@Y7(FE=Yx&-&^>2p)4o{+H25y_dyn$_Fy2YPB`3?+CM_PdXcn4^CqFo|!b zSR+Mg8L0~?3a~$pKG8%gfnnq=p-kg@lxM&p8l)T$gQO}r{;^)?9RcmDwn37@%NtO} zw#LAw1%O91X=M2E?NF+3hx8wzEW~dTtQbKUMUiv!Je>?_%;aQnP0J!XLhRbUno>=P@P=Qcd7*XJtrTt=|QDX;vokWgz=b(T@rL zcx%|#wu$~R(~Qbrgh~ROLYIAAZ|p2Me~9m4NV3rov7_WXqxyJAqw9H{Chv=?y=w|8 z9Ed=dlK2*8cDFxR!b)0r6y9yuFFe?|k(Sm1=<#l{T|C~i0P27GaZBbv!2D4Ck-vGy z_W2lFLc89vk~DY>AH2soDm-pseFh*owB=B|mA9E(UZx!XpX%E?{~2)kO1}D@5~^*^ zw4C@21BOQ1Uhsz7cbs~)OoO0rZ(+E3`%lAm$gc{R6@8vvN}1zF+nG83cLzcxHdY1DIKIyz;4Zb`>IE1S z{bu*z7|P~_z6SXy+D*ZB4MIw1UtAS~Q6i%@;@Qii4|cte9g?r;G?Wcp``PR2ye&zs z0|pzbMQdj9C88B(U0&X1g`s0HpZ``p@&om_qJ zKcd(h#~4&9bGeVob(6AecmlE@e9)R6uEq!o?M(t{bv7~;PL7o%?!Q~#{%UO^HdMK` z_|PgCUZ_oJ;hit0UG83XBR}0_HMT?rPkp4sud>7$Ith1=Q&pNu%e3OO^=`_Cso&}* z{W=58=!hNEsF&DNi8m109Id{XukJEg)qrwY8#sqMFnj(kKsmPXf2vyyAz;w8Oh5eD zQM{{<*Vv zd~8B|^H@4@2BOsh>gVCx-`M$XAy&fPV%&L-Vbtq}mbSNnif;noOGTkGchiaEP4EW+ zDc3CwiT+hLm;Yidn0Ac|5|<#&m(SFwy&pZFjj_BI2?>~OnVzWtdsOG@>Iqa+Wu#X__*vb5pt#BQ!Kz0dkl=l*O%jx zAyp~%ovZWNe-=97yKfG3)YAU~eSFZR`|J_S4>bOndcEKY!RTrvj-r|9T*V_h^&O-dxn9CDxg>mqviN&7m_G+;jPS0U?410u} z!4|w~ba}`Swc9p{-_yM(6d?}?H&K5>cR}ErrzOmp*1jfeZ3T*8KUyqds*#gzw=glg zzT5Lb=nwLOcD6WUN*e4mDbDGI`MgP166h8sLr5qro|D_(7`e?F zAExqPz%TNtN#yilBPZCZwQKMN(7|K$3;m1BIC=I5=W?SBzHMhM5cd!FR<8>5C4zh&^{=HK|kgX08QWV%bHA;Irv^|S1jpi_VJNR zR%@AYLCDyk8eo{Z1iIW$_ywFG=C!nTXBx|x-i;D?;9WenJDftun$4PAt2`}>ag>c# z!o|k+Fx)Tx^NrV)C1)z*|Igrcx;9bbBUznVf_h&gHrf+Y3C01bV@@1`0<#PZj1a)| zl&9<{Jq(P_4UkUmrZ_kXW%*{Zm@P4{eRf#t(8Q9f=!n`|{Q>-+_Fu9aps`FR98~s~?Hb30|P09RAWYidR%w*x- zN{@Z|t0+orAYJz!tC!V^-$Z($zJ>?$dKp&U(28X>pC>hhzH!)~6@vvFN+Rt>rO0D) ztzHN(b_mc=x>i2NW0_4aO>`S^41V*rl<|z!(YyrR3g1jXvWV#PA}jhOT*u?zpyXdW zN(aE0<}traq-Zli*8e2G>Ey{T^`e=Xc@-&`D~$^e^Kl(LMjwpv(yqQDCYTF<=Gl=@ z84K6V6KZLP_Zwp!*EChZtdKt+c^ESpB5ecSi>lEMh`$kr>lRJJHv!7IMQ}*0R&Dbb z)pi$~f*^wbo|1>My;SRd$|fv<{-g^w((cd zkzWhR{1VT1v1pq)T_F3WuS!ww-n!hCczN`mSdYC@{TP6UYn}YF3n4!D8q-=|_i+zh z7J#)(FV>G5VI_q4X~8LORIH~8>*Z)OoK z5vk}f!HH33m~DH>4#yiecn_({1_h?+=6tFrL_yLhZjyZ!$dW~BtF?rJ zVdnH#@6BW^qaQo_s9=?!%)qC&!pMAQs497p@lLJKb&`x-C)6#h1pTH0#C+L@f6O75 zZIu6>ypwiQf&FW3vqp00y>prV>_6&|+T*fQuE}lScet*|)r_$G>zB-ItPMs`GrArp zd$owOycw6aannaQBZnGg{AIziow@vhmHBDPG`_H+Qnf6oOEVc_8W3!%fB7tlgwQ>- zn;gpn>;e%x`z#nxJ$>fsy{f0kW5 zq^Pk-;Fi`H?*K1qWPh1anF%0!iw`TPR#To}V$nRz;U{h2c|A6?4tNlcjzo$QPCm5| zLpmn-;XEta+#xeL4m=0wPV1m&7{GM)`onhbG>GI;+wT{lMZrNuflN!euTr7&Y%dek z_p5ojsXOki(wJ{)yT6Edle#)BH!>86v@a@KDM;&gfpGq{85c z=d9NY|AyONs< zQTtLPlstK2OQb6FJ2faIV9I<`ygX{s;Q7I{7$RhQ8l+9uN9sZ(SogjoZLGI-{Idj5 zqyX?zWdKlqDyLmF8(Y8gJXr6f{4D+B6ddU%wVfP&0Y`V7+AHUQxGU4pMVCRmr%82i zJ|X5!AtB4@pwWaa109+UX{=Ur-CO|PvK&rYx*2apM6*ntmZ0gc?u=_$Xr!+4Ff|UP zxyJn5mLB&1{77-Y_!fGy`PsArjH(_aEgXzFWzzFhLCOx6O%k(-9kl!&KNHLTF*$I+cC9$P zw4DPkhupIu+r@9+W@hEmc?&86B+=Vk`;pw#y1|9Fd~@DisA!_Qaf*;kE6{#6N@!0D}GPf2zMaren=m86Q;EcH)QgPDPz# z9jf#V1$AM?uuC{5j~%uAz|&CwWQn`$%+MRrK@e>PKMBYR^C?*RNy=uH5UAt#q$ZQ5 zWz%KiOlHDby^nCzHZ{Mp@6?vuYh+azJdf2>77gxGO46#k zUEU+Yr|kk-rXPteYx>zY?-rzLhCd>no-EfbgS>X=g;oOs8TW*SKo{e*jvSLHjiAm@ z7i>A!@4$*=Fy6s!1z8Y$0?N`Hj$JG(PD^F8Do&{ePze%Bv2)H7n0=lRr5H*ou%JsuM-J+p8rceDovJLsdd^ z3AjM!QBgt6q#aB`pme=stQ4_RHB7$2*>bq35eo`d(22vcd(32-Tc~uI#hDDNqk2$4 zm#%GiN-6U44D!`aUbUqRf_4p%Y@=vBHx%_@I|W5Hl?vx!LdOKeG6vPwRMgw4k{$#T zSII)78!gdfH4Q~#xxsVWzIM|JrxP%UCs$J;ZE)QR@wJ6n%dybulF)BufLX~y83hg$ z-uOp4Z6T&tik?{FM#z8;#EM_Y5+6mbRxDE(9t&OlNZG;@JE?IJ18}pvVYJ+lOkswp z57%I)Oc5woy3*y#3mTul2csD_qFgCq)eNPc8rWt{DP=kG9F9+pcU+&KTSn7>b0R%& z$SxnWAs@Qfej~O-rpDCCho35106BkputI;;9T$pJT*7V`BP!n}0@KUwf6Ybyn*X1C ztFmz8L5~IM$V8eF$0~aaNV|5{jNgQ@u88!vY;nrX%C}O~k%$2~9QEaqqwUiUR=3ll zeG@*PvMA)0<;mI(@zPFkUOPpdq+7NK-G$}2j^WhgX z;PQTCgkT+*Yw6JqTHkn|K@m@=B&N<*<=HK?s2)1=&~kqEPNv(Lm*Oj?-Er2vam|VH z=K}T1V6tXt@250prAR7;FKy+Or-HglGFzL3h7xm#%!#iKIXNuxhXW#bYzVLi>~j_> z*y`vZt1Q9W$i^%8$jogjMFKuSBOje{2wU3N-o;8)mUL@W!emX_$iH&|>QNxJZ|mv= z|HhxcVBrZb5&hIUX;MwUO~mPwl|#l~Jw}^_a_eo(=8aosO@2v2X3YbOuk2U8;legw zi!bwqHzbBUXDXV)FT2TJY|K6fS$~m3Mq-=SfH^QduS(8~@ll!&n6)YIpcs+YlLao*k*~WHt$!aUv%2 zT22UNxcQFc=$vt2G@^aTBI)8xA6UyTEBQp&(0RxUzt4!BRkro*f0H1vKw#Z44OGyn z{_;M4Gb}YNyAY0Qe{b2-xY3mdxT_G=te-$?d8gqG-fO;`4s62Lmu0-tg1K!FJ^gf9Ka;Q%1WIk zZ4nPQe_jveSa4pvRk>Rc;nNPUtnDbdLK8pUL#b|2$(57RNZnc6{3>W^sK!B_|hn5 zT}x&#yao7WGS?~>=JlF)@BUyU^L=5>wI`vbkpP1182s%rDF1)l6m#h-E?k;gI0)U1-Y;e?S zyAxR@nW-_O#nVgH_*e^rQ~^!lB59$Km9<*#IK70V%#M9BK7GB?HwqEuaHmvfEL+HpE#QUFA*;>_#h>nTum@nG#_E(LKZBe61<2LSSXbse zm?2h4&-ZB6;1RG)Yp1NrFLQEe!IsencE-lC7-3VbqyyPpIlZ?*02ybOrH!^{1ErHP zQJXSgO0))*3b5f6QZqk}@pBrfi>TulfN5B(DgbowJtuwkpJTA=V2%^N&gs~cJiojb zFJi9{O?&3Jo3$R+6*{PHia%736RMHrb|GMhTAw8`_Cce)k;r~K%C|*VP}Z@D zL@o{Y;wg**clzGbG<{wEvrszXaLicr$E0yQg9UQ0QPdVF5E@$=w@2*-(i#^WO+dlo zsXw{0A4WAFTsIRNE6~3R*at|=5e;_jP|t<`ZzvM()_p2NovT>DZ~kN}mk^ZD+#1EK z!Bz-MJ^8Suz(AW>X(xO7s0l&RsSnqpG}xf)bj7=8Au>ug641ZeymOUfmJ)h~C@~~E zd=7sjb)H5ra`{(VUmd(fV4m#zqcoj$F(@I?bvMoH_0PH$YLpL@wD|w2!1{hx8ru{Y z)7yB!VQ{RamD9B|?zkTKh!P%BFY96Sh~Nb=d{Df-MbQZor-y$3pX zCA!vbleaYPTADRf!q1~_Gah3wT*@F3kR9|fWZGrxihp@}8@6E#Q*&;pp)?}Z$^=($1L5??YDTP5JZ%aqF z7{DPirUZt@3>-de_u15p9Z#)$0%9~AvZ6yJKKuD|1Qc|%dmBy&QZ!P`kBEQuHcD6q zc_VM}JH<7_LBXCQ`1;nS>5wkEAZ;cdET(bS@I&`pk#arB2R5q5+PKJQ&#^^g3h_}; zJ>=GNV~%ENZoQR)B(dI9-t%Fdnohm$v=~g@snkB{qxii$+#*%Y>!EW2ag!#JDD+iB zLh5ys=fqCCaRx=eAcXKtPqa0?MBX-P`|+Tc&!gVT;K5}6#RZSvS07zNy2rM*9-Y2B zi}zykY06v3SwC24=(%qJAAY#i{ge4WI}-Hr=X=6S8-#rw;;_TggaU}09Bawebly3= z(rRcC+i5_&9iwv*!&*;(=`F~~oBlS*-Mn6>8qFRAfii+itKX$=n_*#!JABw3yAK*UrW&OOZDO zcxf!{fLYF$6IWWE{*LmG#;HjDPG;&_Y^T))4wyR#I6VISi5WG1wTY2J(uUWrD50^^ z<9m^+)SGprs_&UIbGJW?EX3l8X~=ds=gR_L1FMkv5UIuhLu^-$eXSrIU!=aZtwGGr z3IM37Aa67e65z;m*rV_r!SrHN(dQ~p36VTPM;Ss@yhk~oSQ@|B9i=n!Yp z1^J(9UJn*K;WJFci;f_5^QVPneY&j{iqJ1BUTGST)U>suJjSX~KFaVa>@=kd8RnZ7J5!Q!`^4R!E)HPFqLru=*_U{-5fe znKZX1ih;+Gn^ILUH{QebvOErJDg3qbHY7AYqA7fle$7lV05wR{4i>95cuV!o2+a)r7*Rq%w1X5rbA`tB1{WX?LB=1F^|W)#%uX|Kk5K^W`>+$*?;@7J8B70%2EHhmd<;`gLGaz?RrPmyvlLumF3 zWX1`m$z($T+ga$&vJst5`S01erKDan8cPuUXBxBBqx4DdEAx5MLr*}Y7Fr=vrX_BF zWRKu`MVOUxkaZ`{U-59rQ8za-h{&EZU6Lp>_lqQ-G5K+=ZB>KKL~+@gr;50l0Jcob zY+f5lzv>ZqC#W>qskHzNDj15rlQnApE9o(9g8bHu#=URLPN|aYp?c`<7!zWD3_DBu zqVl~OnQbFo5&$>fjhv)(Y4Vl;x$Z1inrY~(le|8*-1mPI)B|AF@%~=kzvE;##bvA( zeWpd1qsfRm`$`*l5flnFVII|n$LxO(futQiWTmCsR7V<*AfCQEt|+=8*wJo(#Dj$( z=+OJ{;!DOt626#pmCW)s&Y4h#nVLMh0sZ11f?fTGp)aD!eXvEmK-Ne;@vFw0mK--NND-vYav-839$Ef}Yo z%^rVL^vR)f`*d&C<8PQ&U+NrME&8Sat#9(?9IRMF*9XNk`hPaQf%lz0fM0-8FwB7= z?w#2U{6uq+-M!RRjMJBd1S!YXJnk9zet}pjVIF(pTdrjui6Mo6bcCNz%q zg%`p(jNh4yO=NqouP(Fy-~TUc#$4@Ug~Ir#-A52BC|3vPZy&>Zs-wSpPj}XJ!b{RE zEPq3Lyp#H{?1z0LscEl$bvSkH&Q-~#r_Wr(EKw7Y`fjxI#ZCKOKrF{Tl)M+B59X!f z^sRpKjD*${njXwav?^JQW_Qze%8E8MJMb4E4JU77)o%531rZG?P7~vOT_Z0&U>_eL4N-*7a2zc8%xe6~?t)*I?EdHeh zS^!FG3}rY%(fjxN{4}Fk23|tIEJlzx#oFo4QILh!tRxK#w-J(u7@wR_4SrpEY(oOV zC{M}!jrZfZN64oIAsvvXGFVEGu0xF#-*B9Rc_+XtS_B68Arc3D+E?&Mc;!(^O2+Fx z11bIm)Mk97YKQ!(rYT3*-tD6vDsgOcTx9dt4L05amM}->vX=wynD!D(*FixsE~(NT zsajoE`PpSmt0I1GlvA}12V?omF<$3+@bl5;E3Zu2k`W`cBA=u{Th&Z$93n{#;m$ux z);{ZGAu$Q1TJr@?vqYz9=3Z@U=QN>E(V_Paw#77&SCXtg)J79|;=kwsKrFMNFO5a@ZW7HttPN0J#V}Ok}yk)aTEW_D~e~($;yf<*;L>m8O%= z>whmMjb7!FR$sYVeY!}nHHsUU!Qm}`qsa>3Cn|ZRk_{Zfa=kCi2%(u*+v*;J1larE zR*>vy4P5&NLW@(|Ja?It)+lhI$Kcmw(pY3ow7{QN`Fjh1YlLktpT7s7Z9aSvrh(tX zofNGh)k4rMhq?Gi7*gnrw?>PmeZ^@&*E8#DL^QIm#2bbBCn%1l1kavVL|UCE0}s`U z=&1#`XRDqJl)rT#FMn=i4^1^k6(wr-v(%{FgQMH~YoB>0J{65HMv|UuG))KnIag1{ z36&p?uX8kdxAwalXK<`)@F!T~&%DZizg!*MDGC85LOJ#b?h~g^9pO7}|LQ|87{);g ztqL=YxlB({>jPed;~xPmQ8N9C81~;RQNbNMKfUC8SI7ng^fz@pb2T()vOR>I6xub* zHWVMMpAjppfV*&d?|dyshJ!0mA1@~%l4(|9hR3>182tKq{Wgw z>y}i%_*!gl_GgpgxJH9=1SeR!7L4EGsw9^r&wKQDQEiQM7C1CObMnm%sE3bQL;8n` z1o$jXRgo*Lm|E6A(18q`qkOFMC?u|B1>bAT1G5$R!j*3Q2wDBKL*mf8z08QwZ*XTt zKv#?I6UX>LLCQ&!^>oQ=s=vlp^a=^5w?u^UTBNTd5ulgY(hX4>q=Z8nyL0srF}rcB zoT5^jJKgMH2L(BMZq)4Ma+$jMv1)*=f@Gr9P1%(?1Sz{uAuXrPy6hKy!-+Sk2~|la zE%?^DrJ)7zh<9de`3}TOlX8IJQzj6Qd%qGHruT7&IaJ)fN)V-VrmpJ?GkebY##m#- zdD3WaopoC`k);=e7Z{|&8@`z*HJcl0P$XS@1lk_h=sAQl&2hhVZF(opFdD-W$~P&; z5|<@a20`>-D;+bMFViRJse`A=Q%ueiAX=0*$OU^sJRWpk7v^aPWgg>%M7~6L2oqDV zvZ3!`DWTJLe}OcWT>(_L3zXddR6`gu3gnQGmGM0!mj=4DUl4DQEasJGOYky&X?2D= z7y#ifgPBsV)peIJncfgki$jMJ`gsq}?lYKDbKR#b-ybQu$tW>ZMYBa%u0|&E;KBo4 z?v)*=59gkjX7(7hqs$^O0^zf?5!)%Bl4n2exy3~IE$|8PQNf*c+C2^Qyl|WNOtc>ZY{_Hy4&If*w;`kLcwaW{o26+% zRTNf+%X=tQuyZz#ce0i;w4_&=sR(X4X4Ne%R{oONZLmy14!+xgn2l8XC*Stb=(1#k ze(ZfmY7+Jn9AIF_9J90>1zP|HrpG!K$TSD;>$XbASu_mR0-(~C<$@+l$SvkMtJNLV zH=Pow<66~?i<$nms??7yQi(C`&;GCYRjCc+ut+30W~8+O+zuO1x}TWDPP(HXwP{6? z9FxL;{&xNp7K9UFP9$%b-mA_)s5?d%eb;H)aGru~1Z??zv1}1{GS&}+4Z5&mb&sY9 zrKX~3HQw3Pf|&^-U`x7ZU8MnAq>f!8@r)NO7mNR`g~lzf@r;idavQhyJ!Ubs=GdD@ zZM&&g7IQ`|&3w@*X`vDHsgI_h#SFXOzVhW4U$MSAsNS}KIdMso?K52^MBG2K$`?$J zn&b6f^}8lz5r;oqn^~Ik7ytD$1fS)HW_^Z|#_$)&Ny^&gNocG*bNH%3VY#aK!xZoc z9%Mzp;nAX4_qM?G%I$3h&98hF-0=^u=wQf(<3a>?^_|Lr4| zpl&XJ=s0N3|Hsm~2Sioo|9><~EseZlR?ccF=55LwZ6TwpEcqoDA@Ht~nu-^iWzBQ~ zIhL&`w2`ucKr)C*fEQFy(2%KBLq!}fC3JkRra zK9~1pQq{ny*jmd%hS`8`DY3KyP4a&3(6~$D5JMzNpVP(oE`J#!hq|r2vfhA~WYFkHS z4*5|i0a|pH%HxWnv6|~Cct+#@F=JERXt= zgwt{5Abp#@Oxp6t&>k1QtJ>9XN#99G@qIGpqgsu+T>5>Hz}hVyd?w$SKfkuZ!WoNX4H%<&#L?0n2y{tuY%1hof~xjE$5!3|Oh#W|a5?(Us>d6_Fvo&aM|Gt%8NXxj%w*xnDDz`y03W@$ z4gozrAwzMXr7z95!o2yhH+s>plkXkpGo$Np4GT)TmDn8TEii3i=x=hoa3!Q`@ zabitS_7d^(euLlYXx8kZ;e#&2RMVgQkhO1ozI}lNB9$Sp0IGF=vb@$Zzl1>+pj{>( z>=aV1dleLidf!yNicwU|qa53@ZX*9kCQW(Rbp08G0NH|rM{3Vr9V{UX4wQlmM?GY* z(N-N15r@w)y1f5lp->Zf;40st-9)>@otJQlm%f#lDhiLas@;A5IV{=YHCj7ba;@th zKFFm_ADE%NW8e@_(bML2oRs6_#bI6+M@c}vqg^$_)x4fyffiRGaxpwk;*M^*bLm$y zUzqz(#ntj0;{6J{IJ+|AJ>R9$ldL3V(Ro}DGoOEod=2KKfdl5psaGa*AC~Lh(RFAY z&lPrkJ1}Y8Mbn;FPYt&%7MFnA>iE?QJpa}a-FHSZ=}BcsaQ4O|3!;lQcdN)iVF_z| z1{QC-(pI02_F9ptv<-7Tbl7ADDrd)va^-!~7B69C(UPHa2f3|Q1Ei#at`*;^&$*^1 zx=+U0ZQ<(>R7igRM`3rqNeJCto4Bw{*)>`KH*`%3`d(vZm=2?Y>Dk8{Q3 zF1hM`-Gd91w#0W^c0u_r^#DM^rxzy)x5J!bo7i`BuNr&Nmr=VH zt83Pahv?ZXHiQO}j%9i#F4aISR>7Zee?N=hv!9eIn3oZN$cU1X)7ufkZ@5Uv*IO#TF`j6Ok{JA7 zU-5X`<+f$XRhw|DCqZkmd3tF>4_US$p-(^tZE6 z;mIH4;R%fH7H*4a9ph2^9JKbfQD${6L8ciL$zBer4^rd8ek9oIN$IVrB_{(lGM?T; zKL)DLoYT^P^jaM*h{QCt+BtIDq4gKjUWrYjK_5-L^2^z-A0rRz>CSuc6YHBEXiwRm z;n>BVS9U!MIt?9*hdXAVvMPt25bZF#v)b=5oHsHFs+WvO{fFzCOp=oHDkNJ(4k3#~ zxo*K#K|_5W9RyK*9pM%$4IeH51qHtp+g_)54eB)#$3{Qvc%7xf<>dG0Mv`2aoR4sd zGOf3nezz-k;tBUllq@lX%(ga_RKFNzeG4gbsm#-KNR@ai~lYd zo=&6t*M@S9`!x4XWqIenR*F0MWg_i%>t)x}|CnS)R!;z~c$IoTVZAd7d+b&hoJR)e zRy~AUS6cj_Pkxtf{8F4CORW#b-0dseKyHo~D7;35cfMZpm00qUrQuyWXJ%|_6?g|{ zYwuZ&i}4WS^|)a>w9e7nhQ_qMtteK~;p~Y>CFt)jUMwAzAA{dr2+XcHtqJYrP)@?G zwQnRo!9{PT?yS)+m_<_&<7F30j^}p2{5`-)xL4G-U3%TImAjznp2Hu=cCcvMmBcHA zMWBqT|63(jE)7igdBQAPF`)Piw0MpCZVXT$(Oo0bl*x_*-hBe7HUqr{CX7zeuaTM* z!kDQsf8R`NMB52Q9Qm$}0nD=Yc?%()&T8sbn;>Rv>8+Z@A5X+2WI@c&+DfM2E3?|L zR4g#p&w5q&J&l-{bOTNsty1$>*Bz&Po(#2VZye$k{5QEfj$FO0MaGTal)N+;U@V6& z7k~#oZJ>TuUoEZN@*_$0Gw>G$ zTH_0kJXtG14~5wW>@Qt(@!2;)2;-{>*lhX&zipv2ywnjVXr}L#ZY{{^GE)n6XUH2P z(6A}Z9ZGD36Ww-@UNt0vtATr7=Jd0sOT5x41?(*lOs}SJ#e>_y;gC)?d!)lBsWIqI zVOReRv?#>aIpQGId)g{;g#DRaBQ|UtQ6ky~$#X)8g}nTGHn!cOX?@S9y3NBZI*dOa zu(Wv^fp}sfb;sNr|L79mP>1)BdBP;O@n{fwy)TLOMYzEBbOtl{p;?6w#lb0`l9FFI z$-L&L&s6h+p9t#+yBsJ_W^dgFa#5jq0tSP6!MyhBGnX5A0l97t`{oLKpmng{F7n1B zv63V|_9FG*a$77#yV8189LCTDHg^rG%ktZHar7wtlzm`?_Y!|HexiV{1>U&DTW%c;zskeSL2ZfnPo zdHdk3xz>fApE6A7BxHERwOwJKGJ9+~RB>T3uRdRZt@ExvZ<$@9ZNCL|K8d%+yfPwf z0n@JzGGU?QDq4UBghKGjEWNu%d>c)=7VJDIbvuAXXMRWJjNY`(QX~ZP6PYW{>Gqu+ z_7&VD9_hAEKUQh%A^3rhe=`;sJwvO>-bqou>Bcek0#8O!0Ku{~5JG$$EenBd z-b-~OiR4B4@$B|j$%O?sLN5+ZSx#KPfB_{B%9(~1iPs-#Swow_m?^0#tc zFvv}-Rk=-l#&Kd-0h!!fUbOYldQL` zy|pl?Ui`<7=RSmMDV#_g9JaPxdKJxV4$((L+vCJVA@+*AvvT_A4A-OB8_$-MMpijf z>0I!aN~fPqQffS@?DiL1Nq}K1oLrZw%RYMrg(4k{gg|MXtZZo!7go@EJ!TMXppgLf=>@e+#5f z#GPzX_q376;~x;n5O8}pgbA|su_cV|vs$^08eVSO6V&Ud{QTA|lkF)v(?x1pB|S|; zez#j0wOoYfBl|_zN~i$z+$IR*atkkE^kj7CsoxfMzgsKT7qqZ1<$u2!2z{?mQo~9k zg(o}cOdLW64i;U(bqmJ-r6@&gbMt3I<0{x6jsN{~&vT!Bu~d5}0B4sIUezO0S_V#e z8ry`GQ+5#=vu4+sVMcVfjPEqVsx=BEj_AJtq;A7#sLj+iHXK?70UQ0zIbBwF?#%j% zn_}FD;EazB*=R~0UM+vPNnCQ1g!Q*0wv=(9=_p@oED@_G#RquGjCf=W`Z8YKo(oU-{<;V#R zQgvd7WsT7TxKdMDJwAWgR;!pZEE+;=`Cwdjw|V;1xVA7?>#}P2t$VZ4Ff6tW^MD%5 z7wXueS^TKR*~0ISc;U@9X+z!g4Vu&evwCUQr$B!4(7Owt-OCIRvZ_sr_I0-6Kau@P;OUt@ebBNu~{UFW;zS%D{UOb zWL@+AboJvqu72OK|3qIioDvdlJj<)oWCL?2U&md&bFiL1A5IHqCd#?OCDlcEk8Da21P|f zu5$WyoewKVK6&^!>P9X+ne5b4u;!nYd@d&>YzFH-fBP#NJiw{;n_I{12;PICt?j&$ z8g6XgTzV_2GjR-Wbtz2s#k!q|?&xy(8XUOTyboLn`GgR&mxBqyLKUpRO%oNHUEB84 z^C_1vprP`I>OXUUBo#UH-TxjJ1UDvmXs6+$1WFfE*fT#T7%hvpd`Hw@#L%XG?kfI4 zqb~WAu}j0EZo>>r3(va*L$oquc8RsQrT%N$x9@!3hXMReYm2rWTxnP_5?22|Nq&vL zAB{{7(T+wSpIgY??g(IH;$ z5;a_hFCrqDsbN1HKm^m?sodVLKGqF}d|r}B?xElD!)-0 zg~_%1-y-WcBhW$NYpjpZXe6PC3!kpw^yHn;t98Wmq0{ZCvzmC17@F7y1hLz$CB>d~;s z95pu7(9X*DGj`~jf6cs?D2BPnm++;+cSw!&5D6hryg55a78ApB{SNO~ep*chce;|6 zDZM2onAL-md|!HSNo%XIPf|%2Ocfp(`~xy}Yo^rxrsjvLFAaXOkzUS?UQ?8?*exc) z?4Rf(A$n&9EbVGap`9|Ps{ptsMjMvX0`K&vkG(Ud7;ypB+_YD|mC7za5MY<3njV>e z43H=#j=7TSFIrEojymKCotqC|Kd<*97Hr4mhK{qET#K`wgFl+++wt*wK#`b$J!B z-*<6uHkA_VL#5ng(UI(1)<`3a$*objFX+f!P2!7Y>@o~kec3-Oxl#E!Ryq2ZE+zMW z^=P)S<}O%ZvjfCg+p#q$Em7VhJ@lF4Je2134h-yB{PMi5U=E}Mq*$jgza=_f|B%%Z zX!D4-0;0O33?fxZ2b6~do`ri+SrQHQ#drX0<(!tUcqo=O=KS2!dyF zx@@3UXDa%ASQ0hr)RseEYk)7I3~i@5!7||nc&m)Y&-2Isw~PXq7Wg)57`*>|EI~}LE9i_7|V()qfq{R*~IIGBS<<2-dzs)Z- zwxZJ@F}Q-!0FOuAStSPq)jg1rQ6{WkDx~BNe8Ml@vq0=#6CKgFc!;|SjYdx8)I2-5 z6`=J0?Xqxlaq$$VaFyEI;RW|B(W_6!!U%c3;c$B0fk>b)DJ` zOVSFi{xl|$tOSzI9sldS9vwj#cS@OqaEs-k2;BAFE26|?h8E^6x7pe}|85gV+8rlnyn(f>vnoH4h zo>ikYu&4$>NUKtOd#`jGpv@4S%o-uGWU30H)kA8%_qK7Q=+l83ZZ2Zarw+&;Dx%)~ zAhn|{@9ImAdAefi0N|k;COrw+t~ueLi>H|ELxSC>4*w0eDQ7*qJEG6tWo-r*)xu%R zZ2T`B5)6#gInPF{2mM*_qn^8)c)w`ws*^z1NuZF&Kbd*`z@#C;^bjo!9L^z@a#`8c zKV<^j2(-5es?r?k*x}OPeXp+YbjJq2_(dVABz#flP}kd!q8hGyE!X&5i`UY7-#0Eu zTml05?}+4|@-SAPE5=Nn8=}a&p5z6O6zGi3&4|Qz9Rn1^v|8&NdDJikuo@pZ^haJn z!lyW3>_D4WVKCd|(SQDLXt77*)G+5+9Ym=F8uVfYwj@;kx?#`(=5m4zQy@l)treWA z4>X(W;J2gp|V@}81kfv#Jx!U*FI+OiJ$q7KGS zVBwzC`KWDo{<^l(YI`C@V;BB#(!^EiNGYLs4TfbEVqHRcH-m8kElE^#mo!2+1vSYj zWlr3jFO0C7i;UB+&t!Z-4ZVP2bfQo!Zikl0#oVJL$=8`UWxkt4cuSD4{AO`H`7{j8 zxqA&0I@sUfHE^SY;t6C&aihtgLRO3U2Y4)i6 z=s7TI?j%78yi8qZG;H9At-S_ze5c0(b9OeGakG`vC@K@HY{I?5lIqS8_U&`iUPv6H zWp9LwAZt!S$KwG248cx?Ck$^9aHh_g3ChY2Z-j@zp*PYigOjSTxISou2h`H>hkWLU2V&3|{>;lJxoTm(xxEP3nb9g*(4 z(hU?!CX`RQ4mn$Ld??kMo(L6oj-! ztEreMD0yCEFjij3<4tAsWUeo7lxoxnD0WZMGm|3X(e4;ISU}$NEOO0fs>6Pk_fM_? zU|To1fK}$=XTEfZw-arg>H8N(2rqdeVN)jBBu6n8errpnl$Rg}6XWUVJb!Dt%YqJo z>=Y^9BwhO*osV*tWa|0OfHnL31#}9v0E5QaY7HxCL?iO^=waIS%~{C}(VGuqxQh$I zNx`^)2;Fe8ZjnPOwna=B1`#N~F!(#iNy>E};JYCXxc76fuTj=}uDvdw2EA>gwLFfn zc-nfF%Q?^$v&|kF*k5hJbLi-E|JFN|V)#o)^OvG_?0_xWG;~zm*hR;7#lA{ z&n6!hkg>zEE%Pd@6Ips<`n^@2eAqvD&&JmZ)g4zh)9AtO^m*F?rD>>#f^n1`aB8@E zwPF?&+$dW%DA&2$uWm`1SW^y+O758D<)jB6uXVIGO4j_5amT0r8%Cb^yW@32Q^k)* zoKPxkN93-W0LAcAO^>_B$x+l>s2`$)eEyIBRBzQQA305a*rai-s}JeHqh`;A z2XI!^%Rjgu`66+xZQRUd{Qtogmh#3zT&jY~7pSGzaT`CaJ)I)Lp>o=*-*&;t=e%@aFO;1B-;wiph z8Istw5yI(j8Qt6RzpG@FKZODn|3*QR(=4UePo+OMK9$j99VwR^^rbsyq;Z#Y&UIt6*QY|%mi zp2IN zdZr*@E6vw3ukT*Y_j(WMEWT-O+Rg@-K3z{McQLGmtv&a*EoVV?vqdA;K)y3kV1_e( z*dRvp*W*DBDEsvNb*1ENtWQaGGJ5nx;|77fGLp6LC z!(Xkv0RXQbH9F}N3ir6Mo1WTew4Rmi$Zz`X#@Wrg&#VTAwX{vBWuUb1akrs-#55& zf$$mxSGjXP0)?XGX=;pnBHg*+`$Su{bES})y0dK#U|R-G%wRY=cM@Os)~zW*Q|2oO z=hkx`I_#AmB~9@WF^^Wd{%&;PZi&JG&1nH;4cR0ZZZv*S*4oU5gGc^K}0x@{7LPfKp`P| zpH2TP;xaq58;P(WIfv+d)sAPNBlfGn7V=1F!2i#2LjD$$ia9sgkAL<64GWWw#M z_Y0 zL3*nesEaxE|EL_1C{XSpdt=KqbongiX+7&4)@IgclDa8R+rB27MgiO|R+8G^+{{1a$>Fr7=KQx7&vWGGX%dgBOs_m?vX z74g`nGF-tPfVM%ZcAhmF^;#G=x(VLNZP3eKtpFuPSjY7WSsdFm zKdbGKt;DJNdR=+q$%|1tSH$Z&`h_I{xgJ(SC7f{!SlzQo`HqjQj~`{KoJ~B*DFH;d zNmkN6Q|-p?GSo06YLacxe7SU=f|D;QLf?jZlG>oss;K{^kJ&hV@FAFwLfSky! zf1>c4=hUW>D6}!T%C;R4v7#yKz-6+BMu+JfuYP?_7sUM80y@Yap%uQZ;8+p04O3>T zhNf9DjJ^;`Mzk|`S-L!W46|%c>+KC%3Tkx(m$9u{ZMi7WuTfD@jj5PUC2t)L{^d{t zx>=wSgc)Eek1H|vVMcxSdba|Yx3Le9mhjiN=Dq!)t;DLmg3cldl5k7GK?&eX*^^q3 zO}HDxA0!RF(#B9~TDOUd-(O8|(H>Gf@52Cp;PP?J;{7mbkqyPvTZQ3Yb^w6HU z#tZnVJMIkrS}L%pf4B2LhOoY1`)mIC(N^ZzZPi%~YgY1fl!|8nZb(@*v@YzX@8ybF zQ$G3GRLB5HoXGuYTYH`n-Md4Hbc^&OYm`NfrC3HmdBQRp{pH^g;OMYy?Dv_`!lC2B z&d_yu62EK@vsyW=c5e$5V8!RSj67aLNc;l;1so!|*7Vjwzr=SIV40`5Dg-ZQ>EbP@jl@sKSSSsCi>EPPrH1^Yio1Nu1wXXdv~lW? zjV1RI5-qIyu86J+eue11BnzDdO1rAH@e$I-5oH)}`pBSYkZ}@e+JSp0--?~uxJM{8 zcmNAy>^J6gn`=B1uQ`4%;7{F`tTo5p`b!4V=??Lnn^&^5=MpaGIB?zYB>NO*Tl@CY z)BGwc(Y60{bkN6sKOaRAb&Q9hiD8CoT9M7q>P`swRr|e%Z?`m9Jj1F2TS-k!kSo_j z^uIOwJz#UzT@+l|g5pDyaEIWNey^n6@O9=Fn7>mx7d#a0=x9f1Z0-E-#2N%C--v`b zU8CH|>^U;6@nwodZcSurq$$Den@h|c1qN&Ls?4r0pX#wPX`q5E-FEtCmxvliQRzF1 z%H^&eE;_5U0z3R?!&$t}S0UhQ`8sxk{IY>xSU=aXRs9l=sQhpl+u%OpXai1%t`{jQL^=k;V)h~nqc zmH|1L*)2_dI!NRxzDT*&*l9=GCy$S5wf@X=K%`Y$1Bggj38eAKlhsZXVua)NoNlGT zospGuJAIk{Mp3keNC##kifj6_#PiF_>^XEV<>eiXz-Rd7T;wC|(l>Ck(i|Ku@G-s6 z5aiyyO+N4522jUcT+d&)CGZz2b!h_4Kf<_WOTeV1o1EIa?8^_>79DdFlz17r167E?WpyM}ueUU#t`J&>$#w>nn_?o(2{$xC5B%trVv zK~~$*o0OFU*K9}8tFAl&xJh*4W&(W{NfsQ#(+KC{7noc{+=E z<{H5@b;kzLb?E#b*y)$bI}=;HI_5a$7;X`!#R+@oJe;bH8h2+}7Wf{=+~2$=lGGvx z-czcqhIvhXRip7h>@1(0e4%yBl?3YKJP|!j^^L-QXor7AeIUFSu>G#r2m(>wZmzvY z`THgh+4OTgZgp_6Ndh8N+ijQP7tslDtq3{ax%1c=(Vk6$vSCE^nVVyfcH>O#YM1UV zFGb5AS*_8qB+Sx8`|bYsg1j?U?$&jbenKXvEfrGHCAMW*`huMwwT&~~5m*S9uKF*m z18as$%C-ViXcH)Wfe8MW=;!j1-TrxAUq9=gt>9wAq;4n z-T4~E3w-U|p#{YyqOb>X35+avd1jBt3bHI>!X63K)>D!FtQ9m>FXzg903aWIEp!bl zddA7Gt5+q+>-)`~Hept_{P^^522%(6Ww+{~6P}nwql-la6@bnq3E$n>vv{TezG_na zbWRck774SkPi>E$8Zw0VF8)#KLWAH`V@TPJf|lRk(uWiL{;C7lTx$3GT-(V@*PG6W z08UIlfC(+?7NYqhwAE4&^gv7LE5=Kx7ai?(c$ZYZKzoN+uUBpdDcKBS`-(CL7m?$$ zAzVNFZSlgg*M?i4c5rDjsx)UVKi~Vu35J2Vs}mAMM00lVtSc<~@e=dPQU z@jr)uAVTe&wEut~(A_hH8cb)u82sXzzP$`46Pk9c+1kIRA2WLI=})@9{fiyHy8N~E z%|e1vuz5-uLkZaxE;SEplC>HSq-Bz8M@twMu|q-1FP(9{{XFn z9?Rq^^;+~{ztlDZ&7$vfKbE-md2}cqXeR&KH-@#X0dIbaU>wU)Wt9qFsQwb|u`wu_ zPx&i3aqHRzOp10rTXG_BthG63_+Qc=$3|X#?v3G8;fyFl99089WqTf_B)EPZj$l#C z5J}#Yu6$N`{6_$tjmMLj_3{PJ^1C@z<xhX_C z7&M^U#gp$X!zd*RoaajIK4|TEV>XC?SpnA<7Y8t}O%2uwVyV6!^s&b8n27a-y^@zj zY0?{MFqblhbu`bKWM}M~IAvChL)y^DSa0zv4WXa*-{b*}cN_SInkn15pW(i^8LL>) zGsLA0aL%ftFCLV$5rDgO>o=p$kt)c@jpx)WT(9bcEeA8p;A!0eDEhh`r~2QDZPHQ~ z!5R-&Eno;?unSsmq^WZc5>DrZG~QUG59N*VTVK#x4f7D;bC_ryLCMZqSB|Djqg+>t zR!^F0sP^HBMGZQl{KXEr(sUNphuOaNn>OwR+^}Y=+gtfngfnifVk70G4xVxK1JqYS zIL>HW9ewW04?aT``YvUo5t4Dmn=I*0=`J|+C)uQ#NU!S(gBv)5`L;azuD*LVbn4xS zO7^z5hNhE$9D|8*nF7o%`d#!=vgtE%(v8yn@Q7H7`Dv9SgnQiwlLa7C_J*3YWbQV6 z*YL2raS&|hoM#yYFPh%nnLliFg8WamN~rQc{^UB}rh0U*^YXAEy^#QA+9zOK0CVWG zQA;Lwdd~Y)RIcpq@5?#tXf^JBwF@Z6k5iV@XDpzbCZ-gsfS$BH;zSzN z32K&|nEPRxML!}6d2Em`*L>|Ed!gU~4x&x8^!zZ7s>dY{+_3goF- zy~xen(Mt0r?r1=>H2B&#FW(K**kNk4pBg`ol<2{vF5bIia@+|OC|39^uj-*G%7R6bDBEL$lhz4SmfO-TFZnRZQ=U##?|L3o+yKKTZuy$4 z=jI5;yyqte!i0*qY|+}u;ec?W$wJW10Go-1(SMglYN+8@#(pp4e#B?~jdxRtEUksa z)I|FqGbs!fR3p>COn6Rqh|8HsW@VH*b^`+-RR+J;3>E8+P4KsioIh*Ldjj`02KCvd zoORH_hD;mj2V|=_`LEI)rQsl3LnBX25c2(e4_ixpJY0AsZ?x`Rfhg(A??ZPQTS8+8 z>9puJ{Z^SI<^H7I=C}8|5${} z$NpNp-Qx*Oc5c=Q(t^Cn46HM(bmI>REzdo;%ElGrfxc@@_4nw9MxU>{dHzM}2$O@a zP^g;GyT~0a(;JuS3$@LNildxUWRyQL5!;ATV_&*AqrYhxKU#o_N)lL3#s>x(IRY2R z_$1Q#;|BT)6&P1S8c$(e#D#&;eByUbUw6m0E88K}xA^S)*YdBeo*bG$4o2)HGLS79 zWfgKupuu>G{c}Zr%%ntwj4y%GJExjbX7TxH?_Rlr$n4tQL+SU@IdXNEDrph>LIV7^S#E)aPB_5O6_%8cJ1W%C}Rq zltiPWyWx=2t_NCwhSDgSk-B?&#W$v|#(1 z4I6r$bl`AK{ycVB4%v$J5>nmd#P_au1?nZn9(Tw?f6_Zv1YyBvZ8u-DMRXbI@|$w< z-j<9}S%~}OFv<}FLY@o%oX&iq3dehOq$^-BszMIuP@F;yemGQWbWV`IlyN=Kp zU4imZQp*u={#!=~7Y7`mU1AV%J7CI4BMsZGKP??FBX9o*%~6tHS58isp`0{b`}6-5fubGm z5(n~Fm`VWS15x_)k>8?@eLd`h1xOS`c+RRO$vEoAoY-da=s>5jJ&M1)GHtEO|88S| zca3S|tBmk=#NM*hRB+Zgf((&6rIwy6lk89}M{D1`!jMUr6C=&4dS;?T1(XL}L^6>+3`HT~lXv0KMFgac4Z}3W| zU4*t@rckQS608c0H2-lTu=ACK{P73U^zT#=sGFBlJ5@|p2?%ohq8*$r*StL;!F#2f zUVD6K%LuDY6cyjo`=wHkXGrLV=eQqqGl5QxW|Fe2*8=F6HG@Ysv$Z9}3Dix8niVYy4HnMbbig`M#5FG zdTYOHh-gp|$yNJ^|2Yj{jN~CT@?eb+!*ghxD1Uu%wVLhvwNq->IrTUXj=d!$VJEjq zmFGFBIccx#Snq!wX>FqIw7yG&qk3>L2DozacDbe}*gILP{LG%+L_hgGzV&Gi($NDg zMqV>zXN(E8&%Woy3@WO@5stS=ysm)opFZbVo_Z zOkDo*iXvcC;x?Z2jp7{D-g+N`w(g8La4$@v%b|7N^^`E&gy8`F$irTtm1^2Bt?%q9 zMnQL0e-HPL{V+D~ui5gQShF{Uz~WI|FT8orU?PohUKW`UHFFO32k$CHb9p{MbHThNTnRFSg?pjgOp-mnW zYrouP+7L)`Kz1(w6X8REmZ00ij?2a?KaGni&a}m(sb-x($cO@N6_G!gfk-g4wU|e- z=BY(aYsVDHcIDuMD@ZHhHP*Ynj23vIA*^6_qvJFj5}YeioQb{w_Djq3+)=e}fRx!6 zdfv-UhOKp4>?R%t~T=`nTpA~ezkF`}I7CBb1opVVE zW+#u4oXz7@0SSgO&T~n=BeFi^MXDhF^db$^^!S&*JP}*_KuJ?v_OJr4k@~`5egBNG zNve$5rGS^OJW%8ij@i*hu!#ANM~yXLeK51(C@#($rSDNIK{8pXly3EM{u&kH)&91j zh_59&%U5qfvuzzKU>n=y$iN=OX`@QH98ikvHqq14LwwH9N(M_-IHYLXQhegorNGLgJ(BM#kz-4NKa4k21n9c>C*xO7NP8oJsk%>F&d>V}m{8WzxY# zy(*8VGomqrp(>mx$pJ|V`Gf+l)2ZCL!*=2=ppKd>~J>mnBBY$Qp38c<<=02-zmkU^+JG4Ce)(ua zitBID@e}JVf=&}1C{?gLeUP#xmF@mPZJNXW#jx%hCv+v|Ai*90sDLr`2e%PSWAam#5NbZ^P-s zu~0dia?O8UwGcgG+KwuY-hFbn&Q^B=i`vU|hElx{5`w{`_j1Q94xq`J$HZ}eGGciS zYbOFVUG;_M>lc}^ON_Z2)0FZ!HrP3{Q(4U;FX26r1q)6Z8!Hi}r9A)L7ZCwsLe;O{ zp+0L{W|KCAstW}MHxOv7;|1lj>)lqVhao=Umpd$%3>qt;`XI)fX|}C6LzQyqKXD>^T%4c=t7n=L7MUvU&egKozvwrA=Vr0YzZ|i zy}?j;*vlW`U{{V=>GC9XQ?oG3Nj8bw9c~`_LHT>esniayD_JyFpFX7o>vws`?Mc^b zI>e4VHmQrxz9_n#Ekl+NgU5*&%Qj;o!N0`b&^oQomRWTS6*!u-flGspV|9W;j_CpnI9EY#Ev+Pplj40nHK7`@y$hxy7eT%1q;xKx1op&VEWtY zi%~qICqM-QI4~XgVX@(@*xJUc36}_*87X2slROC}mYIKsw@@vE?^K@c@U(&Cm;Ey~ z^Y&^v?+B3dldG)abmAYTe&q4Nu^Zbg2jX}fwoHom5IroiLM}H>@2nA-U55-~!pG!5 zcP4ASRQ^KZeb$BYRoTbxIp~?4$Y;@Umg+H%2r;MBNiEN-zK$qqZBHx=OG=P@AOA+7 zs2V9>HS&xZ&_oj75#qSQnMu{i=YNmla0jEG|A;R&&wWZD1{P|W+>P&rAm=^9zXC#MFgP374rZIS^khEDn-C5j zVFTYuxAD(}hI0~`hbkX6sMMmHf-J8=2%a@3?h5=fuw&8J!JjMSVi}utW|(d??Q@ZC zs6`&!ApYY%`D%MaQmt%S#USj3ETm`Zr=vg>*%7U>^Dr zVm5K$T3cZCUykkAO2hPVZS6ubInyIGWTV2{e|c#WQ;5paEuyYp9}(R})6Yv5_*W#q z_|w|fmJjXxs!~qhF>>dF=`?Nl{>V7yb{V3L#sfuqbS~)43!#vq=t~LB-C)<|1k$un zmhn$A)ztk0)7^{&h+U1JuMM5J?$sl9YdSnqD#f$CLrmX zb>9=}(5^`NE)_(-zqwASJ;b6>BK_CYUackpO!$MGu0{R*qzZ+$2LbefXL+W-cm*pbC*;;~m(r75ZJ{84s<;feXCttWJXLM-AY-o^HHgzy2$n6&k+ zI_8SPw4>t>RWVb$^U7D`0Pd%@2vx~;tKu&rQ!)*cYCNV*wrj$niSh1gk`GSd0=_cv z&QMW(&j%sW5!S`~rHdoAt@d3(jfOsSysz3mB;(+a-jZ%z2r=lO)}UXDYn)A%=zT#UO|6p zFIQ?j&SRb8lH4y>JQw^=bgu5aEAezk({}C$fW~ zZum^K&_Z4)s)eL$Z7Xr()tPeKEq{Ail28d(l~p zq>Wl}6vbTdJK9}jT+!SnIe%W=Ry(%_o9DqoVso>O#uF2GXbk1-_0C{lg|N)lK|UnH zWZuJ#(kc+tr*)zW6KA)qzWeY?k;rTCg3VE(Q>eX35wT+O+_ufhmM#98F?{wV(+0-S z-!csTQb%3TXmX~pd6yXP2QngNTmskc0=nMYZ0s^nFw5L623zg;L3Kk)#Q+ z1sUZD7Kv40nlE>#n?^PJZ<<)?U@NR@&PO!PH_7n)n0*s zk75%mczd{y{miy2;xg3r=5AuaQR<>-^2J)(RG%_r{l5hL2gN{Sm$>m0(_pJ%hSF>4 zVw2d3*Sl?3k9_0fzj%aKkL8@8B?0{74&Ru)aSPrp8BCpxj_m1uKl;`f~9NsG=;LYO*z`;sL5rN6!{%mG_0Zrm@2C; z>SKAd++<-gGet1pa3afEIBb}@b1~J)((i0^e*dx14xz{ zIcrocVg}bg9y0p^x)@#{pMbO_ieu{QJ}p-vr*_eZ`NUx~&_Xzi1=>Ahmu}kA>sIiB z&qdoH{CE+Fg2G7|!ORWv_e^`?mOS_ciN@6IS-y-jr7=o6(4gZ+i&BfUZmB1ao|^aG zGHf*HSq6~vl%#ceOnR{h6C=42n>&sOIpEpCH=}o*=X?0c{tJL2@0%Np+JnL(m9w~;v_)pyB01YB zNFZ#$mS*AgIp7X%1b6Ppd;bsBp)DEk{OEm8oA6f>Pk``*y;1O=C(Tz{E9BeV#~jXC zAZOX+nT)to?4_F!2Z1W$A9+F1r`FBUteu;-eEAN*GsFOO$7DP&6YS5(>v@TvKJOcZ z(ycQ9z+w884E3;`^d_|2A)q0brEUFwAegG0W84GDrTQmi{>foN)B50aM8)Qv>UZsy zK!rF30gB82;DT}=C!`tVyS8>7{B*zu#Pd(^b_Y^hDT^2Gs`%hNx>2Zi3f<>cuU(-Qb;n%3 z0F;3s*WQS(`Fr%RJ2D8@aQ|A+EpWKuA7_t`~nhEZ8FN_34hlHNW9J>{Kk z6JGCaB57#2eYf<+pWHFhR_efi-c_2k9bg5T_aBg7b?}xE)I7(xuf5tcw#=1t6c$@u z=_X@i$lFEmtsHZ20v_(cKMHuHX(FweyEMq^F7lVkij;t(s;>psf>EfO|DL>5h+s=M zJkvan2yBApqNw-UR#_s zQ#2w(|5Wf9qQOvdmx2~%{y_SY&Q^?E=5D2iH(wYMcG94B3_es6ho4xL9k0EAA;JD7 z-I(8zz|y!PL&5tenQ7k}U5=bd{V8w3C;o}`c>Y9P?fhdx;sKjP{vd3lUu699ij&`l zb{W{6BmP~wCmnOtPv0vfh$D=&gxzNVhVTUPH;PT}0+r_!>TQ=?Kd|@*bCiLXgrwthtpjHp+0Fmn`F^~t^L+PMVcT`=@jY;BR z>vSX6h})~%$Xfk)i&sZ!@Du6xj^UlL8}qRgN}gYv`K-9z6abcFNIKoeMpE6rx9fgaGaAK3g)R`@Cn*{YWHSSsNE@d0 z7^ze+uJL9?d5eX~FCYCirRAlbB4wHVu&b`)t>w{cq>Zk8p6T!BLuPb-zHW#1L4yuH z9BM!bj~gpQAAjW9p>eYA8>tnQJznM`*$o9z_YPSOu)LFqdn@RNB~9yw%mVxF3!#>S z@KgQb8JcPz+wv6J$v7QAlof7U43irmhda;{JMzEreynZhtTEGuxzOi%P&=PMjL#rN zPfPe}#Q-e%BhN^U_V1!2A&b2_jJ9er$#?WEUIpc^sb-~bUbW+g5jMh$qcw=69E7X6 z<2ZcZtv!OB!N3PS_ImEzttoWq$cPuxR(Ue1}Bys+UVrR~DsLB$E0ha|7lGi>wB& zT}H6nbbbF&{cd*!J|Yn1jf%YiGkTGsbUh3MW)}cv0ADdXhIJ)cZ;Q2!N5c1ZvzEpO z#RLpr8t{MGsDZsNgkGiz;^lKKdC}%^9(A@;v?Srx5|(NFMUdBhvS5l8(Sy%!zzOiU z=#Yx674oNx@cIxUWXa6O55&2&k559$Q!*mEPhZ_)Jd=>9sQ{XI3YUP%7-@O%<;m0* z@rwIApMH2-q&t0`u_HE&j_$t>pvxdCQOqK_M40Yew!KByA#Z^RRO=+Et~qP3a>_ zrTVXKge7roJ!9kUN!8IiN=(ibflllzJ}FHgNxk|2$Ne!wN)yq3GE z|7qJI{`QibKDx)Tn-;D42u@NA=cE4Ak^=93L7j=VaWt80D(Xpnf?VJrznYX3+o0nt zl?MxlTl#b*#Tm6i54eS7#@H^w#;97`>r%s)=kaFZqL`#@%DbwiJN`PlXs+t#io8bF zUeh?%iBa{q?5sgjb4ogI#OJ#3fm9yytmhU+F(8T*E%W79->hK(s*w+mn^h$T@`F>Q z4b!)syXYDcv!AxQwP{tZ*8(W#hOp-jejwe7J+*4k(f_ZS*jn*iy?!`|%Bv^n)1K<( zFXoA6_}Lz7!Py%{9w)L`^FDLum&DX6QIyUBf%?nhAcD}r85-G<*_GRUL+`Rwft*BQ z*~{t2sSpMMeycK{{|#KHzdzf6ZCW^a)r%i}4IXU$NnnRy+eq~IzJM!*gzi)T2(y&4 z>UL?0Zi?ir=M^r|MF}uN68sXZ$H6qU&!IAkxX7SL@jt{`^lU;VuK1(lR!D1(#H~af+yhUw-(`^Vby*xvYl7M7q<6&X)>3J!cOY zmxpWsXm}h%PG(8(eJWQP+x~ZuZ8E_zM9-I0 zuG*0X(+$PkX&mi^M1Tt)opQwu`I&rHdEge)?r##L(ex> z1%;%UIap}m@wu9GFt%aJ-c59kLydim+ry>n(wh(+{s0 zo7}Pba^vIQiJa{yFF7o8$GLxomOmfB>)TtoIQSq|TJK}p6WoZk6K=qs5WJPMLTzcv zAF7oy`T?i-pPyRoX_X|0%$v0JXx+VyU%;kY@$6ELp6w%HRWPUjs<>-YW6V>Im|c6b zioZ2*_f^gLA%1fV&D;)S+nqygF=z@|i7t2k&ki=*F5eEC;^j=V1c^@b=B);8qw?A9 zM1Z#xzH$|dj|kKW`UnGjlA5`pBol2CGT}f-QbLPc*M{h+=ES}Cr3cmubVc;2T~x`E zvq^PisIBC%R3KT6mfNZOp=0WO;TF;*{+U#=;o`IXusy?oS5N^d?_CL>L1^2Q%Ac4j zZS1}ep$9&SY4uhC1_=qpeb|H^XzPdkKPy$oYu99v7?585{bS7Oq}4co;*mGk|7us7 zViB}=JAeAD8!AU9=8dgrg?AK z6t?oQ%zH=c4VLf=7y?{rTRWro1uYG+?}Mie_?5_&vKa|U`IUK6Re(npxqNV0b(e+9 zc- zkMhU(w;QK22YiXvfuH(&Uf}ksh>zcyrrpR+$P^d>$7UlJcLv~Rq{*1vUG0%Amj#oN z*05II>b0(!DE)4;+u$s7ZBBjYQt#8Cug5X)|0MJt^-sD02$^61L-iL#rrIUvN*Bza z^Fk^w{96aO<)=qgM}32>_rg>6x5XThs!)mP!)C zmVWHhsS@(Cf1hM^ZW37~0%$DcB?4Mu*CMBl1_Pp-s0B{snf~FKA_yPnjs3xX<%1~> z{(Y|jfv)veQFDtQ`K1?H=up=?CVG5Q9{(20?^+WUJ1NNPLp%OPpvL$ez@W$JfDEFJY%KJ6{8v|4!ZBg~` zXQ9%S@&nZjKtsVX3z~s>uQuI4_efn zKONFG34n=3=oBEScg53g&KNT957pq@iHsjtjXIF|yhA8WH8ou=v%j^7w7Aluqn|Ws(9|oI*~L7_7qzr7dhR)9+XzdlBS9KWlqEOC==4wv4+zHCzlnR|zZrmwt4qBMB2+BhdaaqrgCz~A4 zZ;kH1O1r`q<4Vx+2X8-I<{w$KtD(#l-)l&H#4<<|N0`7I+^&9Se#w8{<%7)`R+OY? zpi&QhypL{yqx-6++X>9RA^eD?Qv&z?Vif1Jy%G@tpr-|yG^ zb$MPKIz+QKR+O1V)3I{nAHUdV1FOl&T{+4$;f_y|+b{IRglGChzrKYH#;S3-<}vZQ zj@6sq1$@rFUHYN!!bD&7QKsq|OY5MZMCD^2;AZ$dUOlj4b(2)I56R9zhLrC!jK<^`GBZ}&)SFl? zsx8!Yrd$g{QK}Z^@M*(Z^H-NhrBM<^X{{TN=R;!)b^z{gUA7*L2wc~tmWXzASBD*s zs#As#6CHGeoHcE4=v3XSW6P?fE{8P>Je(3+zV(DlcE0rYSS0U+1! zZp&N#Fm-&%AZ+)Z7>j}X);T3L1YVq5->H}Lv{TBqeP44{KA?S2cgu_-gt6JMZJCc1 zhWz}>kh|LUZQ^DLvOf9ZwGSJBokz?bD&dP_m{ONQd3*NP_4H>O2Ej{>8 zhqE`yEi|1~sVJ(fjO?1AIIXokTVoqkxX{TZ3`QS&hzd0awCrh=lqEFg1}*%fdb@rC zsM%oYMW!OgEGJd78v&t#RfBh+mMUj$hB~D85XvXuL>`vTWvDA~P~t#ef+7=(vS+wcn!o$D@o_i;~7N80%g-)@Xjw zmn8VuK|`E;K`8$~Nyhc(w#L+gGz;8R}>7vKgp_{mq;IzEX(ZtV6m{#+vAX&w(l6g%?p}J8A_vt60mqf&o?o$%i@(S zYv9T#VXM$vLw-|VgV>R!&cm9XKG^b}RI0XYvgy(63=NyqfSC_0=l{M&1DHYWMQBns zA8V;~EvF8xD*FzUBGEm3(R|UV?UQp6v3d{Y5H|Ci;iv56f~_0lbRPCsZZQY?8rv_s zr__b24S*mgj(6Jb(TPa^$fcB-0yj^;jZH2fBn0BDiBSCeh9dR;7AHk8%6*?k-KiZZ z-JSdnA@Ba-R|Xod#Mg>;NA=5bw<;J1IAE{Tdi~p7bIp;Z$R}VHpc9==pD&E?u1ecC zoc#|XKNbm72F}l>Cf|U$a%Ql@nxJS?+S|f)q79|G3B34^-3-n7mqCOqhHgx^{Z~G8 z3S_{Oa{vRu=&D%U<>>W3YQjEEOe}=N&AplR;r|+TkL^+9aK-W$YoVESCuX9~vdPUQ z%o;NX>_empCa9`pj~pJjEhtHC*}>T}T-KMEfW*m3ayRJJdB(i>QMmITM;-Z6T9WK# zxR;;BdoHEKH)=AS!l1R>y11fUAtG?!zJJfQ4^k;Np&CB;98=Hf5+1`{&?2wN` zzm!r7!|cZ!EsJ^Vi|2B_8-fd2@w*7rjF9qTfIzvq?BkAb?Jak5ue>A1asHQE5)(+sz2s8Kn=OR)hVyTTnb z-Vd|fo(nNBR(*%XJ9;M|TNx}*;j-ZyQviIk$m>2G$BDuZJk)2Pr!depk7i=0ZZmTz z(##mg%;ml>+}f|LCta$XD_`R48DG3;wD?OIi5mwVYNHV;h(nJIEnkuKe`x`iOqc>J zH*>@f9*?YoWvew_Ha|_;OBKy1MYt|boxd|DVX?ge_Uq1w7}uodJC=+2SI?zHn9)L1 zGYypFg+$uikLS@g0%D!U^AaopJJNhUuWMD(2Hkj2nSISo)7{eT{?fz!BSk-7spN}Q z89HvAhw_AJquWf3pqi*r&Mh4~1tp^*hR!*PKTG%DaGdWSG467WQRM~;-cOf4#~Vx)zOJyW4IN1O zKu#TCF1Ygvu_am4frrH=pQC#V=&rUs`Avbi%0*u}mJr0g^=?|}yU7`WMT>!om!DrU zIYeo{q?~K%jD6U6VslOrImM$Q0XdUe>DE)wEVbpeC zz&bDb^+W2v0m+wp+VX|S(zHRF^BFkq78)70%t3vUo|_liY?5tleYwtcdHx=hT`D5w z-D8sQ!0pKq+)YiuTu^o5n35~GdJ4) z=i>s08-xw+gJ7Mdg{+Agfx<-yVa{F~C+E?kithfy?71+->47TN)Cqz0f|X0|Bd8_)>Dp)0}7Ftnl+dORqWJ&=8GM7cmP?z_lpKW6E7~rn0kE&WuM%SR#TW9PEA)!-Ffzqg%ReG%V&Iq#T z9c^{u?In^%^*lT$ayL_`a7zmA+Br!kF8OAk^i*e+EkW9`#Q zxPU*haivx$7Ky$RT}Uf+CR{W_T~!c*xU%=L-W#IZK;2PtB&J5a3Ds_f+S7(lVHEasZJtL2p%)XF!Fi%WFf#u#ZFiax zyceH602tt_0fI}XR(dOu0694qvn5M_Hx4MhmrD;&H4gCgh-cGPmpW^`2kpKIyx7>OR21O>bdR-LYJqZ4w+9HP6TC) zGAi-ONJbA!-2zD1NI?8cJdX0(&SGG7obZ{gST&bE*d@?b3wXnMu+Jc$q|Fi z>jiJnGPT!hu9`EcYo>EG&rh)XSw-U!zsn)c?+bC47(eS;50Tp@yYISqCr7s!l9`*p zoIE>(uN6*Rz4)-DZiB1k_8WPz#R+!NkFf|XP$Bh}(Y)X|6T)#wlVGtPMcZWzKJEE6)igK8#f8<@-HumTT7h6C6<-DypG95hSdNQP4+nh0B)uvqI*!UZ zJtY<&Vsi!4;UKE2Pqqp}pOzuQl*aG(E8mkeORi1S zZdB~W<@j?N6JdZKb)BF_JvHP4RFdd5op;xS;^A@Gls*FiOw!Vu5^^hJm;e2~Qb1?|(kzrr(|*s;S7u8mEQXM~=RA!bq)(XuAW;FTtuAe} zNS2pZOjS4h9|PPj0u%3KVY(D5os9;SSy8b4wvi4E17SQpDt*Tt5P@&y#&@5e?a9hs zxpE=kTyZafKK846+g`zrD-N59U0`yU)dPs$=qLRFyJaB#MFo%%@l~<2m%~j*_?oQk z4noDSUBuYtlNY1?Oc%TKqH&I7+WS5SKQBhFvDl;ze^V5XfpAOap?INP70Af3StqYD zWWNnyM7$&MiUtOQ1<7NJwN046PKZzbm2HWTrx-O9t1mLCr0}7~^umD$}(`BxL($Es8iO=*X^fSYkNma9i@^c#0GPEGUvsGLUQ3vqb075!{+AxG#s zFO)aoX8g-aVW4bj(d8_7Q*+gRdzcub#fpYzvBt;(GbQN*i@&8OV@=Gzx}+H@uj*Uu zXefH9sdiH{IF#?D*0bJy-qsd)J772Q6}>`4Nq=&s^dcRdLh13!T|xr-9A7K|5V*(G z>TO}p_Ro@p2c5IamQwWNh{(sk*gYotxux)HJPDgn(MT+xlK1MZ5L&zbIE*sw`nb*W zA!h)%q|X2%v`}^pADf-OwClh8W!2VnP6DdzmA zCmexhsqNu-bc9^Tw@vm;Z%y5U=#VH4)Rz-Z(J#6R&HgvV>AWv$C#Y8E+MB9jr)aF* z2tSBuQJ2HJ3u&2Ml)$k7bDYihe8((R3rQB?B7sdxkC;CQ5P?t$x<}>|8n3dhZ7O#k zJ@PEqg;JCQ!Eix!>Xyk~<<4S`@p1jqea9i{DO=U~fL#iR<kV|~6@Z99z!6}91!e41wHK#1A8%`PMni^mRL8QG?(Egj@m24dn7w8NkA zslzAyFn|pvAH#=6+Om2spb;+mO`b{rl674>Pl(FTt*HCsHOvc$P8_`j#NY(o#bOc# zOl3hYw!W4iW7wgfSDrztXfV~Lk^#A0k%X}@RE%Nj5K}=ptw1B3fLVezqHGaTeI~&R zkpRBi470k;zW!_qzfHrL@R=&fQkRHO*o$_sh#3Js{F9;S+nh~GLC(DpFHIoqotd&9 zIihya0*Md2ECzr@?VjySF*gadzLMd&2f`3i!mn~`gE$z53N7h$CRh5ond?=Kf+%Jr z+{JRP{*U?3xeCXme#2#c-9IVgv|15d&IecPZQ?@U?@7;?Co?$?*egA&RZZ5^TJA0G zvub;`v6*>t!#raFJ=}d#DU;FOO3TJ^qQRPShq^LUkVj#aBjgamvcG7T&#A@L>$`E` z&HN+O8N5>NPCwhzg3^9gK`ErX9ielreQhlR`-CPC*tY;y?2I@av2a)FD>PSU8yvnZ(*CKZYHI%f^-TGO#bWf zh6PyCsbHDLN8wafUPNBLEX{jVABJJpsuSu-ZdJB6>A>(DwQo z9-WBC$3!)nW2zI&5H?GEf!=hKr@f-M)8>S;&VQ!3>=s?9bZ23*6kFYZb%Ey=qt?ErbF zSxbl(2=^UxqU~F*b{d!kmk1p?cVozH!v=e0yU5DCgc-N}xw={KDi?06*XDXrP(3^A ztPj<9Gj+N}yA;5%kb_230BdkDr?VAr4IB1PP=(r%t=cy)nc-($yF)5BCQxc=u+8p1 z)Uc3FEE_CPvC3CIWQ*Om4m8Hir_@uX+uh1ebP=wdV1PJF{B@U{jACu- zi3II4n;Cj*S2+rx_zNhxos26r|DDL7qx-t>{ZB?w`8g{)ZV^Z=k>z&10NG@7+tK_{ z>BF24(R#F1UF@gqcrf1JIQL~|2VCM^Bxt4W0lOl&xtWx#P>{M3&quCL&#$$Jn2IDC zj$uSM!2tL+t$65m&D+1D>5x#!bmSDZWJbQY!qt{fzj4pQH z--T*30i*NYg0OyvoU4xU4DzLuR2cTAs>$l`dR#1DuBBPl6#(Fq8 zcZi4ete4XaKgMpphDU32Q3)0t=_;B6KV43^6>Fd8C0R3FpHz0&fdCRl(cibu;NlbA z)a%z;ha%vTE>%!75Z(;``~m$1i#DFtr>G5?msY8p5*&5(yn9-10)k<8BWMg!WA*F# zg{a>Y_?c8Sv~Ww9`jEI_wh7jQHdVk^K1%9m=j@)t)u;*S`}Q%sfHJ1EZyhkF*yat6 zG|S7i_i4B%*!h#U9py-%;;Lu0#D~;s<;^bi>E1f|Wn?!*wKJk;Bxa+o>;eP2NQQCU zY7npP1qfmqo*LI9urPnM>628G=ffu^utn1cM?Y}jjVCCUug|sh1J@c`Oy5JKLa-?A zX@xj2ZPNR{2a9CCqwYI~veYlKY@Pn=fx(sbz3z_>pZR!n3D@59g>MGzcY`C@)>nrn?bK@ZB)D|{rl`Uw$SX%0-)Myk|FW$@u8L??$VV4KN z0fheo3?nqATUr1;-c7qMXpDUPJ=M(D2la1aI7Vs9-(Vv&17L#Tk3aiGDec;Hg|~+_ zW3sv_i#T%#z%%UmFz(vl6x-^{db$62M+IB2U~`2xnIG^}QIvt~eSbaIQgx0K9aG3v z>p?7o@IbZqQ;6Gprm8w$wI_$`RO0R2TLC+^)b28%A+{tM1)x5Hmo~4YBVj8VI&gX2y*|~D7}6j} zc|+|w{&LK_Yv7Ij0 z;Gg8OULiBqePd5i)#7q8yZ(X&b<#^jT{w5EO$|mbk&ZGvaa<%E!X{Vav;n#66)%RH7$@iFwl7_>#@5-{Q6Cj9hP+ebl z9gou7=SIE=M;HB@qAtDd(fVUA$)5a@cme#kZ}$nA;hAqS@H1*|d#_6}=>JpQ@)p{E z>%({EUnUbyHd_85bXNDByExlGY?z(lnI!$%P21hDUH;yYK)m3>HWB91jHU;1^0>jp zHrw9(8$z#bBl)a0B@St_ur|_zv>esZQ+$uY1d47hA}$}#-xRJ6@E~%nNJXaqOv8@y z0{i*@I+O#VuCW6{W8QzlyP7u}kVj)7t|E!_W}k1{o0`YYiWiTsSy*4K^H|K|I#v#h z1w7ncd4*ab@ZNY0q?whmsUAKoP3!{nPcSBVvFl;nFXi-D<<)0xZU7>h*iNSAAr)D%98msmq_3*RiJO#XS;dPhQ(a!QUF)Hh$U& zv@vVucv2s@^CDBCHtk)vzxEXgJYAIpKzzh{yOK2)r-?88KL25E-YrjKG z49Stcxh7|gU{i2y!D5(-nmUGbJaoL0l}bZB=;U1az#qg(WBautH&Y^~)CR4AgW#s+ zC>50+B7_ug^i0|tVf-#p5szq?aL+wQ@`jGI*GJZL1bI)9R0m^@zNNvti!L>U8k7P$ zwhxW8a^c;j_-lxc11;cCZ*wy|d)30JuAUGlAO4We?Olt}erflZ5<^?g089x_79tqF zzt*qkd@_w$edh={r00TZb%xt-iipv<=ksD{Vbzz)mtI%w-+W}9*lrS_ppBR%l4I^E ziJ5Pxuuy6(q0#__HhiH+kL?FrI=eOAU7T~95oF(YG-t53IzsDk0U-`Gm;I~dL-*`~ zVzMQgq3JKSx&b{h@QSi~t;cIj{zm)QpR$^{+v$>9>-^_>^yEt+2!zXj;;u$hHd*p0=I>B9zrO!XJeI$x<71QM?R3hV z2U{Y2?AyQC==!Dh0$<&7K^PDap3wD~*p1+VCL2`)e*X~P_ZVv0kK4Y_s{LX5ikPsO zJ!oPm>*f% zSU6`uS81(11&vl(ESc)Da~o=;GbRIJ!#7k>Sk%+wbVt{*@2ppO-|PVF)teUgNnQ{Y zB(~!{Y;Z#U>BVD_M;0wi zjI!1(Pb@0Tdg_tL%x(>x7>cpa}XCzdT!3a zAaRXMFR`c2&kFhIveDrQvv23+gxi25Di8VEKHj-XIUZM6#`A=$j-{&B33I!ah9`py z_pMm=WS6$Vdule#rL;=||rt)bx|n8j^(g4ej>?6HyHlNqeKLC3)nE(~-!zSp)*&{!l+oyLmSc;kk@n|lPr>=eVd!;&`ay85)`+ z2cEZR930Dd8dsSK=%vjW;#5O{&5s+*Kc+@)hHCnPy03^CaIf25OMhG=Mq2jiDR|fp z>+%q-u&>+|+xjJKh90wpbG|xd!`Yq;8i2OaG4>q?NDk5!QLj-9Zli{+n>U4A(&eKz zL#1V!C0j9f@4A>LV9z2%d#%a7W$BtdJG{${W3(s^UFR`+_i(|VwH42_5U+Rp| z3Y(v(stM*e>`YBXMrz&uC!F-}1uXYq7#R#Bs!wpbs<=3J>j1k*?eyq;7hXs| zve5Rm7mc(3>1>ckyPaa3QMu8n%KMD;%;oO{G2UDn3Vpl(IEn@>d3l(nWjHZwm>%nv z6&wXJ$B(D=H6+oJHm!#*4v-K;LjJ?mCN*^@=+(Pk<&6|1RU2KAwwzchxRfsdj}w-+ z4qR@VR}jL?UFTZ&`~o_P@Y=JCbGf+UK4WC$(B__@viv+#16k$N907l%^j) zS79?nnqg*ctfv1ki)t}s2*O(@y?gwU)Yt2Mi^Lfwru}YyCHfIRn z%yePc;Ys(iVs6(yXg^()9Pd$k(MdA39QJ&~DNLS*4LZKzcwn$xBriy8@AXViNsu4; z&*1QAwl)fO_3n2}o<}~{1{C+R=cH%3UN(y>=AcyhGEE}a=7~EeJ-Nj1VsNq7+tBkJ zj>ezy=h+Ia>j2<9d&Mn%z|eZgdxp9R?YD+g43*eU>dw0>`t^iM$LOu|irp0#=gP5^ zt4~Zl!p7Y_j-s^m-3WT^=j9fg7iehnk4i7TWn&{op(4ty{$jT?#sCH0NKT9JL|;d3 zxN=aStFCe)=~0|2$@@Z@tQHyQ#~a`4oBv;|?mjx&@S%G}uVFP>eajjhVI{tdnU=fe zsQ`yoYH7FZekU<(jD2*tR114^W(uAMIWa$A^OR{p{G&(NvI4R#Bk)5~{=6eF7?L_bRq9Z^e5A0c+^IeP%nwA-r@iM(O^!YSKRSG*&2yYU z#__(!I;<|ayHLX!)2)BXNRQ4=S)a9o(Fg}n3&c~oA#uE+Nq>|onL+3$>ZV%FZxwv}#{{(fn=L5yBbvph-g}2g$c~sT?OLdF9j~)a`W+{+ zs2R|Tg#8&{d!kDGs(B8EMd#Qu5Ht8?8Jh)G?wrwlD?Y5X|2ohdh@D1-P1rruK2H;J z-Jcxh_4wD$d7g=EzR35V@A45mvP|5VuDR*Wx5f)V%JNc*v#tE{%GWZ5!yg8dkx#OF z&-XioYY5i#4;V5)x)9Tx*`i~vuLWSydevTNz#i3aol05EzFp^kK|3v$;_ z$6nG;(1_|dZ5mMA`O>rK6^c=MwqvnK=qoPs2k1R0=8ei5y-@gnS8q&^SvZ{Fhl(A{ z&yY~0(vl&pFYYBOTzYAh%Fd<3rc`U;&a-Y}#kyZDcULzelWgCyP?~(Q+vag-&Jd#C z{A8i2^f9dsG>G0}R5FI{N1&ne+O0T|v(J4mN`p2RSeABySLC)q!;DVaMP|I3Sz_@- zm!|i8b?YG?ISpzFs0N%2ZPhv?KLi3nOvYYUAcW*iz~`)_amhbIET30gy@_iWgYz!Q z`g2p@myum6#`x8O&k?!fApw6J)G)L=xTj5gOEklLkRHrp!d#-enIW~eTY>7Ks&r8h zC0>uy**e)Ur~Bm%p?6GAV>ZM(C{{w*kdwBdmnx1BE@hXykC1n?sdqGT)jS)yzph*J zjASVliI2m?cCH^O%B}X!{=veEKN9gGXf74)>@#bK9{K{i3bzjf6u30Ivp>e`qdE`->vMZyp!RC zbL67#Aw)SE&UEg(4V}Wu{#4k-Lh*pjYZ@`B!eKa3hzp#rt}Bj{lhE^@7JTit^Q+Z@g15e`)JYu>-6k0%0HeNfc4Epvh&8ZGXy8wjiyCCEB~{s`7~0BGHDyq^KNXlI&`g`rO?uZisW+pYfnIk>!w=FnHBn9->e_r6X}@(1as zQs)DXM818B>Ags>iM-5;z7Kspj>-l!1Z%3qGt|o6H>3V__S$o4GvH7` zhvp~*hRCbP#WVhP?Ac!O%tbDNky{qJv#OdHPk!k^! zp7d|^mDtu1FQoLOZuhx1v_TJ_JP6tcTQ<8}kVU4(ADjW&sE?YmNoj(!b9za-s^X*iAZR8IqHO2rX#YJ9DuivRKTvfj#U<+K~Gic@&(#GTwPSwf=t5`ODbMWX4+ zPR7dD`HXwuV>@md8qVlDiiDM2pG#}+kjbh|(+AsAHmv&qWDTNn??k<#^RUgDTCD2n ziWXCf$`$ih5A_|A{N#ZjRZgX9!U}~BUBR|V@;$2ZuueK0T^YMja)B#^_Ib?6Ej_gd zeB8*0&s?+VC&ISh`qn=A-R{=Y0p1j=Gcdu!z#$?MgYl3pd%L@$BFvBxg zW!+SxRRiB@8zFU6VLmA?x(Rz%=jEF{|HXEx64o;tU(2<(7W!!AOX|_p-I@ZED_6nY zvQMA@(a#Yd+39l>#<-WK(Rd9Qznf(oFEcqis6-^7i{L5LUt{_+jJ(bZaWwvj1BDJU z%1q#*)I#u0A@Yve$)n-6eeK<)7T%qj&LZGnb6(YFuj2Y~G082c8q+~;@5>AkbUiw? zlQ_9~beTzepY0lhP*2i6N!r3@CqYRLlxP~F*BseQINJo>!gh0GiQY~iI#(v0MTaIz zX`4+tkQg^^Po7QC81V>w^;e%(?5+t^)cVh05+*cyR+OqY{&)9_xOEiH;0=40pZEInPC zJy-QeGyukeTuguK(J*GG@)HMf6U;D$Pz;wJoy2Ntx``LwJ)ReRn+Otbpx+jFk+jJW z%0C5=o4l$-e1lHGVt@Ddg=F|J;y|%9^JNACqfE5Q8-yV%4+NpeDNg=sQqSo`#S)+v zSt6{w9#`5rJHH@sNg=?8cNkF5>l`-j`P!43E8-GxMA$-E=iI*WgM!k=qE9|~hoBt4 z3V*S&v@B4z7jq7`)%?4q{*!5S{^ z^~cpYjdjIXINm?J+O$RL(peE`9$ku;%7Lw_L&Fz}H1;Ph5dyY%*Q}lEzOC#2_B(`z zno3!2<7Mggf=>=Vje`H48DdtLj;u4+fw7f0Wo;yn*cH6vJ(aNnTck*QXUj*wYslk8X`w2F+!&2tvF?6Ot2t9ovbQp(HE30bdmYa!A zfQ>M8Kuqy^L7<@}zg?*Ih$QVS?5P)LZeJTYHJEQ%Bb`f8g6d{LMlJ5;F_kfj?U5AD zo1SnGVRtkURaJ<(kCncg!gVVPCECOCnFws-H3GkQNf8y>nDtGyPT zm(B`5y^OO={Gc{=u^!bR+M0D^?!+oNM9l_xpDqbVAvI*vomZ)!n+h9CL=faJCE3(U zu^9;4ScmR5l3Fpv{EST42Xiy5HQeR>u-C9#n_(-r2kaIkp=9K|Hsp|zQ^;rF`s-*{m?9sEEhL&% ziF;S`JN}%TTvr@R)sEzQ*sR-m$OWFL-E$hmF&nn4XnuYNmxwlf=+KpOl~rDB8xk4X9M|7tBcQua+Nn$8jHH}ks2fui z4q(O+jC!$16Dj1O{%#yKqcKP-Z!o_Da%#>1bx%$%@;Jy51qB+K*TmicP(U!6Wa#h> zg$j3?j4n3>)Dj-mZAmreT6F{}CO3&um?bo!{pS(Mpn z$NEy^Z|`d1U>1j=>~;4~ef+(fX#KFWiYJr}*k*e~*}utFrM~M~Q!19R>8fG@y0F;J z-xsfAJA=wPEDS!q@F7FEcx8=nhs-!u2F@x*GX^YR@y#UrQtv7DQnq9`4~hyDu<5me zL?4fjyz&5bB};uC8<-o<5bB|9VuJI{Z5pLY_H}|a=JxHC z9}d)nL^Zw}k%cR^`?XuP4>%n0s7(lUz1J1}9zFkcguEr!K7)Uo?K`_fpCq3y;qBP~ zu+4deS8!L|^ew2IE-E9RB>5e)%=roTWoe{V@X#-sRF9env~+_qm%H+-b^BV|@*f(u zH!X|$lCSmrmtf03i6yfQ5AN%MrlO}pswu$ZKTjf5GMch3)~y;MnCg^k9mmQNubow7cpeJQFL=bL#^<6E2H-elRggXv3R z7Ni0euI|oOT+WNOzkOsKn}&|bUg?1YUer|;h7bInV+V(BZ4jv)(n$R4Hr9%G<*%J4Dui>$HTNFx zZKx75t=3k`wTBgH^!2layjl^}Z6fd$$!|ByRYQ2$*4NCq07KG+IvZj~nP!+Wp3dmNmP`cY4Ms@^Wl0z_J{ zgeBunKYJ`i)1gC$LK`XdTsk2qj}vHljMKsgV3*d^I%MHHL#50{=%Q)IerWr>^~60~ zbmPPwp^;Vf4wRt?-ORAg!2T50PYcTXQYRFg9<8+OB*H?>$pyUI|K}SfX0x@H+Ay)n zwtxirH!V~shkrN@0Lwo(2}xHU>$5d^dzezEAIsV(guz#`-(E;vnQ=GFsk$5DN-8UJ zsh|a9o&AFur`()zT!bq*R&_#$dyRVB9rgNuTi{$YC$L8h68xuL&t3d_ez`WjCny=513Y`*u&>nlo)cR9yY&U(V&$(*JjyqRL*2F$^O3S^s&dv|;p7bVb z#ZGq2SdJfi`YP59w4QA9E@%zSuF>5~@q2}=U9(U$lN9FtpL;h3e%I8E0b%ht+Ei=r z#9|)Xm>Lb@uASgCXMnrg`oSkH^p(Rk-kvQd3osCms_@ zi}pX}HRhhnti#y_@+rGSpk66%QnHeUU6j1$yQxu|w7kM1MxG5{O#^-H*Dgtjx9K1l zBD_0QZGU6Vt02ikP6=cSLW&s%Pq-X{$KT2= zZvgW`gNRaCvV=JIyx>xQy!N^1VF>x-RlWuoKp3Wd7A4I{O`?1G$V|S}q?7M6mwF5^ zbFQ3*;d>-eViNIYac^bk`6F$fr4y8vwf&M7Hi4uH$;&e#ZAY_GRPmiv@HYe&wv{m0 zDRe>xE-&S-pUaAGT<+H%S-zI#16?tv-xTtRm6`J;({Q?TJvNT)md4ZSj$a%X8+cno z!_n)`Lx`ZhfK`>xTt4c#5SOTU9~_DhGMj|n+ybZeRC}S~&B*o}yc|RG>Xebv_Tl-C z_LdTbJ#k2HT(aMHnNJk;Cq1g+!lOkR%MMKln?`*nP9rSmYKEO(Fb*QFwPf{los4=z z^3csdcx{kk=&lrH$G)D2&B5l=lrCY9o=2o-mRdzvpFI|J9DB#*FY2!L zR*vHo(zU>+kjfq{!4-go4}q4@td{pZ3Cmnva36m1|_bx8Am_SOkFMpolEB09u|~t z8NSfX>r-`zZMM+A4wwIrz4D^!qPuIDbshf~j6>|rI=r{|`lwJvz*1Pz%Vn}>4c`x5 zgwYw}xKd;7b4h~CmRbA0~ zo@#tFYvB&V?A1<}z(DE5f4$0Q=lg?4ou70I;}i)iU7`mQotNyRH;`Q&qV<=tp6x8v zLMz&Zg^jxJu1OKT4Jz({Aq<_~VbcKbrnN(TFb=3!)alO4qcv%o4 z;Py%mv-hT}hIW3rW?osaKxh>&Ptjx1@zQfSaEG$F`LC`3in}iqPFMK2d-){+sOEcb z)O76h!F~SaiyVmAZKJ^u&>+3Y6(k;#Mkv|~(k>R@M6uF7BPEpasZ7_aHGz512gi|e z;E59Kj_suhf+jJR`Wa;=Kmci8$FbsUDkrJw(g>y0D%RmHMo zrR687y&KnRlw_X_Xht_FYaGKZO_U&$g$Aa)Q|X#eG$sUh9e;HG?Ic*zK&gEhC<8 z`Pn?FiAyoKo;K_XbZp0;qpO;JieQY;R%rOjmAf{IO3_o@q)VDJOsWJ3z>hBtU{?8? zVq{cy@5$;Y%GKgfR=fr1akJ8p@u~lUTK#gz22K z%f}pzc|U62w&bWD@_1UPq|2|dh{TMvX{d^M1+J0=cK}3e@Xb6AO~*a?aB09Ir$aVI zd5pb<8|N}=DSM?%s+ydmvd^-gxV3-x1j~=128m8CC&3M}`ij9dz9ZBPsfwjSs*bWp zSeqGzvo6s<+TO6Z?*>ckDb{S!gI|ifB;hD$fa5nh={4Pr6lKlc7kCs4%q;u*M^%S3 zbpm;K@kAzFdh?IF`)eI&h)Pwbx`n8{g$?w7MTdqV3?-%+M-a83va332iax~5QbTz* zL?p2C0kvJuaE-oW;^(t~vmx+cb=#G!va}4m56!-}AEiH%f)+2|EUbinQ{=D+csjO3 zANoC@AhS9Aou;XU{~E?cwR<8Io$cn09c6Vr9N+OBLOkFxnQokWf`A+wn-yo@Gf6lX z(%X)&AumNsa7Fopos(vPTYA=^vW80o64RaQi=EnggPDdM8Itkc|kXP$cUs~v_ zXD1umEe!#+e+nCIn|&2cwuonI^G3)^Z!aMqd;O{wl`LJ~{8bvvwz#=(xcBn8kt^~h z^RS$d8l+&%RJzL^xg@AMsp%g#TGxYvE#wq)&NWQ zR7WQ&xnt<)uTYx0Q2oPJDvBigC*w>7_a^n5R+BniZ&meloSqictXvnzl^^UJN1@j; zC+JYVzShpZCHQ0}o=m1M_zBl>asP;z-nUchtLNVCGG2|fM}QVPW2ucWUjrJtA{tny4Z+!qtSmN}gh9H<@WJgvEG?~v#_QEXc=hfl8Pe-@0{-M8}+x(!{$ zw{WK#hllhYJU1vSwTt@(-#m}KOBg~X#!jz~+B1U;yBeW5-{v$HEaD~*o|zQ9AzmMG z0ePxXEJhRlo_t@(UbG-S(sKbuWJ?-9Zn(-z%~3h-XP1t*`fe)iB=&&J&oBkQsr$@kpoxS+h*-m%jYAP4Vf zMG5hL&z+biyRw95k$r>AhH&TV{EUc4h`|d_**VW|^uS5_H9>}@W)BS1YOY+)?XBrl z=CO$m^;%EZnx7an=_i4TKSzt`WRkp!zOQ^qnz2W-?v@Xi*W_`zv7`sdNQ>$&t%Oq1 zC7NWFWiFN9swo=*bJ2D5@`;TAOms z>Xxq@?azs8?L)bN8*;hfaG*Up{68X+a~q!9!^KKQ(6SAjXeuyY%Z>z0eg&5zN>vlt zHl9Ni@2(voZ~kZ~bubHho}g(cOJ!^^{)uQ>eZ1^AQ*MWmVVajW_*-=gYS@OW;z87Vn{5}#~JX9)3tE&z{0gM{HO01e(reD-dgux~*TnK!>yzO>@Jc95YeHFuBv z&~m@*(;Eys_o?f%m%I|YYyIz~^V z0w`*m=(#;*fr5u6V@!3j&yroq$_|}%txfNms%}}AXY)HWOmj5~JlP#(r}Rmy%}B%w z@SAS1PQUJqV3h6QsFdfZHQq7Fk6{FK7ko-z0)}+c$ThZk@@9#-Ot}ANeg45|U!|2= z)|w^Lqy_FSp9TcitOQ06VE*&MIm6PTjNKoJHmg7V^L4}jqTVH^7)wl;e!?%q+p=Dl z6AAv}@84-P)MxPy`=%E!Y)0y>ez5DV$vY!kZl(9o&flS5Odj6S7%d=X`lt2~7T;~S z^S@V{^0}I*DCp{H$gyp+4fYx6c4nw6oh}N(J{U>x2-35`h0Zj5e(hYy0GHk|vTuB# zKsJp=3OCB{yBhCt^4BrA)0m|bM)<}>rKlU)_iNkhXxr@&g~HYa{P)>&<8tHuJnVk< z_ps5OHEWg@)%Wn7scd$xkQbQ=E<1ozBh9ZCuGLvyJvw#>0NDHV#jhADBwR~EkN89-DUgN4-e;^?q&AgK1llEQ3dZlY+x69^( zg`yDLzEby(v8HW}V0q7CGCt_2A?ffWQE9&IuoC3yE@pVP;4WA3w%y19r%Xoai?>HV zk*j9XQ!~KV84LG`^!t)1jh#9@f7sd;#@rx1zmAagV1Byd@UHz}hr?_}AuHyI*q~}k zRdM~wg>NCdP#_A#ODy23Esl~jBC<_oT`dHCp$2(v`2lr<9oA==nwd|8iJ}jwr6oUx zswFRK@+a!n+~0d-$$CKiJ1u}L6v!xkS-y2EpS1<)k&&MOrWNLral}&Yi$9LWfZN2l zd)1=pV98+ow7$1+c4!~8T8I7l3}Jy@8=UF(r+LExtat6}$q+?|nq?0TnA@cju$%Y- zrs4eaaK9YaQCbL}dO0c5y2o~8tvKq816Nf%3+{(a0GemTZyK7_EoT`nD}PO>c})r@ zpk@s8Op3j6;9t{oa8=KD(ee@YcJmgfLx>KrP=S=6^dxc*eRyQ7;F6Vp zU{*iNfkmlq5idKp=qUL+9jxc7%zi46C7ZttUog z(AYp>E&KH$!g%hZNAwyKcuDbG3=Cey#AG|`k)AlDQI?G*v3Klt#n8w`)vw(Gx0+UA z*nC}$Oa{;h!heud39#l6aIlkw{7gc|mY?py%xEf8xaJ~f9p)Cf)TgTyIP`1l z_$73pE=D$Wo1uNM0o~&O*3k71AJ>+uzo{3|Obd%~OskSNcFx$GxxnzCI85}XO2-Ie z3FO=!W`1y-`Sm}DG-@n~;TT&zD<#yaHCK}OE|+p9HC3sw576RrV4#6Z{@?6)jf98q z$~~$gjM*QiOGefOA`;_0WRY>SU_!2bhBM3mtjBeC@@#>*&d$#G$qYK0KjQqZ=x&L8 ze#~!*0C4rj$AL#D3*nLY`8=n`on!q^Mc*;+YsmXmmTf6J-iHmmSms%M#&N!JgrI5SdX2*k6H&D$%`DiR;H~K*>WGx2Ieq^<17kewUaIYZ_gJi}>4qn(8|^7hkF|@%>9VI{;T#Hnr3b00 z!>rB{lsdDOqm$;m!V66iM=j$6DwCpoO|t~u zKZntFO(FHJ_B^M%!mmsBIQT=s&_zI|1+<3f5L&V^Z&7s?gz1^Y_V+4n1m3~hIS$8D zw9s@2Xi?G*&p$f%mczN^f!r*)rjiZYaO1?6{s)hTJ;hQs*D&PG9K2UtE9r1+MT}Yk z#86yk0t6|c4?FgKQFKwAa9>Ka5QaMR_J*A=?stg1jx#MTU?XC6ly`II{2}6Sv~`i; zDmOl{dg!WP3wk_e&P}bqXW zssoL3H}xkYsXAHXRVRPHxK~M2Pd;UR^_{2_q%=esspD`Oh`q92*DFcWcH2+={^sW! zwr%GqB!A~?dn)Ac+>jWVgbWfwGDNnG^Vi$nEXS#gG=#;VA39AsEuN@{slb%d08n(M zR=Kp}me^wQT3bdqs;jnD&vR~LTDi)>R(IzEoTQ!=F z{~``#0l()46<`K9He*Q4yJ~PA*t$-+))ia54`{PcO}i7m>#vo7sqC$T>wt~_!o`8i zm~YoE51E_hSwc@|`td}geA%1z4DDSB*cA*X8EgD~XX`u%z_L4eM^e3oJq>ar335hq z?E{q8+OXGF0hh4_PJ}JuoNZnDjQE@PGT>`6r z_JloxTNOIpoFQg`nt^iDN-|>08Y8cen|C6M)QvcVTCiL*&FP7+Xj}j3S*3_;g4^vZpzkIAzz^46P0+-Fm_J ze=V|X%M(#nF0m!v9?-{QFf3799%%b5gK3@F@u`U5A-}-hHQTpQfHc;#2i^ZfNp@4#JJiWO z_22>tQF_;;JKrJZX6B@X%^4w;Uk_O6C+yR9f@5cGr^>X;45s|2!eKrXm@!qN)T!>c zb#jWO?B6J5__K?}HPzs`-nO|~vKnEJ&zVf3edMy^gMOvZ;t zz()ThDQytyh8V0NPMp-jMa67p0XE-+$LkSn2hW8_Ay-DBQ92^ zEHNl~N0#?X8b(D!NL(V>G7m;*)p_~z@#;d>!xR{v6uX&VBkUOwRuFOA7er7%!qN%&7}>6#Q1Y2^@9q-GZ#O* zd%RQ=X{9gt0pF#aQcL(swr#xq(7evv^AJD_&NBA5m>8U}Cu+W{i8N^*YmK(xk`wmP zcUJy&jo3i~Z`V7hu&AvkR>BoZutw6ap#K41(}ujPH*g8xmj`+n=;9bb9?R1{an;{3oxCG@3V%bU>`@GJobW>zeV>OvbWCSDd zUSo|N_R4Nig(6Sdz;gGr^X`C}<>%(wfJ}uq`SxAGb6)yItHCjxkDo8xLOT&jg>+U( zLk%IO9vmmTU~Qp{ZLf$gm+mQh_CTZBeg@S|i>83Pe~@B9hr`$` zYLv@^Wwm1Hg&NTj~j&mlm8?t*Xx2J@r=FyL>EpM#8wy8_o_KvQV_7TK^n^$Ol zsXC1>EQ6F!$-^qt+usBhueY=gS9HA-752V8&FL}QPU)Ibm=6*BfGUB0afBW#r`uWo z48Bdm!UjO+=fR3tS*@Ds1ZM04gB*_uKbH;gCXaKP~T{0-G(PD)Vm(lqYaXG3YeIwehKYMi_wvXo9zy1Jr7 zmL60H80K&eO0(cZbJNxr?_n?ejR!?Alh=pn)&ELReBxZ~g~Do*DpJ|9@dLwyYAy1} z_&2!q@csGR_$d|tC=_CF!cuG!3V$dguK_(>vyd=&?{!d`C2~RS_#Vo>rn1rFSKnrq z9J9bv-|5aRQtB}O&U%0R%-$pO^%G0+36JdBxluLlX2RgbeGmIyM|wu!dUuK_{{MJ- z_qZs_{QrM6&D?a+v@mO(Jb@`X9#Be=(KSLB2_eY?=B$~5m`!A+lgRC6>xpVo5)zUj zQ36k-pr|3Utr{xgh@dDcQy?H9kTV>d8SZ<(&ujYpe*g4%7%+1muIqih53j>cxFg}} zJRvJk>@f{gQf^2+s%Fn_2PWF?numiDUN_x+Rfg%xWziY`l=s5tUnaDlIW`ZIx z+{3E~fhxQCme?&NAg)de>DDBmJz%4~s#mQ!T2IAHVZig>)9)9dighlbM1G`%JWaNo z;RqA|i4ElQNLojf8K^1TKMf&%NMDXe z5J`Wi-D(ztqQZ6OYAc+dng&W|_)cHdtjQKxMv6!}bU;`U-T5s)xtLy@ne-CHF?onP zAzP>6AZrimZQGx~VS^Rte>Zy^XXDW9m&?^qz*2X-j|*xtzvk|8rmdI#1OEg#Z`}`Z z&(`WmAnZlD@(d_*i6>>AG>_@UC2c3yTdZbi@`6;`G~izFK&k-wgX0l;$BK>(l7VG| zPDZjk<8sve;~B75rRB;Ke>vfry$t!Oxm-DrWpAAno2k1Z^m*C!`*}G6eoXC3(W9+Y`8UN9Xop0o zKe#ZZa&vytYv$I9)S2I54iMV5BknZOjgDq|TsYt5&Enz?#|qHUVOf$t%^q4HgjJIY z1u4b{xy0YMk?kEb*{Y(W#DbZ%awt|(dF3h~@koO`W>?K6LPqorq$9PkNInj#6K%wY zlx@i+*(*PgzUDNN`{(FD79n;>T5*^#sh&1BS-^qzC*75Ie z4!tIALUZrLMfaf;It~0)wN5@92GV*$U~JE#)?spaSqOLI!5ZWE_&rr#^R&8s5o@X} zbjG42GM%osgxK_{tRJ|p=gn9bf7NXzQpIa~C?8OBU$YS}gOKT#gsR=xuJ5$#=;!yT zqD0MJ`NiMgAHPI=EPkcvAGVsy)q*AMv(j`W{aI;Rr*j(u5Ehq_ga6gsGby^<+d$To zoreO}6&@T&M1qtb>9C$lzn<&Sik+o)4}`a{2hzb!8HxeTDZ0qy!s*>@>Zy$oFL#rx zDR^i|ACUUh{6;gi&-oJhR(z?eGN2+08SA(}&#pg&%D|kISGA>ddBTid_y-;)9cey- zY)@Gc_(xBt(Q8L$KA%vn5w2HSsM?;_Y-{2z%eith;C0L5#LJupMk!Y$WGW+za)tb4 zr*4WGC-t0r<%xLMaGrtUb-9p0>zF2Klz=sH;8^`9L77N<5x%nKJ@-JMaJgC_;J)Mv}syY6*?H>kM+>EuxJgsQ% zPDk9nOmBy$Iu#>)Cfwqi}|ep}3>KL1m_FTjo#zs|zB*Z-%&uO{KLEiMNqv>FcE z;#Xs?@|17f!#fp`-Y6ksPZe&JKN&BCP5qqyZftxc9=ir@tFNQWD$xI&v~LR~!C@Zv zgX$d!Jak*ORd}&>=$)|6u9X#Z6AqKtsMWZgaSd;3} z`g_V>;D(@bJ~Os%j*l2%u_erB4%!H{wf{yT{HJ(muAyy){TI~jR|e~*BDioVKS4=# zgLV5DkP|&z%%8NG8sDRuQ#VmDjyL2D?!k>#EUZl?PW1WprL2N~bwnRzY${|UyDdxY z)UG79dcwKVR4=6VGUAsB%k;Ih%7p_Gf`SQa`jlETsdkC2baq z&fK~JZ|!-4`;;i4&=$HVaBD=@uIR#X_zlK;qQnH8*t6)48TNteAEUqAWV+(gw$kzw z?xa#~N!?w`+FG$Io*$vLT@p}%wsq#SRX&u zYr0M*NnS?zMcRo6=^j35cLlZL_oxJB6*T*^BGhWckl#K}XO9Wtz)T6x%3sBJZpf!2 zW%)uFI9I@TKiGyPRX@AIyzULA%M8Tkf9&2|VkD$nwMBk^o&i8~iXPS6_zrFRPY#h9 zT$r$F|F1R5>G(S1@Jq?5hPZ5e<5^#kLLMqaF=|`(vjBiraio;i{VaHT1&IW}vU%MF z3T2M)q&M6|cCaI>xlX=^@H2XlOaThlowh-;7C=q^WuG6|hAG0>qL%%zzR%C#G%|sS zl`xGybW4h|owgIjN`-)d?Mju9U2C&mv9E%)0LfO24vI&)`z#fMjY`!pyT9?CP|a39 zZWcPqUOPzmczG-(TKAiug``}PFPL!b^h2)=b%(_EZ@UR8Rs3-d+GD1@e$3x0Bp&r> z`A$sl-l6x>Jb6O12RK1QKc#xmQB2&0?q6>@yvV4C^3>;$w*B6&fnmIexlDg{uOcaC z)5H7e*biP~p!p$`8m@D&D*1q*H69P_Q5D)sERR^WfpNuur1hTrT;D}^ht}OE+|sM% z5QMQl$K|cnO%QdQFzwku>T?H?hqw(2TWp*@2#`uJ;|9|Xqv!;O-YPYJr5f;Tv{bEI z?z(NhiL=+_96?=ADhwsLe(IVy(~aoZNz7Nuy%VQ&6v92TSx949KiePZv( z`=fBnz$E8_mP3F0$Gd$tWjE0Rymm_yP*a?iO*s=NI8bAm}E0;-%Hr=O%ykUZXC5iQ(kFra3A9IQmlbrjWs2vqRa>XN^&;%G2V zG#=V^GU|t~HWm$TGdBz_QriCpkTOj!Q8 zx#LRC`7O2Q*!vdk@#gJ}J)8`K_r{W$v5b%oryLypT;$+44^KD#ZoHV&Z^MU;({>c4 zQZVIADbtV58Ai^#XX%w7~PAUu`D)d#nBcJTPrPY#5 znjCBVQkN!qOiH?awCK^9lT)e7;PJbx!-b%=$e(kP5$_G z6{>(XrvKngqI3CZaSzd}v^RPPc}vX{P}=8bJWCJj!7tqCl4U6eia-DxF+DcQp?i#O zMM10mRwB#rAF^x~Q5sI&gwI=i?p>_A$i5&RB?)1XziV@UBPbPysDcxW4!!G+e{0vX z`=i&?AwO_&M*p>wyV8PM4kr9h6&U8x`o#h`;-vfYx;t(?VOG{<^+OH$Mo7nw{X1(O zwW)q8dEi*OsmRG`C7g5oR}FOqeh+a=Iep$;e=LkI^9@_F@UFvTy9Kvu@{si{`(1$- zmcCC=BckIc81sq{5JOzTc4bvejzEhx=j;OZ&!?%iD7^dUIGRP$*6`H;`aHB)I`obj zfzD9Pq90~@s4USTVx$xXlxe#1#iPC3`3@>&vq>$}Sj{oIX_t5ETrM(ijsN!db_%OG z&YV?4Yvh+j`=f0`A6-NLAXjVqWJDdR))c61SM&_UX|%rN=9{^-zj)t9OWTIA%vP8~ zBkTDpPjdz`<=RycM_^0dGPW5GiVC4!=kyXp2G)&ZwKt{h*dK6De0Ts|hD)_{ZYOWZ0(kN2VY51UJZuq_BolApcIop5x(1{7C<=SUFD@+TbH`6y` zDjznB+y7^r#nDQ(qGalFe{tR6XiA#w*>8InW>KMgdJ0g2&WeE!U2*l89o+4yfjp~3 z&(;=^Fo4K8%9AYlMvTfuUs7*H3PK^4h{qhW=!kja*b74_JZ#9O3SwZm0|ihXnSZ0d zX{si-TGOtO_D|V7tRH$&yQUYlu1IAG7koL4xZ zK8P9GAx)WP064)KLuhmfBT)6vNu0WES9tOTrLO_}bN3VA%o3|2Tsc(&QPldU2=8q3 z#s~1uE|g-5y755>9f`OU#AzzLI7Uv#H!fCrZLLy|u6lNR0VSJOo|5tCQ$=6tZI3(a zHv0s1Fp^$Tog*MHILdS~UO{cP76r+9=VN_QeM5~jzT+?cO~xmka`|qS*EEF=O!@i(cl|RZ}He@{|@P2Urg%pGc)FSD72%(G!w6iw^ek$Br9-mnVYU{#oR6K%Jpf`%Mxs6ar|9&rDW& z#nUMETm(Y6aemrI+NS2NLn>N}8kr;l#|5RV!+WZeHIx$aP?6~RqeVkQG zb091I+3||A0xsQriTJaZWiyr-01Dq*mUm~c+|+16dvW5rr`w=s(5rApE&7*tic|yU z$ySvig!KO9gK)^ARMA&Ma^(3iLxy%0--Wrz+$nY`M{ZSa94edjwH4*4aj>jy#o`p0 ztWIPe9s7~C*|=}9>hEJ|^zRjSn0)QDeJx6LO-8YmF2^KXl3OVhqr1P&#r5dqJ3$>j zsTPW@HH5qV^K&Ij0Tqrj298vxc&2hJ;x>;Ek<+<1V`wB1o4pvl?NN2hw9i!9hAN|@ zUayaJT_Rwqr;a+xfopPB{>dESDc_AzeT#_E(qRYeID_;o+Cv#kPk2#0jGg%f_@i9y z9HJ9_MRO^?{U*=r6N5MF!-%||8;Hq^d^o)GHYX4>_-Ff6ee&^L^4o8ub>W|ISboyY z(9qU@fppA8>XWkj3dPTl!j&e^m1J=FBr1=#J5-k{l9p;7{ z2sS@vDEuy6J|X{a9B7V))5l^1);U4k>)6Jb9=MOSVJ}i}qYWkPX4M=eGsD*BhEj6{ zcQ(0GUYljE&AHRW>rL%6i^Rax{;RS5#zj4!LC{*Xh6C>sb(G#$_|5fkSWmm&SUUeC zg&}Yo&RGW0wKJXzoLrRZVw6TglYux1Shyw{?&LhFQu}=RyioY694se6g!_6wjoP~c z#H2XU;j89CC6>&A5asJNq;EKM2lY{cl4H@wT0MP^V)Ty)SABs`e5L=Hkq{`9GeO?Y z9P0xA&0p)C9mFfGG85S#N8zS|6R16X?VwyvvccTwGW6w|hUMoY4Npo*~_htX^zVq{RLqseth1$^PeJ-5L3!cv0m z(Q3`;MJyHIfFAwjA0Jtpq>VlMm7ub^n99sgMFa5!&t@^Eh}>H7KR7D#LOih` zZl+i2SviTbMB0Q{+>T7X$=78Z=d#d!G>iR(4@NwbRXe z($Pfu16l-|JzN|IbV)kCr_Ig!R8Aefqnah}qtR1~iU;mMm-}zpFFM&SSI~*>Iw2%Z zVd8er;#a;$LtBxWR)?;*(qk=6y4a5Gw26UY>zr$Xx=z3Ysgtg{b#xo-Oo%%?6E7`Kj(hv8`dT|cIG`A zdHu1?15D(?QOPLuxayISliV0lfeRUM`SU^M8t^^Otl{AHeQ`I?u(L_`a5BBb zYcK!aJ%2-sg-3?uT{GvaaFMwjgjgf$PjlT%3^vr84fqRa+%+NKxWO4#h1P7(ULWB<2D!%9Xl?BlaA9`_BVN>K+#@^zMmOG z+J2t`bqh;~{xBn7vEZ8$68-nL9_;(@;P@rM;+XzsRs0>-9i(QJQ(H1eq{Y(S{YCtL zpMq9rQy7wYpi0$BNA4&FWWk3kS87y51+89{a!&MqM%`L482#iYQ$ zoip!w`P*)T5Gw!qqNeMQZI%ObvCE;hS8ZSBQq#xaWZQt}!{j2)eIKUwPU=aaBO^tbI%82nyKDm7 zO4aoEaSvOuy6d>yKF6=pd*`$r&DAU)a}&uQZLte*V&o6h9aj!+T_z3*54WxGsMRwt z>YN>wk0rcvHpXknTsn@0drXk=RR?b2DXCc&@28{)d1rOH*GyXvX_S#CA;A=}SDTg~?63y+a1 zk*Ipq4Fe2IrBtT8&3oo>&M>X(6h*^Sy<_=eRfwO{`sBMn1S_+9wHEv=QCo{K`{VRy zEG<&SU3s+b6rgc9ACz2#_z@}U*Mjst%|a@v815<>?9ArCQ&Hmfa|}d6cGdeJzqe7J zHhiUiSf@d%+Nbc((8>&QAG2Z(M!_m#A4CT2Qu0Xe9m!vCc8|S zT9{iISyqEmFVUV$m(66=qg7SeMV4t-m$imxf5VOb)8c$0mGS&u0Cy*}C| z*yF9kbjl=GrEZ$+Ni;quDCBSZ@pyY9&sB^E-7g%B&e||TfKdAMOjhu7n&`&fy|dS zNcBz1ZO$TF_E7mTc9%9XDXsn2E$KrUU`Vmt=91Bi%r&YpXbyEs-M{+J>Z5M+NQPayp;Uv7 zK`g_{P9$A6|J5tu5q)l(x#{1?9W2lR;4(W~UDhd^hkvea*F|GYDrUfy*hosSEibXZM>cjNpn@k}MG~r4CI$E5 z3;mT3aHbH}VQ&+1iqD-Z+DptnbS)JHC0n!L@r4i%&a zUYTOibhW4H0d_xkM>eUWO(jWl;$R-J0<(vvHg63b4nmKVO`vtRz8d!!QIF-}j)0(V z|LIoI_lZ^kW`Y&X$<^72gXV@0X+}2T&2FL+`l!TZ0S6yPC4(uqx{%KyM4wIXxzod2 z<}4Mb%dT*PAIB9C=`+Io@J($^MQ7cjHN?p@-?TZY@+&5EB1O|!KUZ+IVCdZ9XS27y zinMdi3FD>^SaDtP2TD#1$Z zh`XIGOzLs?#c*|62Wk`7Lw3aibVBI$0qVj`*%uSG-g2$5CcW!v!qQqNV)UIwwe zw)_51HCp3X?s5*5OL8isP%@|16(dmkMm%ZSQt~>s_2heLo6N9km(zbg?`qBcMPFxF z`Uygj2U%bi>3)>5kSB@;{}Jp?0!n)c{M4xkpYeD1#+P!27IiA0h!c(Z*vsRMKW)m~ zFw*6hSUVr>OD5+Zb3xw9hGGHM<}DthG`UNF4_o1JyBR#C)9hVrKRkoeKdH3AZmbg3 zq)s^$vr}@c(D%G>f)OQ<>>hlU1{dX}3tFX3y+|*DC*-G$%B2inv1qeY{Dow*E19Fc zQfjn9h1Y-o=SZOd=T$#$@^m885+s-fFrY3Y(-Ykjglvk>Tf^8yb&koNue$<^WCc7v z6n=opVe`{M3M!-qYk?64jQd5_Bf5?3c&gz3`_z^Du#J**_FG6#EdsfB)x<_c7EJQ$O+Oh)d1Mp~yB^%_*3 zO4sFxn8PBYgD=NL&>j9{T zY0ok|S^cuedY@Uwgs4+!inRVa2jxnkaU0N-x&u+On=g;AUfAM& zIvEVXt(EV8L*^!8xF%KGqHQ=Lv|T{?$J-W}C4%6?*kFAJj)FiC=)3hD5c2UPyfbn>kp!woN?9or_j}^W%AW919+ty z=`#_b*>s_Bg|}1N6-PI7@65?6#-Ty{dBt;d;|8PEe8)dQQtpxxcI-9RR*@Yt7CUs6 zD0k?z{AkxjQar{{FT_d=P6Lr@g6WT9fa^Bz_!NGw-3P5P%bn;5FB3S-O&7xN&O?^J zqO-Gq@Spmk9oyGP(vJ*qN2`wdwYGkFN87LHY4&J`8TNt@6m7J3LNnv$m}mGWSZfYjDLf zLQ~xTGMz@Y3Da>^u*aREB6wC6#=v?9&@==;lYJH&`c2ueHj)WE>h8k>*e!G>M5l>+9lh0avvn=-R|n}5V!@# zjWMBK%=o}Y?DVk41DsnlZ}OQD*D3J2P08ZV>Z&<2U|OY?lyH-GoP z^O3X>ZLp~zuEW2ViZ@DxI@>auNB&*KZs?DXe+r~*^5RbOne-vQ)Gi6}yrY!VA%lA= zg}|9~oCACGUxQAY9}3f<9P!u@fs{&DaAW1q?2HC$FX_ozQ3^uaZte+tEl`e_evnlb zN=LHU3QX0YFgzIDE9)nkIB}fbcR$Ns{j=>=N>Zlb7aQ=rojc8Sv%2+ljNm7V`b6BFCT7*P1fe&`P)&D2Q?>tL=6 z_PWteSlRV3xZXEEw!19Tl*)_YA%E3cT5&5}WnT9;a~J(a3ptV72nPQFKrG$vDto!> z3|8^mP~gQu+FjqS69?7Z7z?fMx?;FfO*;xocPzKZEH$-VquwG6)3}UpG5BVw=v)Jr8ti-3>s%gIe3~MHkPZ26cL>!eWeB1>O8E zzPFq?`d%%Ka~%O|%tA&@ARcf^xX-6j4EeQcX&D9efprbZP!1dtDkh1X1p_YGuYSsS z?=W$10C}JmF-0us?Sb4&OKrAPUfjVLfRH`*A#G`ZrS*3M3Ed4tr=Y%tR9KGFk)`^= zF_HTzVe_}I&hLto?#5hw=7>_-XMzAEou6_Qjca3BS!K-71h#6Q==Y4oFf zqigXZS_Pv_e9U}PD2tz23yr^hwd}`%QpT)-riYAXc^KtFL5Y2uT(Xn6WmzipuE$Wj z9q%J@l-WpK=+1tQE{F?Dmv=xO2x|1(&8nOSN+qk~O6J*#7L_}2cSXm4%18Fkq%ruh8tn9cBi zD)`pc5(JYl=YTQg{y)u#U1lHYs)7h9+;X)|2l>Ln6^rQa>+)E)ozBg}zd#g#`GHl5 zjIg#DPjaJ((0rwOr%PI|0qC~U<$vphLsVcG9Jp5hjV~ybqLBsuOW7=8y1>2brXH}Z z6{^?H=DtGzE!XC6ZGYZd`8(r@{KPeWd&JL>j3Ijohe2wtrOX8UhLYV#SV8yaAeBMu zhqNL6FaK3fOO-~8#mh+IsPFV`3Vn^FlTnxDTT$tMVN*BTmBy*bvbXj$*JGR}5BBhL z_aLeeAp;-!0P8N)$<*GdsXL0CIrk%Sz`}EP#k48Py9HhTo3xR;rWyx zRbB6?8R0li>U%+`@tg=oafix^c$gaTkQ{XJGR}ic(d>U!I)K@zI~N=)l}GG7(&BaU z>l%3l3KWhB;`Cl1^Q)0TiR2jzVADQRkmw--3iaf#gE@-VjdJ-PCkcSy@l)>Ag<5v( zG2}ZJkv-?gc(!C%UK3`%&yV zTfw2E=nsWo$vY`mnFNnhBHm@n_Lh)*4HwSl+wn2eA?itPXRk zTAr9fI6bgb08bvgc9NGnxg!xIR=kaU3W$#p{r9p=%COBZ(ym@oR|(^Sm#^@gU7Z}&QR_~Y>9H^pgcmT zR||SE=he`i$n$;zjeixgGP}8e#j2y?R@REG<>9QPsM#wr+jp@l=B-t*`W-~`=_Ivx z(G+P^9mHptTISErs_hmMwGC2SoYfh}L^$QyFM~gdyCX?1=b}s&aT0U+ly1934xA>s z0`LBS>Rq3y(jH?KFJMXZ`1NO&4(d}Hw5DT&c_ZN{4oETp`#&mabhrt8WMV63#JppZ zz;=@yuIXcKG&dZbgOne_$j-{1*-JZKN_ZVPXJp$Wghh+hBR5ck2Hm$@yG3HKpXz(_ zQ_;neF8r4#^Wc}6*H@BAI82Z2K1&z0WFGeWhB}56)dmuYt-UyUoPSmq+nMO!4uM4J zR7U|8H1Kgqc}Gz7T+}>CE;eYfKgZ(N4ZkC89Sx5mlI%E5fDb;^4>f-oj>0K|EmfL6?JCNR{pyS&rOi?Kn z{4@&SRP5nNvv@^Ml8cp}JBNg@RY419Ji6f!yYNNU#KPQd!eRlaV11st@$jVdqYo_T z3oDh>rl@`UIcL}ke$GOwWFJ=15AMxejkn~kK;=hr%!mi&Cs36)J#i#s!xmMZ#`TOsjvtXLJ5jl-#i;ZJ=u4j2m zoFI$;8g*Kohv?>TA^>)tuWS|EY_;vmzxto&u=EMQ8)cOsg}7X9T_dVKNK8XQ%0K1R zkmaUoyG~?4hmV$9E5$)Oznj`Uu@YLltz9WY5xM<4a)aQH7|{$Tpnh_y+FC-z!C2sc z-F&04bdw;T(ESkIHMMo|MSU+kxDj7P*1U_hb1j~hS2pKj4{?7^{oRY+P#E~#(aA?h zfQ7xE7?lY7h}7-0^U**0@+STXRZ;R}Ix?${4gJ|QSKV1J>l5Fcd+(P&1>R2G4EG&y zEr08O{qF_V26B=?qgk}FADZoMa};6IS-WTLrDq^F-1&_eP`>;zQn2nP7Fi3>WwQ6o zfs>?kG?d@xWt!WreC?Io-0KQx_dDka&xE?^KuDUydz&{hU>;_p8{@!;uENwHJ$~$C zJ|lO5lF8V*dc%A6`g~hgc7b*3W{=nI6pt)&nyu2Y4Eg2Y|EWSJgz`Q_lQ(GF6duJ^A4TCh_RYMti4Tb4`YPv2mc<{$F_8x##IOO;Oea z`ug>|2(w27sJv)Z+Uo5enm^)?ThsUJt!q76hjG`EWi)5Qy^E|kchRAIqHa8Nv$hrZ zIFs(9zSgF3udvUQQ=f%;{Z`3@jd|zMotuZJcsSNuNG(r-o>26{jm2{p`Vhkqe&P;& z3hpo`w!1TIKo14r=P(Krri+F!8bGdA>ntVzngANGQ_IVOwWNR0iR;c@K&nR1T&xS3 zp2AWxF#_V4%SVft{ESgH&I;N`66*N^Uno@|jPnO)Gb%|P?BpQ}_RIuQ_nw`p^O|>& zq#>bK!yYF)^;On)Z6MZY95u6UKXYMe$dOajv`4c*X`FNgew7z)FjH-8xz~H8>x~I` zdKqZs94p`I;e|eqfgojxUZt9ao_?TydeI)ATqv+vU9D4fZN!mak^}@YVD9~K-eq() zd2oGWqf>`0Xc;$(w{NsqWfS{_Io_{3GT{-#(GHcLkDT3mnF&^Lug*P@?!>0x3@XK4 zC+w^Dw)98~qHkJa+wXq2#fyRUAf6h)R_S+sc5l?6W_BcOab3!kc{B}iaBr>cx`ww6 zbR;*ArspzC!@kpU#y=xJ`exJqQGgm-W6otgU(h;LZ>1e~@C!goh1IY6-RJ zwugA@B?+AfN@w9FZYX4eW9(`_K+iQ*N#|8UJ`z(=R@5zM=fXE5MimAfuIY%N!Y>N% zee`#_1$v_QMrIdlH+>(-uPTV^6)_9=hO@`zKRB-N1CEztnfcu(2)N!7qF~vJoHUVq zd|aj1mTUHL-lr2p7Asj69X|MIGcG$;7LEe!UqM5+ws zGhQssk{Orkwlch~{%?(v;_&@Oamhi>oZ&Kf&I!#JnQHbanQBDpjhJ{%IGqIDsaQ=e z2I&1;(ZQoB3gG+X)B59rm^ByNHE(*ciaCdVlvF(R=y(FFw${Yc8%x%zV)n##%HOHM zUXAfX^csW*e>+7bN9YN;8Ybs=hLzTP+^2D20n3x#{cYu#wX;yyx}RR3)ww!&f-rba zqOWpF(6D~o!v2uVZFBR4p>Az5r}JFE%g9t4eNT><6sdIXcptBNk;;C(uJ`+iazxPh z)0VCieBV6pIEWx(1r>%Z2(WFAZ_t|jUZWMQ@$8^4p+c?xQK-v|R5M@N8eneFerozf8sq3p5&;F|iA1w5%y%7CDmSC?W z37X~g9%&JjIB6a(_W$&lNdja=7lYR*^gN*yW!qXruwzv+4SNTzH#t+9vS>wm?+@r! zgh&1YDkEmDv|l#KQ34NMpHgK3*Q0Cub$dKy8H|Rm@`zwS;#-*t=l%?>QqdIVq&_^$ z4~pm}RqzA(YfbJiu|6M{e-BG@_|@II`=OvE`W9Fp{t<7-M=x>mf~{(+RFr3K)Jo)J z(Y^ox+Oodz4A9-!Z(G-!w8aSVg2eYwvU0{PaaGc9kT~cjXJu~dV(I8c+J3- zkE;0k5_DN=9+^aA+N`$S0w%0>J`n_?`Wmh_&41oXA8Qm9@FFe1y2*5v+K-5QAeGl9 zF#^T@vLJQC3cggj@35kRwZ~^bq=UvmkoXPK^R#dtYsdvF37omTYSYuJjeZ=r6p2X_ z&{VTusXow8)P}<2jACcU!9=5cFl?5qDeLMGJ@szymAT`KWtu2Q0@l3&iWDni4XCKA z*2XN~-i4*Ux&}{CIGkjA4f*&Y$=O__oxDl?bTGAJQE<6tN9OZSdjnzrIn{y*roO!} zjxGwwOv^{l51wlG&%jL=FeYTZgXRDS>BxH z_P~*aahHej0_k*Xku!_~3Ug)4Wtzx!$+WN<&FfHe_y{1R*ML8n>*FnRSdL{y&bjjp zxG-x=-_y2NbWREreLUNhg|+ED308)-hX-+qW@m`VW2a>XfOWpOeMVR2O4T;4}3L_;PP6aG~0g?A0p$$H1jLv~Rf|d|5 z7xIm2j-{p9&BAIPZM29!+up2j^DJM@xjj-Jnh-8tQFILg@g~&0R z{vG(>-f}F*@>GQ%*;il~ZGY9@K8Ey~;V+Cl!D zNp?>>nw_e=TMI5ZRi6K8N5Fguyr>}N5re;R52d0EkkHN~X{RJ#v;TnS8upZV*XQ+k zo2tT!#S^eruBLWAmHnW?>%wdvjTe>SwS-513@XTxUkXaB+wmcBImz7Fv3dA5`2(z+ z&216LP6Up{JJYoQ;3|!en(AliYu=Wum5JBzIANczfzExjPrzHrt{siDR|++j>E^vY z^Hm1xa{PLh1pY1PYL#vmvaHI&^I(zUJ1<=|pOu^E_}wwDSMrPPg=Jz|Nnaer#k1J~ z75a|sI2RohW_1LB&ugGm(&>xds&@RoW}wMdfnk$ynUX*lK~`#?zu(Swp3YjN?ts;> zc|;l{&ZQ$0S!6==;(Wcq^pK}r0sX?%@M2Q6Boxgn2Wx9AvX_V7m7Uzq&-1#M{BuYMZoHEL8}Z`RzM>4AwKYRYOy%2c0>+GjxjD zk9WvW2IZF=8mk8MM2o~EG2e5^4rya8qE14F33Wh+sg3OR%+^M2faC&`C&V<9r0CRQ zSNy)(;s^2nQxUF{B0P8LeZ{dH->ADk3kyT+KoJ#TLr#xtKzkbekR6_{l`kzVS0&EU zcVr#w#+jw9@AO4K;Db-yy@r}{l{(LWSU@P6GNtu~3JRb|PN8DtwM6m(jhC?pPOgVT zJmjtfSghBX_zTr;nXHN59g9=ICstC+F}&J(CMzw=X_82mL92%H)9<`#A~Ch#wF3OObj6& zW@*nQ3&lJ1ZI_@N*e{Z+;3qk)EWI}3Y;_v$~rbC308!ddKDj8`D=|l z7^2M#vbRh{pG@B;=B<@Up;|MfW)xf=+;tpBN{2&n33X!dbYe08Tsd%z}s z94T-vh7)9TA?A*wK9eF#ER{s`W4;*vIVOA}=xp4r&wO?`>VLV4T>u@M3d~w%W2pc< z*shFX$(>Zau`J(KSW5OfG7Y}I<71(z?*CPQ4Zu(mE;IuSCXhiXV<=Hh=L6x(uG4jc(`0) zj)3)h1h$A}`rUQF?;d+CsYQG0XTAC1B&IVQP|vJP@4njNC2;-g21>RIoWYB|Of1eE zQ@i=hHo+(AVYanv7;Vv(Vq#t!To1~XQO{^dEj5os4wXb9Q!H>`ve9&J6-4Y*_pu;k;*VynE@hbR!5v8oI{(cYKOUQs86g^{Fx{W(3{eNG$f?hx=3?fx4py! zS7itY+19nC%M2AWge{S^O~9=V7<8TWLKLHSN3!yBsqd7|-Nmu7Yl$_*SX$C0&e*|` zlSy}dd%UHNLhg!ff4a(T#&ZP<5)GuiD^6o*$SO^u9)%jW~4Co}( zgHzeobPD;(pu~DdvYLe)SqokGnfTJl$D+=#@NSOKHgN5n(PKI2lLW4Hq!__i$sm%X zDKX5Px9ajd?z1=;Yp|h>x;!u)z_-=x{q_Bp043gtE@ZQyl^d8ZY4(u5`6kYiQ`Z5{ z7EgiZ^H^2Tz<~8h{|o?px^>47|F?Dp(DMa`+`?+TEShUen!nap2Odfo2E09^7cDPR zNh0=egiGjhb8MNLPlD_Uh{qyT?=w3Inb?@cjnP z@@pw9>y{!@+;u_Q!5)1y0<(?GV}Gue%xBaHw?Mu1&AsbI~Mpy#@6F|ADTU11T?w zIVMf$Bm}|&pFXJfzKoO#e1S%<6#W$Aao~jTHQ=0~0YPK5WBWLwP^NwUHzu!9$F%EE zY=u>}Wd`iP6%9aB?AgnR1qqkz@1G&FsgNF5(wl1TZ6*SNV~*m<8S~;hEvX<*0Xs>X z)_G18yYXI07`KSRqEIrU%DMG_5W1)nBSiFDU@2{ ztkW#E=vTg0-z$E;NO%KcN&Z)@LFg1_kw=CU+>lKuRwIYHiTpYvX%uco-OqdM8@Tuj zdT!}5R)Dh**2kLdTu!TCnFK!AHSnE3B7@aD-?5qd^-tOpEaZubS>z6RDnrFn%~R|s zd0iA85TOy7(QIlwrZLwZ;b`X}1}UeN>Y6KP$I*Hv)xL6&MY$6tn|pzt@~0`E%ezK? zuWg83LM%YMVIXUDznmWFSPIvd_mlVR9idVCsJ_I`Vy11fW)*%-q8%lKb;ov@?$4VI zpf5mg0`8zNAaw zcV)lYYKRYV3cPEYT5x2%fD_i|<7K1#e0l$%5B+m^{p}F-J@Cox<($d2r&a6N5h9^| zlMP&7^Qa0Gj7^L9@{n}}Vzp}ggjf^qvtnQ2CV{be7fj*DwbaPR-H)k0IW=sSNB_IO zfbG3ysi!?~-jCIJ0((xBZgCHLXb%STmh35iM8Ytm$LqN#Ap@<7OA$_B<`Zr%5Q4Kl zQ$Bqhh_r85GcZfmcsH_iMG(^}2K%?(pQG2WrLJ5gB1q)QSghdWZkzX!ahCq7*i zKNHEsJ#aU%7NZ-G<@dZhH72vq-&kwp*`{N_$B<8LZz_8#Iu;wk2hzp9#I6 z4uRh9BJ3rdRPR#~lr2b->w$0_$(@H6{j84FhAvKv`;g1xExi+%kso&-$v6^CNp>5F zyj4EZEhneNg*5%@ZuXN42*^gBPXRJdAw0b;5XB7`TUKvGosW_Cr|Tk_;H>(*dUW5a z3mHlPJ$2T;|FUc?{e$8QOXpKkY)N_JZR8OUPg=-<{;j(3Af$hjN`G@#!i-+uYinv; zT4iB8BaV|1tLz?5?Hz&XfmE{~0|$K!0ToxcT-Ex@sg^zzr}QQbAuI-v{c zJ;nN2CO@vfLjSMUxNk;}*T^K_5G4)*wE{HIVazjp984>)0-H$xTaSY^CRQ*{XybosfGMNPD|g;FtHf22D-)@R&F)k6LMI= zFH1HnhE-~(X_AF+AQjTL=gs2Fo9jh9%7pmdeUABN@Q(XwCfABLtc6Kq49&I4CB!K0S&9w1W67N?L?$ckbGU4!hCyZvbAQz!ra?QJYjG#H+`6supZ6X1hZQDQTo?+<+qUl7VyodDIQ47UT`A+28yYYs< z_yB1i0wev8=Xr~fcnIWhU&ZYA@Q}$D2E+r&G2@8K0CY4bZ&{!9>Plg~;SYOdlZHAJ zTLFjJwFVEkKggDHrtD{G@!`SKi~$N6us|*D1*j7~1NDngf2u?NgKR~D^uW~>>>L+R zRx7SwE9{D1aRm%#KyOeNra<&qdx5!)c_Y$XYl3~P_Ww9yxvpp2`6865Rw>?}zy}s| zvfBACSAu)@jm<*tnLT1Owl8(pmz9&B{~mtHUhj!v#M@5NB44hOnl>8AT~ zuEft3AfQt}h0O7j{Yaw`e&+JFHZ`NBMkc<{Ca5b z)EDQc0eB1v?_JP@pbet}G#DL!frpa6wFyi&5?jK|Z{VazFiv7>_bw9NqgA`r?Yby? zm$}_sm{pfj?Uta#D&u&H1mL&7RJ>$Unr`$$ZR<_)L6qT)nn&hFe@13Adf+aB;ka~{ zTp;Ylg4FD}pnK^wO{avBicj&Nj?qOB1EQvgIGfoL$tJJfsS3S5{njfi-$w4nb+ZA?f(Nn6ulGiTN=HAHBC3Hn1MQC>~mbQh3_*QvCHo zk3ZscQO9j&&Zy~!Qx>L7cJIvn)URhNNYnyB*__ZA^f7~h}>N8YjR4`581)DG8%81F1&HvzbNxbYsWW_x9#wvxZBoJ zYwB#T{prrVw4XQqv0XI9gi(c9i&X`Yp zG!svkt)E^Wl41=n%{UEk)VEOI`ok9ReClohYx)%DsJ&)$#GD+crIOayF{L?mcvO;2eP4>= z5Ks28+J24Emewc8Q)@bRv(h};5$O6RRr-l%G{ECNS(Y`vF$wpER7-jf5W$a?d?+2^ zj*1sH)fzd71x0Q1u&t}5lNV#*y}gR!v(So+yu>_4e$8RVHiMN~u1Z@c%JOmkvY`I?P&#`Ys2j$YLa&U=pl_TZt-dmr@5s z8>Je)@i-dDS()F(Kl%mLYJzce_az4PLxob!2o~57@P;{x+qSkNvt)cEos}6xCmZA7pCt74{i%0>PlkOZ8U-W`VA`vWiS?}H4 zn`tY!3+%H;d}ymV9(gQt-RPmI&k2GVif;X%`EckqB|sD#ag9k>rK)$a%DLPmEwRF! zrwUQF`6R2OK(Xeu9?}lKJn>#=-DMv$Q>N#x*=l%|M&r0SDD3WY9irjCUsl+=YCo7Z z%Hp~zY;B#bQ~$Da&^Q3;0VdBq#D|cs97dKYP%|cbw42+Ch&vH)y!M5nhz{S~%jqg) znnje8+O0yJe)Tg*dVBQcX}heR#CI`;h2vbMcYr<;(``3q#)bc;szT7k%r>^d7C`oFeIcH|%jOTomQd zXR4$Zk9Jv^+#(sK@!GAwcdr;qG~m%^EUjNz?jG~M3?ep+6)R04jm^{AE5vZt)F@Rr zmdvuQ|-qpTL^I4!;8MRCwQewtsn4pmy%JWcWk0~oL1 z_3Vc{xpE(o#gte5w|L5a>D{BHwO(;K$~0sYmUHYTUqv6_DLE96QpyV)7|v64rzBNTcU#bCG+EF0{YQLhAAq4dHQXDk zNl+OlEeR>3p*mmJRPgf#f9n_p^t4K(xY+`>*IU$mIes_;2Je_jaE zK)6A%q$$_NAkw>ZT~VsCrB*s-`;pkWbPe1;ucTngYhGej_bB1cK3 zNEDb?*oB1l2y4Uc%SC(D_>m&Z|Au;1sxs1kmrmQZ5@-gGFEdWi^pR4!rGS~Lj7<#nF>uzb<)h)ZCI@B33#~-n z04y_61s8roLL!t&dE#v6n7@Af`bq$5L~5Z1>Tf-pe2MhB^_aPaT@1LH{@K@viLl4g zsL=bLSMvKw9k+RaLHz^qFA?_$ZFoTNo2^d$^MKj*4ck*vEe<^uQ~$IO8~Rm19XHtpO{fzr&0tvht)k6^`7U>PyWxz?K53xwbJBU z-Xai2ki;zp(bi`1Q&MPzGg5nVEq0{>e*_R=Y?oE^jK}^n)k5z6X5fsTd)cToe!mUw zd*PNj>T_WRX2DrYZ{s8czrDD|17S*9}<6pV`zf|MOB5^9*f9Ie5`%n1V>i*Z@uc0TU8j&7x zrl@ejhB_1Ae`l2&4n>*G7Q&%E%3fgBcJ6j)3)4;0UOR0c)&1&#_t5eoV>I|X!Qg1mG;&O&Hz-KX=DOqpXIylkxgmb zzLHgxX+DPv+T1V*j1WX(PyjE;aju@xpC@p>QiHfoBmOpWU_lsVpnyoB^WoOtZ;zdc zSFqMbghEdTiPLMNXG=GOW8Ed|CN$4dY0F*={9bFfc7inWXe}_?Yv-Ri!&OVp6{P9e zJGIUgK?9_$eC}(J+0vS2FKCGE*s$NdZTe$KvYhr3(Wv~~hi1uT{dMzS-HdOv!88Wg(c#nR-+0-0L1sSTsoR3*jb@E@{5`;UC3R zjqUSM7qhSqPmM42Yx%ISbUKV>ahR40EjzOos{Y1`8U4>szJN;b=tM(C@U@v&^7aF!hBK|Y@s6N)blM-7J2 zM(8z7;jG1P9tz1`3G7(*G;u0RjBlP1Q_M6EdBDuAHER2fLo>R6D3vw?Ke=6AxPG6f zuHD?YI&DUvU&}Ig2dma#7s}t5iU7bDgFC7H;%+DU6Xe#)}*Y+sDR)%SBFqq(G<> z5x4~vJzZpD+>HM!kqYIoSm&#L3W=>Nign$IPL&r_u4yK*ldRbiGonC`E*D`lfl1o~ zSaW-eU0{1hqFyGOCc4jsr1CyWn^Zg}x;qdL6RQ>FJ+=>R|2>q78e!NxXXpB{7;%Qkw)A1N7~M!Azq%NbS(ek>V{ zqF6e2qlF|9O4)><^V#?DKKuT0@7-;6&gaMb{d&KCJb#?l*?w2EgzAJN z^JKSTo0stdVk0N|l-4Fz%f)2}?TrsLmM=_?x?)1{FK&kf7}HzqJo|?=(NmhnK{mU3 za-nKH@D`JK2;^0<&NOT6Mf&*oQ9_)+ezQYPwRh?-t} zwc_VRg z(HXk$eO(ANEGqa;KWo;fmoT+Hq9{gX-0>-oEz=>|S!JX?LTAk)g-E$fK{`9M)SlVg zU_OKv2S_HgDDD??9cRZ4wN1T9(30D0oYX8km6@XDt? zXg(OrKU(BXleb*Bh|C1^72;P{$x@X#6gaCCBl>A0Gkd?sbX|Y~NRfU%jGvt4?SyOT z)naYV*BeP~E(b$c*xT`M(a&heQ+EKjGrUvW+-H$rqVno&OzMq)FRCYzY&w!~IWInN z_#u!h92lMjRX9!TW`Hg}y0ha@nQh+gNT0$m1OE=iF(dSjO4kwB4`gh8RYoK0LSm_* zRQOJ7JZ~@xGMaCxG1dzCRsknpq|y&4&^V)VCiw`z!Wa+~S6YDMrmE6e$(k<+fq%$A zZkMt$drqVD%KeeZJCYON#A};Unx8365cM0*p3?-Jq~CKbgLs-=Q=S7OYTy+3Q6MYN zCn|#y+eeFs5^JI{8267Adzg0R_%-O4M8l{XQye8ZV*DfY$Ri3L@m4={NS0uzcjSP!J&$&WOb{3aas+PM*a%^A{^?Y~Y81?d=&55jodzJ5XkR;dvRe4&`lxzFW}`Enp^$NHcC{`gR~Mkx zQba|in{48f6u98Yo09sUy;ZG`n`hg>&1u{Nl~2UlcT0-o)inR5$x2j36HzqI(fO%Z zf|AGXw=F)VcHfy=p=j(;T~sT7M^pbSkGEoqeP3ajq`r^55d~rM{rKtV6&Bnb$)YFn zdWLuLGPPY^oBLF1gAm6X*p*^qXF-;q(jmXgdkK%1MxcJy&>HccPwNQ&Dg=um&hWdA zyHZ_>GJadNHnp)HktaPm7lyk4}-7+HMx z{+=VnEm%coi&!GK?3gT#qRm_q;dGp|EKj@I<-+6RP(0Xk)4WFV|F#)aYA|A z_FCDx)Xve%T%WRJlX+8R!=-Yyq@hgB`u7WT0m4?PW%0!7wzV(HtEhiaVc9AyV*R-e zJx3V#D*M@GSU^N4(!LjU;JxJHhpkAc~_qGeRNBLgf;s2E?` zWOi)#q;;{PPU0Z~W3~I3nnVyt3wtOFqbw}a%E86LY=q%%Ft{kmuP+k@D*|Ool$sWl!NBKBSsKpD3MAovqLtkXK^fwr}o{B>M zU%2q10%Mzr))dq3fc+z7A|hOEVc{=65he`-w{-Hr7iyisC`6}h6!sG(VJ6%T zHC<=|3BrDeTM`iTIwl~-gZ6~&8D=B1byBpdqHoLW6rcNMH|ViHsG&ilkU4^DEi8T8 zDd;1T=FmXE!9k}@yJOKQxT@1Z=N=T`Ybv73YXV<5{dTex)d z2D7C0JK9y8D!jhr8{E=x&9tSKj6{HItb(#vC^BNijs7YOr7l-=(b=$rta(#vLP;^6 zVC%8y$Ef}?Pcm)5zP_RCf<#(F25U2bS#E{PEI+p{1fnIJ;KuSU_{C zitmSaK^D6{xNZir;`&= zr|&4&e;P2dpnOJcT$9+d0#9|(a|vt)>d2A>IqI%KNlI`KS4J~L$ym-TeTJKQ`?$2+ zzG{D@{n&CCZx~B987me+M7wHU?fH9N+Wdlq?S~+;luqi&@hs*02Jen*M31O&?R540 z{F747{e(`bG2G?N!tzxFAk!#BswfP%OLzQS_b%w-b}+I=oE-TmuRMPOp*?jc>3Z&+ zu=B9wwnp05=xmuD$Aon);s;=&=9h;48!6UtUu?82OH>!$-fvuAhb)~qR(hG(dLw$3 z_Ma;tDy3V1x0MS5tkbxwEE3Zoog;3sTr$GIyBFAVNSIHArKWX-XK zic!YJHD8ucYe&Ab`MGa+Us~%cJB**iA>^h05GX(bE)$?$90HOeXs(n*Um2@#Vy0_) zLbIprts?SyU=lUq4DF>yed5f4Vy4L!M#?XYLl%JJL2r7EDc2G7#qx_5S=aAzf`-{Y za=NRHGR$bHbT)sx%!jcqKohp54U?yi)!#YA&{iz<<&*FcMJRaUeY1euilgm;vq*O( zjAewgmHNuX1xr3Mf=eO?ohDRWIKdZEl3c@AEOJbZEUsxJT>q&*FBJXUy`VZd&>?ds z=)+43OpUIN@5%obbQw@9ofp>6;%t+nf5YK2dSQPJx^ezlck}`Opu_Pd$_&;%p?CuDldms8xi_V{uT<61~?{P z$8~(iaTGsj6Z`=&yCn;w zZj<>*WRxf3V3D-OpT|V>E)Y?;GqVEb`nP<1D4&nio=bneCc40P9_)GttAIZZ8_(As z)}P|cSo;k@8g=S1CF{HIbz^>)+h%M!v7A2)g$6G{IU7W^X6Hzr0eFY|VWXvlicl|L z_&xHsT}u;4tMdXG7bHJmU0!AX^*u#w;ZDuZnc`(Pz$L# zx)&kz-piGYzf4B>3zRC$<#d5vda_N}=zZH6RE+BNc@A0p9@WH-9Ums5I!1rvl(2Yc zbY$CC*c+21k!vK5pT5-m5Wmu2;R+|}xO&tbtG+80)Fu(nQ8Ut<=-vV}|1Kl)|AcN+ zBJchNFg&Joayl}8%S2++Ka3gQt!{ZOA|9F=$fZTzO+BybX9Qimc5chnWSx~Pa8dZ! zAzS--8KG_=pTB_B>t5wpvtBg%9Cs!P|Gnd(AFUSa&qZV@0AY zwN)Y-@O{E|y^~h$*g|bAowHADFUXUOoZtrqcZK65L_u%Mfojy)S>y6U!SMhQ#4Pcn z0i#Cw)Npi1{B7UvQ041i1um`QXFLiAjS>Lgg#_s5|0X@atBaMfAjvRZYDcv2PfayE zGv5twV@W&u7^mOS&c3s{B5?0JkKV?ah_InoaN-SqriUK1wv)VavVBN#!HZ^M)Xdle zy(|w;lJ-nY}Ov-?sL1J?g!&YG)m{S6req}mq&e5IS?Zc-?D51dh1o#7!$>U*kvN= zz9Ys`?+QgfNOJr=BLmCNk>j_oRN9vK0T4IPJ?ic_f8Vu6Oof5Vw1qvf)D=^`8j#G` z+Ecc(Nis6Gb)x5-3^MXg(YjG@C>2u2)lh7)w>#A}#R>!i;r~LB)AuWFZ166{P?7=& z$y?0&oaEB6mo7II}G;G!9Cegl{j%GhseAF_lTe#d{Vm41mtc*$2Ibkfr@d$B$S*AIC zTIp;RdO59-)&vw1SMm0kouaBg2?~F%<-`-zW7!)Iv;Or!`#7SLE z#P+nXcF`x{o0u!l(kzwCHLkywJ4GlidrjP&2%=3)qXJ?Zu{cAc(z(dK`e&!cJo8uR zTgK&imRRc}&90rk95%aF%WTe#K2;B02D|QdyZalVecaHbb(|3RxTzX3lE!_ZnQ5|&we#2 z;RjrpvJ^hXv|3^L0vM;?G zCDSaQmDsa>aAizd?m!WMC3FvpLs048+&4h3{FK0a>R4QHgIMQTn|C6C3ID{eRdkspZKt}~b#Ny!A_Pzx zPh1fRw%R$$&qYJfkH7P5WQK%X z!=wQPX-r8}$L;+YWF~sYF~nY$@>2s1#XmLg>nHW6E4D;%Fi=p5a?V|ptRpGD z!NzbNFdP7#BZs})n)MiV6q$`732h&iyiOU%Itv*ZX}U*n_)IjH1ARjF#odt08}pp&*n5*VHc+Hv0>U6b4#ZOOwi$QJT9v90zs z_N*Mbm@Jmrv$_rYsJZ@8ofwvVw_IewX#k2TNbX`7bBMI@_AwmE=%NUq4>B*Zp*jQ_ z)M<`&G&sUt5|e5z-EHJb4vfq4`O@KDWz~@TtBl zW3z{UcTsTP4I&m*-sm>}BU&f?Wjjn^-;iQQPI?c=*F>9{h|=2N03?E0ztQc@Z}PWd zr%0zDWXCuEVj{_f=?<8^W$I2G1St zw)z`0mYt5%W}hq%b~1u7DR@jxBvxilXVjL z#@UK4AFPqy2@@ggAM0-4TGbGp$FmCVl8Pu1S{i|l)5lHAwXh5jQ|m}ysh65!?f4I> zKd1+8w|baLMdpQQu%rD@)xY0oNG?_%JVthy|3lvBQ)77P46nfg$3y<( zfozbdC89b$Ly7VBzERTC+nOK(cB(2F^>uL_*+M-?#=>YUnr&?VRP}7csoLterZOa_ zkTH@UWhd4D$RduIY~Q~gIrBMWp28CKO5V28e5E2SlGzATqIg|9@ly27mB(L~yxzUD z+&^mHHUN}4tXE&Bwnbt2gTQwoC?5tKk0 zWh9?gPHHPxW23J4*C0ydCYwpDpVwNX)eg88EGS zw*;-J95r!dMV=EL(OJ=D;p4cOr{ogJLcq*gv~QVxDry#joiG9H3zl>Sw129^Q)+iRvwQ*rGnPAyBUHtY2BxXn$@}6^IzEX8g-7Vf--MytQJ~ATJ$Wk= zjJIcXdnt|$LeX+qTv;#3^6w8XbGmb?Ja$hfe0{j) zxYw;Btepk&P*rbU?1;G{-}u<4%(_NBq=c;Ox+D+{2g8U?b>5$vk29RJ^pP^v=Ui}E z?QZU2w$?!}(fKR{X$_~mrQlJfOPCX8HunkrZ_a z^|fyR%He89pd?-s6Sj`M)4f~2*?He}c-4Gk1>;>!HeGGV2|`LYZQM{tyBWUpiqEwk zB7?tEORL_kRlKPNV-kHVv8$4Yq2Ja0gS%h+sX3S0$#c9KIpT_WxMYovuOWQU!yry) zpr$)x-0xdMeNy)etCJ^Lc}a0ik5zg9YhkwG|L&=N)ob>>vPd^tcuFZ_vN2?$xlsZ3 z_+uL5Lp69&k+ZRm90xO`49gczsJ!BBIi5DDyArII8o%Wk-=;+98CJcp1Q7j}D_ajg z93dKm)3!L3@{>)CnW>$3PC@Z&wI$lt)XnO;B%okSG1x2l>1`lby-+;*%M=T}kku!i zz|6Y?Zya-(q=p&bllvRanT-S~q#hKs3wLv1Hd0=ug)9WroYH3z7@f+bUhMvGm(Zim zj2&Te<9q1${p7kcp$5iB#h0651yMKlj|xyhrFzF>!OQ#4=XFwtp2E0RxE zZWp|$20I%%57=;I)yb$yax-EHV-+RzaPsr*Gj|8a1v*4$ZZSZV*kjD)?<=?a)GSv9 zcLrV2VYG2Tvs0VX#x*LR-X1cGO-Wbk7i8mEuPO75*K$CT8N+gTm|LzM5KikMr2P}q z^WmTZ_1N?A?&`@zmVYY6^eQH-%-d3m1C$XPHiBg)J|uz&Jp(7T;~>|06rFwjAYYjy z-uwm+Vjtdyq1|*c%s>DD^rmXQhaRUpf58mM*tS^3$Ba?tTIO zwpMKNke1WmP&;<@E%R@g#7;&lxujDCitbkI`8vRZn%cAq(SeKj^A zr?40i>i!paJAYW)c<0Wn*BEWDN?v`U{`~g9$mpTU_vzOXu8*C+DT7woEbEd_O-;Zv zX4Kv*(K*^sq1bvq@~s~uxr)_X1GNL58cdu}7+)w=ZC6}LJPK^(Hojy&r86=Q8OqI8*jT7!Gtt{!EkMD2k z;w4#JKd%Xm&9*+6Dm4u;`}}e^S@yoNjnxH1OJJp@}gS%2|ti6Ofc` zxz}yoLGadOV`K%Nr1$twLrcav!>k0FX(8&e3;+hjPWB4i9tTVQrnF(e^j@9)*hjoR%xbRPp?AaZbma>qU(X^;N^QJf_)^#frSjmU0Y8WX-r7`KN-6v)P)Z&0ry!leR*g3oVI8z}`%=z)zcOWv;R+6q z^m%FmZ8Qe}j(O?-&sK$JL9TJU3S|sxt(0sG42r3n>J&i}wpZ~rz z(vbV=Mnpt9C0HubllBhTzM?x24i|0CMO|zAb1TeZsa8zkf^i!WH8*Aq_3}5@dXcS}z+x~+1-p@%lJ+$GUn@Ttlf|pFoLES8p zY41O`Mrh{CIrZ^U?xMIB9flV|wx&$%JNe`RXN0u}8TL*MZ0g$&oqf@nk(DlD=_EmO~kr39N6q>_12Omg)(yfPFnBn_~H%hYx$DC zFhzPWnmcD{uG=%rSeK`aKb+br`VPs{0G*J+YSdbk;y;7fjkWj;24AEcv+N+nPzoceN<`V zwBK|f5K}AT9aOnikqiL#a$&S0M*6f?CHluP!MkdpOfi6K3$p_d)Zh69r<=YaBUwDI z&reI~U(4es7%SuMJE0KsRluz(ljh;^tA7Y2{t8CX6RyTxB&JmMEaeihzD=zjZ~{&a zOdbKEpk2#1EhwG+(EQ3Zd)tw)|CPDJPtW-zEHLlJYZEtPUJ4|Dkl4hs7l)+|t zQAIg9v!H3co6WBX(CoL5Pf?vPES?`%UbpG%MNT^(+`XMlldBd7(~|$1NL-S~4c*(o z;YkFpUF}33t|jdtuAP+ZA8cP);pzBc2RM5{hU$yh1R99I8);|5cQ3$r7?AgIfJUW(x_N#H<86NqD zr4l{@>M01q#26s}nA|Dr(8ss#mAr;ROkx|t*00MSO**1@yDUZai0b$U+Ci^X@rOv3p>hD zu@0CH*vNv}OfZH0%h06as=tfp!b|8pHM@7cAPHV2LTndUzkaXkjW>r9KNi}nq?^5n zw1?rCilhp}vU_BeZyBoRt{xGI>LTB=?k$I~6PrbRQ#;F)RuR$8c#eJfh#j2}QnW+p z=NyISpcE`2qHe_;wAK4BMOH@Q3D+s4=-KKxkZ9;Eu3K*}8?45P5p?pHg+F#ZTcOPj zbi3PHz_NGR*L5AshPsfwU*|Y`s5w~;PN9jv5zx)hP5{&A`75tbp_|nF0;jHz&%R;U zjam5uAJMXy$@#e0t@V@^HmCSI1pZl*^jNn1WKzM$uRAEA zp14uu7-f)p!3H5${A%J@(JH^SVEe^LK%y}+_6-Ie>)mga>e*nnv(Ot#qgRwRpFEbW z2DY>KAZ$nXNM~<)cF_K2&gyBOv!Tw+a+#8PMSf7D8>M@vLA@LN{l$i=|0m_lj3o#M z-RKq`iM~%+a-dB_^y;2rxsyd@$>JpcJ)pI2G>}RNt{o-k3~$?q94D!rOEzhS{)2qr zUYQvd;*4I^%29dve0Gd?r^ykqc?5$Cw-z57hV~V8^8Sd>LPE*=ay0a4P!M)6)1#Nf zl{+Iz*b|*)eYZ=_7R`SHqA*cI-|t@lSO_F9L^7QRqRqM&fe?g z8-j|LZ8?iSYyOH`zgs>=I44ZN1B|!VM-Ip(tlSF&Az&6m)!a8yu3~V`+u!W^)REHM zM>}f5w|v?-9H_6^r@rzfV{&!B-b<6VVUHw(4!{b9i_8U}Wqf3?9Xl%gU4<)&6vI-9 zVEQgtr%i9Lzr%$=_X?74&~)tSGrC`z)k-^H8dlasV(x8?U+;sL%u0qlLZoH({l?oM zQp#B@yFspl!wAUK2dSzU1Rk?wZhKsR5pKt72=4F>Y_ubD^~So*UnIEoq<3I(S2B{Rpl z9ZUtxgA`udTFtQ3D=Z)Zxrhn=9Kptno*R!?MDIu2xQsqp0{W^4;`@Co7aLoIM&iF9 z6Lm}|ENA?N8t7LuTy52p28mR&9FgBU{}SL`!8TsRp&BA$I(?KEidl<|X>yDb5Kc#9foU*GQ0+X~iX2jz zCH~IO!1kg_vq#R=w#m7)*au>pjq*atQ00^*7WabdWsU+op{s+jh3AqohPg=ZxQYnuV>cCkL4cl$t(>mJX76^t6DQX6x@*{5rmr?}aZ#9iQlz3-EzM3R3Znia7z1 zUO|hVBciv;>(#RhG%0G@P!S`2=d~V1>_Wy*j@4*rpCg#B9^g{N$KIphK@I4SA~NpH zFF@3OnY!tQI0e9RmHa!B>0Jo{1v|qOfvM1|8yu%HUX`rBNA`CLM(y-msT-WF-Z>^! z>eGPzM((D)=+inIk!(HookDe2SSfNIpg7q7#yx8gdu5S$lqZ*j^ik`z)eDO}KShTu zpu+g%E#+}o+eKyV^xh3E#s?3svBr`_2-a9m`s^nj02p`ZOFHD-A_AE(JM%~2dkL9a zOodQC%m3V@tZi-K_0n3W#c<7JZmo;6tLjDngX<)Se=mXe1DJN_5Bii9gW}(o>%Mw_ zVBTo#t2Q114PgL%Zp8?sbZ>dUa%gIN zJI6aUYB}WzbF}Rn4I()UkC^{Y{72~t0DLsUfpKjo-)(jeCO41R^YY1oDP!po)4fj@ zGLxkzbtloHM3zBaaM8)|PDA|skdr2magi1t7&hU?sGiq7eHyRx77{qvy?EZo{0=C4 z03B*kh&l?Wm>?RL zy$KJKKzao3NkXDH)>|Vc#FegEL!LH1l-eDlPEIfHXIOy3r!4h)7D%a*tG9m3Gt<(- zMBsZKi+%FvVZ%`~^Bm`ewcQy&b8kcTGib84}CFymx9YV=)6F7+fM-T`u zQbDV(EYDm^)s99AOHP-&>Dx|5A&8G@%^>}B2(R?j3xi+Zj|`1REm`xs6_|^nx&bc# z9u#vD#M3BnTii&bh_XK6h&i13Sr+n6fd}s#pR%g9*nk+*3~BGA7h!US<(3gQiLoLZ zv9C&UD*9kUOeS|vKsM&Y)yk`s4BhZy!>4EDZ=K&pk zKFsH9YnorNBhPHyRF6GT2eL?m)s1m#gr-;ZbYz+xS;>7Pd(B1+MK&U{YJY!0Z+uKr zg;l)0s;hMVzdzO&4Kbn<#VWenkkH&mzi6^hOjwi^=z(^Q(8_aCPFM0fJ!`Z#Gyzw1!6*A|ch>^V^W;M%TLpw;QeG&Lb+$n8v zW}OVJr$%(S1y{ zhy8tDH1?&2|M+*jtIx1cQcS4=i1E&gmy$Noj#knH8_|eKt-24SdRwuwwrk%h@Mqtb z+YOBcjXsI(d2W@WCs@r~ofd;gJ{@LJK&REL)js@FgW`$y{LWAk2a!>aea4;|y0+n# z<1V4j`})?;cCIeiet0a)XMxa`TbQzY*@|RkOi1RSgyz z6$cXA^e0e{wVR}?!raa&X;Z51^vNDY5poa0*X&a4*|i8Oe@P0t<&7VPV8@gEuD+Re z$u`>o9{@g=^YWG2Ft$YMtWQV&XItk@G@Pz+$=Y+rFpUojR~~;-#FJf`zEr4;5XeIW zMz6PfK(2{f5_(w?q+VHF9{XML4Y`C%w<^j`FXTt3YTK{&SepK0%d_yX$$1{!BhJnd zu!Z3sTa@7}WzyA%u2g^{FNtO@)VPA|+(r6Rs=c$~m97k)3i+#^Gm~AJQw+qC!8>gsX_(n<8}AAXvy~b zq^^U+x!x8wg6>Yr)vi)wi!6ZsaOMUg<|gRmX}I_dpOI*-qbJPWX*_UZ0`{}t{-jkM1o%~=Za$SsxXaI@-bh}!KFag7cw@K~>NuE?J1Tlj zG(=JIqzzvg#vzl;EJtfyGr&FCxEFGCZA8zGZ+iI#_CY;0m5+{)taUJd#}9)n850yZ z;Ua@9y*Q|@q_^)xybkn9@96{Gr`!EIwxxQ`(l6PNv*%4?!?wL{R+hxnTZ^Vt^5`q^fapriVE_g&T#vEMIDZB?J|h;1E8G58tDOzP!KxILl17tzhKwPKd=hJD2) zQVCb5b;w}3`IY}piQL}YknfxzRJ_vN_C9I6T)A41mzSkn<{SiGL5Ek2-+%R|At#}; zzGrpf-ZzZ9-E4_=`{ezvk(XWbeSo>%Y=-)*m^)UJQK4Dl6zK*+ZhO$li(D-_rLK@@ z?v%V{JfD6enK#SpFJS#g(FqQxiw`{|s_tH#U75*CKpu}}^hE1H8Lu$4%1XGx zdPWICkBsyu$;1ga!|CZA3Hyw#AiKoaIvJufhkf_=egRv|VpIN=5!r4GCn7XD6Ng^P zE>W69+0QK#`S+&N?32WtBGEZrayjYs!g9A%HS4&1sG%8Jan*BgfX20Mz|#i6KG&G_ zW;VMZrbCM+&m(4x*aFLP2M&-dRjDy^8;$RwO2v|B&9s5}oR8hEouaoD4Rug1J5$Ll z!5K3Xl&L}1&KK0qtL9-AK$Hpc2&ctgVc@+%_Nn0aO^rKIduFtaF~LI@IH#K^;{=kw zDx|+?)=k@T)go%&4sdAWJK|>916v?WJn_eeDOnRX`myQ{XHs z$|bbLvp~2DXpmOSl#-ChJ_|77j%;s78^B)1D^2HJIm{MRS`lc$Go(?fMEEEWmO~yV zLzjlQ&Q9$QfB*^!UglA_5U0(eVUHK|8mAudFJ^2rO%C z+yhmPHPNwHYee#y2MHO~wH*TmXjIUrXeY4{3gEpc*(~;rmB!$i!t7b z^<5DkCnPYf=kMfLDMu|=&qh|yhL`+gVwrME=!9X$%80Y59?2<)!UuIcCM9dQ#RE z-YeDpsd;&uupQ3vqmCom%r{0$EyIV20Qxgmh_H~}citGQZ2pPX!(VQh@MH8^NY|`Y zJW^Qq0fa=z&ku8aNisYKrd$`^m3I~`S3GpK?i-cY|O4f4G= z3$ot@#LTfu86mVbo&oyL?L!g*y?^zT&-5pQe^Liveqop;bYasf>RSGt*CDluDK{Cz znjZ^?#QpM0ESeZcXi49@oPsj-opW_N>i+d?%+@2>8)FzTymIoJ{>0oe?V!TmPa2vB z-q*fh$XRVGx_u^>(R<37hPM|lXsD3-5I1zLPd~o+xMPrxh46mmPgN<~+rL7}$#y?< zwcU4J$C<=cPYw13YhEd;INR~g7lrd2PsqHM^sME)Y-(8@GkWpC?%P$5rgt3a7~5=7 z^?sp!K#?(&XgJ}1dDP|Kk-HI5@dqRhLymkAv@Ia7thKSzar)cLzNmig4VoF7_U7Wv z|FTO}!xwE}1cQ(R?S@Mb}<|{M`W#sOg=V#EO{$x{Drzt9AL)a+2vfwgIJJ z!L}>H&Fn(vt^tpW4@L)VjCgfNc2io+=o4k(PhU;HSF_kZAyL#oi`IPi^qJpza~=|1 zwh)&4%Ixl8-wi(UI5FVXr@y{uxk^G&H6Z)Yl!nC%7hbeqW(2Z3Y|fvWw;ndgeN9h& zU;WDa{j+Dc(2qFk9vzyqwdSP^X51;FKf!P|dRFwv1b0LoNyrz+GDck}SV@wP9uV*5 z5kJKyp$l*=Ufa%`Xj)-;4`LT_sN+OsG9jSC;Vt81AY%5Cbq#6S)fLYg=BMnt8gIwF|vR3-?w#Mh%Kw8bD{Se$CMy# zbzFJ3Vr2~TGsdYH$D=W#-D^KaOWjy^eDwGCdQ=>e;RVN;D|1`MELRA`M_i>{(>a=7{Kbn7l ziC~FxDU8L1s){g!m?LIub>vV3zp$cE7|EAeiaU+izj~scT5oX5`ONA444w#gn1S?$ z?QhG(zC8ZzH+YY%y37OeuMjAsbuFlk?Pa_ZZbzF?FbI?TQM)hQrw<|!=#&9oxtfpGK2_cc4JkLwtt7|oG>NTzppq2fcWSl3W9Tyfm1Bqd! zXu7N8GZo(@(9Ki=Z-#4fF8R*?ye5oeAln?_S-oTisxd;u1s~+5NiVKUy^fnY)1`gk z1Z1C9ejr}z!Z|$_Mxb(6SkgIa!lIM=518MUyIKC2M1P9j0PoJt~ z_y$?WK^F|ng=mM498+e+v^!EK#L~6PuQBxIRJf|Ot?8|q;pMHpkk1W`XUxhD%o?`z z);D0VR#|+q5N3$3_$-#>sx0gst!>3@8i&*zzZSc-7}v8H!d=GN?*iK`H5UjJyaBEC z(r%X|femisI=0}w!>L*ooEBw{E88!0wqaiA?!p4p2T$3zc6k|!&THu~#t(xgKCvB5 zxLOK3N2c*nw#}wVF6$i4?q~}K7}uccXLpp4+_Q>|xVt9a#SqM=<1e?)?nyHm7LvmK zEa@Apq>;}kV@2Rd{)CsZU|{O?_^?3_I(G}^QefM@W$`tX3`Xfv|hIvy5; zlv~3xUB>?Hn>v4ROnJ`nWlSxGn;Taol#%5-1&j{bO{Qv5I^GJGZU;=irFhU|Phh)~ zA~=!8*@Il;>T zSGk4q$liYcEK&^Jic_>yXd>gGr+*yxkB4L*qDmhb+uH7>2^d$#Msly2x7VI2a_|8^ zFB4SHFkvPZ$kG{kA9G+{cyjKpi%!)mzq%6G_9SAHy8fx*DWz;=qTRCc*wWPNW(&3y zh(5FW8|1^-pNZXD6VNXZe`RE~PQZ$^Qzr48V90iCglW{;y7JJ~;uNI3TF^dNKgoS) zuj-XOcdRgHY6YVD41XWo1$bGVo=tQF(yET5ow0G1W_n@i*R+cxq&DP7k{4)l5c(Tr zQWxA_Ew6XGTUg$IkDuLyoLcv!zqEYr3>zL=Scbwy7I0p4tORyAS<25#DE)u!3|A~R z?d$_q0`uEI);i}Pk37P`d@jp6|K)7-d7*l7Ly3`sqastbc0}nzAvrsh@C+iTs+J+_zpBlG`(saMYIynp|GuFF6E zZjo5U;+9{T&jVT**~NTVoRM89)3)O==2a0$ku?z--%@d$D3u1GoE^mP1E>+Xce+bI z$Q``p2f@2kn`d0(gd^$QIHAw7*2FG6S+N#`T%-^%(wlHpnssxPs$gdI9N)J1#c#U7 zJg-S?7cI3WsUcB}+NPo$valj{3M81kWPHGe2v4Z+`{9LU6G(+n9=#I31pZ81U<+4z z($vJO(!BnsW|LTDsI#6uh7W+KR)LIa`ji5tcXscNdM#HMgQC8w*%R*Xh*3L8oxfcl zNly~eFTi1ZXtHm#MwhhC zM+kty0=n`D+38x@RE5_6ud_Lo3*t4>&4FxerpTcfs=CjOE1!fqOs}vfPx^;B$Ewrz zZDJJZ#7w@Cs(gg*81pk?vgEtD*ZS?F-r(*Qy(2>9!!9eSC4usTlM9`Jo)kdq)~vx! z=eJf2$zHP-PD++cDt^gz1Kii4k|S5@jgPcK8i4UGS$yKGE^qnHBS+o~!K;(8W^(pVkcF;lBmQQ!*NY~vk-TW2Lil6 zr!eFL{g``5bHJj@bDTMua@u7wAd-#UTd<5=IJ@0kP-a`Z$m}w>j znyU`?$Undsqrzah@uvnL+!vx>=?dFv`SeM>T6tu~=%6VOn97(-_|BZqd+ZM?m45M& z`}I`8+(XF%&;JSctr-cIGd_xItl^qk9lU=KUbOD&rxU-t`M;K*cmdNmt7dZ))DG9| zv^0~19Ad1uwoi?|oM|7c?-s32J`G4ep^G+zWVxqqylHigF9|G*Gd24}#P&}P9HICh zWQ86Z9m!LmeT9DC{FUaDB&7a~jhj%Z@N<1ZNh@~F5HE*-@2ncgcwGLDZ)tlkN{1_2 zvM6q|kYw!?yuY))Gz|x0HIWjyMLl0Sr&*IDDQ`JTeeU|!@Dm*q-+8I9Y+nYy+COH} z5Y{3;FL&IN>^Z{9@aJfx&3fUrQdms6q7y1-W!eA<8c}`RASCw4nB`-F zW>Fa-)g5Ne&9l-Pw>kk}Q^sAoNxmLAXve92JS)zMiJ!lE9YYZz_)x(jTwxFF_#&(+ z^X=DL`jkd_r!-X07_x_q$YZA0kP}BqIr3HNkv1kK2g)OY&;R-w*t@IF4L4ei(Os`}GE_S^4^5 z!`^w0iT0XBWp#SdIc{GP;vR*?i;OVrSV2b`>K)l*)fj#MF8y!C zb=0E;u)>}hdmvfcehL|aM2-NLWu_}l2%?DB7qp19#PeJJNkTpPxowEP0kMpj?adn1 z_2uFw3Nb&X@(ovcOd;Z8oA-*s7$kV>APZuB|1lCoo9G7CR_h6ZO_1|&84I--nK)z$ zeAne%0EvO^g<&L4V;dHfL<$MylqA2eE8X^}YE76EU2`J6=UARQH#^N4Uz{3VZhL3z zowY#N`Sfl%+tiKpqKcTWga%Dk45Je-=O=WM%YGm=-LL#B&AWO8^UsfC;qH*VV%SsW z$&)YnfHhJxZ#S*3`V*jNi`GX$6U=TGxYxw?JEzgSMsoXI6#7`=0^KQv6HAJn{LRHY zfECA9ZoMB4jWts&A)9G9QZDp^b?v9<_e{*1zq0L|g-w<09<7<)>&6t%uqSVE)8k&Y z`$!KttDST%o!f4?WPX9kk$}WKR&a6V>9W9~xY`~XZ^|23y8tIY(x0xrS3S$cS`)Z8 z3X9Ls$+bTQ>Akg2{s1{>Y9Bj=Js&gRXpVV>QdDrZ2HgPLnxFtR4}sVhigX7B9B0D3 zOT4p@R4LPv1FgR!BTCqsSX3b}sf_EoPkqmQMX}99w69$dA3j8kU#gK){Q;b<;=D$ca{Ey?_mA@W-IGgX)07~Jnp>_M$R)aWg|}SmDeFA#`8{+# zNf}H|=)jNy9yHzU;#Q>NZvb(yNjY4p$iXy1Y*ZZ1=i@^g&lqflChDD8-3%W1)=ljY zn^~M6haSrxrFM2Wo6Z@TE~9%p*XA`|j(FKb(BfLeDorKu<7_xk@T!|u@CiwsH?15Z zCBqYO^_qu%GSkVG3T1C->NFqIP(^04QqY(~+;{|shicru=9nfF+081FaPOD}z7 z@e!Es|K2EF@Zt;}`bgxj_!P%}F=&4ILkm}UqD$r!j_Pult&b9EOdq;#*#@Z35(_bm z1waGw*_%UXa9I_w({E0@aUTk{J+I|Ti z>*~>C84_1wXMSI5K=Jx^kv&st_%681%J5ivK!U=?iuQpHZ(eZ;XF8@typ+k`Xl;)^ z6jOMciMB3UMS4(^j`l6e%!)3a(mBfnVSmxIO;K>99T-1iJAGoDJl6ImA7x1-yY=NT zEofye1VjW50i{adImG7*<34Aouq-nu8%T0o+46tk2{hZ3xxVGX2d@22;^4~|ET2mu zcaLE}gj7PDtiF$=Y@E5O=f*?vIzD)9Cfb%xEpEyc4#3MxLZ(SKnwRCD%4a$xI!w*M zNM5I|A-8GAQ7wK#lfeIm?oVdA{Pbx;XAUpG)lyqA%U(^z2cfsCsqu)#@yp3rn@{TY z*fPfKmFODPP3k%BAesqsE|FHK>@H2F#;YNGyUzj5>w?jVZcKxk8esng9S75+7kT*% zIH^iLyR(@Z&c6XbAN~yd?sFu^GZDLSWLML57OWA&DK}>HkYJm}L&PXAf1KSNWu5xi49xUQZ4TIH%K~|}0t%HXw zX7Qo3x+VpDELHB0Mdw|>mg-J?fV$ZQkr%VvVSs^^9Ew&DdD$@*N-jvg68tksH6k>B z^H0U91!PVKBucj=`9yx9^jEaQ+UbESn)=1I>~`Pip*DYIJunm>2G6@Adw(}ig2Cqa z9<%K%pHw-w81Tdo0h3;MFZN*_8u6TeH5=6Th!)c!@4*@f>$tiZalpPT4CshQlR>Yz z?UL)ZVL3SIxgJi)rWo{>$ksJ8YA4&jyH~PaBw?v|Gic=Xo^wT2x&laY`}AIwTC+*< zfZ`Xh0RO{!fgrUTmE-SAG5ba`TJv-dcHe+>S+^pz@4pOATenqbYeIc=%X?VAQp4NN z;R?K9TPGUcPdsOrc()Q*gc;O4VeEAm2%G!AXrH=Awq%YSBG@l!1k9txb4v3J*Q&ph zDeH4Jn|9WlL*<(^B_!MgS33PRo8*RVSQEToe_mc5 zwub=XGF*pow&RB~nMpwd{f5R}7i+=cweKksk(%QOse{oo){U%7Q1`LTCT0Z!4WeP+ z``OQFYzg|$&2J#8ev?3#kR7g`kI*oYIii+-Zc_ILcpK)%rpjl)G8)gbp1is&Fl*bv zIq@EmMLMDd*ELvKwYR%+#vBeJ`khK~?g7$Z47Au`vaUfG8vb-{q5od3XzH94)Xo+8 zEF8J5xHGIUU2`$YD~!wb3%)Q)WVfif86IgPk{_sd<&FdM1Cu-tsSAjXhcaDS585vm zBwE*mkh3$+&PUN;UHUVZdEWpI_?4NEgFAx^Pdj#^mOQCvSLuRMl)FS2FMk(+*^n?A zq1YsuB=8u)jkWJdoUrLQB?3@7GG+vI>gO{QkB^7>L~yuSRIfIn)f2j{*?pe4_M_BS z*oLUS#)gBM(6Nj3Vd0{sU!gK;T-)czj(3kqX3=zVDtVj)Nir`m*KSyAA`Ou!v+(a2ZJfd>>25=Qyd)GgBwk$@ zJ>omA=%Ga_l!mXH6Adh%!bzwUH~mxp%LZ;P;9dG-tD>BpVcXJD0PI0w1b(=fH}Sk@yJshrBt zN>ba+En@4GS(<*UD)}Sa-24*7;Kg%w*E<&Z@Ul>8z5PJ`_J>glHAo>Ut zo)I-P7D&k}Notyef4YV-2nUZy;~1uFNB^d^We`LRQ9dRnED%kx22-a2_>dmZ$XnI= zMOLwCkG2o}rP(feJ`ug#?^_37vA>Oqi!+n+JjTM0Y}@FX`kJxnVP6F8?8oI_Sq0RC zbu(%=2|!GF?(1Dx)F0X>^HIT6lt`XU+-!lzrtJhhMy_=%vAO?C6Mveor>W<*-;LKZ z+Sz(tl|C6U4f|C0kAldjUy7|txnlp&XauQ;^mam1gW8w~W9eO< z+O6lWJ@?V?N@bYs0d$B4b-$mWQt{zLpv0k_#_%%RU5Cjuck@f;6{Xt~N;BMd>-%f| z#V^bbCZyd8rOBb0?(IM<^X%c`r2hUeeNrbqztmE2!dCzx`x`pzbC8RNS>oR!f`zE* z*3x~*rt%k>`16-OfZ=JqA!i-$gZUW!*HbjJv=k5Yh-!-r?S{5uP&Og^q(|ET&!Vkp zC{0ip2A9yxiI{$2=(z;--rUVIYO7a`b%LsoddWPTVq?`CI}rhg>mfw#OI$s)?IAj` zbCS>OLzc*LQGw3HxO49)so_GAX1ZD!mOHzbx3=9`>Y5nvJh5lyC;X}TDp*+0;t@t0 z-(y>)a|S23hpgwx`f2s5EpcTRZ|UJ5 z3wc+ll;(IE9=1=SZ%a%39_(*uC`Cs)u?7}pVWe6PJ~d@G*o|zI(e_5o^$>;0 zVZqW`>do`-;V`ss&@%5q4RLt#YgWp=2PGnUby;|Y##d|+Gx)4lQRz=Z4k(Z^%pBWz zszZ8Laeu}$w@a8ZRP~*3e5_vsopq_{D?uVR`mP*amK5n_G-Bq9DrscSk8_u9QxDQD z$L8arm`wg!G&j~zQw-@*H}nbw&5vfYMxMXW+u$fr3>;;Fllr3ye+Vh_RAN{bGDumy zdtCA$4#t01wyGB4Mx=icQm(F(!*2y+>< zo<0pLgdhFY0wm5!di`g0`*@-pP0w?9>n}p8HZkUa=I}uCXSYp5uRN3>8LqszQf{qu zoIRmCg^br{no{$}{90O=eQqv8Y@zD%rhYIHFZs;B5QFkoUWIcu?P642-2LyS^!{J` z%p2Ww?Z1u^`D*R(3#0SQhx3_gAZj~IWIJ!?9lteM-J6)>H)+5*^Z6NEN5rKYR;{@e zfzkBm=k!eU7Fke;dh}$eQ=`= zb<6G1L*9BoGBpoIZx0Jdf*qGaJZ~UvMh19wbIu_2iP~hxSG>Jn<>CvPxm(@uI$~|R zrqse;6Jjq0dfxhH$<5Pyuv-pJueH|9n}|s{Q^S&Nl9xg=^b>hZ_zt03=yUi)g&fc($HtSjb{B4o?F%z#~(C0O@}C!3OXhteEd zg-LxWpxkI`YHg->B9g9Hs53zXjC5iHsQx#G7>32f1$UV`B@&3Zcx?k4)X$2B9t4Lu zLcUi_u5%{zK-p_fQNXl6s4`yB9PyGkC`Op1-jj!)+pr9IljTc`Q>2bvDe?~KxL-}+y zOr$7k%5k2>*Tos{=uCh9R<8vm2@G)St8pvv_Itp9=-3^H?omb&-)-Ykp<}8%jvjKu`s>;{ zxOI8+3popOMfw{Zn#vH8PY6II3ayBR)H%09_NSYVruVAWgZdT$7A34cEaw;1Fh_?u z+~rG#$npR1IXB2skjT@)@?bkcPLJoz>bm@~<>gTjwmsasuG-urNxpOF_EfT9}66*TRQ z9cWR;hf6V7e2AOb)a}`SuJ~_{H-zGE@{JoG&NByAaaK+v;a))_6lmd&KasRlMiWeQ zWZcicCAjL=4redlm`c)9@KabjsL;AIU5{7C&;Qti_w=$_QRxxk~@#$fIn@jwhqn6=NFZa4PVb9wATUYQYmMQAl?+oY&R7vJ>E+dxE zz zX#XPl4cd%}R_mhg^H5i@k*c6QoNp}n=KTY$kJ#Ts{a#vxm-nFuwJbNqoIO+iq-hF~ zrUGfQB^_dNRa_$O@p9^HG_G_HwJ&IbxvlkXT8SWN-6BVC;@g6-kk1FR%454n&^E>T zD}ZiI>qxG!ZaKn4sr}NEj3sP%PLRvxi(%~U1TpovNi-{Bg+=X)?t~@>DQGHokJlR? zNX7o0YDU_-hkayDGdL7H{+O$G74KSa^RJm`q9JO{e9hwVLeW`kPpW+FS04|&s2aWv z5D2zmepG#BWXt+y;EZpLLzc0`HZWHvEToiYlTyqDpC%+CPh-l8Wg)`?m?TpZ=~PQd z{x0M_W{5c}hr{0PwP9oYZm3M=uFYsNsjj6y8K0yWH@U5Evdst(eCm4;lREo}@^>*K z@+87V);Mz1%WElapB`Lo8DW$&qknJ`IMTmP zGy~r*_v`xSFde-<3W}~DcK?$JT0}9sw&Cn>S1X&`$UT{V{?G6p9WCSLQ$jcOy}=M}9EHQ?s7A`^-!0VjEn-CHTfZNPi1rA*Kqp84 z01~wj3`x0;Y;L=aKAmRjG%Qw3EXXE(`Ab~;pP;-v0J~5J|NuJ2Kq9Y!Dm|=V|;hN0m&=t7>Z}G5N9n( zc{En6^F_xEC}ZZB0rRQul92d($4w@kh<4w|`}+~NGi6I;y7EQhO@eMle*2s$Z+n&T zsrNKExmAG!X#p^~Ki}XL=lYcxZ?ECeLqK=_q~CgngaBI#f5DNP_Gvo$Z*v8So@cD{6Hag&f{{hN=%$D zvKTPTtFN&?Le-@uuIEzP8-|BJM;Vl0Y7mUtajzt89ZK|4j_>r8oz|lOAe|O!Z7=jv zLtw$qb|Hz~X}rSPS{oz;eU)l`uG#anzWv#y$?|Q4{8a85J|`U<1%=11{9mBM+?yH? zlSx%=zh}QZd2Fs?pJELm%*oR2mMuJpdi`LS_t|3!4CNQ&Mfm;NWTwH;@5PaGIWW zJzS$qoPiZz8))fPk?y6auEiGd*4KU0)H-I36Gi8_*juJF^G3PHO=~n8i3X2pvl6cp z&#UQ}+i{^?hW@-%`GRuHXk=?y_vx| zThQ|q83jSTkVIKB4RjL5FYSbUIZ)A6bqBHRZg~f!A*xS8{M(agFn8PN;H_F(EvM|l z9(OT!FZ@ups9bOJ*#WR9IwyR*%HC{*>T}VYp86++`GIISh*@n@;NRpl4)%s`*J_YO zkt!`Yc-+w#4+im}bDOQCGI;xUd-D`7ETR1M!I58;xX80IfV&~Pt4ic(IG(g;0!vYD zy}3U|&F7xpcas0ar4Z>K^{(dJelG9Z)ZoR^uK z=;tW;1jCe!S^a$CVchw`ZZivQhE)enr}5L6Cc{0VHp+Pe7u83`p%j!9iuGM1 zig%lBG2e{(O7(PDul2vLg6wBDf0Fror)^$dj8Z-~KQ+bQD$K$d`Rkj7?tPS?4ue*) zeJFa0iD%^$bcnLrLKhVn8hojYV6M#+A>UjS8cQS5A!GlzN?wfJIGB5c!Q6SAK`t|O z@(C=Bx+3J1I@+!6(DC;v>SQDpwlZ4pZbLbV6?m-CGQxyjhr?K2-8mGXYvjepB{7dA zchxjB$!F(Z*6WeTw2WBk6f66kWfikr(@S}hz^#2faRm@co4f6qxQ%ZyObU+J%WGK2 z2u`Z?rM{il-_0HM8t2?II82ao;-c!bq^gzwJ<3WxeI_Lxk8F`MzU1j0z}`QUPZmNHc;Qv znDh!tGS7AnqTO#90TNpKogDD9QSZgOn)7&MR7PI#BWY?L^P*D8IaV0Jhfz zRWs?mY}rTXyvG%u*SDmj&2-mNH57HzR>u^AHL7I?=aTQtZAN>#Eq^ba9VUob%Ie<| z)IZc(^!k1AL=QWwHb`;Mp3V$q-m8_BQ+~b7R_4V_J+#G>O=>udRvx1sgDFBk?$KnS zZxfiXU0bKtX@)@(X5Xjej5_2?62Wg@yv3KCHhsd{s(4dZ-FWpIsuycJr}P!1_JPyt z4LzM1$K@VDY1S7ADM7lZMWF+GYhHA+|B{vVuTO9NKd0<;HuhIP*)oKqmXEXb?0ii_ zalLdt8iatuxCiN@o`pDy^gDh<@F;>tC(w=Gk#WV0z>=Ix6$&)iW*A4pD@y2u98UY` z@wN6ghcDv@sRcOvZIiz1T;Ex17KQgsZiIjgF9+rphrEq68+h5Iq{k)pJ1Gpyq$;)h zo_-Q?dun&uN#&smHb#(5hhEuma+yj@7KjuH@SCa7ydd*!>aCvhXpC!a!uvYx>Ok@z zMs7hs06G2AnVaL!*R#9W{(Xtgex$5^zf?c1VbSQ1wb@#+v6~6Lj-CNJA4C1>71^)KyXf}F&0t~3xANmm2`C?QxcFEvr-)$QJYf;K}R6|R6Q%N#A9xC0Tt!aROx%lPF2fk)uT0TqP9rcs%RvL-o-v*HvrckX&PZ7 z`)7T*^gPqa)#i~*iMpXF@cVAXQx$!xUyNLoDFTk@OZubSJjY6quXEd0uY2gR(b7OM zvHx31k2amkg%AgWyj|q|i2F=>wCfa4H(7{JOxiO-(<#*qT7|-cf2Wt`AiLM<6#V^6 zgp|-5pnjV!3b#whZ6F3h3+r6;ALgt6q9J+I#j1Osd?Wy-;=&pE!<@VUSGWw;Vw0GL zXSaer`Xg$I@)BpEgt4_mKtUSfn}Z=Q~Ik$|U4BcABN9IWws~ zo={E4#d%;x=$0Tg>z~%B)nZ?Fy?-DL=`jbo8n&wItxK^UV>A|MK16>3v{MZ8gYBtW zk_aUX4GVmUOdAYVy*zxupZ8HsV{09eCG<5uwe!onSyB1TmzuO5(q^1S8=Qhnp6%{+ zukJtf%@lZp{1md$R)IFd2+P%egu(~_4>(+R^GbU9H}oAw3Wb`W(f3w~|Ln4F#FrUB z*4TXD0_H>_lD_r7(ICu|~Q=giS%OEtRiolc|g*_28QrHV&n|g(So%3hsVHD$5>B!tZ zBIenEr0tm3_kLSQto(8vI5c2>E6aG71!XVk+oedyg!vs0+K{RW-$f9|cCP|e@Cz}F zhj@FyyEidhyo7co=Oos+$(q?!Z4Sr5VzilbozXV$+X>2tesG9LI8$=89xewX(`^2Z zFP=mL3Wg|_WGT)anoc+Gci0YN0)>RY3GSS2NboNlc@Orzw zZZcWc`C+IC`5$evck>l%JmR5=I>dEfRT(8FL-r%y+`xv@9M8m=FlZ&z!QX7kZ^wrx zV_i~O^t0c62Qvi2w&i_qd;p%>#D=Nct##_z)Y=&+nD zJT|=K#)$uOA~gWE#EKW19zHe1;|?14C+_620b&&%-NNVWX|5l!YY>JlPOM=evJM|MFdwC8xKC54g+FqS9I9rza?hW0B^&Kq-327m5yq zrNvP`?VrU^=ktc4B-%}Cv7`$H4(uFfT6dxv2<=3h;+Ty*RePu$C37*7Fcm2~-T(Fz zBG4q;qc*6Td3OQ?V5IK_7|k4zP^bda>A^b`p@!1s#;ZACfo@O|zXoRKY%G zQ-{QM^K1-Lm>4tunlT?lNe;F0ecpQLnU*#tFeIo-_YJP?K>^lu5g?ixljbfT4)r8Jlks~3te z_feDqO(Xmk3)D6<_RRLnya~m-WLTljJvq53LHV(eGkT*V6b%ef%k1yqb6s z$Qg)jnsjK?x!->LHmd8RNAfc-e;`***EM47!szdz{{Vqf3!NEpl>HPYMfSBK7UrBC z_wFO9bE$#MbBaoUf!5g9i8)RgIar6JEE1$xH3e+2mjN}5)R(9=R-uK{`t=yhkI)J7 zot}ff+FnC@LbuPn<@D#wh%+5<)LZ(psmHR3Yh zV6`i1Qv$2uYx~+8tm=`77^RnCmzM#z>AWNZtqWYc+59O~+Iai!5;1Fib(WuIW}?F{9s{m07Rp=+*1VE% zJul@aq0-~Y2?9oB{85921E%4eqD6oAEx>c|qe2v> zZX731QADskVsD-I;>9S&d=`#)U2jcxWFmz6)r_NoJoCw5j+?Q{GkGv>WY#kt=i$;W-Ky!fr7TQF2KeO`+Lsh-B663A{+y9kxh1a;TXdp~$DJvV7GakTRgAM^S( z^n!?;2iC`nF_^lOhl2p#rvv{oR(_T^NPA&XlO=G}mqdUwCcLl^ggzk#zj4CGG)D1o zp{_H5X}2k-+;l1#o45v3ZL8D9G0Q+KxQ$*@gEfUKaCe%VV_pa1gzKNLLCh{?sR{`V6wX zv+#C6u}izuddcB~mn9Sj(#r=44dY^r>5&Wwps9JvG8f=R^Q-rBp?_)Vzfh0&rSS-J~j^JaTO>sDNUJ zLaqfITVeZpR{87+rDSIdUY_!4jHa`+w9j_G{RL%5M2H@$?eOagA6CH0b2Vn~JTeVL z%uS@W_mGtuKInf7K(Crr9W=!}toM5mTOphz-~rfiy;~2D#d*$yBWGj!H0V#FD4dG-V&YKDOaQNA}=?`O<<)l*E1ni7wZ@aS6(k1la`QT%99 zZ3iRVwCcLhWuv)H{+3>WaX}e6>rfh3T3{bB9J+ORM8N_K<6%Jmf9_kc;9wVv;&L#- z-mmqMAfu*KAa;D0gUexRBQ>1Od9zOe%l&)-J)k3^xAvb*bw}JK>3b&HW~sdNrL`At za?adSx>B4~9C3!9++>z^ID-Sm@aOuBe2>+&XkcWTKvpYRGbluoa6%GffkrH}olZCR z93eVEmNEiwBX;o(dSq({#kq1hA12;r(Xje9W#{L~4L4kbfSBb|a+ghgFDQGomRyL| z6BChQ#K3j(R%W2#_RPI~uS~Jc{Vrg2R2QSC*$eyU%H-D~&&e31bv;Qoll49#XU(yO z2gP_0Y!Ga01l)wB*InSQc;(oP1n3HJ>KUz%Z93O(n6cKUpQ5PNMo_tgFjTU#=50x< zM3)-4r<=Rk+0w!?Qz5|QJ^Lq`TsF@FaF9Rmndpk~=f4_p>tXR4R>o|-4oL7F`c6Bs zh7|<>mdA)m#&vB1fv5`r0wK?-U8uC;k%#EM_fh@bzDcZpbV!@uLks{Yk4V9Ly+v$T z_7+?Hl8GGpKanTi{RBuq$5%@v&$V0Crl0?LNL#n~B5$3{O6<9*XQK@0kO=H0 z=SbHGA>3&98fV^c673;6IB8I^;@UUO+vAsVZ{cjqQJJnIl& z#--sAyGupnuNG(HB~->^;RPP6FJJqQh&!IAh1IjKNUZ-rhJR>pJOM40#kZR!oY4zL ztpa3z!E)$kz?xVJyGzDH13shlg8IHFxR7dk6WlyYFk7w1_bVA18 zxm{mX3wA@QD;rkDw4LPXW|J>VUSJ5Lcmt+5`^uj@bPHxF-06i9?18(e!L`K3IdJY@ zlpiUy&MuVg$s)&>xYQsZf7x)g=Lp=UuK2R~5g>7*Na-e}3+LWRg_RS_6mw|QHVl?m z0)xy&+)1cisd${i0@7=_&i3PGg67L&#!~d?QE)_tRBmyTPRG0-XVDVhSrwOadX2LE zS#SGry+e1kE^-n1U=QSOBtRTj@?@wt;;+SQU!dh;YeOfcdUa)>!vn08s=f%AnOwvp zHQ?k#*M#QXwJiAp*-)8zu+1k?2>g6Py$5KYm8^YGis&1R{NN$}lGX%Om?TnN?E=wt>S8La9)Y%T` zpPpN!oAl9n+RB{m{d(HbxNjB`ImbU^;V^ac_uzin zHDQ}xJ-L}tsmuVUD{CSuK{I~)Kc|5!Z-t-I2JnhjkCR*93wr19$K@gU_s%{_G~~t9 zkTK7V*z)}SuB+vz7hyji9D3V5%HQgP)a2W@pR6;t ztQ;9uP%(eQrmd~F)%w$u42OR)PwusO`h^DRMCBe|`;UZ)a&MH9+J$~OvYG)k~yEW%ZNZzIXKhM*Rd7^5-J12cZ7Aq|cHPh)q$= z`$O`Qg8w>MP(`QvH)wZ^jlT1gkXS&po)T4PGumf~^XBs$ZJkI=AQGRTi2K4R{*G7J zU@5a_a<6sK6ffyH2_LVr=%1VCy?g=5wmV_Xm+FnrXWBf6XZ9VPk>p3l}$BaZp(0s$4*pQ9OaA?6*?FW5$hc%i4JYT7)BDN&^DCRgfc@A%DRKE&%WWY^uau6-py%W zvXFLbS=9;p=E=QRso3Fh=p&=wIZX6=12o7&3()=VmgR%A0W`J`nKW~P1zH+mB9sPA zoJ)uvE!9?bMXky27N;+mQ&7BL*t_o}ox*!T5Q9YhTiwXyuK66o1sNQVG)5O7SkrWW zo7X)KqY%zD`qKx}zVa86*Mc;fZ+hGFKC$g5b|UD%Ea$Ub&*7!7{d{J5iWutF5`Ah7 z{GDEiP4K+G=l@obQtV!$sq)CG}J_!B};@_GcpbNJaMv`W@~j^O(K0>fOx;YNEG zx91gziZ}L*Kxgn@!t^mmI(tZ2C!Bj}bko9^IL7bhw|YH&DHj0^OV1HEMKVn;kr4QU zaCX0Wvs}!&oW#3re*XaYDxF6>6uRfb@^6yH3;dstb9??7ZBI4QH#Vr!qN4*~bgA?l zY7+nzp*_QFBE29CN&mCdDC6bN%Mp{wMSFX$p5w<5I+h-+l>IAfp<7_7#xqro5;_ibp%*>FEB?}R)g+Hu#qvc3$M{8`s zY_s`flE$)&eDpJP8TO2Kbd43{b*AA%*G6@>&f)|yp+zj9w$eS7rPVop!M%~|6G3Pr zxF(@LmH>%0W|QX=loQqOPFAsV==Asl551aU?WQLmcZ@b)|KIYG6xs5L+i|ky7#x71 zT6)FE^07ciWzdYigRp0(zOxY0#r5!wV(L8H$<=x$E63jK084a=B!K1o5mHUoELY4f z?|tA^Jp5XB`-H^qppZMt@!h|#;x&7IpZcf10+%Hc&WQFoxLsHET#PH)r&igI`XZcj zrit1^O8*(E^Q5!8Swq|^u zcXBd6q&jB0X0)$;+fy&UA%=t88|XzAJHU^jQPeRz$n|r;*Ercr3~JGyFoed84C`Sm zEcA!_6h!`4XxE7an?l>h^FfFj_unObvb7^c2P5K^)Rb#I9V%pA`EQ9*aLjuH>inu| zyhtu)ploz25&3T(>1jug7`uTRYE$K((@ygc7PFv-6!SAema6PG#YP>dx%bMKM5c`r zEphn_6BFlS)W7HTS2B(ZF*_Qe*GOYp0L!I>K`ZT=rtRUCwO(`Tt(frG-lMH>?OE&z zib-wNpk8e3Mm(Mr7cZ1G;liD6-Vn@im`m%g{p+7|Z@kO0P-5Am5JP4^LB1O=Fbds| zzCom1vTPiVHe_K}bo*x~pP)M3rE?#-fu{g42F8ODB%!m%9pOB1Qo1KiyTkcCzDSny z^$5|;hMsBlC#_#G$@bY&Eyi&d?NDNCYVNZ< z4|RcX;O#?)<=%|~Qm|yuW<@AlQiXFO@&Crm+kd*F17;v-4JmHHCH0nnID`jM1hU3d zsq93ig?3zWn8Vj&&xp|_uI=ZZQmUBr6+Vrny{|hXpWH5BwJCuljl4DO`b7FreQ;n@ zw(~Imy{P`V%fZIt(dw2bfH2g(z|sO`?7$rGri9 zKM4k4c=+^`t@hupuVzf|oVvq#@k^z21h5%}T*roip-1B0WxXGNy` z{8%uqemRG;AEZPIhPUp10F!zb2Fj&^I+$8RV*wdADc!BC_()&{9+Cb4Z@2{`CW&i$pMq{+STDrGx-VnM~Oe#Bb z{DAhwJ>;0ocGP}kW~U{~7(CpC+q$ASCaxoH>Yj1YcD}o^{F*cFrV5LgK=n~=G_Nl0sZS!RAf|8}jvb%Ej<6szlZjrJa{9I~k}^iI%sH?wek%wnpsCS;#bs%Y5Q zO6)6lz+NGLf^PnkePvVYFb6d)B?`7{FIAPZwFUIQHULSOcKEz2N_&^s&!{#cux6^^ z1BJR*JTZe?-htuWXEe|{-Fl6InbacIljvx2sG* zFUhxJSg+BAcVbZM(DZbjmdfL@{RQ`s7X5_x%zvN3!T%C~GMk&iRCKv3|GyuF3@UaV zVma)x$^PwbuTPvU8+@3;(OH{%*(rJ^eV2)(vH$1OD{A*W`>HC>J*tMY5@6-s0RWBxPi0xdR`qh7~IB8BOBUwMaV({3l!t4IQnwF>ifmLrxq|7}9FplA`8dH!2a zBx#{mVy+U^_@BW)b!~5`HG~VbNOa)zP2VT4aT@x;0==*ucj&9YVQ!S}jobuT%5W)B z)f0NMMN-J`(uoZEsDDJewZSF%kCtZ55Q}84xl-RpD-$WpXjoBZ8dfHZE}6b_*n&Q6 z9FrbCmlAVq6tCi|Ky#4`q+cq%{K;Qbm4!{sL+s6If;5eninV>J`WF>%O-RP?OI0%l4II-H>F&BjCNsh> zfL17~ahtcC7$(VaKJ13 zEONFQ8OgJ@Q$TS~B?*$>jg@z{txNs#;r~Yc2r_LVKSJ87=#;Lm4qbIxVx^zoIJ7BD zfcGVvj3&+r^93OS%o8;Ye`&}E@1VmOEIrAxwD^cTPBD~_Pd}ZHVO2V}tieA5eB2g06U7s_jTaf9r?M>wcUdu8}DA?ygpdJUFpxNmd=sHs%vIBB6iBX zC7*OpNcz;nI{z{!W#A8v3-T;C@fa5m=(L= zmiAkIp)l$NVOHA9JyPGXJb772bPmM`Zm*L=OdL4r0ZT1EkJ^w&mY|^9GxV0>sAl$! zg4IiWZOsXz*ZPW$ZmP@aJWcH9$PM!+m`(C%MlNaCjU~E3e8_JG|&66#s`nuL)i_v4L-1l1d&^zXIhqJn; zK9b7`UA@|(*3($#QYR1m$k4Ve+mXdz(k%_%}et_=5O@(!V(8n>Y``4b&;{C!JJ_M4|b9s=cpf-O6Ck#=> z*ltw;i!Nv6-2am4#=Dy=dV%37|5)hk1=}A9G^Jr>pSAn8#Hu=*y7iV3X{M+`m!6C4 zZwt_@zVouZ?XeSY0eB+*%*b36hYChhULtMh%h7URAg1Y2h#37S)id!}wyx1X`zMB1 z?Rft-eNj5O7_{zzf_4eY-EEC%<2Rv#^>y ztZuY7#{Y7!5PgLFt4`U;$hG=FgRMCcEj!CTR-=UsO|@}f6IaWJR~OG9XwKMRa2zglOEWThtt+e{YWPqpJ0sYSDot^&Z2|4|ey-0r zXo{o<9GVpI-9WaVC!yCB@#I{7oQD{P%q$zAGRt9&x9TMwje>$*Ny-Os6ND1Ei^~wA zzD6YzC_+3q)F3b;cV`l0If^iaX=EF?9{57gPVZ{s;hsGYAH&V z7tapae7=vG!V_L_7vQ^ItqYS770!`1X%9)o{Wjx6uvCt=U;SzRvFps5OY*UIZFdhH z3(TqO08t`AZ^pKHJ`W1`tx{$>_?SK>^!?sbnsSHS5=^*-szgt>f}Qcs)dhxO7jMq% zk1iq5st3ixZwKLHYh&csEicx06w7{KIl>31pW;A|x=)=%xxZMn+=HPzBgPRJ0IO+i zQk~*O;sb#g@H@V5@64EwyVNgU2)cWE#q`pq5`xU-wV#*w8pXA#pJMJQe_qPqAQQ(> zUml@!jukTdi{#rO5%id%>*8xMHyV z)B|Z7m=GauC@6mHE&B@T9;1ZeBX*%wUn?i6;3q|OVfDEUGs|#IgGloy5eriM!7nWl zwPKGc_4ahIJiwW7Co1868A53Y^;K<7EMZa28-ARk$;;J|K+OvJZqA!cxAY{_>Coo$5oc-B<;gehNl&m}z&p9PaLG0KZu`JMgV1d+?E7tl1#9v!k97pRd1v`(;PolMR6NN4Q%*|=B zXUmF$QvP>RfaR*l96I`*qs5~>y73<_xp zpHB8K$ZRjHDD4W1tli5(KFjv*QYkq&gkK(uWRvjQVU2^K*x`n~rp{F!_qgPnm7Y4w zE}eg3w*dNc&w4FP@ z-jw#QJrlB%;s5LYO2RVeF8Ntp$ALCgrGb-#b8;Q(CpIsMS=q(YuC|3ul)fGUYu@R^ z!E0VP_B$zauk82o?IS1foTqJ^%dC!Gy!7zHD8n%Bxqj+?KYMJK5Ux43(#a41#A>^N zPKIXoBG0-V<;%$$Sgr}IU%cfKM*ES+s~WznP{g-{gD^z0IrDZO?i|3fJsVPLX{`l{ zYTAlNjCvm>$DsWUCw>9OR6WAb=N^qD2Sg(issk5$307 zek47;cB9}kHDydcsSH62~Z+Z{z zjx=bSke-37{R%zBNwDyj7V-X6xXrh>L-+qe zfNh+{x-b@t9qb~zb8rL%ByYEW^Y%pZdU1+~hc@8WSP>&d!|IhpY{@cfpoL#haJECN%grxqSHu(F+#;3986xp&MWK z{P&1zx?hnPaZIO>47|ugL(XQTQ~}9^MK48iv|kBK@gFRmxH*NrS-ugp;GSn7b_1ccA)^Si~^!a8`GMVvi1sL4)Nw$pxj zq@Zx<-ma6}m6qRlWx=6p*IWB*f3jx_N6h{n)vT%%G@uxHiWO!07$=D=sB3{ylbdSA5gf%#H@J0HVYZIdvYNw%x>+Av%}r}@q< z3}75223$x>UQ_Wja)dMDBsgFaH-X=Od(?SZtCa z8HO;{&C4@!TRF2QKUEw=o{o-QV6W**YVF-JQeEN$%=XJ^XaQLMK{qy;W?AB`+syO@ z{QSI7b5X!$=FCXT5NlLey>hm2LY#{^8T-u4+4Yc=+s|R!vsLKFOuWp~pEEXjFo~X+ zxfUZ4wA6xxfuK?OI0{Zulq~WCFSXb*)f-Yv<8S3g7n$3}@hpERS$cioPv#j-W|45q zJItWg4DCR=FKBZE3ktBb%DV;VyOJavWV||U3Bb*Fl3iGVRk}D z*qJs`Ducu}S)f@7K!xR!P((J(U{1{I9tf<79Z2NY}Q*2xw?0kW}5weVD5jOcWK3})rzxRRb zqqjlnk=p`CGMcIkTs5nFdITM=elerbL;-uv0(nA7IhnY0MK05ooInw#nls=q+FY}w z40OQW*@qnW(-GD$2@tifIE_8hfkiai=#touI37mOX#vfO5m3#z$HYY;*Do`QRgLn%%L_Rup3337k?#^NXTDB~h`AF#50|!S` z=h<_FG>qkI{ql`CHzIP%?AyOGmwq0p)4&5Toq~H68u6W0B#qb&+X(J+II}OxH z884*JsfO}X`$S_jv34UUnByqa>9E8jb_~R0*p`*!{7`CLnW);@0-{N10qvflZ~qMK z_*RTe+o%1)`{Vg#_pUnDG*Vv?nRG~`8CxlJkU`Q0xgOToj*I3TES)}KTea{bPC@aWA zY8*o{VvW}HWG~A=WxeV&wgn@oP<4kkZGR(#GY&%Ed4nZ`zj=m368aA1M<0fnA0^X@ zYY|3LQGO^=#$*$ii=npw_98x5Zu$-wujsh5XWSsm8UgiMs`a+dC6&vhz~^B2|63z; z+gwH~=bT*Qo1`Zhp^Morg*OCrTgZ-n>~i;{Am-_wbzm^?G|JGoJ+vxU)SfABy#})` z6_p5)B(rTvt1KJdB)DBW9TMG*UQlVwrfs6?JmclRRmx0##mJuP#!V}jXgk@B2!OP1 zPtB!zR7`9N>luwabXmkf939sB)48#qKYKeOWpeMFH}$V%BX4u=#o@Q;FYyYx_UAVhg)a7g+|cg zV4dhRRP4gZ;t8?^afq}cffJFeO-p@cf>ivos^!|+Bt#BKP*O`zxp^&SB6L=}3_YKA zxLVW<<5|Vsjc4V!JE^z%t%N+=LjIucR*cg*kG9=W<{mqiBI8SJ3t#@X(p6r85PC)R zHP!8$UVowF5{sK`FDJAx9>8nr!)MEpkqBSrnIb(s*Viq^zQ~LoYm`|Y^R}w0bdma& zSLdgcl!;q0V~;X;B=StrRbqWa%N7x^gm_V>P!m2c@?3$3*ZSBan-{Sg%Z%O4!fySr z%cLx=*N&>T8KhA2hJWR?)BZKTA2h*OpvrUWwN}v?VQ*Gj9xn@FaAny@_JH&YYp+;u z&AcGa?%sQ*_=_frFlx3Z3oRbZ6*u)xjOTEh(fa62Z-X3GSc8i;o+iRqz;tKNG(fFn z)1YrEbZlKGV8nUQEx78oJNxk@< z&_Zk5C&POAvW)0r4=d1EVzQ(vXAeFwpCkCL)bj7(TF{>4- z?4Bup!2iYNb z@-(GJNt*&(FS0gqIf3!>J;^K}gIiJZ63mVib3xmB*JrEno1i zoWhrbTb;)2=ot%IuQC;#1qImF`m5+}q|n!U-6?Hdp8RV{ol-bmFC7_Hn5=mz{{n2? zS5Uuc-1nF-NdG$zex%UIkjB<2nK1aCW+A?4YA8UPJ7 z6Z!oY7y|U2ze@gGP&N>M3Tw73h2v9jcQi`zYHZk_HsbLRN^j_!4pA z7Mu=&*=iC>ApveiQzh?V;EhTGbMZ$+lS_*{6wRuqxd++yq6(^P*kVACd$n{=LI0pS zGVtEneU7scnHCj~bTDEV_T$WQFQ0 zET@@#`O4QqjuqWgOloNz!I#&6aR@N$izD-eRS&;^*{$C>kMPqXlxd#2JV{cM3$~eF&c! z)G9e_kv+~vGYt;}o&qe?Q~kxO?t-&sZeC^VM8%H_ekZDN&yRq?ja+|hcZD)OoUL|p zH3S8K;zU?+kZ-Z|?8s=u*$16o(acYxItgBa2Lxn#+%+H- zB29+dINO^)f97aLpRahcUT_Uh3>N-pfEr>T0g6gpi1VgF+~_kVEVoT67mv&-)`NS- zS45CEPA9#hYWPWI1l39{wURqmY+QP%#x-e+uQ=3?TS?8J-};u z^8C_e$=&4ibisaVMCQwuqTg`HUsaT(f#p9KOqd3vE;F(IG1W_O4bd!$E+txewBhC1 z@WL#mV%J(6y6drtNxLg+10JR%e4il*?s# zdzaYUsBK?Av{^62&O8MGa(Fu1j?rVfg7p~mAyboTv$Chtv~C}HqCPSIsd#Ak*Kqo3sANDJ*yLXWF||1k!bK+9^|njh0mdv(8maUgR{5(jXhr zMfHO^w#g*{c2J5DVSfd20x7rXANs&6k<*IhuqEF{)%dfRaJzwBF|IE%eP^XOzT=J8~jgWhed0Vrn zGKS&;JzC^0lV}+0?|QyK7fGJY8wyH&)w#Watw3TQFh7|lrdlLUbeiz-)#i@by39-$ z*Oz}2d<;1ynD%_wTjSXsy77z*|2L8}uI$pr@2v~EOqL7FXFce5Dq7x9AXOksDAbBZ z!v!cnrjOgdcz4cA=JTEz=f{#@2`}YU0lPhpNlG2}$9RVF_(ZMfDNWCBN5K9s>&#j8 zg35%3rM|r#J()ZE;^sU?f{o@4q`xOs1z|Y^iQ+ratlz-+$W&q(AeNj_yO-qK7F6mt ziQjDc+J}vGjtrX%AWWyuJ+3%b@5{o2bkWLp9Tzs&1hu;pV@vk!o&7g{bKeSnU>Yzh zz>}d8I`j7@&l&NP`vM~9d0>Zeg7+$6^R5jXpb{Z0e_5Gt!1evSoiskDV*UUlO_S+b z509uIeS1V!XMx}Hq%C`0aK7cenH|F2jnKHej_4cmfob{vcGc$jvU=(YPtf)A2G@Ns zDM6hZ#SZxDu2%JFqCBTgS!Zy_T&-d5RwPY*nn55)=#W1ddPDbq)E+3V)~dM+WzCr=e@2gbm3hZ zkMHGodAOHcZU+%A=q1Qxm&DZ;ePMve2%_164G|{BQe+#k>vo#ia!l1 zdma#5@L%5;TZa&WW_+?Q^qcXTxeT)GLXdL?oragc{7zKH_P`VjRID3$py}o#1j7aidt5JjDL!agkYK{d8rK{azjI9Fo#a#!^mvzq81@`5PK!3AkWH_02#nHGiRRRUH z*);E}I{}c2)cVc*E|Z*oDtRW?tUpZMg|+i}S61i+Q-1ZPm=l(yzEnt|Cl*t~SLMNc(kgA6gI=(tH`FZm-EkL-C#c1EnPpvk z&R|uE_6-=xVSMXZ&>^Iap`Pv2h|&0uBsskU+`(T%9YA+ZQ7CBhNB_7}7^BR%$fX`n!38xh?WM;B76R{&BH^an#Q9+q@3qvQP?NcaV zWAiyW<6`6F!At9+8mBC<2Nnc5E#oC&1}&B>#s5Zz4xr&cFc1=^QWGdbZHWB?0>0^s zpB!VAKXQchy!^!0-gT3E?t5m8O&e8EJ6&o{6RjeH2L0$)S!hvZ_KQ=bhOdlh4(`)j zK&ISX>CwH`pCkil?qq}<9i)1Hhk!|^`w$SgIC={}2IDXJnQmQfVo8j%*$!pS^?uLM z&q&S_BvUQ0=38D{m;b3-oo5bJb-sh}vZ(3SP}rvf#Lk!7K_L7<^}*9yW{bwxNM!g4k=1=tU|U05YJf6eQtBEV}zcdMUt^A#Cq zW&v)Lk7Jd3pUh&*yusccJ>5j0#I{fP&83zxI}>?a8xlB&g_rN#8{&QvO7E7~p6Dfh zLgpg!?+HmmMdj>1SsWX6QoFQUbk_b_1_ytlV$*GW&WaUsxFdm(!fjWb;)+atk+CuxI?fEpZorUmqvGT6AWl`BVY|U96$WlY75^EC1+(yZ<`1p|0@J16irtNm9~GFilP$vJ`I}KclH1_Ghi@L-RYr01M2gDqmE#l=H&snLz+8JP z4L9D2dPlG;SPbxhkhDYOxy&uT_GNY)qf(W`_#^Dv=lVN~G%C`>It#aInEHX|(a+#8 zU4czNue)C(@=xMK_@g@W%t+E)D1Q6+OS!zdxjpTjSew+>-WEO*p!cOYCz1@$!f{-I zmiqIap|awc9^Zu1(%rFF6CTvwv|-=X1os-8zdRUQBF9Jstz^>DgbP{$HmMqwZr&Vn zgr`K9AVZsg81qdOGNsy4-=}py`~7CuezzC;-CR!y+rco@a#1Ue=F2%+ai%`+Ix3ZG z5f7Pt^EaC(2X%sETrxIyU#0p7%UXIBgcSLio>RKkP6l+4=ehBb8g2vT!u2#KQTC4m zeH{W)C&p;=mNk$K5f2gsk{}oR2WcZCEKvq<1ug742I4e=kgJ$}@u0?bn&hdwE+~J* zbLyqJzd@;m>~#!J4}Dv{&d5Cn_8N^^Iy*N)->EJ*ag?Ti7eTob=*gT1xNV@%dRm2= zSKX^|Z!ZG0{JuPOmGA;31SZ@AEOFr6XN+P|OW{OSJgL*T+ttZ^tvVHkS0y%G2WdpZ zSygjH9Ly31Ll21!Yt;m-sLaWzdzxDjW+qSWzl$M%ewOkVQ~uM;DOa0lDIqTB=LGku z-O`U9jMe&4dfqsC!H4{;2sHCv9eC`9@ktY4g_=Wy zHBWg1hJKQeyBlDnhaMEm$cxi? zI7=Bn`CA{X;)9gqM$)BpwLYF~TflCt6;PbcfYB_SjA;8@4%7W&;ru6KmKXp>JqD!0 z5mo+!oHDY&fJOmU5N@g`f)dPnLcUN4I4zD*jx&m!bjhmw37f;%+i^66ovk&oEbR*q z<~RO9xU+sb|4w&*!mdW-Bcd5KWAoNV^Etj#vW3~t@QLRG-<-C7dTp{O>?&?TzBA#V zOfhRNHuWjknvLwI*y=TIXiPrvB_eDfj1aKM-69!~n@%B?NiT_5#R+_(`{H$*&bomh z|GP#1gm!>Q)$o;#R+K^A zLmc8nACu__i}PvS)@V6AqbK=*;9re5A)|?lVtkWU2wfsm+-}{n$aDG7mAt+jfnTUn zxQp@P_r%N@>tKT7pX6SAE0JRGYy$%i#=#zG-e9221 zTzXL-?AdG2JT*&O#ZzunawQ`s33#3u4Rp>{9E(H2k1Dsn=AFiyn(#1TO?%dOA6MnjxLXIgpoTky~BTAB_~p^<2^HCT7ImQn7e><0)Q&3fo`e@cFzwW_j{-mAP*3 zyYERAzTth_*HgSazH>oh9yp9rB|54vf*bIn4o)+kuL!n^hG79@RakBW%0$ zRnmFJhl5ID)!Bw{_yYqReTLj6+dqPbo%qaLE4XXLUrZuW+mAsob;dyTr6FVdt~DLyjqxN`VYHSb zoxojJBqkqw*el`eXhVmxcQn?90JM6j@e11|1N5>(BVm-~{KRXFxF6B%X`H0wLK_NQ z=>MF93)T`=k8WZXMV(K4W3e#!%RSsTe*QZXqg!X*oPzkpV{<;T$!K3LR_h&WA0f)V ze|hnN0ytmXOPn(e3pJ{qt_1a@y)JoZC)#VvoZIzfO*AG+r~lbk7w&Ae3FYe)^Abo+ z(#h3A&z_R2c~3vT-0JOJEGv6pDOwVjScEC`@F`#YhJ7K~E5SQ9T{2jw7ifflR39Oo zflC{~Z=KxQ7s1wrHTu3qCE!n#`Uw+;(ut7Ec}6kLI7TBX(E*eSLXA3MMT4tJ21bxP$~n zw~BbSF+u4rb*fB7D?QsN9fBysPZN4u*fG2rVp;_t=>|$nM1^_4hq21-0N~f!Aav-C z%~N$1E#d(SR^IuGrJr<96mp#Q{UIoazh&Magr3GtIX=DwOR1$%j{yOt8~pc8)|ZKi z@nApa_;r(XeUp{#zsa}Dz1_9=PBHI-yOy5ExJy-GQE<%Gm8W2pWV7f1ED=ed2-S01 zM4^nX6`x}oK<>Y10-z(|kX_v5$5lT`LTfEIK?Mt&J@~%tA~>rJ(G+YO2&L6vTpDA^ zscSb=k>z6v_3dG$)#vc`dekQDG5hwWdg|)HT~5xYWzHF_4-a<{$o_;<@ko0;LoINu zkfd(1{}@=X!%+Qcp38`WjhNW%?VHDxEBmL$LIufR*!mN?X*e|oa9nD5;&V3*5*?8v z(TO%45ESn&a6ZA>rR44o5v^hW9 zI=G{@HC3xvMdMCYBsxl|gA9teqNZw9L@Bk_YRd9BW5QG`NBiOS$?Jg&}}0MkS~}$ z*dxXRCNr&ts#TGO@U6}X004ubah>EO8ZS4K5oINTg zQ@EU1GhcfW@0K~E7gQp#dS`)o?Dt!%8}aJ*=~dc!bUs?~l)K~oqc2!S1`IqLmnpEZ ze|G35JLF{q!#bxFNAO57hga>Hf+D;-f!2kmX6z}^{37fcHv8AaI5^We5dFBd)=v=J z0G^Er-3U3vCen$wmR^q#m&vhEMJ~103Eh2X+oQL8PIvoZqp&hgO8RMaV`5%$!xEjP5iwg6+VM9{^#fePE}lDuIH;G{~9 z#CDuZN`){Qd6*$sp)KyScNW_tM8{-*TIx8r`VIKMVx*+)<~Ev2nIJ-YM^C~%=k0%Xw(+&HL#Uc5_Yhw=T+UdKaV zF8dOtjEVmL7Evh2R94V#!oehYIbDRdmXwn_F(4y1K%{RDfVbcC+z;g@b(E(A(dL-C z0~k_oWZ*U&h4?A4g|s$Ng^)wE%_sy42*P8n+SY$tJI4V-CR(mSFo_Ozp8Qo2*g5}^ zNO?LN+tPV^0YwIjQO*V(>8)!<9Y$~h>kQ4C@s~JTEgG=wrTOoT#s!6Jfn4WY;8)z5$zcB2EI_s8O%Wsgx|Bqjh`P4F;Q+0F24uLqR&OZ*H_>u; z-~9+HEeAuLq3AkTxi{~e8=9G5q?s~!%Lm>OOfX)R<%kc$|e!d z!*FHWgD`*|myRLKYNOU@GHr!Y=@Rco+iys8Ol#-BtNnLvkoJ60%)g`uve8pe4@B#@ zc=1ZapG0Y_{=gQbbyqqs3Bmh#k~Flv!u{FfetHfT(p(*Ka?C3o^mO(KxdsI9w73qu z?kcw~0R?O>bL16?a8EeO<4P9U7Gx70+-MBdiOBqoIH!WEA>Y&Cs z=+m{mk5%f2Z)=%-_U}nG{tH%On4z*yU9;%CTpdx?KhXAxx6TSF_)y{Pqa-xvhKate zKHK=ufk~L7-l}2ll^|?LKQuPhO>-l$yrrx=vd2Wx*MWMMw-p9?%kz@;Ks(fNd}|uG z0PJ5n@e6SKO3Vs^@1oT)$2)H$sBet9Y!QyT1)bL%IKb^v+CO%;q3(pDj}&SVrS2>_ zZra~ZdETEaH-Ix;y+Hl4bkDsv{@`9wo`rcJCK5>RByy2WRX-dtZ3wtNb^W*S(7o(4 zdnw4C1xxq#Bb9Rt`GaS3zyH=e{q17)>GeIAA~DtFwSb-V2~A~dF3AI4DmNJRlr8xD z^s5)=Go}{*>b8S%KT!SNTcobdrdQJ6eIq*BpW+Ci?K?TJ`>yP%-yOZL99}zOoye{i zMtQBRS?_JTrfHBixwTzLI}>(i(EFwX4Q(UVI+IT1ZItBGMlyIW`Qh1NE989h&(R6@ z_qf?B7JbybZr_1V)s;%FTu}#2D+^$T1ehBF)smZs%`+cg(8>{Tuk!tcip_FA=S1?6 zcJGxD?3x#obDTs?&~1dnCsJ<}=%7BZPLMug04a7tVDlz!nxA$e8_|wlkHt?+Djq)*OZiP({2_9h2rGBc9gkx#)8gn7n42crHS(=v+-cUf13 zvhIo&C{weErUiPPeZ~kh#-M@@*%lI++XBK8AH2nxZ`hBF!7A=H=P~N2lbYs|U7K*# z?rFP*x#ur}e8VSHgXdK`PtR1Z;k#aIO_xlj;X*DzY15hw(W23s_|{gbh>z3!i;~u3 zNBd0m3yX~rp)){f&OWXc^NfjTOW!Hn$n`I~J){0Xjxuc0WeX9yCM~Y!#sr0LjZ~OpxVqCB*mmLcXf*mh zli0W3YYx9*k=CvZM5HEB<8vn83kM6PofY?oA+p_TE(3&tz=WrXaLmmvFaF4fsm_$U zi0+}eT-=Qaw}@<#qSz!>657J!6SS#Tql_oabRZ-SlcG2G&Jmt7MYz7T~q8z>r;pL4>F2a{N@E$p7D5)hunH zX%}Nwm0u5<;dSWklaad&#j+eKVN@kLVXGYf5N(x63a>f}hYeiBGUp_IoOVDUO~=kq z;ygq4>{(Ug|Bj(V%~IgG5;Eo|+gy}ZtUdufqm$RSDQP)hMStfaqm()A#-sQFk-hh< zwJqQHZEVr5WIN$9ujqS|XB@OoZLjbLT)s36`)MFgj3S$Ng-a6mxK#7)fGvks4A7I! zh@uDa439hUQ*_S+wwXgQGHepB$<&>Om(nAj0szZr(V^0{U5v{=+`ivApGRCATtuNs ztq=S*IrZ*T&^}ulQWUv|gvQK?J(_2dqXaL>G@Gz}8Ck`vA19>(jCMxoH#+W+!8Qs)O28TckQNda zrN)%sCbq_>Z*&-GPP*nUi`jtHRI}fQVPnkU>%Cj&p zPeC$BaFNxbQ*VLTVh7EBKgo$EjAVTCU=$M0?402W_4DPQ8Zv4~2*rSmPr2g;t(4H% zJc~g@PBR@;rcZ;R?dye4T#J-I&+$sZ>+4Yx4d19v!dhv^31K@QPm)D4)WXN&7AUZd ztu8NL{0TodGr*D5mww7-j=vhfiJ$yaYd0ZOHKmn;X|vdfRZAIKSeFOxpn%dF<1>j*UnQANtr4orPi-;C0NYp1EY@F%WpH7lf6+S(dYBUtioW zC^fxWO`_>O#kp`V_`OHd{p=`PkTX-;n7F2NyQxt2w~r_X=fPa;D2hN}kOnE6w~lnB z)5b8M1|UtT@pD^yDK=6q4mn2Z@hDHU4upi*@c8@6p`f=Ss^OSm3|$YZ;wnS0i?6+M z#ys%6K*Ir!4X#3E{;I~dr@x)z!m2Pi!$aHSbLQII-*M2M_ltSZqJ`7BuX`oSH9IwM za(T~9{JN3e`mz}l*0i?`a7iF&hVLSHZWbm8Y@W{Y@mV#3IkhONjSZ7jO>-cupo0bIr{c%C z@|8sm>c}C;gdLwHUpj_ut4>~hxN`@eFD|SF(DRFK=<^7bejIsafkJxu-`vJwNiI~% zd;&jRVWbr}DWSipAGpww)VAi26VbLfn*!d@IhK)#pBfL<3>QZ`d_f>A%2HuGhq(}P z_gsG(EF6Fzj}bOTCHx&TJh78b4FnFPepx!wfRM)6wfm}pRN zc{BZ#FaA_i4}Z~alf%RZGS%)=S?AiwdcIqt7^u8zgu{F^>5Sg7M6lQ9Rg-&d5GHve zM2p8fRWUT28>CF0?};JMCU+qu-oGG}3%I;qrZm+bH*M`g-oYg43%qc?seKsRV zot5U|P2hdo-pf4%FrIml3m&;ns(-F=rTdCNmaSP=e#gIMik7Bc$UFG|Nsse3!3TLy zxi%L#>SO=UAVtLW5?~QiEjE1eLCjLi-=zT|NplGlgUF79+C@4JZYBC12>zZIeY0b$ z9_DkO74_BH;N*YtiB9s0zEWtcoRb#^R)|(N^0LhPjA89||FY4M<|QOq4&e~8S(v(k zmcL&9Jpb>j_n8P0rfbJ{4%lE|{pv!y{?k-(k@hn?g<ytg7?gkjIsZufz9W;8QR*#o`L_4{z2>#Z?$VnR!43NXo*yNp-n|B z!>Jt%gS~z{QXcgqMxz?6;b*&9_0%=X{BRNJjj}qY%Ll2$b2Q{Wo}qgBE8RqXiGQW- zfn=P-ALrK08R%W7y(v_iPxC{&J-p#%pDh-yg+Mm&Kmdpf>cd}-C%(B`Cz8r*3^e&V zBnUb?R1NAaRWU7ZK$BkLJo+Z%SE}Cd*NVK;%29WghA$bqqrBfISvX+QAhoBy7NoIN zk}Ddx?o)osFh>~&nb0+AIb4Pu)eMn}Ohpc|Xp^Iq$*U-fyW30~cFe}xChQ({b-H)~ zvCzc{31_R##-};t4H&e^OSG?%M`Dy!^xBi}EU#?BmD5@t_PuSu!ao)L*cQKem2?oO z$fS3aFG()*gc;-2!xPwJ^G5ycNL4Psn0`41t^27X#z@6|*U$J|aJ;h_uQ56!xEe^x1MEzrNBi(&|Jn^mFU*nl7H)yQC!_^<6+~#&EtbfE0KCUvS=~P!!TTUS0Iok>vKwMzo z^+o<^z-FetOx+t)mdb+JyD|SuXzfEXLGL-f=sdb#88_e^V=a8RI&yax583B+gOIvO z9zUb&Eq&WoBr|um_MGDmBLhFSiq_BNR{2WN3PSz@&}F%X6iTO z)MH#AO-*~=9K6%D%{c3Y5$GNS#|4PxAoz=BnhW}#tYJc%3ZI;VW@I$5#&4}7IeB4% zK8OXQq#&3Hs$Kh>Sm*q7eI6bDNKbS6&{*bleSe`&}DV(ur z7aGugk1B}|4X;k%+3LL0tTJ0oblCcLJXE9o(qiLN755D_uN7}%_kW9dT!zwB3@g zZ66Jg(3_;^h`9|h_Wf8VRY^bL7@)Bh*m?mTx&}K&nP+BSbbB6ZC_JaGx~k~uHhHnY z&Rvan6K=hbq<;^r^6y2*V_b+0ZBtV#YEv&hJ|-`TX#?EnoGs4&o43Pn8rC4J&4Eh1 zHS_V8EgSu71k8jqMQF7q$;qQ!P{U;i{mPn_9V_EN?<0Cr;`7L<-}n=4CjlN00j4O196oqy^SdIze8VGO){7TW!i zsscs3-*PRtDukklre?u+_wPS9=2_|)M#PYDZIvE+n8}JyvLb3rQ^);?d^m#-4I#Ar z<*ijfv!Hq@D1?x&-I}SiHo=N& zlr~N4BSc+8wyMoos-(2VGD`AMvof=#mi-D^b|zswf0bWGrKtOW@ExPB%2ZM{c3RQQ zJ7B?)lY|4c++T%o=&9ATfAN2;ky215<91!m$N3j`;|o1N2nOxW8oPJ;Lvp2uTF%j* z3Vqvur}fYwy&~HB=fv-@PNXiq<7`%=_U>sD?GPkJ(N)40vNjfVrI(N8g^m19esidz z&i(0O>~&4nok{{luhs(KN&Zxk2uly%QA!*>LVp z!k<%LWIpOus8zpo?<2FL`-_cxxX+56clM|U33x4Hniu^2jTA;zuaO1tOOxjx=zWHjaYq23@^?m1xs)qtr4Ex1BCAFfw`gZ!NF3US zTgQ}d=B`UF>KoNKu`C2>kA;UOC{#a6FVjTRQNtSzSl|0*D-3egWB`ba-fa{2B9+n$ zJ9+pQvTi~eJ)BnHiZ=w8QJ{xz36YOdrLAt}lSC?Z;0dg(nDhF}y2924547W?Qz=Ir z-Vas+R$Y{*=2VXiZI4p|J6>=ck`0#us_Zf`a0pi{$Y4uGN)Ddf8y)Dy|F_dQC{j0e5-lD> zbe|ZbXS%Okynoa_&_erBkTk5w%rk8bVj+R+}_ghwG6Th*1Pe*iQM(ox5W672Af1{;TUC$)h7_!Bylm; zY$s;K8=P0R4MBpskrKI3IfY*0gBrIBcOo2VV*xpFv_jh(pENLEaVD#nmdkcbG;AEy zr8#I-ETrN-+`g~0d5Ga@o5>O32SL?Pm5@*q^Bk2iZ#}pbo77?wb-*cgRdH*J91LTm zmE$#-1m7e0S_ZCTVzx558T>#?f!LQ}QOoi{jm4(+R4fR9W^aYl{EKndwC zT1f$EC0%n2sFnMH^?-5t-MeN(eWtvSvn@RiF`|Gw{msuaN89MyE6sP6!#hDao8Wr3{-%Bzku87yDp+7Ti zGT)`~0aW-iwwG;H*Tv>^S=X^~kU1)a09BFM?`w7Fj>V(Yk9{3_Ye7t{&RV{3@5X7J z-Jaf?8v+o{R^ioVJ++B-_D&Hp;NAWQW{Yg|k(B1VwU|PsW&Lizpz9q6aON=ZUh2}~ zCd|TSXR#zSn@Fti)w>fvh8G$2GOE#f@ss?GZXy&I_)okX;z97<88u6CIUeMF zy%itAkKk6iXb!t)3f=MkIEL6ztS98CF)p%1nXJ7b<}jMz8n%`TQLX`|mS4bK?Pe(; z235Wk7k^nyqr3>wIy!8mNrv(5hB=!rlm%AX_DV=ruAb#?KgXxemw&!(5pI~R>7rj? zoxc{nNs7@W1)+GujfD#U{hq4lt?5LJKwVD1jPd{IUs@J%~m63b@p{~gd1h!f`G%+k=ybs~IF0{MyNyET| zR(EBcRFx_C(HAJO?6qB^_qwA~dFy66dWUxskDH_F1m2KPv{^-UH+3(q_r*=CHu93| zC-}EBgR%taQ*Erajqfy&YP3bN?!6Tx^3Oi(jU-&^SXPg1DK+zS8pl&x*lSBES)742#VIp z%YBRv`d#4hB0G$31;)b|c3z`njRra?WFi!4uN(%IRmBSX8t zU4Uvkk+9!wkjf zb?tMP)^%;%nYq$g9ruo?fWs7vw6XOZ5TtMDBjMbQPbT9xXYU{Zif(?a5(wuTU4{7$ zo1y;OWjmBs;k|%yMvlpXvT(Up$XG3UMDQ$UbrcI&lEmfVRlGyNxlIu<+g!qB*hO8N zqnmgp4>v^i6v&PlYa^;b?rGZ2J6ju(pg4%$6FF90>x2WntDW~Qa7=FXUYwC(F%;1m z#fb;ONgb-FF}am4;3}#KBcyXXD5}obre1sC`8ho$h3Bti%u-AF2_-3a!dHrcq|Lsw z$o^zgEpl$K5w0Q>gyWPm7z7VDFxg|3lqT@HxMd5l_(v!`Q^!efVtNc8;;j{5AB z_T%I%Bp~=qK$k5|^2);<67SW>Q`-#k)F7&90fH_KQ+zkTko_`<+oSP7%6PZt-6xKQ z`YPTQ#zoHb#IOV-OQ;;Xq|5CbT89gWv|n> z-lSv|o#gE&Hu!e&>b>?3T*?JLMXOig;=M&Q*!T%umMY=cmGqyQ!U8m0&f0UvrZL}8 zTYtIKKFcQpvZ=TXPK&wFU~`~zEaWB5xnJ_O!OvJ1bx+o(x}Zg24(C!T$8IY%;ST%U z`*g?42i@Z~R?XMHH=~%l8aDgmwG1Q{gQ-Fx3^Ao^@l1fk-nTqHE9L!Dkvh!dn`v9=mP&hsp!WnQ=)* zXR}n7*4A?3vk}_CKRp$~_5wBJN*6DN*LQuRJg{LSAQfZS&y_aQ%fIPDUl-z<3EvQ- z!ZNrj&wRQjC|T)Pw=jw>(I%nRBi7Xu3%F#pkz2TnDcxqW-hV%}HLlW%S!Q7AkW)Un z)wkSHuSs~4^HPffCZVWRLm@q!gL;D|bKZj4>Z^|FtU}R3#8!5&;LUj=GI#*8saxg4RGwD8tMP8-T<2x=dhuNjGkq3tsZWcvsLeUNeb*UtDFqxm=!YGgSEBPODHHh*_IiVK`v zV)wjh{R)KyRJ};{15l-PTqjl`?SY6$&gm$*QBIm3q@9Eb-CQvkWu|QN`69S4yrY~N z0cGOG@M>7e2~lUCrcLkfKz^EUrXeM_(WEJVbkML#5~?$)+%V(jyx#8!s7zA#M&eLi zkj}bj@ICeg2JiD?YG{|R+oZ^#d){&SXX5(ZB;I5DZyrZk#IA3AM1Y7?+2R4i1|_}~ zLGxjV`8l#@ld1fwNIX1WOqv&UtKSj*U9Jhr#w8rL3M`Y+s-IqPY4y6pm;R=*YOV;* znsn^{qMo$rt>poK3;g^WQ=OQe?OzirZElfp&Df*1+%K0#IHQ*&;c0nNvQ<=RM;C+- z`lg_?TmW!*weja49Xvwg5r^m^v~Pi((%1Z9?an)nS-jp8e1T8&5~A&R>0ngqo5N~a zH3oPWS)|=V9o}Q|$Ykq4?w~v(5;uK>BZXcdUFJE?F)o&NfC2cb3*o zz`>kjEGg|1G-x4dgM8(qp<(%zUVUQLik?8Ko znN)(>w%*;j8F8hUYT)v`PndN*7b6L2pJb7uF$YEKdvVf7XMrMVvM<9;c*_2pU;SX> z&>ex3pD$kJM7C(orm1&LtFj!yE`J$QZH9bhIWD!~(3jpE5uk32xxcwHd+^+&_X=!d z*2+tKx$M+%$0;Nc>aLfs9Ea@o6p6+k-g#X$^tmNZP0l`-{X(9xD5-U#A#~!y+;Els zWsbews}Bd7(XRU|7|~DZw+iT;4J*2-cME5DkMXaO>p0`L0V{{@yqleFaiyE?bjsud z;D>NSN-oCz>lcXw)07R zD>EXJWd1*=tUjOxAdEE&AajyzV0WLq=y9mh>MYwU6-KaM zdsk;!<9JDsr9uHFV6nFP~BA{7D|tq=kUA*_@M#`A@8A0w2YuH&?JrG60pA_&FUT#9g}6X=;v#we zOZl*)mNt{PDNlh>rq9nwcrO`+{r~JdPoieZFh+E?u2&-5d)J5DDjfDR9*~s$}*#cLe`6|K6Q!nlY>NX@T~dQxwwNfSN2lcEheLW@Bi{i`4wMjMNTaOX2yPEM*R-wjBH{oLU?| z^RR?hTSn)#M545IUPSIcayNEtI4Yp6dGZss@>tPCM$dRUeNe!^NMG}kt>XrT0^q&Bo7O>R-hxf=HzviWtc<%whRw97o5O2kx&a#nUNR3Cef` zDGz5%$nESt0R@yCakye&#-9p*9rzv|qSU$2=@cXEf71FEy>$}BZx_;Nu7p}TN*zfP z$k_iZW^jM8xR@cHzY)>pfiRAORV!wm$*3QazoLJ#t%tJt1Hy+?ms2#`yK!v!U&TO6 zl(_D#YINohO@_IP{kL<%sqec>dGC+nBiX~<8gfd$kEvFAmy%t)Q62g3w+lfkuGQZ) z8y?Gc$?MM1RS{i44iik03xgCpjCb~oYuS}!0LxQQCTvEgdc(7F_GPmNddW`zxy=c& zTB#n@dA?!7;f{wku4Pv#l{IptFfhJLCemG-?AMn5pKb20p%?o!zW2~5y;p0KR2(rm z; zbhMRulwkw$i=XMkYYV_`ukOBhlZtDB4cCmX-&_u4sZ6HbI2gAj0ja`OeYYC@r`7x< z`Yk6jLBHI}H`s{OnXh#|!UO8GZE3@oX9Qh$AcWA-e*3Wbu=Cd6{6AM&{}SA*{tEeu zBxgV_**6C+oC>DnKb{Qb8@Y@|T{MXO!uJmF{e_Fy2meqxe<9{Sl!LmU{T0*IDAMo*?ax+yF@v+3T7x3va?Pq3jbN_Zl7Y$a}ifEa5@8To2t zP02vw;daoykFU?FiKz{d%5$gZzq{wYiCES46&k@q<3seqhGGL_io5>~^AJe@u5v40 z23go!Jy}F#p;rMEwK5cv=NY)^RY!GmabLyXS8rfWRl%yui$x z{{G*>@$7Ktm|Jp!!=YuT@G-~ZoEqdjTET`thv4(}Y0Aqy9k5pGj&&&_46HrespdJE z+$O?fafEGkR|YT9l)#~UgHHf`7_RvEAg!>)YeZsR59GH;e#^R}{H>TdEn~1XTwScq z5tG*BLO{`tClh4n^q?C=EVpvrA<^X0c*T!5I9n^fBa8D(EQT+a9E>sFw%6S3r=<)V zEP|@&#PUe(Dxrp9B3E)}nrJies3$M>GOX>9`{}#!i`mfgFy%|oUxQaAB~;Dr(#J`& zc(b};4Zm6gH*>J%n+pP@F^;PpE0$R2phY=!T}kUf^EL0@Swd4Pwl!0q?NBkyX=@_C zLT&Up!G(uQNqmc&{#Ne(X&p<|RTZ}_+%DlD?LRe097-nJ-{K(*pLC;qZkCGzbGBp2 zP{CrR!Z^hPWVTyN^zs#}Rj{ERR~Tn;LNCHR8w73S$`WVtAF|mce&l(Aot^m)_2cRa zkyI45bMK}b6e*419ckQfbd2vFA@b^&oJ7T}BfP3eXmWXNx2ORft#lPPiF@#M1x8X& zIVM)UzMD+MHZv6~O_Hg8&p1zFmY{HkyN@G;Ogcx0Ef5PR?!pLa_>!luOvZ zWESGvyCRFqXDV5-{0}Pn}!+m zxPB0BGOt%fp9H(*)^;&|_el|XX}hp7lM7KQSj>?;r`{}>p7%>XFfzbkU$fP;#^Pzgy_pI$9 zs_QtX$6cpAxk_nr6m!0hKGh0`O4!dyIKDFi|wIbD_;puYj5vbMXbCGZ<}h{MbEcyiHn9l-r&J^_RQ^=M6;Mc zJj)IL@aj7rdiiIgMa+VBt#){$wc;Fu8tmZKECCx}@YH&tK;iR1D}RsBh*#@1NFOIv z?}o^A_nplJWL1Bu^UM|UT=LfIGYd*@P^Fm353|Hv$?J7qvd~Noz@v6bXq(HHzk&7?{Ev+Fto}+HY zQ!>r|R^hKtx5Y$rsM^;~e?9l0LuV~0=JYX0i3_?WES@ZsnugPID?9U4!kWfjWv`>=PU&G zAQBgOItIiK)io7)V%XnkTR(S3XCeZCVlb%uq5vTel&2c2qCYJ)h6N%!p|k3($RA#I zZG_xboX9lIkBRaA_{P&Q-8MM>9UrAt4kq*XBW%%!QKt`xOgmFhjK>hR0wi;<@%)9~ zL^f1jm||#B{od%4xJHOsQQd_1)V1fL9QtxW<+DhqvYE*>*1mrk(tF$K1BT)mT@^i} zf7E96EF(xI+()t=gbz&?dXhA$tfm((HeKwi7_e?n+wMf^MqoYEu5xJr6Lt1)S_7ZT zU+;DAv6!h3zH2!`RA5B;Sh|WfYq@VPWovD!XvwjM_^&~rBs^XGY8ej9UA{-19Obr?up$L)o}8oAh5euocKHOB5FdI*Ts-{?_8CG<$@c+W%|~SGo^1 zC&6pawvp%_NE_ufsn@m~8U>shm_dw8-?vq8bUF6Jzl(U~P}{Z;-p?n(0fF&&DCcpO zS6>%kBOqnR{pWo%c1Jyxiu1b?>Yq{qe5!s#NSF%l$FH(X%Ke4Sj8vpY9F*oW$-&ls zJKVflU9AB2)_I|_Hb_v6s38gh#C;Qm!{E_ z+jIb^M*hDf8(1!6j9qIICVy=Z^1+PH^8qR4){vgCa`9**3?EphDn0vLw4ub2QihNF z!m{!^m6dkp<6UdA@MS^lYsgOQ+b{-JSp_-P!1XMCO+XjVbLfiLJfVz#<0SfKNtKny-&iJ3ibtNV&$0gj|&+oFzUqvk*## zi{`?BzNp`hrF@`a>gc(P1zX?fe3k5He}U)8$({EroC{t09$!7e_iuH)iLS0Olt4a( z$rT+38b25Py^f3Bh;lKIM5>XueOpk8t-Cm2GrLmbV2meP`(Jzvie@hJ0db$EYnKOb zsr-cB%8;Xd!+*O1_xd8Ayr`YWp^a`%@khG61YAFEuNOKK9HWpMy}tat-)hEg7d_Q$ z5|w3A@i2zS;nj{nJuz=LCr8M@0?C6$MazwFl&q&%*W1Hq7Dnrw(Z>CoRBbKW1^a6G zmNoNM(}z7D%0BT_$c**_wsiHpNjLj`QEmF6)x3$O{lIbCzLy zV!O6sK=|L>J|AH$yD>7y9!-+hGKF76+{;Pq0A{cXR-4_c@lQq34UX~2V?8NnfAp`; zquDl0RkA76SHyyA$b~mHCI#8bXU~<65(^=!Xbt}v~hmKLb8yQ(q zET-_a!#u|34Vi`S_AVof4)7!VH**6Wm(%iA;S~lM!+)dNehS}gcx8hBUzK){M>aGg zM}1U<_?-!~n8M+!x9jXxj+d!fPYwf?1_vyL$Iu>%OUB9Hs+`W#-irmdc8KT|B_np& z-cwsXAJUUy(6AhaV*cat0T-d0S6ujpB935T#=P!gx9c0b7(gWudAAMzfH%%%67sr- z-M8{Wh^Z_(30(ubo{3||jGwUBG@o$7xu|6kIlTj9T)TE4ZWi%OD20g!(ly5#t@fRK zfPj?ti#9Y2!gtQ5sr9byfOm`CWTH#~Gv8sJ+q39oH%CN}-eun>)_7nN)#>Y>GJSO$ zA%8^$?s?+W2Km9Rd#(7Vutwz6oy&miiEaXPR=UvJsFxzJWA;u{ zQ*SrqypRxx3St?i{+bP6@_|!&nZP@q7oFTsdN|5Eh07qmz*r4Fy0u##xsBhZUQi;B zq#Q}CkbT(l@o3KgoD?#zs40I}aXVfG+3+%pTogB*@c`3}y3n3azUw=4Vveg%G_R}j zMN1T&7B+Z&$8p(gbUUZ3$6>qLi7}#y{5I>**bSkMe9D7 zz(_@TI0Ct*TJNV|n=QaX6uOCjDhTyDsa&iMM!|u$y6Rgr=OQZaL`=;USPh!%>dRLg zvs=6SRtd0x`q2{p2@?T7W{<7%LU|8M4u-)OAZ08bA=E3W_j(FQ>|%8^EL(wH1Pp;Y z(L^&cL0&leWOm}7s({2k-J!EXJnksRFe<#%?1lw;a{2q}=&C>p`tvs`^MOjpU}R`2 z9tGarqHS0Wm8VX7b``&-F5%Dum;(YWP${K+!X~W-dJ9WgYZr+gDZb&5tv5n0U zRL=i9mcg9BajQiP32EP#nWR#{#TS(?2h7&I5Sn=q87G~@ey`iQCauO=envWWW3y^+ z1p10tPtclJu+!8kdTX9xnkn}a#<}dC=R0a&e`{}FcJHU^ND=f2&Zd&ZuNsENYX+5T ztVk0Oji(n}>y`v4u94aeNDTTusuE9c6KFi%dO*sU$i0})lLOwI3yL|4$Z@u3U<8Vm zI0lkLLko$JCrtZK1bj=}6sC zI@eq8^S9BSKflx(j>GZQ&{rv3OX2GcC#fYpSD~;1}233ZcIdHN8r;o z11MVw5Fa1lUeeyRkHLWeKk#Ia7TTAnMXBuX4D_tWXp@m8{$o21?M?+B7Mfzvw-T#DjxqT8O za|>+Ln2NUiAW`}t8<*u8ilRZ8Ht^=$Qkr_?7oJ=<-q#&QKvQU8?lHORNKFOj+cZdrz>>g_UAx~)P0(TWISPb)_ZD~Z@=^u9&@S*nr zvLt6SX+(jod?7SA11f&J587M^`U1jm z^%?YaQ3e5a#G7Svd7Hf2}cgcgRSt7{jm*xrV(Yp)Nq_?wtv66O*WAq0$Iy z3ZF6WjayBso2oZM$IO!VdS1|)Ncy%GCR_>3iqx<&SxUJi7k_{B9+hUjgFj?Kkc6jyQS7liv zmIrLqLiK#~@=RNDd~?SOBW9c|3-EAGI6Fd}f#mHAw@+^WRv49Rx^l|9@!5j^?&V5< z$THAD9U7X_-smIhoEJNt3j;@GD2xpmExSXBpTrZI#%#OQ_PO8*%P<`mkYDQSoTKZ2 zmjRtD-$J!2NbSP=Fz`Lc1Fr_D3TSx}MHH7zY1nt$2JrwVd%eaG+Lh(B*NkXg%nhD$ zf6y+0Y2_)Hi0X-SMjxxkk5Q>GXU7E3dn@)j$Uwknt@BXHJm<2_^+|D77b+z zf=7q(@#q=zt2R?RSY9;e^*F&+moJ9gN!|uF-!U_0b+=@)sXf~~c|gzFtRJK6Mtg#| zVRSZNK57Riu@zeQv~Jp9goQWF>f+7e@2|Mn#Y;^Nn1sE3C2h#utFI;h5?)iHQq?x@ zc-1gr`srpv*XGFGInQR)k6DTya!D3a zI2+fVusH4zL*`XJE-ZU_bD z*GbQovdrF5rZN_^zi*GlvVGCnpPa9j`|bBSucssP=89uKl zL&`0Rk)E#Hr?OQLv>9h&f(6DrJ6h**M$ru&6;2JZjI4`Z#;3^sMgrv$*VN*Zl%!H7 za;~P!E+GzIgd+^j3CW=!pXy*ji#+E7OEyeu;aZuvCbqTz*UOjn`K)ZlW?CP~D0zsB zAZ~exGZjjRdy=Ekv7U{7Jg_>%nf$&a!M!OpZg%QB${!wG$BK)=PV#bQyz-Uz|Bm6D z1Etg;8Vfi#s9bE+2Xtoa>iw+mF^gm#>8EuZIF?N+cZm}+Uol`#My!00%q1~zy2I~~ zkZCq0irIkAgV%E|P_4EW2E*7a{Wp%q5l-F?L$uFBu7`W_8H}M}Q$AqOs(Cl2j+Wj$ zIg4kZQTSe=wm673nd_crSE%M%s&hr)q;Ffk+Ta{54Bb;v@q2NU%@aRYScm?r#b=>& z4Bs9+gWI}U2WOKWbHC)qMP-PTz#PU2pJHF$Nrznk& zn?ao+5b6T=eDYejexBO0cuTzvEsijj#$(7te*nw-;%hs)tQzjQcFy8_|-ePz_}% zbb4CXd}f#ocPc}C>Ci{J@(AeDG$t_eNIz~yt7fD)S=T6b`Oln!_W52nDM8gXD2`pab7U2dOzH(_y1IoM31!{AbBI%giP>vrj&Swe_ z^@fCTxJiRwNfr4SI_V(?sN9i=WZm7GrQyu+RdS?uw6I0l`D)`TEP&g72PinLg#g@RQtH7=?}kdIos%+=2LNR zpT<_F~SW`^Nj}~SQK=aH^Xr%O84xJ zs;w!d#xYY6Tlh_Cxq90W+?&`mxz6;&ed}`cqf9a+c!Tpxv7r?+xYuwl7CJB#I0V#R zP(@hj{8O=CWRa+#cdE`kbSqb$c8p0bm}}Rt>6C@Ag8$H3J-3$aK^K!?5R8=ScG^+I z5LV0f=Sx01Vh%(GV~eBF(wj+6bs&vJk%op1lnavXX30iJfDt8KhZwPRo?X8AC;M)A zIARD@f+lWs0=4#j5no7kCfsBrvYC11NptxmKhDLCm)6HJH~q9893G}7G;sKWH7N$1 zgWc#XI~)S|*Io&RjgUx6QNO?EMtA$>tOinmvN=HZ`-Ss8)f}+a+TH2nm(Of5S<5jV zt5<9_{20aYU}gX`b9GAFZ|L$<@2Vf$5X!t82cWj*hker7#Quu!%86(3PURZ)Q5evI+ z=uR&AnL)&d*}PdHnQkHtFg2Dv82`V1QbmRM5&6jS9+Xa5Qg%9n4S@~@VWWZ2Zyi~s zqj7Zft*wCoG%(_`8A#UzjWg-^hrYa}kE` zvuXPH%hzc5oGbc^Q!-p=FfK#s1OM_c@0eC0yez6Odcul~zpoIOjiMlt0O5`Lr9};~ z3r_J2cqd1BT{%9Iy(DmoK682%{lkLS?wi>oQ0?uBL%n(ic-T*oD#asXr);cm`#B6+ z{AFrgubx(ZzZzY{DR=96(nT~m4!;RI9J|VL+Yf}Ak?JZvneuBn*AS9sY|BXI7<@gH zsZpFew(nQw$xu>fPWsR6z=&x*oEdlaXqu&RdPg69oRzrz!Y!%}wuv{g;TU(`Y6RDhB#QAD8OTlm?X%mAW{i`c@4Kz^nqHp3srM;aMZs z>ZahQ-qC(nF}XyROXZN53UuJa;Qga)+K6IAg_?0fYl|7-1JEbKkW^y6bdiBm3Rg1Y z6Fd#&R;SeVJEs`4vL~Df9!zOcazg*QB$ZC@RSW@=C-hRU+v)T*BvH`Q=k8%MU8PlM zFlny^(l$EPf!V;ZJqpbf_WMVFnQK79S*Jzzfn`f+r+(;NzK;{pA7o5cH~KCmKo%m( zZnSLmP8FSaD&)M$3iU%eqRGoYxu}%ch4JH=)ySv0vRmi7nDH$b4{bcR&7F#>S!e0( z!R@40wv^MEdkA-#9i2F7``xT$QB4+f$kKRb^|uK@CNf45{}>QgpqnzvH}`&%aR{j!ZbEc>0swu z;ufQys4wRS3G1{ldL$9eyWC)$>h5GEDl@LL{|^-X2u|Sw4=LOLjQ-4K^!AA=$7;c| zCNb!)jqyWZtW$17ATghyn+vAg&zWiAJu|gdnu`hCNiz}8?4}J?kT>{N-jWSeb!cGl zb}y8QG&P{>>}}r6%8Zj^$>OvJ&uxkPx6f4Ms z;{?ngA`Kuj|H*mb+f zboFhiSZ(4F<;2HzYdWCGoy47ZV&5<|!)p}pocB!G=o)=x^om=0zZF{HP&Cdq_ma%H zcTTMs6k%m0guGhO8%!Nl)^y4Swp-19WA)V|z+r0kss18e$eWD=?$n;Zwuq2h)077iT&2*!}IT z3Ee_&Rp-e+lTtq*NjF`#_!#-JbC#%YClkRW$DfL!+dg5gz_&_~Q>jK$b+5cw4ZwPJ z)3;x}E$2F(+;feF)CR$^&@P~qHK%m_=!lTZq@_jTO@1>zV1gmZ-AR6PGJVdw=21R* z9{LDD{18GW)fzmn7Q0Ba6yL5{@3|tSHHbg$Q#%~f3zVV-Bh(lkbSV$CJO7~?t06(@ z*ydmTv(uRqR1^>JOw$~>)ld)EWvh2%vt<387uJ7Z?0|*#nHsh%qiFY!Kulv-5-K$Z z_>(#{$>%10Y_5T)b5`-unsNT`T<1cX?@C%8&GlaXMS7`Du+v8xUJ68vaL7s?CXN!E zu$14ZINfSNovnmlhcnz)K3NQ6?C`-J{~M!ftVy_MNu7kK z2SzG_{1NDi`?>bCDYuVuIqeyTWyrMMYha+{SfC_E2|NL@Hpt?6O=v%LI+=k-9laIf zpc4q@3sdW#`51-BAaq4@G!MHja`-D)4&5szd*$Ee3#5*yVcV-mINe|U9>QBEFfG9D zM_{Yh#uB9Gqt!BB(Gm7X)_*FT8wNzgO?Mi9@G0yi3h~RrMW$w%uS>JV7LFRtu9b)H z4Rtn~2vZkTaSlDkKdLDNsW}}qFJSTmi9Xuni`yr%(YJBmE3Qr90ZssjzX(6)u?-iz zBw5-lijbIA?x@@9tCrBOwWb%pb02u8c75$mwh&R7?_R>>k+89-2mk|euS|1K66i_T zNO)U&*d#uS3e&~aQD*+O2#1cTFd z^zG}L9e=|@&WQX@Z1j)cgb*$xtm`eh%V4e7qFmiJjd zamQ3$%}rq4Q|K9Q@)9>zvQLC_tT}Xt@jktLr?yC;^%gQC)eCff zk>K?0CfgrYm)Wi@qaAIk1=FCi@8Pn%QN1)!zOYDCkxN4r`8UVr5n9{QY!!}@fj$9g zPk)6(AC)9sKr<_*E`NI~ILZD49W%#ZX_ZcQHW#SGdxh)DgOd?G6IVf7*lwl*pGlGL z3CoD~5t#v``)tl~q8$PzxS9!F6yqU(x3k|G?59LwpcpV~Cp*b6UVSm3 zDxmT~*F#qiCfqLaX6m0Mki-KkoW3~(Bcsx>+P|_iHtiL?B?(FdK0lKmk6=#oY{pE} z+N3-fB{mWXdVF?7dSWaab9k2A0IV zioD1;EMm-~2zK*&X=)9d-Ov@G)ZH9j8OFe_NNOojKWrx(S$spwWBP?k^9{MJ=zC<7 z4UhBQQS_V<;bxDep=YxEvfEJe+|4VWRgq_#T5AFQ+_8A;05aYPy5ZD6bQ^J3+}2p> zJO*EE_Q-Yw?gvf8movx3Owt|8+o^*_r(2Rjcp3$l|?5PIX!$pH^C+bBUjQ8fnILJ5i!hX0n z&=OvgB}SGZUTqi6r$={ML1d}VQvRGElJK*XypKGb-iXHN!5O(tkt56etNqbOL|~Av z-9`Thfw{$Vt35Wcko;oI9G4*Jr+iOL5@K3Z&$Q(MA_McwP@9YIT1XM*{Xdq@KA`5i z|Nnl>=wXM-tQI}52O(KmV zES>GbLUM`{MdzCCDAkKh9x2UaE9;1f(7Byna$}G)tz81?dWv|PA#^MCV*K0Obju=%BoZyG)}E z$SG&k(U>>>+xbf?4leMdYhd`V{{*uUmgiIN zly6wAl<1>ri}bX1;v}7{6=FZ`604|gEGmYgJtc?9Q=l=3zQ5{yQv7gsQ8S&9mUD0n zL-kKo2zwJzw$vkH@Qce7VcxUP>}+i&P7oI@aMU5oF937fYC-}h&`RbeepEJ7shOL} z8ITmrwRzILb!+uDI}mD`Q2U1}U&=bN{V)1__2q<{yA(ydK4wfU8DL1Q;hN@^3?$|I zK(kpX)Rq#IG**{fDHAnL=M5=*;PIdlwAVkJUg@wPXEvZwH?NYf3DjUc6LSP{?Fwsp zqS^5wjN08uOn;2*UjLpRx&K*l0pv?m>{xBVY+#Lu9!N)8&w-KsW^ctlcW$|#W49y; zK|UGKVK0;#M%}xVN z?M&+(^G4it;SRnRxvM|>*um|3T*mowoGop4IGN7qHBHO5V-KE6VRe^Hn>Q&G zIEZ$55VF2;VCW z3wGJ>XL`Q&deqZT2|YZm5*=zuq?&$x>^UP8B0>v}owiLoy5ag2%tROpsowYFejd(AIFAPedKk^xRiuv0gFB}njT8P(U!M@3-*EQBSD_zxR@b|ig%CBQnSQwn4Q4nzATMLQjX!k!p-(30Yj~!l!(f6R?o)UiS7^esXEvyIjs>N2?~5@ zye&+jHP9myq;g<1W0=}lUSlOqp^e=>L&BWK# z!EA&2BgW>YTSb&J0mN^XOJ+|LVr=!I=9>>J9l}ept?7;D_=uZ{W^}eDLwRg&p%Xl! zYc}s}5emR(Aju~YvV_;fc~(ce!CHA;erB-zf+Wi)h^nI4?;=oMqwh@0iUi)&NWN%4o=XE+UaTh4S{C4eNH+zHK8s5{}=Bt%I zJ2{CW&-Wc1d*zu--Rp?)4)0FVT(Vc7)T0xsK@D&PjNRrkqRWUUojvQvqBd_~SX3!u zjwa0dsmX3aQCaUhUD%llK6WLf?!>W4H!Q)3UMVShb2EY)2`D359-k}>PH-&@kUvK% ztF*Un^sC}nzf3wD1RF<8!v_#v=G^ew@`ieA$KM%4g&$ z)qe9viRq32CMbHS@6*;UyuF@Ey!ITCxokOct362N@70MBB4_ogT#S?ai{#IMgU_k_ z*$Hu7N{FcyLE)ti^&vdfi~@bdu6Czh`&4avQ4&f}YJpUDeyf@{z~&S2Y=V6D?J+%# zdo|tNLvvl)E|Qr{9sIT7kQ0A7UGe2OO*;Yf-VFxbd6nawTAGpb3kLEg;?0Y zaYC=HWzjk3;A>GnbJKl~#kh={1Z+6BF!+#1)fg3*<1V#V%25>~CqVsu%}j=chfs9T z)jRUP)gqX=X9bV0ZU-C6`M?8grE<|3_P*&WCoH6u|2hxa0ExujOa^V3SVXO5*nHSC zgra#dYM{fCzWgzuuKEfQFY789Al2ADCPC#&W%?1y0KvgNPm!R$Y9FPnbFwqH6cK*lhi16zW{B z+-NvDfFUPz`b$p&s*E-5Gh40pQq{8jr%FyqYLYy32U%EZB5S>RXu=<=sVs@ZEw;Ia zCiX$%(sinUs}sN62lz01YOevdGJd{N{zKJDlk!_tfJ@ceF7^}QJq}V9)8{!glkq{( zg)~t_w+su;e>!#GbI-FI=0zo@m1ZcHJo2JDPhTOu$&iuA6AC}Zr-x=Z*ImDxO0W=& zK+#8yN#m?uQd6%&lwSBG@!V7ymC6GYl)DPcdxSoVY9yV)&{N1S3CnGhP>-`47S_=`ONbs6-j;%~M^Y3>w*gVT#OwHB1QEv?|Ue z6V@VVzex#^4UbRR<|(wqR0t{vET%Qt zQ-|dGDW_hj7wONBu%Kcdt2>0U{SoZpGkY2n&_qTR;evj0*bU$I9{)VfuiW#fL6O6_ z(WCVp@0_uxz-4gTTFKRVbVyIcgq9dZNNpF66asFjBohny1y6NViUhi5xpzvA@0!!VX#VIDu#6v0tm*?U(%CbIsW9jyg(2vgR6JA* zChN?TeJ;2j-=!>=rt|2wob(O4>a|b|t8@(8)P3%VkbhP79zf`7o%7W9`2s3iwGCWY zs@zP^Do{Cw-iA0~ws08f8f0pU5&8=EE4SmH@!@q5Kevka&_?=CI^gO18Mia%PEYsf zW_4KX9**gZu5+c}HS7A55SZNd51!$z;UtaM)qrrm%<)is8Pf=QTjd2M^|sD3_I4hu z&O)-c$F(;zZZvo(8uA}6H8#!h&gvIe>cltV?TrK(nz?cDHn!&8EX@d6x0memq@PL? zmaNMqYWW!JzYX-PeEmDKyw+g-vi9 zVe+D64_4AEQim2cls=@#A`8L+WRjtSXP{leP^d{Tih=wVA;O9@i%+0_a#1j^StlQz z#q1*IbF*N>9`p`Mlw0q@fOA+iXG-h!Sm=Hl*rdEtI$;G`0{rm!MV|U zb^T9$X%zxFB97Iq+6TNEr;+&a@SDQaHTE%AtLg`*j_Snxjv630cYsl<#X1=_!9994UXmu24jxW!oW=Efkiy)C}?W>WBSP6;; z(&Y0PFV1hu`yv&DM#zK5-<@JE)$6)gu6Es2*PXt>_V@n3kV#_5$h)B>ZVv>8O&FKL zNgR;8x${;6vbwoJb;X@=ZBsmK#8~&tvHn8}%e?H*9i$](=m2Z7+0cs{meTFLmE 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 V3$m(2*{I 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∾&J(Vv1S3=)ql^3L*$OJja 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