From 4089bb4be2a88b60fb957dd21128c1279a5bd253 Mon Sep 17 00:00:00 2001 From: richardtekula Date: Wed, 21 Jan 2026 11:32:49 +0100 Subject: [PATCH] feat: AI Kurzy module, project/service documents, services SQL import - Add AI Kurzy module with courses, participants, and registrations management - Add project documents and service documents features - Add service folders for document organization - Add SQL import queries for services from firmy.slovensko.ai - Update todo notifications and group messaging - Various API improvements and bug fixes Co-Authored-By: Claude Opus 4.5 --- SQL_QUERIES.txt | 140 + ai-kurzy-tables.md | 328 ++ package.json | 4 +- sql/01_schema_migration.sql | 230 ++ sql/02_ai_kurzy_data.sql | 97 + sql/03_cleanup_data.sql | 82 + sql/README.md | 46 + src/app.js | 2 + src/controllers/ai-kurzy.controller.js | 243 ++ .../project-document.controller.js | 88 + .../service-document.controller.js | 54 + src/controllers/service-folder.controller.js | 52 + src/controllers/todo.controller.js | 78 + .../0001_living_natasha_romanoff.sql | 193 + .../migrations/0003_add_group_last_read.sql | 8 + .../migrations/0004_add_project_documents.sql | 17 + .../0005_add_service_folders_documents.sql | 26 + src/db/migrations/0006_add_ai_kurzy.sql | 88 + .../0007_add_completed_notified_at.sql | 3 + src/db/migrations/meta/0001_snapshot.json | 3553 +++++++++++++++++ src/db/migrations/meta/_journal.json | 7 + src/db/schema.js | 115 +- src/db/seeds/ai-kurzy-csv-import.seed.js | 303 ++ src/db/seeds/ai-kurzy-import.seed.js | 292 ++ src/routes/ai-kurzy.routes.js | 232 ++ src/routes/project.routes.js | 46 + src/routes/service.routes.js | 132 +- src/routes/todo.routes.js | 12 + src/services/ai-kurzy.service.js | 414 ++ src/services/group.service.js | 110 +- src/services/message.service.js | 21 +- src/services/project-document.service.js | 166 + src/services/service-document.service.js | 166 + src/services/service-folder.service.js | 112 + src/services/todo.service.js | 89 +- ...01-18 12-55-00-1768989692442-600896980.png | Bin 0 -> 332175 bytes ...01-21 08-23-18-1768989687353-521898017.png | Bin 0 -> 7369 bytes 37 files changed, 7514 insertions(+), 35 deletions(-) create mode 100644 SQL_QUERIES.txt create mode 100644 ai-kurzy-tables.md create mode 100644 sql/01_schema_migration.sql create mode 100644 sql/02_ai_kurzy_data.sql create mode 100644 sql/03_cleanup_data.sql create mode 100644 sql/README.md create mode 100644 src/controllers/ai-kurzy.controller.js create mode 100644 src/controllers/project-document.controller.js create mode 100644 src/controllers/service-document.controller.js create mode 100644 src/controllers/service-folder.controller.js create mode 100644 src/db/migrations/0001_living_natasha_romanoff.sql create mode 100644 src/db/migrations/0003_add_group_last_read.sql create mode 100644 src/db/migrations/0004_add_project_documents.sql create mode 100644 src/db/migrations/0005_add_service_folders_documents.sql create mode 100644 src/db/migrations/0006_add_ai_kurzy.sql create mode 100644 src/db/migrations/0007_add_completed_notified_at.sql create mode 100644 src/db/migrations/meta/0001_snapshot.json create mode 100644 src/db/seeds/ai-kurzy-csv-import.seed.js create mode 100644 src/db/seeds/ai-kurzy-import.seed.js create mode 100644 src/routes/ai-kurzy.routes.js create mode 100644 src/services/ai-kurzy.service.js create mode 100644 src/services/project-document.service.js create mode 100644 src/services/service-document.service.js create mode 100644 src/services/service-folder.service.js create mode 100644 uploads/service-documents/496a2781-465f-422e-87ab-58cb54ae91c4/Screenshot from 2026-01-18 12-55-00-1768989692442-600896980.png create mode 100644 uploads/service-documents/564ae387-f2fe-4b19-bb53-f0f611f48162/Screenshot from 2026-01-21 08-23-18-1768989687353-521898017.png diff --git a/SQL_QUERIES.txt b/SQL_QUERIES.txt new file mode 100644 index 0000000..ec0afae --- /dev/null +++ b/SQL_QUERIES.txt @@ -0,0 +1,140 @@ +================================================================================ +KOMPLETNE SQL PRE COOLIFY - KOPIRUJ A PRILEP DO PSQL +================================================================================ + +-------------------------------------------------------------------------------- +CAST 1: SCHEMA MIGRATION (spusti prvy) +-------------------------------------------------------------------------------- + +DO $$ BEGIN CREATE TYPE "forma_kurzu_enum" AS ENUM('prezencne', 'online', 'hybridne'); EXCEPTION WHEN duplicate_object THEN NULL; END $$; +DO $$ BEGIN CREATE TYPE "stav_registracie_enum" AS ENUM('potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny'); EXCEPTION WHEN duplicate_object THEN NULL; END $$; +DO $$ BEGIN CREATE TYPE "typ_prilohy_enum" AS ENUM('certifikat', 'faktura', 'prihlaska', 'doklad_o_platbe', 'ine'); EXCEPTION WHEN duplicate_object THEN NULL; END $$; + +CREATE TABLE IF NOT EXISTS "chat_groups" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "created_by_id" uuid REFERENCES "users"("id") ON DELETE SET NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "chat_group_members" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "group_id" uuid NOT NULL REFERENCES "chat_groups"("id") ON DELETE CASCADE, "user_id" uuid NOT NULL REFERENCES "users"("id") ON DELETE CASCADE, "joined_at" timestamp DEFAULT now() NOT NULL, "last_read_at" timestamp DEFAULT now() NOT NULL, CONSTRAINT "chat_group_member_unique" UNIQUE("group_id","user_id")); + +CREATE TABLE IF NOT EXISTS "group_messages" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "group_id" uuid NOT NULL REFERENCES "chat_groups"("id") ON DELETE CASCADE, "sender_id" uuid REFERENCES "users"("id") ON DELETE SET NULL, "content" text NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "push_subscriptions" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "user_id" uuid NOT NULL REFERENCES "users"("id") ON DELETE CASCADE, "endpoint" text NOT NULL, "p256dh" text NOT NULL, "auth" text NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, CONSTRAINT "push_subscription_endpoint_unique" UNIQUE("user_id","endpoint")); + +CREATE TABLE IF NOT EXISTS "email_signatures" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "user_id" uuid NOT NULL UNIQUE REFERENCES "users"("id") ON DELETE CASCADE, "full_name" text, "position" text, "phone" text, "email" text, "company_name" text, "website" text, "is_enabled" boolean DEFAULT true NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "services" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "price" text NOT NULL, "description" text, "created_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "service_folders" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "name" text NOT NULL, "created_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "service_documents" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "folder_id" uuid NOT NULL REFERENCES "service_folders"("id") ON DELETE CASCADE, "file_name" text NOT NULL, "original_name" text NOT NULL, "file_path" text NOT NULL, "file_type" text NOT NULL, "file_size" integer NOT NULL, "description" text, "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, "uploaded_at" timestamp DEFAULT now() NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "company_documents" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "company_id" uuid NOT NULL REFERENCES "companies"("id") ON DELETE CASCADE, "file_name" text NOT NULL, "original_name" text NOT NULL, "file_path" text NOT NULL, "file_type" text NOT NULL, "file_size" integer NOT NULL, "description" text, "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, "uploaded_at" timestamp DEFAULT now() NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "project_documents" ("id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "project_id" uuid NOT NULL REFERENCES "projects"("id") ON DELETE CASCADE, "file_name" text NOT NULL, "original_name" text NOT NULL, "file_path" text NOT NULL, "file_type" text NOT NULL, "file_size" integer NOT NULL, "description" text, "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, "uploaded_at" timestamp DEFAULT now() NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "kurzy" ("id" serial PRIMARY KEY NOT NULL, "nazov" varchar(255) NOT NULL, "typ_kurzu" varchar(100) NOT NULL, "popis" text, "cena" numeric(10, 2) NOT NULL, "max_kapacita" integer, "aktivny" boolean DEFAULT true NOT NULL, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "ucastnici" ("id" serial PRIMARY KEY NOT NULL, "titul" varchar(50), "meno" varchar(100) NOT NULL, "priezvisko" varchar(100) NOT NULL, "email" varchar(255) NOT NULL UNIQUE, "telefon" varchar(50), "firma" varchar(255), "mesto" varchar(100), "ulica" varchar(255), "psc" varchar(10), "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "registracie" ("id" serial PRIMARY KEY NOT NULL, "kurz_id" integer NOT NULL REFERENCES "kurzy"("id") ON DELETE CASCADE, "ucastnik_id" integer NOT NULL REFERENCES "ucastnici"("id") ON DELETE CASCADE, "datum_od" date, "datum_do" date, "forma_kurzu" "forma_kurzu_enum" DEFAULT 'prezencne' NOT NULL, "pocet_ucastnikov" integer DEFAULT 1 NOT NULL, "faktura_cislo" varchar(100), "faktura_vystavena" boolean DEFAULT false NOT NULL, "zaplatene" boolean DEFAULT false NOT NULL, "stav" "stav_registracie_enum" DEFAULT 'registrovany' NOT NULL, "poznamka" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL); + +CREATE TABLE IF NOT EXISTS "prilohy" ("id" serial PRIMARY KEY NOT NULL, "registracia_id" integer NOT NULL REFERENCES "registracie"("id") ON DELETE CASCADE, "nazov_suboru" varchar(255) NOT NULL, "typ_prilohy" "typ_prilohy_enum" DEFAULT 'ine' NOT NULL, "cesta_k_suboru" varchar(500) NOT NULL, "mime_type" varchar(100), "velkost_suboru" bigint, "popis" text, "created_at" timestamp with time zone DEFAULT now() NOT NULL, "updated_at" timestamp with time zone DEFAULT now() NOT NULL); + +CREATE UNIQUE INDEX IF NOT EXISTS "ucastnici_email_idx" ON "ucastnici" USING btree ("email"); +CREATE UNIQUE INDEX IF NOT EXISTS "registracie_kurz_ucastnik_idx" ON "registracie" USING btree ("kurz_id","ucastnik_id"); + +DO $$ BEGIN ALTER TABLE "todos" ADD COLUMN "completed_notified_at" timestamp; EXCEPTION WHEN duplicate_column THEN NULL; END $$; +ALTER TABLE "personal_contacts" ALTER COLUMN "phone" DROP NOT NULL; + +-------------------------------------------------------------------------------- +CAST 2: AI KURZY DATA IMPORT (spusti po schema migration) +-------------------------------------------------------------------------------- + +DELETE FROM prilohy; +DELETE FROM registracie; +DELETE FROM ucastnici; +DELETE FROM kurzy; + +ALTER SEQUENCE kurzy_id_seq RESTART WITH 1; +ALTER SEQUENCE ucastnici_id_seq RESTART WITH 1; +ALTER SEQUENCE registracie_id_seq RESTART WITH 1; + +INSERT INTO kurzy (nazov, typ_kurzu, cena, aktivny) VALUES ('AI 1+2 (2 dni) - 290€', 'AI', 290.00, true), ('AI 1 (1 deň) - 150€', 'AI', 150.00, true), ('AI 2 (1 deň) - 150€', 'AI', 150.00, true), ('AI v SEO (1 deň) - 150€', 'SEO', 150.00, true), ('AI I+II Marec 2026', 'AI', 290.00, true), ('AI I+II Apríl 2026', 'AI', 290.00, true); + +INSERT INTO ucastnici (titul, meno, priezvisko, email, telefon, firma, mesto, ulica, psc) VALUES (NULL, 'Martin', 'Sovák', 'info@energium.sk', '0918986172', 'energium sro', 'Bratislava', 'Topolcianska 5', '85105'), (NULL, 'Michal', 'Farkaš', 'michal.farkas83@gmail.com', '0911209122', 'SLOVWELD', 'Dunajska Lužná', 'Mandlova 30', '90042'), (NULL, 'Alena', 'Šranková', 'alena.srankova@gmail.com', '0917352580', NULL, 'Bratislava', 'Šándorova 1', '82103'), (NULL, 'Katarina', 'Tomaníková', 'k.tomanikova@riseday.net', '0948 070 611', 'Classica Shipping Limited', 'Bratislava', 'Keltska 104', '85110'), (NULL, 'Róbert', 'Brišák', 'robert.brisak@ss-nizna.sk', '0910583883', 'Spojená škola, Hattalova 471, 02743 Nižná', 'Nižná', 'Hattalova 471', '02743'), (NULL, 'Marián', 'Bača', 'baca.marian@gmail.com', '0907994126', NULL, 'Petrovany', '8', '08253'), ('Mgr. MBA', 'Nikola', 'Horáčková', 'nikolahorackova11@gmail.com', '0918482184', NULL, 'Zákopčie', 'Zákopčie stred 12', '023 11'), (NULL, 'Tomáš', 'Kupec', 'kupec.tom@gmail.com', '0911030190', 'Jamajka', 'Liptovská Sielnica', NULL, '032 23'), (NULL, 'Anton', 'Považský', 'anton.povazsky@example.com', NULL, NULL, NULL, NULL, NULL); + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'FA 2026020' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'info@energium.sk'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'online', 1, true, true, 'registrovany', NULL FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'alena.srankova@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, true, 'registrovany', 'presunuta z oktobra, chce až január' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'k.tomanikova@riseday.net'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'FA 2026019' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'robert.brisak@ss-nizna.sk'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, false, false, 'potencialny', 'vzdelávací poukaz' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'nikolahorackova11@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-02', '2026-02-02', 'online', 1, true, true, 'registrovany', 'Fa 2025 338, Súhlasil so zmeneným termínom' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1 (1 deň) - 150€' AND u.email = 'michal.farkas83@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-03', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'Fa Gablasova' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 2 (1 deň) - 150€' AND u.email = 'baca.marian@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-13', '2026-02-13', 'prezencne', 1, true, false, 'registrovany', 'FA 2026021' FROM kurzy k, ucastnici u WHERE k.nazov = 'AI v SEO (1 deň) - 150€' AND u.email = 'kupec.tom@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) SELECT k.id, u.id, '2026-02-13', '2026-02-13', 'prezencne', 1, true, false, 'registrovany', NULL FROM kurzy k, ucastnici u WHERE k.nazov = 'AI v SEO (1 deň) - 150€' AND u.email = 'anton.povazsky@example.com'; + +SELECT 'Kurzy:' as info, COUNT(*) as pocet FROM kurzy; +SELECT 'Ucastnici:' as info, COUNT(*) as pocet FROM ucastnici; +SELECT 'Registracie:' as info, COUNT(*) as pocet FROM registracie; + +-------------------------------------------------------------------------------- +CAST 3: SERVICES DATA IMPORT (sluzby z firmy.slovensko.ai) +-------------------------------------------------------------------------------- + +DELETE FROM service_documents; +DELETE FROM service_folders; +DELETE FROM services; + +INSERT INTO services (name, price, description) VALUES +('AI Hlasový Agent', 'od 149€/mesiac', 'Virtuálny telefónny operátor pre automatizáciu prichádzajúcich hovorov. Dostupný 24/7, spracováva rezervácie, poskytuje informácie, zbiera kontaktné údaje. Balíky: Silver (149€/mes, 500 min), Gold (399€/mes, 1500 min), VIP (899€/mes, 5000 min), Enterprise (individuálne).'), +('AI Server', 'od 5 000€', 'Výkonné servery optimalizované pre AI úlohy. Dáta zostávajú pod vašou kontrolou. Bronze (od 5000€, 24 jadier, 64GB RAM), Silver (od 15000€, 64 jadier, 256GB RAM), Gold (od 40000€, 128+ jadier, 512GB RAM), Platinum (od 100000€, 256+ jadier, 1TB RAM).'), +('AI Automatizácia procesov', 'individuálne', 'Zefektívnite firemné procesy pomocou AI riešení na mieru. Analýza workflow, návrh riešenia, vývoj prototypu, testovanie s reálnymi dátami, nasadenie a optimalizácia. Zníženie chýb, nákladov a zlepšenie výkonu.'), +('AI Chatbot', 'individuálne', 'Automatizovaná komunikácia so zákazníkmi pomocou ChatGPT a Dialogflow. Dostupný 24/7, integrácia s WhatsApp, Instagram a inými platformami. Analýza dokumentov, základné právne poradenstvo, administratívna automatizácia.'), +('AI Školenia', 'od 150€/osoba', 'Firemné školenia zamerané na praktické AI zručnosti. AI I: 150€ (1 deň), AI I+II: 290€ (2 dni). Možnosť prispôsobenia programu podľa odvetvia. Formát: prezenčne, online alebo u klienta.'), +('E-mailový AI Agent', 'individuálne', 'Inteligentný systém na automatizáciu spracovania e-mailov. Automatická analýza, generovanie odpovedí, kategorizácia, smerovanie a tvorba súhrnov. Podpora viacerých schránok s prispôsobiteľnými pravidlami automatizácie.'), +('E-shop (AI Hardware)', 'od 4 490€', 'Profesionálne grafické karty a servery optimalizované pre AI. Nvidia Tesla A100 40GB (od 4490€), A100 64GB (od 9900€), A100 80GB (od 12500€), RTX PRO 6000 Blackwell (12900€). Servery na vyžiadanie.'), +('AI Konzultácie', 'od 0€', 'Bezplatná 30-minútová konzultácia. Telefónna konzultácia: 0-80€/hod, Online/osobná: 70-80€/hod, On-site (do 50km vrátane): 80-100€/hod. AI poradenstvo, odporúčanie nástrojov, integrácia a pilotné nasadenie.'); + +SELECT 'Services imported:' as info, COUNT(*) as count FROM services; + +-------------------------------------------------------------------------------- +CAST 4: CLEANUP (VOLITELNE - MAZE DATA!) +-------------------------------------------------------------------------------- + +-- Pozor: Toto zmaze vsetky data okrem services (tie sa importuju v CAST 3)! + +DELETE FROM todo_users; +DELETE FROM todos; +DELETE FROM company_remind; +DELETE FROM company_users; +DELETE FROM company_documents; +DELETE FROM companies; +DELETE FROM project_users; +DELETE FROM project_documents; +DELETE FROM projects; +DELETE FROM notes; +DELETE FROM time_entries; +DELETE FROM timesheets; +DELETE FROM event_users; +DELETE FROM events; +DELETE FROM messages; +DELETE FROM group_messages; +DELETE FROM chat_group_members; +DELETE FROM chat_groups; +DELETE FROM service_documents; +DELETE FROM service_folders; +DELETE FROM services; +DELETE FROM push_subscriptions; +DELETE FROM email_signatures; + +SELECT 'Cleanup hotovo!' as status; + +================================================================================ +KONIEC +================================================================================ diff --git a/ai-kurzy-tables.md b/ai-kurzy-tables.md new file mode 100644 index 0000000..ea5333d --- /dev/null +++ b/ai-kurzy-tables.md @@ -0,0 +1,328 @@ +# AI Kurzy - Drizzle Schema + +**Databázová schéma pre Node.js backend s Drizzle ORM** + +--- + +## 🗂️ Štruktúra Databázy + +**4 tabuľky:** + +``` +kurzy ←──┐ + │ + ├─→ registracie ←─→ ucastnici + │ │ + └───────────┴─→ prilohy +``` + +- **`kurzy`** - definície kurzov a termínov +- **`ucastnici`** - osobné údaje účastníkov +- **`registracie`** - väzba many-to-many (kto-kde-kedy + fakturácia) +- **`prilohy`** - dokumenty (certifikáty, faktúry) pripnuté k registráciám + +--- + +## 📄 Schéma: `src/db/schema.ts` + +```typescript +import { relations } from 'drizzle-orm'; +import { + pgTable, + serial, + varchar, + text, + numeric, + date, + integer, + boolean, + timestamp, + pgEnum, + bigint, + uniqueIndex, +} from 'drizzle-orm/pg-core'; + +// ============================================================================ +// ENUM DEFINÍCIE +// ============================================================================ + +export const formaKurzuEnum = pgEnum('forma_kurzu_enum', [ + 'prezenčne', + 'online', + 'hybridne', +]); + +export const stavRegistracieEnum = pgEnum('stav_registracie_enum', [ + 'potencialny', // Potenciálny záujemca + 'registrovany', // Registrovaný + 'potvrdeny', // Potvrdená účasť + 'absolvoval', // Absolvoval kurz (odškolené) + 'zruseny', // Zrušená registrácia +]); + +export const typPrilohyEnum = pgEnum('typ_prilohy_enum', [ + 'certifikat', + 'faktura', + 'prihlaska', + 'doklad_o_platbe', + 'ine', +]); + +// ============================================================================ +// TABUĽKA: kurzy +// ============================================================================ + +export const kurzy = pgTable('kurzy', { + id: serial('id').primaryKey(), + + // Základné informácie + nazov: varchar('nazov', { length: 255 }).notNull(), + typKurzu: varchar('typ_kurzu', { length: 100 }).notNull(), // "AI 1+2", "AI 1", "SEO" + popis: text('popis'), + + // Cenník + cena: numeric('cena', { precision: 10, scale: 2 }).notNull(), + + // Termín kurzu + datumOd: date('datum_od', { mode: 'date' }).notNull(), + datumDo: date('datum_do', { mode: 'date' }).notNull(), + + // Kapacita + maxKapacita: integer('max_kapacita'), // NULL = neobmedzené + + // Stav kurzu + aktivny: boolean('aktivny').default(true).notNull(), + + // Metadata + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}); + +// ============================================================================ +// TABUĽKA: ucastnici +// ============================================================================ + +export const ucastnici = pgTable( + 'ucastnici', + { + id: serial('id').primaryKey(), + + // Osobné údaje + titul: varchar('titul', { length: 50 }), + meno: varchar('meno', { length: 100 }).notNull(), + priezvisko: varchar('priezvisko', { length: 100 }).notNull(), + + // Kontaktné údaje + email: varchar('email', { length: 255 }).notNull().unique(), + telefon: varchar('telefon', { length: 50 }), + + // Firemné údaje + firma: varchar('firma', { length: 255 }), + + // Adresa + mesto: varchar('mesto', { length: 100 }), + ulica: varchar('ulica', { length: 255 }), + psc: varchar('psc', { length: 10 }), + + // Metadata + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), + }, + (table) => ({ + emailIdx: uniqueIndex('ucastnici_email_idx').on(table.email), + }) +); + +// ============================================================================ +// TABUĽKA: registracie +// ============================================================================ + +export const registracie = pgTable( + 'registracie', + { + id: serial('id').primaryKey(), + + // Foreign keys + kurzId: integer('kurz_id') + .notNull() + .references(() => kurzy.id, { onDelete: 'cascade' }), + ucastnikId: integer('ucastnik_id') + .notNull() + .references(() => ucastnici.id, { onDelete: 'cascade' }), + + // Forma účasti + formaKurzu: formaKurzuEnum('forma_kurzu').default('prezenčne').notNull(), + + // Počet účastníkov (ak firma prihlasuje viacerých) + pocetUcastnikov: integer('pocet_ucastnikov').default(1).notNull(), + + // Fakturácia + fakturaCislo: varchar('faktura_cislo', { length: 100 }), + fakturaVystavena: boolean('faktura_vystavena').default(false).notNull(), + zaplatene: boolean('zaplatene').default(false).notNull(), + + // Stav registrácie + stav: stavRegistracieEnum('stav').default('registrovany').notNull(), + + // Poznámky + poznamka: text('poznamka'), + + // Metadata + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), + }, + (table) => ({ + // Unikátne obmedzenie: jeden účastník sa nemôže prihlásiť na ten istý kurz viackrát + uniqRegistracia: uniqueIndex('registracie_kurz_ucastnik_idx').on( + table.kurzId, + table.ucastnikId + ), + }) +); + +// ============================================================================ +// TABUĽKA: prilohy +// ============================================================================ + +export const prilohy = pgTable('prilohy', { + id: serial('id').primaryKey(), + + // Foreign key + registraciaId: integer('registracia_id') + .notNull() + .references(() => registracie.id, { onDelete: 'cascade' }), + + // Informácie o súbore + nazovSuboru: varchar('nazov_suboru', { length: 255 }).notNull(), + typPrilohy: typPrilohyEnum('typ_prilohy').default('ine').notNull(), + + // Úložisko + cestaKSuboru: varchar('cesta_k_suboru', { length: 500 }).notNull(), + mimeType: varchar('mime_type', { length: 100 }), + velkostSuboru: bigint('velkost_suboru', { mode: 'number' }), // veľkosť v bytoch + + // Popis + popis: text('popis'), + + // Metadata + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}); + +// ============================================================================ +// RELAČNÉ VÄZBY (Relations) +// ============================================================================ + +// Kurzy Relations +export const kurzyRelations = relations(kurzy, ({ many }) => ({ + registracie: many(registracie), +})); + +// Účastníci Relations +export const ucastniciRelations = relations(ucastnici, ({ many }) => ({ + registracie: many(registracie), +})); + +// Registrácie Relations +export const registracieRelations = relations(registracie, ({ one, many }) => ({ + kurz: one(kurzy, { + fields: [registracie.kurzId], + references: [kurzy.id], + }), + ucastnik: one(ucastnici, { + fields: [registracie.ucastnikId], + references: [ucastnici.id], + }), + prilohy: many(prilohy), +})); + +// Prílohy Relations +export const prilohyRelations = relations(prilohy, ({ one }) => ({ + registracia: one(registracie, { + fields: [prilohy.registraciaId], + references: [registracie.id], + }), +})); +``` + +--- + +## 📘 TypeScript Typy + +```typescript +import { InferSelectModel, InferInsertModel } from 'drizzle-orm'; +import { kurzy, ucastnici, registracie, prilohy } from './schema'; + +// SELECT typy (čítanie z DB) +export type Kurz = InferSelectModel; +export type Ucastnik = InferSelectModel; +export type Registracia = InferSelectModel; +export type Priloha = InferSelectModel; + +// INSERT typy (vkladanie do DB) +export type NewKurz = InferInsertModel; +export type NewUcastnik = InferInsertModel; +export type NewRegistracia = InferInsertModel; +export type NewPriloha = InferInsertModel; +``` + +--- + +## 🔗 Vysvetlenie Relácií + +### **1:N (One-to-Many)** +```typescript +// Jeden kurz má VIAC registrácií +kurzyRelations = relations(kurzy, ({ many }) => ({ + registracie: many(registracie), +})); +``` + +### **N:1 (Many-to-One)** +```typescript +// Viac registrácií patrí k JEDNÉMU kurzu +registracieRelations = relations(registracie, ({ one }) => ({ + kurz: one(kurzy, { + fields: [registracie.kurzId], // FK + references: [kurzy.id], // PK + }), +})); +``` + +### **N:M (Many-to-Many)** +``` +kurzy ↔ registracie ↔ ucastnici +- Jeden kurz má viac účastníkov +- Jeden účastník môže ísť na viac kurzov +- Junction table: registracie +``` + +--- + +## 💡 Použitie + +### Základný query s relačnými dátami + +```typescript +import { db } from './db'; +import { kurzy } from './db/schema'; +import { eq } from 'drizzle-orm'; + +// Kurz s registráciami a účastníkmi +const kurzDetail = await db.query.kurzy.findFirst({ + where: eq(kurzy.id, 1), + with: { + registracie: { + with: { + ucastnik: true, + prilohy: true, + }, + }, + }, +}); +``` + +--- + +**Vytvorené:** 2026-01-20 +**Stack:** Node.js + Drizzle ORM + PostgreSQL + TypeScript diff --git a/package.json b/package.json index ff4f2b9..3608889 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "db:push": "drizzle-kit push", "db:studio": "drizzle-kit studio", "db:seed": "node src/db/seeds/admin.seed.js", - "db:seed:testuser": "node src/db/seeds/testuser.seed.js" + "db:seed:testuser": "node src/db/seeds/testuser.seed.js", + "db:import:ai-kurzy": "node src/db/seeds/ai-kurzy-import.seed.js", + "db:import:ai-kurzy-csv": "node src/db/seeds/ai-kurzy-csv-import.seed.js" }, "keywords": [], "author": "Richard Tekula", diff --git a/sql/01_schema_migration.sql b/sql/01_schema_migration.sql new file mode 100644 index 0000000..777b197 --- /dev/null +++ b/sql/01_schema_migration.sql @@ -0,0 +1,230 @@ +-- ============================================================ +-- COMPLETE SCHEMA MIGRATION FOR COOLIFY +-- Run this first to update the database schema +-- ============================================================ + +-- Create ENUMs for AI Kurzy (if not exist) +DO $$ BEGIN + CREATE TYPE "forma_kurzu_enum" AS ENUM('prezencne', 'online', 'hybridne'); +EXCEPTION WHEN duplicate_object THEN NULL; +END $$; + +DO $$ BEGIN + CREATE TYPE "stav_registracie_enum" AS ENUM('potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny'); +EXCEPTION WHEN duplicate_object THEN NULL; +END $$; + +DO $$ BEGIN + CREATE TYPE "typ_prilohy_enum" AS ENUM('certifikat', 'faktura', 'prihlaska', 'doklad_o_platbe', 'ine'); +EXCEPTION WHEN duplicate_object THEN NULL; +END $$; + +-- ============================================================ +-- NEW TABLES +-- ============================================================ + +-- Chat Groups +CREATE TABLE IF NOT EXISTS "chat_groups" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "created_by_id" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); + +-- Chat Group Members +CREATE TABLE IF NOT EXISTS "chat_group_members" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "group_id" uuid NOT NULL REFERENCES "chat_groups"("id") ON DELETE CASCADE, + "user_id" uuid NOT NULL REFERENCES "users"("id") ON DELETE CASCADE, + "joined_at" timestamp DEFAULT now() NOT NULL, + "last_read_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "chat_group_member_unique" UNIQUE("group_id","user_id") +); + +-- Group Messages +CREATE TABLE IF NOT EXISTS "group_messages" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "group_id" uuid NOT NULL REFERENCES "chat_groups"("id") ON DELETE CASCADE, + "sender_id" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "content" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); + +-- Push Subscriptions +CREATE TABLE IF NOT EXISTS "push_subscriptions" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL REFERENCES "users"("id") ON DELETE CASCADE, + "endpoint" text NOT NULL, + "p256dh" text NOT NULL, + "auth" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "push_subscription_endpoint_unique" UNIQUE("user_id","endpoint") +); + +-- Email Signatures +CREATE TABLE IF NOT EXISTS "email_signatures" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL UNIQUE REFERENCES "users"("id") ON DELETE CASCADE, + "full_name" text, + "position" text, + "phone" text, + "email" text, + "company_name" text, + "website" text, + "is_enabled" boolean DEFAULT true NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); + +-- Services +CREATE TABLE IF NOT EXISTS "services" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "price" text NOT NULL, + "description" text, + "created_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); + +-- Service Folders +CREATE TABLE IF NOT EXISTS "service_folders" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "created_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); + +-- Service Documents +CREATE TABLE IF NOT EXISTS "service_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "folder_id" uuid NOT NULL REFERENCES "service_folders"("id") ON DELETE CASCADE, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); + +-- Company Documents +CREATE TABLE IF NOT EXISTS "company_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "company_id" uuid NOT NULL REFERENCES "companies"("id") ON DELETE CASCADE, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); + +-- Project Documents +CREATE TABLE IF NOT EXISTS "project_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "project_id" uuid NOT NULL REFERENCES "projects"("id") ON DELETE CASCADE, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid REFERENCES "users"("id") ON DELETE SET NULL, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); + +-- ============================================================ +-- AI KURZY TABLES +-- ============================================================ + +-- Kurzy (Courses) - without dates (dates are per registration) +CREATE TABLE IF NOT EXISTS "kurzy" ( + "id" serial PRIMARY KEY NOT NULL, + "nazov" varchar(255) NOT NULL, + "typ_kurzu" varchar(100) NOT NULL, + "popis" text, + "cena" numeric(10, 2) NOT NULL, + "max_kapacita" integer, + "aktivny" boolean DEFAULT true NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); + +-- Ucastnici (Participants) +CREATE TABLE IF NOT EXISTS "ucastnici" ( + "id" serial PRIMARY KEY NOT NULL, + "titul" varchar(50), + "meno" varchar(100) NOT NULL, + "priezvisko" varchar(100) NOT NULL, + "email" varchar(255) NOT NULL UNIQUE, + "telefon" varchar(50), + "firma" varchar(255), + "mesto" varchar(100), + "ulica" varchar(255), + "psc" varchar(10), + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); + +CREATE UNIQUE INDEX IF NOT EXISTS "ucastnici_email_idx" ON "ucastnici" USING btree ("email"); + +-- Registracie (Registrations) - with dates +CREATE TABLE IF NOT EXISTS "registracie" ( + "id" serial PRIMARY KEY NOT NULL, + "kurz_id" integer NOT NULL REFERENCES "kurzy"("id") ON DELETE CASCADE, + "ucastnik_id" integer NOT NULL REFERENCES "ucastnici"("id") ON DELETE CASCADE, + "datum_od" date, + "datum_do" date, + "forma_kurzu" "forma_kurzu_enum" DEFAULT 'prezencne' NOT NULL, + "pocet_ucastnikov" integer DEFAULT 1 NOT NULL, + "faktura_cislo" varchar(100), + "faktura_vystavena" boolean DEFAULT false NOT NULL, + "zaplatene" boolean DEFAULT false NOT NULL, + "stav" "stav_registracie_enum" DEFAULT 'registrovany' NOT NULL, + "poznamka" text, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); + +CREATE UNIQUE INDEX IF NOT EXISTS "registracie_kurz_ucastnik_idx" ON "registracie" USING btree ("kurz_id","ucastnik_id"); + +-- Prilohy (Attachments) +CREATE TABLE IF NOT EXISTS "prilohy" ( + "id" serial PRIMARY KEY NOT NULL, + "registracia_id" integer NOT NULL REFERENCES "registracie"("id") ON DELETE CASCADE, + "nazov_suboru" varchar(255) NOT NULL, + "typ_prilohy" "typ_prilohy_enum" DEFAULT 'ine' NOT NULL, + "cesta_k_suboru" varchar(500) NOT NULL, + "mime_type" varchar(100), + "velkost_suboru" bigint, + "popis" text, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); + +-- ============================================================ +-- ALTER EXISTING TABLES (add new columns) +-- ============================================================ + +-- Add completed_notified_at to todos (if not exists) +DO $$ BEGIN + ALTER TABLE "todos" ADD COLUMN "completed_notified_at" timestamp; +EXCEPTION WHEN duplicate_column THEN NULL; +END $$; + +-- Make phone nullable in personal_contacts (if needed) +ALTER TABLE "personal_contacts" ALTER COLUMN "phone" DROP NOT NULL; + +-- ============================================================ +-- DONE +-- ============================================================ +SELECT 'Schema migration completed successfully!' as status; diff --git a/sql/02_ai_kurzy_data.sql b/sql/02_ai_kurzy_data.sql new file mode 100644 index 0000000..d36f9ea --- /dev/null +++ b/sql/02_ai_kurzy_data.sql @@ -0,0 +1,97 @@ +-- ============================================================ +-- AI KURZY DATA IMPORT +-- Run this after schema migration to import course data +-- ============================================================ + +-- Clear existing AI Kurzy data (optional - remove if you want to keep existing data) +DELETE FROM prilohy; +DELETE FROM registracie; +DELETE FROM ucastnici; +DELETE FROM kurzy; + +-- Reset sequences +ALTER SEQUENCE kurzy_id_seq RESTART WITH 1; +ALTER SEQUENCE ucastnici_id_seq RESTART WITH 1; +ALTER SEQUENCE registracie_id_seq RESTART WITH 1; +ALTER SEQUENCE prilohy_id_seq RESTART WITH 1; + +-- ============================================================ +-- INSERT COURSES (without dates - dates are per registration) +-- ============================================================ + +INSERT INTO kurzy (nazov, typ_kurzu, cena, aktivny) VALUES +('AI 1+2 (2 dni) - 290€', 'AI', 290.00, true), +('AI 1 (1 deň) - 150€', 'AI', 150.00, true), +('AI 2 (1 deň) - 150€', 'AI', 150.00, true), +('AI v SEO (1 deň) - 150€', 'SEO', 150.00, true), +('AI I+II Marec 2026', 'AI', 290.00, true), +('AI I+II Apríl 2026', 'AI', 290.00, true); + +-- ============================================================ +-- INSERT PARTICIPANTS +-- ============================================================ + +INSERT INTO ucastnici (titul, meno, priezvisko, email, telefon, firma, mesto, ulica, psc) VALUES +(NULL, 'Martin', 'Sovák', 'info@energium.sk', '0918986172', 'energium sro', 'Bratislava', 'Topolcianska 5', '85105'), +(NULL, 'Michal', 'Farkaš', 'michal.farkas83@gmail.com', '0911209122', 'SLOVWELD', 'Dunajska Lužná', 'Mandlova 30', '90042'), +(NULL, 'Alena', 'Šranková', 'alena.srankova@gmail.com', '0917352580', NULL, 'Bratislava', 'Šándorova 1', '82103'), +(NULL, 'Katarina', 'Tomaníková', 'k.tomanikova@riseday.net', '0948 070 611', 'Classica Shipping Limited', 'Bratislava', 'Keltska 104', '85110'), +(NULL, 'Róbert', 'Brišák', 'robert.brisak@ss-nizna.sk', '0910583883', 'Spojená škola, Hattalova 471, 02743 Nižná', 'Nižná', 'Hattalova 471', '02743'), +(NULL, 'Marián', 'Bača', 'baca.marian@gmail.com', '0907994126', NULL, 'Petrovany', '8', '08253'), +('Mgr. MBA', 'Nikola', 'Horáčková', 'nikolahorackova11@gmail.com', '0918482184', NULL, 'Zákopčie', 'Zákopčie stred 12', '023 11'), +(NULL, 'Tomáš', 'Kupec', 'kupec.tom@gmail.com', '0911030190', 'Jamajka', 'Liptovská Sielnica', NULL, '032 23'), +(NULL, 'Anton', 'Považský', 'anton.povazsky@example.com', NULL, NULL, NULL, NULL, NULL); + +-- ============================================================ +-- INSERT REGISTRATIONS (with dates) +-- ============================================================ + +-- AI 1+2 (2 dni) - Februar 2026 +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'FA 2026020' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'info@energium.sk'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'online', 1, true, true, 'registrovany', NULL +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'alena.srankova@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, true, 'registrovany', 'presunuta z oktobra, chce až január' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'k.tomanikova@riseday.net'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'FA 2026019' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'robert.brisak@ss-nizna.sk'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-03', 'prezencne', 1, false, false, 'potencialny', 'vzdelávací poukaz' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1+2 (2 dni) - 290€' AND u.email = 'nikolahorackova11@gmail.com'; + +-- AI 1 (1 den) - Februar 2026 +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-02', '2026-02-02', 'online', 1, true, true, 'registrovany', 'Fa 2025 338, Súhlasil so zmeneným termínom' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 1 (1 deň) - 150€' AND u.email = 'michal.farkas83@gmail.com'; + +-- AI 2 (1 den) - Februar 2026 +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-03', '2026-02-03', 'prezencne', 1, true, false, 'registrovany', 'Fa Gablasova' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI 2 (1 deň) - 150€' AND u.email = 'baca.marian@gmail.com'; + +-- AI v SEO - Februar 2026 +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-13', '2026-02-13', 'prezencne', 1, true, false, 'registrovany', 'FA 2026021' +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI v SEO (1 deň) - 150€' AND u.email = 'kupec.tom@gmail.com'; + +INSERT INTO registracie (kurz_id, ucastnik_id, datum_od, datum_do, forma_kurzu, pocet_ucastnikov, faktura_vystavena, zaplatene, stav, poznamka) +SELECT k.id, u.id, '2026-02-13', '2026-02-13', 'prezencne', 1, true, false, 'registrovany', NULL +FROM kurzy k, ucastnici u WHERE k.nazov = 'AI v SEO (1 deň) - 150€' AND u.email = 'anton.povazsky@example.com'; + +-- ============================================================ +-- VERIFY DATA +-- ============================================================ + +SELECT 'Courses imported:' as info, COUNT(*) as count FROM kurzy; +SELECT 'Participants imported:' as info, COUNT(*) as count FROM ucastnici; +SELECT 'Registrations imported:' as info, COUNT(*) as count FROM registracie; + +SELECT 'AI Kurzy data import completed successfully!' as status; diff --git a/sql/03_cleanup_data.sql b/sql/03_cleanup_data.sql new file mode 100644 index 0000000..45f5bfc --- /dev/null +++ b/sql/03_cleanup_data.sql @@ -0,0 +1,82 @@ +-- ============================================================ +-- CLEANUP DATA - Clear test/development data +-- WARNING: This will DELETE data! Use with caution! +-- ============================================================ + +-- ============================================================ +-- OPTION 1: SOFT CLEANUP (keeps structure, removes data) +-- ============================================================ + +-- Clear Todos and related +DELETE FROM todo_users; +DELETE FROM todos; + +-- Clear Companies and related +DELETE FROM company_remind; +DELETE FROM company_users; +DELETE FROM company_documents; +DELETE FROM companies; + +-- Clear Projects and related +DELETE FROM project_users; +DELETE FROM project_documents; +DELETE FROM projects; + +-- Clear Notes +DELETE FROM notes; + +-- Clear Time Entries +DELETE FROM time_entries; + +-- Clear Timesheets +DELETE FROM timesheets; + +-- Clear Events and related +DELETE FROM event_users; +DELETE FROM events; + +-- Clear Messages (both direct and group) +DELETE FROM messages; +DELETE FROM group_messages; +DELETE FROM chat_group_members; +DELETE FROM chat_groups; + +-- Clear Services +DELETE FROM service_documents; +DELETE FROM service_folders; +DELETE FROM services; + +-- Clear Email related (contacts, emails) - BE CAREFUL +-- DELETE FROM emails; +-- DELETE FROM contacts; + +-- Clear Push subscriptions +DELETE FROM push_subscriptions; + +-- Clear Email signatures +DELETE FROM email_signatures; + +-- ============================================================ +-- OPTION 2: RESET SEQUENCES (optional) +-- ============================================================ + +-- If you have serial IDs and want to reset them: +-- ALTER SEQUENCE todos_id_seq RESTART WITH 1; +-- etc. + +-- ============================================================ +-- VERIFY CLEANUP +-- ============================================================ + +SELECT 'Cleanup results:' as info; +SELECT 'Todos:' as table_name, COUNT(*) as remaining FROM todos; +SELECT 'Companies:' as table_name, COUNT(*) as remaining FROM companies; +SELECT 'Projects:' as table_name, COUNT(*) as remaining FROM projects; +SELECT 'Notes:' as table_name, COUNT(*) as remaining FROM notes; +SELECT 'Events:' as table_name, COUNT(*) as remaining FROM events; +SELECT 'Messages:' as table_name, COUNT(*) as remaining FROM messages; +SELECT 'Chat Groups:' as table_name, COUNT(*) as remaining FROM chat_groups; +SELECT 'Time Entries:' as table_name, COUNT(*) as remaining FROM time_entries; +SELECT 'Services:' as table_name, COUNT(*) as remaining FROM services; + +SELECT 'Cleanup completed!' as status; diff --git a/sql/README.md b/sql/README.md new file mode 100644 index 0000000..e065fec --- /dev/null +++ b/sql/README.md @@ -0,0 +1,46 @@ +# SQL Migration Scripts + +## Pouzitie na Coolify + +### 1. Pripojenie k databaze cez terminal + +```bash +# Na Coolify serveri najdi PostgreSQL container a pripoj sa +docker exec -it psql -U -d + +# Alebo ak mas pristup cez SSH: +psql -h localhost -U -d +``` + +### 2. Poradie spustenia scriptov + +**DOLEZITE: Spusti scripty v tomto poradi!** + +```sql +-- 1. Najprv schema migration (vytvori nove tabulky a stlpce) +\i /path/to/01_schema_migration.sql + +-- 2. Potom AI Kurzy data (vlozi kurzy a ucastnikov) +\i /path/to/02_ai_kurzy_data.sql + +-- 3. Volitelne: Cleanup existujucich dat (POZOR - maze data!) +\i /path/to/03_cleanup_data.sql +``` + +### 3. Alternativne - copy/paste + +Mozes tiez otvorit subory a copy/paste obsah priamo do psql terminalu. + +### Popis suborov + +| Subor | Popis | +|-------|-------| +| `01_schema_migration.sql` | Vytvori vsetky nove tabulky (chat groups, push notifications, AI kurzy, atd.) a prida nove stlpce do existujucich tabuliek | +| `02_ai_kurzy_data.sql` | Importuje kurzy a ucastnikov z CSV - 6 kurzov, 9 ucastnikov | +| `03_cleanup_data.sql` | Vymaze test data z todos, companies, projects, notes, events, messages | + +### Poznamky + +- `01_schema_migration.sql` je bezpecny - pouziva `IF NOT EXISTS` takze nevytvori duplicity +- `02_ai_kurzy_data.sql` najprv ZMAZE existujuce AI kurzy data! +- `03_cleanup_data.sql` ZMAZE data! Pouzi opatrne! diff --git a/src/app.js b/src/app.js index b1d5162..826001a 100644 --- a/src/app.js +++ b/src/app.js @@ -31,6 +31,7 @@ import pushRoutes from './routes/push.routes.js'; import userRoutes from './routes/user.routes.js'; import serviceRoutes from './routes/service.routes.js'; import emailSignatureRoutes from './routes/email-signature.routes.js'; +import aiKurzyRoutes from './routes/ai-kurzy.routes.js'; const app = express(); @@ -130,6 +131,7 @@ app.use('/api/push', pushRoutes); app.use('/api/users', userRoutes); app.use('/api/services', serviceRoutes); app.use('/api/email-signature', emailSignatureRoutes); +app.use('/api/ai-kurzy', aiKurzyRoutes); // Basic route app.get('/', (req, res) => { diff --git a/src/controllers/ai-kurzy.controller.js b/src/controllers/ai-kurzy.controller.js new file mode 100644 index 0000000..d5157e9 --- /dev/null +++ b/src/controllers/ai-kurzy.controller.js @@ -0,0 +1,243 @@ +import * as aiKurzyService from '../services/ai-kurzy.service.js'; + +// ==================== KURZY ==================== + +export const getAllKurzy = async (req, res, next) => { + try { + const kurzy = await aiKurzyService.getAllKurzy(); + res.json({ data: kurzy }); + } catch (error) { + next(error); + } +}; + +export const getKurzById = async (req, res, next) => { + try { + const { kurzId } = req.params; + const kurz = await aiKurzyService.getKurzById(parseInt(kurzId)); + res.json({ data: kurz }); + } catch (error) { + next(error); + } +}; + +export const createKurz = async (req, res, next) => { + try { + const kurz = await aiKurzyService.createKurz(req.body); + res.status(201).json({ data: kurz }); + } catch (error) { + next(error); + } +}; + +export const updateKurz = async (req, res, next) => { + try { + const { kurzId } = req.params; + const kurz = await aiKurzyService.updateKurz(parseInt(kurzId), req.body); + res.json({ data: kurz }); + } catch (error) { + next(error); + } +}; + +export const deleteKurz = async (req, res, next) => { + try { + const { kurzId } = req.params; + const result = await aiKurzyService.deleteKurz(parseInt(kurzId)); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; + +// ==================== UCASTNICI ==================== + +export const getAllUcastnici = async (req, res, next) => { + try { + const ucastnici = await aiKurzyService.getAllUcastnici(); + res.json({ data: ucastnici }); + } catch (error) { + next(error); + } +}; + +export const getUcastnikById = async (req, res, next) => { + try { + const { ucastnikId } = req.params; + const ucastnik = await aiKurzyService.getUcastnikById(parseInt(ucastnikId)); + res.json({ data: ucastnik }); + } catch (error) { + next(error); + } +}; + +export const createUcastnik = async (req, res, next) => { + try { + const ucastnik = await aiKurzyService.createUcastnik(req.body); + res.status(201).json({ data: ucastnik }); + } catch (error) { + next(error); + } +}; + +export const updateUcastnik = async (req, res, next) => { + try { + const { ucastnikId } = req.params; + const ucastnik = await aiKurzyService.updateUcastnik(parseInt(ucastnikId), req.body); + res.json({ data: ucastnik }); + } catch (error) { + next(error); + } +}; + +export const deleteUcastnik = async (req, res, next) => { + try { + const { ucastnikId } = req.params; + const result = await aiKurzyService.deleteUcastnik(parseInt(ucastnikId)); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; + +// ==================== REGISTRACIE ==================== + +export const getAllRegistracie = async (req, res, next) => { + try { + const { kurzId } = req.query; + const registracie = await aiKurzyService.getAllRegistracie(kurzId ? parseInt(kurzId) : null); + res.json({ data: registracie }); + } catch (error) { + next(error); + } +}; + +export const getRegistraciaById = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const registracia = await aiKurzyService.getRegistraciaById(parseInt(registraciaId)); + res.json({ data: registracia }); + } catch (error) { + next(error); + } +}; + +export const createRegistracia = async (req, res, next) => { + try { + const registracia = await aiKurzyService.createRegistracia(req.body); + res.status(201).json({ data: registracia }); + } catch (error) { + next(error); + } +}; + +export const updateRegistracia = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const registracia = await aiKurzyService.updateRegistracia(parseInt(registraciaId), req.body); + res.json({ data: registracia }); + } catch (error) { + next(error); + } +}; + +export const deleteRegistracia = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const result = await aiKurzyService.deleteRegistracia(parseInt(registraciaId)); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; + +// ==================== COMBINED TABLE (Excel-style) ==================== + +export const getCombinedTable = async (req, res, next) => { + try { + const data = await aiKurzyService.getCombinedTableData(); + res.json({ data }); + } catch (error) { + next(error); + } +}; + +export const updateField = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const { field, value } = req.body; + const result = await aiKurzyService.updateField(parseInt(registraciaId), field, value); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; + +// ==================== PRILOHY (Documents) ==================== + +export const getPrilohy = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const prilohy = await aiKurzyService.getPrilohyByRegistracia(parseInt(registraciaId)); + res.json({ data: prilohy }); + } catch (error) { + next(error); + } +}; + +export const uploadPriloha = async (req, res, next) => { + try { + const { registraciaId } = req.params; + const file = req.file; + + if (!file) { + return res.status(400).json({ message: 'Súbor je povinný' }); + } + + const priloha = await aiKurzyService.createPriloha({ + registraciaId: parseInt(registraciaId), + nazovSuboru: file.originalname, + typPrilohy: req.body.typPrilohy || 'ine', + cestaKSuboru: file.path, + mimeType: file.mimetype, + velkostSuboru: file.size, + popis: req.body.popis || null, + }); + + res.status(201).json({ data: priloha }); + } catch (error) { + next(error); + } +}; + +export const deletePriloha = async (req, res, next) => { + try { + const { prilohaId } = req.params; + const result = await aiKurzyService.deletePriloha(parseInt(prilohaId)); + + // Optionally delete the file from disk + if (result.filePath) { + const fs = await import('fs/promises'); + try { + await fs.unlink(result.filePath); + } catch { + // File might not exist, ignore + } + } + + res.json({ data: { success: true } }); + } catch (error) { + next(error); + } +}; + +// ==================== STATISTICS ==================== + +export const getStats = async (req, res, next) => { + try { + const stats = await aiKurzyService.getKurzyStats(); + res.json({ data: stats }); + } catch (error) { + next(error); + } +}; diff --git a/src/controllers/project-document.controller.js b/src/controllers/project-document.controller.js new file mode 100644 index 0000000..e3d4c59 --- /dev/null +++ b/src/controllers/project-document.controller.js @@ -0,0 +1,88 @@ +import * as projectDocumentService from '../services/project-document.service.js'; + +/** + * Get all documents for a project + * GET /api/projects/:projectId/documents + */ +export const getDocuments = async (req, res, next) => { + try { + const { projectId } = req.params; + + const documents = await projectDocumentService.getDocumentsByProjectId(projectId); + + res.status(200).json({ + success: true, + count: documents.length, + data: documents, + }); + } catch (error) { + next(error); + } +}; + +/** + * Upload a document for a project + * POST /api/projects/:projectId/documents + */ +export const uploadDocument = async (req, res, next) => { + try { + const { projectId } = req.params; + const userId = req.userId; + const { description } = req.body; + + const document = await projectDocumentService.uploadDocument({ + projectId, + userId, + file: req.file, + description, + }); + + res.status(201).json({ + success: true, + data: document, + message: 'Dokument bol nahraný', + }); + } catch (error) { + next(error); + } +}; + +/** + * Download a document + * GET /api/projects/:projectId/documents/:docId/download + */ +export const downloadDocument = async (req, res, next) => { + try { + const { projectId, docId } = req.params; + + const { filePath, fileName, fileType } = await projectDocumentService.getDocumentForDownload( + projectId, + docId + ); + + res.setHeader('Content-Type', fileType); + res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(fileName)}"`); + res.sendFile(filePath); + } catch (error) { + next(error); + } +}; + +/** + * Delete a document + * DELETE /api/projects/:projectId/documents/:docId + */ +export const deleteDocument = async (req, res, next) => { + try { + const { projectId, docId } = req.params; + + const result = await projectDocumentService.deleteDocument(projectId, docId); + + res.status(200).json({ + success: true, + message: result.message, + }); + } catch (error) { + next(error); + } +}; diff --git a/src/controllers/service-document.controller.js b/src/controllers/service-document.controller.js new file mode 100644 index 0000000..a1afc98 --- /dev/null +++ b/src/controllers/service-document.controller.js @@ -0,0 +1,54 @@ +import * as serviceDocumentService from '../services/service-document.service.js'; + +export const getDocumentsByFolderId = async (req, res, next) => { + try { + const { folderId } = req.params; + const documents = await serviceDocumentService.getDocumentsByFolderId(folderId); + res.json({ data: documents }); + } catch (error) { + next(error); + } +}; + +export const uploadDocument = async (req, res, next) => { + try { + const { folderId } = req.params; + const userId = req.user.id; + const file = req.file; + const { description } = req.body; + + const document = await serviceDocumentService.uploadDocument({ + folderId, + userId, + file, + description, + }); + + res.status(201).json({ data: document }); + } catch (error) { + next(error); + } +}; + +export const downloadDocument = async (req, res, next) => { + try { + const { folderId, documentId } = req.params; + const { filePath, fileName, fileType } = await serviceDocumentService.getDocumentForDownload(folderId, documentId); + + res.setHeader('Content-Type', fileType); + res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(fileName)}"`); + res.sendFile(filePath); + } catch (error) { + next(error); + } +}; + +export const deleteDocument = async (req, res, next) => { + try { + const { folderId, documentId } = req.params; + const result = await serviceDocumentService.deleteDocument(folderId, documentId); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; diff --git a/src/controllers/service-folder.controller.js b/src/controllers/service-folder.controller.js new file mode 100644 index 0000000..86eac25 --- /dev/null +++ b/src/controllers/service-folder.controller.js @@ -0,0 +1,52 @@ +import * as serviceFolderService from '../services/service-folder.service.js'; + +export const getAllFolders = async (req, res, next) => { + try { + const folders = await serviceFolderService.getAllFolders(); + res.json({ data: folders }); + } catch (error) { + next(error); + } +}; + +export const getFolderById = async (req, res, next) => { + try { + const { folderId } = req.params; + const folder = await serviceFolderService.getFolderById(folderId); + res.json({ data: folder }); + } catch (error) { + next(error); + } +}; + +export const createFolder = async (req, res, next) => { + try { + const { name } = req.body; + const userId = req.user.id; + const folder = await serviceFolderService.createFolder({ name, userId }); + res.status(201).json({ data: folder }); + } catch (error) { + next(error); + } +}; + +export const updateFolder = async (req, res, next) => { + try { + const { folderId } = req.params; + const { name } = req.body; + const folder = await serviceFolderService.updateFolder(folderId, { name }); + res.json({ data: folder }); + } catch (error) { + next(error); + } +}; + +export const deleteFolder = async (req, res, next) => { + try { + const { folderId } = req.params; + const result = await serviceFolderService.deleteFolder(folderId); + res.json({ data: result }); + } catch (error) { + next(error); + } +}; diff --git a/src/controllers/todo.controller.js b/src/controllers/todo.controller.js index 14481d7..2f9929e 100644 --- a/src/controllers/todo.controller.js +++ b/src/controllers/todo.controller.js @@ -231,3 +231,81 @@ export const toggleTodo = async (req, res, next) => { next(error); } }; + +/** + * Get overdue todos count + * GET /api/todos/overdue-count + */ +export const getOverdueCount = async (req, res, next) => { + try { + const userId = req.userId; + const userRole = req.user?.role; + + const count = await todoService.getOverdueCount(userId, userRole); + + res.status(200).json({ + success: true, + data: { overdueCount: count }, + }); + } catch (error) { + next(error); + } +}; + +/** + * Get completed todos created by current user count + * GET /api/todos/completed-by-me + */ +export const getCompletedByMeCount = async (req, res, next) => { + try { + const userId = req.userId; + + const count = await todoService.getCompletedByMeCount(userId); + + res.status(200).json({ + success: true, + data: { completedByMeCount: count }, + }); + } catch (error) { + next(error); + } +}; + +/** + * Get combined todo counts for sidebar badges + * GET /api/todos/counts + */ +export const getTodoCounts = async (req, res, next) => { + try { + const userId = req.userId; + const userRole = req.user?.role; + + const counts = await todoService.getTodoCounts(userId, userRole); + + res.status(200).json({ + success: true, + data: counts, + }); + } catch (error) { + next(error); + } +}; + +/** + * Mark all completed todos created by the user as notified + * POST /api/todos/mark-completed-notified + */ +export const markCompletedAsNotified = async (req, res, next) => { + try { + const userId = req.userId; + + await todoService.markCompletedAsNotified(userId); + + res.status(200).json({ + success: true, + message: 'Completed todos marked as notified', + }); + } catch (error) { + next(error); + } +}; diff --git a/src/db/migrations/0001_living_natasha_romanoff.sql b/src/db/migrations/0001_living_natasha_romanoff.sql new file mode 100644 index 0000000..eb4b826 --- /dev/null +++ b/src/db/migrations/0001_living_natasha_romanoff.sql @@ -0,0 +1,193 @@ +CREATE TYPE "public"."forma_kurzu_enum" AS ENUM('prezencne', 'online', 'hybridne');--> statement-breakpoint +CREATE TYPE "public"."stav_registracie_enum" AS ENUM('potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny');--> statement-breakpoint +CREATE TYPE "public"."typ_prilohy_enum" AS ENUM('certifikat', 'faktura', 'prihlaska', 'doklad_o_platbe', 'ine');--> statement-breakpoint +CREATE TABLE "chat_group_members" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "group_id" uuid NOT NULL, + "user_id" uuid NOT NULL, + "joined_at" timestamp DEFAULT now() NOT NULL, + "last_read_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "chat_group_member_unique" UNIQUE("group_id","user_id") +); +--> statement-breakpoint +CREATE TABLE "chat_groups" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "created_by_id" uuid, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "company_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "company_id" uuid NOT NULL, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "email_signatures" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "full_name" text, + "position" text, + "phone" text, + "email" text, + "company_name" text, + "website" text, + "is_enabled" boolean DEFAULT true NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "email_signatures_user_id_unique" UNIQUE("user_id") +); +--> statement-breakpoint +CREATE TABLE "group_messages" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "group_id" uuid NOT NULL, + "sender_id" uuid, + "content" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "kurzy" ( + "id" serial PRIMARY KEY NOT NULL, + "nazov" varchar(255) NOT NULL, + "typ_kurzu" varchar(100) NOT NULL, + "popis" text, + "cena" numeric(10, 2) NOT NULL, + "max_kapacita" integer, + "aktivny" boolean DEFAULT true NOT NULL, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "prilohy" ( + "id" serial PRIMARY KEY NOT NULL, + "registracia_id" integer NOT NULL, + "nazov_suboru" varchar(255) NOT NULL, + "typ_prilohy" "typ_prilohy_enum" DEFAULT 'ine' NOT NULL, + "cesta_k_suboru" varchar(500) NOT NULL, + "mime_type" varchar(100), + "velkost_suboru" bigint, + "popis" text, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "project_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "project_id" uuid NOT NULL, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "push_subscriptions" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "user_id" uuid NOT NULL, + "endpoint" text NOT NULL, + "p256dh" text NOT NULL, + "auth" text NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + CONSTRAINT "push_subscription_endpoint_unique" UNIQUE("user_id","endpoint") +); +--> statement-breakpoint +CREATE TABLE "registracie" ( + "id" serial PRIMARY KEY NOT NULL, + "kurz_id" integer NOT NULL, + "ucastnik_id" integer NOT NULL, + "datum_od" date, + "datum_do" date, + "forma_kurzu" "forma_kurzu_enum" DEFAULT 'prezencne' NOT NULL, + "pocet_ucastnikov" integer DEFAULT 1 NOT NULL, + "faktura_cislo" varchar(100), + "faktura_vystavena" boolean DEFAULT false NOT NULL, + "zaplatene" boolean DEFAULT false NOT NULL, + "stav" "stav_registracie_enum" DEFAULT 'registrovany' NOT NULL, + "poznamka" text, + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "service_documents" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "folder_id" uuid NOT NULL, + "file_name" text NOT NULL, + "original_name" text NOT NULL, + "file_path" text NOT NULL, + "file_type" text NOT NULL, + "file_size" integer NOT NULL, + "description" text, + "uploaded_by" uuid, + "uploaded_at" timestamp DEFAULT now() NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "service_folders" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "created_by" uuid, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "services" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "name" text NOT NULL, + "price" text NOT NULL, + "description" text, + "created_by" uuid, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +CREATE TABLE "ucastnici" ( + "id" serial PRIMARY KEY NOT NULL, + "titul" varchar(50), + "meno" varchar(100) NOT NULL, + "priezvisko" varchar(100) NOT NULL, + "email" varchar(255) NOT NULL, + "telefon" varchar(50), + "firma" varchar(255), + "mesto" varchar(100), + "ulica" varchar(255), + "psc" varchar(10), + "created_at" timestamp with time zone DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone DEFAULT now() NOT NULL, + CONSTRAINT "ucastnici_email_unique" UNIQUE("email") +); +--> statement-breakpoint +ALTER TABLE "personal_contacts" ALTER COLUMN "phone" DROP NOT NULL;--> statement-breakpoint +ALTER TABLE "todos" ADD COLUMN "completed_notified_at" timestamp;--> statement-breakpoint +ALTER TABLE "chat_group_members" ADD CONSTRAINT "chat_group_members_group_id_chat_groups_id_fk" FOREIGN KEY ("group_id") REFERENCES "public"."chat_groups"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "chat_group_members" ADD CONSTRAINT "chat_group_members_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "chat_groups" ADD CONSTRAINT "chat_groups_created_by_id_users_id_fk" FOREIGN KEY ("created_by_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "company_documents" ADD CONSTRAINT "company_documents_company_id_companies_id_fk" FOREIGN KEY ("company_id") REFERENCES "public"."companies"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "company_documents" ADD CONSTRAINT "company_documents_uploaded_by_users_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "email_signatures" ADD CONSTRAINT "email_signatures_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "group_messages" ADD CONSTRAINT "group_messages_group_id_chat_groups_id_fk" FOREIGN KEY ("group_id") REFERENCES "public"."chat_groups"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "group_messages" ADD CONSTRAINT "group_messages_sender_id_users_id_fk" FOREIGN KEY ("sender_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "prilohy" ADD CONSTRAINT "prilohy_registracia_id_registracie_id_fk" FOREIGN KEY ("registracia_id") REFERENCES "public"."registracie"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "project_documents" ADD CONSTRAINT "project_documents_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "project_documents" ADD CONSTRAINT "project_documents_uploaded_by_users_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "push_subscriptions" ADD CONSTRAINT "push_subscriptions_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "registracie" ADD CONSTRAINT "registracie_kurz_id_kurzy_id_fk" FOREIGN KEY ("kurz_id") REFERENCES "public"."kurzy"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "registracie" ADD CONSTRAINT "registracie_ucastnik_id_ucastnici_id_fk" FOREIGN KEY ("ucastnik_id") REFERENCES "public"."ucastnici"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "service_documents" ADD CONSTRAINT "service_documents_folder_id_service_folders_id_fk" FOREIGN KEY ("folder_id") REFERENCES "public"."service_folders"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "service_documents" ADD CONSTRAINT "service_documents_uploaded_by_users_id_fk" FOREIGN KEY ("uploaded_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "service_folders" ADD CONSTRAINT "service_folders_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +ALTER TABLE "services" ADD CONSTRAINT "services_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint +CREATE UNIQUE INDEX "registracie_kurz_ucastnik_idx" ON "registracie" USING btree ("kurz_id","ucastnik_id");--> statement-breakpoint +CREATE UNIQUE INDEX "ucastnici_email_idx" ON "ucastnici" USING btree ("email"); \ No newline at end of file diff --git a/src/db/migrations/0003_add_group_last_read.sql b/src/db/migrations/0003_add_group_last_read.sql new file mode 100644 index 0000000..d280f94 --- /dev/null +++ b/src/db/migrations/0003_add_group_last_read.sql @@ -0,0 +1,8 @@ +-- Add lastReadAt column to chat_group_members for tracking unread group messages +ALTER TABLE chat_group_members +ADD COLUMN IF NOT EXISTS last_read_at TIMESTAMP DEFAULT NOW() NOT NULL; + +-- Update existing records to have current timestamp as lastReadAt +UPDATE chat_group_members +SET last_read_at = NOW() +WHERE last_read_at IS NULL; diff --git a/src/db/migrations/0004_add_project_documents.sql b/src/db/migrations/0004_add_project_documents.sql new file mode 100644 index 0000000..0a1cddf --- /dev/null +++ b/src/db/migrations/0004_add_project_documents.sql @@ -0,0 +1,17 @@ +-- Create project_documents table +CREATE TABLE IF NOT EXISTS project_documents ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE, + file_name TEXT NOT NULL, + original_name TEXT NOT NULL, + file_path TEXT NOT NULL, + file_type TEXT NOT NULL, + file_size INTEGER NOT NULL, + description TEXT, + uploaded_by UUID REFERENCES users(id) ON DELETE SET NULL, + uploaded_at TIMESTAMP DEFAULT NOW() NOT NULL, + created_at TIMESTAMP DEFAULT NOW() NOT NULL +); + +-- Create index for faster lookups +CREATE INDEX IF NOT EXISTS idx_project_documents_project_id ON project_documents(project_id); diff --git a/src/db/migrations/0005_add_service_folders_documents.sql b/src/db/migrations/0005_add_service_folders_documents.sql new file mode 100644 index 0000000..520ab8c --- /dev/null +++ b/src/db/migrations/0005_add_service_folders_documents.sql @@ -0,0 +1,26 @@ +-- Create service_folders table +CREATE TABLE IF NOT EXISTS service_folders ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + name TEXT NOT NULL, + created_by UUID REFERENCES users(id) ON DELETE SET NULL, + created_at TIMESTAMP DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP DEFAULT NOW() NOT NULL +); + +-- Create service_documents table +CREATE TABLE IF NOT EXISTS service_documents ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + folder_id UUID NOT NULL REFERENCES service_folders(id) ON DELETE CASCADE, + file_name TEXT NOT NULL, + original_name TEXT NOT NULL, + file_path TEXT NOT NULL, + file_type TEXT NOT NULL, + file_size INTEGER NOT NULL, + description TEXT, + uploaded_by UUID REFERENCES users(id) ON DELETE SET NULL, + uploaded_at TIMESTAMP DEFAULT NOW() NOT NULL, + created_at TIMESTAMP DEFAULT NOW() NOT NULL +); + +-- Create indexes for faster lookups +CREATE INDEX IF NOT EXISTS idx_service_documents_folder_id ON service_documents(folder_id); diff --git a/src/db/migrations/0006_add_ai_kurzy.sql b/src/db/migrations/0006_add_ai_kurzy.sql new file mode 100644 index 0000000..ad15cfb --- /dev/null +++ b/src/db/migrations/0006_add_ai_kurzy.sql @@ -0,0 +1,88 @@ +-- Create enums for AI Courses +DO $$ BEGIN + CREATE TYPE forma_kurzu_enum AS ENUM ('prezencne', 'online', 'hybridne'); +EXCEPTION + WHEN duplicate_object THEN null; +END $$; + +DO $$ BEGIN + CREATE TYPE stav_registracie_enum AS ENUM ('potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny'); +EXCEPTION + WHEN duplicate_object THEN null; +END $$; + +DO $$ BEGIN + CREATE TYPE typ_prilohy_enum AS ENUM ('certifikat', 'faktura', 'prihlaska', 'doklad_o_platbe', 'ine'); +EXCEPTION + WHEN duplicate_object THEN null; +END $$; + +-- Create kurzy table (AI courses) +CREATE TABLE IF NOT EXISTS kurzy ( + id SERIAL PRIMARY KEY, + nazov VARCHAR(255) NOT NULL, + typ_kurzu VARCHAR(100) NOT NULL, + popis TEXT, + cena NUMERIC(10, 2) NOT NULL, + datum_od DATE NOT NULL, + datum_do DATE NOT NULL, + max_kapacita INTEGER, + aktivny BOOLEAN DEFAULT TRUE NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL +); + +-- Create ucastnici table (participants) +CREATE TABLE IF NOT EXISTS ucastnici ( + id SERIAL PRIMARY KEY, + titul VARCHAR(50), + meno VARCHAR(100) NOT NULL, + priezvisko VARCHAR(100) NOT NULL, + email VARCHAR(255) NOT NULL UNIQUE, + telefon VARCHAR(50), + firma VARCHAR(255), + mesto VARCHAR(100), + ulica VARCHAR(255), + psc VARCHAR(10), + created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL +); + +CREATE UNIQUE INDEX IF NOT EXISTS ucastnici_email_idx ON ucastnici(email); + +-- Create registracie table (registrations) +CREATE TABLE IF NOT EXISTS registracie ( + id SERIAL PRIMARY KEY, + kurz_id INTEGER NOT NULL REFERENCES kurzy(id) ON DELETE CASCADE, + ucastnik_id INTEGER NOT NULL REFERENCES ucastnici(id) ON DELETE CASCADE, + forma_kurzu forma_kurzu_enum DEFAULT 'prezencne' NOT NULL, + pocet_ucastnikov INTEGER DEFAULT 1 NOT NULL, + faktura_cislo VARCHAR(100), + faktura_vystavena BOOLEAN DEFAULT FALSE NOT NULL, + zaplatene BOOLEAN DEFAULT FALSE NOT NULL, + stav stav_registracie_enum DEFAULT 'registrovany' NOT NULL, + poznamka TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL +); + +CREATE UNIQUE INDEX IF NOT EXISTS registracie_kurz_ucastnik_idx ON registracie(kurz_id, ucastnik_id); + +-- Create prilohy table (attachments) +CREATE TABLE IF NOT EXISTS prilohy ( + id SERIAL PRIMARY KEY, + registracia_id INTEGER NOT NULL REFERENCES registracie(id) ON DELETE CASCADE, + nazov_suboru VARCHAR(255) NOT NULL, + typ_prilohy typ_prilohy_enum DEFAULT 'ine' NOT NULL, + cesta_k_suboru VARCHAR(500) NOT NULL, + mime_type VARCHAR(100), + velkost_suboru BIGINT, + popis TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, + updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL +); + +-- Create indexes for faster lookups +CREATE INDEX IF NOT EXISTS idx_registracie_kurz_id ON registracie(kurz_id); +CREATE INDEX IF NOT EXISTS idx_registracie_ucastnik_id ON registracie(ucastnik_id); +CREATE INDEX IF NOT EXISTS idx_prilohy_registracia_id ON prilohy(registracia_id); diff --git a/src/db/migrations/0007_add_completed_notified_at.sql b/src/db/migrations/0007_add_completed_notified_at.sql new file mode 100644 index 0000000..99b9d29 --- /dev/null +++ b/src/db/migrations/0007_add_completed_notified_at.sql @@ -0,0 +1,3 @@ +-- Add completed_notified_at column to todos table +-- This tracks when the creator was notified about a todo completion +ALTER TABLE todos ADD COLUMN IF NOT EXISTS completed_notified_at TIMESTAMP; diff --git a/src/db/migrations/meta/0001_snapshot.json b/src/db/migrations/meta/0001_snapshot.json new file mode 100644 index 0000000..6b5f3e1 --- /dev/null +++ b/src/db/migrations/meta/0001_snapshot.json @@ -0,0 +1,3553 @@ +{ + "id": "0c647ada-9efa-4726-ba67-150580ad69ee", + "prevId": "65d3a196-aa48-4dbd-b1b0-363cd7ac401c", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.audit_logs": { + "name": "audit_logs", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "action": { + "name": "action", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource": { + "name": "resource", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "resource_id": { + "name": "resource_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "old_value": { + "name": "old_value", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "new_value": { + "name": "new_value", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "success": { + "name": "success", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "error_message": { + "name": "error_message", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "audit_logs_user_id_users_id_fk": { + "name": "audit_logs_user_id_users_id_fk", + "tableFrom": "audit_logs", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.chat_group_members": { + "name": "chat_group_members", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "joined_at": { + "name": "joined_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "last_read_at": { + "name": "last_read_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "chat_group_members_group_id_chat_groups_id_fk": { + "name": "chat_group_members_group_id_chat_groups_id_fk", + "tableFrom": "chat_group_members", + "tableTo": "chat_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "chat_group_members_user_id_users_id_fk": { + "name": "chat_group_members_user_id_users_id_fk", + "tableFrom": "chat_group_members", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "chat_group_member_unique": { + "name": "chat_group_member_unique", + "nullsNotDistinct": false, + "columns": [ + "group_id", + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.chat_groups": { + "name": "chat_groups", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_by_id": { + "name": "created_by_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "chat_groups_created_by_id_users_id_fk": { + "name": "chat_groups_created_by_id_users_id_fk", + "tableFrom": "chat_groups", + "tableTo": "users", + "columnsFrom": [ + "created_by_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.companies": { + "name": "companies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "city": { + "name": "city", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "country": { + "name": "country", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "company_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'registered'" + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "companies_created_by_users_id_fk": { + "name": "companies_created_by_users_id_fk", + "tableFrom": "companies", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.company_documents": { + "name": "company_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "file_name": { + "name": "file_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "original_name": { + "name": "original_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_type": { + "name": "file_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "uploaded_by": { + "name": "uploaded_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "uploaded_at": { + "name": "uploaded_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "company_documents_company_id_companies_id_fk": { + "name": "company_documents_company_id_companies_id_fk", + "tableFrom": "company_documents", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "company_documents_uploaded_by_users_id_fk": { + "name": "company_documents_uploaded_by_users_id_fk", + "tableFrom": "company_documents", + "tableTo": "users", + "columnsFrom": [ + "uploaded_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.company_remind": { + "name": "company_remind", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "due_date": { + "name": "due_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "is_checked": { + "name": "is_checked", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "company_remind_company_id_companies_id_fk": { + "name": "company_remind_company_id_companies_id_fk", + "tableFrom": "company_remind", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.company_users": { + "name": "company_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "added_by": { + "name": "added_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "company_users_company_id_companies_id_fk": { + "name": "company_users_company_id_companies_id_fk", + "tableFrom": "company_users", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "company_users_user_id_users_id_fk": { + "name": "company_users_user_id_users_id_fk", + "tableFrom": "company_users", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "company_users_added_by_users_id_fk": { + "name": "company_users_added_by_users_id_fk", + "tableFrom": "company_users", + "tableTo": "users", + "columnsFrom": [ + "added_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "company_user_unique": { + "name": "company_user_unique", + "nullsNotDistinct": false, + "columns": [ + "company_id", + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.contacts": { + "name": "contacts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email_account_id": { + "name": "email_account_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "added_by": { + "name": "added_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "contacts_email_account_id_email_accounts_id_fk": { + "name": "contacts_email_account_id_email_accounts_id_fk", + "tableFrom": "contacts", + "tableTo": "email_accounts", + "columnsFrom": [ + "email_account_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "contacts_company_id_companies_id_fk": { + "name": "contacts_company_id_companies_id_fk", + "tableFrom": "contacts", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "contacts_added_by_users_id_fk": { + "name": "contacts_added_by_users_id_fk", + "tableFrom": "contacts", + "tableTo": "users", + "columnsFrom": [ + "added_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "account_email_unique": { + "name": "account_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email_account_id", + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_accounts": { + "name": "email_accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_password": { + "name": "email_password", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "jmap_account_id": { + "name": "jmap_account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_active": { + "name": "is_active", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "email_accounts_email_unique": { + "name": "email_accounts_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.email_signatures": { + "name": "email_signatures", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "full_name": { + "name": "full_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "company_name": { + "name": "company_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_enabled": { + "name": "is_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "email_signatures_user_id_users_id_fk": { + "name": "email_signatures_user_id_users_id_fk", + "tableFrom": "email_signatures", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "email_signatures_user_id_unique": { + "name": "email_signatures_user_id_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.emails": { + "name": "emails", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "email_account_id": { + "name": "email_account_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "contact_id": { + "name": "contact_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "jmap_id": { + "name": "jmap_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "message_id": { + "name": "message_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thread_id": { + "name": "thread_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "in_reply_to": { + "name": "in_reply_to", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "from": { + "name": "from", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "to": { + "name": "to", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "subject": { + "name": "subject", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_read": { + "name": "is_read", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "sent_by_user_id": { + "name": "sent_by_user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "date": { + "name": "date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "emails_email_account_id_email_accounts_id_fk": { + "name": "emails_email_account_id_email_accounts_id_fk", + "tableFrom": "emails", + "tableTo": "email_accounts", + "columnsFrom": [ + "email_account_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "emails_contact_id_contacts_id_fk": { + "name": "emails_contact_id_contacts_id_fk", + "tableFrom": "emails", + "tableTo": "contacts", + "columnsFrom": [ + "contact_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "emails_company_id_companies_id_fk": { + "name": "emails_company_id_companies_id_fk", + "tableFrom": "emails", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "emails_sent_by_user_id_users_id_fk": { + "name": "emails_sent_by_user_id_users_id_fk", + "tableFrom": "emails", + "tableTo": "users", + "columnsFrom": [ + "sent_by_user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "emails_jmap_id_unique": { + "name": "emails_jmap_id_unique", + "nullsNotDistinct": false, + "columns": [ + "jmap_id" + ] + }, + "emails_message_id_unique": { + "name": "emails_message_id_unique", + "nullsNotDistinct": false, + "columns": [ + "message_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.event_users": { + "name": "event_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "event_id": { + "name": "event_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "assigned_at": { + "name": "assigned_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "event_users_event_id_events_id_fk": { + "name": "event_users_event_id_events_id_fk", + "tableFrom": "event_users", + "tableTo": "events", + "columnsFrom": [ + "event_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "event_users_user_id_users_id_fk": { + "name": "event_users_user_id_users_id_fk", + "tableFrom": "event_users", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "event_user_unique": { + "name": "event_user_unique", + "nullsNotDistinct": false, + "columns": [ + "event_id", + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.events": { + "name": "events", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'meeting'" + }, + "start": { + "name": "start", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "end": { + "name": "end", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "events_created_by_users_id_fk": { + "name": "events_created_by_users_id_fk", + "tableFrom": "events", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.group_messages": { + "name": "group_messages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "group_id": { + "name": "group_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "sender_id": { + "name": "sender_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "group_messages_group_id_chat_groups_id_fk": { + "name": "group_messages_group_id_chat_groups_id_fk", + "tableFrom": "group_messages", + "tableTo": "chat_groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "group_messages_sender_id_users_id_fk": { + "name": "group_messages_sender_id_users_id_fk", + "tableFrom": "group_messages", + "tableTo": "users", + "columnsFrom": [ + "sender_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.kurzy": { + "name": "kurzy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "nazov": { + "name": "nazov", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "typ_kurzu": { + "name": "typ_kurzu", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "popis": { + "name": "popis", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "cena": { + "name": "cena", + "type": "numeric(10, 2)", + "primaryKey": false, + "notNull": true + }, + "max_kapacita": { + "name": "max_kapacita", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "aktivny": { + "name": "aktivny", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.messages": { + "name": "messages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "sender_id": { + "name": "sender_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "receiver_id": { + "name": "receiver_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "is_read": { + "name": "is_read", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "deleted_by_sender": { + "name": "deleted_by_sender", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "deleted_by_receiver": { + "name": "deleted_by_receiver", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "messages_sender_id_users_id_fk": { + "name": "messages_sender_id_users_id_fk", + "tableFrom": "messages", + "tableTo": "users", + "columnsFrom": [ + "sender_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "messages_receiver_id_users_id_fk": { + "name": "messages_receiver_id_users_id_fk", + "tableFrom": "messages", + "tableTo": "users", + "columnsFrom": [ + "receiver_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notes": { + "name": "notes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "todo_id": { + "name": "todo_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "contact_id": { + "name": "contact_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "due_date": { + "name": "due_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "notes_company_id_companies_id_fk": { + "name": "notes_company_id_companies_id_fk", + "tableFrom": "notes", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notes_project_id_projects_id_fk": { + "name": "notes_project_id_projects_id_fk", + "tableFrom": "notes", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notes_todo_id_todos_id_fk": { + "name": "notes_todo_id_todos_id_fk", + "tableFrom": "notes", + "tableTo": "todos", + "columnsFrom": [ + "todo_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notes_contact_id_contacts_id_fk": { + "name": "notes_contact_id_contacts_id_fk", + "tableFrom": "notes", + "tableTo": "contacts", + "columnsFrom": [ + "contact_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "notes_created_by_users_id_fk": { + "name": "notes_created_by_users_id_fk", + "tableFrom": "notes", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.personal_contacts": { + "name": "personal_contacts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "secondary_email": { + "name": "secondary_email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "personal_contacts_user_id_users_id_fk": { + "name": "personal_contacts_user_id_users_id_fk", + "tableFrom": "personal_contacts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "personal_contacts_company_id_companies_id_fk": { + "name": "personal_contacts_company_id_companies_id_fk", + "tableFrom": "personal_contacts", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "personal_contact_user_email": { + "name": "personal_contact_user_email", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.prilohy": { + "name": "prilohy", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "registracia_id": { + "name": "registracia_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "nazov_suboru": { + "name": "nazov_suboru", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "typ_prilohy": { + "name": "typ_prilohy", + "type": "typ_prilohy_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'ine'" + }, + "cesta_k_suboru": { + "name": "cesta_k_suboru", + "type": "varchar(500)", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "velkost_suboru": { + "name": "velkost_suboru", + "type": "bigint", + "primaryKey": false, + "notNull": false + }, + "popis": { + "name": "popis", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "prilohy_registracia_id_registracie_id_fk": { + "name": "prilohy_registracia_id_registracie_id_fk", + "tableFrom": "prilohy", + "tableTo": "registracie", + "columnsFrom": [ + "registracia_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project_documents": { + "name": "project_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "file_name": { + "name": "file_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "original_name": { + "name": "original_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_type": { + "name": "file_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "uploaded_by": { + "name": "uploaded_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "uploaded_at": { + "name": "uploaded_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "project_documents_project_id_projects_id_fk": { + "name": "project_documents_project_id_projects_id_fk", + "tableFrom": "project_documents", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_documents_uploaded_by_users_id_fk": { + "name": "project_documents_uploaded_by_users_id_fk", + "tableFrom": "project_documents", + "tableTo": "users", + "columnsFrom": [ + "uploaded_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.project_users": { + "name": "project_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "added_by": { + "name": "added_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "project_users_project_id_projects_id_fk": { + "name": "project_users_project_id_projects_id_fk", + "tableFrom": "project_users", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_users_user_id_users_id_fk": { + "name": "project_users_user_id_users_id_fk", + "tableFrom": "project_users", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "project_users_added_by_users_id_fk": { + "name": "project_users_added_by_users_id_fk", + "tableFrom": "project_users", + "tableTo": "users", + "columnsFrom": [ + "added_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "project_user_unique": { + "name": "project_user_unique", + "nullsNotDistinct": false, + "columns": [ + "project_id", + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.projects": { + "name": "projects", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "project_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'active'" + }, + "start_date": { + "name": "start_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "projects_company_id_companies_id_fk": { + "name": "projects_company_id_companies_id_fk", + "tableFrom": "projects", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "projects_created_by_users_id_fk": { + "name": "projects_created_by_users_id_fk", + "tableFrom": "projects", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.push_subscriptions": { + "name": "push_subscriptions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "p256dh": { + "name": "p256dh", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "auth": { + "name": "auth", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "push_subscriptions_user_id_users_id_fk": { + "name": "push_subscriptions_user_id_users_id_fk", + "tableFrom": "push_subscriptions", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "push_subscription_endpoint_unique": { + "name": "push_subscription_endpoint_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "endpoint" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.registracie": { + "name": "registracie", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "kurz_id": { + "name": "kurz_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "ucastnik_id": { + "name": "ucastnik_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "datum_od": { + "name": "datum_od", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "datum_do": { + "name": "datum_do", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "forma_kurzu": { + "name": "forma_kurzu", + "type": "forma_kurzu_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'prezencne'" + }, + "pocet_ucastnikov": { + "name": "pocet_ucastnikov", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 1 + }, + "faktura_cislo": { + "name": "faktura_cislo", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "faktura_vystavena": { + "name": "faktura_vystavena", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "zaplatene": { + "name": "zaplatene", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "stav": { + "name": "stav", + "type": "stav_registracie_enum", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'registrovany'" + }, + "poznamka": { + "name": "poznamka", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "registracie_kurz_ucastnik_idx": { + "name": "registracie_kurz_ucastnik_idx", + "columns": [ + { + "expression": "kurz_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "ucastnik_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "registracie_kurz_id_kurzy_id_fk": { + "name": "registracie_kurz_id_kurzy_id_fk", + "tableFrom": "registracie", + "tableTo": "kurzy", + "columnsFrom": [ + "kurz_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "registracie_ucastnik_id_ucastnici_id_fk": { + "name": "registracie_ucastnik_id_ucastnici_id_fk", + "tableFrom": "registracie", + "tableTo": "ucastnici", + "columnsFrom": [ + "ucastnik_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.service_documents": { + "name": "service_documents", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "folder_id": { + "name": "folder_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "file_name": { + "name": "file_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "original_name": { + "name": "original_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_type": { + "name": "file_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "uploaded_by": { + "name": "uploaded_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "uploaded_at": { + "name": "uploaded_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "service_documents_folder_id_service_folders_id_fk": { + "name": "service_documents_folder_id_service_folders_id_fk", + "tableFrom": "service_documents", + "tableTo": "service_folders", + "columnsFrom": [ + "folder_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "service_documents_uploaded_by_users_id_fk": { + "name": "service_documents_uploaded_by_users_id_fk", + "tableFrom": "service_documents", + "tableTo": "users", + "columnsFrom": [ + "uploaded_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.service_folders": { + "name": "service_folders", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "service_folders_created_by_users_id_fk": { + "name": "service_folders_created_by_users_id_fk", + "tableFrom": "service_folders", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.services": { + "name": "services", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "price": { + "name": "price", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "services_created_by_users_id_fk": { + "name": "services_created_by_users_id_fk", + "tableFrom": "services", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.time_entries": { + "name": "time_entries", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "todo_id": { + "name": "todo_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "start_time": { + "name": "start_time", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "end_time": { + "name": "end_time", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "duration": { + "name": "duration", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "is_running": { + "name": "is_running", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_edited": { + "name": "is_edited", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "time_entries_user_id_users_id_fk": { + "name": "time_entries_user_id_users_id_fk", + "tableFrom": "time_entries", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "time_entries_project_id_projects_id_fk": { + "name": "time_entries_project_id_projects_id_fk", + "tableFrom": "time_entries", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "time_entries_todo_id_todos_id_fk": { + "name": "time_entries_todo_id_todos_id_fk", + "tableFrom": "time_entries", + "tableTo": "todos", + "columnsFrom": [ + "todo_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "time_entries_company_id_companies_id_fk": { + "name": "time_entries_company_id_companies_id_fk", + "tableFrom": "time_entries", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.timesheets": { + "name": "timesheets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "file_name": { + "name": "file_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_path": { + "name": "file_path", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_type": { + "name": "file_type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_size": { + "name": "file_size", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "year": { + "name": "year", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "month": { + "name": "month", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "is_generated": { + "name": "is_generated", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "uploaded_at": { + "name": "uploaded_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "timesheets_user_id_users_id_fk": { + "name": "timesheets_user_id_users_id_fk", + "tableFrom": "timesheets", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "timesheets_project_id_projects_id_fk": { + "name": "timesheets_project_id_projects_id_fk", + "tableFrom": "timesheets", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.todo_users": { + "name": "todo_users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "todo_id": { + "name": "todo_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "assigned_by": { + "name": "assigned_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "assigned_at": { + "name": "assigned_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "todo_users_todo_id_todos_id_fk": { + "name": "todo_users_todo_id_todos_id_fk", + "tableFrom": "todo_users", + "tableTo": "todos", + "columnsFrom": [ + "todo_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "todo_users_user_id_users_id_fk": { + "name": "todo_users_user_id_users_id_fk", + "tableFrom": "todo_users", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "todo_users_assigned_by_users_id_fk": { + "name": "todo_users_assigned_by_users_id_fk", + "tableFrom": "todo_users", + "tableTo": "users", + "columnsFrom": [ + "assigned_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "todo_user_unique": { + "name": "todo_user_unique", + "nullsNotDistinct": false, + "columns": [ + "todo_id", + "user_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.todos": { + "name": "todos", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "project_id": { + "name": "project_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "company_id": { + "name": "company_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "todo_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "priority": { + "name": "priority", + "type": "todo_priority", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'medium'" + }, + "due_date": { + "name": "due_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "completed_at": { + "name": "completed_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "completed_notified_at": { + "name": "completed_notified_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "todos_project_id_projects_id_fk": { + "name": "todos_project_id_projects_id_fk", + "tableFrom": "todos", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "todos_company_id_companies_id_fk": { + "name": "todos_company_id_companies_id_fk", + "tableFrom": "todos", + "tableTo": "companies", + "columnsFrom": [ + "company_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "todos_created_by_users_id_fk": { + "name": "todos_created_by_users_id_fk", + "tableFrom": "todos", + "tableTo": "users", + "columnsFrom": [ + "created_by" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ucastnici": { + "name": "ucastnici", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "titul": { + "name": "titul", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "meno": { + "name": "meno", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "priezvisko": { + "name": "priezvisko", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "telefon": { + "name": "telefon", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "firma": { + "name": "firma", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "mesto": { + "name": "mesto", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "ulica": { + "name": "ulica", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "psc": { + "name": "psc", + "type": "varchar(10)", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "ucastnici_email_idx": { + "name": "ucastnici_email_idx", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "ucastnici_email_unique": { + "name": "ucastnici_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_email_accounts": { + "name": "user_email_accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "email_account_id": { + "name": "email_account_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "is_primary": { + "name": "is_primary", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "added_at": { + "name": "added_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "user_email_accounts_user_id_users_id_fk": { + "name": "user_email_accounts_user_id_users_id_fk", + "tableFrom": "user_email_accounts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "user_email_accounts_email_account_id_email_accounts_id_fk": { + "name": "user_email_accounts_email_account_id_email_accounts_id_fk", + "tableFrom": "user_email_accounts", + "tableTo": "email_accounts", + "columnsFrom": [ + "email_account_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": [ + "user_id", + "email_account_id" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_name": { + "name": "last_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "temp_password": { + "name": "temp_password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "changed_password": { + "name": "changed_password", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "role": { + "name": "role", + "type": "role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'member'" + }, + "last_login": { + "name": "last_login", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_username_unique": { + "name": "users_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.company_status": { + "name": "company_status", + "schema": "public", + "values": [ + "registered", + "lead", + "customer", + "inactive" + ] + }, + "public.forma_kurzu_enum": { + "name": "forma_kurzu_enum", + "schema": "public", + "values": [ + "prezencne", + "online", + "hybridne" + ] + }, + "public.project_status": { + "name": "project_status", + "schema": "public", + "values": [ + "active", + "completed", + "on_hold", + "cancelled" + ] + }, + "public.role": { + "name": "role", + "schema": "public", + "values": [ + "admin", + "member" + ] + }, + "public.stav_registracie_enum": { + "name": "stav_registracie_enum", + "schema": "public", + "values": [ + "potencialny", + "registrovany", + "potvrdeny", + "absolvoval", + "zruseny" + ] + }, + "public.todo_priority": { + "name": "todo_priority", + "schema": "public", + "values": [ + "low", + "medium", + "high", + "urgent" + ] + }, + "public.todo_status": { + "name": "todo_status", + "schema": "public", + "values": [ + "pending", + "in_progress", + "completed", + "cancelled" + ] + }, + "public.typ_prilohy_enum": { + "name": "typ_prilohy_enum", + "schema": "public", + "values": [ + "certifikat", + "faktura", + "prihlaska", + "doklad_o_platbe", + "ine" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/src/db/migrations/meta/_journal.json b/src/db/migrations/meta/_journal.json index 8e17595..f577c0a 100644 --- a/src/db/migrations/meta/_journal.json +++ b/src/db/migrations/meta/_journal.json @@ -8,6 +8,13 @@ "when": 1768469306890, "tag": "0000_fat_unus", "breakpoints": true + }, + { + "idx": 1, + "version": "7", + "when": 1768990516243, + "tag": "0001_living_natasha_romanoff", + "breakpoints": true } ] } \ No newline at end of file diff --git a/src/db/schema.js b/src/db/schema.js index 7d16bf5..c1fc039 100644 --- a/src/db/schema.js +++ b/src/db/schema.js @@ -1,4 +1,4 @@ -import { pgTable, text, timestamp, boolean, uuid, pgEnum, unique, integer } from 'drizzle-orm/pg-core'; +import { pgTable, text, timestamp, boolean, uuid, pgEnum, unique, integer, serial, varchar, numeric, date, bigint, uniqueIndex } from 'drizzle-orm/pg-core'; // Enums export const roleEnum = pgEnum('role', ['admin', 'member']); @@ -196,6 +196,7 @@ export const todos = pgTable('todos', { priority: todoPriorityEnum('priority').default('medium').notNull(), dueDate: timestamp('due_date'), completedAt: timestamp('completed_at'), + completedNotifiedAt: timestamp('completed_notified_at'), // when creator was notified about completion createdBy: uuid('created_by').references(() => users.id, { onDelete: 'set null' }), createdAt: timestamp('created_at').defaultNow().notNull(), updatedAt: timestamp('updated_at').defaultNow().notNull(), @@ -299,6 +300,21 @@ export const companyDocuments = pgTable('company_documents', { createdAt: timestamp('created_at').defaultNow().notNull(), }); +// Project Documents table - dokumenty nahrané k projektu +export const projectDocuments = pgTable('project_documents', { + id: uuid('id').primaryKey().defaultRandom(), + projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }).notNull(), + fileName: text('file_name').notNull(), // unikátny názov súboru na disku + originalName: text('original_name').notNull(), // pôvodný názov súboru + filePath: text('file_path').notNull(), // cesta k súboru + fileType: text('file_type').notNull(), // MIME typ + fileSize: integer('file_size').notNull(), // veľkosť v bytoch + description: text('description'), + uploadedBy: uuid('uploaded_by').references(() => users.id, { onDelete: 'set null' }), + uploadedAt: timestamp('uploaded_at').defaultNow().notNull(), + createdAt: timestamp('created_at').defaultNow().notNull(), +}); + // Services table - služby ponúkané firmou export const services = pgTable('services', { id: uuid('id').primaryKey().defaultRandom(), @@ -353,6 +369,7 @@ export const chatGroupMembers = pgTable('chat_group_members', { groupId: uuid('group_id').references(() => chatGroups.id, { onDelete: 'cascade' }).notNull(), userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' }).notNull(), joinedAt: timestamp('joined_at').defaultNow().notNull(), + lastReadAt: timestamp('last_read_at').defaultNow().notNull(), // Track when user last read group messages }, (table) => ({ uniqueMember: unique('chat_group_member_unique').on(table.groupId, table.userId), })); @@ -377,3 +394,99 @@ export const pushSubscriptions = pgTable('push_subscriptions', { }, (table) => ({ uniqueEndpoint: unique('push_subscription_endpoint_unique').on(table.userId, table.endpoint), })); + +// Service Folders table - priečinky pre dokumenty služieb +export const serviceFolders = pgTable('service_folders', { + id: uuid('id').primaryKey().defaultRandom(), + name: text('name').notNull(), + createdBy: uuid('created_by').references(() => users.id, { onDelete: 'set null' }), + createdAt: timestamp('created_at').defaultNow().notNull(), + updatedAt: timestamp('updated_at').defaultNow().notNull(), +}); + +// Service Documents table - dokumenty v priečinkoch služieb +export const serviceDocuments = pgTable('service_documents', { + id: uuid('id').primaryKey().defaultRandom(), + folderId: uuid('folder_id').references(() => serviceFolders.id, { onDelete: 'cascade' }).notNull(), + fileName: text('file_name').notNull(), + originalName: text('original_name').notNull(), + filePath: text('file_path').notNull(), + fileType: text('file_type').notNull(), + fileSize: integer('file_size').notNull(), + description: text('description'), + uploadedBy: uuid('uploaded_by').references(() => users.id, { onDelete: 'set null' }), + uploadedAt: timestamp('uploaded_at').defaultNow().notNull(), + createdAt: timestamp('created_at').defaultNow().notNull(), +}); + +// ==================== AI KURZY ==================== + +// Enums for AI Courses +export const formaKurzuEnum = pgEnum('forma_kurzu_enum', ['prezencne', 'online', 'hybridne']); +export const stavRegistracieEnum = pgEnum('stav_registracie_enum', ['potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny']); +export const typPrilohyEnum = pgEnum('typ_prilohy_enum', ['certifikat', 'faktura', 'prihlaska', 'doklad_o_platbe', 'ine']); + +// Kurzy table - AI courses definitions (templates) +export const kurzy = pgTable('kurzy', { + id: serial('id').primaryKey(), + nazov: varchar('nazov', { length: 255 }).notNull(), + typKurzu: varchar('typ_kurzu', { length: 100 }).notNull(), + popis: text('popis'), + cena: numeric('cena', { precision: 10, scale: 2 }).notNull(), + maxKapacita: integer('max_kapacita'), + aktivny: boolean('aktivny').default(true).notNull(), + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}); + +// Ucastnici table - course participants +export const ucastnici = pgTable('ucastnici', { + id: serial('id').primaryKey(), + titul: varchar('titul', { length: 50 }), + meno: varchar('meno', { length: 100 }).notNull(), + priezvisko: varchar('priezvisko', { length: 100 }).notNull(), + email: varchar('email', { length: 255 }).notNull().unique(), + telefon: varchar('telefon', { length: 50 }), + firma: varchar('firma', { length: 255 }), + mesto: varchar('mesto', { length: 100 }), + ulica: varchar('ulica', { length: 255 }), + psc: varchar('psc', { length: 10 }), + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}, (table) => ({ + emailIdx: uniqueIndex('ucastnici_email_idx').on(table.email), +})); + +// Registracie table - course registrations (many-to-many) +export const registracie = pgTable('registracie', { + id: serial('id').primaryKey(), + kurzId: integer('kurz_id').notNull().references(() => kurzy.id, { onDelete: 'cascade' }), + ucastnikId: integer('ucastnik_id').notNull().references(() => ucastnici.id, { onDelete: 'cascade' }), + datumOd: date('datum_od', { mode: 'date' }), // dátum začiatku pre túto registráciu + datumDo: date('datum_do', { mode: 'date' }), // dátum konca pre túto registráciu + formaKurzu: formaKurzuEnum('forma_kurzu').default('prezencne').notNull(), + pocetUcastnikov: integer('pocet_ucastnikov').default(1).notNull(), + fakturaCislo: varchar('faktura_cislo', { length: 100 }), + fakturaVystavena: boolean('faktura_vystavena').default(false).notNull(), + zaplatene: boolean('zaplatene').default(false).notNull(), + stav: stavRegistracieEnum('stav').default('registrovany').notNull(), + poznamka: text('poznamka'), + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}, (table) => ({ + uniqRegistracia: uniqueIndex('registracie_kurz_ucastnik_idx').on(table.kurzId, table.ucastnikId), +})); + +// Prilohy table - attachments for registrations +export const prilohy = pgTable('prilohy', { + id: serial('id').primaryKey(), + registraciaId: integer('registracia_id').notNull().references(() => registracie.id, { onDelete: 'cascade' }), + nazovSuboru: varchar('nazov_suboru', { length: 255 }).notNull(), + typPrilohy: typPrilohyEnum('typ_prilohy').default('ine').notNull(), + cestaKSuboru: varchar('cesta_k_suboru', { length: 500 }).notNull(), + mimeType: varchar('mime_type', { length: 100 }), + velkostSuboru: bigint('velkost_suboru', { mode: 'number' }), + popis: text('popis'), + createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), + updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(), +}); diff --git a/src/db/seeds/ai-kurzy-csv-import.seed.js b/src/db/seeds/ai-kurzy-csv-import.seed.js new file mode 100644 index 0000000..235fb6b --- /dev/null +++ b/src/db/seeds/ai-kurzy-csv-import.seed.js @@ -0,0 +1,303 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +import { eq, sql } from 'drizzle-orm'; + +const { db } = await import('../../config/database.js'); +const { kurzy, ucastnici, registracie } = await import('../schema.js'); + +// Clear existing data +async function clearData() { + console.log('Clearing existing data...'); + await db.delete(registracie); + await db.delete(ucastnici); + await db.delete(kurzy); + // Reset sequences + await db.execute(sql`ALTER SEQUENCE kurzy_id_seq RESTART WITH 1`); + await db.execute(sql`ALTER SEQUENCE ucastnici_id_seq RESTART WITH 1`); + await db.execute(sql`ALTER SEQUENCE registracie_id_seq RESTART WITH 1`); + console.log('Data cleared.'); +} + +// Course data - now without dates (dates are per-registration) +const coursesData = [ + { + nazov: 'AI 1+2 (2 dni) - 290€', + typKurzu: 'AI', + cena: '290', + }, + { + nazov: 'AI 1 (1 deň) - 150€', + typKurzu: 'AI', + cena: '150', + }, + { + nazov: 'AI 2 (1 deň) - 150€', + typKurzu: 'AI', + cena: '150', + }, + { + nazov: 'AI v SEO (1 deň) - 150€', + typKurzu: 'SEO', + cena: '150', + }, + { + nazov: 'AI I+II Marec 2026', + typKurzu: 'AI', + cena: '290', + }, + { + nazov: 'AI I+II Apríl 2026', + typKurzu: 'AI', + cena: '290', + }, +]; + +// Participants data from CSV - dates are now on registration level +const participantsData = [ + // Umelá Inteligencia I+II 2. - 3. Február 2026 + { + meno: 'Martin', + priezvisko: 'Sovák', + telefon: '0918986172', + email: 'info@energium.sk', + firma: 'energium sro', + formaKurzu: 'prezencne', + kurz: 'AI 1+2 (2 dni) - 290€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Bratislava', + ulica: 'Topolcianska 5', + psc: '85105', + fakturaVystavena: true, + zaplatene: false, + poznamka: 'FA 2026020', + stav: 'registrovany', + }, + { + meno: 'Michal', + priezvisko: 'Farkaš', + telefon: '0911209122', + email: 'michal.farkas83@gmail.com', + firma: 'SLOVWELD', + formaKurzu: 'online', + kurz: 'AI 1 (1 deň) - 150€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-02'), + pocetUcastnikov: 1, + mesto: 'Dunajska Lužná', + ulica: 'Mandlova 30', + psc: '90042', + fakturaVystavena: true, + zaplatene: true, + poznamka: 'Fa 2025 338, Súhlasil so zmeneným termínom', + stav: 'registrovany', + }, + { + meno: 'Alena', + priezvisko: 'Šranková', + telefon: '0917352580', + email: 'alena.srankova@gmail.com', + formaKurzu: 'online', + kurz: 'AI 1+2 (2 dni) - 290€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Bratislava', + ulica: 'Šándorova 1', + psc: '82103', + fakturaVystavena: true, + zaplatene: true, + stav: 'registrovany', + }, + { + meno: 'Katarina', + priezvisko: 'Tomaníková', + telefon: '0948 070 611', + email: 'k.tomanikova@riseday.net', + firma: 'Classica Shipping Limited', + formaKurzu: 'prezencne', + kurz: 'AI 1+2 (2 dni) - 290€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Bratislava', + ulica: 'Keltska 104', + psc: '85110', + fakturaVystavena: true, + zaplatene: true, + poznamka: 'presunuta z oktobra, chce až január', + stav: 'registrovany', + }, + { + meno: 'Róbert', + priezvisko: 'Brišák', + telefon: '0910583883', + email: 'robert.brisak@ss-nizna.sk', + firma: 'Spojená škola, Hattalova 471, 02743 Nižná', + formaKurzu: 'prezencne', + kurz: 'AI 1+2 (2 dni) - 290€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Nižná', + ulica: 'Hattalova 471', + psc: '02743', + fakturaVystavena: true, + zaplatene: false, + poznamka: 'FA 2026019', + stav: 'registrovany', + }, + { + meno: 'Marián', + priezvisko: 'Bača', + telefon: '0907994126', + email: 'baca.marian@gmail.com', + formaKurzu: 'prezencne', + kurz: 'AI 2 (1 deň) - 150€', + datumOd: new Date('2026-02-03'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Petrovany', + ulica: '8', + psc: '08253', + fakturaVystavena: true, + zaplatene: false, + poznamka: 'Fa Gablasova', + stav: 'registrovany', + }, + { + titul: 'Mgr. MBA', + meno: 'Nikola', + priezvisko: 'Horáčková', + telefon: '0918482184', + email: 'nikolahorackova11@gmail.com', + kurz: 'AI 1+2 (2 dni) - 290€', + datumOd: new Date('2026-02-02'), + datumDo: new Date('2026-02-03'), + pocetUcastnikov: 1, + mesto: 'Zákopčie', + ulica: 'Zákopčie stred 12', + psc: '023 11', + fakturaVystavena: false, + zaplatene: false, + poznamka: 'vzdelávací poukaz', + stav: 'potencialny', + }, + // AI v SEO 13.2.2026 + { + meno: 'Tomáš', + priezvisko: 'Kupec', + telefon: '0911030190', + email: 'kupec.tom@gmail.com', + firma: 'Jamajka', + formaKurzu: 'prezencne', + kurz: 'AI v SEO (1 deň) - 150€', + datumOd: new Date('2026-02-13'), + datumDo: new Date('2026-02-13'), + pocetUcastnikov: 1, + mesto: 'Liptovská Sielnica', + psc: '032 23', + fakturaVystavena: true, + zaplatene: false, + poznamka: 'FA 2026021', + stav: 'registrovany', + }, + { + meno: 'Anton', + priezvisko: 'Považský', + email: 'anton.povazsky@example.com', // No email in CSV, using placeholder + formaKurzu: 'prezencne', + kurz: 'AI v SEO (1 deň) - 150€', + datumOd: new Date('2026-02-13'), + datumDo: new Date('2026-02-13'), + pocetUcastnikov: 1, + fakturaVystavena: true, + zaplatene: false, + stav: 'registrovany', + }, +]; + +async function importData() { + console.log('Starting import...'); + + // Create courses (now without dates) + console.log('\nCreating courses...'); + const createdKurzy = {}; + for (const course of coursesData) { + const [created] = await db.insert(kurzy).values({ + nazov: course.nazov, + typKurzu: course.typKurzu, + cena: course.cena, + aktivny: true, + }).returning(); + createdKurzy[course.nazov] = created.id; + console.log(` Created course: ${course.nazov} (ID: ${created.id})`); + } + + // Create participants and registrations (with dates) + console.log('\nCreating participants and registrations...'); + for (const p of participantsData) { + // Check if participant already exists by email + let [existingUcastnik] = await db.select().from(ucastnici).where(eq(ucastnici.email, p.email)).limit(1); + + let ucastnikId; + if (existingUcastnik) { + ucastnikId = existingUcastnik.id; + console.log(` Using existing participant: ${p.email}`); + } else { + const [created] = await db.insert(ucastnici).values({ + titul: p.titul || null, + meno: p.meno, + priezvisko: p.priezvisko, + email: p.email, + telefon: p.telefon || null, + firma: p.firma || null, + mesto: p.mesto || null, + ulica: p.ulica || null, + psc: p.psc || null, + }).returning(); + ucastnikId = created.id; + console.log(` Created participant: ${p.meno} ${p.priezvisko} (${p.email})`); + } + + // Get kurz ID + const kurzId = createdKurzy[p.kurz]; + if (!kurzId) { + console.error(` ERROR: Course not found: ${p.kurz}`); + continue; + } + + // Create registration with dates + await db.insert(registracie).values({ + kurzId: kurzId, + ucastnikId: ucastnikId, + datumOd: p.datumOd || null, + datumDo: p.datumDo || null, + formaKurzu: p.formaKurzu || 'prezencne', + pocetUcastnikov: p.pocetUcastnikov || 1, + fakturaVystavena: p.fakturaVystavena || false, + zaplatene: p.zaplatene || false, + stav: p.stav || 'registrovany', + poznamka: p.poznamka || null, + }); + console.log(` Created registration for ${p.email} -> ${p.kurz} (${p.datumOd?.toLocaleDateString('sk-SK')} - ${p.datumDo?.toLocaleDateString('sk-SK')})`); + } + + console.log('\n=== Import completed ==='); + console.log(`Courses: ${coursesData.length}`); + console.log(`Participants: ${participantsData.length}`); +} + +// Run +clearData() + .then(() => importData()) + .then(() => { + console.log('Done!'); + process.exit(0); + }) + .catch((error) => { + console.error('Import failed:', error); + process.exit(1); + }); diff --git a/src/db/seeds/ai-kurzy-import.seed.js b/src/db/seeds/ai-kurzy-import.seed.js new file mode 100644 index 0000000..8c7d184 --- /dev/null +++ b/src/db/seeds/ai-kurzy-import.seed.js @@ -0,0 +1,292 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +import ExcelJS from 'exceljs'; +import { eq, and } from 'drizzle-orm'; +import path from 'path'; + +// Dynamic imports to ensure env is loaded first +const { db } = await import('../../config/database.js'); +const { kurzy, ucastnici, registracie } = await import('../schema.js'); + +const EXCEL_FILE = '/home/richardtekula/Downloads/Copy of AI školenie študenti.xlsx'; + +// Helper to parse dates from various formats +const parseDate = (value) => { + if (!value) return null; + if (value instanceof Date) return value; + if (typeof value === 'number') { + // Excel serial date number + const date = new Date((value - 25569) * 86400 * 1000); + return date; + } + if (typeof value === 'string') { + const parsed = new Date(value); + return isNaN(parsed.getTime()) ? null : parsed; + } + return null; +}; + +// Helper to clean string values +const cleanString = (value) => { + if (value === null || value === undefined) return null; + const str = String(value).trim(); + return str === '' ? null : str; +}; + +// Helper to parse numeric value +const parseNumber = (value) => { + if (value === null || value === undefined) return null; + const num = parseFloat(value); + return isNaN(num) ? null : num; +}; + +// Map stav from Excel to our enum values +const mapStav = (value) => { + if (!value) return 'registrovany'; + const v = String(value).toLowerCase().trim(); + if (v.includes('absolvoval')) return 'absolvoval'; + if (v.includes('potvrden')) return 'potvrdeny'; + if (v.includes('zrusen')) return 'zruseny'; + if (v.includes('potencial')) return 'potencialny'; + return 'registrovany'; +}; + +// Map forma kurzu +const mapForma = (value) => { + if (!value) return 'prezencne'; + const v = String(value).toLowerCase().trim(); + if (v.includes('online')) return 'online'; + if (v.includes('hybrid')) return 'hybridne'; + return 'prezencne'; +}; + +async function importAiKurzy() { + console.log('Reading Excel file:', EXCEL_FILE); + + const workbook = new ExcelJS.Workbook(); + await workbook.xlsx.readFile(EXCEL_FILE); + + console.log('Sheets in workbook:', workbook.worksheets.map(ws => ws.name)); + + // Process each sheet + for (const worksheet of workbook.worksheets) { + console.log(`\n=== Processing sheet: ${worksheet.name} ===`); + console.log(`Rows: ${worksheet.rowCount}, Columns: ${worksheet.columnCount}`); + + // Get headers from first row + const headerRow = worksheet.getRow(1); + const headers = []; + headerRow.eachCell((cell, colNum) => { + headers[colNum] = cleanString(cell.value); + }); + console.log('Headers:', headers.filter(Boolean)); + + // Collect data rows + const dataRows = []; + worksheet.eachRow((row, rowNum) => { + if (rowNum === 1) return; // Skip header + + const rowData = {}; + row.eachCell((cell, colNum) => { + const header = headers[colNum]; + if (header) { + rowData[header] = cell.value; + } + }); + + // Only add if row has some data + if (Object.values(rowData).some(v => v !== null && v !== undefined && v !== '')) { + dataRows.push(rowData); + } + }); + + console.log(`Found ${dataRows.length} data rows`); + + // Log first few rows to understand structure + if (dataRows.length > 0) { + console.log('Sample row:', JSON.stringify(dataRows[0], null, 2)); + } + + // Try to import data based on headers + await importSheetData(worksheet.name, headers, dataRows); + } + + console.log('\n=== Import completed ==='); +} + +async function importSheetData(sheetName, headers, rows) { + // Detect what kind of data this is based on headers + const headerLower = headers.map(h => h?.toLowerCase() || ''); + + const hasKurzFields = headerLower.some(h => h.includes('kurz') || h.includes('datum') || h.includes('cena')); + const hasUcastnikFields = headerLower.some(h => h.includes('meno') || h.includes('email') || h.includes('priezvisko')); + + if (rows.length === 0) { + console.log('No data to import'); + return; + } + + // Import participants and registrations + if (hasUcastnikFields) { + await importParticipantsAndRegistrations(sheetName, headers, rows); + } +} + +async function importParticipantsAndRegistrations(sheetName, headers, rows) { + console.log(`\nImporting participants from sheet: ${sheetName}`); + + // First, ensure we have a course for this sheet + const courseName = sheetName; + let course = await db.select().from(kurzy).where(eq(kurzy.nazov, courseName)).limit(1); + + if (course.length === 0) { + // Create course from sheet name + const [newCourse] = await db.insert(kurzy).values({ + nazov: courseName, + typKurzu: extractCourseType(sheetName), + cena: '0', // Will need to update manually + datumOd: new Date(), + datumDo: new Date(), + aktivny: true, + }).returning(); + course = [newCourse]; + console.log(`Created course: ${courseName} (ID: ${newCourse.id})`); + } else { + console.log(`Using existing course: ${courseName} (ID: ${course[0].id})`); + } + + const kurzId = course[0].id; + + // Map headers to our fields + const headerMap = {}; + headers.forEach((header, idx) => { + if (!header) return; + const h = header.toLowerCase(); + + if (h.includes('titul') || h === 'titul') headerMap.titul = idx; + if (h.includes('meno') && !h.includes('priezvisko')) headerMap.meno = idx; + if (h.includes('priezvisko') || h === 'surname' || h === 'priezvisko') headerMap.priezvisko = idx; + if (h.includes('email') || h.includes('e-mail')) headerMap.email = idx; + if (h.includes('telefon') || h.includes('phone') || h.includes('tel')) headerMap.telefon = idx; + if (h.includes('firma') || h.includes('company') || h.includes('spolocnost')) headerMap.firma = idx; + if (h.includes('mesto') || h.includes('city')) headerMap.mesto = idx; + if (h.includes('ulica') || h.includes('street') || h.includes('adresa')) headerMap.ulica = idx; + if (h.includes('psc') || h.includes('zip') || h.includes('postal')) headerMap.psc = idx; + if (h.includes('stav') || h.includes('status')) headerMap.stav = idx; + if (h.includes('forma') || h.includes('form')) headerMap.forma = idx; + if (h.includes('faktur') && h.includes('cislo')) headerMap.fakturaCislo = idx; + if (h.includes('faktur') && h.includes('vystaven')) headerMap.fakturaVystavena = idx; + if (h.includes('zaplaten') || h.includes('paid')) headerMap.zaplatene = idx; + if (h.includes('poznam') || h.includes('note')) headerMap.poznamka = idx; + if (h.includes('pocet') || h.includes('count')) headerMap.pocetUcastnikov = idx; + }); + + console.log('Field mapping:', headerMap); + + let importedCount = 0; + let skippedCount = 0; + + for (const row of rows) { + try { + // Get email - required field + const email = cleanString(row[headers[headerMap.email]] || Object.values(row).find(v => String(v).includes('@'))); + if (!email || !email.includes('@')) { + skippedCount++; + continue; + } + + // Check if participant exists + let participant = await db.select().from(ucastnici).where(eq(ucastnici.email, email)).limit(1); + + if (participant.length === 0) { + // Try to find name fields + let meno = cleanString(row[headers[headerMap.meno]]); + let priezvisko = cleanString(row[headers[headerMap.priezvisko]]); + + // If no separate fields, try to split full name + if (!meno && !priezvisko) { + // Look for a name-like field + for (const [key, value] of Object.entries(row)) { + const val = cleanString(value); + if (val && !val.includes('@') && !val.includes('http') && val.length < 50) { + const parts = val.split(/\s+/); + if (parts.length >= 2) { + meno = parts[0]; + priezvisko = parts.slice(1).join(' '); + break; + } + } + } + } + + // Create participant + const [newParticipant] = await db.insert(ucastnici).values({ + titul: cleanString(row[headers[headerMap.titul]]), + meno: meno || 'N/A', + priezvisko: priezvisko || 'N/A', + email: email, + telefon: cleanString(row[headers[headerMap.telefon]]), + firma: cleanString(row[headers[headerMap.firma]]), + mesto: cleanString(row[headers[headerMap.mesto]]), + ulica: cleanString(row[headers[headerMap.ulica]]), + psc: cleanString(row[headers[headerMap.psc]]), + }).returning(); + participant = [newParticipant]; + console.log(`Created participant: ${email}`); + } + + const ucastnikId = participant[0].id; + + // Check if registration exists + const existingReg = await db.select() + .from(registracie) + .where(and(eq(registracie.kurzId, kurzId), eq(registracie.ucastnikId, ucastnikId))) + .limit(1); + + if (existingReg.length === 0) { + // Create registration + await db.insert(registracie).values({ + kurzId: kurzId, + ucastnikId: ucastnikId, + formaKurzu: mapForma(row[headers[headerMap.forma]]), + pocetUcastnikov: parseInt(row[headers[headerMap.pocetUcastnikov]]) || 1, + fakturaCislo: cleanString(row[headers[headerMap.fakturaCislo]]), + fakturaVystavena: Boolean(row[headers[headerMap.fakturaVystavena]]), + zaplatene: Boolean(row[headers[headerMap.zaplatene]]), + stav: mapStav(row[headers[headerMap.stav]]), + poznamka: cleanString(row[headers[headerMap.poznamka]]), + }); + importedCount++; + } else { + console.log(`Registration already exists for ${email} in ${sheetName}`); + skippedCount++; + } + } catch (error) { + console.error(`Error processing row:`, error.message); + skippedCount++; + } + } + + console.log(`Imported ${importedCount} registrations, skipped ${skippedCount}`); +} + +function extractCourseType(sheetName) { + const name = sheetName.toLowerCase(); + if (name.includes('ai 1') || name.includes('ai1')) return 'AI 1'; + if (name.includes('ai 2') || name.includes('ai2')) return 'AI 2'; + if (name.includes('seo')) return 'SEO'; + if (name.includes('marketing')) return 'Marketing'; + return 'AI'; +} + +// Run the import +importAiKurzy() + .then(() => { + console.log('Import finished successfully'); + process.exit(0); + }) + .catch((error) => { + console.error('Import failed:', error); + process.exit(1); + }); diff --git a/src/routes/ai-kurzy.routes.js b/src/routes/ai-kurzy.routes.js new file mode 100644 index 0000000..2fb719a --- /dev/null +++ b/src/routes/ai-kurzy.routes.js @@ -0,0 +1,232 @@ +import express from 'express'; +import multer from 'multer'; +import path from 'path'; +import fs from 'fs'; +import * as aiKurzyController from '../controllers/ai-kurzy.controller.js'; +import { authenticate } from '../middlewares/auth/authMiddleware.js'; +import { requireAdmin } from '../middlewares/auth/roleMiddleware.js'; +import { validateBody, validateParams, validateQuery } from '../middlewares/security/validateInput.js'; +import { z } from 'zod'; + +const router = express.Router(); + +// Configure multer for file uploads +const uploadsDir = path.join(process.cwd(), 'uploads', 'ai-kurzy'); +if (!fs.existsSync(uploadsDir)) { + fs.mkdirSync(uploadsDir, { recursive: true }); +} + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, uploadsDir); + }, + filename: (req, file, cb) => { + const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); + cb(null, uniqueSuffix + '-' + file.originalname); + } +}); + +const upload = multer({ + storage, + limits: { fileSize: 10 * 1024 * 1024 }, // 10MB max +}); + +// Validation schemas +const kurzIdSchema = z.object({ + kurzId: z.string().regex(/^\d+$/), +}); + +const ucastnikIdSchema = z.object({ + ucastnikId: z.string().regex(/^\d+$/), +}); + +const registraciaIdSchema = z.object({ + registraciaId: z.string().regex(/^\d+$/), +}); + +const createKurzSchema = z.object({ + nazov: z.string().min(1).max(255), + typKurzu: z.string().min(1).max(100), + popis: z.string().optional().nullable(), + cena: z.string().or(z.number()), + maxKapacita: z.number().int().positive().optional().nullable(), + aktivny: z.boolean().optional(), +}); + +const updateKurzSchema = createKurzSchema.partial(); + +const createUcastnikSchema = z.object({ + titul: z.string().max(50).optional().nullable(), + meno: z.string().min(1).max(100), + priezvisko: z.string().min(1).max(100), + email: z.string().email().max(255), + telefon: z.string().max(50).optional().nullable(), + firma: z.string().max(255).optional().nullable(), + mesto: z.string().max(100).optional().nullable(), + ulica: z.string().max(255).optional().nullable(), + psc: z.string().max(10).optional().nullable(), +}); + +const updateUcastnikSchema = createUcastnikSchema.partial(); + +const createRegistraciaSchema = z.object({ + kurzId: z.number().int().positive(), + ucastnikId: z.number().int().positive(), + datumOd: z.string().optional().nullable(), + datumDo: z.string().optional().nullable(), + formaKurzu: z.enum(['prezencne', 'online', 'hybridne']).optional(), + pocetUcastnikov: z.number().int().positive().optional(), + fakturaCislo: z.string().max(100).optional().nullable(), + fakturaVystavena: z.boolean().optional(), + zaplatene: z.boolean().optional(), + stav: z.enum(['potencialny', 'registrovany', 'potvrdeny', 'absolvoval', 'zruseny']).optional(), + poznamka: z.string().optional().nullable(), +}); + +const updateRegistraciaSchema = createRegistraciaSchema.partial(); + +const registracieQuerySchema = z.object({ + kurzId: z.string().regex(/^\d+$/).optional(), +}); + +// All routes require authentication and admin role +router.use(authenticate); +router.use(requireAdmin); + +// ==================== STATISTICS ==================== + +router.get('/stats', aiKurzyController.getStats); + +// ==================== KURZY ==================== + +router.get('/kurzy', aiKurzyController.getAllKurzy); + +router.post( + '/kurzy', + validateBody(createKurzSchema), + aiKurzyController.createKurz +); + +router.get( + '/kurzy/:kurzId', + validateParams(kurzIdSchema), + aiKurzyController.getKurzById +); + +router.put( + '/kurzy/:kurzId', + validateParams(kurzIdSchema), + validateBody(updateKurzSchema), + aiKurzyController.updateKurz +); + +router.delete( + '/kurzy/:kurzId', + validateParams(kurzIdSchema), + aiKurzyController.deleteKurz +); + +// ==================== UCASTNICI ==================== + +router.get('/ucastnici', aiKurzyController.getAllUcastnici); + +router.post( + '/ucastnici', + validateBody(createUcastnikSchema), + aiKurzyController.createUcastnik +); + +router.get( + '/ucastnici/:ucastnikId', + validateParams(ucastnikIdSchema), + aiKurzyController.getUcastnikById +); + +router.put( + '/ucastnici/:ucastnikId', + validateParams(ucastnikIdSchema), + validateBody(updateUcastnikSchema), + aiKurzyController.updateUcastnik +); + +router.delete( + '/ucastnici/:ucastnikId', + validateParams(ucastnikIdSchema), + aiKurzyController.deleteUcastnik +); + +// ==================== REGISTRACIE ==================== + +router.get( + '/registracie', + validateQuery(registracieQuerySchema), + aiKurzyController.getAllRegistracie +); + +router.post( + '/registracie', + validateBody(createRegistraciaSchema), + aiKurzyController.createRegistracia +); + +router.get( + '/registracie/:registraciaId', + validateParams(registraciaIdSchema), + aiKurzyController.getRegistraciaById +); + +router.put( + '/registracie/:registraciaId', + validateParams(registraciaIdSchema), + validateBody(updateRegistraciaSchema), + aiKurzyController.updateRegistracia +); + +router.delete( + '/registracie/:registraciaId', + validateParams(registraciaIdSchema), + aiKurzyController.deleteRegistracia +); + +// ==================== COMBINED TABLE (Excel-style) ==================== + +router.get('/table', aiKurzyController.getCombinedTable); + +const updateFieldSchema = z.object({ + field: z.string(), + value: z.any(), +}); + +router.patch( + '/table/:registraciaId/field', + validateParams(registraciaIdSchema), + validateBody(updateFieldSchema), + aiKurzyController.updateField +); + +// ==================== PRILOHY (Documents) ==================== + +const prilohaIdSchema = z.object({ + prilohaId: z.string().regex(/^\d+$/), +}); + +router.get( + '/registracie/:registraciaId/prilohy', + validateParams(registraciaIdSchema), + aiKurzyController.getPrilohy +); + +router.post( + '/registracie/:registraciaId/prilohy', + validateParams(registraciaIdSchema), + upload.single('file'), + aiKurzyController.uploadPriloha +); + +router.delete( + '/prilohy/:prilohaId', + validateParams(prilohaIdSchema), + aiKurzyController.deletePriloha +); + +export default router; diff --git a/src/routes/project.routes.js b/src/routes/project.routes.js index 9683c79..22c205e 100644 --- a/src/routes/project.routes.js +++ b/src/routes/project.routes.js @@ -1,5 +1,7 @@ import express from 'express'; +import multer from 'multer'; import * as projectController from '../controllers/project.controller.js'; +import * as projectDocumentController from '../controllers/project-document.controller.js'; import { authenticate } from '../middlewares/auth/authMiddleware.js'; import { requireAdmin } from '../middlewares/auth/roleMiddleware.js'; import { checkProjectAccess } from '../middlewares/auth/resourceAccessMiddleware.js'; @@ -7,6 +9,14 @@ import { validateBody, validateParams } from '../middlewares/security/validateIn import { createProjectSchema, updateProjectSchema } from '../validators/crm.validators.js'; import { z } from 'zod'; +// Configure multer for file uploads (memory storage) +const upload = multer({ + storage: multer.memoryStorage(), + limits: { + fileSize: 50 * 1024 * 1024, // 50MB max + }, +}); + const router = express.Router(); // All project routes require authentication @@ -136,4 +146,40 @@ router.delete( projectController.removeUserFromProject ); +// Project Documents +router.get( + '/:projectId/documents', + validateParams(z.object({ projectId: z.string().uuid() })), + checkProjectAccess, + projectDocumentController.getDocuments +); + +router.post( + '/:projectId/documents', + validateParams(z.object({ projectId: z.string().uuid() })), + checkProjectAccess, + upload.single('file'), + projectDocumentController.uploadDocument +); + +router.get( + '/:projectId/documents/:docId/download', + validateParams(z.object({ + projectId: z.string().uuid(), + docId: z.string().uuid() + })), + checkProjectAccess, + projectDocumentController.downloadDocument +); + +router.delete( + '/:projectId/documents/:docId', + requireAdmin, + validateParams(z.object({ + projectId: z.string().uuid(), + docId: z.string().uuid() + })), + projectDocumentController.deleteDocument +); + export default router; diff --git a/src/routes/service.routes.js b/src/routes/service.routes.js index 4db0129..57614aa 100644 --- a/src/routes/service.routes.js +++ b/src/routes/service.routes.js @@ -1,5 +1,8 @@ import express from 'express'; +import multer from 'multer'; import * as serviceController from '../controllers/service.controller.js'; +import * as serviceFolderController from '../controllers/service-folder.controller.js'; +import * as serviceDocumentController from '../controllers/service-document.controller.js'; import { authenticate } from '../middlewares/auth/authMiddleware.js'; import { requireAdmin } from '../middlewares/auth/roleMiddleware.js'; import { validateBody, validateParams } from '../middlewares/security/validateInput.js'; @@ -8,27 +11,129 @@ import { z } from 'zod'; const router = express.Router(); +const upload = multer({ + storage: multer.memoryStorage(), + limits: { fileSize: 50 * 1024 * 1024 }, // 50MB limit +}); + const serviceIdSchema = z.object({ serviceId: z.string().uuid(), }); +const folderIdSchema = z.object({ + folderId: z.string().uuid(), +}); + +const folderDocumentIdSchema = z.object({ + folderId: z.string().uuid(), + documentId: z.string().uuid(), +}); + +const createFolderSchema = z.object({ + name: z.string().min(1).max(255), +}); + +const updateFolderSchema = z.object({ + name: z.string().min(1).max(255), +}); + // All service routes require authentication router.use(authenticate); +// ==================== SERVICE FOLDERS (must be before :serviceId routes) ==================== + +/** + * GET /api/services/folders - Get all folders (all authenticated users) + */ +router.get('/folders', serviceFolderController.getAllFolders); + +/** + * POST /api/services/folders - Create new folder (admin only) + */ +router.post( + '/folders', + requireAdmin, + validateBody(createFolderSchema), + serviceFolderController.createFolder +); + +/** + * GET /api/services/folders/:folderId - Get folder by ID (all authenticated users) + */ +router.get( + '/folders/:folderId', + validateParams(folderIdSchema), + serviceFolderController.getFolderById +); + +/** + * PUT /api/services/folders/:folderId - Update folder (admin only) + */ +router.put( + '/folders/:folderId', + requireAdmin, + validateParams(folderIdSchema), + validateBody(updateFolderSchema), + serviceFolderController.updateFolder +); + +/** + * DELETE /api/services/folders/:folderId - Delete folder (admin only) + */ +router.delete( + '/folders/:folderId', + requireAdmin, + validateParams(folderIdSchema), + serviceFolderController.deleteFolder +); + +// ==================== SERVICE DOCUMENTS ==================== + +/** + * GET /api/services/folders/:folderId/documents - Get all documents in folder + */ +router.get( + '/folders/:folderId/documents', + validateParams(folderIdSchema), + serviceDocumentController.getDocumentsByFolderId +); + +/** + * POST /api/services/folders/:folderId/documents - Upload document to folder + */ +router.post( + '/folders/:folderId/documents', + validateParams(folderIdSchema), + upload.single('file'), + serviceDocumentController.uploadDocument +); + +/** + * GET /api/services/folders/:folderId/documents/:documentId/download - Download document + */ +router.get( + '/folders/:folderId/documents/:documentId/download', + validateParams(folderDocumentIdSchema), + serviceDocumentController.downloadDocument +); + +/** + * DELETE /api/services/folders/:folderId/documents/:documentId - Delete document (admin only) + */ +router.delete( + '/folders/:folderId/documents/:documentId', + requireAdmin, + validateParams(folderDocumentIdSchema), + serviceDocumentController.deleteDocument +); + +// ==================== SERVICES ==================== + /** * GET /api/services - Get all services (all authenticated users) */ router.get('/', serviceController.getAllServices); -/** - * GET /api/services/:serviceId - Get service by ID (all authenticated users) - */ -router.get( - '/:serviceId', - validateParams(serviceIdSchema), - serviceController.getServiceById -); - /** * POST /api/services - Create new service (admin only) */ @@ -39,6 +144,15 @@ router.post( serviceController.createService ); +/** + * GET /api/services/:serviceId - Get service by ID (all authenticated users) + */ +router.get( + '/:serviceId', + validateParams(serviceIdSchema), + serviceController.getServiceById +); + /** * PUT /api/services/:serviceId - Update service (admin only) */ diff --git a/src/routes/todo.routes.js b/src/routes/todo.routes.js index 786b19f..edf09c8 100644 --- a/src/routes/todo.routes.js +++ b/src/routes/todo.routes.js @@ -19,6 +19,18 @@ router.use(authenticate); // Get all todos router.get('/', todoController.getAllTodos); +// Get combined todo counts (overdue + completed by me) for sidebar badges +router.get('/counts', todoController.getTodoCounts); + +// Get overdue todos count +router.get('/overdue-count', todoController.getOverdueCount); + +// Get completed todos created by current user +router.get('/completed-by-me', todoController.getCompletedByMeCount); + +// Mark completed todos as notified (when user opens Todos page) +router.post('/mark-completed-notified', todoController.markCompletedAsNotified); + // Get todo by ID router.get( '/:todoId', diff --git a/src/services/ai-kurzy.service.js b/src/services/ai-kurzy.service.js new file mode 100644 index 0000000..57e92ae --- /dev/null +++ b/src/services/ai-kurzy.service.js @@ -0,0 +1,414 @@ +import { db } from '../config/database.js'; +import { kurzy, ucastnici, registracie, prilohy } from '../db/schema.js'; +import { and, desc, eq, sql, asc } from 'drizzle-orm'; +import { NotFoundError } from '../utils/errors.js'; + +// ==================== KURZY (Courses) ==================== + +export const getAllKurzy = async () => { + const result = await db + .select({ + id: kurzy.id, + nazov: kurzy.nazov, + typKurzu: kurzy.typKurzu, + popis: kurzy.popis, + cena: kurzy.cena, + maxKapacita: kurzy.maxKapacita, + aktivny: kurzy.aktivny, + createdAt: kurzy.createdAt, + registraciiCount: sql`(SELECT COUNT(*) FROM registracie WHERE kurz_id = ${kurzy.id})::int`, + }) + .from(kurzy) + .orderBy(asc(kurzy.nazov)); + + return result; +}; + +export const getKurzById = async (id) => { + const [kurz] = await db + .select() + .from(kurzy) + .where(eq(kurzy.id, id)) + .limit(1); + + if (!kurz) { + throw new NotFoundError('Kurz nenájdený'); + } + + return kurz; +}; + +export const createKurz = async (data) => { + const [newKurz] = await db + .insert(kurzy) + .values({ + nazov: data.nazov, + typKurzu: data.typKurzu, + popis: data.popis || null, + cena: data.cena, + maxKapacita: data.maxKapacita || null, + aktivny: data.aktivny !== undefined ? data.aktivny : true, + }) + .returning(); + + return newKurz; +}; + +export const updateKurz = async (id, data) => { + await getKurzById(id); + + const updateData = { ...data, updatedAt: new Date() }; + + const [updated] = await db + .update(kurzy) + .set(updateData) + .where(eq(kurzy.id, id)) + .returning(); + + return updated; +}; + +export const deleteKurz = async (id) => { + await getKurzById(id); + await db.delete(kurzy).where(eq(kurzy.id, id)); + return { success: true, message: 'Kurz bol odstránený' }; +}; + +// ==================== UCASTNICI (Participants) ==================== + +export const getAllUcastnici = async () => { + const result = await db + .select({ + id: ucastnici.id, + titul: ucastnici.titul, + meno: ucastnici.meno, + priezvisko: ucastnici.priezvisko, + email: ucastnici.email, + telefon: ucastnici.telefon, + firma: ucastnici.firma, + mesto: ucastnici.mesto, + ulica: ucastnici.ulica, + psc: ucastnici.psc, + createdAt: ucastnici.createdAt, + registraciiCount: sql`(SELECT COUNT(*) FROM registracie WHERE ucastnik_id = ${ucastnici.id})::int`, + }) + .from(ucastnici) + .orderBy(asc(ucastnici.priezvisko), asc(ucastnici.meno)); + + return result; +}; + +export const getUcastnikById = async (id) => { + const [ucastnik] = await db + .select() + .from(ucastnici) + .where(eq(ucastnici.id, id)) + .limit(1); + + if (!ucastnik) { + throw new NotFoundError('Účastník nenájdený'); + } + + return ucastnik; +}; + +export const createUcastnik = async (data) => { + const [newUcastnik] = await db + .insert(ucastnici) + .values({ + titul: data.titul || null, + meno: data.meno, + priezvisko: data.priezvisko, + email: data.email, + telefon: data.telefon || null, + firma: data.firma || null, + mesto: data.mesto || null, + ulica: data.ulica || null, + psc: data.psc || null, + }) + .returning(); + + return newUcastnik; +}; + +export const updateUcastnik = async (id, data) => { + await getUcastnikById(id); + + const [updated] = await db + .update(ucastnici) + .set({ + ...data, + updatedAt: new Date(), + }) + .where(eq(ucastnici.id, id)) + .returning(); + + return updated; +}; + +export const deleteUcastnik = async (id) => { + await getUcastnikById(id); + await db.delete(ucastnici).where(eq(ucastnici.id, id)); + return { success: true, message: 'Účastník bol odstránený' }; +}; + +// ==================== REGISTRACIE (Registrations) ==================== + +export const getAllRegistracie = async (kurzId = null) => { + const conditions = kurzId ? [eq(registracie.kurzId, kurzId)] : []; + + const result = await db + .select({ + id: registracie.id, + kurzId: registracie.kurzId, + ucastnikId: registracie.ucastnikId, + datumOd: registracie.datumOd, + datumDo: registracie.datumDo, + formaKurzu: registracie.formaKurzu, + pocetUcastnikov: registracie.pocetUcastnikov, + fakturaCislo: registracie.fakturaCislo, + fakturaVystavena: registracie.fakturaVystavena, + zaplatene: registracie.zaplatene, + stav: registracie.stav, + poznamka: registracie.poznamka, + createdAt: registracie.createdAt, + // Kurz info + kurzNazov: kurzy.nazov, + kurzTyp: kurzy.typKurzu, + // Ucastnik info + ucastnikMeno: ucastnici.meno, + ucastnikPriezvisko: ucastnici.priezvisko, + ucastnikEmail: ucastnici.email, + ucastnikFirma: ucastnici.firma, + }) + .from(registracie) + .leftJoin(kurzy, eq(registracie.kurzId, kurzy.id)) + .leftJoin(ucastnici, eq(registracie.ucastnikId, ucastnici.id)) + .where(conditions.length > 0 ? and(...conditions) : undefined) + .orderBy(desc(registracie.datumOd), desc(registracie.createdAt)); + + return result; +}; + +export const getRegistraciaById = async (id) => { + const [reg] = await db + .select({ + id: registracie.id, + kurzId: registracie.kurzId, + ucastnikId: registracie.ucastnikId, + formaKurzu: registracie.formaKurzu, + pocetUcastnikov: registracie.pocetUcastnikov, + fakturaCislo: registracie.fakturaCislo, + fakturaVystavena: registracie.fakturaVystavena, + zaplatene: registracie.zaplatene, + stav: registracie.stav, + poznamka: registracie.poznamka, + createdAt: registracie.createdAt, + kurzNazov: kurzy.nazov, + kurzTyp: kurzy.typKurzu, + ucastnikMeno: ucastnici.meno, + ucastnikPriezvisko: ucastnici.priezvisko, + ucastnikEmail: ucastnici.email, + }) + .from(registracie) + .leftJoin(kurzy, eq(registracie.kurzId, kurzy.id)) + .leftJoin(ucastnici, eq(registracie.ucastnikId, ucastnici.id)) + .where(eq(registracie.id, id)) + .limit(1); + + if (!reg) { + throw new NotFoundError('Registrácia nenájdená'); + } + + return reg; +}; + +export const createRegistracia = async (data) => { + const [newReg] = await db + .insert(registracie) + .values({ + kurzId: data.kurzId, + ucastnikId: data.ucastnikId, + datumOd: data.datumOd ? new Date(data.datumOd) : null, + datumDo: data.datumDo ? new Date(data.datumDo) : null, + formaKurzu: data.formaKurzu || 'prezencne', + pocetUcastnikov: data.pocetUcastnikov || 1, + fakturaCislo: data.fakturaCislo || null, + fakturaVystavena: data.fakturaVystavena || false, + zaplatene: data.zaplatene || false, + stav: data.stav || 'registrovany', + poznamka: data.poznamka || null, + }) + .returning(); + + return newReg; +}; + +export const updateRegistracia = async (id, data) => { + await getRegistraciaById(id); + + const [updated] = await db + .update(registracie) + .set({ + ...data, + updatedAt: new Date(), + }) + .where(eq(registracie.id, id)) + .returning(); + + return updated; +}; + +export const deleteRegistracia = async (id) => { + await getRegistraciaById(id); + await db.delete(registracie).where(eq(registracie.id, id)); + return { success: true, message: 'Registrácia bola odstránená' }; +}; + +// ==================== COMBINED TABLE VIEW (Excel-style) ==================== + +export const getCombinedTableData = async () => { + const result = await db + .select({ + // Registration ID (main row identifier) + id: registracie.id, + // Ucastnik fields + ucastnikId: ucastnici.id, + titul: ucastnici.titul, + meno: ucastnici.meno, + priezvisko: ucastnici.priezvisko, + email: ucastnici.email, + telefon: ucastnici.telefon, + firma: ucastnici.firma, + mesto: ucastnici.mesto, + ulica: ucastnici.ulica, + psc: ucastnici.psc, + // Kurz fields + kurzId: kurzy.id, + kurzNazov: kurzy.nazov, + kurzTyp: kurzy.typKurzu, + // Registration fields (dates are now here) + datumOd: registracie.datumOd, + datumDo: registracie.datumDo, + formaKurzu: registracie.formaKurzu, + pocetUcastnikov: registracie.pocetUcastnikov, + fakturaCislo: registracie.fakturaCislo, + fakturaVystavena: registracie.fakturaVystavena, + zaplatene: registracie.zaplatene, + stav: registracie.stav, + poznamka: registracie.poznamka, + createdAt: registracie.createdAt, + // Document count + dokumentyCount: sql`(SELECT COUNT(*) FROM prilohy WHERE registracia_id = ${registracie.id})::int`, + }) + .from(registracie) + .innerJoin(ucastnici, eq(registracie.ucastnikId, ucastnici.id)) + .innerJoin(kurzy, eq(registracie.kurzId, kurzy.id)) + .orderBy(desc(registracie.datumOd), desc(registracie.createdAt)); + + return result; +}; + +// Update a single field (for inline editing) +export const updateField = async (registrationId, field, value) => { + // Determine which table to update based on the field + const ucastnikFields = ['titul', 'meno', 'priezvisko', 'email', 'telefon', 'firma', 'mesto', 'ulica', 'psc']; + const registraciaFields = ['datumOd', 'datumDo', 'formaKurzu', 'pocetUcastnikov', 'fakturaCislo', 'fakturaVystavena', 'zaplatene', 'stav', 'poznamka', 'kurzId']; + const dateFields = ['datumOd', 'datumDo']; + + // Get the registration to find ucastnikId + const [reg] = await db + .select({ ucastnikId: registracie.ucastnikId }) + .from(registracie) + .where(eq(registracie.id, registrationId)) + .limit(1); + + if (!reg) { + throw new NotFoundError('Registrácia nenájdená'); + } + + // Convert date strings to Date objects + let processedValue = value; + if (dateFields.includes(field)) { + processedValue = value ? new Date(value) : null; + } + + if (ucastnikFields.includes(field)) { + // Update ucastnik table + await db + .update(ucastnici) + .set({ [field]: processedValue, updatedAt: new Date() }) + .where(eq(ucastnici.id, reg.ucastnikId)); + } else if (registraciaFields.includes(field)) { + // Update registracie table + await db + .update(registracie) + .set({ [field]: processedValue, updatedAt: new Date() }) + .where(eq(registracie.id, registrationId)); + } else { + throw new Error(`Unknown field: ${field}`); + } + + return { success: true }; +}; + +// ==================== PRILOHY (Documents) ==================== + +export const getPrilohyByRegistracia = async (registraciaId) => { + const result = await db + .select() + .from(prilohy) + .where(eq(prilohy.registraciaId, registraciaId)) + .orderBy(desc(prilohy.createdAt)); + + return result; +}; + +export const createPriloha = async (data) => { + const [newPriloha] = await db + .insert(prilohy) + .values({ + registraciaId: data.registraciaId, + nazovSuboru: data.nazovSuboru, + typPrilohy: data.typPrilohy || 'ine', + cestaKSuboru: data.cestaKSuboru, + mimeType: data.mimeType || null, + velkostSuboru: data.velkostSuboru || null, + popis: data.popis || null, + }) + .returning(); + + return newPriloha; +}; + +export const deletePriloha = async (id) => { + const [priloha] = await db + .select() + .from(prilohy) + .where(eq(prilohy.id, id)) + .limit(1); + + if (!priloha) { + throw new NotFoundError('Príloha nenájdená'); + } + + await db.delete(prilohy).where(eq(prilohy.id, id)); + return { success: true, filePath: priloha.cestaKSuboru }; +}; + +// ==================== STATISTICS ==================== + +export const getKurzyStats = async () => { + const [stats] = await db + .select({ + totalKurzy: sql`(SELECT COUNT(*) FROM kurzy)::int`, + aktivneKurzy: sql`(SELECT COUNT(*) FROM kurzy WHERE aktivny = true)::int`, + totalUcastnici: sql`(SELECT COUNT(*) FROM ucastnici)::int`, + totalRegistracie: sql`(SELECT COUNT(*) FROM registracie)::int`, + zaplateneRegistracie: sql`(SELECT COUNT(*) FROM registracie WHERE zaplatene = true)::int`, + absolvovaneRegistracie: sql`(SELECT COUNT(*) FROM registracie WHERE stav = 'absolvoval')::int`, + }) + .from(sql`(SELECT 1) AS dummy`); + + return stats; +}; diff --git a/src/services/group.service.js b/src/services/group.service.js index 71198b3..13ffafd 100644 --- a/src/services/group.service.js +++ b/src/services/group.service.js @@ -1,6 +1,6 @@ import { db } from '../config/database.js'; import { chatGroups, chatGroupMembers, groupMessages, users } from '../db/schema.js'; -import { eq, and, desc, inArray, sql } from 'drizzle-orm'; +import { eq, and, desc, inArray, sql, gt } from 'drizzle-orm'; import { NotFoundError, ForbiddenError } from '../utils/errors.js'; import { sendPushNotificationToUsers } from './push.service.js'; import { logger } from '../utils/logger.js'; @@ -34,15 +34,22 @@ export const createGroup = async (name, creatorId, memberIds) => { * Get all groups for a user */ export const getUserGroups = async (userId) => { - // Get groups where user is a member + // Get groups where user is a member with lastReadAt const memberOf = await db - .select({ groupId: chatGroupMembers.groupId }) + .select({ + groupId: chatGroupMembers.groupId, + lastReadAt: chatGroupMembers.lastReadAt, + }) .from(chatGroupMembers) .where(eq(chatGroupMembers.userId, userId)); if (memberOf.length === 0) return []; const groupIds = memberOf.map((m) => m.groupId); + const lastReadMap = memberOf.reduce((acc, m) => { + acc[m.groupId] = m.lastReadAt; + return acc; + }, {}); const groups = await db .select({ @@ -56,27 +63,41 @@ export const getUserGroups = async (userId) => { .where(inArray(chatGroups.id, groupIds)) .orderBy(desc(chatGroups.updatedAt)); - // Get last message and member count for each group + // Get last message, member count, and unread count for each group const result = await Promise.all( groups.map(async (group) => { - const lastMessage = await db - .select({ - content: groupMessages.content, - createdAt: groupMessages.createdAt, - senderId: groupMessages.senderId, - senderFirstName: users.firstName, - senderUsername: users.username, - }) - .from(groupMessages) - .leftJoin(users, eq(groupMessages.senderId, users.id)) - .where(eq(groupMessages.groupId, group.id)) - .orderBy(desc(groupMessages.createdAt)) - .limit(1); + const lastReadAt = lastReadMap[group.id]; - const members = await db - .select({ id: chatGroupMembers.id }) - .from(chatGroupMembers) - .where(eq(chatGroupMembers.groupId, group.id)); + const [lastMessage, members, unreadResult] = await Promise.all([ + db + .select({ + content: groupMessages.content, + createdAt: groupMessages.createdAt, + senderId: groupMessages.senderId, + senderFirstName: users.firstName, + senderUsername: users.username, + }) + .from(groupMessages) + .leftJoin(users, eq(groupMessages.senderId, users.id)) + .where(eq(groupMessages.groupId, group.id)) + .orderBy(desc(groupMessages.createdAt)) + .limit(1), + db + .select({ id: chatGroupMembers.id }) + .from(chatGroupMembers) + .where(eq(chatGroupMembers.groupId, group.id)), + // Count unread messages (messages after lastReadAt, not sent by current user) + db + .select({ count: sql`count(*)::int` }) + .from(groupMessages) + .where( + and( + eq(groupMessages.groupId, group.id), + gt(groupMessages.createdAt, lastReadAt), + sql`${groupMessages.senderId} != ${userId}` + ) + ), + ]); return { ...group, @@ -87,6 +108,7 @@ export const getUserGroups = async (userId) => { isMine: lastMessage[0].senderId === userId, } : null, memberCount: members.length, + unreadCount: unreadResult[0]?.count || 0, type: 'group', }; }) @@ -163,6 +185,17 @@ export const getGroupMessages = async (groupId, userId) => { throw new ForbiddenError('Nie ste členom tejto skupiny'); } + // Update lastReadAt for this user in this group + await db + .update(chatGroupMembers) + .set({ lastReadAt: new Date() }) + .where( + and( + eq(chatGroupMembers.groupId, groupId), + eq(chatGroupMembers.userId, userId) + ) + ); + const messages = await db .select({ id: groupMessages.id, @@ -402,3 +435,38 @@ export const deleteGroup = async (groupId, requesterId) => { return { success: true }; }; + +/** + * Get total unread group messages count for a user + */ +export const getGroupUnreadCount = async (userId) => { + // Get all groups user is a member of with lastReadAt + const memberOf = await db + .select({ + groupId: chatGroupMembers.groupId, + lastReadAt: chatGroupMembers.lastReadAt, + }) + .from(chatGroupMembers) + .where(eq(chatGroupMembers.userId, userId)); + + if (memberOf.length === 0) return 0; + + // Count unread messages across all groups + let totalUnread = 0; + + for (const membership of memberOf) { + const result = await db + .select({ count: sql`count(*)::int` }) + .from(groupMessages) + .where( + and( + eq(groupMessages.groupId, membership.groupId), + gt(groupMessages.createdAt, membership.lastReadAt), + sql`${groupMessages.senderId} != ${userId}` + ) + ); + totalUnread += result[0]?.count || 0; + } + + return totalUnread; +}; diff --git a/src/services/message.service.js b/src/services/message.service.js index 6249a06..317cbb8 100644 --- a/src/services/message.service.js +++ b/src/services/message.service.js @@ -4,6 +4,7 @@ import { eq, and, or, desc, ne, sql } from 'drizzle-orm'; import { NotFoundError } from '../utils/errors.js'; import { sendPushNotification } from './push.service.js'; import { logger } from '../utils/logger.js'; +import { getGroupUnreadCount } from './group.service.js'; /** * Get all conversations for a user @@ -251,9 +252,9 @@ export const deleteConversation = async (userId, partnerId) => { }; /** - * Get unread message count for a user + * Get unread message count for a user (direct messages only) */ -export const getUnreadCount = async (userId) => { +export const getDirectUnreadCount = async (userId) => { const result = await db .select({ count: sql`count(*)::int` }) .from(messages) @@ -268,6 +269,22 @@ export const getUnreadCount = async (userId) => { return result[0]?.count || 0; }; +/** + * Get combined unread message count for a user (direct + group) + */ +export const getUnreadCount = async (userId) => { + const [directCount, groupCount] = await Promise.all([ + getDirectUnreadCount(userId), + getGroupUnreadCount(userId), + ]); + + return { + directCount, + groupCount, + total: directCount + groupCount, + }; +}; + /** * Get all CRM users available for chat (excluding current user) */ diff --git a/src/services/project-document.service.js b/src/services/project-document.service.js new file mode 100644 index 0000000..0fa787e --- /dev/null +++ b/src/services/project-document.service.js @@ -0,0 +1,166 @@ +import fs from 'fs/promises'; +import path from 'path'; +import { db } from '../config/database.js'; +import { projectDocuments, projects, users } from '../db/schema.js'; +import { and, desc, eq } from 'drizzle-orm'; +import { BadRequestError, NotFoundError } from '../utils/errors.js'; +import { logger } from '../utils/logger.js'; + +const BASE_UPLOAD_DIR = path.join(process.cwd(), 'uploads', 'project-documents'); + +const buildDestinationPath = (projectId, originalName) => { + const ext = path.extname(originalName); + const name = path.basename(originalName, ext); + const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1e9)}`; + const filename = `${name}-${uniqueSuffix}${ext}`; + const folder = path.join(BASE_UPLOAD_DIR, projectId); + const filePath = path.join(folder, filename); + + return { folder, filename, filePath }; +}; + +const safeUnlink = async (filePath) => { + if (!filePath) return; + try { + await fs.unlink(filePath); + } catch (error) { + logger.error('Failed to delete file', error); + } +}; + +const ensureProjectExists = async (projectId) => { + const [project] = await db + .select() + .from(projects) + .where(eq(projects.id, projectId)) + .limit(1); + + if (!project) { + throw new NotFoundError('Projekt nenájdený'); + } + + return project; +}; + +/** + * Get all documents for a project + */ +export const getDocumentsByProjectId = async (projectId) => { + await ensureProjectExists(projectId); + + return db + .select({ + id: projectDocuments.id, + projectId: projectDocuments.projectId, + fileName: projectDocuments.fileName, + originalName: projectDocuments.originalName, + fileType: projectDocuments.fileType, + fileSize: projectDocuments.fileSize, + description: projectDocuments.description, + uploadedAt: projectDocuments.uploadedAt, + uploadedBy: projectDocuments.uploadedBy, + uploaderUsername: users.username, + uploaderFirstName: users.firstName, + uploaderLastName: users.lastName, + }) + .from(projectDocuments) + .leftJoin(users, eq(projectDocuments.uploadedBy, users.id)) + .where(eq(projectDocuments.projectId, projectId)) + .orderBy(desc(projectDocuments.uploadedAt)); +}; + +/** + * Upload a document for a project + */ +export const uploadDocument = async ({ projectId, userId, file, description }) => { + if (!file) { + throw new BadRequestError('Súbor nebol nahraný'); + } + + await ensureProjectExists(projectId); + + const { folder, filename, filePath } = buildDestinationPath(projectId, file.originalname); + + await fs.mkdir(folder, { recursive: true }); + + try { + await fs.writeFile(filePath, file.buffer); + + const [newDoc] = await db + .insert(projectDocuments) + .values({ + projectId, + fileName: filename, + originalName: file.originalname, + filePath, + fileType: file.mimetype, + fileSize: file.size, + description: description || null, + uploadedBy: userId, + }) + .returning(); + + return newDoc; + } catch (error) { + await safeUnlink(filePath); + throw error; + } +}; + +/** + * Get document by ID for download + */ +export const getDocumentForDownload = async (projectId, documentId) => { + await ensureProjectExists(projectId); + + const [doc] = await db + .select() + .from(projectDocuments) + .where(and( + eq(projectDocuments.id, documentId), + eq(projectDocuments.projectId, projectId) + )) + .limit(1); + + if (!doc) { + throw new NotFoundError('Dokument nenájdený'); + } + + try { + await fs.access(doc.filePath); + } catch { + throw new NotFoundError('Súbor nebol nájdený na serveri'); + } + + return { + document: doc, + filePath: doc.filePath, + fileName: doc.originalName, + fileType: doc.fileType, + }; +}; + +/** + * Delete a document + */ +export const deleteDocument = async (projectId, documentId) => { + await ensureProjectExists(projectId); + + const [doc] = await db + .select() + .from(projectDocuments) + .where(and( + eq(projectDocuments.id, documentId), + eq(projectDocuments.projectId, projectId) + )) + .limit(1); + + if (!doc) { + throw new NotFoundError('Dokument nenájdený'); + } + + await safeUnlink(doc.filePath); + await db.delete(projectDocuments).where(eq(projectDocuments.id, documentId)); + + return { success: true, message: 'Dokument bol odstránený' }; +}; diff --git a/src/services/service-document.service.js b/src/services/service-document.service.js new file mode 100644 index 0000000..04cf01f --- /dev/null +++ b/src/services/service-document.service.js @@ -0,0 +1,166 @@ +import fs from 'fs/promises'; +import path from 'path'; +import { db } from '../config/database.js'; +import { serviceDocuments, serviceFolders, users } from '../db/schema.js'; +import { and, desc, eq } from 'drizzle-orm'; +import { BadRequestError, NotFoundError } from '../utils/errors.js'; +import { logger } from '../utils/logger.js'; + +const BASE_UPLOAD_DIR = path.join(process.cwd(), 'uploads', 'service-documents'); + +const buildDestinationPath = (folderId, originalName) => { + const ext = path.extname(originalName); + const name = path.basename(originalName, ext); + const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1e9)}`; + const filename = `${name}-${uniqueSuffix}${ext}`; + const folder = path.join(BASE_UPLOAD_DIR, folderId); + const filePath = path.join(folder, filename); + + return { folder, filename, filePath }; +}; + +const safeUnlink = async (filePath) => { + if (!filePath) return; + try { + await fs.unlink(filePath); + } catch (error) { + logger.error('Failed to delete file', error); + } +}; + +const ensureFolderExists = async (folderId) => { + const [folder] = await db + .select() + .from(serviceFolders) + .where(eq(serviceFolders.id, folderId)) + .limit(1); + + if (!folder) { + throw new NotFoundError('Priečinok nenájdený'); + } + + return folder; +}; + +/** + * Get all documents in a folder + */ +export const getDocumentsByFolderId = async (folderId) => { + await ensureFolderExists(folderId); + + return db + .select({ + id: serviceDocuments.id, + folderId: serviceDocuments.folderId, + fileName: serviceDocuments.fileName, + originalName: serviceDocuments.originalName, + fileType: serviceDocuments.fileType, + fileSize: serviceDocuments.fileSize, + description: serviceDocuments.description, + uploadedAt: serviceDocuments.uploadedAt, + uploadedBy: serviceDocuments.uploadedBy, + uploaderUsername: users.username, + uploaderFirstName: users.firstName, + uploaderLastName: users.lastName, + }) + .from(serviceDocuments) + .leftJoin(users, eq(serviceDocuments.uploadedBy, users.id)) + .where(eq(serviceDocuments.folderId, folderId)) + .orderBy(desc(serviceDocuments.uploadedAt)); +}; + +/** + * Upload a document to a folder + */ +export const uploadDocument = async ({ folderId, userId, file, description }) => { + if (!file) { + throw new BadRequestError('Súbor nebol nahraný'); + } + + await ensureFolderExists(folderId); + + const { folder, filename, filePath } = buildDestinationPath(folderId, file.originalname); + + await fs.mkdir(folder, { recursive: true }); + + try { + await fs.writeFile(filePath, file.buffer); + + const [newDoc] = await db + .insert(serviceDocuments) + .values({ + folderId, + fileName: filename, + originalName: file.originalname, + filePath, + fileType: file.mimetype, + fileSize: file.size, + description: description || null, + uploadedBy: userId, + }) + .returning(); + + return newDoc; + } catch (error) { + await safeUnlink(filePath); + throw error; + } +}; + +/** + * Get document by ID for download + */ +export const getDocumentForDownload = async (folderId, documentId) => { + await ensureFolderExists(folderId); + + const [doc] = await db + .select() + .from(serviceDocuments) + .where(and( + eq(serviceDocuments.id, documentId), + eq(serviceDocuments.folderId, folderId) + )) + .limit(1); + + if (!doc) { + throw new NotFoundError('Dokument nenájdený'); + } + + try { + await fs.access(doc.filePath); + } catch { + throw new NotFoundError('Súbor nebol nájdený na serveri'); + } + + return { + document: doc, + filePath: doc.filePath, + fileName: doc.originalName, + fileType: doc.fileType, + }; +}; + +/** + * Delete a document + */ +export const deleteDocument = async (folderId, documentId) => { + await ensureFolderExists(folderId); + + const [doc] = await db + .select() + .from(serviceDocuments) + .where(and( + eq(serviceDocuments.id, documentId), + eq(serviceDocuments.folderId, folderId) + )) + .limit(1); + + if (!doc) { + throw new NotFoundError('Dokument nenájdený'); + } + + await safeUnlink(doc.filePath); + await db.delete(serviceDocuments).where(eq(serviceDocuments.id, documentId)); + + return { success: true, message: 'Dokument bol odstránený' }; +}; diff --git a/src/services/service-folder.service.js b/src/services/service-folder.service.js new file mode 100644 index 0000000..e1b7d5c --- /dev/null +++ b/src/services/service-folder.service.js @@ -0,0 +1,112 @@ +import { db } from '../config/database.js'; +import { serviceFolders, serviceDocuments, users } from '../db/schema.js'; +import { desc, eq, sql } from 'drizzle-orm'; +import { NotFoundError } from '../utils/errors.js'; + +/** + * Get all service folders with document counts + */ +export const getAllFolders = async () => { + const folders = await db + .select({ + id: serviceFolders.id, + name: serviceFolders.name, + createdAt: serviceFolders.createdAt, + updatedAt: serviceFolders.updatedAt, + createdBy: serviceFolders.createdBy, + creatorUsername: users.username, + creatorFirstName: users.firstName, + documentCount: sql`(SELECT COUNT(*) FROM service_documents WHERE folder_id = ${serviceFolders.id})::int`, + }) + .from(serviceFolders) + .leftJoin(users, eq(serviceFolders.createdBy, users.id)) + .orderBy(desc(serviceFolders.createdAt)); + + return folders; +}; + +/** + * Get folder by ID + */ +export const getFolderById = async (folderId) => { + const [folder] = await db + .select({ + id: serviceFolders.id, + name: serviceFolders.name, + createdAt: serviceFolders.createdAt, + updatedAt: serviceFolders.updatedAt, + createdBy: serviceFolders.createdBy, + creatorUsername: users.username, + creatorFirstName: users.firstName, + }) + .from(serviceFolders) + .leftJoin(users, eq(serviceFolders.createdBy, users.id)) + .where(eq(serviceFolders.id, folderId)) + .limit(1); + + if (!folder) { + throw new NotFoundError('Priečinok nenájdený'); + } + + return folder; +}; + +/** + * Create a new folder + */ +export const createFolder = async ({ name, userId }) => { + const [newFolder] = await db + .insert(serviceFolders) + .values({ + name, + createdBy: userId, + }) + .returning(); + + return newFolder; +}; + +/** + * Update folder name + */ +export const updateFolder = async (folderId, { name }) => { + const [existing] = await db + .select() + .from(serviceFolders) + .where(eq(serviceFolders.id, folderId)) + .limit(1); + + if (!existing) { + throw new NotFoundError('Priečinok nenájdený'); + } + + const [updated] = await db + .update(serviceFolders) + .set({ + name, + updatedAt: new Date(), + }) + .where(eq(serviceFolders.id, folderId)) + .returning(); + + return updated; +}; + +/** + * Delete a folder (cascade deletes documents) + */ +export const deleteFolder = async (folderId) => { + const [existing] = await db + .select() + .from(serviceFolders) + .where(eq(serviceFolders.id, folderId)) + .limit(1); + + if (!existing) { + throw new NotFoundError('Priečinok nenájdený'); + } + + await db.delete(serviceFolders).where(eq(serviceFolders.id, folderId)); + + return { success: true, message: 'Priečinok bol odstránený' }; +}; diff --git a/src/services/todo.service.js b/src/services/todo.service.js index c592418..4061226 100644 --- a/src/services/todo.service.js +++ b/src/services/todo.service.js @@ -1,6 +1,6 @@ import { db } from '../config/database.js'; import { todos, todoUsers, notes, projects, companies, users } from '../db/schema.js'; -import { eq, desc, ilike, or, and, inArray } from 'drizzle-orm'; +import { eq, desc, ilike, or, and, inArray, lt, ne, sql } from 'drizzle-orm'; import { NotFoundError } from '../utils/errors.js'; import { getAccessibleResourceIds } from '../middlewares/auth/resourceAccessMiddleware.js'; import { sendPushNotificationToUsers } from './push.service.js'; @@ -471,3 +471,90 @@ export const getTodosByUserId = async (userId) => { .where(inArray(todos.id, todoIds)) .orderBy(desc(todos.createdAt)); }; + +/** + * Get count of overdue todos for a user + * Overdue = dueDate < now AND status !== 'completed' + * For members: only counts todos they are assigned to + */ +export const getOverdueCount = async (userId, userRole) => { + const now = new Date(); + + // Get accessible todo IDs for non-admin users + let accessibleTodoIds = null; + if (userRole && userRole !== 'admin') { + accessibleTodoIds = await getAccessibleResourceIds('todo', userId); + if (accessibleTodoIds.length === 0) { + return 0; + } + } + + const conditions = [ + lt(todos.dueDate, now), + ne(todos.status, 'completed'), + ]; + + if (accessibleTodoIds !== null) { + conditions.push(inArray(todos.id, accessibleTodoIds)); + } + + const result = await db + .select({ count: sql`count(*)::int` }) + .from(todos) + .where(and(...conditions)); + + return result[0]?.count || 0; +}; + +/** + * Get count of todos created by user that were completed but not yet notified + * Returns todos where createdBy = userId AND status = 'completed' AND completedNotifiedAt IS NULL + */ +export const getCompletedByMeCount = async (userId) => { + const result = await db + .select({ count: sql`count(*)::int` }) + .from(todos) + .where( + and( + eq(todos.createdBy, userId), + eq(todos.status, 'completed'), + sql`${todos.completedNotifiedAt} IS NULL` + ) + ); + + return result[0]?.count || 0; +}; + +/** + * Mark all completed todos created by user as notified + * Called when user opens the Todos page + */ +export const markCompletedAsNotified = async (userId) => { + await db + .update(todos) + .set({ completedNotifiedAt: new Date() }) + .where( + and( + eq(todos.createdBy, userId), + eq(todos.status, 'completed'), + sql`${todos.completedNotifiedAt} IS NULL` + ) + ); + + return { success: true }; +}; + +/** + * Get combined todo counts for sidebar badges + */ +export const getTodoCounts = async (userId, userRole) => { + const [overdueCount, completedByMeCount] = await Promise.all([ + getOverdueCount(userId, userRole), + getCompletedByMeCount(userId), + ]); + + return { + overdueCount, + completedByMeCount, + }; +}; diff --git a/uploads/service-documents/496a2781-465f-422e-87ab-58cb54ae91c4/Screenshot from 2026-01-18 12-55-00-1768989692442-600896980.png b/uploads/service-documents/496a2781-465f-422e-87ab-58cb54ae91c4/Screenshot from 2026-01-18 12-55-00-1768989692442-600896980.png new file mode 100644 index 0000000000000000000000000000000000000000..44a8846ae584ecfc9027d7fba607989f31e4199b GIT binary patch literal 332175 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 z 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

hMmTM+Kky@^Frsyj@BWN6X^p9P13)BG185 zGVP|y5QDBEz^rV&p6?4@!VE>Se8C~1mqcR|-RE4@%6YlsS;=3B;~}cs*U9t@V62pn^uuExn~VViGMqVkXkrpGK#+O7ibD@-t90hu6t#! z``ocvSGN7>TG|D#x1CPHy-@3sm1&LH;W?z|8`S|$Avz31(UgZr%081NVe$z^zcZNr3%7$lfyQ~jdwPb$g|8t!4S`p=CDNe z<;{f~sF3QkGG5?p%ov=$WBb_U)wAc9U`nB2k+%&(<&H*dID(If8!u zYYR}J!O-drd`B~OjUqAJYp+`JnP1C$H}lmOsnqEcBdNXyS!R5zO4j00WPm6}ui4tR8pbsP53(}n-ikD($EQ$KH+@)cXz7gP_XKNL# z8E4Pu|>Ft@5q!*V%q*n`iJgjy^sAwOJbqwwEmyPVCW&cy0YS(G}Rl+lv z55i=s2Cw^JK5$Vwa7O7?jV>(EOy&q}z5)c`CS)_o<%%r1*2Cfc>HVvU4g|gUX}`2S1Zb$Ip9W121-%NSKY|8?=*Hb3)Ss7 zTO%^vV0WOp82n_~?b#P;ZoUVXQeN$O@>@=P)fJI`tq!q8>cKxMz#2*zAVub}2Do|M zU;YB`ukY>o1Ej=&qJ+KV7uaL&yPOtCinGrlO+mNF=ypY&VrXMxTce6g^VsKWm+AVm z?vnw=T!H1NSCDK+fWgxD^MTZzI1yu)tqAQ_aq5gBQxa^2w1XI^wu`_-FR-bTT*!9u6}t@=7tfodz`2kxYLd#huz^Bvdx zFRzTlLrbfsFOXrvxZd90MPKD;XiJyY*UjHnxa`(^Dy3BCIKg#^mdz`cRErI77P_n` zlj5!9$_lY@vDyX(yN}oAb5^c0e`Z}E?U8|Qr;u=cmBhh~(S@j&PDu^XC=EiRne!B? zv>37l|0%R?rG$U{S;?6LbU`rSnr>gm?Gdt0JFT*X{9D98!D@$hs&2=`-U58C{~e!% zL?0s~WBk}IF(x>r+BM&zE~m+6GVyOZ{kBvy+tg7kTytl`M0`!ju`qe{<;|oE@xUg+f$Rf)W+c`F}CHxuoYft?*H2?6W~3bFr>7K`L{>(RTjGc-Kf~uOTVBmH`fg!^1!gTv8B0>2zCXQuVltGqTUX_M z%?5WE_`O~ZL57V7hlawjAEE+m)hjiYA#&>Kn*8`^{daQm2Pj3QY(D-$lcX+Ns6z}Z zM$(rsZqfcm&m3_2e7qY-Lzk@Vadks9Q_eX%J6n|a+s59$9@r=eF~x1}=WIMY3f!5_ zTRJs$t*xW`x&CLmg8Y|qG{09{T{9t#8zF{d)oZ-&#`OuWdgJU4>Hl!`)nQRa-M1o$ zbc=w5bR#W|bPXUOjYxNQt8{~OqX>xP&>wC`G zd#$zC-iP-qA4BO_AASAO2l&6HXu`4PjD^P|3tav z{bp~>3kU@AK{{VWysIpVEOE;!@<-kJZrnIQj@y;+dvWOrlxtsK@?3JlsGfd{YI5@3 z>bADg1z}GLt}#x(TQ<3iS_qjx*K+2Q?R8K^(kyw0wa^|e;0=XBRT>Q#vPUW_E8ox& z9Gwn7evg#<^PloGq7Y9v#eKgd=$E1$yilD3TGu4msJ?Nw=P6&HE=_|f+3vg*95bwZ z=5gM5J0gs=9y*WyHt5tNtKX_Dx8r@I725rR*n8odu1f(Z+wrB8*wsI6d0kT*8&u^6 zR=5`{O5+muaFM^PKi~g=TZO}zs1rQ1Z1iCd)2y+Skx=%Ef%YG)`}HSdWB645C-{N4 zGl9b+XT*t#gx|j~2gmDpU^8d;kDvNvkBzB0EdJ^lAIBK?sQc4I^2P0ux(WRA5tJ)s z#TneK8X=R9M(qVI#2vG<+-Xy0XwR2ejT zltHC4c-qaY!L}$cFg9`dY{#!eM<95vFr#iY>qE}UADluaBYiez>s_--i(w>ArzhIG z_~*mPp6~ZnU7O2y{B2j^og1bDW7xeef~7UzS(Ib9-N&uycqyn)Wdl&?B^1G_3642+ zXJBL?p``R+ug@~y=N+ylb3iU-SWm=ID*d?XO9g+GRG-BS6>%T{R8_VHlVVG8ZEyJfoQCmzK6 zKe6G>)z!lt9Y`644?CPC*`tSkx!UB*&=7=+H;F!3k*1*k?v5if({|*86N6HjmZ__2 z5QKjfhhOl{wrK-GQpsmG=<-xyVI9xjvXS4BR7kGRjsy8$)(jVW;`;N!Qnt3g7Z>5p zp8Eu<-T0CpGKlrz`hK^krge374emR{TW$mRoO}z<1fOJ-tG#CT+%li5Ih^99Nnld{ zY_FS^62XA-G|W5T8vaVBp|!nx4W(Ffz)sK~> zT1j3qb8zCp8+2)8!^E6P&&lb;Paf*ct0~|4*A!Z~yz6eyA7UUilZ7gUJUGt9jtO^3 zso-~8Acc4!7Fm5IZB?u)+2E}5hJ$lkPG!vYnJ$e(6Gf_X^9GjQ-Vq0WoABs3)wjhd zmnVs;-mMppnT>61GVB=OL~}+}YUkUx(^qXReDN`D1e~8*B(r;_3@OF@J9ba&)3dWa zh`hJF?RVWCH>1N}Z$2=DLE2Yqt@)=tX6FV?DToExh~x_rv9OE$sD-}S^9b_iCG=Z7 zyrcAJ(`3Vn89@PozYlkcPuV1oCE$kwORc29X~m8{XAT;ih&2Rnmx|m;lPTUx=Vu+} z_Yu*UcNoEW8i&CJ1@tK?DI^pW<`x#H@H$dbQtHe>{21AU@#5;AQ{4Lc`lS^Wu6tK} z42+D(rkRQi=~)?c=@6mEQg0eYs(N$KR@*q{YxWRR`Eq{OLAdk0d}Yz@3&XFnL#eX2 zJm&ZJ?5i6aBkbYe0_=M5wk-fWF#=PYqGMtb2G=w0m#Tu^Z?NCAF&=QvlazoUb6uU3g+6xW34;zo?sVSQj%)xU(-ELY77+6D zPe;ho49zzUcXy+VS(S1fRlYCLV0#9*hYy6ReZr&txFu%j(xtw>|Ucl`}{g@8wlCqLOqxS$1N~nX6lvby>dn z(cZC4z2%m1G=^_cSVT%mMuQ(Ge5=?q+ID}~CVumPgyAvu;Fg=SB@jZ+7 z5*fLeB>`D*2%@a^dbl@|Pvss0$aY?1;w+gzewLWJtF>LxkbcS@hv2iy+b()p#Y~%m zp_LVll+@I@g}IfM^MKT?EoOlFbN#Q-qm-g1ZQTnC8T!6!kc3KzQ~8cu@7&lJ&Peeu zF@F-~>af88LsWhR6t#1n$XC%FPy2CTmzI05A;uH{>JQ+Q&DMfXoKy% zK6-!C_QA}nuf-&&^0&JJoyp;#(Vb|BS_2)9WsAI8Jts1Q*`H=i#rz4sTIVZ)iP$Aa6r*#*{T{ocl+ zWb<_LPM#5#Ipb09`^XfZ7kePpcYQ@`96zJ&+u0z1=K1*-NX73%+z3T#-E(QKQcu>xPVm?)zq(n}> zZz@)tZ;dKT*Eu^&0@cA%o&daIFPlOoHm*36A;Jp;Qe*Bpwx>^@PHrnN{G6zXnU8Uu(=O?A2a?}~gAyOq9#MJuv zZaf`p&aRF+?^zV%8p2z#fS{=`QIVb$Y^@)fW+2$h;kK=T<1@T69D3Rh@QLsBHQGz! zDEz3N-|pFNLNRzMQb2ymN|%+a2``4hv>?V@uX}|H0BG=gJ}sf_ z)X9nf?`27JS39_hfVy8ej4(Pb&ef?B26B>o0bz8EgIaNt_sywk@bC1@W?7bOkJ6C6 z>ZtHG;jyFr*KVStS0k727-gX4&Q1o)dNjjBwamT2f1S)ft*<{j)6$+bYF091iTKS& zbA+{{f4!R=xrPbCyyrtgfGDw%5wnhGPCkO_WF18~gQsdLuWs3cd`rv9G7AXE>F-y7 zOq}RO+K^K{pPidC_Vvw_r|SeEkcWpyng$;-vDR1nwqnXQD~o7u32vKCWTF%`9HR^} z|BopfGj38qRMWGvB+(?GUY%!W{9ukUNodFK-*{bJT@Td7?`+Nz3tMoy7=b{DcpZLB zST^>=`$O9Iia3g#l9C_}MoK{{Gr>zKcEb)>Qj;~!M@^P>w07|Bd={R0vf1##n)q`^ zX$#D3Y$BmhF7;xpmvajX7T_sOpyAdTAnR$c5kuz{c+?fOw2hpcoZb{`c5-4_SXu(E zB{@Tzq{s-aQmU-0lch=c;O3U(CNx}>8!!M~{EJIoQPE+*t3r+AM>qR75z(=+xw`3^ zS+59+*ccKOHa0fEVCCi1zUBDvIkup4OTH1IEP7v2-4@vX=MR~NMq=!(cvBQyX5#??WHpkf3T5e>)0b@EWK}iT4Kvze4kLE zpo)Nm-|5%G)dzz~&&w#i{P24hibi|eU z;>FFz>o%|#z|zbu{xJco2d{T@UENSNQ48`};QEE=p7_*;Bpf=4l0DtQStj|%e#X~qnnp|&)W+0NW4;;>!K8YAcse|3fZ-jjR8>{nB)b_j znvLDn&F^!FNW0m%}z&X|xl)(R1JJVoEtVzc;`7Va28?ca0au5Nta4 z108H0fE=>->{*gAfUs|J6ug5u)8M>{$}_>M5(EkLiWzyJ1T;7&+J=rSF5-ke4FicTG^~nz{{Y%tf3Qpc!Z%ZA$nugcW3-Md zcy-BES& z9V6sVrd!m!Kp2Los&a|)^&omSclQpOeWU3c0V9c!&g$xt!a;<^^2L`Qt@Uec>Q3*h zVS0mzuG`T1h9mQ?S(pFW9Al_G@vm1RPFFbrCNo zD&^|SxuvqBf6J-=LSyaIlLnvdi+iQwid}q!jzL2Uv^5N{BZu+?&Uv5TyN=dClJIpt zvP(o^)_7s*&)^>kM5uMl#`ngYZ}e+>cpaHVsES?D&)GVvsbUinqCUOe(FqYXac=P5 zL`A&b{FP;OF)mi@!_%*rKnFZK39Y5CQhg^C!c5!fGVoFqN_7hf%9oY_^JXXKN)K%cc~69j!Y@V z`~YS%v9pT?2R2bf`19S_2o6=i1vOCr=)NeF50CPQi;u3X&;YrY4=f1Sbii2g+Oc)7 zaBvRuIZAX{$k5u&{Nz7ZyqVATjv80yg`hD^a-#4D4R)nP6dMxZ@pN-1cX&U zNa!)RP)y9JXP>#QzW#F0F>uf_*T47hkkfIgspr&o#_QxC{=;LYm?x+dU9O7Xt%k-2 zxVUsKF6Iz8zaniijvvH63ZlAsWH@vA`hH{Su)6J<^hhTQz}RBVmFuN@vB0xcaZ?K) zRJpTCxZl?MdwC~m9mhRFd^(q!t1&!-@217pn3V}SlHX)d5*lP14J5kRzpUb`N1*e+ zhUxhJ>U5+E?1XC3^NXzLab@goc!p2nG$PK}TwfQGk_|U_Y?5UwNeZXrpoL541Ju^6 zmB6qhav5sJv8MyEY0&bDrT1$zF!8sK0jxnKk`bH-P9C1F*?%NEJGKCwID`L7wWSm| zs-beSvrBMOXX^+_u{gZXnk>p3n`p5-6BBlJ4wY3^lC^r~US7cfksAN&UPT9BJu_4P zVVgq=Nyx~0PfGc}s>Ru4$g&aBCqM+0re$fda5sNwMv532n7O)U1KlLW(9+&Nq;`rA z08_B)`t=SxVq%}z=~Y|3qpdRl95_2WPtVMxO;j<}Bi^yKB}qW5=HUTYhDuqQDMf{> z#0oh6gYibjCuTMxRFxZ5TbS4W)X5a612B~t5y3Uo1S)jYJuB!^jpRqtSs=Os9r^71 zEP{~$)D$0cit-I-H+%jL{$OhxmAyb=GsRMC69dYkAoY6hlx1SYt^GzpTZZh`*jq-$ z*Vgh?&0zszvYJoZdb#o9I7B4HIzgUJzMIf0qZerSwzjsK3laWDUgY{hE4NoyO^FQp z+(JT;Tjd`JqJ#*$6braP3VYzW>W#t1(hpp6v8CB;oD?vi%k42KODaPtOK|D{Xe4%+ zH)DD|NsV{4_$9vndIeN%8|OJa59Z}&uma9J#n;EW!bBqcqzcqKs@NRbTmiQWIsmli zbGcmn-jvE~l;McX&g@RsmII`%ySBEG3>1)G09w_njgBWCFL(882#Qsxb%O*1W@Zn+ z1CVu8o=%Y^k(wYvXfW;i+e44y|K`Hw{6NrVB3EZ225e!Z|Bcf8hV-!&Z!e(fV^&1U z0wrdblhGr-BQYK^1BT5*qR(Pv`z*4Zqn4MkrfkLyoqtQeen}aZFpPsAcOYc#q5Z7- z#nsGTvRUudEtxv=uREv!bl?1aD*kshPHZK$?S_63R2^RL0C<8Z3cM;ZXx^|3)G0}y z-A_pvPR1W)w9g)7eyZDns&~$5YKgQUV9J4!r+{_s%HBC>zm^S1 z53ow?A06CnFFCLFVz=J695^4`iGJz--n>-e z*z1A#K~LvMT;II6^+reX?et%HRp|2<`TTb{V<&9r*LclMp@u$4J&!j!h}H566}}To zScEZK(u#1%=<=~u_H-xy*9$`Cs0NEw_dqo}Lnl3=9nM0@Invis|QzzPJ-rbMS@LvHUQ3>qH2{CAij2 zzGz~;0oo4e3aC7q+S@-shPiZIkNW!Ag*gj9JFvr_{X8YZ#C#pzlOHo&KtVlJ52$?MPLBUVfT2TA`m`u#IDnan5UN;x4K#w}768Yd`6S%^$Q&NfoS}>3jn35G^d+@&W6v&*NpQizagccJPN69Vx8gLvl zJHKd`VtFVDBSFOB;d1H&M+Hl|v1tKvGbwmM<_-=i;0E}*`Z{0{crcxWg@u9g3gUDX zHZ(k3Rq2#%Ihu2P26seE57*1nCyMx8gacSq$iN7~j;XVA#QOSkfT%!zGKGJU!=>UD z7KVXJ7Z1;bor6PFeSKIV`u;Bj4&mx5`7;dg?L0i9%KV8Pbr2vV3k&Ou1l*)477WbK zvw;LNxx>)JFsoy<9`&mAgM&kk@A)D)Z^u*GM$j7*^zX_JOt6&|9>7vB^2M)Ae@G@Q7CcD66Z{t1a9-GtOmTVeyI1fr1XU`|L}_KGOVOcSM~%!N20Ju zgRqnZoyyKO+PB7oJl20cO36VVzMrMthJ{6i0GwE3EvhQ3KpPwTCoD%V5~*(cYWJ%EHu!sWxE?e?Y?J%`tj~1kJ!yrSPZ?2QUL+$;2@BCfEFz% zB(?(XXLz_2OP=|1w|ew}rGl;eKs}6s#Bawxh#Pnz1)u^r0bEly&zR|fH0lSg)OvtL z)B28F0LcKw7i0sV?gZSdQX#++1IBX6c)ynWK`B#{TZSfmO@HZ%xZmtcllAfKL0~Qr zZhlU&fD{Oz{qnN0zAk|qMnEKHNRm7?kj4LVGsL67qvwGg6_mG;ZY;xXSK9ZHRJZ>? zeaU-$HbJcGyz@yQ%;2$lA3yc$fBAWYqdqDPlF?=8;b=6@K{}mz1|`+*4Uy%0cs%s0 zuS3IOd|L1Aj#e&bX1jlXL63%HEEnTjRGHpbE;SCGn4uO+EpS6$+;)cU2bsQ`$&xpr zZFKhk;P?R;Lx#G-aEoVlz*zfd(VNIyRlkm4N^!Wl3A<>Su5mt+PqL7<1$)%Aj!8TiGnn_BN+Jdwb= zEO|Of{>;_hm`w0axp;YpVqUyf_^xi%v|OW*v7yqJSWda)B1;XNVp&#=s4CyYUv_eF$cwZh|y zsUHvYL>UMK##)s0?CHN2bhp8jLi3;!TRUDK%o21Bb=@4{&Qxgx!5~@|`9}Jvlk+sq znhr_#_I;d6GpI}QgAzR%wl!ZSO6zE7n~FfD^Uel4rRbkk04D)s%OodvYj9a-1rlfL z!Pu5t!|{5mon0wnfc5!oh6CO0-_%ktCeHlF1S{RC^Ka{iAhGDRiY-=^@=*NLs)`!$W;2-KpwdR?Q5(Rp`64-b#oKYvyRU$vPDkQ1yS zczaFDjhY95RaBtGm2ByJ>(uw54&FWrD%FvApG&kW)XTKIPN$-PbV|9q@3J{!U&sI2 z*$}sjx4M4y-_rdegzkf9(9HYlwBbU(i{)1hKBu;J@Qqh@E3dq+_dKn5r^8K?A2o~y zR50sg-rnmxPec_IVSn{59)f7DZ=zGcjq@Umej1!9?k*n=?jgTYo z@`XaY7eA*E99J(gh>kPq4ihMGXEj}8w@bo`%ZF4kx zwdK4O)}w9I!OgzX{rnXj%+Fxd*YVG5XQJmrHU2!lSlyyq1fxE4gy+8F9jYc(qM_(f zrtmn5^KOK=u`lXhvh>Q7t3vnM#}mBFM3|rkb{(wN{p#-M`Axmi?Q3i_GSnA4FK)JS z@0btT&RbKYt4jqDJTVsmE69F-4pjM>KhWekrjgG+3vG=^tk+= zt{!cPCLGq>6ybiwW;3zuQv;Ji75Elyy@rk*rt{BFgN8X)-THga*mEtqA@t$h8Jq<_ zG1dI{maeYIGqt2AzF48iy{icp(;F_OliCENlG%j21Iesli;~2Iy7_`_R5!Ocr$C2V zG~XPUt5wn;g4q1=j`if)FyOi$MpCGdKlZ`C?32Ad6LX>$vPAPj;gk&*2^N=fq6xHb zqZc*B-Zox2VLhpqEoe$MXgG!sxP(&Bjr{#Xw07{zrdiJS7a1aXz0A@dlwI&Fg%jxI zJ8#*DBg`SiI_(JZZvr%%&83sJ;DFeEkPVk+A@y4-GT_i)NoGnNTnqZx?-h;5nW^&c zy!ph}a3o8xYimLnP+x{se1LWSE_WH)OwB;q6Z^fooqk&ikaK3oas{W5XmVSKkl|ej z7FLrkbRqLk&j{>#Y}K5*=hW5m6;?A#{`*Hd1LeZbe#Mc(#m_G|TA)=1RE1Beh*`Mr zcf|JT^{%L2-{K-=;#TnW`Myp1+ATjY?8d~ngT!_DQngGgUx$e45ca=hBw#enIDQ!^>C+PKE5n<%lkNw z=3!8l0KnAT-abaXSelIxE$B`q|))@?Y(k%S3rqi#d``7(e1i*?} zlU~Aps4Eqn4mu#n2bx~l*6Inhyg9ye7orI5T88EmoUOecswF;y+)-|}h%%dZja7$3 zh;_K%;b-54Fa8+hCFhPpg*=O%47Mhs{@%_)n&oewIbn*)=PVE{KEH9`ziU9 zrSJv*PkH285}4%G_?KZqr$rTvrvf!Gol3VoHc{I__;?MJk99~f?bw%4(f!`2Qf^VdI9isi-Q zIvKu7&=R9Va}lTuu}{}5G3S5%`p`eOqTEk`95$(KL$;e0yXAI98W$EVXWA4-@$(tG z(SlVecRHlO^PXebPH{6&`77QBGJfb}nLRft4;eO6NbcbBy2$Y-)ry&dr330!R5cP~ zU4{aah?p4V$PjM9(ao_ghOUlqfpJp>F|;2QrIn41pYWVOo^|qi)4V`~RYZb{CbcR1 zj)eh3YK7?=e2r4GfJp2&D(D1_oW@e5FUR^MG#VXC*G&^ubg@ZeHy2f z+sd1KUR=!kQCWcv&VcrqWu2y+)RfzlH*$-jd(9PR$|geHI)wA_t4)oP6ekKoT3x9Y zv;BzwB+~!Mscp0xEJrWttYf~br=|4Ixmxx;cfkrnwu9@ohmRva?-O|ZSUm4--_DzH zY3Pwz?-Jt5C-*vbBd}*|k6D(kU^2kzH$=ZUdrp#sBsBSk4{9fzsF`!!|GfY6E0`iP zt1j6;Taw*_`bPh2{$Y#6gO+QKI@1Z8S^ykaid3>`K-rD(zFG_>E*H2J%(nwomXnxI z{GLoz^h>OOZS)bc_!h6~6Q?-;XN>!|!v1#{*-HJq$|G5#nf>FpMfWGUR{WWuY<+hO z3+z8{yZ6r?66jwo{^F;g%BnPQ?4=fgIC0lTGwFK#s@)nTX&d{de6YQ0ORQngPRK-$ zP0erp-Hq!eNlKx#Cyv_kOXMu<0&dGKsKfe;ZMoFW8aB}T@MHQXItkt?o%bip>Ue?3 zqo6m!^O5vygACCoZ1Cx0vuaZA*ka8RU=q#yZU)H4tw*LxbBw((u+^QNW%!+}%Vi1s z#<~-v(PYPVM;cQInH0CcMCcY7>D3Y}LBNv8yi&x}6Om6Ou2Pk_RSjSizx9(u|lb+4+L|7&0*# z-L;iuz!A115DhbBNQ}S{Vj{xp`Z`i#P0}YogC*rB9%gLyR+mYJJQTu6SeS_3V}d_Z zhtH(gLo=lqVp9;k)0Bkq#HWRFbu9k)_o{+!K~SpbAh=7wWv&xW{76jN@@XdsCXvOndhRw{wP++iDxpZhAMw2HETC?R$xs z^OE7i@b&fo^xNwahjRWqZIV_C-}KfjdB(ENZA?_vH2pjJM-cLg0K=g_q$^Lom@^&n z@3a{uAl6UpC7Mh88vR=<1uUL^hMZPLXcFn$SHbNBj}d}j(k-JW)?&8Z{>(S}rUE9Q z!IZ*%Ib>1Yvj?y5f6kIL2s+9;r^wSTf{@GnY$gMZWO2Co{iny(X1z|xi+XuaqB9kE;BB_Jc8)t<3 zEU~8FoE9B|IgdngL6WlKHLC&dHsjt1ssM$?G{G-pO~ID|PZv=qLLmZuAp5Okq-T#A#<* zIVq{Mth`{03*D0X`da8?r@Lr|8s?`@JKnP?;Ka_&9$X{cO61P*c3171?Q1ZmaK-ep z?5XH0RkDPn4yqMT|Co7!aw#&Q8!q`F%}2tl=$@RhKi!tjT=Bc#7yW^a!ia%Sk2^VO zVogL|!^}j!F1^5mMZORG_!<*EKP~HE=LzFyzj0hZtwd%fqKN5>r+=;mi3D(jnd=2B z81bg7So3NXYuSR-EHavJz`{dvLW+ahM;F+L*JN;e_c16)YDIp0=M-!Qrbz1p&mUSp zgN=ie^cH8KhTE)seoKt8Qd(Lz-Ok-^EL`kCHp;2h2Gfmwm_0Nt0lCXg5OO8F(AGL* z8_qFKwGFsIsi*(HTfb~EqJw|+c~b^Oi_#q0W;MLS^InV z5xCV|Hupu3FS$2IwqE|yD(M>5uV>cYCWNwj|C94a!j_O zn49>a^5e@Cs&R=F;cuvfF)c~8PF}4l>!au_NBn!MC{KXy#jaWS-AM`F(IY~q> zdG(%zc&=f3ELY{vZThJ1N?jso!6?C7I@!?(^!2+wC|ns&Wwj5t9Lf2r$wFh=4>;sQ zirTwBas|PoaMtzQ7GMRf>I2-B}eerSf}az5pYlX+94!Gl5t83BS9Ci zNV6c=d-T1(ZLHDr^bTWUTxEbL+?nDWdi4g)hHp4Feb|Djz{%kG41ze#4~Ct4;0kb|%7#aH1QpFksk>rRT?ezs{%eY!{*) z`C?&N>S)aw>_-|TP5Zxbrjwv}a`;-EeaysBK$69qai5#jVZ@?E4MK8$9DFVDQ8V%- zTAB)@K&%opesgi5xdwhsHZLUd_pD6cD@UnqX>)##2Sp;Ms|$J9PAj8~ZIvV`ppZKj z3JFTqi|MrqQv7m2{1wT06ag}Rw{ucuz(%xv*QB6Pt=2EP5O%(|w*Rui)Cqd1)ktWP z=@Q4yIEq=#v(}zH;Sp3B{PF@M6Kj$TYx~d9t8A8~i`xHurI3%AqYMVpbb77EAR*Qy z0_7f|JLL)t2d^V0bj{cden(rF!{ck_EX|ik;CVwdb)B4RKnDI>JsL2$;Cp_75WmNV z7uBVW6yBuXA8Uw#fylD?q=CmBxJ<+tej3E zbS$_$KYnpWKt^&jxyp4PjJFQk)*g0v-$L5?5H+Glr0t4z(GQ^v5XOH@ z|DyqCJhH3!_i)vK&TSi7Z^pp3QC@v+G@0OU;x7=D6DuS89Ep7}PuCh*o-|UTmSgkNW{Gc1LXW@=%A%@tz2XH6&zEPTd!fK7xB2&@z?S}-?_Dewk2eZj zgHAlNMLgRB+5B!N#7rOw`zjA7wD?!<2!_N@r4iQk`ML(>(mSd(&=(6Y}bt4guh zW)PyHjF8bpRAjPH1>d&emge(+7KgaD`^(YGi&fRM5gOno@@GljCfqz~YvUf+1vhGv z@ou{ZH-#%iM;H3}pJLo!EC&`C6ua(s$}IX^8-7FkCcqGBP5?OyV@Ld7Iq-k881Yhb z3?0l}P2})=5_61Tfa7>*uHiONSq&QBWb|-2`XNJ;fgD*f~8H zR!9;tcM3Tr`MBMFb(Oj}QhNY8l0nVrx1|GD;HV0?L*#0dOkHRP9#weVj?;q;2TsC< z_|4uD0V7MiW8k&D1$4wai$K_D@|_2bxUF%%yVz^*40TY497;Vv7|l(iS_^%q~oPax*~Eh%HzFY9`#+VaM=7?)gKu{ z-^V|i62au@6V!zXo{-`3VI}Sx$AM*3cPu54Nl4*I{v!EcqLXK~=F?w8JUNb7+wu~b z9&b?VUd$J53Nu{v*|8^z1S>tMtqrAk-o?rDXray?Bf{(}D!RLgLHeWDvX3zom`QQM zM0`%dU1*HYfz#x>W`vz1HeSZ*H=^~blqqb&k7Jy}(b@PTl585nule4vM--qU^C`J} zYAo){swiINOCf-J9J-3B5kZ%1#!9U={(&#QYN3pgMHb&QMMH);KTty;rL504x^_Ef zt-pu=`7>blUHb(#rO0f7CR=4|>&SaoT$o4SQzX!2Aso#}NDg04#;kZ-qILR_kntt6 z8MhO6Y=Uzzb^GW#304?TinO$~oefi&5=c=OtaS_f?fB_qX>YPd*|NqQ>b)D9m0Hv` zm%GB|Rla;yB4tFeHl!u}p){cU&K34^e5t6K8K{yXekbu|!|Y%l#6TJ_#8fxdDo`8A z)8#)YG#@`Wx7w>ebfJ_)1DNZ+lm)>V_VNbjUE*9nie?nrBUCZbvOx_31y2xb12}w&g1|UJoKhm zbvp(iUIgQ%yZuy;oU=<&j^w@e8@js_6BZVp)T&{#W%;_>B-CK;=okl7!NcAcj!q9J z^BTSca4_g}euZuW3OYiac)(cq+m2sQK5YvqumNqj?ac?RN)z}3HyXE$KRsFt`IrB?>v_ELCE=x{M2?W?L2$!4d!21I$HtM2*T`cI1L%B~FL;v*J zlspg;$Zu-HYO?hAPdS=pSFV3xAex_U^hi%Ny zxq`UI^16Jf+r!R;*_k5Mph$h zNiJitB}@Lys>a#^306KMEJb?vya>HCRl0V241oygOQ|yIb6aN9qnD6gLWiYRWvEWK zN|LrvHjeB!Kd4tA02W;i&u2~_Adu^0@%B1Ey-SI!sL`*ceCNF*#sCCs8)0jgy=PR3ARObyn|zV%k}w|n@}{2Hd}no$t#6#v44s;jv#Q_-9#v7iv*h%{S=Qx z@hJ~!p%UAZYI&|GB6ZSkMQX09m%Ltn)ORjTtpBZ3{U3R)C7vSl&{lBqQnfhxxc^fl z%XK1)Lkl@(o9TJCpFfcde&SZrkyo_%m_URg!Cw~h4;c(#yXmm_iT|yg;Q&TU37X0N z!Cy2s^>9D;b&R&FsS1JYAGA4wuBgUneoLD-jjlI4RQG8+GZly<#@v@!K^jFWz~*?b z`>4FmQ5L_RL#AY5*ojE8^Y+<=^ zYbc6jD4*S&@%}jPx4>}1LL=|DBR0<9A(yI_q(dF($1k;C`59mQv6%XeESj}3GnIDI zp)}IykSXSKDIGFiLhj}RZ_-m#YAhg*ZLZe@SN?XX2f+&q`NfwT&2+=40$}kzhi7ogBK044d)u9cRFNfRz1POFx znlwUcwM==*oDVwuBYVDh++;A+>S2p-+V*!_MBU!<7r2lP)&M#*QT3&XaJDXJ(_1H{ zEWIx@Vy6im`K{8ArgFIvTqdF@@SIm&)H9CrKwdhwa>O+zu{+4>JryB}e?^owVgX8E zP|bmT)=2tGNu-G?C-T(ZKV-hc#6e?daOcBcf&18CREa#x|4$>%oyQxfj)?%d z3-C_++=>A$^~mh=&OaYcWz5lu$>P2(1IV;US&r&%ku_wrtF)UXJ=-<4hXUMDvdKQO^=*K|ZKIm|wmNx_+p;KLxqi=LGGe zO>N`>F!II#p|Ct^Rp6qLyxOT3D0hM)BGU9#i|gv?viTAfGpp63V)Iaw=5OH_qIjqcXqsTV9Bi7|J;Ot zKx7AFI7B{{cmqaw@GATGFKFkAS0L+V3^TkR0hVSu&!UZO3?<(PW%`c^4@O8(WzD_m z&#kPj4cXa1`}|n^;trQ7bzpZ-v=iYnmk{{ljxl*P!hDDqsn-DZT@U+58IhX2P!Pw@ zGLjM09|GN6ALe&HaLOO@>;6!LJ=2cCw9-1gUo;WSdP>H0oBX-jNTzl`k$0st{#akvV79iccU<|rY zYir-Fpgj8Jc`ue?4rDhV$8RRpDhp-vul5IPmGqRsJxStvgVi7f>iIe>t4)FoiKJSc z1GV;H1{`2s3YgcDKbB@ujgBVNgN)VnGIC`tJ*@^#_B&>U1n$9w#VTC4;4rc8HtXo= z#zCiXK6fek$pk77_U3e1Cd%cn6e~(B>n!`XEUDq9AnxeY73|1ZnWN0Ob15U@3dNOS ze#U4&YsuVb&El5jA|)thNDHIRcGaIWnxYB=B{~?UY4X4A)*#iwVXLhEuCV4 z%7?q2NW#PxY`waEtdkO@`C0b|=@Pf`#647`;{PiFjatCoU20;8h(7t1RbpYydA|P0 zWizE5P9e8>wpRmx=&ni{eD_V>;!UkJ27oFZL1A7Fv6!1iU^+zW@b)&U@yYR1hI3z0 z0QS_G-v{2hj~F$)fxe}KOzN^GlL0Y;V`3}%`uqSfm0ZD06uBlsH5hP2^v2b9zAeQ8 zx?vP|>!;rA^V#)Q0j^?Ul_h`RvrVsJu`E^~uw+)e3so#xStA_E|FQY3fk`g4N(=wx zq?)zj_{4n<@pS4DcSti1Zjd z8^z%a36cC3Jo(XWfW|OyBRy1sV^gDSy3+nB^~+R5u_n>`5f~@C!7I4}y{RvO7?B0s zYHaBc2ESwY5&;YpK7)Y0GglJ&hDi1o_{r~NOwR9aZc|!q=<15>`KwkiT822atsy!o za(I}1BuDfqiHKLj;H@u6ABqCyVIEE+>!MHe5=Aj>bmN<}9<%8OWk7>%XB=OyqKO|q zSm6czeV)Rcy-&yKTkoz|r~;3f^K^>KoHm9?ArqiU2_W+aZ`*@S6AW0=WO?>8ndLGs z&$Sf&)4@~lM?dl3Z@#ap7i$t&=Cyl}+pxMTt`iivgw(eoD8%k>c*O2ksz&S^p(B^B zn~h#aG=>7{lewiyrf?Bug^7B2+gU+s~^pWp-vc)y!0+cVppoePN^Rk6$9(YA}n z#YCWorx0#EWnkvcrJCr_QXAc+~wBx~9?xI`Ghz-U$ANu8*6h~VN z#;*;zy5^v&^n9baML+vY`$aROMVE=_V&8K~<|*W#HfJQ=hqp$$=H})xGJhp{1H;L^ zGV3Mvg4;QBZpVjh(=2 zXj3b6&~`6&e+h2F5WBoE1rpzsUX1wlSR7b@wkUhJL5oka(e1W&uyG%lEC!wqDHTLM z5|szum+cW|1fED2XWyc_|Gf2Fbb4kcu~`E%x+v8z#(Z2{d-#)0i{cj?(XjH?(UH8?rv$3ZV@&}_eSZEkZz<@`D= zkBrnWc*5u%MVdFFsy`;N+erLGi!vIA0}v@tuKC}*qOB~Yb7yAL8>7(j;wPOerSZ(0joA8wq$VE;@&D!SBYt8Z+mxW2}KPI7#) zWLtPSNL1I@(J=_TsP`h8+HiELCbg%)F|p=BQ&ax%5&8 zAGITqVVpC!tb|ROX-o!2w>B_I17)mXad~xTi_t%s8cn>)$Xt^FSfv(Rj3!_GQOst+ zg!eO=91m|+8iOVOqQxk`HHa0#46EhZ~B>y#VObCRgGc|G98WTOMBt-npnX*;3D zgv&`!Q-u?;8Jbr(LsnspsVI-5n(FrReh^WE!2l#&!Z!-Ld$QWyC%%sX%wd<~yufF( z6e2m~m;CMF>MHl5DU9Flx(T~KVN5o>PmiM@_d58ur2&sPSgiZk_a?{rc?P~(*~aF{ zY+W!cfYH0WFINP1Kfpex=lL2~DNq3q70LjX$wXhn`xYOS%d=l3=-xhndPWHd)h#%} zx(!SIjT@dK`uu6hQ3kAL1{ikp^JjJ*i6Kus*D~)#k(;c7n1BljI)vJz_am}T8=Zs| z;sCft@H7yKnWy4KSyH&Ns;*Yu)Jcp1K)ITkQhgBIo?)rzBTJIz`%JPOOTCiJP=k!t zN0DVF$gi`&L$9mrYFtP+@6pWlNtLrp8>^^A$}{`l;>3TSM%ox!Rg-w73k5NMyc6FY zI}p`Wz#0;8Dz*Q7d?KG*(ga}OXUET*+!4sA|sN#0lN*EdO(jvFNflCDc%#iytNdXAl=q`iw&>V_Ej?2Lv zB$q04pfltG?%J0{+6^{2ATU>NHP91C6VOY=t~i$87xuq8PhchXIPT+hdI@>n=njIML}p`7Z)!T zOR3`9LIFDp^{D4CQn&&cGBFz(SG7+6eHf+qfaf+z=UR-?EWD~OP98;Ok;KH+w~V-| z=`LFebNp)f;W^e5$G;cG0Ez3BI6+k8Cfel8o$WTC4c9vu4EQh`CMg37XMr56n)(mr z;r0e})SRzpfdV-rjSPACP9%Ak?Ol?ZhV`p)Um+Wgd~%o#bdH#U2`FD3IYOL}v&KW5 zO#l=1U!#|4kXIBS!~^6TbT}6T(PV{_wrOQmR)=P6ubLk1C&p4Ik?6{SOV2BRVTfGw zdnQFVMfw0~mS=i4rH!eJw^8vri zoR6uBR*2?e;>`0md&IGMBc~#-ScLS*J3x7!ZYb9~e8YIXCjdh6k1VryW;w89a>fk| zoiFK%On;yOz`IB6gRx1Y2 zw8lU2GGk9(yAr49MH7>F163Xsisa+>N+SkMx(wt#dY}b>Ln+BWc~gKmWdjMFZ5Fl zjQMf@p$J=7nt!Dy5h9 z^c3LvmK5WfHt;m*)ctEivhDIGh0V`+wFt@dY8=zA6z4^#DMtEg11R$)jZ=y-XGRDX z09ZI+^b^8)=lB6K_VUWY$1(M&bjo!!dWhKf;+L*`M6YN|@Ii9B}h^tm=4sMeJ zD%v`5N3R{%UX17?=a!!00saMoJ6N`}d-9rS0k|M`tZ{L>zarey+w@~8s1)Bi=Yv4G z6uo(J*>jcC{fe@rNYL&Dkm_J3XFQ_m;t9~A<>>337*VaRx`jn=$R{ zy_rj9(S2-LOrR3{rKZSM$v`D;GAU|n{$<}ZIcdLLt_skaN~tTc>^n%~QzCF)2i#n+ zgcRD0z?#abA)1jK;iqwdvYv ztQ)?Ey^UCH=sB0oJDL9aX+NjJ%iWn|wRF87T#*DH5%m!DU>%E1*~V*>Yx8hCX>62s zB4d$JQHNaFGNa*k6ICZXXPeAr1#i0oW-ro zImYThF!&f(-DJZ3ErVuACzc8ca(+ooR*OL(p}4I;-|n}K$m_DUb2afc*DzOWlscb? zIk}OzN}$lC_fVPgA}2ytA{OnN9L&_L{O9@cUxM1QCvNpBa&V-{{An6{m5I%LipX!I zjvmqpB}e31%B|B;`NJz;FXrua;Y3fM8dc8$Yt3SdB(XHIq+KYJUkeBQ{^KgU1VIOh zW++X&3UQ?hC$o6fkvLW~IiR)zrazfdOo`YUV%v#4K%a~OFTPciDSILeVhjRHi`f;d zFriTzv&snA#g^rKi3-B^NUtiLG>1u=gCV^17F6wGX?XZ7s%Y}bD`1uc$*m9!ZCp-> zXtP;vrAFJtNsPl#((eD^*st5_?AE$u#g~awU9D%*yN>6&XwP{>`g{1}Y0!~jp0lG` zv*%<P(j&Ek;hXoQ1|jB z_W{!Fm6gguSCf%+hd=TU1x=G%{b#;UUzirG8Qu$u+MHiLwh{5xd7PdYXJ~X?&l_r0 zGxodP$_@}bY_|@G-`n5BAh?N-UC0&x86(Ue2^B>5Ie0T9hjuZ*5xpD!O>BU;i4;>M zW(Pv-VjLJD15OMJ)iX!=7Wo}R;FEF{j*P;I=m>)7WD;sG#?mdNb)Z$E!oGMoSKYmk zm;zEpx#h$bA83+xO56gFX#+<%RvhwTs~??P$3{m{Dkt**PVCQpoT{{8i8tv5gW`QhuMg^wENb9h!JDZV3sw@>_OM+0jEhNDQVWeg?Z9D|S2vA!?$&c!szIzNf;YXx|SSZOrq7 z>BoJmKtSy6HBm7nW`s+-;19OQ?G?ksj>bmAM(dLy&~Yb4J#~QHV+rq9#PIolR8{H$ zcj89fBFb*r{kp;ZJ)E?EKHe^r&%SV-WPZ$y3_Lz&jf&%gebVhDYH(!_~{!E4M zT>L#UC>8d!c38V$U!^@{O@cCO)4*n}y)!EQl+%YA;I5IY$eyB{BI}%ZQM1Zpa`M=5Qq~GZ!5b}1Ru>vRkls=0)#r~BzmgB zvx-u{8tXM>P(z24BDc@?w9uPaF4iLFN(BbAnOD>e4b?U8kDNG`=&<&iGO#E|WNphJ zxS5cbhx$sGtR7OsJRahFi9gv(Vw)%l4Vu4uZ}f?W_D@P>k0EQ))MTM)Sme}40~GkJ zDjse@xTXZl(w%2u5_Q5~tj{BAwl^ZANTk$5NIY&-B@X8*cn|Pzs3$i@qFU;aEzXp& zQG>u-uG{DGTCn0({9>+Yci>6E(=JISOJ?flPvfV8S#Ee@Fl^Z=q5{E8h&e*-x3KkU zArhZ*w)K%X`{j9gP7O2D2vH5Pl^R+)6iQ8K3nyuJ<*YOCe_WM!uim)#iuoHC$>PF= zxd{BmHw%i8%?~nIdy5p)`6*hbK+QanP+kWWSH;Cy^Ae7D?+K9emA#!JQ`v)~IC`hW zL6ab@je|fZPcY^vBo8y}hmo7AZ7y&Evm_K|m0UK|Xf;tq7H@I?1OpgPE7necQ+qb$ zbY0W#;k`Y)0SWdT%ChZQiH(wJwWQK&V3sFSD!*hFK09C+Om5&pKY*nY6oLzHULHDc zf>~k5sC$cHNrLe_U(NewC+{SMGHiBi{-STtdgX`>7mC%=0MGh}`?p`#Cr zCyT!lududQAsLV$9P=CoJR)+KGUvT|%vVDCf6gV$$TBI?I9`8LEU2f-oh-ZT_KO;J zEU+P<4=pf}py^v;zuSm9XHhtMllHxr>x&Y5!ga(5UJ9xiNN(kb6amdQZF|$#^r~bc zjtfJQJd-MUM(ih->D6i?m+TGa#O~Fjz-x6(MDK|Oh-7)`TCc$&f@07AneP65nF;vs zSaZuAd?7A!LB;X>sa7XFIQpLnDf@hqEx1{Wso{U%AgO7Do3q&tPUw1bNLMm5_I=w(N!`Vy(a+b%_5{Y|@rKY1rg#oEjnnUfi}=N$CQ9jv;-uj$kGlH5l5Zne$EGh-E?S- z^=H&i>%?~a4a!VLlBw)+mhFq@)SVTf6-hC>y{d8R?)bZ;~w z5S7F+6!8Q!@baSL`uP1y=+Ol%4QN%AC4YusE_GK?1_8HI!2K5BebE7CjT9~EL_{`tk%s##+H*c42Ys9Jih{j7Qx5CDv zJSY-YesJYp7`6=+x84l(=<;a~!b3zk9{Q_FZXT8udx_;ss|X5nD{J+PvoMr1O+oN#)6;y*2{E=U+g{ zsb>cxuYAwIZM!--1hSe)h1go5&3FbH8HJWv8xqT2*P)&|3JeKww5l(4QF7D&DzaO) zWfqazd*#Bwo)_MI;FWSU^qPQKN?@?^QZ8MgTtUQCj2@2gsQps`?S~@n?8_yAW{|k? z%xAa?)MLA~o{GY0hl%~Ms>nvYFP(S9`+wLE@~BW1Mkx~agIa3~`AdDDa}l4DtW+vi z_I}mVs}Quw%nv<3FEEB6D=wf;c206`bbm@oucbs5MheqOVpkrI&Q=f!Kz0&PRoVZk zAX>+lCST~Lg>v7oDRk8Q|L78)(Ct_oUyj=fuld^iW*5@Q@#7xYlj1`3Pv4SxEVB*a z7VK0{;0$0L>^i=A=}kGi4I2WZ?%AX73+8-1Vjbv zlRnCF`0-jLeTVoAUEikEFW6qA_`;?Pa0QyMj7))e^k$MM5zMc;>6tPFksw+?J)m3G{$0SKbAhxHgS%2&QhP-k&~Nn*^%SD{?;s9!tdI;1mjm z>hbxYl%aAd+LGj?iN$>Q;qYb8>l26HHUEC0Chk7v1Z$?q_D;2yelA7|x1jO2S-*m{ z(?<)`m4a7L);u-jh&(__GS`cq;O_BJ3-npE8^>2vqm2?l`G~P|35_k+l(ze2r)H$n z7of4dZI4Q}t{=S?X7XHBI1q~O;e4fwzqJ&Fw+GqQhpN^UF$W3a9m(s0$*H3CJf%rI zYHVf0F>_izF$h zL7bN_<3hHzljpw4yOv`V_VH$=XDUir z0bjGwgwurjFqn7dGlXTC7T=6)zNwkLLeIx_!pRXrpWcLMZ;T{4W?t;h*gmKg4Zqu8 znQY7fE0>?f*ZfHpl^DK3M`E-zdGZos%W=v#`F=hKw_&{LRk9(t@_|<+QS*F-ZC`qc za?Of3^-2#M1q0c}jUhNwgfE|p0}YliYsFiSn!uP2VMo>|KY*H;=%$;wIk%H1*i9Yq z$`v~CGQBNxZ0oo4YHiz^IXMH}d#mfX2Q;cch0W*iU!{nZR1Xz8GkZo8d$3f09Gj2Y zIPeM%9x+uyI^M`H`;A#Q8CM;GOY<7ziJ{gy3>6u~K$hJhx|7W?sl| zzC9TST#OBstZ_ON|6%l88ZuD);nNe6CQ{N<<8<%LNi{ZC#;!k&x7?u%+Q5A-!1FgRFeiX_qe&t4t4H}w=c{{DJBNv)iR1Ca*iw`&C7Wa2C`Izo!-!N zbJ=FTrQ)EN4KI!T=pgs;jkTe97IU){)~`b+Kk?>nyy_%q*DCtjKlzbM|!t zkDtE*y$yOZGdbl3UfDDfhv8S^rE+Sr$`0j#94%Sl>Xs(0j_zII*;2`*q}cbWs!Lpg_r96GsBrOghl~aWQDmJQ9y^TkvEDd^%s)I^*?s9${8V^X*6+gyRW$%k$O`-bs8Kf4Dp{Rgz{Ku7y;AWvuO zNUL743t}tja7oXmfRD7jo*^Q`-2vc-Rn-Crwr$$|urJ1pL1XuZYYM0-AhjuC!l^rX zEupL6m~0=l4j(DV#5i}}VAFnKUR&kC;RSOlAGR%6364R-_co&$eLyECPmM4|D9uZE z2Kq^HML131@>0C~oe59h6(q-ZqddEAxwDQ(KuAZB_F*U1<71@a$=X88ZejB42265S z?1VI*ZyF$ZV&kAe@xmdi{6$C7OdN7i5Lcf2$|nv^Yr6c$xz9>jxhjl5@`6A<{zth^ zPs5{1KPhL>Px%qmfA6%nIUaOxytJyRRCUT_ui3ppoY`9X**(UX?Vy`axm6kz0%p3m zPhHzieX8xgUNvB%i9c)ZWwoKSz4AY~`M!M8IBo8)QE@CatwegwsoZcAj($;y%FrH3j*}+^%Aso#^o!rqQWxVLiZ*!WkX<`e{$oLd`QWROQZhUxlWEzzT?QDO+3`9b2k_*?ZNZsNzTF2L%*70398wD~& zD_$)G@AnO>kIRL|uqy2&S=Q5)5HH7uoL}CWnysa1R#$;xlS3T)U4UT2n4{q1byF|? z)#yH-ZvozHA@ujJi$gF)O6=_1XbadtZs%>LJ*5G?kZN&;A?ot4>hT-Pte^Hv2VwR~6Ijshi_2#l1wz$I!29i{C%_GB5umsNEoiIf%^A;^q(RNe$xME59&OHI}(; zen^th?c1$W#X3qx=xOJ1PTCWe7I zF1hP|J%q3)=jr)}zD7PAozX3;`2RQL#WB{EI?7XnLG&)sZ(8?RyCvgWjpJ5Gc=8EC zCXMb#yC2A!p(i|j$}XJCBnKx;GH>;)=Rr?|k@J3;ccAO9S`9LKvJKtAC5#;AdLUGX zTwh|Td8|lGa|}%BXe(xuT;zTinE>bQFXIF*X1Lw;!~@*|Umu*bkECZ%qT~;QGWiTz z{RWBE*I5hOR2x`oij;M)l&Kc87Git1{79n0voYTq4he~N3yu4iZ;TQ5v_j`M$1Xa^ zWGptX$&vpm-MB!Vux`Lc_klKvP~}b0GdH&?dY0+sG~+=b7U%v19DO?R7hx2 zGQeb^UcO^(T&J8U&9yg`U1gXWFWwSn!AUXVxmn60AeJV$%)z6f$F`qQsjy-=doXO& zRSJ5o-FBiIro%hUqH18EEFwGzUdJ-!b#917sF_xQ*B%AYDotm%GtL(bLWAzFnh&?z zg1b!b@m(J#bTA^b6BQmb%Ej!@gaL_}l#F>2jlOBa9MbhR?y@Y{1xMCRIH%rb6vj5b zqEQ0fq+q>=F*&O{1echtcw#AcQkmn)&ShgcqT*oD^f<)BcdnNGZWHRRNDf>%{OjBG zv8yBfU<29zUakFo@Oo_xSq|~?Q1+wH{W9nxWgNN9&%l{g|Bj8OVpuPc{mazW9o`1g z27?f!S&C%Nndac@f^P&j1|c#f?fSc;Y3C?4=cnfI9${HZ-O1DJy<-pAP5U#f19fy+ zFQ>`A;!#(4=(XImFZLgGXt#eNZ~27#!ew~E-{_nal4I$PK77c#-WoKO z*`Lx_WfOP5>$@zbWtR7F2YR=F8;&r%#524 zsbfPHGaeCrVl%vXtcH33PY{)h)0l4#(+5Y;xG%fav%4_SJ?}noIp&TR&zED}8{N%i zlP1<*)vn`puo~$41_fd$sPjcyk*7bzssNmC>``?iIu>ubZrJhtG02N;cOAKoVq#mA z(fCdTO?&kCn9E*@rLB`4uX>AZOqNi42Pq={s5Qu4rQ!6;eayaJ3OLs1?1%#|3y^o}pFjSp1n%j;HRu4_?w#dKzK(WY(^XFOr zsw2%L|F@yf1R7!_ZM&+6KDXt|l30h`%Wj=M zjnWyskh)Z7OnS4tPPo<9h!ceCRXEPDAG;1yh#oDm6x{9VMuNU{+P0>e0F){7MHjBff4_g_p^TkgBYQXMTo~ z7iJ{>0D0j`@{G`%-G*L6Lf91&HA2v1Wf42y$PFlM@H+O|L(cpNG&XJ;Wu&nma{+=m2U*SH4m?JH01eqMG#g`-~@QC z6=-=ODy+arZ!@Wa_~{t>IUeU1y(-5onDzxuP$G0px)cmMS(lHJk>Ay!fUf1BGKd7d zm*(5{0t|R=>L?&IY13^#yp5S#a7^V0rb{}{a)=bHI7aXnVrA0eSE>Uc2vJ{sr4SRZ zV@qHM4N8WwqA{1&QLHsz>;AKFieoHe5>=BS*Wt}Cul78-#n*1!r}>EOXOWPo1v&E1 zo&?3u1sk=79_=6}^cL0oF8h_@1}2>X8>MZ(-#E_W;FIQXSF*R3W?4LR#K|?WxqMrU zyIy{)Ev;;?>*$et#rf}pCFom4d^pPc^}gwtqeYr~hZ|R(g1R{WXUf5d)WvtmhpbEI zC9n3+CX*;tvUZBBV#Ybdh5?+PV#P@`*VxGex; zCOFhC=<#sCNCrLad!nfpCJ5`Z^VD6Rztrx7HQSVfoI!@Pt(}!}>%_8i-sQAdk-RZA zL(jj`AbvP*-|%+#7BU0p=3}l4H0b_2+%1x@;5X-bm$tX*Jmx(L+T>N|sCT@bHE-{- zzCB6J5w`R@bd53@>(W0+7c zQz=${dL=8tdyr`MOZBmP8=f=U#{+&%j(JbKXZOq5bQ`?w-(S0 zaYFT4*ARuwXw3;!uhkpn>t(R5+jQ^MVovFZH?Ta#IGj*Fe7yq16xY6%B^b4t%aouM<>bpLbd>jy-ZQ`%NI64u9Wt`xE+g?TUfz>M{6=M6vla?j4V znAZE3pn|La^nu8Q^ofl;zaFB-2ddFLpg&>-T+1?S=jS@c=?*4!a)^r5K=SfZ@<;Yg zAd`9XN5?^`OFc^O*R3<-FMFA9Pa1G(D1Y0$i3lKkjZhqtap)-N2NzdhOX_A1U#$5j z8>WT~SvF~4&y(4C4f4F5$j|ta6VZ z)pE#+?=*uNb@b2sfobEKVv?x!dhV3*%aI7I<0&LR|4_sv{=s+khO~D{{R$V{Vu!|( z=>A~vfycu}Q6&AX2_G7dNs7R>qScROtLe}If`}xjPr$K6r|#|Z-EJL(2^n(bOn&F2 z+>Z(LEH1w%t(BI%P}phR|2_konnH1tAy{Q-Z)Uyc_3lCm&=T~1m#SKow9Wg)BipUhMGZf zh6LmLka;?Ug8gm#sA<1i_J=16N9YxVa7oL2NPU7?ammC)^VH_hznf^6ht?`0@ zPbg!PMW!h$Pbo)uxj~b%jB9Q()rzNRp^T4eOLe$SJ^6+tt0z5!1ifs%pO7t?<_QwH z2`sm_eBEY6$2DecgIZU)8+(B|D5EMc zo}(p|Z^z{Kz6<_mosHy;%ZgCCU^baxNi_OmU4ABkz5%7bB>_7}8K0;e*h#OJp79FV z1$X@xLMX<+Q&nG|e{8O~oLo5~Tw}~!nEJY=dS<4@v_-O0b-F^gz;aCTbGs#GHP;8| z4qd9@-$b9l?)e`bnBm3cFyJH2aVmdLw68+9X2bmNkt>){Q2l z))DmbEM}1nO)kkhxiB;gs7r2Z#dn6n1nAhy{@JcQeb`H-*HpE>eFLuQRiq%q(JL9A zMw0;0mQsk8P6F9f`54g>^hSKACyOJ5j)&cy`{w_Q#(z)5upcv13~sb7(Z+3Ffd_{A zE|c|W|6mxIG@-b4-9c#kyV2fi;Qfj;Vak_qaLKdE4hcCHv2S`fJE_*XF|N>!Xb~HQ z6mkS56$*D9Jx)M!;@1touT7@6giNlkPrE~T{gk4%r3YZ0rKZq~k+4x)K%xm6??5;T z5hv_wauV#7=GlJdo4o&NyZ`&cL{S5Gfq#bXJ3$0Di&P0h#>E=Al&i!0L%vI-c&jE| zKxX8(;L)^jTq=c`R3tw?DB%1cjWnCwRp9`26yN6wBW9(TvM9;%>F|RhyQc386#$ z>_DrIbzL-o=?7<^ScHOh2dom5@PB3KKfikwr3S`k%NghNBiIoWIh#I|pP`yC@q5M# z4OLN6sS`mjIRbJ2>^eig5>yM0W$UtFx|%Yr9nCMl%~x%H-w5qi|I~8T@ba~#W${!v zczjvnWP5)3kI%_6XK^sPP{xpxsQ!stFKQ2Ke$u}7!R!sq`MqcTps92F%9w;f!3ksp zeB0$q9pF`_`Ne1y!g{WQZ0*22?)kLhYbsPaW{_ug6mT01vyp&=IKsp_XE4{|qDw@M7#=4O++xK3|G$3UyCx}JTU75BZ8bfI8-Ct&g)Pf;DSoBwHV^xpVT?#} zy0f7Cz4KKG=gtGZbt}#^?Rgj1(<`Ty%B=Jh1=cfP2()EDu0+oa8qWHq^ zN?I?lIyN@irU>}E(H%Lj`JoFK*P9|WEEMs}(d~3=lrd9h2J0To*L)E?lN%?_=(lih14N4Xiwxa5$Kn zv;{@#p4_agDaJyS>W1n+OxCe}Tu}O@Dwpttg|J%7{2&~-l%9@%>4wq{>H^hArjpx5 zOAR_{9vERI=)9YR(&Gf8AfSU*;+J#=cPuX`Cj76y-j?G;$9`n|@7@I%M7>1vV<%M{ zY2VF3#XOcV2vg2MtBdwD=fH8>*dKIR+DB>?k%@WKXh)-=^&Nq4*5RUHjNRgxFWAvA zfRqvdbHlOm@cfNhFnFNb{l#E?({tWxganert8J9m`^JzuA}HN^a>S=qARj-E5lucw z09dasyDXI6+HEWHKF(XA|DY28YaLj`-SDPZlmxSB(j7z8`5>|6c*4=pp%BIj zH13ijt3fgBEh7I!;P5&;mX3qqsLL+Bj~fMeqj;z|fk~B}CWgYfJ>$oXp_RC|BJx(& zUS#CZxjbu%FeVfDn09DPcioWS!|A|Ir>?=%&Sk^lZ?7$cpDO>;IXAh>*VdEBKGo(gl0bI;z#FN-i+=}vNq|cv zEDS~^k58N&7vD5ApK+q1we`vzE3&k?{_B-rV~)T5NCzg5kZS(sB$`}W; zQ^~TrN5#J_F8k=A*-z`Tkak|m{u?}h?V*;{cKRIjyM_%nbI=I#$2cme0J6@6@w2bM zY{V~B`r*5i#JMi+(MEFGo-B8*Y%E>`bYVLinwZw&p@uOmt_-os$l4S0}$s zzdu4$91>JJP`Sg5fy zsZVi1=cKyi326PQAJ0=lc7TBLO&~59NNbMC%NNM@I6f}|!rx9VIB7~u>ae59)pxS2 zXAPh@I7w~}QV(ENz(23X^gBRb{_GpzMJlqPC8s*{fFEV!eTrlic}RSDOnEU2@XA50 zq+zEWQkyRcDwJrCWVyYiv9h#>@wlVNP=vS3NER*vLSwZJ*C8*$1~uHr$6BxZK8A&% z3|PQ`QalW#p$f~vL+tGaAF{tyxQk9hp1%qtuNlT3zBt&z+=xKiTvJ8ZZL^#1IfSkdU#7O$&sVNHGFVL|^`L9$6}2}375zLpquPma2}*2U zG0$bFGkmExfA=Pkhr7svmN2gm@)o3cv*IYZ99ekDOY=QqjTjVDbtu%~lvL6rAhmhS-n)85$k2DtXCq|j=H{(AMj3@OtNJek z+Aj_uLL#DVfLjctT?58s0@RbqK9jAgAD@vOzfW%orI4;#e$o0Z+v=<~MUrIjCQJ!>bup;G$w|KYG2bs5(j}GhNs7vW%Se{D=iB$Y%l#Yz zQdQgBE`v7d&4}*<4FIb|iy_l8kA2ECr-1+)z}NcTU(q)MjRk2j*e;6 zdy--#i&pVw_{nPf3F>u{WDU6u))UjuMLAr$>QG!2=^U<*Sie0M2PO>_bn!vqP>)q@&4@?Rjzm{%HJwh71e@kHYYJPCxtW zb)DA&F=0eKVn*)~d!sT8P`)+O<^N1O`q_Bh?GYb=ie0xHL%K8s4zeJcC-|Hc%7&&^ zu;5Yg;pW4PMp>&!@Y_WB+!7s=JrP5r{L^dCT_^SP7qYmwX4Z%?|Lj}C$+|Xo42cb` z9I@N1cL9cXo6jjrVaRg;kaWn;%|9Y$P1fwTD21Snlx{u!%JHi;90y)FoBNGGcXobt zNSY&7Lgs7O@O*~rX5|m!l+Dm0EJmG}F^Lb^9@b5I6xf(0^g5rpyuI1RUl|8KH|*5| zGY=3;bzAsy<09nu_=ydT9w#BvT&`5TQjHGS2qB`BumP}&P9Q~u@0y@ii@~VNHx)>S zs5NTu{r;Wo?q;knRcg42E-)7#;kpgpC|eOnn(Ol$AV^|dW=8sFU|3U@h388x2z0)i zZF&K~ygmc8YT%#r7H(hsvG&;sE*B5TiE_+ez9fNXl zhm8GSEWf?Ka>%-bI`R*6|dYR zEd0@jQS{GCuFuPJ0dC-nbAFXUnrF#2y%tker-mKq+wzbMO>jNmISXTyjc~b>`^&E! zlV73kAvE!JJVdi!y#TXOM1(WqGLT)j5d?j2`gowa+I5ZRvJsqZ$m@b7qnv>NvCmdy z5|E)O!2OaRT9NS~?x5p(?GqiCM$XcY_CwC75=QKc+rr0#KOlGL+l1Un^X(t<>Hgh6 zew#(Pk0fDfAJP9tHg}F4Kca1f zyu9aiHUe-4K57gmFjVhPJKY&^!x|i29N9!$zi$tzwm+Q+0#06GmfA2Y4vCg#`|pca zew;MU*e2EQ=~pkO?PjaytIzwRVB(`JmZMk2jK!_&=8u4>bTk6DX@9`N`BAd(t4_er zSwr_u0iW4O0cirg^SIHKabD-qHg`ZO{x9C)pTYnZMn8`MIwVZ#lKt+}Ws0%Fiq`-+$b=ZvR-aI1V}K zN6wywU@E&EDtNkRjU7>Ouft<2Y13J_mg!S`m%U#1ZKWP$3gcUNKOqS9h4eAIuz-Z$ zB?&-JH}+deU$Rbn9twa`han>3HcDdewhT@V+@rKQ)~Lq>2q2D*j<_OTfw(CtDRC0Y z@lEFS-XU-S*;W7AE1N#=nzGHi1Jq-nO^1IMU0$s&t(n`~1A$W31uCkIosE4{XH)0V z5iMpKnD}Dt*^W%^{sqZM#GsZ1JFc9Es0Y+sKLD@H z+=pf-??ix=LO^2UcuWPbe4RTH(NiRTL_M$>vvxZsw9@SgxgA}NQpqb{LbJqd zR7O!&RbALq9{8-6T<^?d)Z8(4b;Yz1;*(PNd}W)MPizrjn;sR#&#OsGB18?xX}$K7 z6C2Ud$+4mBTPzD&TXU4MjFO_1Y+j5nh13VF$BV=#L(5ayYJ*8JqBClMyoA6Biep z;QI>)7NfRaNNb3c)w{n{dQ_C(dV5grWi|_^w>ze(GEq~j7Fb*6zhc=?i}CTLYjIR$yg04_1z zEy+Om>D6e~MKU|)B`2p)LGWlZ5ifx#_sH+xW`~S<1fD9 zk=iGBa{V^|!e2*MC!dexCB+kTdHgUGlu{D=p?P%T2kG=FJ}mv)xbh3cbFL?_B_0WWCv(q5~D=6{Z|d@o&FkT;;qQq;Dj z8dbbSjWIt42L*sUGa$fe=F37(evXZ|ceKMo?Vt*$Nv;#+dF?og-yMg+SV(Qg{F2fcsN)awl2Cg#tlQ1N*C58G=N#P1* zoc7n0oNCf%(%aWDsw`jr!UFfQ0SS=l62;%=7-pSnH1SSxr&* z`@5PXHXf;*S2K=k^PlTC&7&3IxW0O|@bWA!FBbj2({lhSAV+7Hh*R_MVg6wK1Rl(y zZ|YKIl3Ex=kFaG&+h4ErMQa1p7;xLYA@4%&vO|818}haXL*4;da&DwvI4u*8+^&MH zdy$$GBzZl>*|RH(i)$ga;He|<*A^$p&~99hY{1xZ?*M}|$iy<(Ir%S!#HHshi!L6B z%1UYT-GqgMvtCxdIlFkX0MaLrl$2CbQuziy{s7i<(Yq1VTOiNW_XyMqZ1aHw93Y$&w# zgl@20G$HmG&Mpqk%Pc7*!aD$leF>j0_(DVEtRbpiUNS+UNUw zWh+oSZv@AzoUS^@wY7a41)t8K!Tt$Ew~1zArvDkI0>ByBkk#8Rop8#@a}4VUTc0Di zE4*5@b3a7Ht@=*_NEe`pP?5q7w-EzkZV0*ZFKwB;{SAt1dQ&9N5X}RP8aEY)66_hy z*^-dpXxz!M)3PfNmGUas;~X>Y4@%r3glp1Og(v-NJ7Dx8r}4BN{dvj3H&Y$41AS5| zHCI}Z)Mj3OVRyS;&Z~h5C88)%6f_^U91<#-3o7gFC@kX=2Q&q6wKCm9YA1x6_77`; zzSq$KM1{kr+G|wvd@3v~?J(RYecoi{V;6|mrL#yRBCrEg*%oZ|NG&nb(lyEj=;;$2 zp4jkC#23<*9GWPZg8v^?ZygnN8@+o!A}9jV5;}BuN{1jwr$~27OE)Op-6wXYPJEi%+$BZf(DN1c}PEPKrBe?C+bd zVk8PN`SG*sc1}bkSJCAx^JM?Sj6qg!R{_`t9)ZJfeC}?Xyg&UkOnwAGSFh6O z?kCF%hdoX{HKE;!&BCH2xSH1m3Gbj^%p9c5@L%3m--<@KvQ&V_2T8d*?IU=?Z1E2E zZWWj1k#I|kM)}Z=m|E!z<{Yw}PHegWYbIU8r7F`EBaObsUX#o?58D5qPTa{NVQPD1 z>iCWzEYE&Awt%zqqY_~Vz%e4hdHeh93^16sf!_L2q0H^&-33!>2qeiY3X8pz;+c9Qcm&B{Euy;$@Vo=dB)L$E0qXkiN07#iSsrk%raQ$5n zBll%3dtox#sz{d-Nr7m)Qir@^9Lyq+l_*NT**gWW;%ypV0{S4<^XEr$5&IdE4(iN^_Y__fC-sSQ=_M+;hgplap~!IS_1)?E+vBwMHAm25 zl9H3ZD^pfGvIx@%H780|2eM7G^A!eK`|rQISfit(*5RXleR2)wUQUu#z3HEun+4mh zw^;z^@N%I2R^fib@jf(*-!V}!Y-VOgRy34>fdQb|Exf#@2M;4we^NZ{)%`(U6|tgP zQ27rk7p^_;WMq5x5}wNjkbB5b@Bazg2I_IkI0&l|`Knod1Tun-?=BXDoF9X{i;TyPsbE^w`c~%V(KhxxIk-#K97OGN1BFXB$r$9i63zO~hW&;LMbu(LCw@QL zs+@DbBt&pdtmyo}=KMVV(iaEkFjI^LF8u6Z+?W9?A6X8nj{Y#IOr~ zO%<#p-}4Bgm|F9SH?ab*?8XPyN*$9<0>;nz3=bwH zae0qKVzdq=STZGK313z?UA*fFivLPl*VruW_G4(=c9MjGqD1vDyx@%ST$_s?JIHnJV@aZnP8k2`2V+z|Rw82M-@(D}B1?(EX$ zH=fL;!^-+tS%yWVDvu`}Ng3YbQ#>!2VWrL#Q<9_Ad~l;({*f=|aLXE@RxL_VDOwZB z=oOgU`~JzR*V?|&H}%tNYkkjv+Mr}n6Nu26jCFfvMyST~<|Y-~R?f>KbidRSB+J&i z-4Z{sut(Q6rgCzp|LIP^(`VrXgW+5-?mjt;3|=y=T_SCaESg6!C#B5l2MR zh0iSwJUgnrfU184uHf7oiQ=5E{H~*l6b~y{gJ32pf__ej)h?c12SsEMvSMzai83>REt2h3= z=Ps&mgOsEP3W=c_+f!NL1LRKtQqk`+e(~PufnR#h>7@U|!rgS3XHt?eb!P~g*uy0O z5it>`nc3~#!&Lw$r)tN^>nHqzhRdf56CY@=AgSks$rDHt?WJ8pk5!a@n+UEgq*apY z2Lvmz>=vr@=Wpun_zM@dDubV;fsy8H)0F3$WUpSS*gr%J>i6IwzPAX2C@k8{lIsU=IfkT=(42NYuXil?GRHsEmc^$ubGjRg8(6_6>J=< zK4_s~q3L->#`n`G$?_oBG&AOjrjJx@)iCFzJdl!I zm~3k0G1=^8g|$DS3uMf|1B&v=kK}`vG|wF~hl16Hx@^qNyPFsJGb^eqOL`w@8=N)Q z#gzjom$pVrK-4P;v%Bo!@b3UB^|U84^$u{v^Pb|6BT44P>dPa=3do4F;o9L!vk=$Ris&Tjvd+mTO&1b+iX-0S%ASv&Y@Nbo!|lM1|{K?GeQp^z@055}Qh4Jet zFNlbU1U&X3pqFHX)1ae(4q$3Z+ruz@qOQJmpx$cW(tkL_^ZeJ}3L1tnhl=VGyJgao zdKb^n5pSJ}I3z1;G;3?ydT;Bk{=zwoe^)ksI(ZWG_{Gb{CoU?v>W3okSEVtn zx6{{$GO#CZP$(!42aG?o?#8L6ecUyOX=(D^x$k^k9qFsLfj ze0~L(-&PLoK3VUrl;1NGt!C)qp>)ZZ!4LP`7_|1_vHK%XpzVQrB zls9Y_s_`VW$#sjngkI%6X(=x6tG|E$;`0LbjYY0l1`QS)xH|gnPB9?E$r6Fk*3kp_ zwD*9c^#u&Y%wi;@pV(r}&guci9|39CvL6}II@_XMQrE&ZP z(FXBha&KmM7 zXD?Y;Fv0I_V*lmK7lP=xSZA9R+Ov842|hm3tnA-5Aeha{-i<8eo93*Amqh|7Ea>S~ zc=+5C0ZbcklpjqvgKtFN3u8*_=k1DbZuV->RLm8U=4$(<+d4FN3+ZAAJ>r?nIK>;} zG`6=$Nhziad`D1Dn9`36ZjAy}#+si$JJXE(`&MCbj5x_)|5+d8HK{jC)mxX2zkLT2 z0X(_3^J#q}P%wn_^w1?AlZbG2UanaK-Z`UZq<7^|e?NDKWWqm^R4vUieiY`nZ^4Xl z;PCL-4+mMHXY1o+O_=}JrE{2Fv|(jc9$gSW7^4IRIeJ7yxy_BVuK;q2zHyr!^W+4e zu$@3o-u*5EMNMmK58x7C2HfuiSO5fZM~4JP2ud!33;gmf2)N7123!AnU6jD&=p%c_ z=tdd#mG7}|42GXlz1-T4Uy0MSjda#qd~l{Nk8ML`lyP+iHa4DMy0|c6zU6mN$EJ3z zcy3*8nk9e#nmpvwYayZjr{ecqS+8D!g7)a)F7BZN=+*)7u`vxuBTrx1$@V9Liz`K#)AJPORw=)w5NkEa1pwn^BsRLAM(_+Wc=Mk((gS)%JNhdbD(*DXb8s zNAi&o_%1F_7EeBoA@An(?DryZ$Nwk^N>t2ZEX>RZs&%_Q#u%|K6Gsgl^=bbyC0+lK zwk)8R)fj41+24OG&$=JSB_#CH_M?p5&Tjl#ozaQ3zFSR{mVuE_>n9w&l=+3woNb2% zJ^^_Scj-bkE1+}1!Gu@*b{U72mG#qIuN#B<-@zkLji!bbPJERO83qh8kf~(-P9{$6 z)8FLRk@|oBg0eW!bAEQ>x*i+xoM^?z&|81RIwm$&oiTZ2XiI?NloJc+`T4q)+#(`> zK`098%a?(dUsR+rK(r;WjHJki01_A&Lxax-kd{prMX(iKBE+6KWo9TAxlu1cCzZfk zemjNbcKRs=GK3PaSegMG;-Kw@-Ld_S51ID~293ccQ?n1xh+tl}#FzZ#z?!HFZJ|Ad#%rB1V6iM$cHpJczptD^&_#ol{FL#d5-tf* zu4tiVHIJ`pa1w(`U31&t(^DF7>XMSaf)z~9%vgF^hYS;#VdasS`}xJ}<**T|R*xeQ zA;9tyY|=e9CxVHISy55dE7@oP5>q&_GK4%*^Yf{|dxgiPo|Rq1%*Q1u5P`?{80zl6 zqB=KJ?_uQ;mN9J&+9dQ$B@nczH>-y#k+d`E_%9P}lRS$NV`^?{9b7|J4i2^Q@rcfF z!2Q@hV|JYX*|Bjgr1A|hH8)eN{nGfWx=9VbX~AdC&wDur;2kK)#oa$PMmzCNL{Hn? z(lT{?-0ckyrz$M;5lz<%O|3Mq(^Dq?D6zNN&>yy7USq_?>xyEe$H%Xw# zf!8%R_W(%~925N`_{bSII5t4GX%{RG08xjN7{Ig=4{EiEz zuC7={!X}3QcQGNDKb>8)@MyCRpYj@#41eTXb*4*L;m-3}JNt!H4FO50w&B-ben2Za(=s|5+M5Lj36GFa zY9ANuhO3Qu@Ldup@zt1{Hv_x6-ePG!aZ=W;J`cWEp7n3kwea@NRCzcN2eG@zX+MbD ziRJ>ux%0#QT?1QOT--@Lj=196PzK%JS~ER~D7|fMO?f{qM%lN1B~&q$J-vA7Tu+h< zRN0rGC#!~_sC^_MC(qYlCCCVOE>k2yjgH~(xFCHg_Js?`H);~HMZY=tj-u!yi{lHv z954MFX1AI@*`5pN;xu=+Oyy|14D9KVMt&@D;+I_St%k^*V!c>ap@%1ym9FwNd$Yp) zYy7beCj1XKx$~;y8K6LT1v+u1?>Tjbc!iai;jd$HJ9azsr$F|pAr<7iSzhd~1zDvZhO z$3s4jT(8|Sk<_WPv;fKcCg1g!wzfOI_g556cjv;D)PYDA#4c zT(_(B#-sUWkBsjJ^lA$(W@_dVwUuFgf0g$@`ap62C8>)cJvVpbs7oeWjK2pC$o3?p zuPoNOIVavZ3~Jcw7#OaDh*9z8Ph0p0x0|91Agj2^=i!k`Nr{dpUsv;q6-jBbC$}g} z{4OqF^?G~F8+(;#oG<>-;B(~RG`+o>_P;XIyi*lh+mT) z+-;IsT9sVQBl27jS;#Sb)DFMnr~6Jcv8&VfnrWID5b>TAg*2w;IKaCn6Gv{A4DT7x zVoZCgU8?DIdr0+gviK15aOQZ=&u-Mx@$cU={}acD*k?3=2L2~*At3IHe8hBy4uI+X z0LA)~r(rrqi%a#3cd?x4&A#j01gop8Y#dxXJYBc9A{73oRB2WEmf%zXHw`Z8Bge&G zJ;q+2GZ<8w9u6PP&MIp-@@0wmpN0z?1;nUFia%_rfRD?<-942dF3F;i#L=<#t2a&hnOAQ;c>S_y^I(Fjv$7&BI~ z@5?ixa$DQo37c#|pU{X1HFpobW}gf40R`J%cjxvZiyl;gin4?utZbsI`|}6s0rBOLkbLI^|8hhM1FHIK%H(BTo53r8VM*@q6+4dm0#U2YGEn^Z3E{cu?Ei3Bgs+PYtz-QBbg0~`;LHkCuCe<68(*Ll&|BqqjR1C2;M z)jG)j|FbH&qWjNBy7?i2@a}E_t!e`cP*=7r2BKsYJKH+w1g92x-om81D#*iiJKhwr_TKR({d*rGJ$-= zj_)#V@%AaOcx4L%)nGWu^_7c|B-g5)lY)YR?@(9m)J~Ai;C{i4#$#8c(k+46Hc9J67GOX z7!)4qd@cKsAA;lafemONAfFvE*?#{T40TrE54Uh6MGxc$dP!W&G!7%$HpGe+Vns!7 zU4+qQtK>Hm9Ab(0htC~S!MhsC_8QFMFPpHjvv=SY6zl`?MtXYsC$3&I3kBPlh#ocg z3BZwTaA7v-qnP0wmY%!1Pue|F~fa*!VA%$Jt}pcQw5otRD>o%vC; zFJ&6zyR>OX3b#ZP+tg|+z9nX5XFo=Y*Px^?9!R@7x;dawn9fCPmwfw1BJ7pOiO!fB znH;%i>OzPH6dj>B!Gi~@1Euy=fsxxe2I`9$;$4%fcz$;OqU42a@HOa;!MOT2aEOMZFS_)hiT#*#OdNQD+u3{J zThxFn_wliUydB7ZRq%PBzOJGmlh<{J3fe%N_O4&+Pp;SJ-AA*eRpVZgk2{B0`S^h6 zK6sDsEa>t6TwBcQ)a_|Wp7YkR#f*t!tu{#bJ~KL5J2I2f^I-sOerjr3a|84p>u)EB zoq{QqY65_EM~2`7`J0@=_Yx1>df>&==^jnWq+`{|75pK5D?>1M5BaKxoSe95*DirreqKGQQI{y+)1#6#NS_8*)Sf5g zc0Qn|mhF!FJ7wBnLb)<9F`n<;1hi*z%{; z>fz^Wi5S~O-!4SnL$-5S^Z}ah@li=d1v}7#1WG5bR&b2CMTNU$DEy@8la@Q~Zh&1N z9N1^-IE7UpUSl{oUTy6%ZlJEVOc#9QOFm+w3ZqCO2LKJFr+?LEJlp}dBhYfG?W1C1o{KCZ zds~Gxj%6J_(!~-oY2TxDivIw8z!%^a)|`cS54ZaG;6V^0z+PQV7T0^k(es4kdMpk-c?4cU>+J#YY* zihw(Vwb(gBu@?a{b-nN63k!+Br|oT-NlEZ#tQQ|oa`U!D@;^zFS?nI?kd*PLUv3sL z5$eC|VK{iH0}^_*H4WXajh#c9xwb|DN>dJiLRqS;NXdpt1;~y{E5fr8&_cW-a>BX5m;SVRPKv1x)GU)M?}b&qMp-QCMn!pmGt zr#}lPh`CmeysHrDp&UI^cgvSllz+_eWXVN+-!!M2Sz5jvfa-{O#A22cH`V-w1rHdq62FPw zmU_X|2sP1}KOBur$CHx_s3}SiMiUCKFQSY!T`7%Wq02D+vVF??BX8c=V~0uQM_%34 zCa8&X09mSjnl@>`Y5ADW63#XnOFdsj-5jE!2$3lzN7U74E&QVpo2zq0-#kIU&2)%> z9iI>*glA+3ALq6sz8__Gc%iy$z_1tdNBf*W`$BFp!&wszPP}O^lPjBs%%t~qF zJrRhtZqx<$0Ny*Q+?_-?LPuYJteMDOxJ)j`%gSt)53CPNx&dNRCHCV z|32~}^UaZ@2B1v$*0CZ#TBKS(H#aA%VlXe5bGV%5x&EQwf;k1FS)WMi?^-vi3d@VO zw(Hk2VPUAvfkWf0bk?W73h1m<@&DvD*-_EUPX62ZhwIJY1aWb7?cV580=JNkw)R(T zW;{>!%0l{jo_gLH`vT6j8bd34KN6Os`fH^KL! zJ5V1gTPz|`t4$51v>6Zo5Ue=!w~p3-Y1x}ylF7N5waSd9h&qx`T^BNuCF1i_fj-H? z(mOL_dYX1I@T-3ld}BjYcaR2yz=9}^xX+@lsj3s7j%dTO$=fYQCXP>ynL6pH&(ckK zQnF34)l;fiB*a3{+}Z2<_%r=k>Yb-k=&{%UG!M*@&|HW7&%RVD&H5vErRttlu(fW& z6z3Gve8o|Fz-qIeNz`Y5%a=u^$#tc#9A=H`M6w6( z>C@M{_E}(?!17y3nFccSbZ-r)-cg@!`wtBX(Fj-D*4nmBk;MszU-gM6!-*qkoU_Kp(PhU zjaIjk7(`|l=d^@`ah{@V=4(X9Ft} zdQX`QGxz^}I|g+eJ^`;l9YaIvtijKLNRTKvn}EXLx3OV)G)LMgE9?OoLv|q55e4BX zDK9`BOaNSKl45x>;r_5ZC+g2at4F&8Nm#**#SJAUpl+b0qD;DZ zmoKzhm}ispDNP9NPtqPI-5`JOFAW5O6Ot&NEyz(qexq%D)zILoGgImWE|p zR{|6GF;C3y=f*lfmF98@*jGY^6~Mx|ySx7xx1!2WM1rl03QswS_qHaPD1%aloiyIo;WA$_y zm1oAyX+pd1k@(~9s82;1`+|9b+Pr0cm$Kfx2n0*(=x__aT{lCar2!% z`WE=bQ6Lt&T={f&V`KQX5VjhGz??@n{&BE+UjmGg&b3t*GTC*8VmC_@i;v^V^vV89 zv|hu`&8`^84_#%$)-!TG>3uFWR^(KpP@G<(%S^e7`vNK<9jqoxD8oCel)JZ|2!GLs zIPP-_Wqe_#gD;v!DKFxLHcbg`mYucF;Va>sb_C_Jv)OYp@;y1K`0~ajBubtmL9 z7U(~ntxf!gz(b#ZKxc|r2?rRm;uSL;s8|t6QM>>&Bss8#Y~&+vDFuYm((+T{zizJU z;yx&uxv9$(wxAtk*v8&TRebIKE{yTTsNGfsuLOONg^pAo=6k{|+`nLV3_LaUC%1wZ z`wJo3POf8=1gLBEg0a{;+NnxaOEhF@0@>*7^!o z>;FuC`*AS?d1*SM-LOL=dLc~<@3E+ zpoE_cwHzFc!o?JNQweKFnq^+E+|W$Ke%*<{l$W=IEgyaz8Y+aLX2m6V?YR=zAJnuo zDz!{^4z3%uSRDa?r;*WJCQ^n33&Zs_HNSzIeBJq~=hb8MPh@FevrFuD6LcDD1mM*! z>HBc9%v=nE+BUwd)Qs{KQ^DQT2`OHvz!zszMR&6O9z}# zWbj#_ftwWOyR>Nbd+zVZy}!Dn9A|Byf&6O?HIpXnX^7Q@yx!j36-OM^Th0A!?+6+U zL!D-AV(-Qq?0TGguzzgs5$0VULLnniOKvpoCLbIxCvY~&BSHBbkFB_8ch{HUWpym% z9|h^fE*=AViAX;tzrj&K@!Ntb62plTi)7edDO#6d6YTn+4W*SqD!$L$^8t9_2r+KO z0o|;S7f58z{igKiuQ-vljMyl1N}sy*gCa}V~8W*6^L+wbE723Hy4YVDs6BsR?2(|;$p z1>&cmItCvXcHlZp6R@dh1}%JtGUMM?w@U86#^ zZ?7;!kL(>yq#G3zt)y;uZ70+qkg{uZucSebZC9${J#(*7F~Bhq zb=FsuWN37HDzp=96_%$JK}MrdsdKlD-T|$n?YR$>i{CP890r>;3wk0vJjwfA@^c|yR&E*98?Sh=GsCY zu`UQLZGCM@jI%R(wd5!?hxw-1nFY`Z716~@s(hYW@a~tW1n{)4+N{ez$xT+sL|?y_ zE7o0Zy%1ZK{=l5Mc6AmZ=NznJM3^KGPi57JW zPGqbD6AOsiPA9TX_bl+Uw~W)_*KcsrMcWlcF`9i=>3>xD zD+&IoX@G`)${wbYga7Glz4N<23=^+8bBzkQLPJW6+~VTm-0Eur+!AR-Q9x(V%%P?m|na_%Ovl@j=`3T%Y*i-=Rj_v!gQ%O=aJw} ztuX8TnL8OVHB&<8eC-h>k4;PV)C2MZ{^;0klwl<{Z`VnkW3HpPdciknJQnjv*!iL) za^Ewum>RiR-beAk^*?Rj)YQ_!!~Fq(Z6P&WeRdgd>PANIa|X95Jx#ZJB`b+wldRTO zQDAPDX*E0uR;|)3zig|XZ5$0p)?-litij_6Jx3?i>XUM#I}iVx*~Me?oo7*)QF8u< z0wN-7Kr;Z7PGTlH@Ct<^RkT_S5ox{ac1$XKm8NbUZiDhzXtnI zFz3-{4ScGGnh6K8+BW~^lOg&;g=EmHjhWXDi;KqY)(H`Pa+!lfUv@qnoU_%n!EQT6 z_#Nhq?^@6J!~Sy>!fp+v= zcQMa_JR7SRT&76hHMU0BI75zPlCiw7gVDs&6paObk56QbjG*4zVh;XY%gVRExVpUY zxNaK4GkU^Eg-*~RH%mmolC$}18rwP~o<&(b=kx3zKrs^Nsfe+Dr{8^xZb9Qm|~7s)4YEuqvy7KHvm ziqM*4t#?@r;Izl$GLsof{;VB0bm2Y=c9LR={wSS5bUqwlLV_P!#&0DgA?0?@Edh!K z!K%fkj*YITbId7+B56TEFXPDV69?BzHOs+ng}Po^2%PlM%6=_EO z;t@WRy(z2T-5SOJnHA=LDbQbro}ZyAqQUOfuD2c$*K(RB0-}!QwjRq z%|8A?O9dZ9FPDihEf&qZRyP>c87W{U1B7TsWQ9765lGP*0`(>eGmP(YU|_AR-%FW{BXfVWCUX7&iR3kd`H@mA71 zT!y>Q{gxGeMx4n1rQ7{4`7U&n!3`Z30)c=Tb?Nwdvxj34sDcUT7veAY_>ej&5NM~X z$A!vJ-Vd)7E&S-B!85QTqhc#ci7s@Gbe1%d?gLE36`;BGFaw5~o*#=H%rEj~E=6XCy@suQ;G<=<)%u`qNP6XD+?Co?HQQIHhh&6e zM0nVY43!kK6?H91(!IX;CV30p{OIlD<5RKts}H!*fpV_wktP|{0J_$ussZ5sPtQ&V z1ye)^bjs^I8jLP-?ZsE;Jr*rYOukgTU$l;naH}2}!+T4QcYEr;c{L_b6=gBo=e7{D zGFf(%0^5G)$noDm;+)svXO4$;O#g@3MG!F2b&^9?U>Viuf?!IE6j@wcy;^XI?F1+( zrNZI0((#RjJ09wx6WwE6(UV{KhsVt7-8+@h27*#cC><-`8oUIJ+Jv$7N{C#Gni z0y`2H3)ghzeXKb^6$Xw)#PEY}_jq;H%2Qo^F(DyS505l}i(dz$nk4Zn0s)hd9j;smc)Ew-tPXE(Vp>vL+$IPu~Lg$ zoed`G2v9w%!gd5Iz+!w4@k1vF00Kx$Nii4@o*;bKOsN9^PKfYg%@c+-I#xLY^O`AD zjR6i5Ezr4CsN?a)51mAb6?DU;{>^~U4x|Lr*T=-2fdXBPA3)TQ>0xTACI9VqI^q$; zWiRgM-J9ycH#$085E>qC6MMo`rpfXb4uk`9^j}z-SQitMOqY*{HMP8UMqcu_Uxiw! zP@LR=vN}ROV?M{qPHd)NUUQRog%7&3d?^;YW5U3}%Ewnl7T-sB2r*JYtzirNErao; zfwj~9PghtLcxT>60B~@BKZb(B0Qfv@p}8W6-hD)f_}B3LAXSbBuw^o84&0mXj}w6*sER0 z4-TC6W+n+S0HfItTyXHTDZ&+PtBshDF(N>G-I=UT8Z@7pUijv(3OhM{o!V!vt=ICW z(RR}F(}P%5q3B!+$^ev+5QDP8qY2@q4HerMAOFyHyA75}=3p24$&m>t-2S1y>~Znz zRXcb(_zIgh4Sr)ATN5tS`QU!;I+;_h3bCy3DO^hrR1BT*e=hzhJu9!{MBi?<=i;#_ zkAm)0sx!vZe)$Ygha1GJ|}!X&gMFqHl%mR(;3~@!5qU+++7< zP&58pJgH$VPa^LApE1e*nU=)ynr5pbBGksy;g>|hfy3RiLB+wGNMOMwjs^p`M6a%A(gP&nVoyyLEW9Jp0HtqZnbO0svLw-W1E%G33Tio9sUgc zxsoNlE(U4W9gj>}=7}5Y-;b6(Yiix1IJ-xqEb1BEv$`FiXj^N)-CJB0VmE0~GS<^K z)Uj}I50(A>aDU9Q9TwIw!-XyvZSLa{7sDVt*Vf**=YxYZ^n+F#xi5)gNFPURj;Gmf z>}R=fD*0cc`%O4F5AK(Ntp|7+jyj%F#1B{km~Qoln;k|^hVxD`hTYtnzTTAUbFp8A zzAkXj+{pM#|Ij#ql+MT?tukoo1lVHbaU{)ez9# zwKl)I+U*Z3RhwP_O>STcOaY+A_o!IZM}Q>;uqL@8K%dkHHWoT(9oq+ygZP{rC4B^Z z$dGI!St|HzlCZi*YMmo}x?-^Y;z>qUmX)_|m{e*3Kcx1JFe*4zUI*Qx+xKef{PNCwfe$`=LNuH}EfgeC|L&#sJXJ#!2 zsfcZ?%+NXezghCUT{pT#YX_EnQ*bSNCyku$JDH37Fu-6X#Ppe-yrre(;jf`+oOfdm~B5|l_#qyyzQ#56*YJ_y53?7B}SJu|oS z3{qra!W4BCg64mG#Gt|Ojqw9LQwqbS_#NQ9UPpqj3A||aJUoPv(#|0$se3gI4T^VP zhmZ@i8$n?j@^nK$psIe@RcSsSd<`NzdJDsFK<%?u`D4+->H&8V^YHF-a|l}hIPj|* ziW5fEvSrCP_v>jbSX#Pc!=QbrkC2dClVrtoRbV^PZ%TVVsFvea7$nN022e!-r*5f6N&n{0>rG(%LbMXDEnk=M zd1Dw)SZ{XhmCTyFH29&M66M&{Wg)QQX}jaKJ|dYxkbi3I@Bf7*jbpW$y;3uaF_I~T z88w5IZmS;Zo}kX90)g?)a`nikxb%M`{c^DV?@cbk>1ai|ZkqMVS6Rl*bH^SAP9c>Pqfx7uw;Ah~noY{*vRa5!pd6DzunQtC)1?+C-bucan zcRB{5qNS6QnvdorPE(Ed7tqx5mAJgcWMWEV0UpGRh=^y-ea@@V|L*`iO+YhPF1Yb- zM$Czu{1{kLkA`LsIC+Ez&TJ>f0tZ_@gf$*iBwIqr>IK`pK(T7dn!8CL+NLcu~J4 zbmu2oE2U;v(($N=#EyS%0j0>m(5|Z zEyh9z>>!xy|D>QoL&ZuJ}gQ3Lp;tmHF8s@&a)7m?f%87+E zpMr)1#5a+HZ2+=Cd7roK%ryH1U-mJ*Q)j#Adhdk%2md8X)LxJr=nUU+7esGzh^cNJ z)*XGw;cM2fO4=1R`m^d~y|TT0_-pa`yegjhrfMeedQHU!t!}Q(3c4RY@dgnYQ%sv0sondLjDL`# z%q6cN=Tu1V*>7kzmuY!tBA<)P$?bIeJwLFX+-Rrvba$fyO!$Das}-~B{52Yb@=6veAkFEeEuNo9Gl;CEpl!VzR9Y+j!@ zj#-Xgd@|k34Boh@d1xTSP-m7Iwb(R*#jzD+I*F)3=mgC$OSOI4hT!moXWU~uZUv0p zPIkbk_>7yB&^xg=q%lekTjwd=?~BKlR){~u^5)KhvcLWyh>1RGF;GS~xgpp`j?(k8 zy6SV3OVNu>fd?QL0gjCfO3GNb^c^txL|ytB>%a9O5JXGpIkrpF|Dm*)X_IEx|Mh!q zj8=`rREJ1{el$bknGnbM-&5WUN@Hs$IiH0mkE#${v$-I9f;O!jxitoku>SrlbLtow z_OvcHH|4;sEmH8AXDEK{@f$Gp_s=yg>t0@_a!PKn1*L7GFIC)LOZS^zoR5$(VCH;g zh^tzr*@wXV84&Rz)q(((R8y0kQ&dzT9iqaXMw7-u`FX2M2dol<{Zj#UWy7d+GQ&U`EG5`s6O8PkW`1U{eInj~WhI%A|eVj4_I&2%&wU{we&Ml^MLdo5P= z>d8lc%u&FX%Pl!603HI+UjqppMAYs)2IrcsEpgJFkJRvCRQ3NOB2eHsL5A)4%JwE1 z(*|yDjqX?$ymv4V@EkL6V(RlL(4(iPXBz_}7AVKSxnR4)^nR3QN||3~$GD->V|*pF(vaM(CRI3W4AvPyj|wh`?su5=?s)GWnp`M%zPQh1crG`GmKpz? z%Xj{{HovTLt!ifwuc<#tHh)ij6r((`_3RN5m;_Ttx?<1E7YFVXPi}AJycON&0Ncu- z14Mp1Fn$KvZk~SzChAyYGm*sg!~tuogzg+t_z9>O!K%}?Y}7nkd#nBLuSx5F|FTl} z9#Y}#i!W`b899OR4mS3-$h3EV4-hRf%4*#AAt}DO@5-OY4ydihgN{H|SHR6cnlEX2 zr3VxE_|;hnjrxWhqjr8GbL8Oe?%IaBE0sSMOl`cclTqh}qciV~OIVb_Dp>nuS}Rpg zxFd|nrwqM+HF$osaHlo1&-|%rPk@o6%s29!dF4?jeTbFnN6j4U%@&LYNVz~ppP5>v zvU;U5N~C+sc+zQGyV)>R=!;Z=u2=6q)1lRlnN~&8;M*q%sO!#s_<85;S3UZ>o-ySY zAtRwsTsa+^ulPWxZ)(U@@fXqWLoyJS0@{o6p$K8SJbX$Ge$Ou``ioY~S>s1X#bdd_ zlK*0#TzzK3l6D)nD_&zvUY$x!w0ksbL$q2 zE0J|)wAs3!CS>0BGCuf-Ixmo0m}3n{ddT9|75NluwY%jlB^qb#I~hl={LJo_GS$k{GK!8DQ&Q1E?CRozq zLz^ttX2oL(U*+S9G%Z8DO7E4(>F=h65_1Z2eKFGmwLzJc*V0YVvQV4Va z7>~Xj+^p4254CkMcDq5qD-oC>6@T@ub{o!HqI`*@=9UPxqYuhX$-$*mg9ORC>}}gS zH`^sXKyBmXt6nhCDlc?E<-486rs=Z=x3eKoBB9YfFq&V!7IVO*B`*s6hAU7tFt>t| z^!~ljoD5;$NN!Wr9@p#FL39>ysVG_a$H&fBD9w@)?!seKiEL4dd@{mVz?Br)fmwG+ zipgZ(sfq}I+Gj=dJyR`%wPMp5vZnzj=9}}2FRDwx{zyIO z^pM3I@C+>7_xinz>HU;Xo=-viByc$eU-zU8q=7}QsZ@6{VKVP^5oG-U zmJXr0xN7BY`{fNeDI=?+A(CIFGp5_tz3pDZ`nQ=ueF1ax)?MSpL!B0}O=CYnRD#|n z+^nbfT4;6_J~i(*?bGr`!|1*gMkj{_P~f9bO(w`$_1h~Lm;KqkX`JdCy$v+@@#j(>`s1L7SH4V z;@r9}(S)FZ1ozkYxXZ0`-u}*gPj`?01rIeC z&#txilD%Zk^N=rU^4E;0d@n1x%4-dU!;CZbs%~qjj6Ifh-7iybcd=C^Qh4^dh%P{+ z>?QC5H=cL=ufY|e*0}7g8e|wGe*bpY=yaJm@J8lPUrGrnFI~t~#ye<72;S|S-EiZY z5mlmSI#cr%)i3K)0VtP%Uk z;6-akD53=wUD=B(9p+U8&u5>_-Vv5Lqm@i#>(iC5k#i3_Vr+A=8}XPv0aada?Ozf9 zf^b)*ov~^9{)O$l!_W80-gk6omJ6a}Xxt)zv{+%pXTGIa6lKKf@-4#IFEFF6D$}SE zp0eOPUw)NzHz95H9WDHmQK(UH;t++DPT+~AE0|1-R5)Ufk83ENrIjgu)RKJGE2gySXtgp%qnmfA zZ9Cp%!AP#}>+H=cyAnozy!U`(;T@gnY;w6X5^3kJcz&K28MS#%_if?u$;g>a3%4&4 z1a*t`Rr2kFb^JN2{cUf@v*_QCs?j%6rmr7Q;2TFjRr3|NL=+BZH#^c^7Wdh6hlz}A zW840(wAX)r2zbqUwJ2dI)tpfKq{+hi&zexy9Y^v=k;EmFe(F>b-R+CHscne}cQeKufsXXBk8%kSUnnVwls{#mXcW!~ zzxQxOG~2tzRfuC|=d}99Z4@|s#)AoMyEb&i`%F%%cWmmAj{41n;(HTWP;D&MvU2Y9 z%$~k^VVSiIUfef6kI~*<{)`wxM{Dm+6;PpYn{qg$NC&YWGGj9L*;^OWyjjl4#oedT zIUz(zYU)~AuG+Ao&8>W9yEA` z`3sqBln2}qae}=1)P{3dSEESFpXB^J{C2>^<8lkm1LyQQ{0>Bt7A2F;oLq3TN{4rSAE3RzP)vYfccBwbCvY^K}kn87;70Mq+&L$MWh0-i? zMuRgb+8j(F7QgO2U-V#XT|f?3{ThiL({Ac}Eg3w2xeqztbpNIFVUy3||G&5^P*Q*TN z$gy4KN2ryBiD5VtBZpTVH#y8YE z{ROD7z~!qgdZrV%n7qn94Y}*(NVg}t4Qf2L!!dsqV|iilu*s#W0lZV4g$44>cfOk) z`5@I^A({#LQi5YOwfPMisw`M`p@AbQS!!@^&rDftv?KUiQ1k+y0FX^|EAM6^{zSWS zt-wtWEMr!Z18%*U(`ocfD|%Z|;v1fIYvcaJa;(?%=BoZ;YJ`lkl$=Afbdh+I~t8Ld|+h3h7 z3JIVVT{oLT9@Y3~>EW-zMZ-DC-M@wfm3=GEqIh!dIo9pp{T7xY z0qGf51C78kt|YvRaXvcq~~3tkR)Z!uKu%WAB(bD zMxQcv6N4X(BO|*Iw7IVy?*m%+mX|H0>``+Cs@bf2SZQ^CJ?MKf|H-27P7p;Q2%V-qPk&dl`<-Z*;VJ@& zjTAl2llhM*Gz;!)cm@w~ZCM=gFl+;GN3M}OSToI2(qGAh$hOm`hLl;d)I_^WBK6dp z{(3FtKE3>ciD)Aw`Bhsy1zbgS0sn<|$@7Pv5ew$k<7cC38=Ckqdnk@`EiJw6@1W9M zm-Gqqk$uG2aah?T3vZ;(m{LL>9zsATQ~v0k5cr_*S&F-6v+ePA&G|>?88ru8Y2g3# z0(c;^+agnhlB7iyO?ld%6hUqH1p@~c9%Oefb`)N(%?7Cp<_V)^@m z^XBZ6k_+8g4OQKMa0n+4gt?9#XAxpBJfUI za_C-^V`mRgLq$--!}kQky&2iaz9-;#~HX-*q6Gs{3BBEWo?>BB_*>3JFfciY*RC z4lhIHzaN98$sP&6t03GmS9y=un5Ji2>qkk9^S2ux;_*Byu8f^enEP)O@(p6BvNR=C3HNrCN*+Tr=Gj*~lo@emt4^HzFS=C# zrJC73Vd8m*PgX&s0=yLOJc?A%p}M2fS(5b)djMZV0UyaKcKDTwn1Ok*psAhyj9^yJg)e&w zv;z*gBQ#mXy$oy@|F5<$!>?Xo9FDyijvL)U$-Mp-kL-$04>NFb{~Ty41Un|l%dLRM zzK?TK3z@XL&4z!|{o-k}t7fJv`aFHzO_-GamyZS+jOeI6!a!T;!p&z5TJEd51#o~P zNz#o%r_G3jkE%%Ibu7WQH(T3-cqmqZFOn_G?T;@FQN0cxsG~LUX5dP>ZGpa&XO@@(A@CNO{WH&tk3G~T9^XIt6h)pi}?&Hmr>2ZlchI=*v`HPb`p z4|yOpnNN|ypQA4_ixhu$EZM)cs2*cDi5GX&WmX+t$2h@1^9Z51C8CB&JDHp;mq2m1 zNv;e0+|cP)EbJjdz76~A6=cZMrTYd>IoCURa_ZpqLc6$^JEZ3>CNh`F`fTE@^0cVM z4sZ0HIZkoF5s>&AAKD;|8m!%-^g=N-hw2c+d{}e}Vq#UTcQgKVHH&-{&d#d_WcSETuwgjtupWHQDC?EISZ z%?k3QE>GXi$I+ke?oVPmg~>%x`5ujTyL@YE;7)g0&yuN*$uYMY^7V@WtQUOhK?r$? z=*s5f;1Ss=H_Tn5S5D_v{H8bZ9ssL+Sf;aG<6psQ2=;80&h3t4<}MK11m?%=4p(!q z?Fq{7vWBRi6C~qpp13)73P@hj4Ce(U7QD^<71458;=6bYFXW|hCN-UQY@^`K*h44= zP;npx!nCI0wM*&^?IpXVAl>M>9-CuTF^u_>w~e>)pOf>{2jp|;?1c&6MH2W;RsDI& zuo|6JU&-LZm7qLgn_rO25vkuTzbqQ_-M~{W4^ZglbsBMKlPhqkOF0r5nwk3YnkZkC zobZvh>Nx4Bp+Mo3yTJOK{5IRvcvSGIf)II*zwY%L@~)1?B3W*9xrhr>oMR1VAfmx~ zR(N)2G|h9l-tyR_*^$j{KEsd(@4XigvkXqel4xmDudYdBC~1RxJ~xTV>ypsTCz1bl zJ6%CUmWU6%XD^onXNVQ_igV+|57NiG<0WdEa1_ebFMiI@zO!^leo3$M#4)-1Is`I` z+~~(?|HbTzY;sCCw9FUzpARgoImm|CATYmiuCTnQ9#s2xj0wtz-7W+K{95Fs(-0g! zmq_a`zOL8zN*phX)Mx$EV}Fhg5Gl^F9afhBs6U2hIu|{`L-O&`kFaN+WJa%less@V z%K-YXf2k1iBzr;ix|+6bpG8*zQa%6mT|oO1v%onO{92x4rUiWB(LFM7C>pr*wDVsMmkt zTraPFYc|$h=8^+z@sMuw-@^Dmr8J(l`a-&5+!Oo5k8y(@_w+OrkPIo|XeRg63z8Sq z3x~>I_kwqqThhqiXj9+Ua)g=G+z8oTNRVzuo443EdTK*7*FmbIJmc^jI-C!l;Q*_AX=aWr=T;dgZTQ;RL^35cGEqx}U=_0H0<_(~vZLjGH)S7Q(hS>5e~= z)Y6BU0UaP^k?pnu^Vq0TY!qeU0eDo6D5T=db&;2)Hfi(Xn~zgKEGDX*>f(q@>*23m51CuEwd`Sr&usPa|%#M?@Gs5v`}s!o9V{VY_}{Nsg)k?t@|*ekzdloa<|z%tzKZDO(Brg#gMbVE$aVjO8(IvRFm7Ut4T$}amDsLXEv;D)s8!% zkb~+afP35&599iVHuTDC$u;vfwM-j*Rm>OdSR?_yl=F(ry6GPr7x%yvpR!Zo8^f%b z9V+p>RnakAwzwNiZJhmkZsyArAj{nBnE$D*TLGutfN2P{6jAqdV|?n<`L9Pp)2{)4 zq;AvNd~Xn23QpWrbk-rNa{sfAqngk7Ow!*)b;(WHegiwi1xJ@*7Ma=OMT(B6K@s!g zU}>6AO|+!&cJ^_BIMVaisX7hQ`KTN3%$1@cFOGjXb%>Zkz~TC+w}qMH<_g?)*04RF zVEge0n0r5*&Rql&=z7jNQB^(M_n8p*PF2=m<<0}nZF!{@O6dQ%((xx~`*wU;%HB$8 z25mlAI92_3GyUH|Xuov{2d%Mhtr`}5WQqS(4isJjg_f~pY1bo;04jue|u9RDDe(993%n8kUpB2PeoqF3`a1n zE)u~yK53UV3%jmgEZeR*W-MI2Cg1l*FcVh&``;l?=ia?Rijc_0o<)j?{dc!Y1fl_Tf<$po|CRc_93_xHLm*0M;I`I;&pcJcTwDMt8%tEzT@n)Gv{VE zSAm|%lobx^$u#ddrrYb4O<-EKQiT~ccUnRw zrS!QULpr+qMa|7b#n(eyjP9SoZ|-&ian6`)dgHWxs{$C*GS)(s{SW(1o-xC_7eDQI zPac0ZZgRK*-N9OiRz!Ndgn$2?mvD+B)4D3Sef%xqT7~bo%GJFak3Q()CocfCHMIR1 zrZPvpy%M+Ctt&|vppo=k4bG?SIRX3p&>PeIJgE1)M3;7%t9&%8lhn8s<(NZZjVd*C z?~ufRj=$XM5-_4!*@R=V?poQ~3=cSrsy$b&IlyjXv}|J&@L=~%VJrdMZZxqd&e?Yt z>_A>gIJK0*=Idj#b+jZku9gQ7l{$PVd*gmdW&U4ljTv@UQ%A3zuXqtmVVrtH4jbNm z(Ed}|Y6R98_QMp@z z_r%>=CtMmaiTW?ixmSN?uYBSDXI=jhVm780zZHh-D9=(VySo<0sWjpVtH|35tfo;8 zO&U^F*~iJ>=xA7gdR$BR{xqK?s3 z>yZi1^`;=dtiTqY+T&o||C~1RG30KY-^V$Vizn{Yz6UY;3Dh-P4jlh%A` zNXlwCGpKfz27A%L*9D$5eyDNwwn{k|OTIzBZ1jCUf4LgL1^kF0ZOJ49nnj|Q3^lGj zR%T3rS>Gw@Y)!54Z_*r^$dh2ubKJaqTCHn@(LjuQJTLuwKLBJe;6F0phb7k%gOkHR zA6$b*i*mocDdl6B|19%=bRfGapKRwdilbJuu3a|_QY@`IX4}~x&=x)hm-f;EQmT}D z>x$_2r8dl_X&+0S#^C59kEie&>!4{V>Wxk8dSiq`HZf-{Q4tNgOZe{aW` z7`U_j3h5ww>k{lF_v4)BrOD!?$4r|9=+opIuTnmqIG?RivP& zym@+QvJzd&k+gjX*B&d<0d;>m!4}h=x=%#fLt<#kJ^Q$L+XY6WP(xji7h{ccEmU+i zy33HEp)PA}7iHTLkU7+!;%oXQ+(ewz@dR@lfjV*Xx`sX56*UIz`qd0S{Lm zPwu9eG6s6)aYDezFQ$)1t(TH2&33kbx>{= zT-{8_;={#fH0*f7g7J~Gcte0&9>-UZ?=K0ox+6XEPSe%9rdUvKt!$_W!dfl42=4p| z#orPKa;ZR*!OpjU$#aVJdu|{n{-2fYwwkx?2>}hz0Xc|niU7N<2Uy9fbuieBZP#DZ zV9K<+iPH$c!Rb~treFQC>WnhR`K!uUFmnuxnK%G*4$GO3K$L;q+Mn{wdsUvPvvAk7 zgGxrP!CJ^YO&QJUQ>c)vAF~ku#2%9`?|)XwRe7M5tIOJ)DOZ$Q>>h#QZr5=3ik?ufd zz3p0~>FMeaH`GGDR}JBqvK<^yMK~eJ13_@ys;> zK!B=ITPmI^xUpqSU7~aQFJWHj5_xB}1PHb(goi3~ps$lUt?a+XC_c zcn(^7NxHdgp~-8y(s?>9%t5*z7bm3~^=6vE_7pW4w94h0>KGnp@}=tys2}W3ZN=VJ z>jyD<1I$CUYaJPPD67vKR2EJ*mC&2)Kl^4$NBK<(1jcqQ#Z{Tu(b)d!=MZ! z#&u9oz{Qw)(!D|pNh`oA#L5+s(=pF0iV3kbz05PYkCf7h0VVL-cjx+l`_f6gUHX?E zAsdb*uklC6nbmZA8lZ+u5GB&iwH~k?pX4lAv_shNOuOuCyg=-c_X8d=`-tyKTFJDF z8a*vmWZRuE(&$Mv!$y6yCh4F@6ABh)t>i21!1`?m-9hWC$21810Jnf7r}KRgD#Nch zbeVsn)BwKTS5x^hwR(&#v?$dg%t0pQep3${z!?IiS&J1R244#s8Kzz)fkdd>$&Nfh zJjN6~#8CkDZunXxvPQS_xa-a8;OV`8rEI@;Q6+772|I>5Q?}h{5$=x&$#^0K`DE{WI`D z=drM-*hU49S&GgOtwt-BjJC-~vD$lj3Ozu_?gE#++E<)NacJe<(YndbTz5eQ|8dho z@?~S(orBRN{zm%{^Rq|lSt$hibRNf>jCk2rj#4HHTT(!GDU2LSl#-lNTswe&-`pvx|_ah%KQ7aou^!jPR%lb8-ksMD>eNO8Y)Q4A&v7U_OEkx51lRA)F0FR z(>u^4_h4zmnYOn7GSUCo59g|D>2|u%mU?b%yBY+*R7?$9WkdQ_mG4ohOyj#4h2{x_){Qd(G@CPoG#h4~A| zbOX}p9u{dP1x>(QvQ^)UI{vypCsG5}qf(^OlBGPpH~#&hiIM=oRHmV74=4gTIb z39>w0Of}UjdRnWx^pu|{4YN%4+_M?x1Ahl2|A>~Ac(#fOYb&WslPl}8T({*#v~+=~ z{3?)82|y0JzV4)xwdZt3o|s>>3J6&C>%q&X&lk#4!p$p3^@j~gjStlc^#Z9eGsof3 zqM<;;2IkR(B&H^&Mu#4enRDO)$x%)fX}#8}>1e#83vhmVU4$D!X&X92Tow z@AKYxb|*HG>K%svB~FhS3f~QW4OtD%zL=GNoq%23NFfFQMZptodu}y(o&{)_d15@}nU8EyrIx{MWlGHNNn_&QHOu(&LlH0UPv)`fI_|Oqhddh95mPY9q12>WuWAoX6mN0N2>m4t3b1@uCkt;qc z`Fux-o9v=9syYK#CTDcIrOdW>Kizg;{tT=EQZzY#USBtvuMybzc(`9Be7D&ucQ-mg zpa=Zdm%eH;HKPL6OK!!Cc{dqrT3`xj+Ra8G5x5L`4I(%i!?1`5O3GPBN(G8*QY6MI zeyG$`mXahVp&(PEP(%Fqo+K`;R3*>&1F4Q9FqJt72SswUw)MOsUw^o>_xqaEk$&2Q z;sm@L$s}!guqIt-YV&katBMi|3JsU#)jkac9GK-~_?N^QJ(=V+=11Nov6}BxMMwzR zg^H7Net5ffG~r^Z+$-pfS8Mq0k-Akwycgct-f!Z7yzg*+;RkkXLRFnKz+#@8a8C)7 zre8URk-ge$b^zuO`mt3~yY`7-_!59R$#{PDcgOMfvikM8%f-e#t4+M!;uzk#YCOZ^ zaxFBr?^j<&Q#B>C{B-ncGA zZ{mlz;w3CKefmaDnoo&YuAL_wN=zSLPmK^UKz~FkXB!_&f@TQwO)=6On%vY%>BFKX zDKoTs>2hefYN=JyfVPH*#!mK+VgUMn0jK5@qD5S2qgYTgj?)LtRbv_?6 zp=K9v38%z~M&(t1`5%h)l@Q>7{8qy-S`pO>5+w}3%K4HfrOoIQ0cp!*Qe(R|KOK0@ z@BoI%-HZ)H7-m0O$IPz+0%COXna*>PK-0M9dn5>1*0+$5(j}|Z_mllQZJk~81W?6( z%>M0esp~YAVj0|%iomwdcRH)NC*Yil)|M`}F1@$i&CSD)TItO&_Zh;LIqgr)gE$H8 zx$Wlf?OwHJWV#DHCJ?pHV(go;{_V|nwcwJ&z=sA*3G(iid*8W~0QQlV? zKsa4?ssj~EDKrpw_Fj#4zD$t=vz)yzzmeQbJ)It!xo(J4pbAYCR@P5whMqzS{QxZ` zS|f@j-vv)p^;=;%X1VD=I)pM}qnQg{W|%=iq4L8)5TmG$HILAr8*{03HsnXdWIv=C zEYpbZyuXI7zT=rBVAL&!5edN?1&NA4ke-AHnAOOs;p(pNMmtZS+7$jQL~I#wsB9G7Dy-ElHteIjNrXtE$-USpY(_Vq1B-`Gcpf9IQ<5+i5P4Qu9Gem zj(R5|DJiK&rY%a2mO%1@D)9_}Zr}9Pp)5+zl7VN-%~q)kApk8jejq|Ovtt|rNWa|S zg0ItTWA?*_-oPm?x8)6Q&9i_?9XwEX*>x;`p_zRERgasWJgqr$Fp{qF&4Otrvn$AU zQaG7Z9YIkQDco>Sa5{Gur-YqF=o_!lG|uolT;XIM*A3|>N(9hDdk)~*O84ctgI|4Z zs=5yVMpZmSH-QpK4>G2(R^Xh7gzWZ=nTX_!J7(8QA>%~y8VR$2t`s^&Fo z-piP#Lrw~wY#v#gySKJ&m8=WYqn-bX1Rp?bknhQ*M4#K*(z6X2M}uHSSn%Ej3LLf` zW}6L1%eAb@SojH>C(#oH2?4;i^Y=#SElwJ%mS{#wWD z?};tKO-M+&KT7CtL>p64;1k0UtCn}+2Rq5MV?H16^N7C{bk1&`5yZ0G&uF%t?H?u> z!yDZ>8+LoE%j+=|LDFqaL}I_7&k6+ZyzyEe;3obRryVxu(rLHI9y#Drf&S3poQ@?~ zXvur&SiUF7(@4%RGyJ$DJ3O|VKP&b}n%qw}RRrp5b#$(zB#vsSxtf)fXsWm-K1zh4 zH5(o}K0E|8Q>|C@eK8ubkRXa$4|J%UW#q(HXCPF=EiZ8Wi=3XR(uWY)Bw7+u`S~i8 zX;mOXVoK5PdTJWJnhZI6VpjWNM0nIg_ZXGc|v99QohRS9)h9aVCUq>hC0 z)mtC-)_di7d4^S(U}9i&81dPeCheB==7q-EK{RJL0mxPe-9{O(U?cLKYNQ~_RedxrKnd9jM zOa7H|+0Tb&*Rha|2pYx^+*rqlOG|zp*C51%l;uVj>~=SMDijXQ!K@D zPWMMjn;uUDSSlo?F%EYdcVFuq$)rP;F=p0BGYlel(h8Oi@n&4S6*USp=28#Vk?h|< zE}y-x5gM)#Q*(vQgNZBaoDc0@C%SRX*P1tSlU<`8W|iSq)@1gF>m$Lhw#d9R3JYdF zc^g~0Q|G7?HEZch&w3gDNS*O|4@Tn)nnRc$iIIXDn|gwsOWgOHmbg5g5yh#RFOPZy z=jHqm^t|=0RovtzYkcLs*h6tF^6d@W#%@|_ET$@DpN{R3!h1=V>FJtaO#M#Ec`~i1 zCvU%JgVBdeCfM?(hIeND(e7?y3f2-ArC>J++ z^^h&g(Ncx>rr_AoA%Uh&BgPkcxQ0eP2I5dFXd!5!pdb>;O2fX7LYgEWt&s*vqE;fm zGm?za*9n^a3>{jWKssBN)JBy>;dGpZSMP-qXSM3z6%78_B{iE#)y$yHP8t`anz=|= zPNFR0xA#$zE4Mk*Fe5?{kQggdotYH8E?lS_u9|A=|63dDpqTTy#O;29Nq_I`E~eJ@ z&XG|!yMVtr%@fp_5@qrUDTLHdcN+6jkG-7Q{bvjOUP}MngN0h8QY~}(IOqGj-x}ns z7O{&^YE97PI5co$5!>$qtQen%R2tKrms_M<5?qY+*o2!hzXEh*H9KQ7B4T!+F)FYs z#aJ^x)Dqwrq!$9{^RX*9islPmg8lG`|41`dl;*RWT|R5^^Iam?cRmsRivD84+-$Sn z5hX$B8!kb}GxFNWGef?AT{cJ0ZsN+0-fXiWUZ6i{+vx(;Eh)7QaPK}HsVGISQ$53j z-qjOmc<|APd$v*;;d@vRkLcPuK}vl7HY(=Y6bk(#J|0Wv*sTkB@fL*A8BfVjEvt9X zw4}e^k1RkMtpcSYh9HyyEhN02Zsy8PB7+`H!1Fs8k;-zOw6eJHxKLPDQn9MRdrCil z8x@a?3<8X5liW1;pp%mHj!_r2|3D_@oSOG(rBgzJFoGD}=9-6tYg zB-l9(sfAoqaWTjj?HskJ~TZXv*WEcKcHU(@a0{Qg{I7{jG#rkmaIYhtXfif2H{Bt~8 zQg7}Wa#T1F>Zfv8W>le~$?0Y2rtMFv_#)6rcuEkAM{TO`a%h}SVghE6W@>M8i zQ3wt}=jR3ZKGIyPnepJvs)$V)%bB;fK(D zU$tsi@FXjgfjYLu{_T`E?HSN)5BGHkz%tbFl~)@d+mE383}9au8Z58?=ZvOylhA3_&J~HA|DR zh^YA0y3R7M9Y743x`j}8NjGUv%mFtwE3x{L(X}cm$uCIlyDoI}UngqZPd4t-tj!u( z0!7(2z2C_6??>HVFQ;-2sSQmD^kLqTlwZER%qE8qwJ}ef+dcP!T+&@gc zrU`uE9@nMYz2VTeFmgmy>%a3o=VOmVZWqEjo|GVqZOQ_7PWD?{S~~_O%)T=4T+zpp zz*^nFuDP9UZ$1&`5^6!A1-&C7hDS=7%E@Q*4UWs>&g)4Um3h9J@)57VOwihwnBt2< z34on6v$2o-S`(b5xK50R>Zbooyc9Y_8bi5E{i_mYf>=--`o65@#DeP_D6}&Wp>V3C zqA|#ci7|+6X$g_T=5S>YUUKuI=|#8TM+)B2R=N)2l0g;i5DpZ2uGL?_0}!UT!^5{T zqK7}z5`{upz~sxE*SWWeY`yknfCbYNczL+574J}B=riFKOiay#v?}L^Q9!NR%pG!X^ zxoQzLBDO9>u~N~%c+qHv)wbTYnEy%7Uk4%Vm@HD(#-e{wPc?+yunz@YoROm5v5E8p zo#Z=dKef@UB-l#hU9ozYA_``yb9^YsrR9Bhm5-a1nz63b?^?3C&_$y zJB2@-%r^3QV;uU$;o7+EPXpd?Y7b9A5Be}V{R5T9*?(}1Y7~pns9p>kBWXtyM^})? z?K*ia&yGMiyiP7snAh|3r;2$xk)SAqZ=t%{`(}3M#TU^SQ{T z`<)&HyQ!}EJb)1(p-V8YT{Q&a^SqzAnriTVa>Wx7@m}{oiF7r^G)Xjfj-I3H-irZu z_CwGY#{2qs)rDh2zsW(^-g&{@cW}+oORW%~ds*2?BczVY-zV!XcOM`R4K7!lSP|w3 zQfRCkOTvRi95w19ZBWa`Pi4myD}K$XbB-Hr_N3^J5Nc}vw@W(tY_73v@27`Ff1dBE zWNu#|pgH0UB??*F4O7udRUFF=VEJb7YD7}vymsV|^+T~So+UULdqE!xT@UkKZIZ8; z?9uiI5&|CnzleOkDRk4wJA9k8w5)P*$&Hdh$R=mLa&~@x9K=qurabMuA|&*>W)Ar! zfrE!<{#L#5t-Oi%#&)K$d2it%Txb9HA|2h`$1lOpd6QvQ3(9w zu_gKv3|1TO0*voNgb-jz>7`bU9S>NDo-b_srl(7T*PRauWNmO9KS4qB|&!jtCyGE`Xm3Yo@$X@8p>1) zC%ql*;6Vz1FlbK;#Ah$%Tk+NWQ;*Qh?YB`_K>1HYqN?}>k#?KCBL{ktw&PsBqKX-D zX1H2bar0;cxKi<4fJ$iikd_tFF0U|iW6PPs1zqy!jKVTyTtW*|WBeQKjbQsgJfos$ z1mSw8D9xnipVn+OA8AjpmkoS9KFo?0P4g;NNT-u~-8@)yJpFQexL!v1%>RIt0XW@r54w9SSq%Ynnf7F2DPCa>dR_Nb1xBBM=4bxwR$w6>5GjN%`2s>jCiF$ za<+(ZXR~`0(S%&T(^xGskD6_)OaZ3WtavxDj$f|k6BOcCPK%)(#K;AR7>1}Fd51L& z2o49rOmsUOdRxOHNxr?$4;kbi>G<5oIzQeKnXu1xZZU*V&Fi z8yS8dLP$tBe7N6Lz#&{4xXpT6Zt#q8*0$7M)$W{BnP{~}6ez@@S{Ro%I5;2vb$s~+P1oFeF~<977DJbb0ieFhqk)%D6oQ%IncAKM3yO*eNuwJ@JEdFK+qB(oLv;Y z_x(g^rJpbQ4-NiY*b5AfOrw+*;lYSvzR%eIKo~??cU?t`E(waY0mwp2U+TpDUZO-e zWYph7wtvgs>bS-O`~D0aR1d)m9M!9VWGsGyUywts`b`BjtLogZhSt;c;4jS#GKHKl zRcly_?q;`%2;!z`$<@PHWhgKsn_6#8gg#j&8#iFoL)RftI^WnU_&jihO~4EHzTU$S zc7XYZBz|pJ7PyBy{UC@b-&?H|iX4>mLx6%ZS#2tcU|;}cr7ty5p+t^NM3lB+9BAt{ zM0oaIZk~he$L`{GY^Ji(;}Kh|{N5F`_GB3ZZuHQ9r7iMIP1ZMGVPF5Qo8=(LZTFZD zvWMWa`xyB@1XD(NWM#GAIcO0Nj7Gky>hz? zs(9{PccWu0aNDmiZOt(d=_%V{>XQ!EF6f;;qJ~CIemC+p-8exkUOj={E{;tnwM?v$ zOGb_bicHd6tA%BvsEnp~{F~*pFxy~!0IaA8tDljLF}ji_$;ioRxawE!-tVC^`Lh-I z#-p-}pZ87#-}mTbd%n5B2}lNe~%b4Tw`^R$tb-jg1n#2k_|;69-m`ar*}UeErzWB_W0; z8~bE}@fEe0J7C^wIhae^5wVV$Bn{nD=0*-ih8nk=Vdns;3K*d}%uc2hG$KtCQNu{x zCR@p4K<@3x6i7ULjI9&+CLhfIk1;{HU z{EWq}oJ$*hW+={ZO??AfeoW#(nLr3Rt(roZiSr9B$CK!=AD$!T=B)}KCk{D--ImmL z0zJ5|ua7h*=RST+g>~J1itsZb??`hM`aG!+>k?pI6GNmJSM2uUlCUE?=;EYL&DF$x zdARSH7eWC+De!ifbG6tGEqgE{SNh~D8N3KN(xpG~-lRrGiMD#*G)k}?3Hv7{{ATMg*ITKs`0Bg; znQEReG8BiR5f}V+StTKWtrfs?MjDnR1ezYlm5Xuip5D&yg*oXqmou zm0p3us&TRvc}JkfX9`UpFIE-UUXzkW|nDx z*Qs$Xsd=s~+!?ow)L2h${fGbJDS0!Sf>@%WZnZ4tAX+>sn)(ntWwR2#%*=y(IxF_* z4lZqTm=HpwOJ62pZ`-t2n_%_0m+Qhvpd-05fPQ7gG=(Ouuh`W zFrm;PT)wyjxcx&{g;D`lLn97>dE!ax&e?bT9yumCgb*@;w}HJq^5JL#vY$6jc0yN6Skw+IPfu>_B6lfxsxqaYv%_hTDm{(*4G7VFoXkC5FpI6oyf zKRt^pw=}PH7NPK8*{lBLfU;lQE;xLjx*>ixp1dIxL24&bg-YRSZL4!)UnYgq7x*zu z4T^Z=B)R%Ttq&f8Dy7To8#49TS9Dgp5EB3a_T1eA&Y3Qvh1mTG8q5chvT8719-P!T zxL@*GVzII)o847ctvlc8srHX>Jq33x0u8GSxKaGQ{Nh6CTb$@vOo|%Fi7B0R(go-csi+V`NZ0d)D6IpffL`!CHhk9gLVqACi6D;Ww z3=o`gjr)GMoZ968Pq1g|MIAFljH3oG3*GzE+a{7l{s^SBO|(xS&Yq)l9Q@%S_bY(? zIq;C`exk-FYT;uHzZXXyf?&fsZreOhmz}pXv`G&%NUt`u*wBRk`A>|jKKC$$>#nC^ z%I6ovY31ngxET(Z)zoSoD+{J%tBvt}KQDZ9M@ zL7G`+A3vfbuSADcn@;?Qpsr2M{c9ZX-CRX9A|-6djWi0OPnuvLHkp0rmXP-7zi;xx z&WNmjZWdywZfrvRy~Q<*K`yqif2`pXT&x+-n5yKY8kURVFfO%y5hl_i=>I>ezB;Jw zfK9qBw765;wYa+#cPLWawK&0@;!qrlTXA>y0zrecxJ%IDAz08a@6FtOcQcuRKVarJ zggmml&#uu!%J2&DAM`0!4P0vdctN7Vy2!Cencqn`2Je>R^l+)%p`xy&In-2)Pu zHa7eLBI3-=HIqFY;V~~T->v&gc%Sy?Krk$|L;ox^45e$b)mbF&@t`Ve@wClRtr4ZX zpN+7i)2GALEpHJVU`?`DAV9}i6fh4(P4kPCk+yO_Ogf-<=};+Bh)hhL_{jROHs_kcFI zBgA5@;YtU9R=;f%0hO0h^sPNxnthsaw|66a>+gF2(`DEmXs{md5r1CpvL;2k-5S4N z{?PaILN5}T;F}qZ65sBXcnQH9m9P%-iqtAs=gB~}oiQ%aptRYI zR7GDn>Fm%f=^zK*e7!aF)Li(1f-IAj)it>z9Sqjx=pEUil_$4h)mUe1;%wz7F{Vrx@I)2=p6&lKu&JuN_X8AQXH{ zRzMERY(AXfp==lQJV#edZ`~dZ!_712k8whfE%4rjAAm*SDHPjqQsLlf z4;>yj-V8WlhXa^tX08HW018FL-^Q`-)u){7rj`UbXt@&Jk#}2x}z{vY4XztIE~Z#!fDs&dToiT{=U-f=!8{6iGWL zc%A=8(w`#Ph;+GmWE3uKdJCCI>}uAk!Zf4_Rg%x|+R~&{sS#=4wz?v7sWQvqpft)U z0%vI$(lb@A{PNlXGE=4F@8>PhO8^tsX)JK~jOFP-fCI8qn3&w~PVzk+&>%C%bQ|t_ zXVl>n0#7RBny*N;CUA^2$Z%WTn=T$8FA5y2lqE4>0`B0e8ZMWhIQ^Z?la<{!n*YU* z7@u@Z)G8N0@r7K(xZG2ygwGvC^#DcTNEkt5zKm|lw@UG(>y8Egk>7h!U)jBJyx`@U zanom4bvjoltV&s=%jgvVaVyoSZVY}63VN6;(5zm#-%C}$f9!wt&woB|7KL8(IBxd9 z6ItALTm$DxG8P5A^{Wd_NOyj}ba%dnAPIRNylaksY*#u-J4<>6tqI?OVS?sVHn)hFrJ zF0As!I88I^cn@o2(=WpKL5&bGBrm?7!O=Sr{0ggI>GPME5q(5}KWo3$$>P*6V#Qgh z`Ge6JvxU+r^e|LQQUSjn2cw)J5@N(L&E?zda8iHS)L*HoQ$&q+E zW>cj-wbkr9q#EN%dQ>jyE9w3&imY}AC~qdpNb;aDl!$jF_wMH4jJt)PrL5@Na2OZq zU~rW^9;M+m)s3E25v{|ALU=}=+1jmB&&`30?`s%VW_BKZ)dDsOK$<3;iqneV;NY+` z;2wElMA7SFWf&{}kzK^=w8W%Z(#Du=>uX!_(--k4YG0Z{5`MxR-+<8VaHLS~#n&JWThIB;P!Djfh>HP)$YOaVtlfR|Ys(L4^wR`bzf>YI|% z91zGbEf&@8o5tDbk8i6fP2C)x`FQV4^t zrSk=SlKv)}g9VxJJ<-Vz!N*J&m^| z-cYMGDCQPb@`B-a3BI>OH)iwvXWwcZ=6MD;Pez4jXdGT=&HbtiDrCp|$)<_FL<$eJ z1A@UcZ)|7s_y1$!I66%(>iUWRLTe8r9nmSlj#%%1EBVFJM{sZE<&@EJqa|J-=oM35 zLSkIXk(hLAvN%y>~eA>)1FnRMBV{N1XZOQ@^Q#-iJ?4mx%XGfFOdEx zybH>QOx3l!%ca+$*Rg@}d}|AfcR4M{3dlI~f`@e#Df*05q`R8_I`)^>sfj#`(G_2% z#Gk>4ulEJ7F`PA5M?-gwPEeoj_eK2Pnx41YX86T{yj$mPH0qLHD;FY{yKM=BA@whD zxkopYsSx=(6^R(fteCGle<=M`IUHSx zi#ig0La5KB32X{nv!U?Y7B}&KCTBMl1g*@KcR;5D&EDmbuEq?@wyxZCaN~y+l<;~D z=0%>9>5k1EvzVKG`N*Ct1ajc1zk%D9W=^Q{37{*mmhmdHJg_Z?CG@h zM0R|Zn8#A8{P8^Z!nr4zo=%QCb_$n(f!diKJ(2H^&K&&)A;8&^o4Eyf-r|slpy}tZ zV5x9l&cxUU6({5cNhB`c|8?pCM@1L2*>SwFqs}z_*jmD#&mTN@svn8#tYI4=18Q{Y z&2hY5Olk2p(Ev|5`sgdaT)2q1s_wuf_B+8x3+Cx~2L!2FJUwX{g<%<)qRDD(pj2DZ zuSzuSNL&pbPbmXB`|6rPZAJo$%03zFW ze}xZ4i^bM%#I-1uva||+r1Z-?%n!~lFYx^_g_naIS0t;~d=z^28SdWs>A9Ee8F5`o zWy%5Eb;%a;2Q$bERZRG<9w&?%k@<6)9*ImLH7~Us4Q~u}M>zH`X8gCt<4e>ItlL%0 z6>Ab{_7U9|U9o$N!PD3CEr#^~PtlAa1Laapb2upBxYd^j_b>(v!cF=k>D1nEGSJ0w zH}Rez52m06I<&CKE^jJUhLCdNeCqZ-qkl7aj4g7PXF(l;v5Ni?Z z1YOM}x^D;5ow_UdB5`n-)0n*jPn;R}<2bd^U{4?|#|?iDEXsh;@`9l3WIq`;{1UcZ zboNcJ_Ki*wjL!tkoC2Uuw2Tg3zM1qh(yZmKFh~rWHZyhG0^J`XT528X8fKjV`)D}Y zh=&L_`rVB*_j1`9yZ-_NpQ5Yw{@w@iw1ClBKFoOquk@%MknB}hqzV&~9?p7zgRx~C ziOBc2i?Q6U?itBo*F^Pwx5Dv%YsmtR*(n}x=Ny+?i17^Q?EczMK^JsK1p}_J0jqn1 zaLh(67hFAe*lD@MFcKMu_tEX}u-4N&HUG{8J({{gCLC7~B7>3kgBp2#lh6TRorCf1 zjf_m1@Pd*8pNFQYO|1xH?9+}WLCwTcOY4e2#Mr9W?!jQOLXhzww}i;(idH#ns@?<~ zi>CX{adkQ|h;`lFj04XS!*P`c#9hNsQTE*lO?UXw@9}P4xZDR{c79~k_quU(>mZNtVK`L~gaBIt<TmwPf>efNgK^G-%Y^~k*`1|zWB>ok>pz5uDNDE-cUx)d z2LRY)m|SF8z3!^LMij)XlWIs&N4=~aZW8N#c!Egi(~_M6@BCB4%(OB$sODl+HOv;c zys?dy?v@NRlXzw_4e!3v46-7kR4T-Ok&+r83b0e)FZk6ctIcWtrZve%R{tA67r&go z860a+^m3vGd3s1;gnC674@BdVP{&(N7l;j!*7py@_P=0I26-T|ytSa254S?(m6Q9= z=jio;k>m23N4+t4OKn!LFjcfcn_LeS$#A?=2bWM}!h5HIN%Ny{GQqcUmQ!43mG6kj z%C^KryeIjxu^)(xzGz!k@uGOXRV{0nQfv{5D2x3?%&eBg@^1FWTa<4|K1hlV0-?x-uX8tAzi>3jH{s)J}Y9Qq1Fca$;ik>nHs0?~uR0m%>vGEn+e_o4met zEO=>n-154cT**4K^HQH_%5k(`n14qn`6m2RLyH&uBz=Jr zO$NeJZ(ppBOSf zjnRjTc^{`udxq0;K-%^gWwzy+`DCR!jW8JVLx8Eua@S3uP)PvN^%AO-zCy@3PJua) zlbd^B8OXX|5JtN6^1JasuvRWDS%;iu?|I$*WYK9e_?1SWZpQuK+H&1sQm-Q@=58|} z55ZEMYc&@bJ%x7B`^~ z&5C+@!%*5F&%J!s1MMCRv1b`F;1@}P-UV|-MV*We*B9fyo7#&@j@Ji{9{+zIrYghc zt32%w@Zv;Ykh!D|sNKbpOCq2R-b%N3%zlG{3=Hbj7vU>Iqdt8G#hSId>#rb=;2RPF zmknwtg?fZR^YBoj=%B6mv!Xa;TvyQR+YesFOFLYkA>=u`TEtORu-zeC-~xwB+kr1X z=zth3Xz>-@^x=>LI&=|~1|z)ynAxNRzYg4GnL0w(p)=5knc#%cnf$_q3b64HsI#uv zK*qyCKBueCFd~k6ws3m7PQ_AAi=2E63&1t}!1Qyh98vORABW7pOV+qu)Tu>eK&{%6 zkdCku8D=bsXI$(!`D{OB=~M2O<-->K=bkT5Nc

g&1%=POf@;8?FC0h+X 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 n|bpHgbpLJ`eE+-cZgI(k7Ks3dP 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

6tqXsll-=J))2YiQ#w_xB* ze6PJ#ay-5Q8tX?{2Qfn^0f{nAy-PumOQaH-^IejrTHrkGjpd{FxfMLsZrMZtNI9M6 z0gz+@M_<7qwRh-o#cNIAb=@*8QT}GJ2DM)13bsSHOLf5u9a->Lv;6d!z*p<9@(JnxYk-? zhr@SVx#fA9vDr0n8z$}q^LYcxDl{8g^T$e6+kD{fN;jW%Jr;^jSQ?hol|8GaP9Llz z?_L&*&&3tU)qVLQj8)bz%)8}htQ_*wMZ@f#b=|v^+A$xJL^72Ezj8M5@|uWnRdQyy z_LDuLx@<+&Sj)U0C)G;S+}CEJ1@TMnQ41>5N86?$6WEyK?xKh_<>Gz#>OW=j@yT3C zmV2~((>%R-eV|(!tUgvUnKC@$N9PAQ#aCn_YZ~7p?o6{(lAL%;+h6xr5@hqr&GUK; z+UAnZpN%m1U9(QVVW+ESm{LMnulayn!Jhkd`D~(Qrsidk>PeART6g*c&vFQ5A{J<8 zd>ZB@7>E2!)VDictyQrv&@?zB13`?Rpq2QMY^6tJ&AHMJ-IjJ!Qy0SKLPky@#UY#;MnHrc#hys-iEP1-qwf~(SRqb zB=r_d`f6Dvw>W0F5&a0P^uUtT7Xq5a&Z-vc%^8Ou+KD$Ey)x4H2LyHUEIotrVfIs> zYxWr8)(9l~lstHxv>1Y14m)w^?kR&h$}=k|@1Y2L@7W&WOvPJS$^{#ykGwC&TnkHZ zRHYHAp9iky$UV@Got_6$%*t%gnIAQ&o34KS>8lzW)1S`FNOHbI`fd@(Qg2h@>C!$HMS<|r{Vtq{ah2n~w@6kj0uFcPG#C49}C`P7UM~G=zTErPi z@`K)UB&Kz9CtF{}|ok(+aZriuaz(WkaIPr>Gg+TY~mCA@moZt>_* z6f!6T-5_^HQ&Y<^C`cJ-VC)zWpa{SzT+oW=0f49{`<0fHR_6vffv$m5L&dtd^;!#2 zO%0$V$8aqGxQs(9fiF%-D}K=Xn7HMI^gH6UW)Jj?>eyK3VflB*B(DIXPJgH={U4&+`T;Rxe-KUvba; zR~yrx%O4pSsh#^=X~zdGv+XNf zgH?6dLExk=dttSgWcW3fj$hAP6MuxGs?#g``fQ@vo9SLadqCrd7FMK0&n0=!bn$j_ zu`Ue&3h9(3So0FBJ@tSNe$ULeK47t232M83%4(rG<* zN#QfD)8QqYl%%bf)?u zhUPnKyEPWHOY%2}UI9n(T~)*zm2;iWnu2C?Q&X7XhoW`w`AS5Jjcx!1gB(DYfyhXi zec91Y+Ua+Tc$yn>b$5F_aQgG+DJ!2|pj5iu*g%aJK%pY>J#g3B8?8?MA9n9Jm*>`8 z(>|x2q>*nJi9{kTtgK=Zf)`mcV;*vMKO3$)H-+GLnvUdrXrKNG>TQ$t8i~VJ9I1cr zF18L~c{7lPa3NONfloaxtoCc}ff19jYM`F)vXvn>X3_puv2u|PG03{WzG zT2ls~@+RV$wP@dx4cYmbQ;h#nWhz2oG7iP)Tm6VdV_YQDnJAn)HB$6EXQW-CG`6hxynuA)Q4ds|E0011*3>^r*h@>MNitsbVBFK$_k2S4*=IL z*RO6mZ>zjEmA30ZoCl~XpZGtj+-qg@D7)2gH>xx}Q>ISfwjMam^E6f7)~UD_83B3V z$DQdshZGa`s(nH3_2$H(A5GHOcC0JJvLR=`rzH;;WxmB{-;9d992aS%aiIr39 zM^~OMX1qdhhjYt24JFQKLTwH0+-sVgypM z0#hpXQZLWAl8pcjU%}K&;T~R41!3$Vb0Twg%@?|Uxd4jrH(_r^_o2lC^n?p)JlPH| z1)wWU6-xxqr|~Rjl;+KY??=n%6`BZ}?j-_UGP|=KvB{;mLBcHkJh9-a2Gm@z(AKh= zm3!^sY9sZoj#skCF#N}xaKcBIrlyQ~`v%%qRy+VV7-*9&DXnte*f<%06PLOfJf_nC z)5}5FH!$i<2S%iywn6IaCb5@3Na|LKSE0M~-MQ`X@-8Qy4qHf=K&;a*E|pLy3;mD& zRkd0s1@q*HiCuJr(5&UfdT<|$y@DO401I}xqeIit%SlF4D_khfC}qeYWoXUdamB1- zr6HL^^Oj!03gYtVU|TC?cJ;z!K!XM>z(J5JCq+C}sKZ`QC~AN2gw&RTu#}e9a>EgQ zws4I$02=xt(C;2-wLRIKaQ18spg>uJXGBz}#{asnZU%`;RJFN=$c9HmIJ$aB0hm7w zEFz+LCG|~{gB;KiJb+l0w_Dq^6@0LSty%^GMFuK>M!YFH#r;ZNhW$=S0AHi6#nE7Y zjTtPk${b-Z$?+|`($s7gG(IxYbFROge|NIe(cT_FEXwAL3|X3C*l`wM4X@WVhFgoX z1K4-CT}XPLs-wF~tj7*^GVWrf`ruO75MP-a`X(7d_H}I8y^toZ;YHK42D)2{%?fD` zbMW%VMID=lJ@ybTxysr$GGY-6ENcy};<^j%4gz>Q-oaazU$>_Ru%aP#`w%r82f!%bj8bhCZOSjs@aHbkGeWME$G~D)) zCQP{4hp6VlcQ^GS>i2EWg;TE(M6-~n%F4=iKt8fto~b%Jvvg3=EjMQ8W~av)yULoH znq|wnGq(4{(rnw`;V9G0L!2u;y{;txr>+0av25>9snIO z9z4+J8~G|)fI26mH*8^J69=F;bSRC}`dvf0&%%EH{8|qL5>u?IyG%fHa5g|P6MG=N z9@ylaG1hf8;0|l+*ciZyPE9$;k|M9q?c*v+-nzvJl!V1bMMXiV10{JiXdX?B>Nj5K zbvFn{f&yrJs5)CR1%|$}$QIFn3wA7o@7#|8+b|bqr<8+FfoWsQ8)+L6YP9@~FP(b| zyTe+lytSRB0Df63K*B?ob`Nb0%V;CZ=(>~+%ltDjr%u7PdN&n(CyhkK5p6`v8uI*Q z!ZW=Y`^1QAESgd>MAJQ>TI3=5hjM*SPmg3v^%+oR$M0_@<`avlH=jLua)m8D%>hs# zfD}3exC#S5KEKnyE-bkAN{F@rKS1$C+w-U>4u1ZG$;p+cY>I2ec@+1V%{jYBk*Y?i zc%EBBgk1n5#)eh*p+76o#cF!0SQqelxZL3k()5omt8&P0=hMAF9#yaFKqXh%x~n}* zQm5GHL2N>2Tbl;S4rQRSX|j*y2QUsZv-9-n+LrBqv3NQ_o&E7ent&{Tw!N? zhr#y7M2r>m7H2Ym+}ep*opW>!xEdbrf%^#a^YhaxvsiE4sUolM&*T23;L)YeuTIfO z{JVQ)m~TGgq{@Jfal_YEw&-SMuQ6}JPOs)eislI{?2$Hg!NtNNZx)I0o<7VQRfNyVTWNk*!wjIVZaVba4iy(&hyA0uo0j3dTK z`PX1;Voz#>w!UsL;DcKyX^3~V8;VDLO`Lp_n;A{3sk!f={bP0WdaBMt;bPh6-qcrD zBxM5L(#x_cmyInlVupwwec?t$?RR+;WdJA6Um4M~;1_#3l`#>dH^cv8m0i5eY9c^u zJC4vS4ty~mf5XA=z8O6Kh9}V<&|evSgsjzVEpM0RUjdB<0oks~Fr>2>|?T zhhu^Y8z7xuzT79RgI)aIQ7H2zdpU^m6;_9tymhLthGIaz=BH;05Boc3V4Qr~S zEUI$5(1!Cx0ZI>I>LtJ9-WdORt8`Qt0$#p{-dQe6KeU`{007Vmd1n#hNwb+)8y7ou zMyNX#!NkfN4Itm;1ATEmqK+4&K5YlO&cl|rH@{TP?(5jxz}@|Sr%OXtN(BX{jPtgf zE=0fDUk*TfZTWFO<9*Sk4XU%Y*AA$j*G`JT;er5LrX?i4{l@5(L1vE~>42?ui0S zoc>u;2>Ushzu;1&Bzf0uZ(yWnU4(+d^~WiZJtktoU=DHFLu8kJ>T1(r{Hj@Vi z{PFuL`>PO>vk0o)Hz!NTdcE)93tvm7Mi94 z-n7`jtA;4|UY+X}UpJ0D1Py~m#v>ygJLB)E=1tV_kLyeTGq8Z?RSQvGYFvfDcGd`; z*Hmdy7S@)r>P)Q8EH&i5wRKk@mG&b@8KprjZK#p>~Gsm}CY<6yLdi&L?q_Q%3g?|v2nyLWb z4eAsqP+DtA-k-Ykrr%F!0HCijqIoNGgGgxRg8K}pz-U9o3XQgU*8iHM12*(`hBWPT z)h-3L@}uibZf<-8U%+($UUk3$va@4t^C%A8JX1;gkZ!{d^m~T^Frl4xA@jTSD_10< z0LkvX4G*ywKw!2q>*q_drUBFpet;Tl`3pdG(^E%37X{nZOhQL~Ys8di9>b02R**u{ zNNjX=LRg+R{IrxNY|@2PxRDEtq$T$xoaEAj6_$^c;PBi8@(hE4NJwe zMd<;JBwfHO!YT?sp*D?n@w}S?@C;~4>5Z3nyVN%4H;{IWbxB#3i-5nk$nf`9LoIOz zI=-_CNi4VP4ZvCSlj;m@^{w2;Eb`4CP>guKYSt@rT33*XHcbx~b4 z4BSHYHNe*UPV79dpWHf6`(bR*KI%E=00O(br(?CNbh=HEqD|YaAnGIo> z0gVDT;~_-M5|J`xvmD?Hc#<7+Ex$JFm$2y_OiR1BFPv((u(U+5KN;a ziVBlsnHztHv-^zL^#W zgm(3H95K2vXF+X@=JjA0y?1m&ZLbQ>yU&3j3OWSb+shMMT)Y(Gj{GpX{$FNtWKWL4 zQ$v5m`1R`zzcy*NpEdG?kSkrtjj#^Tdy z0Q*l3uv0F8KX_WQAM&-m-U>`00DRYAy0B%BK^t*QX#ejmYHD`o!Mrsz5F&~er4aDj0!S7S9K5_7 z5#KLs1HUr*IRTQpn=Ko2w9Nsysvxk_M4U|*)+2^)E7nb)s_Ep9Y1LxsoVE*A&h?+o z06JH8?AyJ~%~$)*J<_ttdNlAVkf=ofE3UaNq|w7-uiLy?3TWra3tv%F+iz$}Ygc33 zRo?z({$I8Mw>_)cSo43fjas?oP+m3+Eq{n^a76;Wm**oR_a#PDOniTc*1_D^olBnj zY%2m50f6~zUm5af1VF~)v)r+__Dw;8^2)Q=*p$35K)Cl)BS1R>x&7n&9}OCocW;Y| zi*|gT`W(+xd=Y7UDn35GqiToPl28j6Fdz<@Vl*#@)il;w=Lo_|f3MaiqF9_L_}LHK zPX9DihLI~CqfJLhWh-)h%)VLN=7c9^%P2Kq=bnSliANfrZTy7q!lz5&E6W{*AlX^*zV_|~*P>#hAA$}mA2oU(7F)0C5Rkh$ z=l#Y#@3?mi{?H-(@Y&DWE9aV%d4NsJ0?>PJCvJnxe8zPvPE6m^v)TG?GbbkpkAxr` zmgKRde>?s_vmsFc6La%?y26{y`rg95haObJVoG_U`Q<4?Ph{puIy!sbQh#^cMp=f@{&qo5|U`p%F($`)QO%fl%E+=P>C-v=@Be@(Fv#RyHsQaZ4M%r4J4!&xMOX06N9_C2LQ=xxX zh>VKq8ya#%+K%s+iC=s;Idv6#9G-1s|9fcChSqkw|BSvr7M=fCL2l>o=U>Pyyw@n`i6#7pt%GX zgekyF0Nu_Q{y*Yw%Xh*Vd>-uD4-2#1ot=Wst_NQ}XL15XY)ni{yPcy{P`Xt$Yog4E ziHRNl?I`lJ)dRs*`|m|^AL-MqKsXd8tiGw~rXrz4{FlCI9Z-2`GOHlFCQyaN#l-=s z!^rXRxD*}L{}lGa9Lq$LlauF(6}(t4pMJj4^B-%cyWw(OO5wJg$i8TRJ*yKG@uN{ig?Z(^lpgol;;1a+ThT z!5&p@?P%chL5*5aSU@2?`EvR}K|zg0XdGEhGFE?5O)KbOxF;1S&wE(B$w64}t>50! z*gy;sApH$a9Mmd+QJe$JSi4YtsQDk)QN@J2Jysu9>aSHb%pQiyx`6&PU@w9a_TS_KXNwKP=TF89G- z>F1r*aT>HHteXm~nn$;G&|P%*B9Kt7Uo_fl+9%_%LRT+a?N~aKi;Rr!1)XRriRbLd z`kSW8$fNjXJJ7d@XfQ*(4cf@x~$-Xl0&C^V?z+c zG)5AS$12yg4p@D2&_youUTZrFt=wc?S~%(1Cuj)6menm&89MD-{^{2H@gC`k8+3yy5V<$z7uE6Z2L;cbP2fjp9Omy>o_WkDF z^E}TfXHoIxv(HIQW}{cK)#A~C|IaD;tRX4Qld2&e<(eo-h zc@~j^1yZR}j*`jBoNYizCNora~`}7E~l@BtxfX zVAw>l$V`oUQv(SBT1kT1^qW10<5NqKe;VBZ1dQklIO^jxw!P^R+-7Z5JO{vR-(g-0 zWDTHSK~Bv~ckDZ^1NGwGq%w`OC)CxvZz_;!Y3Y^D#{?N3CvL8L9U(9Bj@8xguyAqn z8ouMZC28i2ekAiP*rACe<$&aIKJuMCObk?D7os8x9X9S!Ic)7dm?q8n_6KxYQ;{XW%UZV>1&>LycGC3R{d^bnU~Xy(B;!M7H$Tx~fiN!lnahfPV)FeN z=tNM`(!xep&N6>OgZ`f{VHdKEA73*QnevT{jS#ZFZ8&nJs$~|c{DAi+>XRVKt*-vL zek+yd1-g|8Miz(W)J{B5CDRBMeG%*)gxX%$*qRQ*6|o5k0V`gAzU{cyenW*0_=I(H z!h~-7aCHLJv^?{M8==pxb0#Ft4g#&&hL5C9?pI3-ag?+)9P}&OrX|}ZtxEMWQws|r zAp=T4EaKK8STj2E$)H37{g-%kDp|i^x#rw7nm6@vDpKN5p_CA{nAJPlKfTB%^4G3L z>vxklBd;t}t9G}}qYbu#sBJcuQ3Zl%`7&|!1j)&>>JIMpdoPnW<4>Y2elE%>JEKYc z9(=3Y{xJh+UrJcDl~n5YAXqN8Vgr$N+k9#rEX!v+oa7HZ&sMWC0yy z=7$Gk6HESwh==l5eux`r< zO`gK~x@|QkDG4W%hzp~l?JrAxMtMp!sR0sT_%}7R3|u`8c|QzqQGo4nd)!lQS24=Z>X?tLoH=O>r`kwH-n!nP;_GBn|y@jO?Xd5^oDbglm1zXO)7g~-sr*~q50 z=x;r2gilgB;32&ppPLGNKl+IO?)|$e!-0}B*hkwY%^zhYU6J^^WDM^SD_EXzkDNV* zWHjwJGz?6Fwd)}ePs2(!q8Q+RT2jS_A6SHyEgYK$NgBtNq&DVOP?i2vfM$m>sq!D- zL&IOi>GP`#L5$G0BN@9@DeK6^P3}CtB&XydbPmBJQdPynk+i_4-_0&9-Usd zC8GpK2>F0|)FtqIkNP>y5uxC7YW$QpcLbk@v%&qvwzxw z1Ge0mrU{W>hx^=S;NL9cF4IQE$O{X7DCSV zT5PEB*WYq-Ag__H_a>WMK69MO(FOkcmJ$zX{m)@VpG8GWa8i;nV6JRGzR|rox~y{CKm1WqA*O9j zvYOQsAB$$Oql)n_gSFF7*mJMIYY?*_L;DD9H7zYIaI8+d0(YgKq~ZG7)ZAQBa&OU9 zH>)YkU)`r>J;NNCWSrA`0txv&YoA}VwF5c zoxD(w>UFE9eXU*(y0z-)aL{sARqdy@h*pl&-P+^m>jFGHgrJ#$4WzS;UT$S;D@hMj z1SEvCv~>T#%*`KmDPD^sNk|o~soH%j|B~YzhG)a(IP0T_%~u)Wu_X-jQr%l~dO#>b+DbvqAPd0IVpVFsKm^DLNNj{LSiMcizN`sCD_g(iW_`{2*GG)uu4pIs!=UM zToJ?{?M0UQjn`2^pkz!401JPm^^*#x;}0a047-BLI474pF!Fr%-dzPpCkzTaUJ?#V zc0wR6!m}m1@7$zczIpBb!3T>82XToR7bS^USV<`nExIE#)RohF$rTCz9Tun-fo3cV z1Vq5=a}MT^E|kK_B0`jo!)q$THhh^>M|v4bflun{1VkvXX&PyErMa*E`jY0!5=0G^GDhO_ zz4o~M>&v%#BKoO9yHgeTUZCd6>NxS%a@xEV3L|8NCvCU#uM$>7UMgH9n zXhL?&_Da33w>Mi=t{{5^&XXwmgW>MhTAxq|8UhS>ZRkia;|nw4I|arNAEm93UqK20 zvn_AlkStZNMbPoSr*_A_0#Vk$wn4Lha43+2Xj6b>h)Bwx4DNrvWGpeXPO*XR7T~sw z1UGU2#H-1>i#t$|d??GS)$nwQrS*|_TjN!*AUUvlUE6(Ki1zog0#To+0|KqCCo;_L zR>6G?fJN;MgvW%0@VGtcIbb6tXJJ8QPggpl@iy33c)TCIT>}8co?liP=t!@F&^m~N zIJYi0dSsnc7c-;Qpm!bhrU4(q;{`)3=to$T-(zQaoTz6jY(yVK`_q+!ExT)W=R+%|&=+0;TI|9#+U4czO_EPKen z(wz;jWMb|}mn1J=4wXk-m>{p%xJ;;!C|qkM{XUJ?cLC%zbq~{gc2;IIM=n1WvgzUy zR@QCXjen9e4f`!LsxxZ+;eL%wzwb<*q*AKt2M9~az_Ya=BEnQCe%sU^d+=;cIW#mh z{I+2lWZc@d{?S^7If>Ct$@QU+v7y0p-UX}`0FOo^lM|K?e%aFUJqh= zu$Q5+@xg+Pu-*Abi1x7@Ay&sdIr5f<2K+;gQd~hvu^U;u524TKVDyldp9#qH*7`_M zfuGR5*qQ_e!GFJn>DgjN>ArpIKe>;!GPdqxYeo0wO@~SLIeE-=vnCTx#94g6v@zxg zb@K19gU!BkkZI}txyoJxdfI~0(#XoCs?isD+qO;1boBI{z})Q4)*$aPv{lQL-}bKA zbFVv}XD#CI?}NzRK1MDCg1Fs^+wPn4y4k2@1m9IhPh~*x(=uh2rD_tcg z7B#q7o5ZD}A2+#V^Z)qq1Gv9{O3@>62i?=wmbn%a4m<-}PNM#S0l(E#v7RaeAcQ66 z;P4)}H9;QaDCGX3585`gLtS=6n#{BdPsgs?iOB$P+a_pj&Ac;|8qxN+t(~J;-M!mA zJC~?kA9u~(h8%ajDqmzDr9yyXc)m(6K#BL;4!Y!Rv9|rqeTfRc_Ll zMB2vNR`zscCZ@7r@+2Mu2a7WPo}7e-+e6so-_%Dz2*NC?W#_bl?(Rn%>lqnD!@SX( zcf)-xB!Q}MQpv5+cALGMHIp)vRtdLjP6o?=Dqa$w4==<->&NImS>*T^X(*u*td;oQEke|ehFEZN+{(2d%g(A|AR z7XBEZY7K4ZalCNsJV4R_Q1dCr~WmZ3m%R5uX4dlLj2?V(vC<+wDC|-WhlRsPUL%$)J zwa>{C*ZPyyaTSlqJ8#+L!9hvh=SRfwUrh+$NUf6*0Y1(3q``#MWJGgoch_LOQvlv5 zo_d4E+3H7-d^F7*RahkEe&xmK#DO_^tkSZB!8|Mn{C?-(dOO`Jo(?rD-HyE;mO!H& z*YWzYGURJybham$MZEQ*_cD=G| zE`qC_zn}Qqj%Z?n=*)HL?BNMqzLXE!SP+kZ{C`+_FEN`1y>1))e1Wy3=nY|9c5=v4 z2GKy&2MTTVGS5Bu-W0UKxovv{8{?wHT~3siBj>lhAc4R(h#WEjoXLZOC=|=P?|FUh zEBjFl7c2#vHm*vCKIcDp0%5?;25fYTV?B*64^$0C99Lcv@_eUm=8C>Ny!08G6Ju5n zM)>~;N^t(1RT7RZD$TFemDFH-br6*hBN$gGao2?KVFNzd5`_c@zn+?zL9psyJb{A_ zAUA+96ELx zP%EwEUV^Kc>fw2;bScD5=dckqR;B?4eE@@p9=k=JwCZZ`Mp9DJc7$tJe>iRW?B27{ zU-w;@YawV)85}RL;l1B6v|Or(OlP-I2$Y$r?mN0OAQuoA9m`XUcuD+DQ9al$DFsNh zD_~JVh>@eBTyGjo-Wp#Gq`cMh*B{*o{eh28ON;_5DJ3PZs2CtC@BkeI17pj1b*po- zSSLGiG~3mWa*vvxO3Izb?iQE6Dy1U5HCvoF<3gqNo4L%fs?Z8L0wlz$B_fP{@noSS z(F^JNTBp>K|MQx;<6LJwDCJ>ZU^`%eVv0`<{0Sx`B|6ZB%AOoc|IYZ9*>a^BUTInh zcskqs@9P&jn$e0fTrfBhFxfum_?*#Q5_vM6YZDzmN=v)JU?UX7NHS2*fdaEb4z1@^zd*B>n0HvD&q`eI?_3B6`S+6f5sBe+(MmB zn}=a*XzU)&Itzsl+d3lc14((A>eZ(3F;)BsZ92oKUzc5X`45d!=P?^XO4etj7)jxEV zW1~m%=Xyja4O{o~y>rCcyh&~DksSWb@ggkna7B}7Q2J<8-!lyhQ2PF?*~@^4O}Uj!h^ zz@iY1F=3)Vg48<0%I&?$RBNKH-kue7dJ1!2tiXsH2; zYknT25{(YfFU1}^mXJYJ8v{BQ><~izGOUxp-|;+I|1Le1;r9i!!>FIoAh1^cI;LX& zzts{sP1f~FKet6FD-n+~63DH=he=fJz7#ioq!mG3CvujV$(G&fp={ODTFN*XGPny1 zi0x82hT8?~CdR9c=??lNG9e^^7f`IzS=eE1f5yc2H3JY+aAXLERP4Ha5W zO$(}o4b{fy4twQk@BLgEQMEmy?oV~SI-WJudvpYk<#%yfn%$JiP@oC;_!r{ffY7eA znBW?Dc-?=zV_p+~t#n5OCt|s1U)s|AkqEYM@=YKW`z4J(Z+G?Lu_zr@d|;I{HoB~& z24{2GoYX|Aic#t2Y@W+$XQ1Xj9|>ysYpnG(zkpyPN`q@xUf}Od&CGiKARks9rfb#j zbw2@a1fuhdakaLElknNIuobfj7?7+Ra@5hy_y|F|b&G4a59cpw z3#cF-PoMe8w|pL!>t0H@?3I=v@tlntg-^1nKJVeU!xp2E31>GqpX+eE+jQQoght1w z#>I^#rG=GNr7y=M$BdfgcM$~1<7^+EB$w1xFp*&ztEr~25ejly3S&6Jr1K#9{d)az zlL`e!$kg0aG%61gr3tw~ZNG8>B4YZL>YdyG4r0iM5aRiH{6~^fWyI4Ui}m)7V9*p` z_kp`cX8Q4?_>;63rTU|HAg9z+Ny^Xmossb6zaLoqkB4>rZt8nUPx;d~-d3VR*1iv& zBdtIVJ9$sgad?^Ia=HRvr>L$TPU^!O`OVV7g>9-+lY@=JV4tv}%lPLTYf1g_8PoDo zc0%A)d8WK6*t-9}aWBlIg`?UyGch&HF`I=PQhv!;xbo1{M%k@RpCZ><#u;U%R2vzh zlcXM0v8uPzD*Xc^tV;(~c~&QHE^U%Re`+fm7ZmFfgjo|*EDvZKsQip$#hJ%c+3_kl ztJ)S(w9-?dFFrVlDcSgrsCKHZy!YKAF$#7>KWI4t%17wCGCVXCIgx;Nz()@r&gg*A zP5(uskV#{qSQx!p^|-io5oKj})vw#a%Jy)dk?EWXwKh+bW-kGsB||NXmO_u2Yft5?%L_XdX^D4GRx zVoz4ejPY1KT{S%(dJP1|tN#B^#-&At@s2uSWCoHV+KL2~H21CxRiGUp1xWD>#HFN! z8dE0pC3(p<*=`Qqsy1mYib)AHyh zWD4)sIH+HbMAGS={@e;_d1(#l(Qk3=2zS1^I$UKbZ~XXpgE>GuZXofmimE$In&PlU zOa4mgYd?4M?4jT9?X9|b!_RZ})jwf0S+#nizl_NnNbe9djn7o(rc@oQ{4!su!{AcM zO;k?n_&+Q_s(H6jFryla7ByA1v#HVdv-BY?g5wpV|B zWByv*8G-gM14W!fJyR#I*PojXfT&II4#4BGrve=hdAk~loyM@aiIQ))qR~JH=Ls%s zPL?V}8wN&#E9w7@0x#|VjJYxQ3M?ksSxku!eCXoBEMc6Uf=6y8x$EIUTIsw}(zS^p zN;3zVz>Cyj0*Np}TJ$`bV*HT9O_ham8#k4*QtW-W5M6>VV88%gq^N4=HaAuIMhl9cb zW#s;39V$q+*6bU&^PkQ)`!-*6g6B~UD*Uza1iU>b7NlyQguj9Z0e{mpN&lY#26!xC zRKFRI#8}fs2MJXccn?#t8!F|?P9t3mz1du(TE>!IDj#^Als~v4dNe0r7>IlK1%Ij+ z*W?m=;cltg=Hs^S4353&fUG?8SbmMaun=HsX)Pjc1yx*ZVb@$ha(z8)YJEeAwgoZr z+V;klm;pk2sJ3Aufo4s#QuVm9;obU$5pAuO;DE0m)LX-TG}o3Dlw*^}yK_1Mxv3m4 z2v2ceLxg&C1tS6UAb}*RwSV_6<1|fMk~z`Ee`)6ySqx5CLO>Z1)##v%-Lxt#lB%5f zPlsESipNlHRS#x0E&zGP<#fc69pAPh0=SYb!M1ptW>j0c?!pjNPC0wm3Jr4lntss{ zeZS=d$^|Hn2Bxw z873vRAGSpi`)~WEG3@U@h!2W*L^Ex@qwrX_|Fd0oMhVxX@4wNr^EqUC{nNLG*M3Rv zK}tk-T(3;lhu1i5$zP-3*j5Jbl2JuMLL8kS&1tHE|Gb-n#Ed=H)()=zREoT5F=Lls z04)01L&AIqe8{l1*lMfSSe=cIq2ZpJxeL17=4``kS^gPX{Se*K0s>LATMh+B z4}+@`O-NX-F7&HfL=Qs5Bw`Z-amF->jK~K^wn7paZhXUh6J6bkxc<@KT>#G_r=}Lv z_@^;?zceI1F3YdE`K3yxMwbyI5RJkM+kk`u@N#l60MM)XRogownuh81 zaPz6n`)Tdm^{yK$iWVO{C05@%PlNsZ$%KEuHq20vyuQ3|C|J>1k41H}mgGJDd@iM{ zc&f|In2?~+&V!c0nV-Jm-Achq%INmge=M#dL~D%9Y%(N&sW(o%QDxJz%rkd`7?FcY zW8!!Fp5Lx!1)`Dets&)>&8M-|S2(6ZbbGLfFpxN}I`zJSHnVaG6zCT!Hxc55sMexB zY!50Wp+pV-j?K&rIyz$f`W313e3K1Sgd##hlmvu?;|mK2ZEY=-$b0OZM<|?`GOjJ! zcb?jy^+&3)*;Z9rw^)g6P2k{nYd{V&8i_q*tJwQt~z{GSU$M z_`y#|O)2a~idjFOZ%+RxD@&M@RWQUt$=FggHZ~^X;SqCV#Q#RZAduAXSvu7Ae@Z5h zhq=EdiGh7VWq@B~_jqRqfYn4`(b?3}GQ3=cK^Wa%oIJxdYB^wN=(C}Ti5T%MH^l3g z>2V=xihP_>xLQIR`pjbbfOykxrhFgPatD2@-9(! z!4Ffso%&xHsy|t%>pCaDzD?k$!1F6?Z0zDVvFQoRcRp%#ZC&jT%2}n6ah7<3Y7EPU zrbfq(!IsJ^Y{Hr{w-(`{M?=5;Bq+^F!g&;^%Dd&abhr|Q{mHoFZ2O(p33hD0UX*-A zO#W8#Z?^+}c|4Q>QY5P?BTn<>2oHjdhEdR-Sb8kkWox4ALh+j_f|WYY>a^GrTy?cK zgmC)^N}q;FjxU^RC}I+G;twlW328ANC8ht?I3j~HPS$qI0$2>{C_ z&MBlUBQj?s@ACOO2QywFntkonmj*(sCBgFIw}=w@-GxI(S&c}(F-jEumYml6{ZDpH z{N%=;JkU&U-q+NAs}K4x#ykrUlFYIbhEQ;v*amB5X-ehdCr?V7p(K z_Nnh)Z~MUC=vQ?ZzE_Pj9C7dDazvjXXRa0n?eNr& zc^2ZNolXf}W~!UECU(E4HSQC?EDHqx;yBC26?ar{$>ZI4m=U|Y5W6hje=-+p#K=0= zZ%4!#A(F~$79Ezfc#q1`a`kRSr&Y67fC&=Um#&~(Uqj7J@XOpba=3eUaoDemGN&Hm zKANrI79K7)9`5~(j^NAp@+b_58E7O8pQ$=+aS&PR0|ia35!af$`o=Xqi29<5h3K&S zd-Ngu?AE!%v~o7;SD-&RB7=P~@YVhZfk^SbD?r;Vbx$z`Ha)S!SZ|H@W~6vI z=iV#7oCSE~3~}eldt!lQCz*b0-Ll?{L>T)CF%*D?>=w(r?;7&vL;`w)wX?x#e zm#Q_fFQt~+1PsJkMGn5{R#7_D_$V)~)t?CeYu#O4u>4GM~avNu_E% zM&m9E?Y<*&yYDT&K!*Aiv>yFDc<)Kk88&1q$+Qp>q0!cNF-}Z-k1|ZaQ2u2WWmHLA zVY@Jm(f&I;Rlf|jg;P#d_xriH&|fUW?mw0x*>6p4SSO*cIV%}F#;6Sy!>R0bzpdg5 zHcjlVOhxi3MMe)u^K^tMtn0r9-!jqGQ2aGK@+z6TR30-+6l6y9iSyV(@EYKjnx|BVhVqqzV>|+@A2Y$l#q_p0X!U49Z_(DYTDc-} zCP=O1U}cuyr;&w@(02RE#X=H+C1T2>83_C8rT&pCFirA<5n4-uAu?HSxs=xIk0WJo zc@XPPU^zIpL3wZ0huHV*e~V{FkN@9OIfXlS9lvpu)#Pqdg!+$h{Li^CggMFRyZx`7 z&;dKi#QTq(fOEj8UgWJRw|MglH4+L(|3^uQklH*sXwG1Q#=n@`{kUmU_0IMpw)uAl zOj;Sk@G5a$dM>-_57J{_wvB|55kwNr3MPzx*^SF2?yGM{{lVV0$jldo)nv66$&zms zeV}(J9hx19@SdvDVKoWH=a%So`Z~~yn{abQt1yc+&}Me+%VtNR*8S)&8@{S~pqtxh zJxZWrA9_CY?F|)hla2IOM^gVya`MBiYxpP33VNsPIMU?MKVKC-=H34hg-Ln$MjqtD zidMfZ6{g13LX2MD|JgCCDV+9i%qmLg`+)NOPbaqkP77->5l5n55!Uu38;)KruNx+Y zZI>InuOF)nJtON6_tj!mG@&~q`RLe!S#M6QvQK4WgX-Hrx5X6>QMx3b(%rVETeBBJ zrVE?RUeoE4tAKe1p)afGme?)elk^Zasb_SU`Yau7I?YGpgz)sLlljU1UcE(Hvpp)UKrhI+u^0C^?8A68qkIKZ%k}+P{$lRx6tr|v>~F-x>I*$c zg-0!EIP5@iyT-8)1z+UbAC*$#vxsG-V^-3EjyQ|?)G7YB4%dO2+Ll3`C*u5lW^hTO z`d0Ne(xVz3*4M2;mq8KU@^FokBFZ0p;@%x(4G$hHYE0gM)Fvf z4Acx=4FA+06sJmv^9l28kPXA)x?7d6ik*V$Fs!Asuku^Ter8GTsr|+4n#`IY*>Q^3 zH*h^4gpF&xg|BOa)V}W#Tu0AXtx!p*u1}aNecxBLJYjuBk|QO{J;GQ*YByqK`TEZCm;`X;#qbUIkXgvyxte(!6Cvfbp9wN zr#IdYtuuzv4q$ic8~)I%tI*EIE%rf()B^tC0BXYSWEw*|fo!eXv{72&3x=|qSWRNY zSIJBz@>jj-G@f73v8OZCv4V#idX_(-C?O$H%-_49^U9FsT?7w&i*M4i*nPMz4M2Tm<0riA{HsNf+NdR6u&D{ETmcL zu#3JIETQ62K3C4;dw;V(Z#*To@rrp;Jb9;&daamYvY1rqtF}lZ^1CTs`{_VUJMXPL zUZg7XI~^Q!Y4Re%>u?xoBYBEe!5l2Yf|AfUcaQZ8k@&+z3(ahf_8(rGZwD6y%gR$2 zl#GI;y2XbQm8aqAEQ_NXriqH^$|wEudA|%=+IA_`+`ZkJTh$`y2uPtw1=@_X2lUzPQX!uZ|i{2yB$t6#E8Orof#ebc${; zePePpugTGoX(?^>F52ZQ)oUuaEfali+#e)~r(U^Wn}*S3Le)IJk1bgI(nVK7KzrS) zv`nhfA}~ERI4;*}Pp*Q4p%!0uBqh#)Z_o7(#$1s38y}XUcEcDvi)C)Bc59rf#V>xH z*JDnp(-$MtTvKTqrP1v4$6b$QIs^!61%iZ0F)$711J7>ZvP;s+yTNr%xv*oHfg@RO zgQpUf8Yrrg$lx}hMGrZ?l~gSKQ#=Zb#c$Ncm)CsAGm$EOPK_NZo4@^nH5X_*S$H<7xGx@5yd9{>>lV?v_Kx=}s3$bwsA=1S7nDWY z^6116uDGZwQcCfqSv+N;=>WgX(~gthyhvf-v8GH? zX)X*}kpxV1M`T2)LpYIZo6|q9%6dhpehIuWT|FC$?)rk-=yIEN;jr4Hr=?fGv-(Q< z^RO)LueRUlo0_cCF~X=J(QKa_nPg0f6RgGmsglUo16_rqO*vl&uyNoLe=rDV`%R^h zM~#$LX4B|}e6H9(gKizf@>;MK-%q8B*=sSEbn03miv7z`82k6a=RNqQ2~Q?SmBoD# zhL|Ghuy?ZY70hd|7%4Ug+*ZR6SQ|bXYxhTm{<0_MpkEja()=4iHZ<6IX8(?y3|Pq#%5SqS}6uJCaZQl%!O z+{`Yi$aRFkl~7D_-#Nz#hQ?)InuW+xQjoR}&h0FV)A3fW$FZCyqI)Nr*A)zQ^RGe| z_2aYUo7N~<{&A9UR8RP=Vvl)bqK$(oO2nV_-;XqtD)Cm^GG?Y@1+dMy8lceC z%C8;hxw}p}LaqD(jo^2UEHoNh(}?gNuRf++xgRE71+qF4NTjh$hv)#0pDUKI)u;D| znEby*r#n{WneXCsc9G)KMuB}M&tLp^b%y2CwbTn{uLLV42@i}9L+fZVJR<`&em)%} zvKF&U^RZdJ#d21%oZuWekY>$1Nmaib-+ZaM(&t)$GUKHbrQ-uzz#b4}+y& zE?8+a!OK>aWFz{UfkU&u|8P1`#gc+NRvNyy^NXp+il~r;*w{^@5?mwWqeNd-G7I@r zfjZFTYC|by8 z^-u$?p2@C1lt5FmWma0!*UG^>iR*>!rrufmZn@ypi=m9L;?}AfwA&q1$LOj)7Kj|W zZPPc)i#VTi5olM4-iwcT*X=+XT(d&x^IQ)KV^aB-`~4l1P<}{U8QZ8HykR3qoQ`u} zAXr@(4w9RxH#2iX?hE>RT*nYBOB1YHZ1e30+D|^#@d6Hi4jU!VETuW;sF>#@+xAcg0(C8EEUQ1^f9JOn zY-YpAHZm`C+~eMy7@n+@mTI52eq#)&V)MFIhR}_e5UW3E=?8sU=&hA~kmko$A_@tW z(B^9H&zg+R6`Eb1-DKUJpu!ON`W`}v=bpt~zuY?1VBT}EIE-7tZ1qQUnsnR+hP?8j zBS$%*l~5jh5MS>xtzdB%ZJ*RE8dDSDvcrVCVCZp{ORIAmOa-qQ>oG*52K5 z=8HSYe_Xu;<(tuSiKo7gb&ts+lB{*?iN1v4;o`VHsG``{!XjmjuQ$p>@g>mT8-1=R zH@&SCUJh}4fdldlzUS`aPfMv)fd0^aQRL( zYCnwM+U5$@C}E0qb^b`ZEek)OXZiLH4$4NWYOQQ1u9ybzchkoW{qlXZLF2)_&{}k! zt6q$@S*8S7-ouVwOvShsA4P>&!B=-8( z>mW@xuA=(lGdkpmaN{mIF%jjWIa&!7xVQtouX%2gRh*1!Lge%a+6}%NI20HTN|z#= zY?M0$NvszqY_+Rp;&?Oi8rT#}I%*1{n$i?w@6^b@%apL}g&!+@`0k92=f+qvCHIAu z_AHG$j>D%>a?emOdjzw7=>%Z9h1iQk#ub3fJ5fMFBF|p%?`BT%(CXC?R(vonC%p23> zigrZk?@cLM@-8;$@={6P80T;7hc(2%d)H;?EZ&yJRCpo%l;>>FcuY_Sor2A6pg|HL z%X_>;&57ZONqentxyx6r<#|qBe=*1a0JfE05A2iI?f~b-2U&1_HfFU~U|dL$M&nO5 z6d&LB(S7Enpnds*k$9-{h|z-HBY=|H`Q^WpB!-FR?Zl9RCdhVp7@9|5^d=q_D zLFtT`ReiAkC}y+(wcjuc`VE?%P{NV}gp40uZS`6O)ot&4OEBKD((Q)5(*+2DcXj`CP zWFdmN87^7Jn+rmBpHS)?kh_Ksh7G=JsfdT%oYAo90r2Nny?8h*+L5ySPtZg!&~mrS zllHywyehLvn#arR=k|u(tPnsdh5>4}3=>(D zOVq(*{$SZNH|S;Adw;SJU={%N(Fl*zL8v*xbnTy50*4-Kl{L^zRs3phX7Hs zZ)SYeQ}YYr58z3_+CcA8gM;I5cV3bVhY>D34r^WnL_~SO8wYr3b-RMEUjW?(2eU|C zf37+n?_DUsVp2uxAB355t%#S0{UM(R?7|sP3kZyZO{vF6&n4TgsD40M5KmpP@iG{c ze13sL^W82XLd^ZLA|&y?%gL{?NCJy{5bae4k52_9ClO7C0~P?P`J zBi*JI27=S`PHf5juq@M3dY2Up`5w1fd|)6fmm9IcaeeHx0#t(=y@Wm?;D6A3)_FPi zYxq%$kNA^>1pG-`HtB4EboyCc8{d+iR}?W1&gCvc_VuH;06jf@r9mG`sb+)1UFK(O z_uI14QbvFY=Lgt@u{IxcB9xH)lfguWvq6Rm#|*owrA>*mf12>2%vH@ZsWkb2vS9|! zil@tRG}z#C%ltxdv(GHZmdw8@mKg|cZAYY7Nwu`(ht-MRi*8iS-%n!O)?TCx(ndLA z^YlmvavEKFtkQSUMH~wME;@=U!J*+~+KwnPu{#|YfxYpH{I@_ zD8X*k>o%v}6>V^E@T?u`Hm{&SS)W0`ditl>Ov#|5>F0(toUG*Jh)KXyn?Rc#46FpA z9gyEm6UN@=8OOW75dsU&;Smw?fM&;RvS8g0mgJ+fbW~B}_wV014@-YSKv>L_b~K%~ zM&Q3U?lx07@L6!Mx3ARg5X8d5f-{4GfuW@+Dw>o7pAP09M6!IB-$=v$4+~JMTE9ahlM(u#H7M_!pV`#X-N&Zgv%Zu2-9O|h zAtA1>ujyD=`p(w7r|z%>2#Ccx8_bhF5fPCTb|5mh z_INpZ+DlP>@AmoTtB&J%&zU>l*#ng8)3pzEogMZFAW{ZPEiY>UFUR4sa_hG=~N zmZoE*>+TN2WOW++;(2p#l3Q>u(4x)4+_I&hHcNs1rN`S2>-Op4c5|3x6&fPHuyC_b z;OPz6gnJ#+7ocI?00ZcmF~QJLX;*CaQW?!cDbOU*O-@AU$9Bzo2ngmnLWj<2u0f zcDsD5^1`ooc0W;Nzm3p*vtSYb?q#_J?2CX`7d2g?!a%5ZK3twAjxTha@@Eiu(z3dh z*AQTL&gSf_3w0e35sOF<+g(3=h8I#Ls!5Sm-Ya~41#zt<>`)yp}6&;m4M52p)47WjU z`M4N9e24RG6&=0DJ9vPk1>1hog`+lNk>j6rU{Ofg+g5jaCIFA~=X8E#p%A2?#p90W z$I<7t9Sv(yz^wB5*rQn+#F7ReYYVm|g`m(mE=&uZR=J<9-a|vyfo-J{m5SatO0ls* zS)0elT@y+`oj~)@NR{dJ>K}U*M)=mJjbDtJOIu4_w3tH3MlN?iL!(wXjR}K%n2K&4 zrC~rbXcqQ$;fY3QDY1ZHn;{{pTPyK~=X3k?$FC+41wT9hB}q|O>P75;dXB#mpFKJ@ zF*2VM40*zHE?fxF4Czal1*ZYgzEEp%4lXMc5$VEJQI9O-8g7QbLnN+UUL$qaw8}FE z0EOC9+`GSGfB=wW{pCid&Rg(`HalQRyTQO2&?fj5DHiHa7b^|2cW<&&?}#43qkinc zF%n@K=Li=b+vfS?p!mML?XSB$K6XIowvO99wg@@#K3f_C=FrqC;ut|jb>-|KOrITq zB6gfCH@(C=#NE6{Z}Q{co}}(C>&u(HQJuGd5)28fTCJ|1yS@bj%om>^@b@k+H*1c) z7jI`YyJ9h>z{LLZj58A8uE2Y5j0B-grBSmd0r98_z8AJD7&&BgS4dtS{pMsj{p#=G z;h_)F61|!ZcY16 z94DbN&5Ky2R3%Su3qHM+gj3!9-WgX#9$C7fZ07xk>2J#*pc%EfK_CpSyZbcr`oxUmXx4_^h3*Co}yS z{+x#`1}%TkL$+NvTRl#77_aNk^&zVxoz3L8PXXcx#Rq6$FmiR)}9}F_sb-)0Dguj1p+w=~m%eq(P*VQlvvt43ti3 z5Rg`BrMp48x%>U@cjx~9jLtZWyl~EW&faUUz1P~12rLE`H4JLpte-MGLSW1n#HszL z#QEim19&fCq9kW9`tM~Vas26O#ro%h!j_(tGGu#p39dj(Uq2ikim_`OCF)0kgE;Cd z@R>7U_1QXN<{V$nWINSRf7Bs&5%blk3dB{@`y*x}do;1^`3~+ zz$T)LfHYxoyhB;)Im9jiqwS}MTjcB1Nd;fNfL`m&w(4)jpvyOEGe5y`rz)EZ814Ue zyp(D2J5RNGAyE!)^y$>)Y>MqW?50LPHwe~NV2Aaid#?W!^|8B)yhqb7^vH}H#je@( z%QBF&smq(1(tB=>b9%qLbx%P7%?51v;^MSn-Ur-^Z;jTUUV|j3?%LazDoXGn-HmH! zcemMiQ&>wCnX@}w=oV56-VGY6bf_P(ud<^NAQH8M&M%RV{J*-5-<~{%h5R0teh$5W5LO ze6kX7F&Bi1N0+_FHz)medDs6`=sep5@xhHG<6xMNQr*l3fkyjhJ?<<0r|?@CdoLu= z2$*LH6oL)Q^jz!+{z#QqW@iGoepY2A(T5CAT5w5+@4JWkg{A^dzy4hO{oc9BvLp*C zx~g%qiO8cEsZEMaO#-U%P=#I%`&wGKu^rL3!UMh&%lXAxcPC~;a#?!k z%U4*lsIMpm?*&A`u(-K4=gEgr4xgvWe!1b=~;zWDY zK@2X0fFZDss?2uxTue;N5{fp|F@|Ao?4ZM)*pNiCIxj)g31Tl7hPoo%WB4Hl@AW89 z8KH)bAUd|&7o8IX1lBJ4^=C3f=#qo}gcROYDaFB{-F`U+ePh=f z$TXbAc5q-s6@~C1@u8SOZ!+5|v*~T0ZhnvA5pIQd72A)9qv{{Z5np(EsFMk>QyC`7 zP){J>Xa)yvoT5ayRf^ib5^f${IZwo8NU!lb+@h8_FKqjfLbRq#ePZctMkL@;yQ02c z6BPP9#z*W(o%n41;Uvragj+Xnvh=YC(v+jDxnm@-+{}3V#;wLUS?1I)ibfC}U@b~f zayS(j4u2WoOkg*KH(&NT!|pSbQYp zi1$|&dk;*%x}xMc+tb>QY?rdWtTTFUoM3k+)_;ibbQykVYta&d$H7MrQgpHPiCSug zz%#*0hcO;b+p;ki2$JS4Aun6D+5y_!NQ+%Io?l$F9R4y!Bl(o$9?A)q^5bZTWSzLC64_$PaJTNstHdi@KwkgyMROI0w#O2;M4nJ z$WGbbp1ZLAV5CJ<$f}+2>||sF9U1;=6mH!;sdGK|hz=Z!zB62UQ9}@*JoM(wlskUb zP9x?t&f)MuOWGxib!zz}uD?5ilx2H3&DjDVf!E4=>VF_DZCX-8smr$kg2C_n5LFys z5jT!~SZ1TPX(TEtYEW$c{QIEPBCHMfS}*B%#DAcgS=BRc7I1l*CTQJ7fiwZW()jps z`Va{?``2;bVDuW?Hg+Y>WAH?J4zDdPvJH04mb*49-UM0pbxe2uONW}^X?y7?3dz{( zsa>Vg)G8PKb>HunE-CJnt`+J5{ts*-pA&y^QrB+VgAkB z7oaxobb+1yET}$}!KMwY`}hRfwY0SUgSyG=c**#5hYkc9FVA~nu${btm{tT={PM!4 z2TbO|1Eevr%_lc@1zcy9RO?Z&ckttV4tj$q_IF;Jfg{oe zSdnr=`Cju@@^ds~!B?^>$AVV>fT|Qge_k04H<%L1N`n7i7BU{jJ%9Lr1L)PL!s_ z5daQ3U~m+_tqr5(F)9B~PzTm-p0I=wGw{WyNx0_BroK$4LOGK|S|<)~WtvY&Ow0ji zX`OuaHjocQ0f0fDrq*fOCE9kE^E<+gqV*u#tUol3x-RwLw?1S;n;r=qI@@OOun_H_ z=7$&yE}^mW4T5%q96-7_!gc|pW*P#ss>7VDrZbN;D9C*`YxI+;le$CUMq|JX9;w0G&^K5y8ZL{Hi? zoc34-e$}n1MqKyB9)*AaS(KtZP9Kylq%119Q{cQL2&qMYss)@hJx*(FVO+S>6TV)$ zTF9fV-aoBQ55RloV|ag3%uTO z9zFm-kTsrDfTa=14h|s=hhNN|iMBTShk=*F!weJ~K<`aCxWy%b(j zef%$-opVcKhM_`_ow24Yu4iL2s#im6Z|G}N)LI8KZ5oMp%Gd#6R|=JvMr74*UCJ7j z#w%ZC31i+DY8B{dIy;repkagzX^0*^9tt(pNuv|C4kTP9$oE+x%kGuPxa3adqf#|E zYP{3@1D(5xzei<<9UOmv8ryAYcJE)^+T|8v`P1Mz24M})ES6s8Gsmo34T^~5F>9a$ zn9RY;+m@hjiWk`i+CCM)F>3~OUM0ob65wa2F6$_SOs)wqPX`>HKSR|j+u&J`KY7(RuP)A!t1S!Ny*Grxars{_4*m-^kY^mi&Q-{N4HSNs93C0E{cSwAILRq&!m;V@ux z6v5VJ_Jo9>6_iq?0zh2DlsVG0v#>P>&wZ%8&8`C9eFQk?4tifg@rgYtzw1O3BOf#w z)H5&0k-8(QhsIYh(G4osWl%79wDvGOc}c#f{K-Hl)?tR!GoX&yvJd9hrvkyH6CtqIqZB z4X}Qz&M^UNFDMFIz%_`55Jd+Vls|sM*kWyKYt@&26QKd`F=!u1BX#=AsKf(-iyItu zu!0&dK4_%9>P-`$nTwU9IzgcV%@IK3Z92A_+ApQiOEEHiYO0N{pBi;pC4f;kMe$j3MD(rTkq1ZY2VNdB0ITKUwV3h&L{m@$@im^ka_L+) z#(tr|V_JthVsdC?LF|~;8`jO=$XrMw3?GUIB@UDk#o*!xT?*&W4aBeEsWD(ZgAz+D zK8PH;dU|LG4B@&!`HO2>4eKVzl-__B8)Oh+6qSlM(iwGCnBr7Ml8y)r_q5Lrsv4VN z;|5#09MGz4$Not=0IN~9rNst3psj4V=3MvO_MNxkwh|xUb{)+O2fKBtXPZqMRa0T! zyH3(m4PN`yiOWbJR^adnbMv-G(i{2XBAZVp~YYfF<};n z%_z)G(0H+50ZkSZ(e&53F&b7Y&_eZ$)0C+OcMBVPIwz8!Olb_V@Z1U%C9u9QGzr(X zN8)y|)rn>RbNts&pPE5G{R$Ac-oM&rWb`@_s?`%5RBJcHCH-%nyyXF-teGUBW9t*u zFfghW-FCD}^Rz*PF$3O@w#rnv`%ek$V%UGEM8j!<<9!vsy z5Rhm79edN8@Uq9M46iX3=KJWlxT(jrx1_D}0|= zr_`f<335^zBjm0xDRb{rjTve^4Z@}rVNqehq`*uKm}01!^7lQo&lB49-wmKTnl$N` zdFGwuyLmI5zs{lY7ZLXA(nwhJwPMQ!{M1XpW(MgMG=DEkOth-P!*Q^&v9XdqF!pyT_xoTZPIGhAoxNrux3{FZB)m@*^dkL4v-2e%_2zb42raM2WmBc;R27gTshN8gqj) zdYu1$4ZidvrKeq?wfM}*GXo6?Lv?z03TXO9?UDo!dzK&Vu{&<$8P-T%jW)T6#AQ*5 zD#p`_NHn#&#qwJTr~WQ&o8{5b5#x;;p|btyH{YIMRT%Jq6?X`0KM*&V0d8hJ-ft?i zKYqjoKUX9|_0M%FPXvj3`xaH}0;7X4;+Ut2JF?MUmE5@iK&$hoEqD?9or$hQD{=VE zFOzar0qvyLE#ouKQD{;dwj;c- zy|?q7b8z65kKd)Ei5Y!fy(aya?53Hm{uPg;0vQSeoFoO`yno)8tSJ&p5|xksw4oI*la@xk9*?TUdBctlldIxG+?n074He zjk5lnkroo@;C zF|Pj;*4(VH{`YoB6`T}<;%Uz6Z{NE5tV9K92=Az?Q~Z<=5I};Ak**&<u-ys zUdBoV9|lXvSP?Io=D0*e;#0Fd!f+gnz(n-tz`%>MGijfztL;}--m?nY^xXN-pBZ@Z z%r5^J2qZuenl2t5%G%mwqM-z@3GmjR6@B?a0iMhpmR43Xi;H2?)8?N`_}Za_Qg0NV z@^eSPF#?evZvSf3h$*k$&y9EcXtc30=s*Kl#0N!eZ1+BB2;Wu5NJ>b6%zxAU5WFLv zHY6n`{@yx(_W#GLI-U&}G?1DW*0J* z>K>gsH3fpMiGf5!#=cnj@^VuR$-3Jd@{J7cTy&=x6Uv=N z%wZHkBtmtz1&_@8)^BcaZ#PBlU6t^g7wEAOMn^{%aH1>OWE{?kijBPe@Zr_y#-}S} zlv)}oLdtHOS-H6wy}iA6R8_NGrx-5j!P*i_e)y1B?(B7CRrwc+l}e8>y9&$QjazBTegLWpJpLQ_+!Q-<=iZ^vVK9gIbl3V@@KpGfPW2LCHjuPPHL!tAm_M zN=oMA)vm!?uW1dic_f}jd{JBK%OwAzwj1dD_ix+l`s-2+20(d%+E~hU2lMV-Sax~i z{S6dVCusQ{S6!9SKQlS`&cFjby=Kdj(Fu&rKlKD`q0YPKEr0)};TQV*`Mpj|Rq6QH zW|^(%YP*<3OGrp)zVWA`+HaxMk~Vw^R|r@Jo%#l2=#o`AO(@FCBNJ->zS1r4`>?XH z0dNdU9bQbE8u`DW`9Colqgm@<^Ky%+JANucr^jV5k0-vI{41Nb2|f)e;Xcu3ymK=<^u-O;Osfist|WIiGyB9*{Exk~3LzPGP)!*f-*IIw?M ztV43=O$&s&sWkk2_C@LP$HymUP*AI?Poc}-alx&ts}r!JApKEZQ87j|_;UAQLuCjZ zs4*QwR(?K<9r)wn?v8;mt5*H#6P~b5PnOLAg6oG@Tl*H{oBfD{do?gm!NRs&T4sUt z*WBC{j#+nJcAqd~{Fq@~;?}?kL%WyBr=X`NDkLln%`sICvRy2#odC`7C95~_@gYE! zsvbd{vc|%lwU7ap&8{UTwxL1Rj`;zhtwsYaA$C_sObn6T;t2ibWPKzUs?x&D24j>8 z%RAo~T-~u3mO+nW1qdG4$Usx-X^|H?&%2&_^G&D4L%|#Dw9~@vKpzayS)_U?s zB-cT%?szfnRWP0GVsF}Qe!b*g8>sknd={3)(s~8bdchj(mZNX}EP@c@swyey8XMEi z&PG(;dnzK%E+ajTCZMa6Zb6fFd`COWW%Et(k2`(w>}GS=h@E}^?^3X4ciEX&J%iMR zd*zCbPP&Eu5qtdwNFf# zl=N?ec6?XQ%71)*c2?}Z#P@@Vhlg%sV*H&q@9eD2NcIoPJDX6P8$0K|Ha9O zv2mRjX>{}z30>o;v^WA0vDK?FnUWbXrdf!*|HD_LWMo{W$&3{Db~_@Z`|o6&c^|Bo z1!l?GAL9}cJ*coDWxDBISWu9AngkA{cbr^J8~h$__kG9(dX2ZmXxX!)09D zLKCtXEq{@y;4ofH3J_>{Yb%^cGGy1Q#`JkoHd8jzx}QE=g+IP%h}@?oYR^{Z|JL%%(KaD(io1HCsxXn&hjOP3ATByY`p@os&p1gF=olky(#UlQ?k} zmKXR1MP`jLj%H4|PkelRz@#@kFOL-y8=Kj|m?r;UxeTluSP4iAeMEfJTcv%n@F&O3 zc&C+xnRz>`SG<@8)s%}qxb|};J#r*j9Up4+LR(A$vgnB_>aC zF-dbsGgW$1szv#YJ{6z74MjTTlZGoO27koz83t7Kes z|2}nXJvH(UtRCxKBfP@(Td2j%v+KT2n4hG|L7Rf_Rh%bu3AysIEQZ$jT6vxKtLdCg zwlq(v;+~Sde|U96?Q{ltbT%pUniwZ*SwCqgk!-LPcj{_bGc?Ok{Gs$Y#V-SyXPb06 z9k*G0{6y;C5Fx0IXKva;LmUR!)hxayq@sy{JlI=NT>;Y0ZE z8_!!)c;p^G_-YtB7_VFVQ~+s^@gjkuS;=ORB_f7CcKI>$^2X|F3s4jh@KfKsu)~sM z(|i{Nhjdh3yjy5OjIABoZHSDM9(+J^uF2PD`q&y#qSM ze>$fnR#P{7J`kRsAwe(6*?$v|OiWBbldhK}buV#gt1F?1^Mrl=#gGy`9o_c~shwaw z&!|#b)sRG~;D5g-dXE=(cXq;tx~72xX#?s%2>dr#goNr<`N8>o=i3syp=*0?L5iF?mu(Ao*0v84 zYgw7GuHx+MH6Hv~+ar4}WU}L}`A+)f>(^R6Y2w5X86XtHA0(&b7#Q)Jdr!Kk%YA)( zJ}yfAy)ET=hA}y5dgtz46)i0iaEcS~J#avpUXsh1|E+Yy&p%bI0X87v(xG(tby7f-_mJ@)I@N#)U)d2&5e!F2HAV^8hk-6Pmc3{ z`TP54%)UQq(2--GZxSGcq6!9V)Rk0JS^&S{FT<+4hI1Ud-Gnm`M$X9dwRGw zXm?tZs7zCfOG>^<-JYnhX9vs%@hkYr0NIK%`7HnBKgrIm*2ziw)bQH!TTS>bXv14F z`ksM-3@0Zi(<>`auBAmy*ESz^OAh|~GO#keu)tY;W?7^jbo9NVkq>V-2Id4|F0AgW z#`$QS_giyEv>;$&KVxOY?U2mQz04{Gz{I8#ou@AQgWje5$Hb5GXtmq$GAh70Mup1k znc@3HqT6e!zYTNFdfjaN(P%_O&d7;n_DBGTkzA9)!+wDVLtUU-7s$Vt@d~vE>|1Yo zB{Zx|Ouoh!&Wthtzbf%RP$cB?!X?mP7HZ$IT_ zl3ut;ntELA`rfI-ahKhwG*{$cwX{{uSJC-~LZxMOu{^%Mm~oCjH|hFarlfnS-NT#$ z$o#5p7DsWyK-a=4m6Zm5sX6h9RN%(OS0kSzKKEQZXi8sTm{NCu841xhJ>f)3)2%ISL&_z7*GlYy4T4{%rmA2; z^5f;;;eiRjE2!DpPy%Y#8v=wUn-i@`W=^f041w^xvGZ@-YlYd<>9w^;_DnxAG&D3Z z_fIXfQc_YVG)YWM45L|*231biqm7`T;KG%3&!>ZBuP7GibnEh=IsUyX@#S0b64?W2 zP)g<4c!Z&c&DnBh8-My!mT#BT;cWs8xAhw#ahm5At!kRLxds%vVXQFR#vln}T= zYm3SmIQ%K^T#>eG+Ie(whSe(OJY?A!=K#sC)vf{-d@`f@*5b~S-(iac6ft$3&Qvlo zm7S5#7wXn8tP=o z`6}u?m~|(sZguAeMsd=9%{)`A?nMRznpi%*z9kl|*hifMd^tcuMTIRVC)blA zOkH1ph#3&pRt+BrWFX{Er}66N*4?JAso1tF)+G*O+@*>9VdyWK<$D_>cf^S$Qn$u^ z0Zr}sZ2r|KKU-j0T;L}18XNc2;B@peUOIGjB)`&Abg7dI*}0APnZ8G+9LtU>z8 zZY0|FT9L`##6Y*s>#6Xn%(cx;Y>cdmuaqVxCfob_%7%uLgxDAX7ss~74Q^P`(a{mH zu^r@^(yCpyH0fWzzPDbii^sUJeLB`Upi^?aN=kD1qE{!rZ(Pk((bnFtZnZtd@_9U~I>YhQ}nQyuV1`)J6aHtK{{rPuyzg1U*HG4w&b?;;E zYSvs6!+?A`@alANcL%PWSZBsl&m&U$q~f?;RhJDErr17hOfz}3koDH{hr*U!db|0_tmy7YPe zg)EF?{^_^WQ$EA!?O!#1_uiMcvM*saaAD>JBOULhv}v`;m$8-Cm*a zVkCS3qj{4|crMnfNEY=Ca*BKvquZ0|*~XHeh7-`Wp3U4GM&lsNu8U0JAu_2H)GL8_)40nePUKRObjqPxzW)e&wMwv zn{~YmB*rK5*tR8v;$J2bES#4AZ48v_gU&^hB`KXmnE-8cvaG+PO7%C(?xjrBz6{hL z3}rq$JG&a@8Mv1kG@R+#k%{y1(Wj)u{`7i~)(&SLx=#wQViIX;3oYVo<~SQ?FnCTO zrP3zXs@H#>)7Z!W3W8kO{j;;Pk1G~8v-w*Q*gmSu^6ASLLevO9^bMwGXYmCCPFBqJ zZnCkdkQHG|W)N}fH-tehM@LY19=?|;VSzA_-%PEeUGY60W6gy>VO|LI1;eIDLj zj1s1Prp`uAc?Osy_GiBUhg@#o2`&R~lHs!O6e~Z%%I;b>pZ3Yx->cM~bM5xo_^~@u z?fvslzNvhhSsA;={Mo?i@$pRVJ_G76lf5g|$?54Q6+Z~#qS3_2%99n{+P4)=zXCE& zor-N76Ml|Rv3GF zet!P3@Dn!U;5|N0&NmvcsW(jD+qVgJWJ>SgR^iaaxULYUn-pL^5TIMfN$~u5YeECw z;MaTeIT$b5-9to4`|VE4e3NY^rx^Y}11$2GL~(`UL~btrXo?U`m}aJ5z+Kh2&QL9b zD5BD+L3igvp++fZf>&Fl%PadcH>H-l3*W9M^(DoQYUYlk<#9b^!~a2AslXIntVR2I z6yH>GY}k!btrQQh3@61a)X!7Y-TJ6C?2?~7VHHgeA=5yum{V20r&OqD9{hg*nBp|k literal 0 HcmV?d00001 diff --git a/uploads/service-documents/564ae387-f2fe-4b19-bb53-f0f611f48162/Screenshot from 2026-01-21 08-23-18-1768989687353-521898017.png b/uploads/service-documents/564ae387-f2fe-4b19-bb53-f0f611f48162/Screenshot from 2026-01-21 08-23-18-1768989687353-521898017.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0fae7a1177461d6dd855cf21ae6b87897e9b47 GIT binary patch literal 7369 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 literal 0 HcmV?d00001