From 91d50bb138826f9843d17b9c6166510889fb58dd Mon Sep 17 00:00:00 2001 From: macbook Date: Sun, 23 Feb 2025 01:34:05 -0300 Subject: [PATCH 1/5] Inserido e modificado os arquivos SYNCSHEETS --- skeleton/src/Controller/.gitignore | 1 + .../src/Controller/WriteSheetsController.php | 4 +- skeleton/src/Controller/syncController.php | 33 ++++++++++++++ skeleton/src/Service/GoogleSheetsService.php | 8 ++-- skeleton/src/Service/WriteSheetsService.php | 44 +++++++++++++++++++ 5 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 skeleton/src/Controller/syncController.php diff --git a/skeleton/src/Controller/.gitignore b/skeleton/src/Controller/.gitignore index e69de29..42cd73d 100644 --- a/skeleton/src/Controller/.gitignore +++ b/skeleton/src/Controller/.gitignore @@ -0,0 +1 @@ +/vendor/ \ No newline at end of file diff --git a/skeleton/src/Controller/WriteSheetsController.php b/skeleton/src/Controller/WriteSheetsController.php index 367fbff..de04eea 100644 --- a/skeleton/src/Controller/WriteSheetsController.php +++ b/skeleton/src/Controller/WriteSheetsController.php @@ -12,6 +12,7 @@ class WriteSheetsController extends AbstractController #[Route('/write-sheet/{sheetIdB}', name:'write_sheets')] public function escreverPlanilha(WriteSheetsService $writeSheetsService, string $sheetIdB): Response { + $credentialsPath = $_ENV['GOOGLE_AUTH_CONFIG']; $writeSheetsService->configureClient($credentialsPath, $sheetIdB); @@ -25,4 +26,5 @@ public function escreverPlanilha(WriteSheetsService $writeSheetsService, string return new Response("Dados adicionados à planilha: " . $sheetIdB); } -} \ No newline at end of file +} + diff --git a/skeleton/src/Controller/syncController.php b/skeleton/src/Controller/syncController.php new file mode 100644 index 0000000..96f5fd1 --- /dev/null +++ b/skeleton/src/Controller/syncController.php @@ -0,0 +1,33 @@ +getSheetData($sheetId, "A1:C100"); + + $dadosEstruturados = $writeSheetsService->estruturarDados($result); + + $writeSheetsService->configureClient($credentialsPath, $sheetIdB); + $writeSheetsService->appendData("A1:AH100", $dadosEstruturados); + + return new Response("Dados organizados e escritos na planilha B!"); + } +} \ No newline at end of file diff --git a/skeleton/src/Service/GoogleSheetsService.php b/skeleton/src/Service/GoogleSheetsService.php index 28c34c1..6f42f2b 100644 --- a/skeleton/src/Service/GoogleSheetsService.php +++ b/skeleton/src/Service/GoogleSheetsService.php @@ -6,12 +6,12 @@ class GoogleSheetsService { - public function getSheetData(string $sheetId, string $sheetName): array + public function getSheetData(string $sheetId): array { // link da tabela que iremos extrair os dados. Pegamos seu ID $url = "https://docs.google.com/spreadsheets/d/{$sheetId}/gviz/tq?tqx=out:json"; - // aqui pegamos os dados da tabela através da função file_get_contents. Da url passada + $response = file_get_contents($url); // removendo prefixos extras add pelo Google @@ -20,13 +20,13 @@ public function getSheetData(string $sheetId, string $sheetName): array // usamos json_decode para transformar o arquivo json obtido, em um array $data = json_decode($response, true); - // exceção para não gerar um erro caso a planilha esteja vazia + if (!isset($data['table']['rows'])) { throw new Exception("A planilha está vazia"); } - // processa e organiza os dados em forma de tabela + $result = []; foreach ($data['table']['rows'] as $row) { diff --git a/skeleton/src/Service/WriteSheetsService.php b/skeleton/src/Service/WriteSheetsService.php index f118e54..86d1157 100644 --- a/skeleton/src/Service/WriteSheetsService.php +++ b/skeleton/src/Service/WriteSheetsService.php @@ -39,5 +39,49 @@ public function appendData(string $range, array $values): void $body, $params ); + + } + + public function estruturarDados(array $result): array + { + $dadosEstruturados = []; + + $bombeiros = []; + + foreach ($result as $linha) + { + $nome = $linha[0] ?? ''; + $dia = (int) $linha[1] ?? 0; + $turno = $linha[2] ?? ''; + + if (!$nome || !$dia || !$turno) + { + continue; + } + + if (!isset($bombeiros[$nome])) + { + $bombeiros[$nome] = array_fill(0, 32, ""); + $bombeiros[$nome][0] = $nome; + } + + $mapeamentoTurno = match ($turno) + { + "Integral" => "I", + "Diurno" => "D", + "Noturno" => "N", + default => "", + }; + + $coluna = $dia + 2; + $bombeiros[$nome][$coluna] = $mapeamentoTurno; + } + + foreach ($bombeiros as $linha) + { + $dadosEstruturados[] = $linha; + } + + return $dadosEstruturados; } } From eade73d0c2e602a5ae6f38828f40f7e69e22c81f Mon Sep 17 00:00:00 2001 From: macbook Date: Tue, 25 Feb 2025 22:24:22 -0300 Subject: [PATCH 2/5] =?UTF-8?q?Criado=20o=20Controller=20sync-sheets,=20in?= =?UTF-8?q?serido=20fun=C3=A7=C3=A3o=20para=20estruturar=20dados,=20dentro?= =?UTF-8?q?=20do=20Service.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Controller/WriteSheetsController.php | 4 +- skeleton/src/Controller/sheetController.php | 5 +- skeleton/src/Controller/syncController.php | 6 +-- skeleton/src/Service/GoogleSheetsService.php | 1 - skeleton/src/Service/WriteSheetsService.php | 52 ++++++++++--------- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/skeleton/src/Controller/WriteSheetsController.php b/skeleton/src/Controller/WriteSheetsController.php index de04eea..ffa81a3 100644 --- a/skeleton/src/Controller/WriteSheetsController.php +++ b/skeleton/src/Controller/WriteSheetsController.php @@ -18,11 +18,11 @@ public function escreverPlanilha(WriteSheetsService $writeSheetsService, string $writeSheetsService->configureClient($credentialsPath, $sheetIdB); $dados = [ - ['vlr1', 'vlr2', 'vlr3', 'vlr4'] + ['teste', 'teste', 'teste', 'teste'] ]; - $writeSheetsService->appendData('D14:H14', $dados); + $writeSheetsService->appendData('D13:L13', $dados); return new Response("Dados adicionados à planilha: " . $sheetIdB); } diff --git a/skeleton/src/Controller/sheetController.php b/skeleton/src/Controller/sheetController.php index f45a9f4..6b18aaa 100644 --- a/skeleton/src/Controller/sheetController.php +++ b/skeleton/src/Controller/sheetController.php @@ -23,8 +23,9 @@ public function getSheetsData(string $sheetId): JsonResponse // inserir nome se necessário $sheetName = ''; - $data = $this->googleSheetsService->getSheetData($sheetId, $sheetName); + $result = $this->googleSheetsService->getSheetData($sheetId, $sheetName); + + return $this->json($result); - return $this->json($data); } } \ No newline at end of file diff --git a/skeleton/src/Controller/syncController.php b/skeleton/src/Controller/syncController.php index 96f5fd1..f86cab5 100644 --- a/skeleton/src/Controller/syncController.php +++ b/skeleton/src/Controller/syncController.php @@ -21,12 +21,12 @@ public function sincroPlanilhas( $credentialsPath = $_ENV['GOOGLE_AUTH_CONFIG']; - $result = $googleSheetsService->getSheetData($sheetId, "A1:C100"); - + $result = $googleSheetsService->getSheetData($sheetId, "A1:C100"); + $dadosEstruturados = $writeSheetsService->estruturarDados($result); $writeSheetsService->configureClient($credentialsPath, $sheetIdB); - $writeSheetsService->appendData("A1:AH100", $dadosEstruturados); + $writeSheetsService->appendData("A13:AH13", $dadosEstruturados); return new Response("Dados organizados e escritos na planilha B!"); } diff --git a/skeleton/src/Service/GoogleSheetsService.php b/skeleton/src/Service/GoogleSheetsService.php index 6f42f2b..e86193e 100644 --- a/skeleton/src/Service/GoogleSheetsService.php +++ b/skeleton/src/Service/GoogleSheetsService.php @@ -25,7 +25,6 @@ public function getSheetData(string $sheetId): array { throw new Exception("A planilha está vazia"); } - $result = []; foreach ($data['table']['rows'] as $row) diff --git a/skeleton/src/Service/WriteSheetsService.php b/skeleton/src/Service/WriteSheetsService.php index 86d1157..a3c5d80 100644 --- a/skeleton/src/Service/WriteSheetsService.php +++ b/skeleton/src/Service/WriteSheetsService.php @@ -45,43 +45,47 @@ public function appendData(string $range, array $values): void public function estruturarDados(array $result): array { $dadosEstruturados = []; - $bombeiros = []; - foreach ($result as $linha) - { - $nome = $linha[0] ?? ''; - $dia = (int) $linha[1] ?? 0; - $turno = $linha[2] ?? ''; + foreach ($result as $linha) + { + $nome = $linha[1] ?? ''; - if (!$nome || !$dia || !$turno) - { - continue; + if (!$nome) { + continue; } - if (!isset($bombeiros[$nome])) - { - $bombeiros[$nome] = array_fill(0, 32, ""); - $bombeiros[$nome][0] = $nome; + // criamos o array caso esse não existir ainda + if (!isset($bombeiros[$nome])) { + $bombeiros[$nome] = array_fill(0, 32, ""); + $bombeiros[$nome][0] = $nome; } - $mapeamentoTurno = match ($turno) - { - "Integral" => "I", - "Diurno" => "D", - "Noturno" => "N", - default => "", - }; + // procura os turnos + for ($dia = 1; $dia <= 31; $dia++) { + $indiceTurno = $dia + 1; // começa no 2 por conta da estrutura da tabela final + + if (isset($linha[$indiceTurno]) && !empty($linha[$indiceTurno])) { + $turno = $linha[$indiceTurno]; + + $mapeamentoTurno = match ($turno) { + "Integral" => "I", + "Diurno" => "D", + "Noturno" => "N", + default => "", + }; - $coluna = $dia + 2; - $bombeiros[$nome][$coluna] = $mapeamentoTurno; + $bombeiros[$nome][$dia] = $mapeamentoTurno; + } + } } - foreach ($bombeiros as $linha) - { + // array associativo em lista de array + foreach ($bombeiros as $linha) { $dadosEstruturados[] = $linha; } return $dadosEstruturados; } + } From 5d4b74bb53050d2ecff21b359e486b49995d12d2 Mon Sep 17 00:00:00 2001 From: macbook Date: Wed, 26 Feb 2025 21:19:48 -0300 Subject: [PATCH 3/5] Criado um frontend inicial para o nosso projeto --- skeleton/composer.json | 6 +- skeleton/composer.lock | 496 ++++++++++++++++++- skeleton/config/bundles.php | 2 + skeleton/config/packages/twig.yaml | 6 + skeleton/public/images/bombeiro-150.png | Bin 0 -> 45257 bytes skeleton/public/style/home.css | 73 +++ skeleton/src/Controller/sheetController.php | 2 +- skeleton/src/Controller/syncController.php | 50 +- skeleton/src/Service/GoogleSheetsService.php | 2 +- skeleton/symfony.lock | 16 + skeleton/templates/base.html.twig | 16 + skeleton/templates/home.html.twig | 45 ++ 12 files changed, 693 insertions(+), 21 deletions(-) create mode 100644 skeleton/config/packages/twig.yaml create mode 100644 skeleton/public/images/bombeiro-150.png create mode 100644 skeleton/public/style/home.css create mode 100644 skeleton/templates/base.html.twig create mode 100644 skeleton/templates/home.html.twig diff --git a/skeleton/composer.json b/skeleton/composer.json index b4d1e98..4b7d330 100644 --- a/skeleton/composer.json +++ b/skeleton/composer.json @@ -8,12 +8,16 @@ "ext-ctype": "*", "ext-iconv": "*", "google/apiclient": "^2.18", + "symfony/asset": "7.2.*", "symfony/console": "7.2.*", "symfony/dotenv": "7.2.*", "symfony/flex": "^2", "symfony/framework-bundle": "7.2.*", "symfony/runtime": "7.2.*", - "symfony/yaml": "7.2.*" + "symfony/twig-bundle": "7.2.*", + "symfony/yaml": "7.2.*", + "twig/extra-bundle": "^2.12|^3.0", + "twig/twig": "^2.12|^3.0" }, "config": { "allow-plugins": { diff --git a/skeleton/composer.lock b/skeleton/composer.lock index 11ce493..90477ea 100644 --- a/skeleton/composer.lock +++ b/skeleton/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "aac3672b4910405800635913d4753816", + "content-hash": "9f525314ff224889db7547c2f59add6f", "packages": [ { "name": "firebase/php-jwt", @@ -1304,6 +1304,75 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "symfony/asset", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/asset.git", + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/asset/zipball/cb926cd59fefa1f9b4900b3695f0f846797ba5c0", + "reference": "cb926cd59fefa1f9b4900b3695f0f846797ba5c0", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/http-foundation": "<6.4" + }, + "require-dev": { + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/asset/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:15:23+00:00" + }, { "name": "symfony/cache", "version": "v7.2.3", @@ -3283,6 +3352,278 @@ ], "time": "2024-11-13T13:31:26+00:00" }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v7.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "45c00afd4c9accf00a91215067c2858e5a9a3c4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/45c00afd4c9accf00a91215067c2858e5a9a3c4e", + "reference": "45c00afd4c9accf00a91215067c2858e5a9a3c4e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.12" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.2.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-02-14T14:27:24+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/cd2be4563afaef5285bb6e0a06c5445e644a5c01", + "reference": "cd2be4563afaef5285bb6e0a06c5445e644a5c01", + "shasum": "" + }, + "require": { + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.12" + }, + "conflict": { + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a tight integration of Twig into the Symfony full-stack framework", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-23T08:11:15+00:00" + }, { "name": "symfony/var-dumper", "version": "v7.2.3", @@ -3513,6 +3854,159 @@ } ], "time": "2025-01-07T12:55:42+00:00" + }, + { + "name": "twig/extra-bundle", + "version": "v3.20.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/twig-extra-bundle.git", + "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9df5e1dbb6a68c0665ae5603f6f2c20815647876", + "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "twig/twig": "^3.2|^4.0" + }, + "require-dev": { + "league/commonmark": "^1.0|^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "twig/cache-extra": "^3.0", + "twig/cssinliner-extra": "^3.0", + "twig/html-extra": "^3.0", + "twig/inky-extra": "^3.0", + "twig/intl-extra": "^3.0", + "twig/markdown-extra": "^3.0", + "twig/string-extra": "^3.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Twig\\Extra\\TwigExtraBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Symfony bundle for extra Twig extensions", + "homepage": "https://twig.symfony.com", + "keywords": [ + "bundle", + "extra", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.20.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-02-08T09:47:15+00:00" + }, + { + "name": "twig/twig", + "version": "v3.20.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3468920399451a384bef53cf7996965f7cd40183" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", + "reference": "3468920399451a384bef53cf7996965f7cd40183", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.20.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-02-13T08:34:43+00:00" } ], "packages-dev": [], diff --git a/skeleton/config/bundles.php b/skeleton/config/bundles.php index 49d3fb6..4ce0d70 100644 --- a/skeleton/config/bundles.php +++ b/skeleton/config/bundles.php @@ -2,4 +2,6 @@ return [ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], ]; diff --git a/skeleton/config/packages/twig.yaml b/skeleton/config/packages/twig.yaml new file mode 100644 index 0000000..3f795d9 --- /dev/null +++ b/skeleton/config/packages/twig.yaml @@ -0,0 +1,6 @@ +twig: + file_name_pattern: '*.twig' + +when@test: + twig: + strict_variables: true diff --git a/skeleton/public/images/bombeiro-150.png b/skeleton/public/images/bombeiro-150.png new file mode 100644 index 0000000000000000000000000000000000000000..1270b9e8e65b062315a8cb35c4de3c1f0dfc713b GIT binary patch literal 45257 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�UQGchJoo;=71OPZ13^dQj)0uB#bjZi1rpsANpe zUCP9^1Xxz8Kc=iLo?_wPqez|;k}`AEv#r3)3goV;Vy$JlUBi$~?`NvWM8DRJkg@e@ z8J5OLz;i6O`Y^3p17{W~@4Odpp+3gd)jHxz`wV3#4pXW7S(=O?9!vx-C_a?9vP4D! z2?3{ub8#r3;$m6mA@flHq_U;dWR1;lBY4N?`b&|kFQZhWC`%B}WY5zlus`nu##1`t zb07Z(i;E-f`0i^sb!Lgr{{6>!`>($W$=l}xMsCuv^>w~;|C8MI`G`ndo|YJ%>+Xzc%S9r>5BQ(pMon44g+Tt7i|;K-gGj zxIUmbeTwkV6Xb&d5(1r|I14!M>T|#apLAR;4tkgo2$2Wxvqq3O7=;;~7vF^2GKIE| z%BfGXZE`G4jLGIqPFE#AY<`rvFnlTsk$$dqksU~i;jAKM) zh_Sn(&1j=?Vzj#eu5Pkcr)9;^5Ggy(Ib63x-km_j@r^qlo__c z==OxEsYy;ATVU7j1=d%Vx$3IjuoRNInTZXzhjpCMf)j(Qs#yW0T~UL=+9yU$nwc_jJRty zHV{UE)uT@liUA_9~mLT%LCS zTO|(72BNC3sgJ}u0w$i!ckpf!^PY`?*a<*S0)tDo@(@_Yi9d4}s7Yzzi;y>iLrdwA-=F_za0@;ro zPhN}#KO)%Nkd zu3;SnCwOTYL}Dj6sW?2IBOm$-esw@tSc_=9DETPRxokHRKXGGg`k65x)oPMoW8j*K z3QeI`RO1sFY@izj`OZ0li;8@i^UP$%1=D?=d9CB0y>kwiIc9GgaO%&8+}0WJi4T68 z*S*=X=Z0r+)s~E{Q=Zvb4_dIeGUA(e{D52E^lG}@jLCkNZr77ZnYs-z?+K-`JWzJ; zy^xu$(=47o&i!|Pk4vuD!@m8ObLHjpEU&II*cc!NN1iyyz2AO_Jo6O5#hK><0=dB@ zy$(yjV}k-g85YSKJ4fy^re>${y&e z0ny61bo_W%JYxffIBFLy9NQCI~}u-5kms8IB59As_P7?lOZsK5&xJ#->2Orj>`qH%~B<2f#4*>WDWh!c93 zrIB_=cXFDk?YmNO)QepRYaLoyCnABtnNx(dvy29dNY;ymP3w@W1`Ks6fv2rH+e|Oi z0Cm&WjR#aneGg;!r?k#(Ppz@6I>T=BD64G}CJAfnWC&pxVueV+&rXxgbkj(Y=ge0h zV)^75E_&}9SzTMlwi;zRrNIn}V06x|(j6&&B1_iaBKfI}w|lD{C(@kEDqt2*o(jVf zw^l|Z$|TB!I>*kQuy?0p_l*-s7Lj$;pGHbI*4kr&wRDkIuO4nU`|woA(ej(ChUuGp=~nK29Aw$v40D z112Z?sfaO#!wrgJm}FLrH*MX<78l4cyg7FHIND!{FXnk(pU9Et9q`?ncvzVdLu$F?Z<>PJZVIjyVD_2=K@@MA+ZN~6?X z>MO;#e#MR{Ue%q9EKu{9)>_L+-A2b`cIpS2glmluv9MBMFrqxW5zBEA`jZ`0p(qQ= z^(eC~KC4e=5Ta(50Vhr@aQgIOJ%*Kca-Mg~b!^`?$BrG_$U?!_zIF$9eDeVo&J6gA zKl|Uf@~S=L8Fcdwr_ZeLEARY0*4Br-aLbSI$o&s;^vRQqhQqjNG`4b@ zdvRRY^~`7-X6=wspyZ-8L%`>8BH9^f2o$3s`Q-GNVxAMJk4Ra0{9#6;CFoCLS*PZ^ zah`)s*>ra1xHi0N=|C_pF5;TTdUM$1re0u+!VQGzGVHGjQ+E)&6anI;a3VrYK-tZ2*W^}Uwa{m)(7R5$t(bi6e%N%6} zmU)7BT$bT`IldbcSLXp6A)^ug&{>8m47$@yCg#rc)C8qE7S4>=esG=P;*iOUBKmy! z#nZh0#$~QP1s^-M#_^G1A!=~CPR9NlpN;bq96GkblP3z64n4%94>p+-jfG~E3dwU<3~^PFb5UkcOp#&<`^488hC+xU z8O|V-h7~XzlnjS~wUM$qDp+$coar&}9fqY)4huR{6TIj@{3KiVU5Mm8oEQ@mIRT?6 zgkmMIadybmRTCJV%dQY6o^gu7(tvJNr8-TzUychdxrD8Aeb!E|;wNUg?eq6@>g0%b z{KAd=>3e>M1BVZC$32fQDguMih?SL+cmKh=_}h>CBcJ^Aog6v*DEqFxj$Xgd#H^6# zS*?8#k?agN3heEU$S9fH)#I|OJ*QMSbu=Jltn9pV^rpH50pIH&Cb%s20jrbROqFtd zL^0ez1_Na444KaezR}E(O3HgvYEiGOtLRCtrkXb*w|?yClPYvJvbnAn+qL#QyERnh zOhm>G|86VJSQ3==WR$}a|M)Wdx5NCrFp)uTaGKujON{RP9=R8KW>_v1ba?M0Yn%-+ zLI35ernpGglM0i^oKd={xFV@hiw2yR__yQeCJM*A<%H^l1}V_(J@lF@n0o1t(3_uU zePf;Xz3*ep%*=9jVI`gIBaBuYN562K(+3CadH&^0%};Z||8fPdd985Yf4Y-P4h{I~ zdc?DAWZZYh-3(VQ<*5UQID2*j%=p;n-p$2(=J>+x_j1==kMPh#hX_`Hc;@D(ICb_6 zTlYPiSH9^&KJvc5;In`Cai00C{am>BLKYWR()3d7Z@z452N(Gv9apgPf-Xm%FitKA zXO0vUg^;BKKSOZ*(R)8dx0~_%zw>r>@94xzEfgq3a$YES;_DCa=tsZ7{vW@YJr_^K zux~nc`f7VBdu*()HBwi%^sLFRa9Pv*uFo{Ida_zA#BdubhKXxwBt-l%YeYL5=|7X$ zh}0ts_>*Umvg9RU4S!Y6ghVX@%y_uWSQ!XI7ow(rm<9T}eQA@WH3J zw~n*xnk$f9UGg0s85HcB^h{3*Us=s?65>dgjws3z!;K+Q z47hyXZhBdlPL^}q*Y4-|@f8$LccKg4F&x2D2hY;mIm^b{2K%qw$KgXqFpM&2Jy~R_ zoi&pS+YvgYaOu^P09in$zZ^LOcYl42;9+~_nDUnRYQi0N9_7@T0YCrGPvYp)$vbS> zG81vDB)!z_2X;>7xWPKBD+R@9NGJnkF(fZa<^Y@O5+)dq%7&~on>XAq&&Nh%=X##!Yk6`coOHU68Pl7vKmiHp-_ne5`Hvd zbl?!9FWnQZdjw|-p(nze7Y?lne|1JEGYGD%oupPLQ@Q3Os;{3JaE}TvDhpnHNk&mB zOCo%30hWg$Y6Ym)LjcZsoH=%uId9wJ+0_k%-LtTFH(a`l#Z}|j@dJGQ+fVY~6HDyc zcRAPjSpy=T4?T8>+rRxVU;5OSx%BG&OioYH?N1OiaQftFo_gXKmt5Q7|0Ca@{cscqW6pxjozDJK9K;@u_9yL~~ zfX0BKNJ~hA6qqn6lVoNxWlz~NyO*b|a+mYRy`E?9cs_jihw@=Fv-Vo|{ri2t*EQ0t zaP2Fur}$T;31R>MAOJ~3K~&DeJa+$+SoZ@Wt&mDGBo$ZHt89rpO(fn3Dh*B23mBmD zHbk&$_a%!4`pZON~Qc5w~;mqGZ zK=z6INJU_A2?X255^mbjLR_#3y=@dfG)hr#;It-C=48muM}*6bB*1*N#GF~6_{{y7 zZiaOdFC$zAjoUVJeE%ZxQ(fvmzL((}FAV9ILA=|)q=2gj`)t3Kh|H!JasT^1zIkei z7rK&p87f7om%L%jv$q=Yck_Zg5`l~?CF|r+r4*cXs*(_onNymm67$?*$~ULl^i;yc z)(T2VPM%l|f4KeGn1ZtrEU60PiGeH6XVZ`0guw9^e|;Z+{pm+33Qx5f^P7M0Iz~s& za`@m$zISYf=X2OwUS%=^E?dQ$7*vE8o?WlrN#n=@ul!+~#U;Us-6xpD1Ujv8?Hz*P8>c))+@N^vOUCOEsCND>n^1Sx2J}ZT-($PiJVwU ztd|tVqa%%0o}2bG_}iH_bG_2XEd@!n!iKGzm_2ibcCW{iPaWjl{&J+QF}!V@4VQ1_ zhoAfrvt5Jn0ugJJki_00oTM<8<<$=IiNo;t8i&KL>l=6}k{@J~55gdT0;7FKcX zoVjkw$*yF^L)#1Nmrs%wf-Bx~F*m>cwaBO_1Aj#sUw$d6NWXNn5YBANR`C5pt32Uj z7FF5WDbHJRq_L4^DGvA^v2Li^e+>@&cI(UfQc@^^Qj(-r;knq6B#NK?xmPeY(&T@9 z_+Ocw>4qRpx!^`hYFk<~b|$cWj59MUC}o&gSm62__E4)v=vWc?qD()8am6#K;BA$N zW+bQ$Rf(on&=*W#qp%X!m4r&O!p=8r=H-uem^_hk_smLIVF@@py~v}FKEv!>2UR9c zopTgfM%L|;_EHwkF0gU)7-JiT$a`HnD~deJ1`!g6;Obh1b7M^+`g@S{ANIg*-Yv>}Khkk2jQZ*_>eMi_yPG{c)}v~J5$ z3x?WC#OG&L1MS%hR+hU=9h=7@sa7h~>J5}qXyvg&kmngiYS^@616m4t?JihHx0}9% zyuLe@T%Ks0x8Y6ZCDp1xRSJBes79V6#|oB>W5tKnmDGwjiIKqQ*f`F>Y{&BxKl4et ztMKQ4dyYG% zmf*N?D6i4N5eY%!1yvUSzEX$LP9g<$3B&7)HHQ!5{^$@GPpmY_E6+pSa1nW{F@TVS zioI8Z+S33A>jgshBdvCTDjFAxYRMkxM?%(8dF5xYfB5%nJv;AUQVI4%AhU)tGvXCp=K|Skn+PJkr+`9B&{~IgUJ-KT$U5{1*Cmat=E#nE* zBdOLRy~YMo%bVYLHE(#sH3(Pm^s}e<<^$g#canq8&vW&)8@T40S5Qkl#zHU6F*YOZ z_P~bHr`GVX;~g%k2;Q|VrZ=0j_=)H6yT&-@=l6o_gv_t-Yk>>?kC8V8{TCGB!X1w^qR4AYb!FgJ7XFVa- zsswU`KcU(#&y{Z;!k%8@g>N`4j>RnJd6zOP63{U^iii@85{5X|NFgyv!nHSD%ke`; zxckeGvhPQS_1XyhcA5S3oJfx3ai5ZFC`U`QfMtvN`zXNP)O}j z+F(V5QK6ubmZ80FX=4**cK^AaU=7V25}sKwZ?jSJxg8~ zjIrzHfPx2>avD{T+d>gDdvcZ3#<tzIo%(BVy)XNvjhS)4EE^?F!uv96y;fQt4=87fp!43$Vyt!m;5h^hl}tcM&+ z<|1;b0|B{&mdJAdDnzhYL~;1{pL_l+&pvyGJ6``Xnhl56nvrUg+ur#qqW9GJ-oHNy z-+Fw2nNmuWF7iIjPl6Wcl5s}aIub~vu;sMAY(hx|k;e!qfL@8nEW9E!8E4a+`<7!a zvaq?7VTzJaqW!u(q!1zX`QUe+DS4D~T{zyeyDnJiX=XBqKn)%u*17W53&hvAccOlX z5NIeB5{h1McFutIY}`J|Ew@}kqZvLefBe7hrqfL!gG7TxdJMX-eiCtTX6U~luCuk)XV`PWy^s!PT+V6e3!GKhi2l{?W!b{NQ!`H9(c@cwh zr~$dr51LKVugg_9x3+C6|I+n;Y_MACnOk)M{_5@EAyEQqTJgO1oNyBQ(k1a9MboAK zuRnYfpb%8bV7@?*#Hu8hz|IRc^1%=O3~AOzCy?hEFCIV3U;O>EP=~MIegWd*3EuGd zG`)74@n$tNiJd32!NY8gE43t|BIOolqxcK>_?8yYPm6&Jpl!}U2UF@-c-!q{Nl{{T@A_qWM8toW^h!aeV0| z0h-7|;)~F+8_0&&*UjBaZE!3L{)@IDF^tk)$ zPtfb8bWhCj#h=ILuXO*ySp1aadMu2o?c*n zZaL(_#hT!t9|U$n@cQ98S0o8hDJzmPoUN)mDvV#%pfX%zX=)X(3s&ZGWaL?u@Km?U zs`IqH#(0M=&$3cNqy?Q`4=)uaw@i$+SXt_j_SzskKbA;#$q1zc-#fIx*V_kZXE}8R zH(WBwO*fyzfBx%V5>LG#_u)vR z`^*-tUXq#f-l1I|_9jDz%sYs5-^n5eox8+?@&;A%lKO^Jw+^hm&ifOpT^_~-GyqLF ztQrHIu?kmTyOWDA+fJNFjvk+7>f|zK?|l@Lukx~;!@S|jQIwRV^BKqT0)QgRX?GIZ z9gFvtGFp!@(Cc}Yms1kpCM6L!)ZS$5q%N#lZz^p;K`R}3RfMbq@? z<&I_~sqT!C%N0aJa`yNV)RXCfc%;ui?bwUJzrydDz8X0BO7(8+k~owwp5jgpqT zKKV_){`n{Q+uJvA>Gl@G%@|d-cbzk2Sx$sNDTmSuooIwpCE!0;DS`&hF@og{)e1eQ zI3@*8EF1p#hs(U>f*O0T9!Fk2!oE*D$H)SfGtJ8C&E ziP;z#j;WwenKvG_&K{|S=YmL~(-`AHOG#^+;i_vvR28CPXY*-9yGD*L7c6lV}HxR*qxLeHUp%qSm0=gLcmC-R2e zi9wyr_w8aruAjVz2X218gY_bSTfH1qyha4XHZ(9AUJ?sILr7v}sQaK1Q{me>V3bP~ zu?kLSD+9!N_aD54(F}6a<*t8xfCES7xyv?OrLp07eTDVv=S5oF^%N+`@gG7xh0R)jRLvVx-Us8|nPEd4K-4%V*F<&!I2woP}4 zOpY#Z4h;u&DVWe;o#d9-@$xu-N&8upYBfYZPTikxg+B;WfR~EQJ0ckqk4DVTEn%__ z%MU-rr1&u^gk0E+gVLCJOyU0r*(asOAih2}B{N zrSOWAH7=bP;ghG&vS=+;37ZsHW5YCFd8z_>X9Pzdkt9PIx)PzPo+uJ%Rj?u>j=Kt9 zJhQ|l30x4xY%Me5&aLs;eQCxpr3>1dg4Fjg)|Ws43C@$^QIQ~ueHoFl#3E+B+=IrUvL}`L=XuJ{>iKNp?$Dm(K?(fu&#rSBvQd$^Nt5iK~2F=RAV;#@aK54P;~nAopoo{BDduy z%HvhZc6SWg%Eh|yU0)nJt_6FOh*#ID+~0Nl`UmdjKmEcnKKuti%jMUe!|6{Rz>be_ zWxDVZd#)omr;D|{bcMV639X^5e7O{I%8Ce>bDavo7 z6ByZ_Nt7mb=TT)9Ns2WC>fjq(qPY97d^I?;l~Qi+vDG@&54;Dba-KSL9H#_7bNl&h zF6Jcqkotoju zv02{z)4#?0pP1vyX3RUbRoU87WKQt?CB>wSIk?o}(Nl)QoeY^Pp;Jv~)$7pkip;n95NR8o<8d3!)oh!m$sx2?yu@8H^BnoL=TR2>| zU}qy?yaJtW&X%g@|J&VScDl`%zxE{O?HK0bpLz}Ejh3nR{x51txyvnYw^oGkrE+Un zCPWZh4bEL9aM6`F$m^Sy>KA`NdfQ$qyEhN^g?b=~mI{l&^t**fX7+625D7(Qh@A{V zM<3QO)kJX4>>QEll}cAXC@QSAnI&q&IQix0;i@r}<`9qm^CNud<6q?qKYJm!?buEf zRXFgE$Czv=TCW~Qif}VsIFjo2m5LrTFIf}N3OL^*~9Ohg4+ zl9X0OFceEF3X&M4FR0LELsihyn(1D|-EAK>sr@KNx8LK`Ysf{)w?CH6Qt{Si6RAAs zB^e{alf;VWdmiC6#u#*>kWn}@ZrU`8iY;j;V{WD!_+35>I&vJDaCoip!eNVm@*Eng z(Mlxkj$jiox1#y{GmHGpJ$G^6mwo|xZUrqeCV%fgv3&1C@bs~Pu*!Lfbpd#*M;rJw z#b;SbwGJZyC&Gig);;ue5qK}D^<@S4H9l4d*olGn*dbxK#>Ooh@JeEh#o2(o(Mk|Y zf&K0bswgY(l>{#ZQ8gm%=1@4Cw5Tl`nY`mx(q34?ZrLzOEqBzCh$Pk^4RKx4bp`Yc z%~&F>Bg+h#b6ov~m+{s+UyXMeQzy>goJ7Z=G$2ZORJB%T*SQ;+*ihq~b5b69K$3b` z$qd^>!bH>a){8Z(OELdE1;bg1=<%L5mi>jLFyWjyWEAJ5l1;0gEs}X!uaf0Ebip>rB~Q zlx5RKhe^EhSfAp2pUo;M@DxrWVoj7-l#MVY&(&K`mIpSeMbm63-f_iNW>-6`baSK> zRCY|V>PpOkC@IixtrDi2b#lULOZOW*FL6hQ7l8GF_$d2du5wVI*Ot!)Ke>V0um1we zFC3)zx%=pKy6k)KX{JuK!<(wK7YPyKDj)pBuTUMTpc2jD4}63(Q(f}3!<8R>2bHlp zB95RsL_5p)^cU~vw?Fbl9(dm?nfm>kQL({!gLlvv7OWgA_|!ih;Z3)1;`|K?<6zF@ zY#pEAlFQCvVdgAf{>ry`;)!GB0k)JK$P#6#3ih0HE|*+HyIS*~!SY>;NX@@x_QkqXZtJUuiAa?5^e$uk$uklr$;6Lz)~AKg>IEOa>0lZ@G% z+&B*OG~aRx?{jkJxJFC%YDFOwkRY|@9GQ|R%UEL3LZI9_uu8xEEkubW2rT#e@86Ft zt7%G0oRek73UZ*ZWkf{^XvFBc#}|$?w>)_!Ls-wohUfKBLS=G-x4r+<+`07U{KcQX zhqwRKHPr981@oE|XBku)aAn>EhW_Z$`r?zD?mElU5 zH&r97R&=E&+PINuJd`GTHbx3fz1Co})zrz6CJ#;=74SlFMWLz^oe0u2#if;yh_o({ zl%1j5N$GVA)mlOnM?^ZDuapdlNmCeFtp-|!3x^egUT%>_BDD|Dd+iw0o+aO-Ajb+r z+w|p?E|^QbCGwt}QjF;x63Mv>QomBgrgD(t`aa~;BblccIAaf6F%AX z2x?KtV5vSfNT_l!>5w7{IYk_*JgC=)YUP3>JW$wh{qK95tz)22b}q;|pFY-Qez`;H z6jdb7N*o5)ZBvUByM~9@v~?r7SEwD^iTcbn6*76Mo0C0q2(_Vw9chtO8zj58Qo&(Y zy14mej9A3T9%)u!Z8(REie8f^Akm`as!Ji5ef&|T9($4H(=()nWxQVJ{L3fVdbvjF zvd8aBxU7}j|G|$@k0Gj6=$+_b%Ph6jaakeK{PjP4o%&FNbIzXOTW>p$@y;@~U96=h zoJUK?(8h?ys^OsnJ&wNEWn0e^DXNhBBdlMLyg{2 zlAwaMOG+XY(gap|Ru>nTOFXM9wQy}O3I5hYksGphiWio)fMp?g^2jQUn&6@h6%3vg z>sZPZw_Vhv7HiraI5pL#Ib7iGZt8HIQ9MK$hF5@ zyoK>voy<7qSC>o8TM4+2JR)}tPmB>&Wtexp`bxZUR61RV%1x&9+<)Ibo_l(M&%9|H z+r}bDEjI59rNR&}QWBp8cIWh}$E-NEMxI2-Q1~n|rl*(av^%6dm>f^AnZs#^sA^`< z&Xp7zfhht9UI|&kND6R*PEXM83X(|~!~)(UwPZMnnCpZGJrbUZj2MYQI7in*il72? z9T@4c)(1AH^JpLRACVGB=}E1{c~9&^{w&dwiVi_#txJ=IQ{nc-nnWR13g-oxlT4qO z=gg_Off;Q8=Mep(r~{!nX(Cz*n9GpE5oR2W@E9p^QqW8yYKbJvL(VPH;EICWTfYDA z&-2v$GC%wOyaklt{ByU{{>(SQ8dNJmjaEpif_VER#ip@2%c!gV*kjGl%O@&6#(BZIZjmH@vmgv{-p{;AU$@A#-I_R`OdWSiEglIL# zo>--A!udxDPlBUWkyI*@n-rEJ8z-LdgMhn zoMWRn9O|tL$~qC`num|KS;{h=K5>?-hiY_E!|}P44H`CBXf+hh6yY%MVPY&Hi6lMY z=l~-^GDO7u{8_xIF>=8$n||eb;;2AW!BktwjaQI$Ets;LDqM)&luwVufQS63EigC;Da!Jl}obX+Hdi zUq&iVZ^3YB60y7IFrA$4s^#pNF11KA(TKqc>}qJfOjaUV)riCGg6FK~1sNmGF7gjw zc!Jw*yqw*;HWH~SdDcY+EfvNIwro2eqLNB1x?%QK{>INQ7Q}T$q68C_QaJ3_a28`# z(8E>EW|HBgK#7oal?X%}@?9i~`el=B*|7tC?yK>_mPQD}>XY|VJbZxSM4Qa^1A1#N zLm?GCulVcZIsfBBZ)IYvMiL2xj(GI*-^4yY#dEpiOQ+jB_P)1r&hE*QqTE-?=m9ZW zAedk5aMwToki*YB&EGwDipwSw=2s0rIFa)1F&X-VHH9~h%tK8nYU4?;hLw%yJzCS* z)Zot7eS{ffc;u_^=lt_`@z}m+*#DzLM3o_a;&r2(`0rn&6~)ArF#e!#At{*@2!T&D zVx&rZ+uk)|_L>MY{NO96&v5ph#|E-&H@!f$q8M^Xp!TZ3C=W3S$pdfy4eD7JyrXL! z*Z%DXsf;DK0#;WYuiUKIJ6fSaOzI4_1I4VRb0kAfdVCaPOREK?p`r>5M~Zz{o2LK( zAOJ~3K~%OZXlEL z4=d%8UH}j6o(pz>2Ri0 zomoe{;@Q1B+;)1MJkVp51~2IJESE^jhM|~`ufRm2IQrNDrdr4N-%1llx)de_%S64J z&}_z}Ih;OyhBMP09(m{?Om1;XW38nl1fnX4qVN{BMYu`HzU0*jYT6OIUN}n(-ez*p z4tB<~@cAE6$OAmR@E}5ZBCSJId2yC=hhplbBg2=!sM7Z%Cm~;jYBKYwzhwKJLx_5e zKX8VLlQYZ$#(9#8;Cqi8;Mn0QA{~klrt~fu6Oi8qM=!G+Ic+$7;w)OgYMxUOjtv%m zxC+AY0%X?vHbOd-P!vwl9BN?;M^h*&KG@@p2OSCG zN+}NSqYm9#+Oe?_xV zEIX2(EKO0q0@5RGL0wv6rIFTxg2kmS&RUdkbbCFzX@+qgDI+S?gg8N z$5~xiWoM+=wX;PMJ7TF&UIq(i?y#99jcdf69s;^S znkbg#3`R3MGfzc$ep1DZOV2aTa$;5Umg{b!?hOa-dyK;Na0s>~5wEN3HQrchnecsN z5T5@FS0`aZE9_34fZ62&=^Rn{`cu-arAzyESU^e#Dn~69EZj4LZ))V(F3AEkrAFAm zW*r);fPnkHdw@d+rw2VvRhpNC7qliD-0<>i7$0k*1az&%NKt01z#ES(^~8g0S4p83 zDy)B$R%mbe&G(*zAIX_*8$NdTK5oACN|HvCOQVUcig(T-g(pG{ z(C-0U;fbUySB~K?eQB}F;$m;01oi_{MY$2cQ1Uq| z+XH8L)2QUuDpbl%g7Y40T{s&#$_C52YFjDf9&LugLt1zi5J)A_{dKEYkJ#{~B$9zu zR(gkdu8TE-$U&>8Xo;{ETJ9L$ddJJr(z7_d$mGT*^+tW*@yYTGXFYKo2EM{NFS>~PR z^V5d&YmQB^#+3~oFFjT&jF0VAwS-NZC#WTwxE}HBq0=m`ECQ0a)xy>$h_*Hu{_uP8%?3m-qLT`< zPtQ~Q#+UFi?3s)Sdo9xku&S^J>km+iG7=kCBF4rV=qRQzVNaD*HBx%ID;dknZHl76 z;5mZlM|q9k{q48#|6g)3&rf%G;rZiSe$fc;e&KQzmUBQyN!!%y>Hx764vbFB5) zqCiS;N|rUOHM^F_mGyBsu$DDza^PbQKe8>|LFFfrzCF!AtXNpe87o3Kv8f!9SHzKo zJWQ{pmPCIDCE`L(MwJj<1xB88C#gigjyYK^2DdYo=T4$T|hP zK72W{nz6-o$wbWDbVj$G(OWDKBIbby58#VE?73(g@7=YDkNwi8$=e214vuZfdpClh zKM?{EOSBSHye7{CMncgo(87CM*2R_Eei?^Bqd+l#a-P!%j&b$tuOHY7e0hMkQW4c_ zs7TRXUg6f){ta(>`!3F$`a>E~4Hw0Tq=6hQ7piIrL5!*!qBq@$Y*yf3@5e7^bW=zT zp>if1D>9g+oVWCB_^j;Qy_sFRHz9?0#EG;c#z2lyx4!`;v zchVZFvwg=1_kQOGY}tG+Klh$Hxc#PGGkJE}GT2lu*JQ^2_Q>wJG_h%8#J1UKYk@1l*!|)~ZsXri-5>csen!(`O9FcFA)ABtcV!BY%il%-cHf!aprr^Ad4ADbA*>H7X^7C z=|yrd5-{buDNbUp*}I)uHRj&$Jd2ai=@vNGCCdtoaf86(N+;#*Z+{b!nCH*_^mBat zFCXBefATxL>ea8Jl4NAr0?VD8s)CP9waI);$2oH6@KRHYG+QG0?W$mNT;iSjf=pZ~ z_>_TZQI-e#qDcCmX%|4dI#DD(m@1AH;SFo0p{^oO5z5+7S(5?KkyH{kZO<@C7fDWVE=!M18W#$fgb9dhP^PhD4jvF(Of@Bu1%Byw{+6eI_*r)E z97l>g7!U>nxpG@Cb*M3l@B;`X7{0+Hh9Vlr6{|;=+4o4qY8Se~3<8Bk`LOhQ1uwg5 zHA958e&M4e zvEuCf6bGI;#H0J3Wol-Ls494>Bf0vVnAcvtm2-EDGBO@4 z9{`6!L0@Pkd^pn#_?&p0fI>hI#eJ)elV0)LKYt7L2t<1Ym!>Q)blCsc8ES-#m9UbX z+s3%?ya|%(Hk>i!#+2c{(EQGwVYzMi>NlQeX68)z@0CITLzvE2uNbAiO%YxE8d57! z+qNT;21@e*R`*mL1F4&D1B zhQ^z0*}Eak^Rz6*U!K|dl(_|0V!Fe5PHTzobUHl#?Z?RqOV0*4e!tDC%0r@5GVH`k zHE**SapSvgL<Rt4(xQd8Pcqy7M={KBj9ja4eqMYxhiu|i&#;FKoW?HRvm1LJpA zcm|-YTK3!0EJr8d7Ps2T!3dU{9h{$~+fK2Cn|bw(P^GKcrxtWbV&>sE*Lm`xX!OJ)5XA~AzYY;t>g)xo?2mQL(F~e`$?2qp>yIW z+4LOGK0nQCKKBCuc}tT-C>j;d7r*o^M#m=6I=pS1F{PbMkQq;59YSafigu?r(2zJG znIDUI&09vl4Ch-(fd9L^M6 zcGWq2UBHtEm)Q60B1#5Ou~eQ|gk`f9KK$znl1Q^*%P3m-oC|Nhkf;&`2ebF3soY}< zgDpZrGO0u~hiZ(B3=s>@STn|EDM|(gWszq{*GBkWD0j;6ka>}m01{b(I5da^Q7UOA zKrQ^HH)KjO3h9u-bPQbw?ebRB?PMH&;W#$;eDp)_WN0)&MS}UcHh=c9cbjIC6&7o@aP$m>ql0;pp@+mgna<@YDpfp%VsazD@{WtywjpL>Sd$f93`v*GhbaIC_l4^kuP*K~6buK99(SJ>OIVD^eMH%RGOS_o_hp?pXK zXdMJcQWD9qpHvbS=av~A8K=`RL2%`L5Hpn%eTBjyh@=kfZyahO##JNKc#KM7l&<4N zgmB%LVj#=KvFLXrb(6TF5OJNj;_<@ZoGcA)f?7=@g(GQ26jjO4g%j-9wE>fcvzacp z6}4(aq9qECQl3gRrq-yUckCKt`}yq_p39>0W)$Q^IFFE3ya46rK=juh4(A2i_cZvi|FVrA+;fTtju`SZ zOv0_P9G~t`Ng~EKjZ&#o2FBTh2ZA16=j8ZT!@mZ%0HCKYZ#K5B}g; z_C2anPfo|sHy)NR#za$)u3tSO|3nA|%aW2P; zh^o+xU-$-mTxV|TQO=y2DdW^}fS{v)upC^C%_gcDuo(r5sE1 zOJu3#=_j9|TB&jIC1YH6*%rJksMe~SoSNgFPyHKNH|ITX-ODSl+`z(;D0(*ky?n3BG<^SQAyZq3YKSWGvo$mVfjwrA32Kns46w1WB#R$ml39 zJU_)#&m6*A!OWQ@M(T=lceJ?X+%c}bWRkSo#oB^yFC|Ip0R?FVhY!y(QIFU(RAFNx z7}~y(hqDzve*6@7F4efcuDE%792zWs4WRE;Ng(#39JYpo>@bR^mr#Y7`&XzJJ{9;r6^2p^|ly(TK(AlT07Dm#jOBvl%-!3U+NB<5OS# z3U_~Fkt?s<#Hau2S4gS?>tz|vEJ@?*_#A^Tt_VM`mP&+)abIf5f3R2#?5qKCeRg^U zhh=`X!#TBx&2fThuZGfUT+X6c2B#6GhbKpfG9ZScS4et2O_CBYIkHN(D@rvT@h)~unU0OtrUouYIYOPu%QSxS4Q&Cugz! zFs!V!>9zv|Wwo6%zu*}fO%TSAsqi95`cf>R@Ir$NQifR6g4UM+>kvu>xr6V8+Fcnl zwg$!TvE|$5BZSx9}v{ka@nx^=9Dyzq2;hITJ!sjHCEvznO@GqxeUi8nZFvCh+5 zX=6;W_I~v~%zmt7(?o?mn`?|Un*7)+&moEhSzeHKdUzY6A9%&$>6E0FQyZ#+mQYpb zilnI|SC4IGcoFV@{Aqj~&L_RLp;0dn)ZT@^qdvT~PerleRxPFFXD92te%lx~f9^%9 zS`r19AFr=z{${d5%jP`qH7gF@@W!k7#b10UN`f<%EYC4E#})JSqyj65N{31uP#^iagWWz;!iJd{JT8aJ?AamxAeFpMbM#p;`e7r*; z96E_m30%2*m=kAuOm|$M0!qolfBYHRk4<4E$VfsGA?p>AdV)$K;#i^ZBt3`jomeE# z3s#F9Mc~ zZ5fOK69@ZQc3sRbN09QyWjVDeot?X(ei*^ufw^GEmW0yv`OU} zG>>hCe(jl0)AJP9ikO1j2D~T)hbNECL`ig;Cg8o&I78#Wlf`k*SfbN}G~J0xfIzf0 z1?O>1!wi7~Q43%Vrie~z?+wlee1LvsIJai`&ardkMb7cF z8!0^kE?>NW^Pa|e)GI$YWBK6GSz6aD@K+}{`Q68^usCD+$-A%T(C(a85ewk;3s)%n zC3E}c(WDdz$*tX<&8SA6M;^Jv^+y&{-d_BmRxYk_>d6636FA*OvhY>I2Eo&7N5XNG zio|l(%JjrQF%pG{MOE`FOP0;rP^bEA&c-8fu46GxU_mTjyYEqc{kJ|&r_-j>=~34W z!8t6c8je_ADXH+R4+AZYDu6ab?j(lg&pR3o z6spW<9Bs_J(_$7PK;IcbTQO2Mc!LYE;0-8s$k-TJ?t5f|Jh#+NC#da9mp14c;o6oZ zv%=M#7Kdj9lUK~!I$^^N-A=To2PGmUQxnnE9@EXDcrS_^ur`Y6&Y!Bd{)X|KFZvzT z)wE4OtmR2(m@}RY7ue-u@oIO3bjB`GbSg$Lna!f%zy`R!Eo@lW@Fr@k6!Oe6n*|Dq zl%C~F13vdx_ha)Gx4!f!cfR6!PCorCU-;Y;Tyxz%1{)h}tZm?f=SBPGneTOJW%0;W zVl;0wxJIRgh!W~6jQmN&)|j$JrDAy2a^_Ep&CYjv5e(CVD$R@yT!S zzW3aYe&3yOOf}QO)DdeQQAguUr`QZv8&$MB^+za@3%bz7VXVcPh~}Q(y+mOR zBWHQ}okybbvKdkL2b@3F=eC78zGq*--3Q~4*Cu9`8z^oR{eM9P?;3*U$>b4lx_Kw3 ztQotOj%Hz1bk&!Ik|!Lp4>SySJDzss8TfWTEG?s4+o`kHAXEnHYeAZ z(x$0Tbx17VGqb=~H&-b#izM(%=;cUT2$QSfI9oc5qrS*g{dVy=Nz#-_;)JB9PsD(U zRNoBY>cWz_z)~K_tiy=K6o&R}j|YPvducY$U&h&P4Y zvM|@?_y5TBkE zIS2Rc<<{FuPM*FH8_Wq3d}?FF1r5B?E~a)-yij;RtHAn0CE4MYl^EHCWk>{`gMeb{OOC(4Yv$*H|(5Gp=+>ptdO%|0JB z-FG>|4MDjyuspd|a_BWz@wOj(Bcan~qZURL96Gp{QKeYpX}1m5LS8oH8d&fRnZyKm z?<2oyO!2KsPhI;7#yToIr^6l7mla-cWQkE-VzvzJb~b4ZWQE1r*aR-iXtlBi+TzKK z#ruXbC?kXmrD4Sf&<0~2x9(q{Tf~QOG&0=w<2`P@dW-%0=a^ZXiP3GT2NWBa4)Gps zVy*awGnS(pmYYXc^VLUI_}1g=lx0ojDz=7wM#GZ2YH*EDJEYS1hQ=$RHeO7yoIEu| zYfm|HY^~Ka!-leo23hfO=6Y2j++i&eDt=;C_~1-IlUx4YD+^>esgVFTNk%WrB2OY6 z+a|MVu~;;?sUDW{+&Iik6E7f@vlH0|NhTr^576_MxA=u$_-|a-syWg!T$>99$IvSM zQO>VlQec2r&xR8ode0sf`bppJ;E=}A%TsI0a1(Aiu)r%`b{Lu4g>Uy#fcVr4)PPFB zjM`}KFtx)wV%TGy7L^f#kr*Q2bQ0L;$1Pr+PNa$p?9eqGzH#qG@+{+pFWOHcnv>_2 zyIyvHXHQ+>sm+qZ*UiU~Mv>7pkxLcC6Rf35Y=u0FtIy+6jS5&Q;mC^(*I)1HE|%Dy zP5r_6ho}KNFvQPBHEJ-i52hYB?^#&SVQqm^D<$_ozQ&1XF7oKHi+ugQV?6fAIR^br zT;rq6IAPNpAEnen3u`i-`O0P7vlWeZ)V1dVIZxC%BVQ9V)~Y|dN4YwS$NAn~3yZQT z@F(XyUvL3%?6IDk=LI7cD}k;UOg7Gm-psjW7?qw!j&E^bzG3%*WpP(K zEv)q6o50fUc}9bBlG_;Pl?|ONFw-tr-`rwrvu0!9DI1{-j?H01lkW9CKzFWT&sB=i zwD?^X*;Qf~l{tgKUhIMIWp?)qql{=wYZ>QV3rH}C2K>qYh?nI=KMdI9(7ESt@8|sa zxO)YkW{TD(CYd5eIeBVGx#hSp81nSWh)~rCa7|Y5qisXWK+9w>J(05j03ZNKL_t)O ziONiF2{sO*T~KO`Mv@Qhwpen?Q1BQ1iu>z8ttHwt{8)FMt$R=N??#_O$oQq7ds~tT z>2`$oj%GS!lfr!}`9!9I0LG~Wt_f6SNw4T|$awmV^1vE=y*5}MxI1`m?HP8pqCBP< z)YMHNZ$+S6s6D<^3a1>*a^~h{(PAF8*#s;YwTFJ{2@smK5&oXzbn_64`P7#jH;z0+ z(x4jVByf48oILAr{Sq^T`MDx4ZcPfy00$2AxO~xb=JW;!56&SbLVKNSm|tk&)Um!+ zv9b}kxbFG%L(ftL$1Ii_A=kKDw%h4Fs+Ca3{uovX&QdiwA-fi7-2`eUwy?3lM#sq? z-qOe%6)T81eB-e;vNE1Ixs0k(v<>Y}7Y%`GR57Rr@c|Q9J6{sklt2CYSxOA#%C$y# zX%5%4lsV&Q+i1d-#J~+mZGbQsl{m+0G;lQ^(q=sSxVAj?rzwD_dUp^3d_{Xut=qU*e9gGG~=; zPw3am`3=XRU9(t5*dn8UWk9})hwN|+pr!FhZ$ z25CfyNT}o0R%{>>VNX}Mb*A8%f$-V7rqhl3{L*<`7-ttVQO1e{ik9V@_pY^#wyzU3z0>RQL3O@Uv|B`=L8PFLRZn!ACvYm5#&vT?* z$EIWoYMN9XAx!f6LQs5lk^Y6x<2E;O{SnP*gw}mj6KmA_gqT^A$B{$Kc2ZouOz>BtNQ{V6oYWs_ zK}+M3PAx8VKP3+~K7sH}WHQXE@=kC2f3l$$@$@5{C?VP;q-k^vGUkCHZ(AjhI)*% z4vGl@?XTn3FGc{K#B`0OJPCsfm|=w(Rrp~^S;DBc1n+4VhFp>uFUg%lvg*g{yqVld z8n4{_jyt&J#{IaaLPPW?b{a?LZyzD6%ea`G$EjefXC64vwiJb9R5x7m(a`HNp=UFE z5c+k)C`2_WnPFX_ud($z+bh@^ak@Run!bQ%N_2I|c68RZxGzMV_x3?z*s7IF5;L6d z$SiX;tX{6UH1Y%&=q|K)#r5-$1=a?R2fw;btD~5CPmzO24M7QhKy~5|fh!oBrsm@a zj&X97c+?N093?XZ6Y0!?Nhul);)P%=ZD2QWbGyZp-myL`IlJ2CiN}ZBcqn6OS3%|B z;fGdHmB{+Emenm6DZmO%gZk~MN46EnXx$(#~y!X9# zv$$aRYxx^K{`4}7n;RVR8U4mbPNxQpsi>a)OZ0+)4Dvj7!d>mq3VZ{u4m2aBzcoX@ z5gO+?d|;N{r{LmNMerfc3Y&NgMIWY46b5A}yyg{0dH?%fhZT<@pyF};0sRx_ahEp< z8W^lpI4^`5%U*>&djolv^ZBzir`9tXQPu?BGzYl`zP4PkIMZUjEqKX!d^BV|?Usi#H)f!Nx(S7{iJxdyGIynn0_ zoO(v0RN@JH1Up}WSwVD;;Maf+L>mZEO<^@!#e&v^{+F>bBCI|cL$4LoTC8k0+$8z^ zGzgL!e}!5y5jKZ4>)C+XwK%sPSSdZDIz(nvJm1~oJx)(%gfTS3(@duR{)kGz0| z#a+yH3l@4Uw$7bo-_kt4`EP!UnQp`8)-vBdc8*J{eLh=_cwnSFUh1T4V@*S342(s~ zHV(dBgvX{UBqA1%i9S7z81p<6oOk%(@fuqlX3WypxclDqid&eQ?a=G?qWVCHvTs1M zIJ+gp5sichu~TQj_=pD(p<@mEXADKAJULXZlr^))P-&n^0bKz@uEcB{0!3~n!B69p z4MNhRC3%%9*>-Io@7_UDRBxJrjpeauLaHXs`IdrT!!(kf}4!m=m z+h|xBg!BO#WS1aI1~DfQMxcEpr93D;=J`x9IQ{BQ#MY(O$-VQJ5|xYUo`f0M(~T*eLiTReSX6XybD*)ST8C`WyK z6BrCC_8pk#cYf>VxcaI&Y^dS_9v_hirqiSKYd=RP%h`J11m*wo$A~I!SVInEmY{)G zEOjseoCYckR|XZ&Ru!8zu<0DF5QpWrY0d`9(+sJrX6noflen94hR%)@`<>^dK1b;{ z&i)e&QMu`@APzhYKETKsRy|x}16hcmj3r*CYfCYNNy@rFV!i*gR6GO^7a+eB9*q4zJO} z=)98Q$P1xUbm;a9yepB=jY?Y0lU*)JgpDD;<^YJnUfO`UPL%wt_wkM3#Di&=?d0TE zAX9Ex41C)QqrPFrS{|$&o1x))Yj{vd#UqIJDv z1P}uo$7Av=5|P!hRz(c&K_gtfug#pmW6#z+a47~ii3AE8*er$MqD#gT^>rwO# zTN4-G+=8%cPljt6)>qaDL3!O>H}W$-bvLadN>c>bwR;Y0$Dzoeqjj(f#r#CaFABYz zucGybzXCSnkq`YUa&etTqW95RPb)LD6qa(B$zWZCImvi!k#o#>PB)$*X?`fsUyqx~ zc0*mBb03^Up6H}?Dl(Ngs8hREIy*%oz)ZCv7`W)-^(_cAiJ(_jj#Fopm7zl=iytJB z>8Y-Proz=8ZQNAE;h07xli8j&@k#F!7&MkWYUp*d2)GB%58`fRL@6|+K*rcB>e-A= zfYK@FH_OQYG^io?1oNJnVzwypFp%)CLC>R@2 zpa`Qn+WN^Y=TfW~1xKk}Y8@<)I0QATB-FMja> zzIophWMT+}2rDx-9)szi4oC#i67cF#328oSFp+`Ij2Le08d|`-dW0c?4mPCbtJ!Y2 zX6+uW+kOC(cM&rivjamv_SDeWFAQ+tgSWErofCvFon&nz$4gFW;fe-^K`9Lk)pNl) zRw~0qpW@~cN;FI$Ei$!7=|nCwT~uYF@rZivTyXO15C^Se%}=F)z6wJT`oLZlx+(5t zIYg&QGm);q$a{QgSby5$+Fj;uf~@7^yf66FP#h0aB}r_BdK7O&b?Mnu!C%jEF>Fy8NAFm|_6+AQU*^)qRnDB-!e$VT50!^6T*O#|->7+A4*%k1 z`&m>aTt3U{Z+{%y=_F-=F#Cb`(7k#ozW%&RzHm$0rE;2bKsfdL2G&Ga}>L6H! z+IjkwQaZ(EP!x_h&Uzf%OH$IIo>!HY)&_`WJYLB@)K>s zGi@i6HQv+tZmGid2+%-g)TUpX$qF2!6T^6$b8zHfn?L{KAL5bw&+*jXJVbEHOx__6 zO{Bby33iguHq&NTg~y-pw0y>^-V1ZRCdzWWO}n|GwgBmJ`q;y4ocKGk!4{b+z7Z

`VzQrt3izAm9sO{>RGgwH_c>xPu}7Gxw1xKg}n!Q^!B9YiZf|J zrwHOY16G-zfz!vIf?|fj#yVHubeL;zzL~6*Q4Tiwj^2ELJ&PT#tgUh3@*1nlYYaqry7u%WGT_I3sS$yV#<3X`rzH!r$~}jKy^C!$ zv+SE~QKa-WNyBzc`Z(i-)!+CS`Amn_55IxgH@;@ul|0V#@-7M26s^}8ZGD5eqi-ZT zw20i&#obroDR3y>2;aYJFV6<$iMmflV1|qvfqs-1PG-hG^aC%!SWOf^-JUJ8owq1r z$W*5~-IH<7)WXnc@1E;fZoY1b6DPL#>x}_{z(3wIhiyVi-i$h&I117U0WTiMhV@b@ zoF}+eEX-9WQWjJ&^k~^O&0xTA^%R*JEQUrLUTT6^tZ0frix99{0|QkYhC`hexyf19 zhFT+faz+eo+oD5^qO+MvHu*@ikdW?AB52l-Wrn<+bL`tsQB^fFyJxxOu2*yQ_1AIi zvEy7hf1dS=1HSK#cd~09KJ%r=dFyN5&u{$Bhxy-r_g|qbbN~G(c-@U3o_%;;Rs_o_%U<69vT>m4%|1#V|OkD2J1wX}*BXhtp>K|Hm!44t7XhCa|W zLKfmvmZ`>BlQP+3N`@a5` z(D#~b3$YmPWicgoq)O!jL6uPsEj&kVo?&smMV=)IkH(vgDzsZ!gx;Ds_%4ESsBLI< zTlCFX|2<-Tc^O6d(GUM5WvJ*6g{rFg!5?`WS#IbLwit{yDXW@)^qyNexPLcg6?pKm zGaP^FEX(BJ8$wVTgn`1AC{{clxpkgg1H1E#yc3nKp_9>!6z`Hv-^ci3)z}RmV@ZZ* zm$4^Kqt;Sfb1-6!wngv+CyDJU)X&~WwRMq=tV46Ffirz%EAFJ1gJ&}+yF#pytr0S{ z1Y=kY4eKg6v6y76A#Fb6%ict=kTNVYrW%9eqb$PVnWPZd_$P8>nV;+MmN(tP=RW^9 ze|7mhubk;|#8@txz`i(GB$L?oFG9cuC7ZZ~h0U^y+vw0VP*pj#7o6)++KlGxAJUQy zI+C>633=$oGekpFHEQ7R2U}dxc=e8Y@1(-e=+5!LjR(5C91}w zGq=R={qO&RmGvup^xuArM<0BUA9>fS`R70Nc8cyiXRh?wb>I-s9QzCI-5l;c{cy-9(du6T>V@B zf-Fz`u{6(hO~znoalXUWmHY9&&CISIZ+Y7ckAAjd{V~rdD4!l~anR=6oQ}0D1S-i` z6L_R736jz2waIL}?TU;W1)9i!)1{P>1;A)hB#vLWj3r^)y)2V5?cVmr8@b`gBLDHf ze49NB1sAHoY!SGn79LYiV>1p~OAFKbngFE=Rj@Q6`tT&w zaojcK&+{SRiRwv{2AT##<&}PF){};^8o}NS>*)5qeWu{L7wl%P(<09!={F?Rqe~Pu zlOjqwMNFD-jbhZ3C9HN+*7(XWKX2)_l*^}2a{2NaM~)og`kRk%=JIJyo;b~?KlKIv z(ZXJ?-o3!V1G}-^4(+*FmUb<2>6znv9ylUK|_?L@5IJzcM~$vkcOA~JXQYm zuOwcTE#!spr~mf{`QtzNd!BjnGQP2R^&CgBCTG!Fo@pGK72KY8X@ZZ=lw7F1;D@pe z#}6j*)x9D%?v_4GbwrGb{BrMU6HO8|%I&>H_V~be>M{bw(#yYgzvXA&cRN;<%m|%= z7}ONQ?&Cr;fqztU}crj){t+1<6++QWA9^B zIkw82Km4OlA^mk;-|4cu5SIV?UY>sJIQw6AJ>OU!aL>c%Id|qVpZVlZVyOu}iY0wj zQIASORZ~?JSJnfs|LErstNi#2_wm8&EKBnihN%%66jd|vFGhD&6em`Vr~caGJaYHX zaPvoQrhRx9KJ*cUL4Ss`7kg~g;IWuCzi)=a2j(#9(`!lYtqE;Or`lCXj}^w9>#<+%xl3xgx21t2*DP_PfAauO z$z_&<(vKS&9TaDTGo^A(2D7;%@tDbq2oCc;pB#-cfoVj#Z_Fl+y&4g4R;dKa)EF%! z7WIp{uw_C_gao>UA-9H^LfGB)2~n2NOldfq8>L%#Oo(-X*r+m4ERx==LD{g&3!}=h z&l_A}uvOr(ZyhIKD7raCuZ?L5O*P`t2Oi_v^**=mp1~T&Oj)7J8yx%kcX(!X#G~K7 z%;r{;irWTNmu_q|76;-fGQ|YXdMl5^EwO|;!f~DW6u_QT5~4|SAV`QE_!vI|Y;K{W z$6zx~A$$<}uEj>(qVzFTDQ^^$$5Np`bU2f7#YJA$tTAMH&Le(=7>id!x5#+mZC7#i zz8)scS&@KBY*0f;Kifot9K$)|HI;3k#rSW9=iTB|#xWojKmR|zmDj%JHh%S^e~FpR z5fw@T>rKtR++$HTh-TDW!8_sJudcGV)ZwO^+Ne=9#Nsj}BUb6bsZBQ_ICRq@okP3$ zgFk+PR+f=Ptpu4Un^DU{hVY}W-^ad1u;K`Veq<-4#;zuood%`aijc6(C{lpt8De6Z zs$v;<$5N|BP2i-|R06kjTU@LIms`T^uXq{H9zV`-Ye;`}h3gd#EzF>4to7)i&x!LD zqw@`Sz2i21=pVm~rcq3_$!Ii)@*?#ZVlOW=v7n#t8UBx7eg$VvZu0mO>-^?7FY}J2 zoU3KKacv|pYJ^i8!XD%3Sf$ZGDV9fSq2~=xeI}6aYw@}_#6+8636+ORqv3=AHYi4v zep9ol$}q(D;|b?j&?uV;3U7bI4ZP=_FJ;$UJB@BaV(N#f+u&G~Ii3s#R88^~PE-w3 zL&d4BYf_wz{|~87IdaWB{k~(l4CFn*W-**-*b!)LK?KN~AT&$Ir0ZmOtVI1LRun4`bus9o&Gs;oGS}>WA8Dc<_0JX=t zfVGOxW3s&BQ5#)65@K!HHp)yP^m3u&;Ek;=Uk(FKZB|@3eV&cwRm%Pdg6Fn_3+#$b z5C&>EF;c#H{2c%6wb!w4vBiNsJ$z7x{Q>|4xPJ!fg!Ilp~s z$Qu^tsZp#67!ws5LnqufD)`=3z<3{9FDk67p$V4tFXrgYGu(Ms#0S(aBhn_)!U*xE z*`PS1j7)@ts4Ay4_P&A&J}CS5&vWZ7OED2vl6z`gk8fL4r@CC@O(@+8RhZh!zN@_2 zvAAT+>`LkF3$r=D{*gCxd1al?f8iMAX3YvPQejq1N6WPZ@*(t2Rm9+PH` zvECW0BLh0w-Yaj|*s92E7LA|d+tGOFoGS43A+$FwMl5-5Xcd;WZIPuRxQ3`WB?Llf z;zc-vqL=4@3ZRxBM6%BrCVj)h#<=V8;wUeBStg*$zjwg#Fsqdd_c;c~-5W_Wge zi>qI9nD^eX!1V_fXm{IDQXImhF7ZJLF3|Lc5gyzsCemwEIe4JUZ5|Fk+~!N`4XYBk zwr$wkN;6fj^mIt0o+>3@G(_aUmKxT54U|-FhRiFCj|1nBhSEZyk(lM|1V(iYn#j$G zy>ac4-Q0NXZgwrqM17nYzty_47Ei*1Nl$6J=YX8}#{U&RS()yf#?HHZ*KwGFFeMH_ z$3|FdGsL#}>0kah_uY4nfS>5H%{YxS%K2gnsux~zU6=pi4GWkI<__$m3dD4X^g%f1 zvBvVZ-#EuT4{YF?#91FV<&vRx+^DN#*%JFJE_D)vi78wPnK8-05r3LS{A6qI&BpZ9 zyRt5~6ZpUl3s~P^iYTRd=(6XrCa}>2N*`E3IDzME6&I-Y&;(Caj`+P_dpB=5x`+!k zgOv>i%bPS!!@k1@Vq{$ilbX^bSCk}&k8?FX2+Qk%2Toc3;+_W>TyFTD8Ra8~3@vLg zxzK8N`1++GPpx=F43!8q@a<;A0Lu+8THt4YVi(pJ&Rps8?1tUWkS;f>R{}si*o7m7XR?&<8jMR9bh4*I%EXa2P4P~Zp%^D4UPA) z`KQtLWlWAzP*w(O!*|tuQ7>lLD}u{~VB(Y@Lek={Dr3&52)QxjsYX;W33(Eo%$I%O zs+O`8gd%C9a8Vtwka^~sc(K_q0gs{Ox66kEyK|Nndt7(TVde^@Z{=NqQ01k^uL_t)#tueYsD}MZacVdXV zQJ=vhk6+~PzIYN^W=AEb2;VvDc@Ix$CyQy!591y!54q=(P;xuuokMx%b!_fAU`+VOTZ%?k_HJ zXm?J#+fKJsog9xO-(UpQ8M0hys=%vXd^2aRY;xkEV_X^ zM>{h)F+`)pM+iIHQ{z))hk|r0`q%C8^MubnVNJ>oU9;>MKq{FrlkLtT6xL7_1(|h( zB(yVtQ>AKz%~8OG2Aq#n;7nlI#n7f&BT6Walj6iIJY?7$Z2n2O#@XT0CArWB>(NG#tBvV{OsinxcgeA~K=JA1UZm^+35~CvO%!G^U zhTHZmL{eXoN04sfPmM=3+nkA{r8OR{m1a~i8Vty22%$y55kgKM!Dm@C5KBC5>HvL- zWJ8z52sKY6TsujQ#1totQSx@dp1lk7-8!9i3!zR8=;-u`+_s1cow&DjN-Co|Vcd`F zuL)o6xzc2noePIFRGw^g$WDux>a^2!3acM~|7}P1a_^^qHr6uZ0@ax0jT?_9bOJ6L zRmw}=_G`?~bQrhZRi+o!)K7=dGKLwTVH`OErB_x}*^9E8`CcW*et^|5h-L1)ZR06@%!!X6ksjiS&p_W4N+6}>N^kf=GR`w(Q9XMb)VBG zDjq(4g?3@+%q;MUUwH%9?Co&;#0AzaLc5(~jj-py3|SVH4yxO(7n8JY3$qnh)|JpG z`R)b&uIjU2Ec>hlV=yQoy^lU!3TlON0xK|SE~)s03xDY0HOhX?bxW3ZY5B!}@+NM$ zX&=T2nH^3bDwEHgkVJh+jis`qMpw~^29D?02eV0YOJ%~blx$I_5irNXcG|3tzj8r+} zm5z9Ji^WKwP>>Kc?oB$17Ylg7tZ-puSoZOU^&zAq(Oy>F1Q(L@J40jZXDWBd1Rq(-6g^1dWym=;p1C8@El93gbjZ&$# z;F{}~aFu6%HYYa@v5|tKveRv|jVDSYGu?KQE7O^X+g*jR>3pi)pwBDa3QU8wWZS2& z%9LpRzcUWf9hZP{%D0U5?V6Gtl-Ni_zpIZn{yk$nOhCEK<~W5znWPk|*euO4?9)J3 zp=$yeLgeEr!3Z`eHb7V7RU#mS)T3*eKo>z>z!|8Vr;dDIyaqyup31GDY=%G($9En- z%hwLJxc-_R-@N}UPn}xBwljY5r{BeOdrUmOJPZZCa%z*hQT8qF<(^Bb>QZvT?r#b{~@3fdrSLkI`zOz+v zofz)2!V5I|!!r{#Tw`dj2+Zb&SM6@ml?tcOh`~$zka|X#(`3N)(PS}}N;?%?Q1%qU zEZ~FTrL7((UBiXt4T>BdKRuw^D|q*-y3AFlXf<6n1~Xh-h2@dqz=1hldc!=KWEge0 zroto&P2AyaYWxZ&+x}2P3gA5LJa+`kk_xM}V? z2~MYuukT(^GKonE&oKkZPT*SzNxcxJ`n3u0p&Da8rVe18+M+?27sIR#6XvBCWm!Bc z!Ei`oP*6M-HTCf=USi8(Mgv_D+QHFEyibq8P1+$b-7C0QrrVh|?N%OHQmWvf7e=&$ zM?&CeG0QhDU*^BwQ_*T$$_C#5wu8L$&ZTJe@--`~oBZ2<|0r3O@zy(+c;(SWLJ-bg z*<@4(+PRY1Nq>YZ>yBY*7?e>4zF9Ra4~FS9QVJ96uxDM()9M+7EEzM#bKN-DKX%UH z9Q@c1zlZ~S<{-fSy;-`o6Wu=Jl4QInRGycQHZIPMY=Wv=ElfI1#=XT%WIIez zraJIOg#SNZQHL{qe3|EUZA`yNnc6#LN@p*rJrJEiDFi5GCU+BG;%K|Yb(zPgLqzC^ z-hdRzJ#juyyQg(*t@Gp7pR7D^GQ-XvrJkavhzZ=V^QrqL1aqFpb~51 zF|{y~iNf}dCDR@;k>{zK#!rNK-hV!o5jN%8V9I+Y-}MB@c5?(#AO zU820oT5_8qMiZVbhCucd=8Ul4KmqiuFbb)5(y=%&?pT>b@17Hf3a zerTSn=W=FSLgO5g3EggsXO=6r`i|vGYZQ5lr_UG~$#C9r=F&0`KC{Z80iWo3Rt$eL zh_QVY;6x^Psqxp!a>L?GkC(h?Ke-iJxlLwdoe%|8^f?F5&PAoky(~J_GvASaBa_`} ztZJKlrYhgv#~Lpxv!n6#+^;aX4enfIGF4;ga|B>J&+6~Sb;SZX%QAYs7HjKudXa`s zmeEq!lE7?w5=@A3zL__8@!;VWYbjFS#ZTFgGzd$XXU-b3B3jl%T4+g^iPMn8j`7tP zvGF>8>C4o+Ymh!B19HLGnpPH5yKGA8Qe#;P1q0(*-5T-qg*A*=uB`RB<4~739^J!W zeMH$YJiYA6@`CegLq2@>jbvG1b0jco=r>&&Z5WmfXRh=aRRI^`jw|T`vxOoir0dWm zk^(`v>Ohx2`}hagyVzr<72{#7Xfhk8>PV8BW$H%0-H&9dU8Fl@Q!-uF#2d||wldqN z-grS~lY&dOhs_B%^L(f6pM9Feg&x-~8!BY6EYfLz{de`QCf`_OVk(Uz@2P9%R3BppGk&VD8Xt!;F7}hW*7*op zy|TGM<06JI!{9}k6KGq{%iCSHOgy$ini1Oc^oW{Cn<6Aux~fh+l`%P1Qs!a|dx~*I zKDgM9(Aa?=2Y+i&MxTk{NbzS27>$hkP#9X6SgQr4ElO^qSFj06p4t~`4O`k`YfV|- zs!&^_#_-CciyS@BWwbStbhLttP4XWIU z!(!-pPY@g9f>r4RCWBEc&`Nwy86%KW;^+98GvavWiqaCuMad1!wlZ2aA_H7VFc6Kl zd+&W35W5Jz8G8?rXd(#lO^(TJku^ocrqWDy{Dk<t`K7g!9Xe7iT#Kx)uXuO~b;hu*WI`RbHl^qo&{!gOX~;qKa?oGbh*h z(9eI2*WPt2|NKL*r6|%&FN{y2ovnk(2_w(hMkc?WzSyNK#wp_C&hlv6d>jomMS%%^ z%+p9tmpIE3k;q4w!YNBU@zZtxzgLIJb8e0#uUq=&s!=m$n7}v`8{IR;Fh?L8ivVp> zCj_O?6n!U3Hjc?vhpMD(zvSMQc%2R?1C6?RqjB(z1VRzH=VcPX#X2S6A_F6iTGA*) z1C!lOB&MCl9WK>r8eJV@!QA*lesisMethod('POST')) { + $sheetId = $request->request->get('sheetId'); + $sheetIdB = $request->request->get('sheetIdB'); - $result = $googleSheetsService->getSheetData($sheetId, "A1:C100"); - - $dadosEstruturados = $writeSheetsService->estruturarDados($result); + if (!$sheetId || !$sheetIdB) { + $this->addFlash('error', 'Os IDs das planilhas são obrigatórios!'); + return $this->redirectToRoute('home_page'); + } - $writeSheetsService->configureClient($credentialsPath, $sheetIdB); - $writeSheetsService->appendData("A13:AH13", $dadosEstruturados); + try { + $credentialsPath = $_ENV['GOOGLE_AUTH_CONFIG']; - return new Response("Dados organizados e escritos na planilha B!"); + $result = $googleSheetsService->getSheetData($sheetId, "A1:C100"); + + $dadosEstruturados = $writeSheetsService->estruturarDados($result); + + $writeSheetsService->configureClient($credentialsPath, $sheetIdB); + $writeSheetsService->appendData("A13:AH13", $dadosEstruturados); + + $this->addFlash('success', 'Dados organizados e escritos na planilha B com sucesso!'); + } catch (\Exception $e) { + $this->addFlash('Erro', 'Erro ao sincronizar planilhas: ' . $e->getMessage()); + } + + return $this->redirectToRoute('home_page'); + } + + return $this->render('home.html.twig'); } -} \ No newline at end of file +} diff --git a/skeleton/src/Service/GoogleSheetsService.php b/skeleton/src/Service/GoogleSheetsService.php index e86193e..476866c 100644 --- a/skeleton/src/Service/GoogleSheetsService.php +++ b/skeleton/src/Service/GoogleSheetsService.php @@ -12,7 +12,7 @@ public function getSheetData(string $sheetId): array $url = "https://docs.google.com/spreadsheets/d/{$sheetId}/gviz/tq?tqx=out:json"; - $response = file_get_contents($url); + $response = file_get_contents($url); // removendo prefixos extras add pelo Google $response = substr($response, 47, -2); diff --git a/skeleton/symfony.lock b/skeleton/symfony.lock index c69c500..73ad1f5 100644 --- a/skeleton/symfony.lock +++ b/skeleton/symfony.lock @@ -67,5 +67,21 @@ "config/packages/routing.yaml", "config/routes.yaml" ] + }, + "symfony/twig-bundle": { + "version": "7.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "cab5fd2a13a45c266d45a7d9337e28dee6272877" + }, + "files": [ + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "twig/extra-bundle": { + "version": "v3.20.0" } } diff --git a/skeleton/templates/base.html.twig b/skeleton/templates/base.html.twig new file mode 100644 index 0000000..1069c14 --- /dev/null +++ b/skeleton/templates/base.html.twig @@ -0,0 +1,16 @@ + + + + + {% block title %}Welcome!{% endblock %} + + {% block stylesheets %} + {% endblock %} + + {% block javascripts %} + {% endblock %} + + + {% block body %}{% endblock %} + + diff --git a/skeleton/templates/home.html.twig b/skeleton/templates/home.html.twig new file mode 100644 index 0000000..1d2e8b7 --- /dev/null +++ b/skeleton/templates/home.html.twig @@ -0,0 +1,45 @@ + + + + + {% block title %}Welcome{% endblock %} + + {% block stylesheets %} + + {% endblock %} + + {% block javascripts %} + {% endblock %} + +

+
+ logo + Olá, bombeiro! +
+
+ + {% block body %} +
+
+ + +
+ +
+ + +
+ +
+ + {% for message in app.flashes('success') %} +
{{ message }}
+ {% endfor %} + + {% for message in app.flashes('error') %} +
{{ message }}
+ {% endfor %} + + {% endblock %} + + \ No newline at end of file From cef596cae9c185a5f9e6e1d2dbec43168363ae68 Mon Sep 17 00:00:00 2001 From: macbook Date: Wed, 26 Feb 2025 22:29:29 -0300 Subject: [PATCH 4/5] Corrigido erros e inserido icon --- skeleton/public/images/fogo.png | Bin 0 -> 32873 bytes skeleton/src/Controller/syncController.php | 17 ++++++++++++----- skeleton/templates/home.html.twig | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 skeleton/public/images/fogo.png diff --git a/skeleton/public/images/fogo.png b/skeleton/public/images/fogo.png new file mode 100644 index 0000000000000000000000000000000000000000..68a51553906d8bf0c5c1ccfcfdda8142b5dc88b1 GIT binary patch literal 32873 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'POST')) { + + if ($request->isMethod('POST')) + { $sheetId = $request->request->get('sheetId'); $sheetIdB = $request->request->get('sheetIdB'); - if (!$sheetId || !$sheetIdB) { + if (!$sheetId || !$sheetIdB) + { $this->addFlash('error', 'Os IDs das planilhas são obrigatórios!'); return $this->redirectToRoute('home_page'); } - try { + try + { $credentialsPath = $_ENV['GOOGLE_AUTH_CONFIG']; $result = $googleSheetsService->getSheetData($sheetId, "A1:C100"); @@ -36,8 +40,11 @@ public function handleSync( $writeSheetsService->configureClient($credentialsPath, $sheetIdB); $writeSheetsService->appendData("A13:AH13", $dadosEstruturados); - $this->addFlash('success', 'Dados organizados e escritos na planilha B com sucesso!'); - } catch (\Exception $e) { + $this->addFlash('success', 'Dados sincronizados com sucesso!'); + } + + catch (\Exception $e) + { $this->addFlash('Erro', 'Erro ao sincronizar planilhas: ' . $e->getMessage()); } diff --git a/skeleton/templates/home.html.twig b/skeleton/templates/home.html.twig index 1d2e8b7..f6154c0 100644 --- a/skeleton/templates/home.html.twig +++ b/skeleton/templates/home.html.twig @@ -2,8 +2,8 @@ - {% block title %}Welcome{% endblock %} - + {% block title %}Sincronizar Planilhas{% endblock %} + {% block stylesheets %} {% endblock %} From 44e6fcf95450bebc1ea4a146a57ba73506c69468 Mon Sep 17 00:00:00 2001 From: Paulo Trentin Date: Fri, 28 Feb 2025 19:54:36 -0300 Subject: [PATCH 5/5] Adicionado git no build do container e corrigido PascalCase nos arquivos --- Dockerfile | 1 + .../src/Controller/{sheetController.php => SheetController.php} | 0 .../src/Controller/{syncController.php => SyncController.php} | 0 3 files changed, 1 insertion(+) rename skeleton/src/Controller/{sheetController.php => SheetController.php} (100%) rename skeleton/src/Controller/{syncController.php => SyncController.php} (100%) diff --git a/Dockerfile b/Dockerfile index bcc9446..d16836f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,7 @@ RUN a2enmod rewrite RUN apt-get update && apt-get install -y \ libicu-dev \ libzip-dev \ + git \ wget \ && docker-php-ext-install \ pdo_mysql \ diff --git a/skeleton/src/Controller/sheetController.php b/skeleton/src/Controller/SheetController.php similarity index 100% rename from skeleton/src/Controller/sheetController.php rename to skeleton/src/Controller/SheetController.php diff --git a/skeleton/src/Controller/syncController.php b/skeleton/src/Controller/SyncController.php similarity index 100% rename from skeleton/src/Controller/syncController.php rename to skeleton/src/Controller/SyncController.php