diff --git a/.gitignore b/.gitignore index a5a2467..055af0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -target/ -*.class *.log *.tmp .idea/ @@ -8,15 +6,3 @@ target/ .DS_Store Thumbs.db -# Runtime/config - use config-example/ for examples -printservice/ -logs/ -spool/ -preview/ -archive/ -printers.json -auth.json -templates/ - -# Windows service local install copy -service/*.exe diff --git a/.gitignore~ b/.gitignore~ new file mode 100644 index 0000000..a5a2467 --- /dev/null +++ b/.gitignore~ @@ -0,0 +1,22 @@ +target/ +*.class +*.log +*.tmp +.idea/ +.vscode/ +*.iml +.DS_Store +Thumbs.db + +# Runtime/config - use config-example/ for examples +printservice/ +logs/ +spool/ +preview/ +archive/ +printers.json +auth.json +templates/ + +# Windows service local install copy +service/*.exe diff --git a/README.md b/README.md index 80a9e58..bd54d94 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Printservice Standalone Java 25 v2.3 +# Printservice Standalone Java 25 v2.5 Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. @@ -387,7 +387,7 @@ ZPL direkt: ## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO -Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: +Ab v2.5 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: ```json { @@ -491,7 +491,7 @@ Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in - `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. -## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 +## HTML→PDF: robuste XHTML-Normalisierung ab v2.5 Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: @@ -540,7 +540,7 @@ Eine erfolgreiche Antwort enthält unter anderem: Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. -## v2.4: Lieferschein-Demos und HTML->PDF Fehlerbehebung +## v2.5: Lieferschein-Demos und HTML->PDF Fehlerbehebung ### HTML->PDF Fehler "Markup im Dokument vor dem Root-Element" Der HTML->PDF Pfad normalisiert HTML jetzt vor dem openhtmltopdf Renderer. Dadurch werden typische Ursachen abgefangen: UTF-8 BOM, HTML-Fragmente ohne Root-Element, nicht XML-konforme Tags wie `
`, `
` oder `` ohne schließenden Slash. @@ -584,3 +584,53 @@ Barcode-/QR-Platzhalter in DOCX müssen alleine in einem Absatz stehen: ``` Für Druck ohne LibreOffice verwendet das Beispiel `docxConverter=DOCX4J_FO`. Jede DOCX-Vorlage sollte vor produktiver Nutzung validiert werden. + +## v2.5: Windows-Assistent uebersichtlicher und Queue-Datenschutz + +Der Windows-/Drucker-Assistent trennt die Bereiche: + +- **A. Gefundene Windows-Spooler-/CUPS-Drucker** bleibt als breite, scrollbar lesbare Liste sichtbar. +- **B. RAW_TCP fuer ZPL/EPL** ist jetzt ein Button mit Modal-Dialog. +- **C. Windows-Kommandos** ist jetzt ein Button mit Modal-Dialog. + +Die Druckwarteschlange des Printservice ist unter `/queue/print-jobs.json` gespeichert. Sie kann aus Datenschutzgruenden deaktiviert werden. + +### Queue-Einstellungen + +```json +{ + "enabled": true, + "storeRequestsForReprint": true, + "autoCleanupEnabled": true, + "retentionDays": 30, + "maxStoredJobs": 5000 +} +``` + +### Queue deaktivieren + +```json +{ + "enabled": false, + "storeRequestsForReprint": false, + "autoCleanupEnabled": false, + "retentionDays": 0, + "maxStoredJobs": 0 +} +``` + +### REST: Queue komplett leeren + +```bash +curl -X DELETE http://localhost:8080/api/queue \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +### REST: Jobs aelter als X Tage loeschen + +```bash +curl -X POST "http://localhost:8080/api/queue/cleanup?olderThanDays=30" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d "{}" +``` diff --git a/config-example/auth.json b/config-example/auth.json new file mode 100644 index 0000000..88f6113 --- /dev/null +++ b/config-example/auth.json @@ -0,0 +1,32 @@ +{ + "enabled": false, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": false, + "headerName": "X-Printservice-Token", + "tokens": [ + { + "id": "example-disabled-token", + "name": "line01-print-token", + "userName": "line01", + "displayName": "Linie 01", + "sha256": "REPLACE_WITH_SHA256_FROM_java_-jar_printservice-standalone.jar_--hash-token=YOUR_TOKEN", + "token": null, + "scopes": [ "PRINT", "PREVIEW" ], + "enabled": false, + "createdAt": "2026-06-09T00:00:00Z" + }, + { + "id": "example-admin-token", + "name": "admin-token", + "userName": "admin", + "displayName": "Administrator", + "sha256": "REPLACE_WITH_SHA256_FROM_java_-jar_printservice-standalone.jar_--hash-token=ADMIN_TOKEN", + "token": null, + "scopes": [ "ALL" ], + "enabled": false, + "createdAt": "2026-06-09T00:00:00Z" + } + ] +} diff --git a/config-example/printers.json b/config-example/printers.json new file mode 100644 index 0000000..4eb34c9 --- /dev/null +++ b/config-example/printers.json @@ -0,0 +1,18 @@ +[ + { + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "enabled": true, + "description": "A4 Drucker ueber Windows Spooler" + }, + { + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "enabled": true, + "description": "Zebra Etikettendrucker direkt per TCP" + } +] \ No newline at end of file diff --git a/config-example/queue/queue-settings.json b/config-example/queue/queue-settings.json new file mode 100644 index 0000000..79c52c0 --- /dev/null +++ b/config-example/queue/queue-settings.json @@ -0,0 +1,7 @@ +{ + "enabled" : true, + "storeRequestsForReprint" : true, + "autoCleanupEnabled" : true, + "retentionDays" : 30, + "maxStoredJobs" : 5000 +} diff --git a/config-example/templates/lieferschein_docx/document.docx b/config-example/templates/lieferschein_docx/document.docx new file mode 100644 index 0000000..81f2b25 Binary files /dev/null and b/config-example/templates/lieferschein_docx/document.docx differ diff --git a/config-example/templates/lieferschein_docx/print-request.json b/config-example/templates/lieferschein_docx/print-request.json new file mode 100644 index 0000000..dc7ee28 --- /dev/null +++ b/config-example/templates/lieferschein_docx/print-request.json @@ -0,0 +1,23 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_docx/sample-data.json b/config-example/templates/lieferschein_docx/sample-data.json new file mode 100644 index 0000000..9a99b71 --- /dev/null +++ b/config-example/templates/lieferschein_docx/sample-data.json @@ -0,0 +1,14 @@ +{ + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_docx/template.json b/config-example/templates/lieferschein_docx/template.json new file mode 100644 index 0000000..fd773ea --- /dev/null +++ b/config-example/templates/lieferschein_docx/template.json @@ -0,0 +1,8 @@ +{ + "name": "lieferschein_docx", + "documentName": "Lieferschein DOCX Vorlage", + "templateType": "DOCX", + "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "sourceFileName": "lieferschein_docx_template.docx", + "documentFile": "document.docx" +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_docx/validate-request.json b/config-example/templates/lieferschein_docx/validate-request.json new file mode 100644 index 0000000..312141a --- /dev/null +++ b/config-example/templates/lieferschein_docx/validate-request.json @@ -0,0 +1,20 @@ +{ + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_html_table/document.html b/config-example/templates/lieferschein_html_table/document.html new file mode 100644 index 0000000..8ee8148 --- /dev/null +++ b/config-example/templates/lieferschein_html_table/document.html @@ -0,0 +1,58 @@ + + + + + Lieferschein HTML Tabelle + + + +
+
+

Lieferschein

+
Nr.: {{text:deliveryNumber}}
+
Datum: {{text:deliveryDate}}
+
+ QR +
+ +
Kunde: {{text:customer.name}}
+ + + + + + + + + + + + + + {{#each:items}} + + + + + + + + + {{/each}} + +
Pos.ArtikelBezeichnungMengeSeriennummerBarcode
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}{{text:serialNumber}}Barcode
+ + diff --git a/config-example/templates/lieferschein_html_table/print-request.json b/config-example/templates/lieferschein_html_table/print-request.json new file mode 100644 index 0000000..9f2a15a --- /dev/null +++ b/config-example/templates/lieferschein_html_table/print-request.json @@ -0,0 +1,37 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "copies": 1, + "pdfDpi": 300, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtung", + "quantity": "20", + "serialNumber": "SNR000003" + } + ] + } +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_html_table/sample-data.json b/config-example/templates/lieferschein_html_table/sample-data.json new file mode 100644 index 0000000..745788d --- /dev/null +++ b/config-example/templates/lieferschein_html_table/sample-data.json @@ -0,0 +1,30 @@ +{ + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtung", + "quantity": "20", + "serialNumber": "SNR000003" + } + ] +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_html_table/template.json b/config-example/templates/lieferschein_html_table/template.json new file mode 100644 index 0000000..0121430 --- /dev/null +++ b/config-example/templates/lieferschein_html_table/template.json @@ -0,0 +1,21 @@ +{ + "name": "lieferschein_html_table", + "documentName": "Lieferschein HTML Tabelle", + "sourceFileName": "lieferschein_html_table.html.tpl", + "description": "HTML-Lieferschein mit dynamischer Tabelle, Barcode je Zeile und QR-Code im Kopf", + "contentType": "text/html", + "templateType": "HTML", + "encoding": "UTF-8", + "storageMode": "FOLDER", + "storageVersion": 2, + "templateDirectory": "templates/lieferschein_html_table", + "documentFile": "document.html", + "metadataFile": "template.json", + "sampleDataFile": "sample-data.json", + "printRequestFile": "print-request.json", + "fieldsFile": "fields.json", + "hasDocumentFile": true, + "hasFieldsFile": false, + "hasSampleDataFile": true, + "hasPrintRequestFile": true +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_simple/document.pdf b/config-example/templates/lieferschein_pdf_simple/document.pdf new file mode 100644 index 0000000..2e05dca --- /dev/null +++ b/config-example/templates/lieferschein_pdf_simple/document.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194637+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194637+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Lieferschein PDF_TEMPLATE Demo) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 997 +>> +stream +Gau1-gN(as&;KZF'RL,p?$&88;Gpo"/Vi='/fBjhJn]$;fkIA5l+80%[ZcH3daBD/.$<\"I9QSQM$&ZShL87@JGfUW^#d$5,W"?c'dQ:gOGo:EjosLVR#bF-!5TS1kQS5XGHj"q-DV5]X[2!$LEqXf7iBQ"<0JDg(!e'!$-A*#f)YShI"q(8E7-`,?@d5[[Up9Ae+i=>jP]g^dHfin`fugo#DZk.VHK&4<6T#1V6D\u?1U(%2r\d2.Q3s-8)lGeTTqj;f0'N:dSJ^W\?YdHP?.gF[Gm7hmsPId1BGBe[6c=1]r<$MoeO9f0FS`ecoWOX_;V\edX;2YRhVreq0EsXWpZ'aa-!]?_&Gu@:0Cl!b?5k6q0blS;/n*JAY#C?U0-RRN>9#V%l]0^<6XfBA/q]c/&<#/)&7W?B[@(+cj7BYa$)r.l*As3<]&t('+KT*FUZkVk=fZq;IP4mlQ4G++1Df[pC%;UGfHKAGF7fg\CIa*=AR#G6`X=!-]chLf+MCq9kf`\;n2b0beI)d^>;+dXYbdCKj!rrN&R-#6m8(J6>"1_3ZUTE_&NnYs%LXj7BLu+YniU715>7taqJAi16c*K0O>s0b]h!hAQ>)E$s9>$@us^RWgt>L',QbpD<,fmmco;"m`hf75TPd):@5,g/F'Cao0jNlA*p/_5Wc0;V*NAgNgZ/"c"%?5QA57@gMb?K_sOqPqeMT8F]Mj54M/a[OPDosc&oMolnX?6D2B_Xmr\*8r!rC)7XI^.bc%NJhIf8O@34D[lb!XaFA<*K.Fdu&pendstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000875 00000 n +0000000934 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +2021 +%%EOF diff --git a/config-example/templates/lieferschein_pdf_simple/fields.json b/config-example/templates/lieferschein_pdf_simple/fields.json new file mode 100644 index 0000000..99733c0 --- /dev/null +++ b/config-example/templates/lieferschein_pdf_simple/fields.json @@ -0,0 +1,128 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 55, + "y": 30, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 145, + "y": 30, + "width": 47, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 45, + "y": 50, + "width": 147, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerAddress", + "type": "TEXT", + "value": "{{customer.address}}", + "page": 1, + "x": 45, + "y": 63, + "width": 147, + "height": 8, + "fontSize": 9 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 55, + "y": 87, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 55, + "y": 101, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 145, + "y": 101, + "width": 47, + "height": 8, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 55, + "y": 115, + "width": 70, + "height": 8, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 18, + "y": 135, + "width": 100, + "height": 25 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 145, + "y": 125, + "width": 35, + "height": 35 + }, + { + "name": "note", + "type": "TEXT", + "value": "{{note}}", + "page": 1, + "x": 18, + "y": 205, + "width": 174, + "height": 18, + "fontSize": 9, + "multiline": true + } + ] +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_simple/print-request.json b/config-example/templates/lieferschein_pdf_simple/print-request.json new file mode 100644 index 0000000..f807b0e --- /dev/null +++ b/config-example/templates/lieferschein_pdf_simple/print-request.json @@ -0,0 +1,21 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_simple", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + } +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_simple/sample-data.json b/config-example/templates/lieferschein_pdf_simple/sample-data.json new file mode 100644 index 0000000..8c66baa --- /dev/null +++ b/config-example/templates/lieferschein_pdf_simple/sample-data.json @@ -0,0 +1,13 @@ +{ + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_simple/template.json b/config-example/templates/lieferschein_pdf_simple/template.json new file mode 100644 index 0000000..ccf5764 --- /dev/null +++ b/config-example/templates/lieferschein_pdf_simple/template.json @@ -0,0 +1,10 @@ +{ + "name": "lieferschein_pdf_simple", + "documentName": "Lieferschein PDF einfach", + "templateType": "PDF_TEMPLATE", + "contentType": "application/pdf", + "sourceFileName": "lieferschein_pdf_simple_template.pdf", + "documentFile": "document.pdf", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT" +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_table/document.pdf b/config-example/templates/lieferschein_pdf_table/document.pdf new file mode 100644 index 0000000..45bb8b2 --- /dev/null +++ b/config-example/templates/lieferschein_pdf_table/document.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608163430+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608163430+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (PDF Tabellenvorlage Lieferschein) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 672 +>> +stream +Gat%`9lJ`N&;KZL'm"2lAF#fb1_PR3JK@.Y1pM?m&HY(F/$D7Y1sNf(fFT_c.'5%G@C5L8ccj[:6H"q$hU;IDPJH@q"Gr5a5\cu9)*fjcB]9Z6@F?s("&X&cJI+nHhB^F_WDAlCI(r8^;Gc)LaqqM)ul$^5e>UMZ?=Tuq?c(K:2V`\g!(G-79$\Q_k!2HqedgG4+pmT`YMM%*^@@b;::;nO_.Qb[Br@PsddG/SrPht/2@j_tbD\T\@C(iZ.;_uP'EmgCdg0mU!p5@([DjrGSo'&!K6+[4?:,hKRaVftF*9]Q9&c)Do:>n_m4?@=)]NlVnn?$C<$^>>XMu1[G7Yuh>;c_&-#!Wu$.*nmNgSJ_tkeQYioH@JV9@l&eF-]jbY&q8S_im&e<*b>-KMuTWjuWa?\-p!,[_qoN=m"a)FWbTsr+MA@7b)aHe#9"Fb./SsLYrMO[&s[ZU9AaW9;oJ!J7g?1?<1%Bh/ZYq=j_ocp&;1i]K.i9r4UH^Y9To7b4lP$;S^6n&iD;q~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000877 00000 n +0000000936 00000 n +trailer +<< +/ID +[<721e7688792119f7e9da1c836b6aa329><721e7688792119f7e9da1c836b6aa329>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1698 +%%EOF diff --git a/config-example/templates/lieferschein_pdf_table/fields.json b/config-example/templates/lieferschein_pdf_table/fields.json new file mode 100644 index 0000000..cc3b5f7 --- /dev/null +++ b/config-example/templates/lieferschein_pdf_table/fields.json @@ -0,0 +1,111 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_table/print-request.json b/config-example/templates/lieferschein_pdf_table/print-request.json new file mode 100644 index 0000000..712c55c --- /dev/null +++ b/config-example/templates/lieferschein_pdf_table/print-request.json @@ -0,0 +1,52 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_table", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtungssatz EPDM", + "quantity": "20", + "serialNumber": "SNR000003" + }, + { + "pos": "4", + "partNumber": "D444222", + "description": "Sensorleitung vorkonfektioniert", + "quantity": "7", + "serialNumber": "SNR000004" + }, + { + "pos": "5", + "partNumber": "E777888", + "description": "Befestigungsclip", + "quantity": "30", + "serialNumber": "SNR000005" + } + ] + } +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_table/sample-data.json b/config-example/templates/lieferschein_pdf_table/sample-data.json new file mode 100644 index 0000000..ba4122f --- /dev/null +++ b/config-example/templates/lieferschein_pdf_table/sample-data.json @@ -0,0 +1,44 @@ +{ + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtungssatz EPDM", + "quantity": "20", + "serialNumber": "SNR000003" + }, + { + "pos": "4", + "partNumber": "D444222", + "description": "Sensorleitung vorkonfektioniert", + "quantity": "7", + "serialNumber": "SNR000004" + }, + { + "pos": "5", + "partNumber": "E777888", + "description": "Befestigungsclip", + "quantity": "30", + "serialNumber": "SNR000005" + } + ] +} \ No newline at end of file diff --git a/config-example/templates/lieferschein_pdf_table/template.json b/config-example/templates/lieferschein_pdf_table/template.json new file mode 100644 index 0000000..01ea995 --- /dev/null +++ b/config-example/templates/lieferschein_pdf_table/template.json @@ -0,0 +1,23 @@ +{ + "name": "lieferschein_pdf_table", + "documentName": "Lieferschein PDF Tabelle", + "sourceFileName": "lieferschein_pdf_table_template.pdf", + "description": "PDF_TEMPLATE Beispiel mit dynamischer Tabelle, Barcode-Spalte und QR-Code", + "contentType": "application/pdf", + "templateType": "PDF_TEMPLATE", + "encoding": "UTF-8", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "storageMode": "FOLDER", + "storageVersion": 2, + "templateDirectory": "templates/lieferschein_pdf_table", + "documentFile": "document.pdf", + "metadataFile": "template.json", + "fieldsFile": "fields.json", + "sampleDataFile": "sample-data.json", + "printRequestFile": "print-request.json", + "hasDocumentFile": true, + "hasFieldsFile": true, + "hasSampleDataFile": true, + "hasPrintRequestFile": true +} \ No newline at end of file diff --git a/config-example/templates/serial_label_zpl/document.zpl b/config-example/templates/serial_label_zpl/document.zpl new file mode 100644 index 0000000..dfa28ea --- /dev/null +++ b/config-example/templates/serial_label_zpl/document.zpl @@ -0,0 +1,7 @@ +^XA +^CF0,35 +^FO40,40^FDSerial: {{serialNumber}}^FS +^FO40,90^FDPart: {{partNumber}}^FS +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +^XZ diff --git a/config-example/templates/serial_label_zpl/print-request.json b/config-example/templates/serial_label_zpl/print-request.json new file mode 100644 index 0000000..eb9b582 --- /dev/null +++ b/config-example/templates/serial_label_zpl/print-request.json @@ -0,0 +1,12 @@ +{ + "printerAlias": "LABEL_LINE_01", + "templateName": "serial_label_zpl", + "renderMode": "RAW", + "copies": 1, + "encoding": "UTF-8", + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} \ No newline at end of file diff --git a/config-example/templates/serial_label_zpl/sample-data.json b/config-example/templates/serial_label_zpl/sample-data.json new file mode 100644 index 0000000..120b7e6 --- /dev/null +++ b/config-example/templates/serial_label_zpl/sample-data.json @@ -0,0 +1,5 @@ +{ + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" +} \ No newline at end of file diff --git a/config-example/templates/serial_label_zpl/template.json b/config-example/templates/serial_label_zpl/template.json new file mode 100644 index 0000000..99362d6 --- /dev/null +++ b/config-example/templates/serial_label_zpl/template.json @@ -0,0 +1,21 @@ +{ + "name": "serial_label_zpl", + "documentName": "Serienetikett ZPL", + "sourceFileName": "serial_label_zpl_barcode_qr.zpl.tpl", + "description": "ZPL-Etikett mit Barcode und QR-Code fuer RAW_TCP oder Windows-Spooler RAW", + "contentType": "text/plain", + "templateType": "ZPL", + "encoding": "UTF-8", + "storageMode": "FOLDER", + "storageVersion": 2, + "templateDirectory": "templates/serial_label_zpl", + "documentFile": "document.zpl", + "metadataFile": "template.json", + "sampleDataFile": "sample-data.json", + "printRequestFile": "print-request.json", + "fieldsFile": "fields.json", + "hasDocumentFile": true, + "hasFieldsFile": false, + "hasSampleDataFile": true, + "hasPrintRequestFile": true +} \ No newline at end of file diff --git a/config-example/templates/serienbegleitschein_docx/document.docx b/config-example/templates/serienbegleitschein_docx/document.docx new file mode 100644 index 0000000..cb30cd4 Binary files /dev/null and b/config-example/templates/serienbegleitschein_docx/document.docx differ diff --git a/config-example/templates/serienbegleitschein_docx/print-request.json b/config-example/templates/serienbegleitschein_docx/print-request.json new file mode 100644 index 0000000..24efdad --- /dev/null +++ b/config-example/templates/serienbegleitschein_docx/print-request.json @@ -0,0 +1,16 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/config-example/templates/serienbegleitschein_docx/sample-data.json b/config-example/templates/serienbegleitschein_docx/sample-data.json new file mode 100644 index 0000000..ebaabd4 --- /dev/null +++ b/config-example/templates/serienbegleitschein_docx/sample-data.json @@ -0,0 +1,8 @@ +{ + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } +} diff --git a/config-example/templates/serienbegleitschein_docx/template.json b/config-example/templates/serienbegleitschein_docx/template.json new file mode 100644 index 0000000..5155bec --- /dev/null +++ b/config-example/templates/serienbegleitschein_docx/template.json @@ -0,0 +1,13 @@ +{ + "name": "serienbegleitschein_docx", + "documentName": "Serienbegleitschein DOCX", + "description": "DOCX-Beispielvorlage fuer DOCX-Download sowie DOCX4J_FO-Validierung", + "templateType": "DOCX", + "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "storageMode": "FOLDER", + "storageVersion": 2, + "documentFile": "document.docx", + "sampleDataFile": "sample-data.json", + "printRequestFile": "print-request.json", + "encoding": "UTF-8" +} diff --git a/config-example/templates/serienbegleitschein_docx/validate-request.json b/config-example/templates/serienbegleitschein_docx/validate-request.json new file mode 100644 index 0000000..a7bbf39 --- /dev/null +++ b/config-example/templates/serienbegleitschein_docx/validate-request.json @@ -0,0 +1,15 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/docs/PRINTSERVICE_API_UND_VORLAGEN_DOKUMENTATION_v2.5.pdf b/docs/PRINTSERVICE_API_UND_VORLAGEN_DOKUMENTATION_v2.5.pdf new file mode 100644 index 0000000..d5128e1 --- /dev/null +++ b/docs/PRINTSERVICE_API_UND_VORLAGEN_DOKUMENTATION_v2.5.pdf @@ -0,0 +1,874 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2+0 35 0 R /F3+0 39 0 R /F4+0 43 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 900 /Length 75972 /Subtype /Image + /Type /XObject /Width 1400 +>> +stream +Gb",k"e-2r]_9T"#BpRDmd@6o-,?f;ZHMP-5_Vg/1Xk+-UV#=UF^KL?p9[e#f@)VM9Qs:`%glo;6psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26q"uc4F-d>g'b@Xg)KSQA-f0A#[4ONB5&,BpDb%.$9=Q2LkpkCpe!PZ_3-WnUnjg)`B?>-iNIr.tC89fIXmlSrsABMi)F5$QKX&R&A&MKqqaYP%`+sJ3T#,8:`K>E++7gkTbmUH,\+(VeHeB;#L)&5WR%YJXUO%d=gV+&W,=SpZ)FlrU\HcX8a++nC^mW!4WXmZ`>2E'Ouc<,_M9]kJS]6):^Ie':E[sj$'=+BDN@^ul5Y?eWRW,YaRh7c7J_2pb]+sJ3T,/-tOatkI#GNiUcp\;id&MJ+C)RO*'hp,6GH8.eE_4s-UGq2AsBer4B.UsJSndL>1LkpkCJS:Zg-sHcuPn0C3sYKL#1rOM:$YCH+HFm7IBa):kJ%&p5*76[k_XJ&n,0ShPNrWQ)8pfGOZI9]1`*-^2csA/g93B`hd&\egDPk3Y%RudATg7E]tV5U[uEmu/K`Q:t]Y\Kp,Z<8!>,nU&J`PQ`fm!LWZjeX7%".q>D5=c<[s0Ic_^j[^6gI6.<::@itK7=[nPBHs"Uk\o_^1Hi>d]T01M"4RYiYtF_JpiXXn/R*'Vo@=q/ZK6FIh!K"nd_;-En:JV04D0->1pPr"dFKbt4G/P)VL(-=\,>'l43>Y&GOEW4[TT;2HQC&EJ;B#;Lkt7ffCr!A#,Ai7CS!i3HE!mCp@GIo\*eaeCgHsum"KB5\ujk\3,O]-2&hhS;r]dXaXK.0[,r7]m?`f%IR==GlSi\H1N;F,5;^YgTWI>S_9FbA18YPW$#)ngSa9n'1dCR?SgCa.RP!6996Z(]8P+&SC_HML#JDi7+sJ3T,'qf&F!-BcGn/o.iT'Q^`aD;k0Z1q).TF!*[X=o^e2cZPBqDZak8E^.5%r2dl(a*R^iEH*QlFO+7&I"@G\N6u=>%R"XNn$NA"fD48acR3)tW#,L!qo73rb#\JXl^Fr@-Dcmb=dP:KD<4R.OhHslODXY41.LFW>jn#=I0Ya*o0Gu@b41[.q@+>@@A._];@]>F0P/8:KhGH=)lQTnX1UkO^6Q%'PkN;hIbh@1OEE(-8lZ8'$-=*KP*>QC%j+"3osYF:Pgn@4;1BG[A^*$@.&"o5bZCmoUWt^fW;dZh%a]`kdN0L]OXri-T*T+p-Ps:gj@t`P=k-sn>0RmN&_9ZDDAs*ZLNq@Kk6pJArDUVIr+c*4XgCq#I7=*g=F6Fc\6>iKP^(8&D(gTC@eUC-+#\$rJ-?:0%IA]+R;o=Vp5e3?AG70+/QUnf9>Qd'/cS7dr"WV%0Jj&pab,1CHj)71@+_M8(nj)mujKm9ItTJU]m[8aCTR^U59he@\W-DmC,O9Zjde1XM/U-YHBQFdbe#/&Rb;5[O)62+_#36CMO`b$aV[ms^OqU5\1mDqjq15$fn0R[T\SBZ7%oQ`o/mZ9rhcCI"ukq%%esUnjdn286BqAq]gm"8atQFl.lLUf,^+sJ3Tii?mMb;6M=s3eUAjf3anHtSGBWb[&d5O6Kg"cTu6qa'(:%bKi*cX=t5]nh*oJKrIlCchsNH>eD5Y4p+/.Ej_82=p[nLGE&BhE@PbgMhV_/mc-KX%qAml"aQen2u?n*6:l<#$;[HZ[T7R?(GVI=$iBC#3@k,%ei!uN<'V'&J5W&Wu3P9nGP!lXDa*oA")q9[+MWf^R`"2bLigi]jFB3Wh$I]fsbu;/R50m+&ccSQi4G:k?6?]$X/#Mn&Vbtom^g1'4m;2"j<47>j(]s)tk:/EoWH+MjCJg;$0GVdibb0:OofZF.OQjN8M$JY\8gLX:O`\K@R&Gk7@-LP5=P3pie;1mWBor"!Sp5+sNa_1L-LpDpaH6:EepB#3=h/-SJGWoQY?tBc\8q8R%,6D`a:s3g)8sq_V`NV'c82s\Tm\)D.m:P.Pa#.VIac(7-g6Nj&J5Te&^dWs0$bY8R5*%R&BXa@p#`Bk/(F@:\kX-Xhi#&6f+?004G,W^cXk*'-V^6!U2I_]nD!?Fn+\B.2:(2u^MJk>+)AV@iUkgp--C^P/=>iKHRiaV/_bGocB+Qd@bg)WPWZif3Jo@k[b>eD:S/sPS'uWeG9orWBJsSTl/BNM?7SOUF8)8gA-c_LKA.4S&J5Te&\XVFo*fPJ0ANg:^B97O`l1*JIRU:BX`*APp=\%^allM)9eu(KHS6]p3B98eiS*soS$qaLO^khI?LCUUM=%qI?+XO'bk<;G4t.pP7X8Xl?.c_uc\SiiV.P[erVats=J#esnF^aWFP$FsSeA.doN8Y9j-?[s+$Y#pUZ9O!Y/r*%6e?d4MGsk#^MK-lrSkFYE]@+'gN;`Q\X<9!M2@'Ed$=cRpADlUbL\RchEcncSdVEBaM^#Y'^jCji/qLsV2tui:Tn*:Z!d*Z$8oP\4gJ*l;">%;?[qCGF8(,4P,c.Tj,L^S+l@n,E40>q(W3q<"foV-I`dil$LkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCM!3,948,#>nNB6psF27!.CneXO9icm%\SrSkFrk:]uOkMYkV.lYt\f2,883,SYW'BbUlp)W\(S8,$?]+9pj0I'Z8ElN3tXC"[T>OBV%o9\n%Ir+MLS\On9PdfF>k@//BR3V%[d=7*E^fPAoo"o@-,)n$^ceudibf9me2G/_2qRG]@;W3Q&)R%u(F7^P1!aI*u#"1jI6q#6=>"?^CQ`ZMRn,C3Pk:]tDVTS'WV.GFR1'Z5apDblmf76_)kHo6ZqJCB@2cHm^cSLA/g@pho^?9TTdBYX+Gh/o-XJVJ"B\U)dpaL8fG3l'/NpnU8r5G^bD;D72jXe"3d#!ga4<'B#Ae;nR:DI10iYLkKs&W]:67sWgB"@SK*G#CU`Z_Has+&EO)Ud1Df=L11]Sr1]5h,]+d_X:$+*.])&eeMg"PR-B#sfoh([^mCmtmAski'r,bq!EcC\t)R]@r,p<(?;fp)T9k4A8'H*hs_g3Iq&B5>a]K$5mCBIr7&AeWG5?%%po_Xc0H7%NVBi'?d>%J/0Ft<*h(P*rSQ=I?A0@):9V([CI:NH4&q4;j9?WA87]PIOEFV*a8\Pap1VV$4HZMM:'?St/!OrSIIU^9u_WZq8H?Og;8ESRBbWeX=d"nnBt-scXifmVoO$!FK4a'K^nlrFE.jbBma,Y%(MD_>mO_3-\(W[2Up^O4R^B7$j(@UJe)Z=<3DRs+(;g6Bs"Fa6+u7X9prrB4&7LkpkCR";W)R!rc+ERjo&1Ak2UC,Ii0O8>&Q/O/<3H(!1=FdlW-#3k-rdeSN4DSl<3E.Ok8=I4T.p,&RHeqd[bVb'fO2$/^[_f`l?k5eoB[Qaft;a*r;/e:;Hn>dOFIc_5?jdke_9[78kmI4<;mWop%17;e:KGL;g2>SI=@$e%)fGtj;CQhW23hPWRkhJW_If7D*%>-3IY.4b@UKa@_W`$+)@Ia:0n"4/H)LY'gP9q=`te?$[#ud'UKF]:64qk,S\KgOo/1gU+6SIq^oYrj'(aY*=6W2g97K-1kAHqOlK,kG8@\4]7)lLkpkSJ^bpA+s2:Y"5%YE^3\uQr=<4+&ejYtDY%*@Y$lVTkW3hoK,Ke:\]X-To"_MoY3;0#5.0[j#8DZG%6[miM+Y/m6Fc5rVFWNo)>4V-:Xa@?;rs!bt[_88VH";&@4bFfrfj#BPFca+AbAKI`pJhF$b8O_ZHbH#e`jVH8:7AFQ)M!,>L6H(Z[1$c_2SsLb]mi]Cf7*PM)RI/&5(gu])$Sl!KJn)[LZMA@qKo"L&J5Te0a"CF9P(5O/d(Se+4lUZ7e=(EAULV8$'T!QS2P_Vrr1;W:8J@4L5qifA)=tE2^i_]ppg@.nV,09d(_rA^SZ3]:@Z$Q-+<8&<;W/>=ac8$Mj:>'Cs3S2]"XZGGeqhYVpALTIA3K2T&H02R`k3`XdhiQPc:u)WLlK_4O5.q?*nYZhhs'aOk@Kg+?TV%=.Z?K.h`.Hgl^"3Q9SmET+425;m8Y7WuMgi,r2g/bYfdgW6S]1Ltq5UE0Z$T&-toYPM*,-cOAGaYS0YKQ$!$ZK=T#*G<=_u//_]sC;m^#BO%PJ(1ooeiOZ"NXX=eWl*0s)HkjOX#6psF2`!iFMO_R*&Y\/C`dtG@,*SJ)R?f*#:AL++-$/b^0;FV,1[Hju^nhm=CL60D$!DQaA;/^m?Ygr;%>P9%!/n5uIc[f'@q5fL9/]+Vpjf[On#D%,5'kSO*-O4_djYO+$P-Ss5&EA)14%%lR)cS3ck9ufd$HlH+Lu?qXT%J?5m=P9!r5\XGSiL_@1jjO'heGUc#1G-DUS9Mc]r4ZBOsLLXlNnXnJU8/EIa.H-WWK;tO?4H&G^f&cMDdLTD#_<"%h=<_:,"LB`+2dKSn5,I@^#IocA0AgmkJM)[_8uTZ'/e#M)H[(lJoSb-fr_`qK8SF&J5Te0gd@An]IKT4*^D)^9/D01HBU/U7[p^Mg-s1>rbf=LkpkCRDZic-Z7YH=+>(EQjITU[!ed>p"n#!nqT]:pDl;W[qNa:(C@dtO[;H(6psG]kZ@_qaIWLSQE8kACa]^Gm46KzJFGpt!<<*"zJd$E(z!!!!)(??>5z!!"-DOCnOnz!.\HCScJfkz!.kB""onW'z#SuJ=z!!!!A=HI1"iOb_OA9g>-p?]/*QE@R'8#>U"5FoVLB!!&E%ndN6gNICB]iJDr:ANdkF6bR(m_/M"o0d5_iM0lDe5h$6gF75K#r<$[[8oB^T/UiH\9Z9oQL(Jpl[Rd4IeDFf?u7VcN)_*&8C'DNB#'LjqQ8%+qM)+C<\hUu!rr<$!6D7'BCO'/X4Ln/Wl?JNq@:[Er]abe[qag>3h%jo=g`E?V,+geR6SbkZr-EQf<4#8R9<6HG2ebZOpN!o^RM93`>Y?Z)EoM9iBt4@C,iZ#7ahAani,H8LGi2]q;3YHE0]bIX:kYI0Y48g+%$'O8nt1gi$`H=1hcq.F7*+=)E,1bP%LWCXmk3K=nLH\jIHI'u&_XC&X'U1tKIQp:.5CAK%h#B$26]Mu_%N#5d'A;/Xlq63,@nq0Gk8P2b'=1#&4:n!0EKDQ,uqR(V'O,B3$"YNg6PFh^Whmn*[^01SVJMQc=mi(9^W;(.HkE:HJqqh&@mT[0h8kDUZfre&@+ZVPcp/es#J+)LHcdT,%D20]J,6srS]?Wjf<0=b<4%B)S+Si8;_`V0)!Z7=1&tRcIZrC>n(OhW?GBCX\]-Vb5Xqq4O.'429GK=gegm.PHbSeia^A8d/mIGD!0tcc;VM[c\756s$30IrS=X<[1N8_b4gcUSIW!pr0e(4Vmf3=f!!",Qa>8(;kf6]QOJH:+$M*Z@"ogcA:^/Is2X>>Ec"nKD>7]`QQEOI>j&n7E:>PbQBD-I"[k,7%e(/>\MlGBUp)C*1>=W,Q+'e:r$I`@NHep^?0[Clkrq],BB>+/VlA5t=Zn`D(Y\9FW=JtS8n(bU#iNGo)CO`+VA:6]2Q)iM!G@0W*L7bcXf):c`p-l:dW.\tU9p@B-Re"5^k)Oj$kIO3f^%:39aj[BD%g6pcX:P'hd&#@MHhU:*3`E[r2*K?UB3;N_KpjE"k:&4La?"7p]VSP2Gm]mpO,s$8-NUZk67".^In,Kfq!cZU;9C>!W)9JLTd.ToNeMnQ@F"d>qVAt4`]0r7k:KqBNh3RtbqBSI3qE(9POfSCNh8.&oX^sO,X[KuSaA)\z!.Y%mceuq(UW<$MV-ED>1.;C2s*aG9kmtNceT4oL1VNVqdF55TkNX^bS_l6[XE@#j>M6$ae.h3s9T>naU!#5C?FKEs+lV1deG%/;LG?q:;U&7Ri[8JuN*,a?11cgPo4AIi?/JuIX02)#&&pa]Slh&sJ>&`KM@;1]On#m>:]5-Fg_Rds=\EdC]sF8'"EH%n)>C9!,MIqtr0hZ!D4SpB;SjhYCs2MAP,ctkNFo:Sl31*b;tVf?l9)u%7urUoGcHPaScm[ICOYfUSg(dFVGbYC9j18]3]#UT6J1H=B$^?Q^H5uE==:NDY_?;^ldt99SQ(NUs54L_3s>Ta!!!!bJNSR9of3"-Ct)gJbMZ#(=S-Y7XMYqAIImaT+4\i#3\p^63u\W:uMP[nXn\C5/e@Y3Stg^J#Fn<3N'o(G8_0F8&J%5,79l;Po?C4G3=;),fF9?T\EV5;sf87IkiXYN'aY-H9,E+D:Zd7\7G"?si1+pE[NiGkCdQGB4Mkgu=gV5!!ZHLs:LTcSK\1eR-)'CunhJ[I(2P>H=epha(#;7JT/dA=pJQZ-=T#59V19:CK[`iQU!HHN!^N*7@X>4*'u'R_e.GJc*Leq8EB<(CsV$&+D*q@!t:OZdp/ip$d:n5q.u#G9%_Xlh(\;6]ga/%/TK(c3^]Y$F-iHB$?YrQ!(6?fDk:TG^]((HO"5]pSY9#:Iia>@\5Xc&mDn<=kr]BjFe1mt?E:6l&_XjAIh7P!lWr\oX)-\(Bq=K]t!5b.m?/rs5(qoVGsbtc&J4%mbGM-[Sm]"Ri]$[3c[niCtbmVD!Zel7uusX$OC%0@HO'``e]*7ZrtrtoKsSIq#0WoHP\>@roE[#meW9`P6&D$h,jB@B<_B"K2VDEk7`GF,[^"$5@2fNc-m>QoGnVZF8t=c1F:5rn="!o5%W`O?X'&8E:N2AVq5kBgqE0lJ>&a\<2s[2SO]/9\nHZPrS42QY5u9/m(7H>7Ufidc!.ZlDpVJ.:qGX62FkS>cg^`"PPk^sbC8^?'l/2gOH6r'I];W*''mE2.]IWMQ`HGGno1ISkFT]g2g`8J1AoPCH6$Yklo3R!.X.T7p$2QlN*?H'0H,#@C>U=Z^GhjJ_4urqobOmJTD(XAq$jY&V[]`Ar]sj.p=etaRf@X;))LQi&!Xa4$k7*:Cu0;Z]M_X*^4,V=#jo)c29o.1N-]>GoA=cME.'s,VtrRY:BG?`jf6l)]#F]^R:GK=eM]q6RV2-T025Y6HMfbYqR#7pKb#7g6!p0lrP/*t=RRsFzJD`bc_+L90os;=+dPL=M6dHX]obsLD01V(q1kmeAL94SJjr%W;mf1kH;iZor9A,2hX/6s+([=,8d'?qi?#8g;03[&>Hgf:?>KS'lasK2Jo]%DA](GjbdZnou5L'3jK:ou#=.VR!+h0tHH.Vl^8k_nu4CV!8''5qiq2:R]1jk6Ud?d5-leKD1gqgluS$qTYW+8>25GB_(l'L9:*BDF:ObkuMoX=uri?qEnrRLYWW9m2SV=?BUdVA7M6hZ;Na>:o9?Rd=FU!hAl3d'nb-Kj4ZKElBXnJ]5'6Or3laAEQ\b]aN;H[=:S9F;QB>9K-zi"#;d!9%A,Y.]/N4)=9$8/DL2z+=*%]!!iafR^X.uHGYM;B-'9dEp)l(ALlBrRjN.j./EA[UIZ14z!$EPKB)i2@qA'g`SG>hA*sMlKzaF'(^!!ib[Dql5z!!"-DOCnOnz!.\HCScJfkz!.kB""onW'z#SuJ=z!!!!A=HI.qz!!%OW6(S)Wz!!%TSGm46Kz!!jA$)#sX:z+BX_5z!!"-DOCnOnz!.\HCScJfkz!.kB""onW'z#SuJ=z!!!!A=HI.qz!!%OW6(S)Wz!!%TSGm46Kz!!jA$)#sX:z+BX_5z!!"-DOCnOnz!.\HCScJfkz!.kB""onW'z#SuJ=z!!!!A=HI.qz!!%OW6(S)Wz!!%TSH%qEdn&/eUW0O#@1aFI\%1*A06\5BectfC&cO^HMlPq$>#\QLN-m1lB:]M=D'EA=?"b;0UL.\$\'_NHF9`qmMe;]ceJ.)ZK!FS/h!#Q7]!!_"D9:d<:(!?ma1+4;\]`\LL>R1Z:"+gTiJ=llrd&iWs6P-:TbZb2U3l,[Q"9i<;#RUP6Jc``=>^uAblNKX?o;PJ!\t2f"b6V>!FS/h!#S7:Nd+h'+b4Mu7gWQg:]M=D'EA=?"b6W!#1rM`L91GD"F&+[TR]]E5lk@Y:]M=D'EA?*/Cd"W!?aYk-ij_^$310[!l0>Z!&,PAi3(MFYSD\E5Xu,g5YqFt&/5*K"9j;VGm8JX(5Apk6j,PC!!@fS^jr'X0H_bD%*167X0aQs"X##9;$%RG'EA=?"b6V>!FS0a_-Nmk@4M92.n_^CPQV.X"G-]jJ=llr+=I3ua>:?,[*Yr1k#B.!FS0a_-Nl@GD33G#+QPRkX8!48Ph\E5YqFt&/5*K"9j;VGm8JX(?pINg(_@A]#36ZWZ!&,ND!"?q)\>uu%((\:hJ^X\1-6aHV5lo@A5lk@Y:]M=D'EA?u);J4q+H(;9J7s[t'#9$j!&,ND!"9,?!!Dd#mOHKSZ=,gi"86U+bDh/]1R.RTO6l84f8rVf0Go.6;>sQP\hd2oX0ilIjO2nI$^LV&.u<9OlMe?^/jgcC$O=K@gNJJ&Q'J]etV7BgWYB.R\r<\C+,r?\[f5^)j_^k9d&8IrJUJuMn/OuGa)]8H\UUt*la)!m/<3KrsVKd[o6:B<-7J6q0O'G@n2sFb)N\NO5hC[.OhR)rOoQlPrPseG6LkscXcq66:m7ss0-0,pdUdT9#kWD53[f0Rt7Sl>mOCrN6BeG]l*RmeQa6Al!a>7d=!5AeP8*O)2rcQ_CAn0k[O--].rqWiLp+[X3+]LjH:jD[0]mi4A5#*4K+B1aY;!9tfFLK$C49IkMIM'gj&Ze(s5llF#T#"^/\QI!s7$D86E"^D9V5LpW[hn0*Q!5UY,\4!L\FCchE;"T54U$Lp-k?Z5a2IO3#toFfW:c6bJ<1Dg5s_(C+p*#oGEq<".G#/+ScQ]"1j>1UT"1;cD-*?F!35=&&U9sF4'$W_9n!JoXP$4[#4n9!m*hkYCFIqI[fT`2mB+OJlGcD$:2g.n$Q#XnPe(_Q&F)-.ne@r7D49PgbEg0@a]VL06/;`!9#)9K0n@@oP*bSO(rdKTDR5Q:CJ;LoWeBEQCBTX3I]qq;[<]j);J5\Mks[>VoUYZ3/QdX;Ys=T]>lQ&F2p[h8m9+E%gWLJ*>p%LZ8K-jY!^FO2?3[4`)2#5Dh=V^^PL1.aPPjXqVG9LL$DtDq7K+e!Q%3G#)+_nD2m._oBSc.MpfHm$[Dr#Q0)O)f;A]@$kQ1.^SC_*l.m#>s%P6c5=.Y45gYAeTWl$$^q[YY>.'81?&"9c_CJ9$#"=XipXCCNf07RqaYQ2,LsD[_AYW*5o\'L%Hpgdr-m6joY0pQ+jn_qAScQ]"P]rAfS)$5Mje!ec;KCKpU\qihJY3!mM=R;n*4"e5?JEfDpm)7R6?EEcc8,T=Ke>t*Y:S'='Y^s:)$VW7cN#,>4G17KBqS!8[7>4g/W""We1EN\^nFX20E>GqK3PT>_.H[\f0&#^!21NM43DFs+53ou8nY%d3T7->nB)BO6"/5:gl+h(grYU!@<#@JG\)`cT^\1.",)H.%>qmk*r0!][C[l:rEP]$U;ADgGm8JXk&*K"3]Q[=&.tYFUEn.cOWnOmihNAp4%sq0l,_=H\!,jEVER^H]mW+Vqh`64ZQA4CjN$_R&JX.V;&^4@P%T=7&@Ffdj-RAB%sp!KC]):)8U'2mP#Ke<+/^/>Qe66UUCZT<+I%t#E*$bVQOTaoFC>aT)I=#mgejp\'G0pK'EA=?"b6V>!FS0a_-NnJ?C#X66of@R!!WQ0J,qq:?pINg(m&BL=)!4:c3XNGRIGEbB`nT-2Zs;7!C6`o5YqFtOCrN6Bn7h\3<>il3_BASJc``!FS/h!#Uf1E*$b)YCmPj6mn,^.+8G/LfOcg!!@fS^jr'X0He^"Y0qp-*_ltPKg`/?9Htr..Np2?$j[1?"+gTiJ38Ir8dj4M3$CPo&_W1"NM(gcK:i2u+=I3u#RUP6ndOq9/Vn3&KE+k<`&l*uJc_YTJc``!FS0a_-Nmk@^V^8+<$'!N`&/>5Vt`&!#Q7]!!WQ0J,sp"GEirTQ#ej6a:_JnV1P@ja?i]'(_@A]"p>*[!I4lnPno+VE%6Bo&;;.$L7j'Q5YqFt&/5*K"9j;VGm8JX(5Apk7"f7A-ikLn5lk@Y:]M=D'EA?u);J4q(q'JW&a1VD$j[1?"+gTiJ=llr+OAuKd_`4'J;?H\$"-"p!#Q7]!!WQ0J,sp"GEiquXT1`l3_BASJc``*[!C6`o5b>etV1i>.!"jdB'#9$j!&,ND!"9,?!!Dd#mOBds>60NcFHcb0"9j;V5lk@Y:]M>oB5gpd@FtoP7%g:X0H_bD$j[1?"+gTiJ38Ir8diO;!$VIb-%H"^!FS/h!#Q7]!!_L%gf7Mp[K7!PkU6H?#RUP6Jc``*[!I4lnPno+V!(6rN8cSsF!l0>Z!&,ND!"?q)\>utjC]tq*cqsi]&/5*K"9j;V5lk@YT#"^/KjcJ3&V5rT^jr'X0H_bD$j[1?"7clg.P2'5!Jh#'PQ1mj"b6V>!FS/h!#Uf1E*$a^fEsl3TVDWD+=I3u#RUP6Jc``<4G17<$c?!F+p&c2J,qq:?pINg(_@A]#36ZWsFc+?U8+'gE$ONAUn!"9,?!!@fS^jnP"]1NIK*[!C6`o5b>etV1i>.!"m&RUNFpi&epFa+Xd=!#RUP6Jc``<4G17<$c?!F,(d"Yd_;n1-m00j:]M=D'EA=?"b6W!#'Z=JL91GD"IkG"VRn*%+;7+=!#Q7]!!WQ0J,sp"GEiquXb<;d*u3,mHFEX-Q:@kSYn,j.qmjg13=AG6Wn$r,;T3n"8[kJeg/hnATSRj!%n\R.],+=B-db:.%LQR`qHcjS9GdFF4<2;a3F?WNI!h^OD;NHA=D"`.aVURsriNisg8f_7S"TG/LJ/[%;,2pV'*Upm',@/5rOF>3*G:ja?g?6KP5t*\_]cK=Emb`UH=7K4s2Id8Btt]>VY+8&f12>U_Pa%DSQ`Bl#ZU%+;*u\<1b'IT-frDIX.R:qAI8GeeSfsn_3@HLc^=oAoqqQlt^]$OU67".*mkZ@8+i29P\u3ot#i0rlW6I,WT/98SPB0'h3TRdY@Ma5Eu.V+lhV*T=417e_5_jS#]rmC:4(HZGPL!O_9J"a>:?,Zp5C6\RrOe4G.a?M+L::cCC.5K)AiG7/<=]D?j&PK89b0doIKb!'`D[)6![&>1bpZ0C&MCIcH_!EH-bo*0Y8/)ShFHA(+^u_4kKrkPolZVuEV4p[DVBp[cPGajXo"j>3^XODWR*B.u/Jf/On'8K0TC5rnBF?j=+>GqX"%'%o)12,2Z9IIW!q=N^`bY[F:[&+X,h#%gtPDhN+/)VG*I::]?VH0:h8(qlq0Rp6NTJs%9)/lTJ(!ChblS(2NO_^7*iRb?&J/rSq,8o9ZKHab7dbNF'i+JQYRR*NET$[n3dnS'E3A[N"j;6"Z+O#R5u$)+iS(1:+/HK>WHGdi.rA?upG?H2SQ+2f=c?^:Wu6Cu#!V$4/Li->Mmc4;\lJ)AMAR$=Bb^[u*8cCEE@W$#9YED,$/5pZ%p(oeRpS\+XA?i3RV74k6dW(YHcl?WaS>KQduY`aKI2As?1dosB/4fjPYS(@AHXI?usHA9r!<%3Zokq;Y)p#0VR5%4W#r8!Rkt[*ZV\JqDY]0.'/C2'Ws81)Ik=6n`&ZH]XV8"GTnZuJaHm3SdJ,@MSAS,WklJK`A^Qa5;ZtQ)!Qrp)1Fa;e]cu;##C,U?=h2^IIlFc8XN@$#I83Sc.-6tb1025YRHSPC%VK(#oXa(,SD:2M`g+VH.]:h2!AC`_t85MiF*'S]HrB*NE11b:`A.c"j#)=mT5#KtAIt5p7Udq-`\VDe,3@Z*YKpGm8PrT)L"QLB^IV9qF9/ih_,4Z[M!X[G">ZGNam1p)R*G2f.?J=!d&0fA?="#!:7@I,u5tqe7=kfVHoLNA1)@l>UBa5Hcn7l)*S7W4u68_7lnLM)HRaS+bu^.7$/jIJ7fH1lj7_68crEYENd'@c,A)GrsacCP_'>^qEX-B5gpdJLhk,4N"[c;q4Jc&6.]A?gK7A&?3t&)FS@"Cf[b.hRdE:7BK(>XX'E:-a)T]mHn0D-<^0"S)sHU,1P;il_ZQ=0'b%6T_Q3)+#T-Z-cpQs/2VA3balB?lK;.ARdQsgl>(/Q6E825hNI]7&ZH!^GOEj[*@?QnaIP;57NJQ4LQ4pC!DThaEC*flWWR$[;(UJ$f)COq!RV2-D-@NjO\r1fNGKKDU5sH)pei4"d:^e0r1W(YcnU*NQI.DC3n2>4>Tb_qKk`JP'HMjRVjFQq)2QKQYD,a:$$sq\X23_q.mof!Y\V7XhF]tdq8tJrpX;Z`Yt:]")e&.`"qDS(mIpPXf[FKYWI_LA)pR`=qRf%ZUnp#%nC?CN/L@Oq[1i4N@aXf*:NN'W@n29$I0ciK,SAd61I5Ql&%m\;Ca=PZdo'.tgLQnuC43R5"CqB@dp4Us?AZDQ>38AH8.%o]o9MAF+FQ)6@C#3$aFc*@L2f%hJH1C_9H.=)tDr%kq@eL7)j1HDdZq4WpS*hJlp)YnE7&PX\(Io&DMPT=oPGca*MfTkEjQ#oZ#)p"mEPKnc2'S]r@59q(PFRmA@1dtco?=9SIlQ;Y$N(Ea4)cWCS79^PNBd(Uhr2:X+/U3StXKG@5;GE06^i%L36Y3jV`[IBd>+38YZ^s&a:_Ydq:nWT1GE@)Je*#S,/H<47u"Ff/*1?62525mZq%bEm9*jbb<&L7]K^FFMjuXWe<8\Z0u8P]QI,g)BqJYOCrN6Bn7fVPijh:.TnLLbKjfT53BQPcA+/pot$.RqT/9@?P[:r3Z7;an%6-l`T1a>A>8pD=Fr[j.ESo(p7F&;?.R(QW5W>dGP]ND)$%,D]t=1mT/P63Yn,i;n(k0s_F&f[i&TV=1$FGBI!:h#Qh$ID6V"*XZuu6u^D<>#F07(h:.WLsOXH3PnJ25me"P3&amSj/i5h4p5&o,7B5*%%l0rpf?D;Y@*q?dF93eu+Y'`$UI%$q.=t:lhOfn&<5tc`*DFC<6h5eE,/DC?iN&&GGM9h,95^CKKWHYLI>.XjY^1/>)&"f;\J9ACAolA^\5^m=R8aJoi0^i3(K0=kmeaiQ$\tA;Yc?o"'YM5t3U2d_@_\j6!I#+!:)HQEQG4q7TGL[5DXG8dCJuo?gp3Y&rte5V8_^,GFkh[rTV^D9@et1;@!mQ_+08*^5f?/m,LIqZ]cS7D'Djhdqd0_m5PCe9UN"?^FNY3L_U=0fA/VI.XpJP`5:rCq4'-?CCRhpAD3J?dkP^K8qq9>=[rH;LU?Bj>b\T=MI:&fEXk!o?6ONm<`Rj-LEh\q#q2l_D^`O)(O54h"lC&?[2i_9hsUE2dkhtq<7&.`d!W'[EA]G5[/cYn%j8p>efXS?^U!WqH#qlNu#3m"8chnl=,fV+jQ,f1fQ5f8g6G)*uo^2]#+5-RZ[$Vo\AT'@[qZ0!%h(qH9Ei]!6\Mf_7.8hTki2)Bu^RE3Bu:);J5\]*0LFZ?TXGUE4C>Unc0)4F-pDY(@`sr`#U`ItR4_A)?)@LEp!-^7SJme^keToJ"hDQ)-\s=0;2Ah0V<:ZY8S1fp9R=S9A@O+%W'h-RUigh=:-*F#KMrin(J*Sj.Ag&oicM",Up,u^%OD5O/G-*?[841]GPb/Bc\:kMl$>0iDslnRqE;n:o^@@puUCQrOnScp76OG-rL!DhTI,c"_DKoD-jneT4dZDjO.?sbuji%ioR2")F$f1<<%ie9`q`]YT;H,8[%ZRc6>H\)kp7sk)6!R#"<9AlEZ[jeTpMPS-;QMYQ!lLm2$5a7@k[IEPoEXf-U7NWZ(^.8^ja_eH4t=CfY>Xk+LcQCtA'_fWT*!GV*9ucT[c[bh;T&%7V-\e,T=CU*Ff9Pg-)mHPt/9I1V0)mZ-,("*k)pPno+V!(6s6c23b5$L->GdOus0I\b-giIIR$0ZYY.Tmd-WIHR21hCcHmA<`akP)tc%[V@CN&^R'p%Kg!`oe0FQ6MS"t@=p[p]1NIKposl"9jMDn5o9X\LB>LlRCJC3O-Rh&9dY39,5u7Ou7"8%_rqa\0EYkl`o?0Qq=+kFcn1#+M5lhO/a>:?,ZnQ;"+*[!C6`o5YqFtOCrN6BjoX$5X_9?">CrH!"9,?!!@fS^jnP"]1NIK*[!C6`o5b>etV1i>.!"jdB'#9$j!&,ND!"9,?!!Dd#mOBds>60NcFHcb0"9j;V5lk@Y:]M>oB5gpd@FtoP7%g:X0H_bD$j[1?"+gTiJ38Ir8diO;!$VIb-%H"^!FS/h!#Q7]!!_L%gf7Mp[K7!PkU6H?#RUP6Jc``:r3\uFLQutjC^$Ps%+Kj>,76M)#S.fRD3JUg:9:QG"+?]_=H,N`aB1_??rIJ096RS*k\R^O.TImW!dTN.O`!mJ5L4<@purju7QuZ)OOoi&>]82jLROfc3i5RNGm8JXk$k;a>Bb;U29bp#S;0n2\Y/pr9MCT\3-"5R]H0(NqYWd_e9#sfZ^j4,?8'rLn@8.\G3HERk&#EfmQ#C3N.hm7eh(4d!+uh4dH(l?C9Jsh]4Xi:>=(m>BT9oCAa%^(OYY_c()AD/_]q?3;eiDk:`Z9_K9Fpero3N[&9PbeA$.V[V)cEU\>fhl>&'$,s&[2+;3gsddoFj(U.BAVSo8Uj%q4p[-EtNidb3ZMX*3=bEUo%hf0a`Ak20m]Q0eE>=inU-LR/b4][0h@NDVr8\5FQ.&CLRPBT/9Em83G$e(s(YUMC.]H@"n52kb*1D`MVR-AAkD:NK6l&pZK\b*W!];Ht6U$FEbQ&T#'_q=&50Desj/9C#$#Kop`F=m>*onro7\14%bcNYYLT?AaYMf98o]n%i?ODEBRmYK&nc,Fe6FUIAWhW@f?k!!t!TnVp)r]0##,:_$'8d*)rWH,oU`DP0Ct]/SfsVcB5gpdmM>09Fl:P.#Lf:%1t8O8hh+EooG]Pl]sVDHqS=C(WRjV25mA-rH47%_Kop#pba>`4A%+bPH&A/>%\:4NL%S^XE;<>1Esk_M',UC63XZhBe7ORQ6#r-OJJ1+JN6FS3coFm4bm6UsjgdD#@(Dqg.Q,2Q0XbVR=*>H7YMj_JSVO+O`I3A^d!):JM$T;TB*7#./ES$67hI;;pQc<7C,f:"X9fd0X<5;oZKT+S-UD=oqcR+o&;fsjV[q[OYpp$'$ap6BG:S!Hsor)*j%eo&lf"7&I29j;hb]5mNKO-k%NC@HS$#R3_:)l/qcm_/L'HOl`2@psCuZC:3^H2*hGZiOO9aEieUO_(RO%N@Q"As7tL0@KHlj2gL$;NXl$Ka,.D-=5-sB'eJSn2(&PE7C:=[?a]Ik4Og:O,EImHSfEX23P:,n7p>*G^%D6kW^)$?`DR@u*I!gOi,O:R)B!^VO;]c*h*?'\\>:6=p/*_ppot54[YDsrk_?@SV?Yf-LWqIg%0LMGJ?)>)9E6=,no$K)Wq'FDDqi4?F:6AlFnaj)2rupE(Gl+@E?8#Tp@GcX2mCNd+(Dtfc):"ba.#mNCm5m7F4hFtXYNJ8,9hJ#me(-\SH,*![jA[ZP8&n>mF7I]/`2"ZJ?*g0Po4.CSD0tVBR-lR0E]o$`hu:?2cZ:uNprhqHVm&m;s"/1kc7fP.HLp6A,5lV"fC[r%O?]"e-IEF*kHY<7H?NN:ZKb"64&Mjp=17to]Iheh)Y]6jsK1QU&6T1de5]/G.qg,t#&%8u=+5%\QA/d(/7=^-cek2C*ed0>!+,%G_l&qdJ['"RRAfNJ:$j(j#_A()?5Qo/f]N!/6`Lhu22i=hf:Zrrkm]Cf>Z?jZC\Dc0?FT9E^g)*!O#hEeZZj283u*te$>L""qLZ#B(33P2KN%T"-sbOaW1T6nj3aKaCa%i6!/AH:enubBcqY0j2BD;;D5'X$'X6Z(*dq:?!eZ,:.'>&Q`U0^U6f5Ed`,=>3B^:ma1E[#WV\lFN2#!"*63qSP1CV9t33H==hi->O_53(Y8?dc,Fbd6BYU`F?lF)CWQ?+ha1*c+lkDU)`S+qR2mE.\*rSRN(e;9j:!m((Y=4BPmA)&_k8?0ofqi#u^o_V"Y51Jg.5M_l=h`a6/&'SHdr'S6MbV$hZWXQT1O.`"-`++5T6NL+^@D^+X7GR=P<&1B0'ZKtWrr%+TZt#Ef47QKXN]`#?(TY8j8LW9/32Vhf=)5,HndORs%(c*LZ#8S33S-E?o^(]hC&-T^NgTS(at_bER[@\):C.[]c^ct@;0pQ$(p%WLmaPa&\(eU.l'lu=(PkufoVs=ocG8'[cZZ#5;TAH548P'dZm#TiGTAC^RLZ)a?HM6f9CYQ=9heCWGYs,cdIA!4a\kk4Ng-h\)`k+J(uIDP&_HdZ`V$0l,8]nk;+)>&7A(GQE,P<=K*`>Z8-1\b.CYBK4cP\aseQ8;T"ubBN0='!T6NL+7O8o'1SfA4EcRbn*-h`)FmFn3JU1VKk1o1]H3V\_j8@MYS't6%+j])LdTeFeB>O04>mC!?1fjQ*E@i9UAW"4!0$SU36/%f]M2[Q[IW$Flf'U)-QG)qWEG9Yl>lO<`/`";!O,Y+Ma/ma&00Xgts!0d:gWocGe91'#MZ'&O56.Tc6MhX*k8D^>h^\2DO!4?;BUU(h-d,i;a][HX2JW-u212a3f\RWVjmp=@kHtY\(d2ld*-@J+h1*4c68ugOI*754>N_.OlPb^%Yj/M?kC5Jg(O-.(sg+KGG\P.FO>.9q(\u]m#PR#VA3/6:_A.h]W6EEHZQ33LT5/P5Du]/(a3WEm@G5RIeVGX@X?>jXta3G>k>@Mo#sNqaPWK^A*\%4J6C"90-?(7R$]_cJ#[\JSK9G#gL_$t2&o7cOoa='R15(;+$g_Nlph7b7[>NbUqX4M6GKcl\?)!BP.F4tQo=GY:I$:B*M2Fr%5()s:+?c8:SMYkZ9?+FA_E46RYffLum^N10l>dn_MoB3<[XRft(OKcPc(.1;#3+]3?5@Fac+L]aI-?7L2t)RjUc;*61MElKq$d,qQqsH<1DmQ&4UO3%akU-=[iXs0-DTgn^Ne#97B8h3,q:rfqOFBrjp^Z]AXKUApPI)$?s!\hLMWd^e`=jH9_QOF;UWI=D1?8jY$Vbp#ZPTd#c!]?L41#X*0o-J@]i"3<#/T#QgU7(&E:*]nYmh+'7=e(k=LROp?6_>1hE#9dO$KlRen"2q\4J7/H`Nu17?fXU^1bLVP:",7%3?G9`-8igG@`0[pU#:YRLi:WR_MD#`jKsQ/3>=qp[*VF]Eb,UuJH1P.KG0@0k/q-LIUg%K;Mn,>"Um?u+Y]k]fcWRJ=*;=din/jIVQX+qK,ptnl-VfCX/*.4@cM(Lg@G@*34+$,fAPX)IISK&s&79V`7ni:+DtKi>o>MN=oD.@OB@"NEn/FGp//cjD1`qsUJBrEHX^#:e1n!t7K?(qt]5[#']?S6!\R?Fr[hX2:4*.l[D["r;21B/H^8#4q-X3@XS:N?ebeT]0`V#_0`ru=7]lgg/]Y("ebAP_dm@F*,r0t1pWCq,dLA@31U6%/J[TGmKl-1)>k2pQnol*uQ2k$=oaCrss'^ZTml`\2R4inR8p*L64mh;%'_9d6$o'teAacl1]XI_5(cQZ_oGM-`@4+Oo3d+ro@IRu^u9G2dOTq_\.)2m_CCDTOO>W!ROfpZ`(mS:>UaVbd&1a\3%f92)B7X&om\#YsFJTr&Q#.90IKj"J(K(kl]mPVrY:UKQ(Te'IWG`usV;ZNcTc(/>"+$9+UUiT%p.?O.K#`e7:[TNuE5#R1hAEH%@2@HW$qj_c]V^;%fS3_"cH(buRT0S_M^]6G"J,sTV'RjPihn"4pc-au+)*-"j$[&>P1"g.jG\s@'nKR(Ege1b[>[i"J(H!Z5=C!&22`!FUGK!l+drKA&Z`67i1$JHI3K!HneM"7-^%#1t@)%$39D/Mo-1P-pZ:p".+%:?TjTZPbqh:r^Mos4l?^r_Z#%B9gBn8^Z+P_p9C+qLVH1B'H?LG(naBCMM-T(tj)1i7eci7J8]h@LiMJ+_OVUBO7V`CS&;rinda^hBgU+,WDfW$^AYiKA<51ep)pRNEX&q*VDdDW\]_qcJ?\2:s"P1:3H=nI@>$jh*Y:]"SNJ:Wmec>&Lb[AcU#N0kHM,uDq)18/Boi7g042D$Qq?ktVm7(jh>3-G6gk08TOOjf-V^4_rT5,ET>JrG$.gtD)m[M81/jSP3;;WnZR-nV@UagkrJ0"Yisb)Wf&Ge^6@9aP^>Vk9M>2t_\p^4HGJ!b_f7+GtGShc"H4:kSDRM0uG!6I^ncbNF:6C^ESACEb]>JRRFR_Xj(0q.!R6o2\R8]Mlp7@G9'E04#(]T.7E"PG^'q,nEA[`V2i$FGtT/GMu0oJ6O$Fn'3pJ*6CQ)a4%Y?GC2E=EpWTK;ea0Xh.B$]qfRN@UdcSp"T%aK@jfPC+#m=P=g`F2-qS@&i-ZZgdQ'[.=QG"k!TM1sPrLG.%(7sGS0=)odR\H8V=Yhp]XIh8fE*'YZSLu(b]+lgn=^H>rI4?;Vd/\;*t/i9b/Io$pD=i:39MDNR8g\0]"En];N:.b2!lJ)k7rHK+j0Cs:leH0FIkMjLWDUm3`l@qbAFLZ0_mCt2!p-sX#hP;jd%]AB1mPKo]1S&lPVh?Op+cr/in@YMTMT6H(]/f5FU*f12"\b#8a#q%.9,fZBl7E(G?7Hi_*Bk$/'Z2J5*8il'(_jTY#7jGNTM'6!tGg$u-/ED*mX@=(1iPUG#raXpl#ab+YR3T07NR?9`c.Gd-(9q:GgiAgP/D`/>YJ&$B6J

5%0.US*oKBP89`',J)`;=&fDM;rCr4WKbf6_Yt`8([)kPsk^$$R?'r;WbiG4^HUieVO$0PuGd[m43,h#*@n1BdYR_s(*We(7ubRr]j=o*=t3YR5CT[=tJ9TlpbZ+.jYcQN:%IBml([W=N([/'k2h*A@0TOO3L]F-asub3[i/B_As=k:chjHdGmJjYn>gf/(Ko`EATg;\D65kAf971;uu5E9>s;EKfRA)9S'hcZo+RLC9HOM<`$)j0DZ(mlq)#Y/oFPqRac.Z_?G=UfQO#>J\VJkG#QR2t)RAV9NA;SB*?oGN51BQ0n,(JPrQcXV6qn>;)_`>Mi:]\Qo,XK(%U,--A_=Vrd&$K=2i?`ilR@ll'>_<7hC1nf12e)o&=BhiF9*lgcWWmPS^G[_]R[+>-l9r^i1:m`3PV)o"J?d.Ih,`PQ2%`R#3,VMPc"4D,4@=kaSM0&uLfT`9=^pZ:bS;dB.qk.hQB6c1+T&pN)q]6V!2)*Hf>:S,9C5*9:DC5^Bu5i]LARb-kq1M$B8Mf3Y@GK5N(eAWpr4TBq7g=*+.rOMuu@#*4/'W8.N'K>2G-Kbp+6!tGg$u-/ED*n28T%M*\%@nXA9Ch)]MkQoDKS5(q@u;pm8^lkGf-A>\fX:IXpc`uqkiM2e_06u[)F%`VqJEQG?R9B;oCEj\71n[!F,>/eSTBOq\4>Ntm/4i'M+LK2eU%fH2;HD.AgkBaq@"FCrI7sZ11?V36ZdEDf01G@K$r]IH3STRS(*_jnR3QDXVY+]rV?`61p:Q])`q=HncX1*4\Sr&TWek.9UVgVk^/.pj-OsgC.%+_:JDbian6(f/beauRXFTE9@h6'j>l2eI>>f-N8-@cY?c$a-=>&QS`8N)O9*6$$s25pgoa?5WB[KJkO854]PuQXrT)5j,cRrM6/mdb^'SX4*NKmQkX]i>Jd"k9R-I7g,6k?-_OR]&5],KH-kMMcmg#%;>QcG5CNAZkk7.oXZVNRHL99*>Bbu0M"5%'c8ko8L:[aj4NJC':7e^urfT.alXe5_7:NsCbSF+F]q%%L2`\T#%%Oj^,W+M#@a^sFVrdrb8EqR;#9$WaFb\Gc6pkPA=UT=lMp&*n,nIsF9RcjAo4o(m#PNQ&RE>$fCJH)!n^[0[$83UN,bu7I17_66N6Ca_Y*&4^F^X87Bc!S)&]0)!up?\3Ge8O\qd/`\?FoLB#kIOnnR,V8o+O1DIDq[3\bVXV$YP'eGE@N/^Ddq5kR:?/)g;LoTPOW_\Q`$/\Pks8Zctn'pOThn8Vs@Cg6AIY2jT5hrd&P>>pKH&a3*j:$bN?hM/OjK@d4IrB8n^7=jX`SL\e%2ETl2rSehE]6dB]nW*'P:cV,c.h4c_0PQcMpCBKj)TW+WRk_,OM)/W50k,%*@(37GMU:+UW1W!`5H9VFTFD:-DsYb3J4qbUbpC>fRkEge1b[>[RE)-SfD?!pn*=$,'Hd;SFH2'IX0t%T'NpQ@J*bNHc4R.3SH?S,3sC-8EX&q*k(R!S>#(^'FS>Wt`2"dT+,#X\pgr"0/\Z+b:#SA%IE3:B%Qd*[`,G#7>IW)V8L@8gSH?S,3sC-8EX&q*k(Qu$6p>,3T`"b1d.?JKirr)*ml+eTOHG+/Dtm9.78>PPJ^XFW1Y<[j$311p'EA?i.0'd<1T2l^0@U']'0&ei(gs6A0YgEa@"=dL^]6BIg-YBt/H@tc"!rHuFp\3OlkBF(fI6e/O>Ege1b[>[i"J(H!Z5=C!&22`!FUGK!l+drKA&Z`67i1$JHI3K!HneM"7-^%#1t@)%$39D/Mo-1!oO_O:]_JAVZ8Ed:'"aQSH?S,3J6$Po0P#/5(Ne^J,sg#!!DR%!!_()!"=rFW%BhZe,nPA3)BYn@&EuY^eOo$311p'EA?i.0'd<1T2l^0@U']'0&ei(gs6A0YgEa@"=dL^]6BIg-YBt/H@tc"!rHuFp\3OlkBF(fI6e/O>Ege1b[>[i"J(H!Z5=C!&22`!FUGK!l+drKA&Z`67i1$JHI3K!HneM"7-^%#1t@)%$39D/Mo-1!oO_O:]_JAVZ8Ed:'"aQSH?S,3J6$Po0P#/5(Ne^J,sg#!!DR%!!_()!"=rFW%BhZe,nPA3)BYn@&EuY^eOo$311p'EA?i.0'd<1T2l^0@U']'0&ei(gs6A0YgEa@"=dL^]6BInoF=s70)0i,9&O&"_:9Y.0'd\;ZIYBVZ8E4bsDVT#(R-!JJ,`u3sC-8Fp\3OlkBF(a;Hb=ke'h+J2cFP$"/:S!l+dt"b6Vs$311h$lN;r?E4IL$Y4XKAuC/q#!3!=!HneM"7-^%#-qUWi8pIPKs([$7Td&QZVs,tJXlkX!':@7!HneM"5,G?+D1[NL'&`P!HneM"7-^%#1t@)%$38I\0Sam,CnlX],@qR5W4.`!l+dt"b6Vs$310;1D]q/T4\5Y,A3+]PA^ZHU1D^'b>&(@(Np,c"7-^%#1t@)$triu3C@C0>@1A>TLNO3[-SKgj^=td0YgEa@"=dL^jpm/-"k;p,tndTp;`XA.Q[fE$.p[,%'WY1(gs6A0]6t=-"k:uZt5826eNn"%C/nT)J#a21rrFCB[Gj19?mM;z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc2[hEz!*2D2zz<^G"2z!!!""6-]H1z!!$%cc$+sNblU^^?jc,o"/l@6Vj:(a5S,j36V;r%&KU`&T&Ml%"K/2Kr2M$qj&J=[K2(1i5J;B"^8^sC;3J1$KB0\jQ^#TUEO>A"'U/d@4W'S^:'?D%&&Q(2AK/2KrLko`0j:#db1Y;hN#"1l/9?s1=3,q:Ou"LRc@C_,<_:T0#!%<1+D3r-7(qXib)eD%,,/)#1T3Ub?k^U!&.qbm3J0*J%#B^QQ/i?gO>GMlEX"p"e4\)[$onD6,$H9QK,WeZ2M%A!&J=]!1FPW9J;B"^8^BoLIO[ChHBBsQ##\Eq'ob1ZEh')'l,C*[8*e$mi+PV5B"l(Ir*l=I?sJkrq:Va1=\-[lcN#WWI$k%2[2!L9$X)'#'5OJQ\)S_HY;6X?ee`G\hehA?G"T$Gm]h!/Lau%Y34:5^3R3]&Pek2DTS9[eZbL\HHBC$CrqRo9W(V"@H3B<\a%)@AX-h_Ln7/_TE[E/9us-#+`PG+Xh7\eAg-,qR')70U/Rlj&F:traubZ1,3;N[ed.jXK,U6HM8M9a[1$&/1NX^Ubt2*=^BdBh0a[#Se9f?$opq##"5(VcCdk>bSeQ&XXBV1F.ZkJPNRUh6$)\:RG+;7,K>)FD-:Ef,,-HJ1T3Ub?k]Wd).q)uW4`r%J*lM&]a'Uir3:%0dT&J[n"WeV$C@kq\&k9T@r;GJWu6Zli:#NPkgM3=j=OX!_r;D7J)BA)j_JnDIR?Sm?b>NL4bHj,';s*X:ntk="\P)a?@Uta?QLLWEUMT,R^ZCg>^nnkBRhWJD0FOb[2ZU+qt/&oKhBtq[)JI)Qh2kTqh&>]8lTWrfiJ2QAjo20BQIkdp%RkmJ,AX9PNs);>aX6d/_g8,Zs<:Z+-nOTKP\?7"HD>8bm&C"fX#u*Y'ImCr6eD<=DEX5ZFm;!.jafuF3:&hNqM1^?QE'lRE0.PJfr?,Qkr3G6`U!9Re[9PGO\_Eq,O5-0Gf?!9\t$EP_qg^[3nZ];[UZcIie,dC7E.PB=1ub[l7\4h@^1k$S1U%&kpilsnmY7uA9B#,A'#V<+D7nb(?Q#O/(W-T=0C*;mXl)6nOJWNFEu:YqL`"\n'OVRG6B$SbMi!A^mSPP[nEX'4BC,OM4NN&4"=M$8@o+ip%f8QIPc=E_W_dZ3h](!B2_D)_%)+K]'.9l2hfo$o[%5EW2cCg+lEX'qW1jn?Z:\mNG*bt!?]rpg`p)`43(pdnd)AfQi$jtG,)2=3Cl>d$T:L(YWT6"9?7g9gEU5P8[/%5U)(&&Sopu$"SXVcOgba5u:`hH?hka+:gf$51=Ne!HbYsi"*;Jfh8h:k5&i$]cnBYI.X\IEAMgG$.j`au=j0\fZCT0q0Nq3%:+X=#i0cNd2TE[E/9s?Ll0USrP`Ph[M-/"RSC`JXm9d2.M_'-$Ikf>e1"u$,&))3j.LSmNXqMJ8OPWulQieXI:aT,5"0'%m5bBhH/6-9E?RLKDikG?!P?+'c=G)F@F09C];tOp[uijIGVPf%@H$bdg1Pei&NEO$\fDCW"Ii.kRbiPL3F-d5>/jk'.d'`=]dJ)8ThnEkj=Y;TO=]2ZqBA0_%5*"-.%($YX2EbDhEu(t1VX60MbcUb>a3J"lqXHd_>[#F7_:=+(N?r46K:Kb)A4FkkU.tNp7us32ep!SV5]*e\9lY?n\0D3Z:,.*3?knO_"[@HosX\7#,YX`2p[5ZtU?b9!eTnEDI/:u<342Kjs9>Q+T]jWt?GpGkU#f8#"L2&\q3]_^Pq.d_1/cu4M->m3j5q@;uFItVmD[%*h%K3)FH5B\-I9mboU^7:oiQUj5riX/*k7*X06<_jOm_Xi*>aKhd2j#jY'XXlI#4X%it4uJqBi!j@TlA*3#9#aDo@&YFjZ?VmWs,eTtE5Z1Ga;D+lNoaPc>Kbf5f%W'S^:'/CeF&@VSPMc^no0dEH'[%[>\5ZmaQ/bojF[Zi*7DW%)gLUAjB7LC4!%&,o=acGZMCL`5sm^iWpk-?CJfX:1@@1dA6^&RuT4j$d*Q`!Yo_bqsj^8??QXZXju+d3[Re!Am*@uAipDL9ErHd?!-9`&23EkR4HU0e_mq[M'dHLIV,L3;H`qkG.9/iQ54_u0["=_3CL>]L$[Hue,_Nr:>9Tfu@V[rnl*eG&=r3epj$$c],%+=XujFg\)]=7OqjEeT^et5PB&6Q-:-67m'E8Md?&<4g-8>o2JgdqQsnjPW?a[^&,$BHk19&IBu"Y)rRl9qRSLR"jCp,oCC-2g'EI0?Wj^L=6cKobcifTDiL"UFL:i*a&f=Ohsb_>]("?_m3pkgf+>(4k_'c+)4/Pb1;5d\Za&R"C617(":K:*Q>J^LY4Ajk[V^f&NtS'uA)=eFpRagEm_@2eqG"\ejcsRdD`k6qm=,./&c^F:a8rmb;3C$#j"MkuOlkZaPKn"9As[SWqQqN:e<1J'*0aJ=N8qV7nK,q:sbo7J7KNh/@K4891Oj[ef\b`s5&Vb7U&DgQo!2(\AhR.l!h&g2eEJcB.SHJXDECB2F5N_'W:]HP>"Lh'l@'[T;sIk8mgV@.LMjEn+Lpn&+8%_Y$\gbXg"jn)f,`BjT,YrSBqYI"GC4np;$R\YrBtct.Kn:R[2-EbTX_rT_L.auMiO/^1GTkf(`sFR(`mEUu)B;D4W+2Z9YXk`COabV=6^Ge6_Y7Uh%h4_9[EAmWK7XTn9iXJY@l4#2WiUIW3$QJCb.T!)WV;b_:kDFP_`(_M$c,J_@Ag':.TbTVgltf9k@b0>6!C3Ij6Aor76=tEX(LCNPCQ$Q"r8*`]S58\2L58[p?`1TBA1jcR911n,DJacBFbAkfu>n>^KN1j.p5QachIL6$q7iJ&#$3\]ae]d_aKaAind45`Sd=Cc/9YQ"nWXcp-^PaRRa)lb`8eCX8$>?E]4b=rM%q)%]LfB2Bp*jp]s>'aTSRSue3Tq0[q^oj<./I3(0A^6-G[?Nqo1\Uf)AOqn)l,V0_)u@4ZuVp"<6SJ\l2r-ik;+);I\G``X`M19)W[Y6or_EsV]8m56m_Xb(@iN:qG"^?YI,<.`8]2lnU/a+i8Wiq^=FZ8iQf25CGW)2NL^ar*dR2%eJe*Fdl19eH2R:pXfuU06"(AQ-dJ76IZ>S_;`IZFibeDslD-p`LiphiNuSaG-4YBY!E6]P5RXoJ^QqS:>-%bdJP'%N?F-i:-90486\5*.0uHD9#]gHkp"4X6PuL\p/oe<)i]J/FqecCKgLp9.=LU]l'#lB)A3HM=!"bdGpnXqZi1R*'\^b%uJ7p,eK/-RaBDA-5q6aH#g^B/ZL&#%^K@d3T%pE9,Ee_Q6rqZA`JUS8Mh2aVsGOVM;I]"1r/mc4^:\lUE5Uj+@TCWMY^GjQ5=mH1108)_@MIet_p(F(B]#.&ZN[6cHXaPc>Kbf5f%W'S^:'/CeF&72qo]h$gkg7Y'b%?s_BpA],bGmftlZu)-fGp_V]U((J=lYNNrgC?H7Y5IS:S3-K/YK`d:fA@Oelnr0qRa6OAFBV1pRr"H`WCjS5C&_*a=#iXorkf-hfDW(1ao!_tR%cX.1OT(P@dF$GAlZOu\nKd*UWL)Da;K[1!E3;'#.IRD"brNJd6r!ZAMWrQ-A8)u.`\nMBBVLshbZt.1=\e]P:&.V3!J=rPhVlq-qtD2=S7&cf_:9RXY%Bmt8[aD1(rF6.i9h%u*)dlT`8^pEglZ56.B_/tuFZ.)ia")gciR;O(Q/jn3hIA7Tg*An/q#e0&D.$(7#6#VTGsr;Q'&8@K+krhUYJl8NB.9lB;5q:Aq#:p%kEVEn0FY9UR2![&X]5%2l"%)%mu>g0D!iFYRL9\kNqk?('cimnFW[Xl:QY=h^b6_p?:L'hb,9(ZX-qA*g+X9W[Wr5]l=(`--3J6E$;mbrD`@G,?f;W6(L3X,k(@s(U[;O$WHQPFpb-9_Y;Qj]fUW4#LB8X*iXc#]+:Wg?Lh$UQ[6$VbG\ZWUNac@PYlag6"G*AfLd6I)^S,q#*EX$*\@a6)C?b9lF]d>?&'Ir]Oaia"_p:GG,^:mSo3J/RLpFO&IdRSC#`Ab>p6fg@gq[=?`rn:XpKT,(&Nmn;5G4%5tHk#Vb?:J&"HMu/n[MqGRY5Y\`l,jl+S>Ra88TamLj-(B*n)_oEi\CRdN3SDj0/LKLuRb.^!qW;:KIq#jHZ3J6hBRB'Wj%^0"#'2e!!7Ea:sr8j`B$gtaCNP]74(U)^H?D3Z9'N=Dsl_HGJJUS9>n[7P*h@#C2[o)3Y^#@t"`$7X%4^<*fZ,pJXB9u7Sj!n98rg:g67>Z3-eU-e!93):,2O9k!%<;ZBOMRG1)n>q+;=,Lk_Ui`&;nGl@Gkme*N`_p_&/!=!Ou"LRc@DkHTkjZ7dsaH'p=dE_a#EHWXkL9P]4n!Aq3oTq8Ka`nEX"DB)/MW7b8D3WDr^Cte7.NTS31l/kKQ@^oXX#kb)eD%C,U*R``9BNNC,'Hq7M!/p6V:8%<;ZBOOJ6)T]#_--dSaKjJtVDWoX/`7$06)Rsrn2g+W%BU1/N,2FKqp8C!k:35X]\8):TdAYR*C]ZU!+sQ:uB2F>Q!>,pGP+4fIEX&!uc@C_,HH@%h+_O&.7&qSG:kP:S-BL#+,,/Ca#%bjn&/!;>aViSNBZEX"p"Zq>?C296YO!]^?,,3gIe:kkJ@&J;..S3[U)#+Im'J;B#-aVgA"'U0_jEA]P`#&^`)M):TdAYR0A!Lkr!rS3\$5#"1kd8ob+na;Jdq3L7A8V&Zq4d5n.i=Rm>8LLkpB!)3c:W5X\#@,\Kr+SA?P61E[m9??-6]a;GO$d436Ue0&D.$02MNLo?Z15oF\I6q"CSEX"DB)/K@7"!SrS-"g&/S,j36Xcf2?%<;ZB5gFn9LjI/\PTa[)6q"($B2F5N_'Y7"+2Z@j:'1m1E[m9.'P9$X(<3p<6g=m]1pM8:F]-2V:93,`qhtKdqD;83SWgho]0#,W]ne\FZ[R75;6$K^pXBrBD7bnhu^/le&Tdi5%qSgB!\84FGPdt_n0(C&06CUe.fE6a;$Im6"c_(F#Ra-"g&/S,j36Xcf2?%<;ZB?t%@MpPmq%j8@*(^Ni#bT)D19c;un^rh!s1Ep#(t)'(6b7QKHr?TrGKHo\,jYo6efOQ;W^'J!D^EDj)iHhuN/d?9DhY04;/S09^O8dsO\kFeM'M,0_#.U'=IY*BtfHMTjE(V>,HfNeS/f(_qQ(99Vp_9*Dmk8;o"Re/n.WkJ7i8lo;SLd%&n5oF\I9.WuLHEOnLQE8s(ngu%p%[!8I%<;ZBi6CR*S4uOJc<%NuVQI&)E"IHn3fR>-7hEB,N^"%FH@8G?IZP^cpoHo2D,='u"4<86LJQ(%cHg.ee9+UUr8g"a)n^Fk3\dok]Ff6e9XX)n[JK%!Oh8R.9flT-O5WI#0!b,\Kr+SA?OSRkma+\`!L.(I*?9ZG+]AmnH>3D;CDb:mH^PQa])e]Ph9Mo_D&rb8IncorIQ\=!hS+?iIh/'GKe-hW(hZko,n`\]bqgc$p-KROT$<(pWAa5F43C4nYV-T-HH^V/iaf/Un>8Qg@Fo3W>e<10l-V*_H3EUdGX_?hNX+YqbAul>q^De/VuViqP@b()$5uUCIkTNu>-c5kMVJ$u1k[fE>u2L4mM+0>Hb7^M(#d.lW-77E37lm+Qfrg;hImG3GLXl8aqtW@>bI+-bN,i+S;A3KU`=5.kqijL^Gco+n>=(?nB4=O&UGqL$[9mA>WE(Tr5EWUHOUVk[b]ml_(ppLBg.jm1)UU>qlLE0[gM[tdF@LI]>M4*\DnpB3KSaYqTHN(6pr+hcCg+4Ee\^@pV)orW9>eI?a01];jV'hTblV"^Rp9A6h<2Vg9g=7k%H+5c]%0-guSqHr?d=:jf6qIE:$t"gsbQ]Ru+Vl`_O&`(>#PK+T5!DT"tmTY%K041#bOh5M%]5Qkm;[G_#[!F$?DB\s3"trTlA1'oSsm.56-b!=QCL5MEX&"@D9e6-)E%H(BN:TmXkrlHgtVYIlf4lraDitu1PA1X>.!PbIY!CIG:ama-*R5pF5=j<7Ir\k;H?m)OpdSZf8leQi5gF*kHFf2#&WKDjpY8THn,+rYM\]dh3[llDqML*]ZpC`M3-qfs8G3,if\Q`:B'8I_W+qIPFTJdCNi5IO##/9n@!HMJZ@+CtU;%d4(U)-f4_k]BZgPoXWu\'UH5S\Y4SGT3:Q[E!0JQkb1WXl8FG]pCZt%]JScagmPak#KEX&"@LR^YoS,j5LkE7VLPGpR[GFa'%Y&qS->=ZX1X7p/]floCIa6j$K1i)L#9[j8l3*OLK*p!g$H4G8iUJg*jX9C+BiVK\REi&d1KjdigS#:<6B"%P_'CJ?'.,-=oiNC[C0-m>mmi-Brkb!2MG+;9Emf2Q4$m-";T"b$*kl0IrGe#aRq>4m^6.&&c5&(lNRq@Z*cY"*-,jjbN+PKk:"uXI>C]ZU!+sQ:uB2BrHEe`]A[`OW)BXo&5K>S-c'lo&Mph'b''M!rUk;03o](_cn`S\g>FS;G/&TLUIeSG$PrX6IIpVPsoh@#9eM,0^t768@oT:[\[,%>jEB2BrHEe^!s/pDT15c*1o*M2@$L*'[Qq:A4.ioJ(Jk+h/GV0P^fafd^lN-=d/NS:#3OOkt0nP)N/l0h@E[W^uk*u'&P?dZDWILcpJ*AheG`EJnp.9*0\[JF0T%2#pe2c&TLb\R`:q$2orja0BIfTk*XQfp8:@)j%oZr\G)Ip&3O7$da7N)ejb"\s))+]ScCbA%K2'FGSDdmijT!D'jR.XsT:[\[,%>jEB2HT0^M@P?"%NQ[YMR(Xbs4ZbGEOb\6-`jOa;GO$;(jq^10H#TI.1SWa(D1(2P6q$K7cCbS+"!Spm,rpSrj:!piLZAkLH44Z?[&s%fS,j5LS`C4%O>A"'U/d@4W'S^:'?D%&&Q(2AK/2KrLko`0j:#db1Y@A^Pr"@?5=J:[N0\M#eDP0';%CX2JZ0hM@JIa?(t_`RKJ;)O,ZqsK@3a9,,3C0B2F>Q!>,pGP+4fIEX&"p[;lJrka;-0[dMG3^\mA>>@iX_cB.,PH3Q+2pOLYcOWe.qD*.A>>cMuFj!9t6BfSOI@WLVt@!s>9]hPpDu#S=s'<\rW&."[F0)MG!G]rns_8cTVX.sk];LHIJrHsZ@\%r%%=Nc0E9pRMM[UiP^;6*i"6"dg@b27O>A"g(6Y1R)0,pL7'oR,"uXI>CdJo[)2(H%ent#,pBMiRpE,,#)BL#9d;k!;Mc[[h?E%4W%m+5Bm5oR*8=>P33Q'qBoCEd#G3<1fHu%U5?a+'8l6@!\aL>?uE;%0!mlU2*FS'Zs9`2SZ@I8O1;keYf3R3RD9A[fqB(`a;OjUG.p-L'@l(8&Lc@C^R89+oGa;GO$d436Ue0&D.$!Ack3.C]jSOTa\qgRcl+'&0GI8A7Wf5cV!`8n`Z!^8)?o=YYb1hua?S-:G83C?oEUICY)mh_q$rN;t`cL2Z"j:'1m1E[m9i2]4;k]['f6M!,l$)3c:W5X\#@,\Kr+SA?P61RP[nc_7i=Q>-2,LO0QLI,5].7.3[lTFGOBm%#qWW-<7d7)UW"3J0*J%#B^QQ/i?gO>GOBXHbU>d(*MYB&='fRols_KE&Ym\o-QZVp8Vs#(?&f]A]Le5:U"25Aq?"GOb-tIpYMb7i470>3SWgho]0#S5M$MfT\CYPQ7NM*o/NRp,/h=uh&Skbc_W)U`jDr`NJYXH_:6c[6e-^_@b&^ae()3c:WaGL`^>&bV;CW'S^:'=(lg+QiT=qjr$"Ka?FVkaenrQ11^hD9u'ALPg+hHpc1%7d*!CZtNQ4=JY0:(G8]Lrc(i!X6UW=/mT\kSe*kON-XCQ[E>nGFm;"Y59G;B$&QcL$WZFMA8Gq(<+n\lg5Xkc`_:Mm][dp`nRp'KOt0>m]bbof)Mh:g8nJ,f0rBiHgk^VaZK58/0"(Qa6kQM3.L=5U!cs&3&g7pAG4'cT]?NLjL:=^$abs+QM`2;\\DY#Kk*PrdE[k3qaYk"*I$T5Vp844`EVLcLW.!SO/#j^@taFnKKII+CZUIu-Yi65H1S!`.FBFsbm"\_p;l(1S@g"29X9%qP$4mt9dF@JK:Kb)A7!PX^$Z]E)n$G]qm^q%3mHc%K-l5(f5BG"bZXSGF6>20qV^p]PU#V0%k@e.QnJ[Z-s"74ml'58`QHb[S.O-skrJ3sh$^[.#5jf.Ugq4_?(ub0U7tmCkneBXjgoT0k+H\2[fZk]6t"#!3chOA_i\ZtR5kr\8/i68Xgp5n.i=RuhnU_[-8k!E8+f7us;$2eK(;D9ugT:s?s6B@5>6e#8PG7.f7rr]D=fodpo5nI7LrB._hQK7\[sLdiFFHnremB=JOqT3/:0e+dcjej_H[e?2H*o4q7F$EFeu'3G@]J,o(3D,0J)0X5@F&a=BP"U9JCgch(9N'J*8'HmT'\/7'p*.TEuoRB#quMb,]@k_Fo34SbfK2u/>qS%&$6[@H2N85.p7@qA:_e8-sde>.HMYPN#i&/[A^TZL9mM(08nh]N7pqaKJ"ERR*gd8ipb52G@lLVt/>'X(W37&?OQ%$MdoSc$IGBH-s+04&#!*@ffeqGNEm.;.![[)i2S$*j+(B._Qck1fs_QWjr!hm3fLH1=aeLlKHH3*c-dqtq@>V,('4JoN899NTLnB(_qaIA79XIpFjTOm&;kUtK/#Xf%aInT0B(Vc<(!Fm@O6KiT@c8C!k43J1&IEq`:qj:';IlH)j0Zb38h7TM4@Y^=p,3#1pYMW$<%i[UlDHL/ASqFBX'b6kI/7-qCfK;,E:@tW#03U6_J$PTeE'8iq9Uu(VdkA\e*Wnlh\VV,fC,a]J745bC^.Y*-neGI%a0,A2cRIo`iN^K["rTF0\nF\(+oX.`VeGpLe>&B1ZIS643.G5'7-4oc)gu_lIZtgZ(cZWO!>#A%7o)kbCOurD;TIg\Np%JZaZR;*,9B&Ee^i7&ct!;oUH^FhTk#@pqr?KbpT)n,\Q

ddl?hL[g\2^)Y7$Sn2"T>\3tIhm*FWecL7H(j-AFDu4*s\&/S97gbZ4Ibf>1C+W9C7>[smA8Mq<]R5uo.GrBjY1+(tQ'IH&4Mq2.@pH7[(H&elMpm65XGn[b3.\:R'0$rc=?&[*"QgaFN\MgR5dZTRFcX9E.+C5u[LL9m#'`2`qE*G5/+aa0%u>$@?*jCLhDFMakT)gJ0nOR5:Yl@-R?GkLKDu7DurgI4+#CQ/5B3YqOP[.RXrl):TdAYR+GbB9:Gj]RBP5SU2O;FmL\@k$aC4Ul=CDPGcaQ?aQ:$!KmhWY/sbTb1_j06R/>CULNp;4Pm)T=&Gs?MU#Pcd\/RX]of8+PjXmfbh:B[2=A`e+P-sr.JL"kn6n_*VTT&WKB:(]/KqYt.4`UIIAGibUIdS^Ih6KH@J)+DV?nrB_)rq/)`@KH$(Dp,SdobK:TD@enQh-V-CSAA1_<&_Z?`\j,)]kJ"-X!liMo/73+EI`iptON)iq8)G/':.5B,E@@R`"0U+ZeT$KPA2%rO>G5,3?092f8B(S=uVWShIRCWReBk*Vn#O4*I09qcH:44i=flhRK.C]_M;h3&+G#!R]:$.>FA/_Zia]X\UW=#KufeVRKQ]-B^0`6-`jOZ`.rk>p\j48/3/,MVpWiauu]l`pZP5Ccch=sQUrN7G,"!W%WEX$*fT/4Or!:ggR'+sugj]'')EOu^PP4ppAj])aAg\iX8896-+:e+E7&s]!!eRClD`=c(Vq^1*(cQFm/a@OVGDLmu1ot%8P`Tol=0=f7DA-;B;.`G.NtX7hl&=ss#cKRa4]P9rf6WZ$IM7^"uXI>CdOH2)9hPPYd9n4%G!bb&JNBR/8Uri,Wgn[@P'?0"?\9kL,$'Zuhsa1hC7YNUfZ/QY:Rrj$L>@:\K_1WW'1kb$0tY=VCco,6%u#5J:H%j!<7qnl3Xh;o'G2XZZJ3-Y&@M=]=,Q`4S[1O-FbEi`tugETUGDdnqIIr@[9%!n1[L+OdF<:B^f+'T&4:FZ*c-CSS11O-FbEi^VDG'TE?d8#f]qF,Ut*I$T5VeJof:/@I7+E(o68BtV1iMg&-g/!\KYgE.f%T,318US*QKkMYjK,WeZ2M%C7$guekkcML/RXWrKhSV%>2[0lA>]L$[1,W]07)U&k3J/72$oT7bEe^eh8%loZ6GappI^Y2kM!:1p5oF\I6q"CSEX"DB)/MXj\t/p7&MmX3#%bjn&?YWJrF^l>%>6n-)4s!JQn9Us:kP:S-BL#+,,/Ca#%bjn&/!;>aViSNBZEX"p"Zq>?C296YO!]bn%jf151[rA1iS)IS`obgWqdl,m_0#S_^3J0*J%#B^QQ/i?gO>GMlEX"CVNt0Bk^O5"N?$Zore?l?'#rr)s[Zm:J)0,pL7'oR,"uXI>C]ZVLR`A0pHR!`kn>I1r[j710,\KB\CahAs1?8k"LhN(7$u1k[fS$>k1F,/03dU^_!l\oenSZI;otHqZJ%;NAiftHl:p[>dr7H.b2Wh8CkJa*pf7UGnea'ZpW8$=VpIaO!<2E)l^R2M6=fskqiR2jLXP%.1[M_2TlqF1OD;WTF+b.mSD*.C$&TlWP%c-u?&/Ao>n=S]FP4\3Y%"@Eqmuu)PN>t$^FJX_1jXjE3_,j-&SC;4uSGt0/+_*mWUI$3"f5BC32eHfnF%GbJ';?^)B%;7DBX-F5gdLnOE2hR]O-AYOM,WSo"gWF.*jK[mmb"/pUIoRcR'b,2h1p7'4@I[lcCbS+"!Spm,rpSrj:!pio5]TNFham2YbeSXa3C[9BeEa31`7ROG4U`&cD#sU5@KQ$I6_GHhJP,4'u.X5N]ChRpOJa(K9_RF3ma$4pQe3Tig!ZO->aggXG=(U#5o'O39L_)GIq0@0&,NiiV+[h-]pF,`\"g0ENWRD=3fa,H&--qS3\$5#"1kd8ob+na;Je\(.S0qeg5g9Pl*h0WXG/rEB-hV$&+kWmL`/c85-I#gY=f9rpp);VjQ+;c0*HeY@%6Xs,NmrM2+*D0[E7S`_H:u)lh^QiN@%Cm;_m4QMO1k.Mt;-TDKtRimQ^C6-b#EU#ZX)O>A"'U/d@4W'S^:'=(Za&3+2!]D3t5hS"IG9Mc[[h?E%4W%m+5Bm5oR*8=>MJO%dc!\BA"'U/d@4W'S^:'=(Zan2MkBjOe1@\,41W-#;"IU&TDVKZ)rf,6C%Y?Lti@.l;#7h4+X!rnkJ?!cm=e?)")DqOsY$.n7liL%S+PJO)5>YQD;e@Wn6a,AS2JJYmSAA_KoA?r$B0c)cEX$*r)%[D-.`iRX+D7nb=Y",=Gj=WAQ^?TV;pjb[>e5qYgLa[Q/6MH"pIiQ=\j+'&S\#?^5KFEK1J`#qA]P`#&^`)M):TdAYR0A!3O!AWpYA"'U/d@4W'S^:'/CeF#`EfSCYU6^/CN]obD:tA?HF(L+_O&.7&qSG:kP:S-=lB,)%[D-Elf2`+_O&.7&qSG:kP:S-BL#+,,/Ca#%bjn&/!;>aViSNBZEX"p"Zq>?C296YO!]`W:G3^rYhPY5':f4d'NTVlul1<6egVkpij.8%+'EO5>$6[GP+4fUEX"p"Zq>?C296YO6Is9s](?j)rVi[L*U8TmD><>1Am]]%Ar@tKbo8]adXU++-FTO0qi>EE2U!&':C"fajlSQp#M^?'])`i#fLIJ7&rN\fXL+Tf"0BWb%Q`k2rIJ8_*G/Z[@b2CE/b_hQ>.$LVj6d5h-MnZ=_Sc$G7Pc.QZnX$!ucFOr1kOUK<+6EtR(9]-QM*\CcXK@VT6,@Ie`=?,G871r`BLfklKWs)F"klI+>HhUjS4^G#]K8u[lK$3fU812D89_DJ[`u*4-%CegmdJeL+k][uZu]d&rmBP6`uY!QWUj(en^ck2+1$a`$u1k[fRtf?1Ph'nR'#KVs!b7$ot%7_lF(s/]i'+`P'alYh^C,:?"EjP4hpe<;BTn+&kDWBON[DVjeGD\jp0WSs4pRJ'u=m[@do=Cf]rr:C.IZKUPr6@I-e;HLFnRRo:f?Feq\a$+G'/X*)?APmpGa=3Hk`+3F&Anf@)Pjq)cd%P7TLq'?1ckRsFmY(E6A6YZ`"j90(-A@-f30XU>1B]uC=gLpC2)5L;Nt(TG&")/;OSf;73Wr1,a1A96Jl/*mHH?h)0'\[RE5,DIBWC6jij,S_tuRBrA-6$)7)BSmSWAK=Zam4C:AT#/lcdD4D1%q0hor4r:9g!*3>_/:?'15lVi5g[tM^ad,,n2qWGiem$X?kWkK.]j7GKE9-VMgbSc@JcJTk'd%%qS2l55C.Z\DD;%a&ks'EW>^^h7LN6PsYIaJHR7hS.<$h!;GHGUY4E\s/Y'gC&f'r?HfOED-Ds^<#%W9XprSeQ-ea9R8prSNEk:Q#PX^Bb]FW(Fr[emk^YuBdcY1]JRGJj0q9U,d[,P@PoV(:0@8`]ZXNE^ld@HNiZBQ[!:Cs&!qM]+MB:p+!XJ;uc&*'^KRCp%Q3Le/XPD16p5[W4:@(*+3@\k[TA`uO7Nc@.D=N0?I%?g"!_jVd1(gOkQ#O)jri0'3Qpf'3$rJ*&OLB:-"OXi]4KPG("#JLKj%3la'X1E,6Mn>dc2o=t-Cq!p!]Q_,2%KATo7VK9$4FR4d0@mXV1ZsOV?"_E.XlL=AfBRK_A6%>Ja%&S=bLM#rNiT4$Yj>IDM95%_lnQ[_nm*6Bg?.r.![Gb1PV'+j[Dg'1aKt>"I)><)LO]6d`U\/8;uc]LF]i%)lA]=#Z3/VoZY7D_6CeH1J"fSQSJ"&'*,]_p?_M'MLVTrJAJ#q\aj<76$k<).m]H*IsGiV9'4F5F,B.o:OpG4f.>j<2TS$nMn4E0YG4Iu,f`N*aEcCWP=SAFkZoCC$g_\o%%bh\`%GXqVOcZ;8`[!I5agIm]RT=L<7cV5[\rOM\#]an/?e9]HhI;[K%K:01^Er#ad][%H*?HfE3./q)cCr8miH=G)9N+(#i+UV](OHbpBE60T3=n@8XbZUs\,qjI6G@N1IB=?Pk?Osb#43+a9DprSqccdk9b58eVqe_C;SXmCmo1aYjmas#pC[[6YbIAp$2fIHGY0+R4g@`lYQY`DRH%1G5nI9VCp`6oMRSWPTQE$q@]rui[_GdR2)E_i1CuL-XT']HCG1G`4E;p4Es@\O=mVIK`0Wo^1J%(8He32,RUO[k)-f:*hLDm[/jl9/4oB-h`dePIr`.CIAc(?\LZncBLn:$%1Dj06F,$MAf;n;RCu48g5fXpd=`0JK[84[UEd?,XH`_edG1Ah@8&Q[RLE-9WK&]dgRlX@5)Z7E>lecaf3La8[qoqmH>dD"DCf8QMX'O>kEqQ2]60_>$VL.4J?fXObmtRH^Yu.t!g36'Rpu+a9Uc0Bt;kLD(WJ?_a5DuFlrOrcK5P74DUS25i;5,^Wg&n-($jE!RLAL1pE;aGL[6@a$_=hQoWW.qXC=fH`la*i*Fd%>7A1)^I,W%5)fQ4-Ne-_S\&iTdIPh+oH*p8)4t('K@Gmd\X'U4E]uGP_r6&qUX\HR`_W#so=EL4(f9/;2Ia6m2\ao`pjlK9.cG+ABp[Y6Rhbl>FlaNHGGF@:M-63&iLn9Tn1Do8opG5qOSd+ttk]lm`YB$=G%Gr#'c2.4M`CF(ZeSb-.an+(Rs4k@sfb]WOFt-k4T(XIfZLt[*4_ITPqKcAM>cq&4JU1W[B:(l$RC]DhhiaH,pA8>mQM8hAY>W'+iKMf]jD)5?FWGr[B5:EVEU:nff5c:Zm,e^/IP1;P?Z,d:*@VA^X)A3&d+4WNP<,0h\6c(k=2$YYTD(._L%df+OaEQn85)_W1[fC>9uh)(IUE,8KnQftp\gPWhTsPc:=>KShp7r:.o.On4a8^)forH11L(@Or'#E1@qW1"]iRG9Q;sW)UGX"!k'HOGDQ"R?+L#PTC7B*./K7K2M#Q;8AIkq\Eh@)`G0*e]5;1QK^HZaAc8Q94PLb-SD>Vq+^'CshX6m:_Jb8Gu`GTrsHs-)_#&3GB3E9fPIBD6H2.pn,>^?@s>VG.3/(Xt8*im![;AOc[e6-FbFnUSZ<2=$L?s"S%5=9l![P.RWrIIKnE5O81!-&`:o""WVRfA!f&sLnZb>O<&4-YK#O`dFp1X<@hM%DqiQc1%C*?#t[W_r6hY'YZnU*g7Ea\XhO:$*\6FBs3><25K6m.[`AF,hQ(NZhgm#HU>t^tNLMnETfb`tj?D,J/qeo#:A3c5oH:99$=Bf0n&Vc_c^CnDe5PN_7jhp:s7)''=M_&PCr#GPTAd8[[jTK!f_*tZ+cT]KQHLAq=:c@:)LmIoP2eR+"F$96q%*-].<3bSD'l'8Qn;$\apG4dU;A\6:i*r8$)=fRrd$L@b_t8q&'@s$%]:#$H_5l^Mg:#B]2$@emSMW]-(]m\S8Lg/@%V@jfQI2I;\SQfi1%2MX;F1h4g/H(['.E:I1/oqT'(7c&LG5:e#)O#_i$KeR/$A7&TPAqO]4]7.+@8G`l"Q0b&Qj"/5q2e\eEp-@Ht@^dl.N1W#C9!)0%naYp,BR&I>nbJS/=AlK?g:F21f/G4)eX%"oGiPq)5Ft`mW8BP-IMG;0%c%X847gCu7DpHISGBG`gFJ#=RX@$S]!E3nDU.2"k>KVSBC=EST<.Y7(*0jO3iJUifos#HI1soWadf&TjpZFjq/Gc!X1'M"lHgS29gDnb%5X`b)]0>l7F(=13Grih4&ME-;t"Zg;;A$X@/iR.+2FSe[dLaYJBB/#'#K83j[TOL:5bmq0dqu8u0,,5"RSA?')$m(!\K8L*q0+/AkQnoTAhDmsLr^0>EpSuuX[JG$36pt"MA'SHjEs<06;0.K9HhV#%J@bh&+?8]hnZN[^&31rX2Eu-HCc`>;.B$CiacS!952X0l0RVuFace7"lIl.*Pj4)Dib0!@YoW@?-\6n0mlX@8>O+(RClS<_;7!4i4^#cEe;s)2J_BP_C[dI#$9#Ht^Hcoh(es)$?(;.F(=2B@cA'1mG'X1c;M29B]](,b1>F^D3#ttq8fhia'X1E,6Mn>dc2o=t-Cq#PQ]Q_,2%KATo7VK9$4FR4d0@mXV1[!;MX`r$9XlL=AfBRK_A6%?q'V_>^jm'QIa440M\5^HDZ@u@]'&A?V\VZI/B(gWRiiT->U75o-p/n-Q^:b#S,(3,P@4Fkt()s!m7J(4JbXIuV#?)7D)=p&)ePEg#=`>]]dL"sS(hbS^h!c9OccB#U:V)!25J_?8s0dq:=:\7Cj]COXWh3D7n6]3O,;aa*6uCc?":*d1bZB^OF+Zs1s7ZV$JQrbg>:gS:lpkO*oT?/P)&.gKj^>Y*&J-W`6FgS:po_(FC6dQa(7r82dLK'i(OJF)U``bI]^s')M#qKt]+(0tueT'Nf;AN.aK4D\K+MY2`5TfQ4Vd,SOH>Rgc^1HiYC<8@i9/8XbaKWLjpX?G*7PJ.En,WaT`8Gg1Ct.>#/cfa&.t%-0kW1p3J3)8-?FnR@qW1"mDh#!=V[qq>-hXQXp72YSAF`:'=-)rl%T1p8ZD9B?,;<(F1,c690[(90@0=FluMXDN6bOCr6J"njR6WiWd^//s7bP)c./V,tE?[r1*24oLm:I1N,9R1WV3-af3e)qC.;BtYM%X<2VGQ$+$8)FDOZVN).Xj]mi$aU@-G?!T_69muOj.%8>0#>"gV[6;a]DY/@U1Yq;%#-KL+B/k+oP!%.\=0B167kW0b%NKKYpHRHI$mI0)0kW2Ai8tGh(4@MKoD8H'e^_i%U=;G9iUYOaQ>(E,b11*@]B89Z>g+'Hp#n'7OJ')s*BOdJ+f7r,gZA2[JTg>9`6I.M+^jje\&!1E4hfonecEPA!f&s#j)Oa[%SR8C"Kn&Y'9:4iUEM6j28b&oGopN6:g=lRs4Sk2pCXs-DI4IEsBMhDU*4j`&T[U#e^rt=4_9DTrrQco3HK(gXl>DeT"ONjl]cObS`^l]rkG(T9qE2*b3K'%!)U`_473Tk$lUYrI"%B2rFV-9$O6Xg\+mZI'kglc0YlcU7r9A#/^dcc4H>4V)J!]Da%^]UlsiQ)?mcS_5k9r2*3iRZW&5h\bFk7LZI=]kbPI^k199F.hD/eg2>>/s,2h/dI6*p9C=00rD1urE4lb*PFg7#D:ZMaZaaf.^kt!sI2]Or[JjC>mh^jiNgobt?_mOX8OuP$H-:d=\AUu);t]m&3bGGh:AgA=&(J97Y"Nn\k"gUcRZ'tNG5";GM2@.74LXdp(nTQ*I,]jam!R(r>d)NBiN)Z`G*m0tY$R.4IO.f#b9!lIBA??10O@M^BLfY(;]Xf_Etd/8*lp]`]k;%:3Uu]hR?!o/LpB47Z6;qkp=dD8Ehp.,p=$*a\"rbgQh/dd/LP?e%\'pb^"<1P_rRZKpM6)Ls,rK0QnoSsSA@Q,P;u"m^&,.u#?@qc?_VYEVQIFZ[X+],B99`kX]XoV=D%(WW9O2,spIAe/2qg(82kd<+Tr:Z4lm5jt\4)p:NoD+_gb@AltH>1jZ?1f.\HEN3&?,-*FpE$S$^OJL-\Z8t8^CS?084r^Dg#Y?`?QUtCm]tOUgQjBl8'Z2PbXH[+n1iDRl*R>6?=N[#C3,+Fmo@a75,:D%XP_[?&5)*7L3.,3qZa%VcAFW.ZNXnU$CbN5%"^Ou_33[GS7QM7t5f,C!GeL9?5\LR@1N_LBSH+$sqh77_r>0^GAmD8*HDLLZVCN;9rjh>Qujd(rC#"?J-":cC>iqjVCWFSr2Y0&cdlJN1"51MHh*8f)(R/Sf#C8@A)DVt8=gE7cE%Ch;7rs1oC,`A8btsUI-lB@%hglDs6F/2cK5Pkk9^WJ8dUE(nGDV>f4J2,k7$f1:[YtGq/U$>S]$:>2PtVeDH/oMqe=W9UCrSmcB@@2I9;]<#q&+/7jgH)]Hc6VA3saOmOnik8B_s1@F!dSMTMAsaX:G]Y3>b2n0(G6Z>B-U<:\T%$pcDq^JMB4k&#J+Xs:t^bMIX1Lrn?Q=+.XD^SPZt>Hp*WDX=L[G8Df6q87bn[O9<;jRW'poAmpuMhl-%\jtF'%9p:0*HLsjJi.-!["U/5W#$Ii;%Hp<@B1B\@.?k"71ORM=dQtB-E=]-Gt(Ss,qk)0gFmMF24s$1))cW@X3XN,4X,s;4u`#^2`pfi";0`YjpZtZka^V8Y@qUtk/tr\Ead2Q3I?hdXPR?X^7<$S9c#hV]ATH!k&<7&6a"R<>A_[sSNLihHOm9m-UA1iUc\*,S#fQOYNY-X4+?s%?'Y9!4m_>>=9#l+kMOQl$<*9%SiHIDc_tmX\VY<)kGd-'cIrd.Us=$C2C3!Qk:UOc;[Y*UaZDOkoAYGBrq23T/nEY[).YIBbI-QK%S0.je)u/&fc)q9A,Bt@m.ng3gi`&%-$;'p3aSuW4*99OkcGPaC\[WA0L@kIaj]GQrF1b%2^?gtC=E]S25n.4?bH;Mc.CHFf:SO/nNDt%A0C"CL)&pB62QOoq+FegJ+Sf,g<*Cbl-XF*qJq%b?6gF:=@r5L"84kc8>o(s<+O1nGbh?ZbZCo,e.j:>%['[sARmW:<MrH24YEmC0u,U2"1Io"-SbSc@JcJTj.E6^.cp6(,&<_9X[#L/XB<*crU`EeXs7t96K44/*&]a'U6[i@DO>0Rr7>s!3Od-_7S(+-Mh2_E+"?S69sI\5Xu?-aBLG7W3kqKBnc\P)fV6s@Sn\[m(@*k?Y]m'^/*qt2l7i:P6p&uE7UgU1CZkI#2[[(F1!U?(6BVp;!HLP3'BoU(ZS-NnsP3n>`\+S3_SY^tH=-%\>XmFkHB!IQrHp/(\X#HRmW_i)S*1H^DTJ4ekW];*D@8om17K2BlJeX>906#pG8b9N.0%`)YN$R_"dEo>lI)[5=!^o%KAI$DhK1B]='*k3Iur=4idU%dZKSDK]ll#IT-DWdA5Abk7>-G["j4AM%E&HiUEs>57/e#.r74Zrfk<3hIP4d3=02.o3EJ%ljb>t`D[rH1de_-&MNmGe:_2W/9HJg[5i]f&8ph)$?rUJP;:QC*=oj*sV]+cLAaeg82N3USlfa14Wn(p^ruT8-f6gMkPd_VG'cjKl#?&5g@eI;ac^"#\GiY)H3DCPp]hV3&EsCBomt!#sc#;@^I518KE=#3WWa>XYaV-\+a)92,B_gqN?B)iIUU:3<>ed\Fs0>BDnqna"HAWLhe@9YQ>0tSacX*p5[egN$7%PKA#%O#VG_ffaB?7;gc()C>2Wc;XfCBI9p/JfYEq?_&9`j0rY)JECh14arQ`,8[1UAE&?Wa.:dk[29gNDbqo#jbIjp]\`4U526ls$c#S[)66b,M`YEO_Sr`*07uq@6L-'D6](R55D:.5>HhN&cO$/cKkJ='PDe`$GA+olg58Dn]&NqXALRgqG6f=s^'GH/d!FC@B.a\<,hG`=P14bSc@JcJTk'addp%o:]@i@igUue8)A8;*lDTA]>LV,@E3O-=k:(:U+d'*u1Dn$"_*]nh+-6tXE._&2;C*hrGR)XJkSh&i"Y,^@a@qR'`Uhc%AcP\M,h4HPhW,`@I&uBA$D:STkeJknV_l98XD:c=*l&*1i]c-VQ*-FF2G-3@CT?Z%VjB7eN=R4G/D2D0IYBW!s0P,]Rl_655J,$qqImEC;/fl4_13)#7mHV9Bg](:%.kLUYmEqGt7brS'>F)kdr5Hj?(3%OcIrIgJ/B+-q0]id36tB?B)2r"Li#t4%c7j\?P(cP08[IOac'Yh:?+.qq?':_um``u=%+iC7bD!?2Dq",Hccdk9b58eVqpe\`1(\FQ>)qBbn@3Z&O^k;scV4fh2R-6#qEp!5>.8Ku=@AC[+&G20aRp_A=_)g36UIu1aXo^s3+dLoB6^Q5+RLe,PkoDn\,X8VdBaO.#/cfa&.t%-0kW1p3J3+V^c=bjIW"01NUU2f]&AiQ)q:#(A0="_eXXJLk\D=X/RSHGn%m>8nX27!.+`%_IB01(6e%W7kFR=[0itMA2J;7%,>c"13-6tXE._&2;C*ho%J))?#2'rj2rZXKo@#Nk,h'6Xo^D"U8C0)<]KqJ=Fu,0r#YqELUAfW](Frc8as)2P5aA'SI!EsD#\'j?a`SEG$Xt15IR5W1M#.DB$O[_dAq8Dd^AuT\nSq2;JuNsgYDlNqRfqEDM@A8HM&5#.J/@@LpK*oMhehA]p?k[Lo?tVc6pr(5EsBOL1Ct.\=YXPCL,jmA@*VS^`Pa(t2X*&,b'^\%KS[]J?7XMrnn6f7*0Mq_<"6r[u4cUF@G)E?B+gcNk-9T>MVJYIZQ[eo_cn?I@G?TI*FV(6f&k>:*)06iZ+QpD<9VdD0h`Np!T_>]BV?CoNW9+\pj$jmlg6o_-Qn5T(-ePh_oLo5_hPd/mM:ug!(DCC_-4MkU'pj=4QblYqqP@d[dL#oA4mu?KE+),tcd(g8b$_X#Fd7"rGIKVc.f=VU&T.iaBCbQC@,t-EC=Y@]d9i,t`Htin\^nPkiG#l2'#*rTaPtcGj,9qE:;QOjh&\8CEC)0;+t*KukTqL.k,;AJM9fcI54OY*mjB)Im=ZDt-bW2?\DPc`BNN'mMc\%'jZK_)lS<_;6ta\Lo#[6(a-Te/&sIP.4]8/?YN,Kt*1(M`rdKT,&([XcWjF^D3(d`aKa2oC,R(n@^:.]ofA&'0MDBVj_*or33&ECo@+2D/GjYEHE4(Qes%qTHl!$i[co^=EiR8>r;-m>Tfq5Re*$c0@Z>.^F8mJHD>rl*6/'imMcMn9gk:.0[O6K@_X:f[qDj27(JRpfEST,C!lM%DtG+K>T'/:oDa-/5a-^W3d2+I&/(G!PU]`^9UYA(Um&A_[`i$'fZtGBmijG>B=N74>lW%T>+_nMi4.M1869j:(X'6IbSaY-XO$De/+$Y"2.tRPkFd"6Q)jV"#5sJ"S:RW[`K278(c;j:;>t(H?l3qhcV[Bu$sK:*hY<_0C<.K_m(;BDFp/u=mV:.PQf0rWj6%b"LMkRXhD8tN'rj2rZXIVjfBMXC'<[ZRN>OaPp#"e]-Q]A8`NR;.?8Pg8V!7o,DIUM\*Hn'E@*V#:Ugq]3:Ws]4La`9XB/#9)K1GHn;*tB/)(pSq%NIV)jQZ9Al&NCq45epLhXt*R]=dD5oGon8.Q[RSh7/6J\6.&DKo]6s*$rUIQZ1j[5iUFAGKthgNN"CM,0('832(VQX9WFa[:)Sp>VaqV(;E1$9kQ*#P.!!%CGjc\6-2HB_gqN?B&M6:])*,0@t-m:9.a%ZPP3,jnb/%l>5,p/?=s,=0:#smX$(E1Ct;W(c%J1;$.CBjX5ckq8&T;ds/a.Tn)86)7HVb^>0gVU!JYYlW0t@8@J5Y6>rg7IQ8LuU0Xtc?`m\C9#J+BNKc$$iAlPe]p>rAJ$+`+bP&X2bj$gm2[Sj+F&9$^p]PaBmLA[qWP\=NlJ)*F>`T:L\nTq?f6^DEp=5B5(V$SYi;^@/Ptpm0[$@CT;VG!>qHm?SdL4E.Ui^%b![TA9BP36se]595T:Lg9$/s0?ro0P>p2Unm)&*T'O][(:T-zJ0K_.!utGV'*%ESl7oR6mTp/!!!!"lLgeR/8'DhNz`\;%U,N]C7zA!f'fOlsq+7ZNtcVGgiGYJQiT"TSN&!#.$/);qI7bo)7qRbGJKs+4TQJT/;IjpV4i!!%lljpZ4i3HKp;HA:Skz:p_ohJ>7^c1VE>9p^XM%TD$YVT*B.=Ge&"`NdX6C&(U+5fQG!R3D3]KDYifWX:\Z=o1K-C1iPUHB55q?M:&jBKf4rmJq\O$,adK>=&!OW:p3LAmn;5k]^L"PuGMN[ccu*iHg,%nE[dVYZF=#g:?B#3&1HOOhS\-N1memR)SjZVk@cdI?%GR0smJTYZAs9)FaL'XeIW3?Z%0-A.!"&dK"un*Z3J3j4J)I9hkZDQW]437\SoJF*a45Ol#+:!jp3*R/aOD'nbFu>oS=]tM!bhH>'m*<@Sj#4HZB\DQhWmIe*r0hgI3b"7qE6tLuAM=)$^*BVVC&8D>=Jg+k4O+h7SMiPk]6mVn&#[]KZmJq>P/#n&@.sN[l61HQgk<"tI.kN\09iTFD+Ch3p;EpdYBW!SJ)h9*Vo5ij21@NB5i#,=m_HA+)=q:DVjoeP$W@,U9u)ug$8hB!!!"rA'P'ER@0J$Q[b\dn)I2UcX3ii,qjI6Q@qZ<1Wu@KTRCbW/[C3Sr+Oif5#Pg5]\T*O992@*Y,JreZi8)1g'GCBG7GM5EiZa3;hp>-g;:bG8Y`6#]JNh"Ve4`Ta\?KM[!:HN[:Uf%rn^\>S*NLP.5ijE9fl?aWo:SLn%kD)FY0sVY,jl#)2:OLsu!!!#7FNbV!Qs@rTA.*="]\T)DIt3G;K?l,H)(c5c>caVc[meUP=:2S;G`7&J8=M*f^0@d_%Q1`)7]D0(*g.>h_;eQ)*^EgG;9e^2[!!!!qBUCTK0PTDHH1u2MFEHm(K?)+U3@X3rmt!;XB3;V%b=Z*#oj8i0lVm*k^1$'1$Ip&C^\`O=.60CKjj`P$I0L+pqtJ,KQEOCh\ruO=rC>E45e^LbTC7>9pXQb!QgsnAq!!`r9R2k(SX+HV".AIh0427.3-hem"q;GSbI=m*Lu[LHJ,QMCFS](Sfh"C)iiA7(l?r@)?:mdV+jPA3n5F!d$kOkEtZ#Q)HHsQdQ!!((NjpV4i!!!#7/Bet3zJ6A6qz!!'>ZB)ho3!!!"2@EniQzbefkNz!18I#!rr<$!!"\\Es;UE!!!",(?Q#*z^b!\Iz!.\4>1B7CT!!!#*0P:@czAmrsbz!6ic2[hE!!!#C_OLW,zR"[O&z!&+e%"onW'!!$CBjpV4i!!!#7/Bet3zJ6A6qz!!'>ZB)ho3!!!"2@EniQzbefkNz!18I#!rr<$!!"\\Es;UE!!!",(?Q#*z^b!\Iz!.\4>1B7CT!!!#*0P:@czAmrsbz!6ic2[hE!!!#C_OLW,zR"[O&z!&+e%"onW'!!$CBjpV4i!!!#7/Bet3zJ6A6qz!!'>ZB)ho3!!!"2@EniQzbefkNz!18I#!rr<$!!"\\Es;UE!!!",(?Q#*z^b!\Iz!.\4>1B7CT!!!#*0P:@czAmrsbz!6ic2[hE!!!#C_OLW,zR"[O&z!&+e%"onW'!!$CBjpV4i!!!#7/Bet3zJ6A6qz!!'>ZB)ho3!!!"2@EniQzbefkNz!18I#!rr<$!!"\\Es;UE!!!",(?Q#*z^b!\Iz!.\4>1B7CT!!!#*0P:@czAmrsbz!6ic2[hE!!!#C_OLW,zR"[O&z!&+e%"onW'!!$CBjpV4i!!!#7/Bet3zJ6A6qz!!'>ZB)ho3!!!"2@EniQzbefkNz!18I#!rr<$!!"\\Es;UE!!!",(?Q#*z^b!\Iz!.\4>1B7CT!!!#*0P:@czAmrsbz!6k#8c5@HVz!)Ub.i?8;E"onW'!!!?DEs;UE!!!",Q=kQi^o.86!!!"L6M&D3)&P42z:cO?SOF]Coz!/7*@bS_6Tz!)T>GeW<'92)&kIz^g(WdmIji#)lF/5rY#83!!!#W),ZnO%/Ng'mqi%)!!!#70PtIip-$,[V7eEJ6psF26q!:6gqKO2+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sP1;rs+[XK9Q~>endstream +endobj +4 0 obj +<< +/Contents 47 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.1048adcd672edc38b6891526ffe5d136 3 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/Contents 48 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/Contents 49 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +7 0 obj +<< +/Contents 50 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 900 /Length 87784 /Subtype /Image + /Type /XObject /Width 1400 +>> +stream +Gb"-6GEgTH^TdOc4hLH;HhQftn,([SnG?Z6A"0!0c8jQG@tHEqk@cW<$jKBZ(__nF(m?]%jIC9$#*\YojFPu+PcZI3DRH:k9_\0Ac[!g+DREFn4JuT-W_>3.+tm#u[7KLkpkCR'']lo?(TN]Qirj.dG^+b?(%4>h?W*pNNqZG*bCVXN2p!>_O\e(c,;MG45E_q"TNP\G3]1mRpK@-*ubfme,[t;O-O#4Hlooc@C_,Lkpj(N;hfF"qD_<;5eRG([691am)#sKK`m$.h$\@H>Y^g9L!IEmEsrAeu`N?%nkAhPn@Xo6psF26juPSE+sJ3T,%<60`u0c#X/5hQ.dEGqOa6Y"]Y_^Pg:Gjr-nST3P)`1phSL]fY2EFha+#X's8,/EVZq;WTs?8G3V(Ai$OJa9_-lDVq+IPlNnUPRJ;B#;Lkt7jYMou@lSd3V*`/>%fo.^,3.1(Zb:GDIc=2O&$WmI5o9Y;oM:%WVIs!M`epQj`RI,HbX*DEHbO@QA,*PEE=^AMq[igaTT6Z;pdVjL)po1pF.U-iNW61F0?>mOJNnsT=jF(OpmBd16^6btkcR[S8=,r>;(d2l-IYg86i$*pWCU6D&0+GZkdW=mV"0$0r"I<].0Nigo60ge+$[rE@(.m#uh?h!)2D1s"Bp6DU\02p/*fag7p<:ZoB4NTqG3l\]([/4X)Nao-*%qrUHSG_ZcKo-&u\[rF8\/-)LS5qrorSdoH0@!f"bq@qEgBN8bVd\afMqna,T3Ej="PG@jXt&iYAVWbJI-:^Ie.:M\e$ASN/o\ij>50ar@dpq0[q-$\)?gEh0RgMD[WC;m]HBlpW50%@ac_J*Gg.0J\4`B5cT55f"p@Zr(%*,3*1UtN"7;_0=-%NVj^En?_b^%bc0P\I(I=c;tpXOc)G/G*_UWZ`A=leI8#qYjkREnPJ3./qFToC&d`\`2(iak=J)!#[>phn["1=8k*7-:^\[!Ugl.7$-&Z;fqsqT\]ZKlGXs/:JH[DZ"@,`MZIPBMk7/-;N0220d&arDp8frTN3;VaP#[6psF27.dJ'35`!7V[\\Ae5(6#',,fN2P7g/S3\L"qKojacf1-+RJ)c68ZQ9#Fn=2OhmW"QI_cYbG1E\O4Ce)ZqNZ9khQO'WprQI&9'\_/hJ]>VWM8Kh3@t9bWBU:TF1h>Ur(":jlG(O1g3^&p6ITT?jia"dMH@']=kC\/cnF*qhfn"7`D--tnHo'H1[N."C=N-.pADnXfH*5(/;a-qI)MDo5rPE2^[9O#PVmq.I3)R9lE1*9&8,sN6]9[R\`\KlX"='=laNljj&>oSMgehAbYb9C@mEFM6psF"kV(4(ZcM=UUG#ub[X@cE(@?Ge-70VeSEub/J&u'o2WG2n:S6*c<3T=ZI:i+I:p`#mc!@^9rOV@S\r"\f>rTpK*hT8Z/iSnFj2OO9aX<="ZnWRUmj\kl.S5fH_M1.fDcJU=12J_pC_oILJABn+GTB:(HG6`3=.GYgP&J5Te&N-\_")4HXZEncT@6:Lnr4ePdq2/8D3F0d8qoeM=j_M(!F`Tm$mr+_MQ"r:V2(r:MC4?SfrTd&P-'7*1Va54UZ<`d_fX4LZU436?FiijR)DKIpqRBdtX)Nb7QbLk/%NdjmW60G[+)Wm8ro+@[RufhZnG(+(6VaZ3Br^&eM_hldU!;:"(h_L,D-&D]SXPN=&J5Te&_":^`#6f!Xj>:-.2lhqb%.V_Zh?.SPe$_#SU4jUA$lbQ^3l?HBVc-7gXiRlhJ]@A&eJj0Dm$41R$_!\k,8(U)57(eJT]+qIQ-6^\D3K,>ERRj3%[Fab<)`04o5_'.jQAcHoZ;-*1cpp5bZU`oU?(-B5mUW$$SD:aJ:2uS$71fWSA=%&J5Te0g2#giXFZ>^@>Fuo$n]55?Pg)e[6@)aRJ=j!?XIROuZ;eS#P)%1Dj0Dho(!5n8\=S)kI/2s)!?jf>hHrA>X@ic9D:$U!2*\^Re92D:l%t/(^s$/!I]"7d2iB50dP\%ci.KA+^dYfXsrYW>9,cQU?[)HL`%HRn'"^N<'V'&J5W&VeId/n9LL@qN%M'2rF+Q[+KlLkWSeQakWn&P;]6ef?IWp>fQ,!$^[jgh:tHqD9Gt^T0`F&6/B$a`fs:>YA;REXHo'k1\5e3@]4Ah[on3;m,2a^2n'$C.cf%uEi>[dDlE_qZQ6GUH1QBrE.+cJU=1(7CDucp,$-.][X:JXQ+oP4BT+qu9jR4R//E%#B^qLkpjN9lk'IZ,n%QP1lJi<@Nm#:0O.TN%-(MSdWC2H$%3#MQZAdIpDVr"V]L#NE$cC:14Gbk)bZ89MlLj;q`Q'>CG,N:sguU4tD0G8#i7YI"4psljs59Roa:QQmHeTAK&J5Te&Ug)`isbBg/_kiskefnd6q'8fImpD4>2RY'm#smjAbIL8-COQkGk`[A.4I/5mZ3jH\*hln1WM%lIJc97(A8b*C?(WIZ_L995"g[uLEULRbDG5V715@bPbDt)uG74JLe>S]rJ2JCZ:Wal")X_5scI.[2*6:-8t[&"s!>e74]c%^CIqT0H.]OAT*'Apu6GgPr"a%r:h9ZG&jhtZ6_cR[RIXSJh8OhT1)M)-R7GO;kPh]^+)._m-lr)12Ea!E6bU>Je*1UtW%S_D:bYhZJ1?glXTn)"!JOqUF_p76QYFJZp'5"HiaU\:oH+o9\?X*md\n$u\"9c<([W&J5Te&L5s&EtmB6pMd;:,;\L7S[V__Y'l(RhPRp"Q(:Z@D8mHX?]C[i5L,q!LUi:ACs]9$`iXTbICIR4rA54$E+_4m1[%om[I7dgqHrIL`#0*u&J5U0j;'=KqtTE6n)l*2r[LQqCI9*DZI!fi"Y6!k[=TudeIk8RKpWs3q`il;bdGbT6p7cJ#(0,9#cHrufYYA?r]T]1R]H&h<@a?^BZ6*`Kf:74(K$X8)UT1S:)s3=J1MF-HOk&O2acs-A\\2.T0mu5k=#V#d$oY.5@,!B"9\HET[d?+X\4fW=?E9*7<-1[gh?(,?m=jlk7RTX46q$[HbUfW=4+G<-_n5Ua*A_DA[K:#OThMHZ*]da)##jY)e`ntiYJ2&8?9cc$M3t_TlGjcQ+t;!nEn),s3H4o0Cdljjn__P313/Q#?B>(1[VXj!k(u]g3.lC51ZpCY1MF.Ah6H.98^ljgWa&VKTfim[D3t58Vg`P]3;sE@?TNojWZa[#Q/ZjZJ*Hj2<^Z]XgY?-a5=/VXBlSWCclIZ']ZfLVFRIaGPG3h6ee[T>i9e>94g+e%4F+O%3LGk_#9qT*iMFH[9ZL+nq(IWP^@.?jI_XVikrmEMp;%3j.X;$/"qFodR[2R3.hranVJ>UXBW8FuD@/R?'NQZ\J^#J#^2g0;?NVS-qSh2$lCLkpifPt@B;/i*5%inJsQiP-H[W6J\XCu;._AK0JE%.a3&AZI_np]A$Q^!G;Hf\X=A#]6X@7o&1Gle`7IRPEE+S3`$DlcoV/+.-.HNk[sTQ]C_Qe`)#^o9qklpK+JOo's27^knu(q\aSD4`%j)_9QAgX57HYiDiXMI(*nk;0Cg5hp2j-SACp+=VnfeP5-eU8SORpL/0M1[t&B+b,'+eau)ea>X[*cK)0s1lAK8BafaI0IF*e,YC9=*YiUE\Vor&AY@T@gOc$=`j3W./9&uo3^\/U%d?8`caH?,$4jg,aOpI4scmCIa\hG>^BIu!AD*U>/ScV!`:VU+ldW`fc.?$up:cCCe3rMJuScY!Nn(OoGgZl`r-C]F2=(8/D19];Y9ou8d-(2O7g4**%>W>5nL'Gm`r3l44Yu;IgCu+S];s*lO?efGsN5-X_T[qnBkiC/,le?V*TRBmJUhn9ZMc]=2Hr?i6Ea4@cjXjMY_j4RKH48$eqV,aVBCDN-hp,@eBtE-t))AjR1;Dmba.C3.\B2'f?=r%j.ia%oln9CF.B:]dn[GC1Hs0LM^3kVeCpL::ODrV9&L1ba+6GV`J_,[#AU2$daL*/&]z!!!!YLOb"@a:RXjz!!!"T&CPWuJU846z!!#,/IGWUAKE2&Qz+QZ-qTa$)Wz!!!!J:&5/R&8(tCz!(^hP8Xt>S!rr<$!!!!al4EKZ#(d6`z!!&uiA;;(Z1B7CTzUaF"tz!!!#7.j?su5`c!Hz!$Lrke5-6e"onW'!!!"Le;$!cz!!!"D"`X_Hz!!)KqiX>eez!8nU1)#sX:z^ak3sz!!!"L7_J1b>%OWMJ(1G`=j=OP1*DX4!]gA8+2u'J:aK)2&K)u/U!.^;d3.ldl\2\n15jpe&oBb.S^dX]H3.oo8*IBo0NcpcJF>>DsNcFF(DaL!2O,:(Z,gMKP+O6(G$,0&+k62+k!!"GTEiX>ee!"dEeB\n;<1MFi@;>Y%bYYd"c:FF%HiXDJGSA>j_19qWn$AkC9F[NnCHtgp@i6AGGE/Pd3kM2<>9/ttNJ1jjC!FgQ26Y8+(hc1"T%nultmnQCJl:S6/Zl/1CAp-F^jQ"nkl5C%S)ZY0-QV=5j-R8L2!7B$c29,"0r:J=BdQpTN+)Lo8q<_%kI+c"sgcbL`9WleZ)cW3;gC[0.4T128[9?mGZ>O9u(M<;CB!Zm%klnlKJB+F\tn)Cjh8DK\ms@K(GB)?Vc]:!Z-[s)Gg`Sm!!",C+O4AG%)lcdgh5P!2/;tX`pBbWY'6"g7@ZX\o$o_ee(*bBBZn./qmFb4U^Z`NCu21oAf_`Qk/C_]X*^+hND/LA,O?&Y9n)G`h1QQPcG@HLP5P]6dAi8a6CYiMJ:7h0Io>)Zk(cIL2[[L%I)-#ADUWqV#^[[*QOhSCcDV:nhI,X'rf6&>J5^Qe>l6ec20\I.Qcs+"ZAM"rLo8Z;bgDX++g9Q>H))Fr0D,uWl>Z@cMabrUH.je&]-0L_B7jH&KEflgh6akjTbnJ@np2>N,k3&\*\B)=n8I(G`qo.PIcJW,`nVP`/aBX%4jtH:.:u\/na-'Au9+2YM8@;J-!!!"]!HA=9R%N/9VK-N2`X=OZF.?\/dcK2\';eH)$\)Ks>$Esokc"@h*aZR,X[_-dC.X/@o#PoTX_AUflK:@eH4O!4IjMiIB@,Nn@3'"U.!Lfeq[Yl9)V)&pCMi&-fa;QM\bg)?<0J*beWPDobl6u)F2R,qAXg;NZ)f9>he&uOWeE49M2dKPk?R-fX4M3MQ1as;f31AGL$"kXD=5gNmcl_,67n<%eFq>%@h5uOHC[OAeC!$=EmC,[+Q0_d"sg6R[dM5"VjLY)pui$!q7If8B\W5"1uc?hLSrIi04)B([ST2BZsP\&gf:E$abt<#b=C:'.^^3:5'f=P3p+lP.l4r4002hPI^T@HfB.pU6LEZhrT:"r,_Li4Ie`-S\apV1=/ohL,jmF+DUQA^epam6M_fV.@!pt.0/Al#Tot\j7oR0n/cD[t-afaNZX/ija%pHNBdn;T-!D*mWjQRA!!%flLbnhEkC8;dqXLJmn(\@-2059R5J\6.eMss5Rg$m#oB"/^C>lSXDuBRICta8&/_#jI`_W2/c$^#p)!FJ9:S($ibH9e5PGZW)$\/*=(N#j(ao-AB(2`#e;eOUs16lXU,osSjdIqVThL07cALl?!F$='W6uD#rEY_O\Hh8>S/[Q?ogYAS&h5semma!>tq`30>+4$^WhoVBY/R5r1GqaAOIL:l/+%1>@fjCj^Y$)jRUhl*sMB,B9&q3tIWsGHt,E'u\nPZ7J.VJ2TJp=D3eH/./BEk_5/'[fk/(iWc_4sr!!Ks0B2q_#R1B#\+kf%ILLdP0KsL.(R[q"G(Z[GVfM4K*5?X:*jb&.@(9]7>K;p[d@pV>X]5H'!'heqSA>]-\*g&OSPGe?mrWX:3.jDTZ$P4q=`WP`S(\MR=$f6m)YMVN_PJ`_-0FIHc*U.cbr_sj(Il$+HM^/'HG7e!@iM/p*EPQ?)BMU.25RT1(!H;4s`!Oa*&b+EQkI=PUk54D?JM&(>iGld@k7lHBJn$C\GP02'$s7uqGdC!/[(&hOGEeQOg1!!#D"`#7nq@EN\/lm+B)Vjgoj^PVm-NW3q6ip/gGAY3?0'esSl9'X1[)ULdXGN]%tEKs4,PiHhkQt&S\K,8>P[49UY=`/O.SD.7k$LTF5>=[>O?&"u;Qf:4Z7n!^8X=Scd8)>nE<^o"<_()/Q0^SSb;!1\a&Z;Qfs;Yi#B6h9Y"?o0MNi;6dY1IhVh0%-AOL[!BI8Hh-7^_So/0pZu8#:*]/`gk`B'2q?JNTe=ahIYJPReGoRL&4mFGY_*@D['>fQdhLZ`P4u(;-g,qi-!.]lV3.ldr",HUg3,IdGI59E4O,oWinF4g=["2/\En.N_EcM_2L?RhrJH0EfrnubQ/(]6R)eS7U8T@?p-e>&Y;G3m-rmD7q'Go(*q[UP6)Y\!]LQS)X-@_@!Pp:c07a*p1Z9]b!^J(8Wt,0cFW\6<"H5uYZXd,lC?%Y0%2r3NiGEmFSOqA!8eOeI&f5E1Y^Q-IjB)Kd"V\p`c@K87,F%+A8+iXGDprM2"b2JTlEl'ZVU93/!j/_%fYlrT17+KO%AiThSD>4poOAO[aT'.X5Jj1BT2e(!_s45bR)SnKS&rls)6IWH;&W3&'j`7Tj+*hC&b8II`G)bKOe%mIIrNAC]YNnE7E](DH!l6t2iGQ0t>"skN?gqIi2qr+-jpU/OLW(Zcn0\'>a!!!!e%)a"l[-H"D)^ZHHc_I6E>A;u')13fQSmOEod8i&algEWAY\?EE<]k$38aaM?)dd;_pO:IH_5kDFNR[glY)>S#Jea70c@=[f/Cb?;4a[_`ilpYf9%,HTB`1U>4^5BOf0%.Gk'c^UZQD&CGp%_+a;m#lF#SP!&gmt-c&c_UV`WcD3jlQ\)*8--Fl[lrZPM7fD^Vm'(+R(2Og0Ik/f#G9bt`Yn-0J3SYMM\OUGq:o!hkGkrU[FJ0R9D"R[<,:"a!!!QJ&8*]dq!jQ%MjMTAX\d,31:@&3#J"jj/62/F(:3-SOGTlDATr+u)(s(Y>,I;0lSKM6FHjas-26afd&KHWR1?m#.Apu[Zu"9AK19+ZG$VkCcZ.e0f5F3g[:0!irGkpXrITVaQkl4AeM_bW/Nh,C`URs#'Ys=-Q+#e$0of(dnT+'jq7/H9GoA0S(8YKjZ9$e*KmHi6>!*DIKfDe2s:[6$te!D^pril1\16lWJRT]1qCYtu_m5oN=p)C)6e)CeXYCD'e@EN[P?HGJ3iYBI/Sh<[CgEHD%*+mioSZ;48lY:QGpa8k0mFHVlOj[7jn2"\$06KGNgY#c#a(];^&(tF,p.r&'$Hh?VHt'#L$1[QUj!IKak+OYq`2'3A7E`AUMDGC'q;?<5ni29H'!T/o?_ic>IEmEd5Q/6S8jUTlC8uEs*XQ(+iZ)lKeKN!!!!aqLU[/5anQUQX5lRbrU:HHusJSreez!8nU1)#sX:z^ak3sz!!!"LaP$k!!1OO4E)"Dd_3d9pBH&*:8"j7(&Aq5rA2m+3UhXJYC(S9Wg1306/Ym#reij'6\:?Pk;aN\,`D@GVD1m;XK[s%R(iIbK_a/#\4WCX!!XMb(+=RjPqPnQ5[\\P;X9g;@DaBJ@,mf!:CuTi/!IjFYU7,[#L.XQI(ZA+GQAma`*>F8C(HMqu?`4*Q/g8&b:3"L/s5@&b;%sg6!;lE0E0t%T3]!=mLV\!!'N]3.iGB50q3pC=+q+5#O^/;M,g(dO)jtC*>`U4n&OR!-\ueE(%e1\JSL%g.'.R8n^_0&Aq5rA2m+3Uh?e7IK0B+%cRnW#l-S!6`WZ1#l.!tm77[q\4N.u#H!!(e?SA>dYc<0PR4I$&=DOqO4\T9_MNjkjIEb0%62F9T*$DENQ]INDjP@p`ak!AF6.^KGbbLWmtn.k"U2H"G-_=,H]H>&N$?UhHH"YFUn/9fom;or%NJ3R2U*g3)(rl]/[4P*;fiaca=BNlp\Nd4mh/GOb5]D-Ptsjm0:uf59\J>][Flg-G^%1gp^ZY7riEY$C_8I5..P_Q,E<],T2p/uX]+=ZV?HTpdDNe-(e4)%$`[<%1L$mq/C:0'b#:CiEakO(l:8rh%!oaWf=eYigiaLMp8XpsS%-KU&hJ2^e*'/CD-*h7NY,ZEKRF[r+5C35qhQBte;6+e_O*!3*Od+6$X)U#lbgP=o/1!i#:S`N\J[<[5`ebqk#[u?[QlqQMc-pYZgVKllK)#r-%>H]pQ_@q.SR2NW8U^Y3*:aW5Ir_p$Lt@\X*^tHMKm6f3CC;QG55jYM*p'776/'K@oAXqPuuum^RNs3\gX+_cp,B:Qb8ka2L/uMuN_"mf.?SH^4C+2nSs_j'-'/ZJ*u%[sRQB=o1bWGP%$j)m>lZ)BX=dfqUI[(e&eAU&Ugp>*6gq!3FbRPf"Tp%g8b,JBLd(]SL@:4.HeS\+XJD;%MWdJaReqtLI9rAis]6oW-L%"*(+=o;GH&n?_XZ:;*jnk7/o1'<^/0CGN@C*g"60-%k#\jk@$8r2F<=dS`W'4is^j4X\gP&^%\0co?QJV,K1jFA_QIK7=!k^H92;j%\FSCY>JYn/m5LB<[T$50dQmKqr\I_&pe&j"UM'djrV96'@ITXt4`70Ju5N\h9<C4hJQAF/$K7@32b0t6W,;kr#RiXG4$%/TS=b"4DND9W9eY5\F#[K#mBg3QITCu2U)?E[]8Rpi,EWRjslEV\nmHHeK/D:@O7R1!PoXC"I%dPAo14_RMedL2aspHaObU("_kNssY%UClO`>$$f\)U[Eqg$6T%gTiJH@.ILpeYko<:U8r_&R)P,V`>:Z3.joU?G:e9S&Zm%887j81[<"?_8I5HFV/%d5q1;>=;8BXb[nebr;$XIEfB]B`S[-X$VK"Jj)p/fdF)#m.?]]PE.+7modT.nU6#^>DR9$;!5LJ1)&s5BcHq!k;RNCGHu#jR-8/[P^\iRnFdA)!!inL7[="K&Ys&!J[euEdn%\#a3Mf_qL2(M$pkprL0')]g>NVs(s0$?&b1ka]0?MsW#M7,a>&.L42rR3Rs#m]P]IgL4<:]?&8>o`Ae:)c3?D_TT;!Ad'2E"s5_+q<43.lJm.L"cQF*\`;\),'d:'7A*-sP-pPm3=k:46`Wu\U1=1M3lcnlAfI2)C,1>_9!4[bCK-MAlcd6CHX"hN@pfR4:s-W?>E4YS:n$S"SU>Ohh=pb;j$u.EPB]EoSr?OQrD5H5#?QJuC?E=$nagHA\+X$:ScK_,f;P=We3.q0?rTuqJn2qlNS@J5=5'Io!2+-'./sc"AT0]?NopU#^M2@MLO.Shjrj5BRE<`gS_rdN9S9rebp)eVR&@q&_/bF>h5&&eIIFN>R-r7/-Y7XsF5^,6_8tW^o3)*!P;sIG$]B6:MI._>G&YG/(j6#_4MjIX4#;RU:Lp4!(%r9!nZ+I`B_7Er0m2+:(e)na;\@?dk@H1C<7b[NT#1ocK]8K!*T99tt%fcU4+jT!OlSue3c=h^lah?cMT$Q?`IYQ:oa(l@Cq<.Ik,pg]lN]V\hM8[/RosXS*l12FDdZJ8X7r\a@hjD?8s-h?Oret1?Y.8^"g#@GbgWBs89%c47i>-fed?\Q(n@-e8rpLqUso_CFA4_bVO89anjbGiJ@m`/fZkMkU,V#=mXX5CAP5Y>qB\9cCd,k3.pp9jbZp>k+OQG]6=-QBeNi,Tl-&(:##:W4*d.fMl/1UL2GSKUJn@i[2ZO@1O+j0N/TWsME>d!;UUJi04/nd1"\0V[(2rr(f(>l9Qa41WDK:C]mM^:Unb)RilH!!(pqiXCk:).sNAlM*=kk1KVO_[aBf.;170rVKY,CqT?2IV_p!jeqi"*8C,#B6Q.-C`@5]rTa6Jr3FSUKdD0c/(<[K_urZEo8Y+HI7J:3s*4Kq!L\%:G^NT@\bbs7gp;?J/fkpM67qLC\T_?8"0gb\Blg5hB!N2a;#_\*;M\),5CDqoZ7@7)ba$.BmA-U4>Be%!0l[C\;,P[;j[>5uR!AYI_p-qZC]@qII^>'Xr";rN:a.%D`N!hbgU2Xa@PmtoB9+c0$(h+^Q,+/o#uCToYqu^LQA!@f\HId;IVa+bV7R9SYe`-<]0hn@`=dq;9tiWb'OX=;6pQrSAAhAfrl"*,NA*,jYP0n9K)f+6Aq)ajkMB"C6R+Zs55\q)`M^4Cm4"9QO7"dfN(fUoaCl]%"_`WU`;!o^&Dc8YBtYJ-i\,%AjNikeF313Za$cT^YcQsm@57u`q46Tf;GFVMaAoC\BW_4!!(U^B5iNLlAb%#Mma5A+=B=>&ed)<;M45b0PQ)MBp7LP6.A6d)a:0q7I:0WJ89rs3$RGT>R[_MD'S*dV(ai%L6U1q\i!/bTNTuZ3)gHsOSX^X.;;ZV!!(pqiXChQq)fH\X$tbKq+)sY%?hq]24/7jP87ht2Alu>6nP4KiH%Upe33j4\:utq,=4T?`R&AI2F9T*69A(t(iIbK_a/#\4_m4M!rr=F&8,rMaQL)N=tSGta@Aj97qrUQ:"j,;81gWMXTs:T!8n@H%#tVh4;UAc7GA+D8."ZS%:Zh=Rg]P$L%MJ>^^gDFgd.IH.3Y>K@]0^f2F9T06>NPd$o_mai?5OiSdeg!!!(peiXAQgq.pj7A\b_do'm>r9+>@?8Xg+nWJ0t\^tK"n!-\ueE'_Pm]U8QLC`=N>18-q35n#\dPMmXlOIij_qZ$WS!oaXV#l1hD;c?2',NJqS1eS9e\4N.u#Heez!8nU1)#sX:z^ak3sz!!!"LkV'1c<:R6J3h1pZsikYcpg_g/9]c5;QpO+D7D=ea&7oHKrtX-p%`iB;me(hH"[IBAg!jB*9@LBIC=bY7GXg/R*AGe145=r;PQ>MBt1W6mbV0UG5[N+`W_Q<.`<2].bADXla5s(4ii$P5WD-$_%C[,E?F6m,^n_&DeH*so,%?NDl'pm)AVr?nWWs)^FE3gP.WAOWj6aA;9ti5e^Vrfn;&g,)`2sr9>8A5KDg@$uc2YnV-f)2?oes\I/JQhHfO^mt0P:'-2$lpX@Hma!,@caUaT/APV.7q:piM.dMDqs@NC^"hq0!jKVV#`fdaN6r_Mo`btj!Nr?+Tr.?gpJ#AC`XaH_>Fk:M!=93s&I_fG]46qC!DP4Fh`/_Y>I9*,m:.b,,@-HbZ@q+I5+;U`\RARF$S>;V)!W!.]N`c-Om.op!58i'Ld/Xl+:ZffFJ+_Q6&iY?e4+*-u(m8rUa]iI$$0aV),)QUYal+#M$rtq`mN(*3_NThp3Enc6o650$28)lSnd>b&8,rShgr\Aa-.!-]rb2ETtKdFXfljDWcoIHIe(sd.(,LkqVoJPjM1O_)&o22ImH`Mr4Ub+QS2pc.>c7=28=$l,mfEb19QqP11cam[8!P?g(74IP!Q)D8G:]@HXD1$=X>\1D]+Ec>HpZRL2l\]"7)"!Eh[0Ujf3e#i8I%GFJ;H[A])a&MeZTh>3F%Y>b7Cll=aLAR"bleM,C`a9DWgh>"WqanBpMR#WWH]LmeK`rb["fT/]1l7qZ,-k4!i8=tj#D$Io2C.\f5E:S0eRmUqWf+PF'bSiD"!?C.ebnWTkJErO?i\9QZ)nZmW.9!qV0o)=8sQ`aSY%Fnbdp4<&MfhQakO#+l(?'=$Mn%_.DAs['$O\DB1N(&1H3r)aV'*(QZm+m.fob&3<[t?$BN^EL[,<6[@\/o0A]q=9)YnQ^)h]M!0r:l,]*B[ei]P[R848k2`>qY.WJFJ=RK2Z;[XLe/D7utgn;SCq2i6[5'>NNi]hTZrZ*L$EQ0*5I.FRX8??i?dD(PKZ_rO6,D)6%']np:294XqKFF94>J<^T]o^8R-3Ci!qY?P-]1Jb;lUoi8M\?.Ds\%j/4YaAa[EHjL#u&qT*$1b;]_Lr#sADJdU&o8oN:ehr(1Qa/a/so';nJaQrT,'i=3A,UB<`RBdW.\Pb6=OlId&jkqdnH<.6(nFu[_R:ccHJaR0T;q/r=e%a?Z)_fPKbgBRXC9mk!K6_m'.S,D"!(_P1-htSLO/dX!l!&X#?e;%:-7'tGl-r')cYrdTOP"!:`iJdic'$\k(RoiG_L?^/?>BR>Fo0#R1619Wfarh<(BH[e%ThU\^a1g,#eK66.qDgp65[`\):*gq>D1[-O;@$)+l1L06Nl06R&:XtLjp%aaGq$_sLlAj]trp,2Anm]oB79[!8B?DYre1^]Z^CG\,jY4tfEHKcun'>gj)(_d1-#*H'oeDupj!RXS@Kce%mZXPGEi'?d2-uh/.orj#bOU)dRrJZ0h5SBl$l2!b7=HdKH'dV#!"k4aHj1JRQp7tq,<6[@\/o1L#%6H=h\VtS0_B7bG/pR*f\I=n?eqcds$9ndRe7+#%FD#J/R5u,K:4K#^3]25q$X4/0tU\*k:U#@P#WB`CS,Fn\ml6eE<_>rZbCg2l1LmcD:H48U9>rfl.eeflCZCAp"K'^,K?as3/TNEmnWO?(>c\'TQDr=IkTQU1ZsoQHPh\==EO,5;]Pk"k1I7TpV/r:/Y15+.5UDJIiuG^g@^qiNZ=[-3C\$G:iSY>1_4iTR/c&sH>p?6kO*cPEdq@IiuEU=LH'oJ3qr!E3lC)srjtsi!OMF]1*)\+^L50@K1Cl_6)4:t3mJk=s+$f<50R#/As(>AFd1joIVL;Vk;nTk^R$6Rnab5.cM[Ynh2h,u4F&E/C@)&gOt2rcS+gS\c\U.Krm"l\jKj*=T5Vp'jF\EUb?"F`b_.G1a30L#>4O*kr9`=Al7p?b%NUf`M<%:WT0;WJ(NBY;UU.[^b<"abePWeX1hb=c@X[R^i,(%GKEV8F);`Z'1O%e5*P;'rrbJXNVONg7Zu!^M)Ke6eQo2X#$T73-hS&YKZM+;F8lp9cF.VsQlgEGM5c*Khc=!p7A7'<\=gM_R-L-*3bOAi?B$nLukJs<\#6=88Ko;9Zp#qa?8D1K0cQTu/TotZf:77e>ni'$Y3`'fTa>Bf)`Z/X$H0_p8kuk/UV:F0eqAoCuEZ+$?KK6sgdMD]i*)a+]p$[@X/ooL+CL=#]!<<[;6qes=!8rYOFZt0@(B=H/-R(Wt!!)n$qu'"(XSLc!Pk4IrC\m/2)$&);`#6FaHhSV(m6)S=rXtX)(G&XicJ4,3/Um6p!!$^@3dC]rcSTCnp2BD3c!S,8p?sOiLbf%,?&19:z!!%ON&8(tCz!!'2Fc2[hEz!+%s]!<<*"z]Ri+10\jNf.?Sg\'5)8Pj>?o;!&H(Uf?oKX5^Ire'EFX9@:qN=#"M'`m/m@`KFos>5VUQC!e=2nm-H(Ei.qZ>I/j8>0L>sD#R5TP!,tP`S__4%*"cVe%fkN$7`YQ0_*BX\!)ABTZ^Wq,,9j5_!<@Ma#T3Ub)!FBh^aTk=Fq\M-KLP90Y16q=ih\Q^8OuPAfWFUh=n7iV:rB'0]g8(/[?iLQPnGODk`-XJTg/HdacjXDdKsW'KH)^0We!_+[@EPVG3k>j#`u2[>J4]8_Jm-m&:"h"8/$_9c4I5[>eP#BZ#\Bd7R_Tm^V=_NU.a_kV,0)B&8(tKT(!U@gGs="VFO@SFM\(<%$9=?6-/M--ss[UihahhVIj+g2U`qs!"_79)'LqPddkR),@.)_0g2N;qn8<+k[`GQ'>KB^MgOc\/8"pE0tZ.3?L)fTk1k5bnnsc+rfYg9:>$%q#"WZcU_e/4qQetjE2gtb%j+NjnK's,KfDGg0[/PcI0U8Nfl+)bRIUAu#,d:[J=a+_B8DoreNiVD#5s]?UqkNe0Fj%Z6:,;&bN62u2Kgbq`nU?_he/XZL^,Q2U)@T6Yq@qS_R>XZCRU%T$&(Wsp%,9!U%df4*jA*Bndsg<;Rf$C-')>Cl3j#0QV^S.,S_1fZ:0mG4jalk?6iJ,/Z3QDG1'-Ha%J9BE1&ZN&hpF5m2A!<Yg_kKI9I9Urq5cQ'.tl+/$tP5;kjH)0NmPdu5*DUuJ>[%K^O?=29$cnm1#ah5/o#$7gcm5&^KrnBA]X%@N+4b&:jLQ5",J*G,+\)5LTA$`\T\3icH%2gm$D;1jTHg/l&?b#ahC"3&L5Af2]9l6h`N\N8n';s'9$]5khq:h$?<:"[1TD2XD&Drf(AB]>s`$r7XFmdpi/lH`#H2RHZjf@"o!*?:.D_=C55%E_Q1+,hf.9*V$Z5%/^I=73`d-eRPj;=dgs%Y1`%j!nk,jqiU!'h-fE<\KfWh&QWhM,I"C@9>G3rZF"?$&!b$mWeeP$E.rhH/RZ=n#q]0A=Mk#CesjrLQ#W):EXp)C6BkBCL,fCu;Wj7Ud/d?='pR7CIT_n(t\FF*"$e]dBf3D+m^\nK's,KfDGg0HB'\[r1)Kl^]T9n(^nNV/M]_eX:LAPM[>p>HB1-[<1PG\QgIlm&-.br,M=oCjY9tmtT'-L=9e[gJ1Q(%-D'ife_A36b7/+UP(bT@"$0gs%p4)jc!@6n(bV&kN9mi]<$33kBZe!H#i21pAiVn`#7!Vi=KYSGMnR.i4!.df&SdM$l5m8GQ#uD/%&[(65fGfQeo8cs&3RUaca@7&,me`G4W1QqOc07Vfg,&fj[I+;6bCNIn/mEAb1%7>OBe"A(i&+OO:$cNcc%K=LE=#\Z28m;X-NIf4h&J9:nbMk&!VLT<(iDU)X.u&Vb904$BVBmPHqoH;oC-R?ijnWr\.(rr!8rU34KtnnGq'($4)Mis]rZg;,su)J)[s;9s'V%-b>HN=teAKCp[7pYPkX1Zb]@YDL$=Kk2dce8O,/]hZiB*^I;j3(',g*9%BVgq<=SpTcr.o[pg^50dQ@Ra7o"]Qis5(;?EC5YOkQ`OBdJbCRWm4HD9tXAR=8l]+0RHhSW'FCj&-ifoSNUjh>>c.d?_;5!!E--L[RT):VN3IBTnl?-j%pAiVn`#7!Vi=KX`(X6-+r2b1u938:=YjglHPO^Uq5!IZlHj5)$l+?7u4*Q`&1JrI@q.Rmr/)G_>a7JM.=Y:ZEW8%*a`QM&PU)*[:<;SPXcc^mS*I/]=B[WXR^gWuN?iLTsfq[kn50`CPrqP6[=a08d0DRhWph66CAbDhO%s&KBZgWDQFCj*p0l)70o,7Ik!rsad0[>brY=H"LSL0+jO)!(3WHA&Le[jra`>S:N'5):31C#Hu\o('6KVTDAN5#4\1?0]U.orfVFEGap]a*V/4F@'ZH#rfY6&pP;;QGjVF1_a>DB[;e-4H(tK++]5N#5cl6j;ghA`9g3\#:#ME<^onl+?87KS48UHrm7WV$nI-OlbmeCf\_j0\h#jYhXrUa:M+pe=M]go5`c-8"Ra=p)cCpZu"9BB$@D@IlR5hNZh+7WFj=Tr9[0uH7qq*Z;j*FGMnQCEI['M!/aUl)%="Lb37I&RB,dRm<#8J@Fh4MlciBirj$8e\eL#XQtsXQGC@V/Hffii8Cn;bP`YO3L67YF;eFXQr>Ds(5Bm+$g18'bl*?02lh$\8hKto+Kpl2fWB&f;8@K.C8/%kLS,iU4@L1'])#tdg8F*tQT])[=cY`o:<$9&t8AlAc&Ri'X!8s'J5!fGR#VBc((G/mlnps.u;di/rTFkUB,iT5mLp5UBan6U&QlfJ4rni$jhA61e,H[#g!<>Fo]dNk?-,RrFiXCj'YhB<^n-L=M!.\IM(Bjf:7+g0eSA>dL5VUQC!e=2nm-H(Ei.qZ>I/j8>0L>sD#R5TP!,tP`S__4%*"cVe%fkN$7`YQ0_*BX\!)ABTZ^Wq,,9j5_!<@Ma#T3Ub)!FBh^aTk=Fq\M-7"j)S!.[i^+Th]I"2-)_3$lGeDW2(bLp5SA,q-fTGIb3VaT1j9q9$3&Q\c/!'XhE$ighIoV)?DPR'@_M).+8_J1.m^aG)&!<@_&?5*C0&n,E3E<\p$=R?1jpk057!'i6bMZSE-,4+YCcJXKaX*jsJT.iS9!!idT;#kQ-KUpr;)&s5s[1<8q'1U%C!5UoR$33hXYd9fYK2Wtq!<<*:8EjH@?5*A`)gY?]E(]2^f>JPs&p\A,q-fTGIb3VaTBe9q9$'Ok1!A!#2E]^X7r@5bp_"$33hXa>98EK0,k`6tCWEJ94F6GAHiF!"`ScMZSE-,5=PQc4CDa@3?a`J>pn.dYf;Y"A:D*Le\CN^QCPgB)ho3z!3[Njzz?9t(^z!!!#3JiEi4z!!%6IEeez!8nU1)#sX:z^ak3sz!!!"LTR!0E^_YBjn>gAh3b_*n4/M)^-',.h7`!!)d>D-d.hPmYKdJ!<<+-9j5(5VNlN1!'n+A;D2%g)-d`PN<'"Z^aA#i.1H4r!WW3G8*C,73.k-RZ5EWB!&u9p08SSW2ZNgX"-If\,0o,2aD1kX!!"VWk6k`Yk7%Ck^d-sd[YQ_!,4ZWP!!%Ob_Xk&MT"+n&!3dT_/mcI6*"cVe%fcS@%,lJ7%*r/Z!!$+4@2CTV%$$.Jg'7TX#_qi]/;@f?!!!!MLp2dRE<\p$=R?1j!!GZ6?5CF76,-:J=!!%To4>2WOR4A7;!"1";i^KBR&J8(@!!!#8&>#6-nB;UI!.Y4bG4?d%i.qZ>I/j7t?jP*%@X.#B!!'fd#eP<6&PlI1F.Z[f?CW9))X,oqYiqm!&>&SjkSQeM1"rK!Kju3fR$Z?_F(1!$FuLSsNF.&8,rM0XY9"5uY>lIFc'5IUV!V4_8'4C3?&DQ6,#oNLI>Af6mi5ZehKoQ&g:c)sm0k,KEP9Dpp.NhI?N/Qp"*6@SL'M3,n)[U\n6Wcu=q%1Mi$uM#[OO%cKDr$8P[o.bBu8=E!;)%FdoA05]_r9p7HX=0J*TOPh`1.sk-u&])urcc]D5jmO9/ZerIjB-L4!Sn7[FO"?g-i(']EL&]+KFlEfgDr$_%2Jq,Zrb1u9NA>U$-ZbkZCY-b>A_i*cmq'TgjhH2n>";`$a<>O-!(c:+kFfn[3.mciZ3?eFoTM[HFnl!i3tJeMNqJJ5%E\(q)]KP\5^F#='MuT",'F-H>nIg2'cVa^K!?YGNEm3W0p\2B&u/o'"FKJM'^7)A7I'?$PK_jQZKuU^ZY05cSp>SSbg+MHo?JE6RIAfbB3L:10T+/kl/$ckLAb?mBP$Wu',\m6aj"U9j_UU85UB(Hb3n,95R,S.GOI/P=kU43<<*"Q.?k]JCCG:h=Vrpj,pak'Nbp5"Y1p=Kjm;j;H[=Ahg4`SDY@$J=NEO]\V]3>IO!4`@bN2:8d[S$_eEV;iA!qn)3)E_j2>)jlO>pA!a>tCRJR:!+%6TJ1BmG>L$9.q6l[-&>r7V3EOki&9a;OjMa1[$Yt?Tl1'I[\F+\Bk6'bKi\Ij>^@nqtRi6*c%>SOrie$fR9Z`^tG?G)LHCeJF>eHRI^3J2SFAEaM_*ZaM6RLS.N%[kR_%+,sFbHg\ZRf?40kj_TOmH1:J43#Q,t.8V&\('"=C6(&n(`^"0uKn6!`H[[M7-jj2FAO)kqH5SG[G%kY>>@9'hnT@-++Y-#p.k3$Krf1b.8akMc^oPo_R%psmP!UWu:AMqjT:h_&Z8.7kmXp:UZ,\P=Eq?ZmXgY%N;u-p*P5dWHbn+Q6Y+:&+nIk0Sl*D1Nk,"fKgNS(h`g&VCp-2pEGm9h%\l6)pCiQ#8p[Z^qV\Cn>D/%TT,tMao)8pkL94snt2Dnq3k"XF8ZM/>4rc=K7.lmd;@**H30sbtr5)OIRjr_(sfIrmN`D$]s48/#F'YctEF@;ukFlus/!&+OeL=@+DSO""qNrJFXpK.8V-L"r40J+O+;jqrVjt4=NbK;OI-,f#X+u,XOi:lIA:H\/^ckbDp[0&m\pj8%B-4i1aW@0aQ*X7j-p"]8;Qa9RDR\>_3`"ur\4WXD:fL]TUm9tahuBX'lL7ULAM$f`H01mBJ,0$>+-0D"XYZJ@3*5cKSO&-SV!&6Hp!@6(#u*8Ee-e=hZ?S.sN:o*dZ)@+@Ja#*H^A,"2kY=7N_Poh,fn&pl"lH%rij?f`(<[^:1P@p@Op,pakFW&"^OB+X<>H$T4q8^eWcYl3qWD'ZN]B+UI4eX^UZ!5K/1),b5YF9Ykb55IA8mf2Xk*_Q-DhHUfIq`I7:jf7Tf#'MRm?1-Nu82H[TGmij_bo*Ma@QqcXWdfp%m&F[K/elI9NN?'L6,[/jX$WjkEDN)[X%2%YSYt>XHY;a4a_!q'PO6[]c=[W$d`R\Yrc7!4*T-Y]R0D%WUcV)a)]Ap=f2GdNjPeRQ$F!73IfAG^c:S':5fkEq;PZ.?5pYr"q`KMF0IeA>8aN!QSUlf2(4SorX4D*_@u366[?d&BQacYPp=\@#1Pg7]lGL=O1ehG+7""^e\HSPM1MBR8lHZj=!+6)T%&l)g3eJsl+8qqniYFGTTDcG@<,UQbo8:uE;YFs%iVj8AJd)PUB@*P4r:JlRg"Q8le'u#(+5")Fi3O7!jht`2f24NYfUp!X9+W+6a"F1lDan?i%u5TP&N34Unu=at)+4na\E]!?oB:G?aRHLM[pThH?=%O:m.p>N/c&_#jOiul/aZcr\fLh<,k[ba=J^,CVE1MR>h7`[rqbfJhf].NIf@tMcq"saYW(bLdl/RT)%s-X4d)S.D.RHEq]"e)RK33[OY`cFZMlY77G_CGUo\8[-/Pp2M0qrE7muB((1#I^@ph3\8Lmreh5\a+@!Vk-8U%]B!R;g]QT4@XttkQ/A-l,naG/gbgM>g"qM`LiPpeB;CMSEK1@,g^2iV\W:7o.B1$`%2@oWPYJ9\8ad93Ym#JYQ;k:$PpMufj\oT^@Tl%$JH<>5`D*,F[SR;'a,ctjcJYf3>ik5Nr!(EU*8PuVYcbP&/Ve.uBGi8JbpEhp)1iMd03H.5m;R1IM)YH`3;BifTCRmbhp[n9L@^MtaLL3=(03>=8Rk9GUY4aV)2fX?Wj"8gRM!!%Q.-o3D(dje2?W-AXP!)Osk$XV0tA79MRT9Ga',r3X"c+B7SLO[YL48/$Y\,HC.!7Ve,%#`98$Igl!!W`9p$^ClKkR=ang#rMWrN,"!"i0G]V%(%6=lo&!!!!9Jhk6<19CTX!!#D`=n%$g+:FHo4obQ_?jOm`MorC6!!!!16"Rk?3eJt_2YmCR!.Z4@1Ft$).KBGK5Qm>U0B`hM:tb%7!!!"RTZjX=9WJ-n!!!U1(;-:ra?jI5%fcS0(kON\U,&hP!!!!e:g*:>c6*L[NBR=B!+6)T%#`98$31&+&4'mD$T`nk<&XRQ!!%Nm-o3D(djb=t!'g[P"Y]'JZ;B61WVmoUCR>)!#U;C_kJog!WW3#6r7%UK$GJHQ&Rs-!!$C4apa3NZjHd5!"_G-_$`;V/6"P(!!!"L+Xf,t.aojI!!#7ePm&i)%'i^_kQ:eb!/@/jYc(6rz&QBOYTJOYUAYTb9!!!jf1;fhAXTAJ&!(9Xdn:Jq.$^H]8!!!",#g*R6b-VKU!!!QrA\ea8K.Kt[q>^KqJ0?J$4"sK#]p8ReF)O%<)b-59cQAHEqPmG/-e3*`pYG!a_A`X=-%5Y>0naHnC-()00ch7YacVA_YMYc8.R,o%!&R6hRn+q12I;'`=acZWQ_fAhg'D3aXqf13;$XGkqOk/U=LNQn#m;jX[m?b9a9NK\S8H!Y>StK.IENrLBCjop^0P.c/t7IEINEM+K.]Q'K2f-1Ba?P5K]:14'lM1h>gKLn*85-Vr3=]Ct8G6dIri",Di[bfih3O[2We3bIJ@L5"(hrndU/q#pp`G45Im\'n>\:D=KZ^S+(ZQP&B!`:jc`?1gJaBOU"Gm_Yg;_P5Rr2H-%!]U+l_q1sk06H5gu4f2TXK7rTko"U4pdpoDS_Dt+Qn`qrfRt,B+(U@sXZ_^Dr*.\V"^p;P'tfK\>CNggUN4`^WnL*X"lH:Zs0G;lSiZna6,'[qQushRl>9=bH^**03J.=!W)M&T^E$q*ClC8`i[\R5QCcaonbFO7@<3e,1@_StSc27Co8:g7SBGQ2*(Ae$J$^#&e,&PIJsdaGG$%gmi+Bg4"&Crt,/&sH5g(E[l_rp)$#XpOi8?m[VI6X+3]`DSVKi.A!/ps\&-k7K/8Atmn(`=&]kEgnPIIpSqJel>-j9=3-$rlEi2/<*\ea$ssUebXMBO.ddE:?f3j(4!!#h0b+'/SRKifm^aL<*EM,,/U@s(Tilm,G#edu3d4I%spmB16GqWl[mFQadhk-T4n'JnCLLk&YYl,FDKT'@$.5N)[aSc@)$47,ameLXJL6,j&ZrA\/.i1*lkfA6*m6!UMB[(Z+0>AWNC\RFWa[JY;CY!D]ZZ'@M1P?715h/&Er:KC2G?;!(UmECrheVsTT?a+W\m1e7DKPg+RF.@aY8Z>2!!!"AKeb#ER-"DL!&+`c5TJtrZDd*:f?bBj1:%1j&.k<.%D;8a`jNVjuA3ac-!!",XAVNWIo)Jaj(^1$b%WhnXW+5H=1iomABRf%&).=k6"onW'E`$FN`&%u)!.[p3!9-7VOG1hH*rl9@0EbsA783:Q!!!i>"<\1r#$Im@oDnpl!(0Rp=N!$,!!%OH5QKe/B97hi7NVU1!&+OeL.+f-!!!!9"U#qXF9YmHD"I`.!!#A_Aluu.%fcT[;*Y-@5\H0I?&sI%DT:l^0Q>X8mq\s^!!!!a"(b5b0[0\"!+6KPJ2kmnA-&5%!!!#W.!&:>Bc[6S!2G&E`.?2V$Y/E0S\"IL]C/8#[6\F*!!#in.!&:>Bc[6S!2G&E`.?2VMqT3MMMd:EZ\d]i7BTt'RH;q\c7h1qe_kqh0^ksHe])_9C2Qer&hAb2Y3e8'?*X*;lEa[Y"TSOQNuV_+MD39W!!$C@&:cae).[16ki_$fXl$e/a1m\G[JQ1+o+RF0&)n3*4fD,SL3$U5[8sdi-Ia`I`I."kJ:E*KPH1R?8*'8WGK#K7mZ+g/Snm9$;*]f<2O,[@T89Y%6!.'QWIdroZEhWEDW;eJR,]Q@mE>URQ1;l@PW@jImU))G^$F$&8+XW3g5]@aO]o'XqAfU.MRi`B+6:ha(cq8>o\MneTk35EtYUJX[2qA\(:aHl5*91qpcb81j.`\7AGVb7S\E_BUq)Xaf[D1;6ISKW+gcdQ7F>7fuJ3RHQYNJ3q8DtcHe(WDROWjQ3FM4Am+hN-p\jX^BW#qZgE1f#.U97!nT?`O_I)WcdpO>-,iP.Ek2b[TXA7dP+-2dl3b]CRC>2=;Y9[:O7jWKm)Q$dK3Wi1scl"gi).]GHd0BXO!";/]@8Z\Y6dWWBlrsF\rU]Uq]%)tdF9YnY2fMSig;lG*B>?Vf\IQG^.loo,!>B]Qo[/(-44@2]Xns+YQu!?LHR]&'H%33guAh0/>;ppE%P!"q2ALK0"ifB?i<(K`9E!HhSVrIJ`H[j!W`4s5VJR'<8HI\lElMOr+r5`Iolg%itUopNHk81B>AqSUgm65o(phI/j6I^^u_J(6u'Z(eC,+SQQV),,=G%$,`_M9qX,#3+NuCfu_B=3k!Sk`4M\H0Oj>6C)]3Wr5@Qdr[Z2AIe1S%W?&1.kL3=tS&E(hOHad>B3r*8/@WpqnoB36baQ;F>&1O.DH0u,'_9_&Itc/J'FT!e%WhnXW,2),!!!!d:hEg/^7Eg9GG^fVL*>o3S`/&^t?-5<>qj3/H1Zh>37Da1DHaBP-Y[3H+sO&3N)!Y)QKr$O:H[:We`g\+&b[M\QsA6;`W"f\%GH,30k&($!I>q:QS58M%5I>]OQWEf$Td.JDh1)B^PA8@nk;Tp\eSN;B`i\0WpX6?&nN*MqBCPr8$W'f-bVFs7NF4b)/ff1.C6XH?kCX+>l9'&AJS2:G9UCZZX6QFT&EjNfaZsLs5\H14b!mHQ!!"\UAVNY&eJX[Upfchj!4K$NDZ4Xf8qP>bD%.DcPEGdq^ILLL]7&;?3h+Juds\oY9;B8:7j(KFbJ2JC-"c\6)HPP!nL?(>P2:0j^WC5h`^@1OkPsD;BO2&,l%>cVdH%DH0u,'EXg+-lM4W*9[g::tb%7!!!"RTZjWRU,iC+L7Hi`48/"k-nNT`bi0`>3k+_B47KkjpXbKCACVf=]h'`p/_bIW*uenZduBo%[qTVTEA=a%C!W8P3=?Q1H:`O_ot+$,OTkQEf/@g31nN"sS:2V+K]Tap+L5jZ^,h%/RA`nFqQ.75,ii-/(F=c#B)kO.3WfUJK.Kt[q>^KqJ0?T%SC.Ae+N["UcukG_pp2IOr7!]n`[MX8_p+$:g/;f5CNVqK;f(q6<'RphqNKXHd['?'Nh=3Wi26cl"gi).]GHd0BXO!";/]@F5d3L8*[:OcPu7>-MNt]3M8Z+M@tflNu`,B\4Y:O>aFgna51g(=??1mcDbW#TK6%7AQ/3SiqRckBluGAXT=1-d1n%[5rq26O"#@@Z"e>`#Yd9(iIZ$lSc)n[r:03Y]46B,KELk[pQ^HF\u$BF9\CKTJLP[1WZ;n8)MKCB`AT5C3FH;G4$^eXR]]3Wa1eg!!!"I.!&9sME8ZHoG?%1[qEul^b46<1J"]8f_V.cpGHd!H0^KeK890.ju.(Z>e?]Wd%^:M;YheXKn&%+QN+6O?EMKqdZB#IVEmsphN(0UmaXOd?e`E3-Tb>1cLC[Q56&:0ED(Y<+,m-2lrqd3T=Yju\+=2,g:J,">GlFQ&"s-bh5(q2o^1L*gj\KgeO<%Qcl%@sJ^2&^c6*MY$ig8-!(WH@,#cu/KHKO#/mTp_9!uu$Lt>Jj02CZm([Th!@.K8eJc1?0=.R#0%BHMVo*iK:1m\0I3\KOg-M00k%mtf'[(O',ZVpk9QN(EG\BaU/eSG.IOX:hRa,Ze=Y*SNNdFu,ocP60i"t=\DZX]%kS\_@J+Nk2W'.e%9FK=]$U_)_u5fl9(i':q:"`sqK!!%PEbXmpGl3p(YDL_&%kM;u$phq&6gRgc@%Fs_P67OK9q+haX])K+%QFfA6q!qd*M^]*3D[E^Hb3dt7C9QJ:`RPb*G!!!:%k+p'dFbYO(O7CFK';ds>r8dhRpFe9WP>\P7>J8=kH_4BC?F,gkF9[RZM!GJea$qU^]StEfkq=ea91q(IZ:BRBdTB*L(OA7@L0VE@P?+b\;U[OQZ]gPC+00K8s.sqpLcPY8!=PoKbP'b68P)Lqb?(kqPQ-Rghk*1V\Tok([KB6-3W=1W6!qa>noF_W_LNf)EcUb,1:+Oq%H9B*W0"ahE5-5I*@.<56]>?)IcKg98N8d7WO+gKE6UL.=YGHC`CQZa+TUKn`H5&$LL8g\*=l@GB)r4?N8tD*<38qQImsc^qmZmEUPl@cbtn[9_sl/(QmYI9%lS!<<,hEMCZKO[=-oSVbpA7,?Xh(A>%\Ba1>raTC+!1'(Vb5?dL*7%k?d\5KZ;ILNUK^e9O=7lZZC/&

Z7p7iF)pj&Dr0I5hoFO+IEINEM+K.]Q'K2f?@G0lXPD*,\5ZR4[!L!ZVQF+VpJj#1%G3ps7'kjjlPSO:S/RbEMf.X9D;a94*L)=0.8NM?N:'+5#.>&.5G2"J[g%)k+q6_gA5o,B'hq,h7H>;i8L`gDA)AV.&&LgWBjd%aNVf`^AGO(&`Zt&9j0PTF(#[0P:p]8%/Is2]2Ks;HZfa0hV+g&X]su(!UDX\/LW.aDaiRS?V8@uW&$P3J$ES^mKm5gqKD>fe@$$5\T(8h)j_%FjRum:QBmem1r59M#nZ1>\E.(CGNhP5[BOZD$g:7?Gl.3*+a)3AE6"Pu4o9q8fXWrGE,b@>MjQD,HS82-Uf^Ve-)!*pP5mWG#b^d]^qD-NC]7%F6RS.J]cjeWm0o.)3$t'@0I$QHjW-HhSU?B]egTea*/u*3lmF/1pgUb[+U^IOa<(GXS?qKhJnji9e/MiHYV-!!"lAR?Jggo)Jaj(^1$b%WhnXeCNj@\bdLqd4uXgDaubDfXOrZ=TpInTLEl#qb\a"o*iso1\e@=T4^-)m\4YBaI[fHf5B6l/MK.2FucbqhYi4Nk/Xb*)<.!d_>XiC!!!EnR?Jggo)Jaj(^1$b%WhnXeGeo2S@K1PnW2Rs0Xl3iT9rk_<4liA<\k+"[Qd-?hP#Qd&'N,<@J_hh#T:P&G7+g#5%ZR8H(+TRYPS`!gIkC%M5Ab*4pdlBBEGfmre="^NP-StK.K]0oLn&U2n*rpGj(O"%06G/TN[Qt(,=&9!!$C@&:cae).[/*UL./,\SgFc)^fQ`*?Y@_!.\6@R:-]V49,?]7KEOG"._^nVD@uWRQ4J1Zp/R$N3Nfm!!&[(PSk5kbl[qG?ka0&37&ORTsE&N!!!!-6()-ndl[U1!(HtiL]a26(+L8O!!!#7&-gAf&&UGT)=Bk^^p6tDLIcL$"*e4'>Yl)@F`ZZA?F@$UKWPt2emJ:Y?+Hs^e=eK"u=$\b&T^diu3-UjEb!<<*R$4&m:kR=an^!9IA)YqHM^Nau,'GM84OTBKL>-gYG8P)MRi6dP/S\c_tOFF3%^HIJYX-=?,-5Z;+Cm)p^.Y.G*kE9`Y6UM_ZYKR-"DL!&+`c5TJtrZDaDCYGeBj31DmV;WR+#RotdHMXQnh:2;M^k!mBeMi=@kR(fV9VDHGdZZ+'Gq/W[%:AsAbgNW&V%i?_h<0\YML6er)g33lT0/$ruMUEAupgn5qNLhEi'LVbW5WjGdUm5dY3`Qu7$35T]PW:201_0QdJ5JQ3i]q.<79tuRh0TZB@[Gh1q`)1_/rEl$ReE95dunHcr9@VeL728T[.3L/.cJ&0.\03^WbP;Y&hAb2Y3e8'?*X*;l8+D$3ctY@7P6Hh[L-9n_JhlS@I8W`f2K"eo@a&5c^Ls1c-7tc!*]g`Lb:`'WUDAmGH\G_>H(1'J/1dN2.DNEigDA>6hRn+adSkQ'#oE9o?4sPTgR^#\#>%%CQ'F]g;Onk8!HaXn$rTc.a.'R+nb2:n/#6VP^IG?SSu#)%@)UR*SfN1Kb9&lBV;Z#4Bb9IH`&k?j`*3r@$oUl;$"klpitiT$A9iVi!NUUnr&>UQ`o^%GWQSAGYMHFB$9)h`3dFmC/`F5L$^[rf@aoTDs#s#r=2`-GA'e@*h0Yj5-g5Z[a=2OU"G1s?SuAWH2['1H0$9[u@@@E$!5L!*!-+YfaJ+\a5:7gsrT5--PV]dlT/'o*@T#g0AYlU2/ZEDdGNJ+L[r:.U?bO;(c;Rh1kE:^"?=&*OoXSrTB@9tB(5t=umq4/qWp4\\cUUYK&2K!kGD1`>[#u`if^a+'m!h.DTW]1M9WP]sa]HT77us;Aa39iMW?ii:.@75./Qg/u%2fpV-Jc<6OA$k9W#$X@e^on;c62*m:-h2)OQ#6?Nh7ro<'\flTq`fPEq>kb:%Rc+O6[3P9Oc&Go*ZHn[D."Q%a0h.o';tJ_k]AUf(DaA\aj;q($cr(RL`kDgo:G]J"jeZX@feD5jS/[2f@"h'>Ko/pVu9.;6Oq!:74T+uaNWXV7@$mm=rIVV*QOd>W"RVufUA&n;*_0Q>%?F'F2."43eKsX174AV/>!]RNQn"r53I3;#$q-$8Xbm8MDV-&1Pg:4Z$5)dP],sA622&&aJgO_djR""2ikXG31J!2#)O\sit5e9Qo-O_%VRH\d&,:d#EMK$+EKX!Qa5]Nqj+?INrJqqb@`ji2aGuF\CjJ'ji&Z0gR!!%rZ!Y>StK.QJ!\%)1D&'AaSXupfGj98kLp@ki*]?Sk:sa*YE*uiR0;3Gl+Xl;P%Ml9M4:$O5T9tYG\E"WAB>E,D5_236\G"9PTTR^_=JMrPu%PP]Pem1>/c-Bsl6XMDV-&1Pg:4PFM6(e]K23k"=L_lF),-sBh1+WQB"%'*Ge/u;o_0Fi.OZ_#\`\J>1[+2)^4pC"1MkhAS\?22coslkqr)$3kN9IRAZ9&2!ITA$.4,@^aU(--KJmT(Gie3"=Uns^3q?WN43p\A=pmDna@2M\,#%S.!!!i>"<\1r#$DdYo^sf8BFV$4"M=G)/de9uWlDGjmQTRp@Tlr)/Qh<)iD5A.b5D)1n*DM5SO$U;Tu$1j9>=ZB`O0"7LFtOfgVLSO<-?Sr\?UH^")<_^jY5KW;b/hdF&2H`PpEl]',WpPJ30gX`kL2e#\J,9(8k[@/*89un,T/q>JX@+YKUUg[_pd+J!C9'k[;bd)fQ6A=Del"%/6KQZ>@;E6QHn?9]b?T-jP!9YNaFq)Cl1thMk&5;\I4aW^Um>ZD[HJp>a.5t_DDc'!.[p3!9-7VOG1hHs.e]M;eK<:\`s#("HcX&V<%T%F)-"!H]]X@;,M?%JKsbp]nqMMjWW-!!"\[#XBBn%'i^_kQ:eb!/@/jY\:+P*aO\WKS5"XMlF_rOH"r;2Oe0*7=`Z+$^H]8!!!",#g*R6`gZ&;[7/&Q'qS+98/3EF)88Em4=N))L]a3!"._^n.NFJ1OOmeGZ&.0&I1?!#FJ1OOmeGZ&.0&I1?!#^#TJOfONh7()PFQZq"pP/0!;JNNk+i8DKD<+8kVdes$%@W4O:4q-$o-a,BAc$fO@1.R'nq4rQV9E"qo.;)Ij(`e+[d$fhD>ID2NZBAM]jVP:CaboN"6HgucI/Nje-!t*V6Cjg[ps#mcZ1b=@Rp!1nHCd9L_4.#0[D^4]]kb7*9383CRej*\HO9`Q5QrQW;?WOVI,8a_)a8uZ5JpPnL*pPe(ic3)E1f#.U5h]--RWj2jrHYbIE\hLVp(O#R$>Ia",>+a)9U.GDu=V0[9_qt#Cg2C?@G0lXPD*,\5ZR4[!L!ZVQF*Eo3PJr;ePlQ`5D["@oCdI;jhncn^M5@7>7tkPGc`dRlJm@_PMU_O<(t-k8+i^7@+#T!2om/:5Y]#LsOh8DSsMVi+Mflamc+M&0h[,"qG_Z=k(j_O.R-^8HZ""P@kUH^X61LjEhOZ\*P"N2ME0Xk8F%D&$LL(]D#A5FG:SLRFG&FAi;/9;,P`JQ0[g!pU.'HHhf.9kVt%3)n3t?ScJfk:c$7a'L?@CT=5cqL6!LocgV[4iCTF\7NCV#*9[g:W5Id92Jr3^lYUP,5':K0`ClQ:T4^-2oXKs3T>p"gm)p+!!eXXiQX>hn+,3(T@7uo8<@-!0&sH5g="nk[rp)"^8U5UWWJ'm%&WpZ@/l_63?2O+R!rr<$I40/7"J%i+hJRES5)'2)_cKB`-Y8#LEM,+,TJOZ`Y"/N;h$;>cQJ"6C41b7-`iVj[QHo&L]Ck>J6V^D5^DbiH4+p7UXh)*^".)thYi4Nk/Xb*)<.!d_>XiC!!'#fR?JiY%-$mP3j%;j[DQY%D>*>n60#HZQ^`(PM46dSaWu9,m!/fkR?Z!&\7B\k5+\Ro&0h[,"qG_Z=k)?t9q8a**q@#&Rg9lI5%f=L=]ma*V`d]Q[%[0Go1:7sh^>=,ZZkdbe/?K4h9RGq(DR[g=hiM2_F8g$L="lm#(I]fkjd-2Dr4j6G*?614]NSQDdr"UkY'$!l_/q2!!(N"1+,Kte/:;jmEHCqPaY`8HZf`u\oR2=f*+X3[u2%>s$\3>F6MhEi["g?*D=AKc&NBJ6>*7JchqC2Nr>,RIPGmbbNq$0\C$:;TW]c3=ZXqLBA';-7PPN:K2Ide6]="O)*#t\A7;Re:J/@\hP'h]S(KDd@EnYNQM-oBRFu`N0lTn;&u!UT@.B+lJ\b&a3d^bs:/"8gq*LXGW2M[j_,=nVs2O1rPlL@Fhi6&/!!!!K5adf[`TdkA-VgGs)n57h[IKuXZ_Cog12dshS!BPr]X97o:GoS"8:?dV;HTjB+AC-"F=+_F[]ji!bkeZue$SbE<_h!Zo_FBXEKVt^VgJ!Pm;]B0NJ,SbPbcM7,7\f"%WhnXW,2),!!!!d:hEg/\B[?Rb028[C"L@_]mTf'CZaE+mbV6==ZLj(FIT`^Sh31AhXF7oNnl,4[Cne1o&.pE>+)jXSDChp%iK!Hlq&eW_9+VSq'i0@b_]KNCV]*bCt^kYGN9i&;mLFY-S2.n4@Ac#AZX(AYMDmuaI3hY9Dr^FmGdBbj/[<,ndCA`0/r,pmEK&-mR)JjJ$jiJjtBo\F1BLlXd>bl^[)alZDF+];qk()m+BKVh7<9aDt%^egG[oZH`c,29t3"qWDMQfibof[>LK!0Ga<&QoM/Q&Fu-m0j*'7`BE*n6D";YZNnp26G4"(ks/C\CXJERS+/R_9+4+tg1OZh;XkU5=,b1j>Us'Ap%WhmbF9YmHD"I`.!!#A_Alr$HcG1KaB0*r2f**2mHd^)+nLHE$Ei.0>U#W:AK+]hCVLsobHIM`SiT&E^gNM$qWE/0K,%pk$oVY0Vb`$!]?Wr]a;f(D^$b\(Bra7b7^Gdl/H8-GIl-Pi!_6QIYRDMQ[*h@kJ^slMu#?%1j>M-KMF-ugBF9X1#U="8Ukipt&5LONrF1\>al#[Xl\(Ocg&0G#eJmk##3rLu9OZ7LGV*j#1Rs1Ar3)@_cg7#M:4%8Hpehf7NI/,fb5'>uh43JCW_C$EY/QntiU9KaRR>0Qd[AOHlB7>r$HW,!%f'dYoBdIE6>.epU/)cX-s]deE/kI5^WjM::gY20UM2RRoJ;AP&:57NCV#*9[g::tb%7!!!"RTZjX==Ik#>VH-IZ3d-QkZ%hWJ\REYkb%teT`_',U.n4=AdGq.O$AcBkOJjt>`4dA0ql?:?kKY07cL<#6gYB4H*S\)GaEs=.e/>'/.6Ao<09*I.hF@gqX^,$rO.W6QVPf,S6;W@$32[PV!&6GP@p=erjg/0`c$%kr_g/-o*_tNpo&9=3h@"kKT;D%>YE-;Gb.4,Q\7C%J"D3HM_q#<&?Sdf^>a($\E.(=\Ua@OKh\&;f5DB>]pTd!T3_`q&(Pi#Oo4A[kY3Gu4G/6VWNr>D&0h[,"qG_Z=f?0/!<<*"6VqAs1bG9Wea!;1blZi_`4H-^3.EYoimcYg<6TddqY/J%.+?t[%9qEm)`*U_db1)6gNDZIflrN8_1-<)RZrMe_I$=];Z0ESHC$>kR8Hp%'i^_kQ:eb!/@/jY\73$6d^Ym'J4:XFQhN0b/qo/bFFqG['%M(/De#=`u]XrB^O^"hP4_u+hsX5a3*"fc4DgO-sMB31F&dAThO?o^.#UIJ?.:?d4+dj6N84(=JigiS+uEeiJ-K<%9hD5ZX[p"7M`,spePTtQnjT"d_=M4PCYb^d>*\tUj,J01DKfd'+$7,g9gV?\SCLYFt3%1Aap*BmOOTlZuU8'gF7O@bfSBW^QX0IhLs0u+$9/9m@*W#`E@]WYPjD)/-"VfJEM,+,TJOYUiM5l'(UX3t,ILipG'<:$%BT,,^8gjpl[_+f8Ng!j]eHV$A@:hI0Q>X8n*@M]PA!L$^r,0]ofq*?G)I!MU37UnW&#hLR=p\P84rCCWA>?(?/3f^mWj,Ud>_#5YE5!:PRq]g6h*P6N\(,e:_iCF9Y_H%uUO\_/Q&'aITdZh1gt6)9^?5XkU.*s,ZC^=h!i`kg;?MZfX00VU%-22jEPW,ipC"KG_6bBAc$fOG2+P^JgK5Hh[K[?^cYnTODoD;d2HM2g?&0RSo?8c>a&+gNW'a:1J@C>-P;5@88^X%o`=+@iKdHNf2q!=&`/KSse,*MuR2Ng&DI.G<_YeX?&[W+/(KHceFFs_oIjtjl`OUknBu?[VOo7@H[%td!*sIh87u(PaQJd,3_`m>Brd@3WfUJK.MsFqDA(D31DmV;WR+#S#_LA1X(i=T,&<^AsG5-=PIEsC;#(E5,kt6>'eDQ>"f0TKgdf\/8X%_2((=YU/a')Rs=_l8LrP=Ck5Mh]r8Bq>&9!EGBEG9Qo_]li*_[Voq4*SGLN@99=J@8hd."9Qc`X/YcL]5;Mr2aI(MiKnZ'f0m6(q`5T"e\/FA/$Ng+EDCE.kjYQ.fYil4+-u'Qs70uR5$o\.>:Q>X)rc[`tfo,9O#5W"3kY-iQk"fUh'^(fP!H20.*8?'L!@=?=&*@O4uMi4)j[:Q4jfdAE]rtRNt+CRc`A4T>nog<;ttCF5nUmUe)T/XEX$fT3kD;`F,5pe'.D]nl;]rNp>6Z'CghLkmTCcVY+k>Ap4$/%%>bqnY=-#s'oZ1P^K='Ua5'mor&$ejc1R\8+4g"a*t/H?IYIVL`s[V1R3JCN1@LN=Jp+o2-SM\)7$Sil'@f"1RaT\GO#ShXL=TFm9@.:A)gV;-0$@Ad`\aS^'u,Em[)g+F.GUhMaUb8()T/Kgsk,lQaGQ>lTTj6_=^eSlNUCeLIKo050lK4@9V\5q<8]T$T7oNC>@>__nrCiHhSU[KiBX`%P+FTmt0ZeqZgn?rb%5YfQ0=8E7F=UG$06Hc6,;h2nBG?6\:rh.jW#r.B^:V1N9!CaJ/Z(T2l^a"e@>m+76P)%?23_5.E3c1a.Tt]sH9)Uf!;JeeB\Vol.4-tu(V.FcHo%!'W:1!DG^#O5BLKIeo=L_mqPIhod;Hi/4'j`TWWfhK,/)8%rD=RQB=;j8MHd8FSE_Kk,E``H=+]"qG_Z=W$=IL/$F9rHar;]2+t8IIY`sn`LebG>q4-9)-mp0e#ONMe;5KYG^U6iM4GAr;4imKk5E8%&V8?M93WEju2*LJffmhegX#5jdRsj5Q:ONJ-XS#oLS%HC>\PD/hj4.lQZ+/(eC%'a#V[$RBLtoS1cSOeRVQ'HYkmVYfC>@=4UEWssG,C#(c62*jI4`lagn^c&DjnGW7B2Mn""Vj<,&M]:;kNaH*BJ)t9Ql9QtCI+2t(/3Fk-8sNIT_Ta7o!dS23BiIE+6pq&5Caf]k:qguc2N?g*\g)q+N(2M6EC8cId/YR`/893S,f>>8>4^4#lRY1^18gq7b?032;jW#p4\a6d.o;Al'iE99KRSqFE9e8A,NB:r2aMU"?h^FJ1OOmeGV[6\2fo66F9YkbIJ!QpK)F[lahP=:TA8&Vp8-3i=!N`8Qm[L03f"n)07jt_SRTLW*46%\,-^7a39it*$6nXDXRVDV3k!.2Rdege*1'&7K'a^\).k_jq6ag0.j#c)Lm'?35c^eC@BJ67S]C1O,hm[9]rN^7`dp<(NMl:'#_U$T;nOoLL]G;VB4+DAjp#EK3!$?tq6hu4&J^,AGV2]q%neLm/h>c)&.StDG(Fm^u':=Kn?M\^2#0AI&N:2R0"qK4toXUfh@6[!W*/^Q%bg:";((H,\+\V8Va?`i/Dg9,M7k)RsHZ/[368J.LZK6%h]H$8OW(VQc5>%rfTr)74Of?Tm@HXW2j&8SYOoCjR;>"#m.n+IqM;r=]-U,*'0Fl-4kcl)Jd8>J[Xp@]"<9lG!VOT#R5WPZLrOfH@IE3^p=R!hQbdtZG>G+QUl9]cj/kkbmiEEG#XP=5`!DYO*7e&]][!oldgccWlRV*7s"HtN;"i/I4JZjSf9_$t9I1VMNF9YmHD"N9FB]Ic7qW#LZ(@\G$IQ[Q"d:9p,'c$agl`Om@T$nln%&j\22D.Jh5B!oX_P5gL6>$kG,`G\'n?[5p/"dDO]Jie37&0pU5o(phI/q('aidbh7ts`P@HD+eln`E`/H6;[!9BluYR$dc"HtN;"i/I4JZjSf9_$t9I1VMNF9YmHD"I`.!!#A_Als`3+G*0%W<2!jl+g@c+/X:$W'6#.#00F8t(!;nAgp^66&'^lL]#8-2cB97ha8)M,>/'lMdjZhc8!!!!uM_`0oF9W=N_FPCA5>)6q!r=UiHUIHl6or[4A>/M?LX#l"!2)MQAls`3+G*0%W<2!jl+g@c+/X:$W'6#.#cVip!!!!uK@.T2:7sD!?kPr/!;K\Xn.j<*.Gc#D%jKGQc6*K>NrIj]%qB(8gH,3k](mt9>FCrRHt:lo:E!??j<$([l@[BdE64"*]gBpo>^ZJH,UHgVQfmGlN=MT7b-mk;SS*18jK$o./3bX8B2E7YQ1sbTfWo?)di#U]r6DWY:O_]+a/T)RD"I#h$YIDKW$PISm9SIh?FjV5e'r%'lNR=h!")&\P9T3!,++%G.KFp`%X\HP@>af6l@Xn7TJOZ`r^T1#-ZAtG*BsINbcT^!ba>#iPYtXeaj4]dcd9POmG*CgKnVsrf5,?Yau)-H,s0Y`:[#S;@l#pIdpHYXl8Orf=aiW_OJ/EnEcUcC4AGG7g5kJ,`PlcZ=tWatMi$mE4BcDuH$T5-e*"_FS7uTod_/`'NnsU($OZ1M&HDe2P_V"A7F2o?0F8t(!;nAgp^66&'^lL]#8-2cB95R\O8eoGOgOhS0R4G9rO'sdlO4/fXPb`p]E39ChG4AP;kHo5C!Y41rggY3k[ddqcBG/?FHD]Ua79nh-M$V"ba?'tCr-TA.!bj,AS[@%5Q@V04=V=5F<"R$)n2hj3Xbug^iWE8U^0#6#UWuU$@nbF,N>ak7t9qkA>Jp=btcf,Z's2CA7:Aa,Lm#2ks/mCKlN\sfX0JhYID'Mqp_%](GB&0J"C*#T'uKu6(q^[Q@;7-k7a'Zh8G'2Q^!_^d_P.jeJjb1f\D>HV`d]93lAZ.%i[?HGkpXtrZ@/&g3]-OQ3jZC0/#PTE'?B.d`fS)>@?so?2O+R!rr=KKICn>Ud1JZf).t/27K:/W24p%l`V&'mGQ,E)p$>'#7h1up">t)PWX3S(^iEL7ur[mo+i)W's[ZaWG1B>9lKFST$iu4;_p281g6Tp9[LSK<8eq.n$8H$F(/5b/8a+PP8CrX.4)4uOCm&r*P;#/G9Nqt*Ns*jE&5l%C;Jn@jK[jL?&"E"i#`'#*p="t+3G!Hi]q/75\H14&P)lHh$;>cQJ"6C41b7-`iW\\-hqlNYG!a'MHe20C-9i34?\8G@q(er3q(mS3+m[[gRfXoroHOs6"0VJN0"Y3HM%g!W+t?O3sQ9:US0Kj!aN@bjNH.YfXUA)]0ANpJ7]f_b:&Gjg^G^bCiF:THgAtjXR)J8iF.-=&$&(pPQZ(4TFYUg(ic3)E1f#._W[cpkO2-8\I]hPfC)Fe$k&t5Ip#o746tuEA8^d`4u'UHW-HS`X_&>$I"-kl]gE$S*gW(V_tI^[&2K"%G7+g#5%ZPbUY+tcI=P.,3-=5rQ?Jjl2RIr2,`N`s2`cEQbih^A=6m'9!!!"`MUB>9:7sD!+E$8^dqAW+p+J!LF`@)cHiJZ:=`O-,iP.=V@.B+lJ\b&a3d^bs:/":=-*sq!7ua!Q@FMZMD7d"Y1Urg6OdS'LA;nOs9s@QmV.E[;m=Y6GX7pK4!!"\^PSP#Pcl#4_2fdQ2$QU=ZSRPo:7ag;*eV6AX8XI2/[-Cr2]MI?$\AHmF&Do^r3$Z3ScP2Ec6\6Y?mDO/ml<;F/ZiDNZG;Rqih5*#+uKma^&s/C/d.`VobQuAY\MEP-9Go)%#hL_nf'N+q$$C23dLk@I/3%BQ#UQnM)(!HMs4DdRl9!44X^lP2ac<*kL@rc%j1B_o)G;0#O9Gq,lsP;kX1a]7NCV#*9[g::tb&j:g$r3DW/6"P(+uEuq@-,c7`5sgT2?X![J9"M!=G4sBJj(D0.On[crU)mp`,j4o:[HL'+1ji([/[1LS*f%En(iJlYJlIE/6Y?s^3cK4%idX1+_=K-=o>,9-!Y)Uj7[pb\B[oR=_[9iahHH%E3MQZFJ(DiI4-niL]a3!"._^n.NqdGq/&EVjWF8]gSr(K2NQm+o>3^ONH7U;ld5_oG7%r8[M*\*n4k]&V\3Q=]#+T9e>o*Z]1S]N+mlc)NW?/KHsZZ?'d1om4T=hjYb7":l%/4_Rq^KqJ0?UgmFuh._np'1?77NM!!%P#.!&8hSO!CB0N&(icdIBJJ3HZshGAV3OUcI;=VtrH\*r&6+#$N;52jkce!$\Dmn6:m[;_pqG4""Y9V$`j?aaS!kXj4o!<<*:Jhe]Bcl#5*#pWFMr%&l`$L#AAmg[eP&a;PnOG0r/J'58`?$[!DP+Q^U_C#eo[$-K52_.^0r+=Nm=F8Y[bq.TX$4V@Uqut9A@k.1d6Yf1Nhdrk>=&rA-r5-;p.SlJW/`"..*qe[?gStcF_rCIA^%r0qZZ'X=g%A=]Guf1?f:-%!G36fKmnJ`LS&3EXWe`hXW7j9'j1=slBl*4ui>$>-b4W.][ZTZG>IdM#(0+4/_2<*bZA\'`eA@>??GCbif_qWseqO[,T^=.Uq#CBp$pg;F,3TFZR"USO!.L4DHj0.NMYDkjK8=WB1W[E]UL-ho3+VgZZ/_`TbU:-\IqZdQ0<.4;YG2mc';#&J`5D["@oCdI(D[e2Mi%2un&*cG6@'/D,/QLjk=5Kkc/fWff'0>F'\qB-'r]6:i-ou>aqn!:06?tnfGF:"L!6^?6o%/Oe5C)u,XYMH]g>l83n(UM@;>UE7)HM'?!dGn1VL\?La*iCcS*^BUaR;GjmQ'.;nPfq[R(+^3om^qouffK"LiM,%R!!!"RTZft>F9W=N_FPCA5>)6q!r=UiHUIHl6or[4A5WB%:Wr?*)H^-(G+_jGP^LK\M)0ADfhVj(I6TreE.R2eaN10XpjN^[\o64"''KUK1SjDH[5=s!Wa3AR43Kj4iR4V5XkD_J`7XV/(G&lY#LqYNk"aVg1WmnaHhA=MokVW%qXOXe!#U;C-UlB"6neol<<2qJ*V^!*_\DPKeHZ]N5\H14;+$:EBK.'V.:4oXKs3+'QOfb\i!JP^24so"Q*tnF'1mK_mQiPa(C],-(;!$mIS8X%g-PSW)N-780764)-K3VS`99O.nZ_IPL_\>BbcQ*]nhFR:VlBGOB8!X=kXq!.Z4@F&E.35m3B*;?ak^dXeTP5"tM':jin;%WhnX(i/cqDV,^91dkgPMi:=[L\=^i^YQ1%D[`=B.,/VS3C_>SP)IoC\K86k4@K"OJO`Y-!tZ\d/DirCfn+AClkAI]Itl8C@)egG+BR1GGOfMNh6mVDK5Sh[^1VkqXOXe!#U;C-UgMS)3BrAOH=33ebC5lYqX+.;s^[ncl$A&XO7(HeCbU)!#U;C_]j1,&PU&4'`^Hk#JL990ZAB+og(u,cl$AfZI&mW!!!EnR:-[gK*Wf4U^DXEV#t'*I@0$-U&#lU*U!p;:tb%7!!!"RTZjVGSO!CB0N&(icdIBJJ3HZshGAV3OUcI;=f?0/!<<*"6VqAsK[(]l8JnE.i+M;i=$Rk)G]0NELe%b3K.Kt[q>^KqJ0?00F8t(!;nAgp^66&'^lL]#8-2cB97gV8&(dm,2m@tpdpUKf5,%Zi]>!4kkJkS1!(lrlH;Em!!"K:R:-[gK*Wf4U^DXEV#t'*I@0$-U&#lU*U!p;:uLQp^%X3-G.F`]O/&35U:?JfC!S5LAD!,B)Ha9*+#&ds]_mBFCsP;=9j0S"4EQObRM3*Ib+ZLa]?X&NXF6Q6bh2jo!!$DQ-nm2Q6"^bJ,`G\'n?[5p/"dDO]Jie37&0pU5o.T\rLBCjop^1#q"HMPG+UO"IUZ2IAS%^BJB%0h?@G1@%dbnq?S*oakF$F>o(9J4'5*b:\9.0SZ=EY.r.9OslN7+e!#%j_@8R;P"qaPG8/2+h9*`04qCom86hN`53m\aTTq'LP5:Q/e#$)BacRLPrUU,KZcEM]h#(TMh!f(55"d&A]WN;uuKpF@:M!kig@kLQ'_HY1]f./QT1rJ1OCaIAH]^+s#kUZ;Aj1s7ndpVX<5h^!3\8Vp:78Gj07VcSOoLE*/luo()?M$0T2N,0_ZD\ci:VhmF!@1B7CTOH+@uU(@Ln%#IQtK85JlY]G$\kSQr($nn#G"u/Xo[_=TW='B;bi8?Zk.M`nl-K9n[VeA5LL.`@MrhFRpL%"kP`_BQ)nL8C-*[E2B%ART]CnF4+c0dUQkL\q^M3"/TkuX.U&$5Z;BKChmrV,HI4Je-Z;L6hq5G=C!Y41^2LL[)EPe8+-,iWp[1891I$oecOdj=%JFE7!!#gt'GqUd'WEks(c!T"g]^lQ;uH=VdOSelll*?B+Q>H"]EN:s:f^nO.HRR`SbqjD%^8kpqh9]^(mgeWRus,h04`#BEKaN(kj_RQq[Z8JO[39B'><&L[=du7R>f4c76q$2ns@IbYI1TSh77`ZIXV;l5A&/I`:@X8c&]9cpruP\K;_.M&F&FL#]p9D%qUJ4EM,+,TJOYUZ(q?^mnK=_&0CAVhjXlh(-ZA[>Zo`eiEelaQl@&1F_:9BjJtbS'`\5a>#8g5<1qMZAFm68DI-U`gkpYRd2([U!PY&oe^-/plr0HG/I.The\HV!;S$s/VmKX7Ej#MMl&"=6G=M&^jEKIs+]TYPA=-lU&op=f8*l<)iA#>7-l*l,>g0RY_#`I#mM,SM4-hBN/=!J9qn?f;IYV+)kbWE?=\WEMoV@"GF'=^fYsC%^Ro-[TA;7eV1J"7Eecu0Td"aa$U7Cf`?gg-cC"LOa?WRs5Hj2J4ICuN@T.`J=nf6gO4ci/0ff?V'-I$5S_1m\><*iU3:'2oQ]OPmS]D(`/Cm.n)\S`XA>PS+V/SXt,J8NcN(Pt1W0PdSq08#5n\mZ4obS553*RsAXd?-HLClMLHbVD#Y$!"IYQS1g;b(6?K:uOjtC>Q1:*QGSe9J_>>H3Y5&n4/I:1q)gk@"'+6G_+cJ/R`\TqcJjkIQL`hIfUp3d;1lLc*u3nQQBSA@iJ.k@T0_re)6Ul0Zi6Uru*;k9/C8rJt#Q/0,thsR6?"bh['MT[e0r((&'5&uB?"6^rT&0hU/"qGn_8JKbP!!!#qOCq[[B:e(?YN!,RpUtW,^"M.!#k?5RfR)PL\[@Xp@]02fgV/S58SKWc3?de<'g@PuO8no8J,Ac1A`G,^crdujgMi`sW2lu*Z?J1k)ocVT?0;M*>1>6(UA)j;C3!H%m/Ea>7eV1J"7Eecu0Td"aa$U($W%lS`R!E,g6ok]*pfDCAub$oIn.b^/83@>a7#8SltdSU2"_PKV+ll!MKfm[I^pZZ;s-K7Z9nPa>`R?='mXci1AD](*?=kGTY07"9&I"kZBCht*gbRBs?jQZ!e<7[825#VR;=ZQ->5O@^L#P]dXn)!Z(1>B\>UCPk8K072Fr;AIE[Hj<#]/fVfdJB8(np/HfmQLESn)?$1N%_pdifDRY*i"+]d':(Wd`?Q"7E$0\.43BfjH7/nOCnQ!j;DE[+j[qIcQJ(]=s!_E5TfP*MfQusaGNPg;?:a.`C$3tF>:c77u@g$iZZVjM8EFI1=FfX4MrB6$j'+sOpZa2/0<(Ok[KG$L>miAGfV[3U4Cf:0R,D`S/\$LN7%'MPCH\VFihqS'iQ`hlR(l&Y':ZrQ+g/u(OiqfA@WOP/q[*OXpEW$Gm47&;=Y-Ra>4)UM+T5tcEhaT=.kI#?5nb4,2scl+Gn4JIViq=r;!.]\`$b%i`M&Y4N#U'kYK&?Bn.bIrB:#f\pKAP=YB_:",YkG1M,]Rn`?;7W@$m(+*P*W7C0qq)+:'A!!#$@B37Qn6%DO+;?:a.`P]4f>tjeB:j`fd%s\@N9W7W&harl6ZdHe,T<7_#ePVr'cH)`sklLBi4Nf(;#KY$/S)>)jf#aV`X2iNA#P_u!)!glYc]BLVlW7pr6Uq]N2/h1i/s@*CrEh;9>f(=F"5%_9B\K)X5^/"%0tu^F3RQgNW(\e'bg[/Zj'dqG$X/d_YcS%G!]e?0/Xm2%pY8.sTo[m:4cJbQ@jdJNUgondGRnU65k6o.1s.($K+af7r:;Lj6us80\)bcc[hpNS@*9D0)a!o,"Q#8kuFfX&E@jj+DIbY=\^L6>8R]n573@+_*@shH-[UVp?^6$!B[6@2b[1MhBkl#]TEQ6VcrI6RlcIUB`qdoS;0b`)l*ABDWcN#o/X=AK9;LD"]m'MR+-'NHF32\Of3VN?cd9MV3?^,22ROhXm_d>1q#uIO5%9c6pdqfuZZDa$I5Z,)5J3'HE!pE.daF?b?(iJY9`Mb`kENfH3firH)eu*Dnfd0:2/Nr9)G^2,TiG$#P@P>1rUHs7fon>[uA]T4QJ\quI;8[C%*"G.`+d/pePN+i_W80Fb;5-!\r+Bd;'/M5GS^HQ9O!'ia/)&A?I&7?-9;uiG$nSkWr(K7t)'H]`]6_6RVq6tgjL[7+roQBa`\*=R6.,n^Y?NTsX>Y%J`&N?=N6ZVQie^)0@#Rh0?+obA7T0<&]Wdh%??Vi`#F5hej.lHUbX'C))8]b]EWs!f2H0Pg-S"#oIDmQUa^&8jT=.?7[f=h>On@')/!nOLRJr]94[ar*qWiCr"EU!$OH;-I>1NP7k2BLhuRYkoPhJ47+ukCLOhh4Lb.01F_PRCns/P.Hb-[@\"f*n:]k:\)ZAT$BsB<,k$*)!>sQWIk%X.2?u.fai!8JKbPqYTm.q$r_9g:tq+X1X.r\p=.2V.-1)Sns!!(!%B37Qn6%DO+;?:a.`P]4f>tjeB:j`fd%s\@N'\<,<@As&@!!#7sH%ncK)$HmiAGfV[3U4Cf:0R,D`8/n,MN.L&HPCH\VFihqS'iQ`hlR(l&Y1/GlR5fiE_s+K6l3kPKmP;kt%!"R"77F'APe`!FXqFkiL6Kg=e?g`\]fZ9[n`1Q'O_555&sZDrS7hA2Y!1t8G`:?SS`]#/FduiO]Meg.%&()9RTQqp(<2R,A0:/9XK^AtT8%R")\G4%Q0#ElIjP3)!\]D$L82/)rcXcFN92S'].AakK^@`l*&>uk"?GhJO'Nr@^83)L\OZ^t''G':#W@Ep=rO:7J([hYk6I:;Vb1Z#t23I!Ib#,=_L:m:];geCaP`M)1Gd7X'%pYj]@WDWSj#&BiV?01`?/d[8m/pQ5^nWubZkUQc9PYI`X&U=Q]-;d><^j-\+k6c;c`G7j25t!ir)'k>olf[@E`5_2@!N`h3O80/b,UKAY_)8"XJ[L9b,l\aUH2.US+(Yj#1.L8rJ0$mROKjAR5?d7G0g;M3p8'Ff_+<>+ldr_d:g"bUm/ml<+e*+VboSDmd@dchu@ZFU74enDSGhUg3JD_QHfen.C?'+0l]%WcS$\G5Dj6+hk]6#i?QD=nh`U,8\N@9=O=dS@856`>*tVLiIAQ)49LT#Y?\\*X+Ylu.36:<:R44p;0;iSA(o5Sa%ctCO$@q_!*mPMa@Z&clie*&3a>6@2s4.^L)bu%%i-C76!*Pff5`u>4ZnRI`g"Z;n8\2Wd:PD"3F(d08^f^t\K\fncp/1il>bG>3f5-,c+5fCoC)V*L]QKRSNSY6,j>**WY3-EMC9O[th'Benp2ou#!O'KugNW(T*\a3>^N%H*7OqO>:S*+Aj)2cSX]tfo^$%RGm#F614O$@q_!T"qltHL07gPGW-1DVcq^0%RZeJ0_#es%)ZG6p0NJ,a!TB2gfk`@o$GjDf_s#@>c<^VYh`Z5Jr2Ne2HH4Hr``!'CGZ7cGX&q$k9*Xs%lL`4o5_hIp/CM:cQC7ie#-"2^b3qa_CYgI6O2aFb\/cc-?9t=kDWhIZ:M2N<\G@3tCqe^+R7m"$[khg!>'\*@'<&*P;>B_sY=1c,e9B,H'j.dtqf00pD?68c6>p03@Gk)9$1<_O:I%2p(mXd(b]kNoM*(H'efmD,1n,Zk0HJO'_Ya)mp4"H*c6bHp;I9fuY8`^>H7/jg324o'YqM$T*X'B&`iYALs8aDDme9il17F&I&D7/pD\](WAqffsl;Wfke.<_af\jk:/cKs^=.0QhOecgrY.ndM1L4@>&]j;Br<)'gr1f"ZA)?Gu+<1aoeT*_<&<)C2WZJO@KCqS;r4_F6YM]Q6#[abhM?mJH+,0tP)I^NJ:K&$JPKbLLg-p#Og+[I-rfr.XjU[C*D!m.Htl@V+"0b&fXSWmd?GO[A(9-jcSH-47aTq0ofN>I&=sECHMqG3ndO5P'f[/DSf>4SbP&2)1W>^4lb4WVbR'3^F[5h'#[AGDU9>+.:clpE)T!W2R@WpYOWM2ZIfliHp%^QUK8H?[EMnjhe@Fn#,1bbo92*QS!d[4DrT+pk6SKdSbsuI0YfA%JuBTIibr@^=U.>\*i>:a?6_8irSj=!QC]/u0(H@`u)#E,3(\!t.8Ai?6Rb(p?+6r)HFk45'JjLA'\d]UVrd,;eM]u%s0+2]JpG^tgqKim8Q>>j@Deed[aT;,X1j!=^?b&pMX/`5d?TlMm7c3=h'a]^GAt9oTFKE0Yp@B0GXa45C8hDVHMi$7YCXEaA3;VGAXNk0DVTl!8?0UM(?WWgbA)lj"L'J5F>(,%_2U:n&;eF=G4>!A-\2Z;1WV?1%c,_\S=&n0pkfP\LDi!qU&LtMbe$p[eW7tN9o:1HSbG/D9'`nBX-I8nE_`WR_?iT`$lh#lA@]^_BqW.eja-fqmPH2eP$_#a8VQ=\,ZA8lhaqI]CtK_#X-ArPBWS8*B3;]f'+KiRG-p`(k+.a,`l`!qq)Vf,#*"VCk8=Q-8>h1))/-tUiAITW#@!Po,BiJQXr2M>7]Y8,g!HlO[l/O?J)#^EEa9:j;s6JgSI.M5%ffEgH%naJk8CRHErBVTcOTcHfmD,1Y"IQaGFo)JIpKeBkhLkb,!4LajlqoB.b`c@>^D%d[d?`C$3tFHL3l&V`CMLHL27$>Y(grH[OQ#>8^s?Tlb9hEl;n`g*R2[*3mpZt5BI,0L-@NJLVb/gULJ,k;A%o#rm04FEAVB4/MOD](a2+XoF:lLsjQ[_TI3.b1rm2r$Mbqp,Zd;_Ba3Gm/MhC`q%(]#Z\G#Xb276_6RVKseYoC2-_3V?XHqBHIeu:eZ-BH)pKEh]D^[I5@@Am\:gcbRd]*bfOEM^A@m1bpLc@.*k"CrN#B6jQ,HW044,!gV'>UZIq=f8+Z.]:m[E:g8]d"Bj$kFnj[78cg^Va"4ds1Y2?b.hVs!=7Np+IQBPs;&V`CMLHL27$>Y(/GcUBD!!)R5c`ehP49P1+4,6:i2fISjp5\bgr-S^"-Rs)V1Pd3%0mrLk>W:i[GOD?/(ZP6!g5orlbK2QY#Xb276_6RVKsa)E!.[8o)&D>"B2GR,1P=iiIIhV^h1dNJ,PA%B6a-NGYa^TZ;m+uj;C3!H%m/Ea>7eV1J"7Eecu0Td"aa$U>5;JjOBf74\#7SZZ>9dUYj:gq<@X5p,TPM!FEKdII`=>9=nM0ec%qK[r25WZEiHd*IjT>Vu!mkio&JDI;.cRU7u,*]WQ:+=U,EXB$[I7;rR?2bp\o=?0Ac"]NjK9bUd'b3*N.V7BZU5b2.hIrfgP/r-+tP%s\B+7@kYl)"J(TndL[0XRuSo!;%G\YUICOK7'%S,o$FC=Zka_5SmAsJ#)i^+s-:`OsmF)!<<,l+j[BK4G*WtW2'LQ4H"tW"6a3Os,Rj97)VHa5n\mZ^4tFur-)=I()34Qm>)l+RM>g+N]b3'ndGRnU65k6o.1sR%%rM-r]a;.&.oFu#"]N[qAPeW+K_ZD)XB2cNObV"moSd(miAGfV[3@WJSX>?`%r4t1/_pm.:,<[)QL\hkW-POM+$L)$q*ha)IInKQ06niR#2h@MJSk$7H/+e;UW8d^mY+[Z4CWo0Ep[/!Q'F"/[\fO(s)o/Q?=nHQ>q'==rY.dj;b(,oDa4e!/d5U:W07H>GjCodtHtUjB\YQ$C=_'A>R=-n6IkHk,GPBtmmsd<3dENsr2d^o;NBDirUX59=i(&"Yn!c/n5()EN.rf_'lK6b!dcG6Z'pT`ICpW?j_TnamhUS7ETK]EXXSfu]Nle8efNUD8Ys'tocN"uJNI=%ab_*(h-JOXkp\$[li`)]99jHNO$%`kEC"9Oe2u/r9)G^2,TiG$#P@P>1rUHs+F[N>[uB%eB]5p:g7-s,P7J7m]s=L)e,=B#1G!q>f&qsFYsFEKlEW7ftMOboRQc([B#eK=5.r*f.W#=C&)Dp3SJi3Q"M3I5@)5LI9BQUh6BW!A&&#G^+UD_Nu[1US(1'HBU:[2N`<^C*GeAAbI"=D:U:*&80ZBaLcg:iPGk8Yi&lpQEs9.BijGKT+o83/Ghe1q%"GVZ[OFO4,c^oOie]6qM"bf<+-SAN6;PO`5b11^,Paoa3p#jfG;eObmFUR5)?c'e=.\C6@jh/aO.s&7Id,5319PM$r$r^d'H\1\G!MA[C%iCp7EC8A_ZC`G<]iGX$PYlW:E&pEV90&Q=lj6r4grfe'Ph9[#>4XZ#P-d,:dou))V&iSnHEQfSECRFSI\AO'K"gUT0flCtJG/KlD=NmWP*T-S0/e!PXq0RhYog,^G,5j;A)f6mWQJk?0p;/'u6LY78GU&b1rqOMp3`^YsADc6W[LrqCUDI&@+q8@,0_`ST$^Gj;AUq#uI/jE)>!:AoqS_A5S9Ug=hnrpF^=DtNcN)D0Rn[GTKlM3A&05Bp.);0hu[Fa@7l?![KqTnkj;4j(qu&e\-e3]YPP>C0Y8k;2<_MCC@E:7`5!<*Yr]p!e?d1mVdIU&)AC=Im3g9Y3ql]@+s/J!5-^NP2CU))PrfUVH_=dFEqo_:DU&]ckCF7]?%FdT+S,Zm4t@]nJ8g3G;J]cXm=\&4rI%&U=Q]-;d><^j-\+k6c;c`G7j25t!ir)'i'ElR/T:lHs7sHYon[uB^V.IhOY.*lahT"?28q&r!-Pb)!T.4pZ:-)Tj_rb')V7aH-@pP'VKo)7$rb^5/d.$QuQEP'Zc_.OeofRlH/Fr@CNFhk@?=TmHT9cn4>PPNI`0BSNOI2dA_\UtVd'HjU!(;u_=>XKY!>?eRQnTCsCA&`[A'q4"VKf`TOCsYC@BH`J5L5kg@-Ock!t)W^hgjM;I,b^;X/`5FXa1sIH:"C>['\&(r3U$td3?a;/<,Hl[;M2B'a4TaRlnS4\p48U?k`l3*:aN$.'3+7=&Yl_1c;4K7sjqS$Vcr%!QNA?eCE)t[=,Nl?!iR=5^n(LVt\GPqRM[8pbIQ+Ea_]qKCRb&!0@;.L.-4U!!'e_&:cb$)'i']lRS-^KqqN,>l6oPVV!/ps[LdRb"&r!_W!!%O5j;A`\bl[qGUHeh=OCsYC@BC%?!2'jJL.-4U!!'e_&:cb$)'i']lN7+ekX1qM&`#PL!&+`_+:`Z$8JKbP)N=ZROJ^=Rc0N`;^V'C@U>arSGE;:k%fF]%HSO*Z"Hq]X?G0U],.`%"!+6KH5TK>'OsmF)2&NdJr+:[nDa7<&eQAH3D9VB(I\TiR*-h`e-g%-lT"uQ%0=piui-G2p\sRM`_LK7F\VG@35=^a*n/aMg^&5gj5:jCWA7t(?/?`>s>'YiqQ`p3[$1-<@k6LBkBiqhj-EaY[P0HTo]ek&PFL+^PXkIpd5A8Q__a!b#`_;mgqkApZg%BM&In&Dh7g@5h56s^r'n#As"g6Y7;n"(HLe0,q2=]k382ZpC&Op2Cdf7FJ%C"Z]r6DU1B%2>)FD0if)#/[^MD%.mm"RZe]9OkO.USR5*!3pQ=W)-Kou4^^JRTUCe%WUi?j0>OZQ6VgdES\#F%4u9=TAGJ:0m_'Wf%AGT>UW8dcG#\LV__E&d/QiZSUDk-$d#S+:FEQoXh:?at5O@_rmuuk_PG_u*KL3QfM@f]lSmM:BtlJ5C"q%,L*8AT?+at_/^rRnq;VY%bKDD(ShXLQ)*0@%7nh99?Fu_B6DJ\'(`c%0pJK&3QWQ8=@60p&5HpkcdBK[SY)Y0mABidTpb^j$0f=s#T>)d`lfr4E;H?gngZdkQ^R^&l/X)UqPa-1dEehP&KBNJ=JG)<>,41"lZSXj$\8-O_7c3);X+_!&*;V#!+.0?4Nt\D2O)DI&B^EZ-#A0cH\/H$E'ST+O\JfnYVD"qDNG0tLGc<2\%hbR%E?SSB)6m+m/IO-Q0hO[bpn](&k)h4RVCaN'q$en@076g"7V*`KQGk@5lRRA$391ZjAP(DKdIghk]R7e7&_+$=l,b_F,B3eS>#XfedH=dG2etrq*eDL7::WA=W*>)DP)HBG=-W`.kFBi(:PRjllp!CLOP_jJuTXebcgY=4WhoR=oVf(MOU&of"q@8]#`W3Yn1Z>8dgrJ^^io%ZPWg`,d-7lM.&1HA)Wp'9+?cIeJA:X(gW4kk^uUZk9mXlUBtSRf)WIlWOpH+S@ed%!3Z?AO^0BHN!DGc$O<0BggaWhsf2;C^1FjHQai'apXiVd'u2O0"]_hcp:N_n(t\Vr=;CM]",%l(hia22f>l(;U_eqgY`$iDfSd02F:o$Sh1O&(R&JKmd55b`$tAfC\FARorT+sDl-FS1G#8i#64`nJH3V3cQJ)B>G$nPKBFguUE4:;I:hale&'UCAoH_U-gA4#J-p`&kGXHaS(s,qSfr9t*ql%W:@EX>`G[Q*U&)p>RiX]9:u=,L\n]iML0&69m;CdlX'S=9hmd5:H_'i*iM0E,>,,)\MG=k&c-!JUqPThbjm4d:rjJ`*#E:Jq[^ghL4uUOs;tEM?1T<&Qo*Kbjlh3JfS!0$`cu29m$J-Y\tr:E0*o_Ig'B"OqR8m([8XpA2ca#rF]?Hn#'S:*@rk;MiEIZCs1Y*#2Hbiq5D(uY7Q8+U>?%G\tAMkhJ1bi"ra5I%3)cor>5.$o*iM9*U7cP9B$IM)nTctl8*B)HThNh%DAUsr0;%V8k[?@osPn.Bbtk$WVl1tqg@3PG-:,.-$hq;PKR>P8+Yn(cr!T/*0?YZ:Nc7M5E1\Zh,D_^VJ&pmEf<47UQMk26@2s42,`S8QB=^2Dda5RUd1EA?Q.Jbp'\*Anf"d@'(=$eLnDbBn++3sMmgWhS#s?+qZ4E(S/cg@oF18Q4M_9AIk/DMC+.r\A4rVp32\lqficTj/IqPRaNNSd1e)2/#OeEaW1`#hOFkj"m@7i-#dVZ@MIQ/pa3XJ.Yln-(jUJ+W[M8"7-t+ZD?PY(tumI_:?:5T3S1ZZ*56lEW#0S,[9[KcPN(RlYQ[%pJ;]Xh,KQ^92JWLQi5;@g'M]XD:=hndH`2BAdN?CMADCG'9\?P5<0%mUp5(HPM=5us*eCkiV+\QFcTe6nc"0]Zl"edBiN8>BVoe/^Wj@lZG%0P0D%ajWS6MMj9sSpHHier2_Dp9c1F5h+,:8u87Tjnas@@bdcBUOA@cNbkm4Fjm8ul%jObhfJI(JB.N;E"F$gT`gmHNn%k-a>5BARg/on7Y(QX+jV9f!a7fKohpi7_eNZ"aZ?#B:r,h=J)!\'<3)_XJdKD,>kW?ji]X98jd)L$5tnuF!%7X&3Tpp#+EM#rKj_eXZ`"H\pb3PSNuRt3RCl.UQBZ;=.rJC>pLFASa"K*$m)O!BT6=A!p;sQSjB%"FQFAG/OgIeGm51?H?`/!h8.[=s+js-^M?<1U![XIjFLu$pW6?HkU>Yb=P<@1ELb0,/1nbr7ka`PYpqb1[/qVOm]C1c$q\f,9k-^V[ImKMQD0l*Pnn-<_(h1fQ`]0FN2NqVZ"rm`T4cGJA[EP9YH&WC`$d2ho,^,5=_+n\EWJfXU=C?TW@,T$:%@9^(=CA/!!&cZ!90)QO@3NZ0.T9cr9LU$VeCnVpPmo[rC;5J*bjsZ]iJ(,RPZn#D+FJRi.YX_!ME$A*rP8N1Rij]UGSQ6U8qOdPKR>9IUU's>>mY0L.-4U!!'e_&:cb$)'i']lcVoZo,#jXk'+%O[^#;1GhF!a%mQFBp.Tpp.;3V/Z0MPn"sD6rLi+76!#Pk@&;NB#,RS=8!!!"Ia>5BARg/on7Y(QX+jV9f_HJ#]!'hXs%#a?3!<@XI+96E&1J"7Eecu0Td"aa$,.`%"!+6KH5TK>'OsmF)!<<,l+j[BKDB8cX(^0sPLHL27$>Y%i!!%Gg1G#8i#64`nJH3V3cQJ(]=s!_E5TfP*Ms0:(!.[oh!--(987HVAn)Q5`2=8P:_5"b.plhuK!WW3m,LKQog=l>n8O7F8\&?5T_Y!^9459D%=i,H=V%M+IKL_o:?$RYP"TSPaOCqZ`2\,lgMuj$96_6RV)7KP346_lC2VQgXZZR>!3pQ=W)-M>f9^Jq?H&JR*b^ZOU-(E[Q``'FKRhmY:@[(6SNqPu'StIYd=h`1eHZ-r2K@XtpqWMprnW!eR!)/4X_dYd?GlRhP,R?XTndL]&VtKZP$=`&hp2_B(&bHcK`Pgml+Q&6C+ldKJ[k(G9@lf9a9V!m1=LPgtIhor>*!.]oh:KUSODB8cX(^0sPLHL27nnJ&q\`*"aZ4*>6\?)dEd03hj't?Y32hcQIYj-FPn[TlZ(grFmSD1#(-AqO/(!!&6O5%.;/\p48U?k`l3*:aN$aJ\\MmUt1WVluT!\Q+]p71g>7rmJN^QQU,HXp5%3P/k(L_@3l#&4*'.+FcZ&*g?hiA;GLMn[Lgn\CLu&u$k;*)sM0"N)Ts&raU8CE1hSP]D*.4Xe/m/cTL$Yp2Smc>$FP*=DPgmlp^=iPe@++*R(=CA/!!&cZ!90)QOMk+%59Vc#V>gi#2ECG.O$:J`$*GLM8EF6A]Ygs$Z!76K`_]l[;!!$C@#XBC#%$E$?o`5$moHDPbLi+76!#Pk@&;NB#,RS=8!!!"Ia>5BARg/on7Y(QX+jV9f_HJ#]!'hXs%#a?3!<@XI+96E&1J"7EeecHYc0N`;^DOQu!!"-'ndLH?joGI4;'5jYa>6@rXOaSTWZ(1ZZ]2M$5k%)pjbBT^cg^>`$*GLM6U7a`5t4p]"2EbkDCg7EZ(C9G/[:)(V$*2U8$([9&RQ^=,AI5!!"=-B;Z$k49,@8$3VI]Gm6j!ebXXd*H_#m0=!_=rkm#>]kV=u%CLE=mnH2gLm^#>Y5!#;!)O)LG)FYk!rr=r5QKf*B9:&6XhSrOJ\`QXLb+UDh%`%j0tetc.por*9fL,lm4=bSp]Y2?4_5#JlZZN8^AEJHXn0=;Rq(dLl<&='8LZ5eL$^I^5@1S,]Y&i]]=N9iNSZF2N5&LC#:Gi]BAtSCmr&*$XaX3$[Hj]j)uosQ6_9hmFRoJ4^aKbE391r&0hUaJ(RIga)DjNhJ]RE@hL$g`VhL*$Sb4reX/)P5=_)V=pJL373N,oWCOb5`lo""rOlNO]G=petOhQ&-VABs`n(iKW5JNh%jfWK-h&Q6;!%QOgd`T#Ej,>NDjY)LK>Bd;'/M2>G/=RF5O)CnuXo5K1j3:eP27C8JkJ$0]oBA]pP@q9#K81>uF`;KpqJ,nF^3s2O=`t:IX&>odNq'#6NJrXqEW?)9%!d#Rd*2Xm!2DdZifIf7`$ha[?Vi`#F5hej/&d_p5&u&CK^&+Q.63C-p_qW';eKdpcc8fSF!&rPgl<*Zp%4rp`/CVpC1FApUB7@mI"nZ$.ZJPgM3EFrZZ*L$l`S7=]#k$R5V_?Q.7,s(!!%rZ!Jj+75n[\8rmkqu4hN+u.A&=B/8j'jqH*D=r*SbBL!O+>XHJoOn?4b$-VjY<>$=s.Deed[aT;,X4K>?Y]R8g%]re<;VRc/E@!2H81;-FW]@+s/5MlMom,9hdm_/M:`?jC]pn-_*#ilkt2oPL;#h?)IY&XLB:^hVmMU9TM!!&cZ!90)QOMk8'^[JrK",DhLZ909b`MNS?rjK2@D#)6Hp-%6dR+o/uN;rS3T<(.%G*bWVQ[bKI*Ai0AP3)"SStW[(AAR8j>oid2>P4AuE/"/W9aKetejaRd:O(6ZWuM*>'LSI_,'8^shepdh?Q'NiC>GaG=g?E'1@Ob^Q:49$/-c.T-';i<#i.TC!&+`_+:`Z$8W;3r2)VC*;hNeIZk!FK-rB?m1,pTQnf+X[[g.D/hoqsiq^@H%3p8$u!!%_8B;Z$k49,@8$3VI]Gm6hSf(o@H!;_di=@>(Y!!%rZ!Jj+75n\mZ4obS553*RsdEMan!2DdZifIf76t*2.!!&Z&H%nb0o)Jd+-kLngj;B4?=R-%h!9ceA@1h^KqqN,>l6oPVV!/ps[LdRb"'%:TD=#[AU=!!#K>!5p&,+Gi3bhoTGKC>'DK0jsM7D\)icbE6E;!.Yh2c`i4C*WQ0W"Tf6j4G+nKDuJDDgA(826$'rQ`5JpDo_T.\g[q62qDY!Y=;heM8U)LRE<$!S>KH#:Yu0`I!<@XI+96E&1Itunf"ZV\4`\e:)uG)mc3%--N3@_rB3;QZe$+tKAt9q<\W9?X]u3snb:f5#(tRB;QUOuB^sMT608`kW:/9XK^AqHIVlRk`h$7&R@J;_<]C[2]X)\0Uj+"JAcHLUWWjH=43m6s)*IA6!^M3#/a-gl:KE)"&dE/^nKPhh2!#Pk@&;NB#,]CEioC<5tj7`1f+(]??A,a=[8]b[hF`lsW%/9HWG2a3_XaNE$#>=65`0?FJdOd1n+*MhO0.Tq^Q+Q9-5i!$EBSlkH._#64`nJH3V3cQL?!DuH?>iABC%T!t*,qq?*u'G\+F?s?f<`nkIn)-3lo`8C91p"6nVd%eXL[)%^F-`lggmM0[+:\Ebm$.J!!&*DH$5(lbl[qGUHeh=OCsZn3;55qf[JHsgYAf!fV41[.=\>ScZ&[#n^/#Io=*G!L4';Ui,:"<"ftr.`J(,;pY&gB_Q'W9G?S-U\pTL[gR-acnr1d?4O8!0DL/@,h$]ji3:u5a(>W5%^8t28Th;.B'7V/Z1u,0r_ba.$4o5`KIKfe&[tHk*7Hik7!.[oh!--(987KNg^NKE[`9If_G("4u#Hip;b\ft=0deMif)`V0^nG6qndMRo53Hk7mq9^fnr.LqdJFg,-!XE!%ciFCITs;K*pVu'\Rm)Di17LE93+Hck;,MEN5>*'!!(k6o'@'aRg/on7Y(QX+jV9fd9FBEpEn03#)5&6hF((tWkF*BrrrVrSJ"HqIk#)L?/<0;Xa45C8hDVHMi$8$f#`J+T4,7=ho*V;3B;BOq$c;2B833_HMJ!j49,B&N7#OPUX76f!!&cZ!90)QO@3-OT9,G7r_!eJ3V?:25/Z5mCX%?I@cc<<6TokOG-p`(k+.a,`YQbBc(?^AiXKP/suj*YKRr8%RGp$u[RAbY%fA#HuM_ZKl=fooE+;CI5RSr#ljsD3E_&)%c'5I!&+`_+:`Z$8JKbP,.21;h6MCr5>Ih,G!uB25[NLh(=CA/!!&cZ!90)QO@3NZ%fcU&%s`muFRoJ4^aKbE391r&;-<,d!!)4MSm`5e49,@8$3VI]Gm6hSf(o@H!;_di=@>(Y!!%rZ!Jj+75n\mZ4obS553*RsdEMan!2DdZifIf7`3`_*e]mF,O2#@p]6fLoGMn68?QT7J:`+J478G9eMJh!rr>..!]und*2Xm!2DdZifIf7jNY&\D/F.fq4s[oiEKdNG[^IILRi:.dB*21cSI,3M#JY^P3"M#!!%,'B;Z$k49,@8$3VI]Gm6iD](L"!8WR,_dDinmXn0?Y;4g(uaPsO8@Wr"%>>-]I#L%[qPpMpT4iUFB"MXq_rU'nk[+9uVZ#t23C_^#1Y>smH%3+PIf#aVXql&T*9<=ZH)9U+E(GB"Ac*;a[$RaY!B%BmeN?ud"=a'9$fPAk19j8]&c>:n'"onW:--o_RmHs(#b1s#;r.QYaP1+ZYJ/dqDGO36sp:AZK),r*9[D-W@p)8&JaDk8?lK6X5dQ&I*V50o/92+,rSK7;0$L?75%$RTCN:WV53$X=s=;DcK'k$c/n-tsQRkQ4#O]a&e@3^3pmQXZM>hfsI%fcSV8tMRtFRoJ4^aKbE391r&Bqa)gRN)6$/'HjrMp'8c)dVAj;/tn3[\]g3m&e(t-FWBu2a(P4Hd1tki3Ra@HL0I;W;`DO_p`8O[+"C.>W0("[e@VaN]1n4e_Xn(iH$+@3OJ:EW6NRM6i[3`+F/-fd*2Xm!2DdZifIf7U]p4"fWh?XS%#q.O0D%b(K:=]\=_aLOlN2a9]p=OndI`)45%r.<#]m?p19,TSj'72e]gbc3=HT!!nOLRUAgcI6W.qCs8E1o:7aMaQWL.cBAtQIL5)1?EhI:;fln#%1B7E*3dGn+d*2Xm!2DdZifIf7Unq;qf'RerX#F/8osJo`\0bs37ck@b5%@>igo^a,Z%59_niT9G?GXD1=J%SK7ql[??!U`Pgg9^$LAFtsL=K.no_HOFJXF!/1q!gg!EU2kQSjmRY+FoF^Je=^KVbc'-p3kc0PEOBs3R9LGQBj+0\_b&uHQ.#f.fAu#T5XGE!!'gAag4p!DB8cX(^0sPLHL277VVgt&^fm)Es)ICO9p2UMU9TM!!&cZ!90)QOMiQLn)Q5@?XWp7!#^r4V[2*@!!"\["<\2"#"]N[q>^KqqN,>l6oPVV!/ps[LdRb"&r!_W!!%O5j;A`\bl[qGUHeh=OCsYC@BC%?!2'jJL.-4U!!'e_&:cb$)'i']lN7+ekX1qM&`#PL!&+`_+:`Z$8JKbP!!!#qOCqZ`2\,lgMuj$96_6T,2qe&1DI/*Ir2"])k2tg@e&nthn@;u."98Fp:7e"#FRoJ4^aKbE391r&6(S)W!.^8GV[2*@!!"\["<\2"#"dZFlT;Wc://?P49GQ`aIG@S7Hik7!.[oh!--(987L6&YH=pd5G&WH2ge7l*%t"#s0/h(0:LG>H%r.-d@Z(^VP[X5hC\d.!9Df^68oDT!/ps[LdRb"&js)+m5sQpCGso!pTnu`\2rpH`u/$-<_Vk_i-C7H?[Zj%e[eJm7f&QrEp2[M.QR/7?R@G@?tNeKB:E3C?!RM!_k4[lU;EFj]Es#fZuAfBO.Elnn3"VVDn^G[5D$(cs2!`F[B\$$H:i<^Z@&3SpYLqD#-Hdip!MenK,bd0!5(JUfdT6H%fcTg!We*ESj`k8@<``A#Z-70*^LJWde\B6_FKfj^85(H].GYUMpL.^Tr.78Db_T,Fj!W*scH^k/o\%;?rq)Wd4hN-;cNqe=06m7?A)NG'4O6i)<_huO1rZcAkcm<-qn?k:NR9J"mCa-n9,j_7$_XXT"jh)>L;)Xr_ra+/0R4*bWnj1,>K+nlrTldG*0X/+dadIK:sX5G+bN]nqH8XpPG@82%!CX#kLhH0j/?[(`GlRhP'F6rDndLZui-pD$Hht=!Rp5Ok>82'3jY)Vj)%I`K5'k(fp=e'ACYs[bpoFdN!UJIX&iXPR?%f@ST!i0pUhr8rYMF2Hp[*FQ'Vh7QcYIEkpA\=Xr1aYUX[mJ@dH-!\rE%ciFCITs;K*pVu'\Rm':\T9]XabhM?I"pjE0mGka!!#P9cV>'uH2ms7jrsT"6_6RV_uJT3\\u;1f=s7A;kn)GiQQ?QY&7S.<]r&\V3[F5`Ph1"lf>jRcS4//DrTi.S=D_8I"lXTZ`%iAVpEjqo4XO^O#,UHNRPs)*<"tXMln]$IUMj,@0S5b)A+!u-mBu1Z2p!l!!(k*o'@(T?RpCC(B=HV(.+&dj;B4WdFM)a9Mtgu#ZisgQ"r;fp%2tQdCufRG>`H"T9Yn85@[Gj-gQgSg[kgY?HD[Dca%W3q9IFf]aYSt.'Xe4Q>KshKl!,j$+G)?]./)$"G%hJ^@AAWkZ6=CH2Gm6iD[.Ttp#.Msg)!^DO^=pIh,G!uB25Z-S[(?J[L!!!!"$4C1]1J"7Eecu0Td"aa$U-*2p!!"-,@DN=s#"]N[q>^KqqN,>lP\7)u!!!-M/9i>a+Gms=*rl:++7]hunuNQ+!.Y''"Y\pS,Z.\0!rr>b6_7^`T!\V"!"bg-i.X:G,]C!]?/<.'rV2;E[c[!4Ic#\u%(.qm!.]C+G)G?`.f]PL!=B3@a>6A=49GQ`!%6)fOZ[C_!!"-,@DN=s#"dZFlT;Wc://>EOCoCaGkAHMJ!.05j;@pt^u4;,.?\>G!!!!%-nKTdcQJ'Q>JIVT2ZA)%d+n+B0lai[rVj^[2SEd)bN0V-7RV_=*grI?V:d^2!!&saCSs^p[/p=.&>68cKfju5L2-\AGL@_fCp^J9BBq[!Fk#T81U?eWR+P]\o+ormqVK0EkUe%"pmZDHE,lh:-N4'N@!]WdG?S.Tak^Gh>B7iCW*pp!gR-agFS5FpdabJSG$E_orNNWg]MFjFf%/FPDk;OR^1@%#bO3%aHOX/nC$VP7R0GZ"!!%8uaKnejcWU>L!!lD'n3W^4&j9G`0KjaNE`hoFEQOMCY[6$9A2E;]Q3C/=]p$ka.JfCEgZUCo&hZ`mQYr4ftI.+a%k2Ep:Uct8p0uH_OQ]V[/@.j^3fSr.Om(%kNDmGi,'^b:6@YS"TSNF5[hJ:Gm6k4D#L$;iU=.Z%%ar$=u,.XU[8p>*BOur]q$1N@--*:on(M&-n'K2j$/=-^F!^%5">hX!,ig%G)G?`.f]PL!=B3@a>6@rJGU4-m-3iuD/RlKCf/-iPeT'CB/k;"pui%5fk^9D1K7@S^!k-p_8?]T<]eXCQV@;BC)_4U4tAI+l)2_Vf'Bi6@rW7J_+qd.5+%G#]ND4Lp7M;"J^q1P$ZQkL7ElMu8`OCoCiFK@ZOL-'V.Q`Q!PcY&'j(k_!-!!#:UaKnejcWU>L!!lD'n3W^4'#V/,k8F)_A2WW)TYngp^nh!@OT/Pcn7KbJ;e4Na)?$`_-KRr+]KQ?]1#s3MRgjWI8IX/G7NYH:&t#-8TLSCT-uUl^Il%.=C%CU))6-_,s%A/>fon_);?0N%H%sg\6_6RVK=&A?a3g9CS0Ttjd5rgMSb2rs"op5LSt.'XeB7!)"#7IuPPu@J!%e(ZYrjI-;R"d!@fD)UGm,giskNBVO*,\_#!6&j_]GoJ)Yrl5%)99X"d8C(HWrU1f)[r!nMPn*jA9qEN9foTj."F5a2C21%?NSZI:)^^"4`rSFuP@pd!Gm6s>2&Y]%#69r7c]Hjsa>6A]:[8sJe;U@EPMSt.'RC1[%PGaR@5aahu-!150[L=Bg&Sj="M);_enTL"Ro-[C'9B)eb2J`PFDu*r<%S,P%R=&2WP`$6([%PRfjYZk^AW'B57-i3WNi-o'@&6c[a-u-3ITS!+;P^),cq5Gm6j%B6`/XJHduXTB,C-Rf/ig!*YgR4%74H?o#:7JCd!cQmd67e7M(>5nZ3@)=i]$BeKj;Q5G$dh@_\)f$Od\BT)RC?5+.'/iJ0he%"5*AlQZ\qE/qM5$>0,]e9B)P@pd!Gm4BMjd/P$P$2^dX+5c(I/ks0ndMMBL-1)6L?"jJ1%i\@Aa9d%QXB].lD8:gqY5Qckd,\iCo#0f^\J1]"p!#64@O]n0'p!E9<:VG-[I[p_rMss&mbW)d,5KO-nuB:jh5)#7n_9HhCqhj-Hl6_Sk0('Q]";*&X1p/pbD][&K$AEF/_KZA_]C>.lg?u9XZKKo262kepY(72Zq[Q#=HDgL+PV?XBkZsWQ6Z,T;>#dUM$0,Pjb-jZ>qGP^&Kc:M:qD.]reH?VXE?[Blee"mE]Fu\b,U[Z^`+e3Q_-#]P$faYuB7mgn?@[k-&rDFB<^J[mm3?ngrtiI>@SmB7qhMErBT=7HL;'X<"pf@uISmre.8E5G._Ap./K9bU:_[IWNSO_CY@Crc%M=b?&VH=&e5s'RmUkRjNJV!nEYUZC!]0%Fo]n[ClaDdHpmT!790TfdS[IStYZL$i5(nJKLlPnB\l>&ug-\JNoa6[1+9.1?o6n4_;n?[TL>c9Bg0/pHSNCfaWe(M8-pMGd:1j@LH(qr^M.ggsf7`/0rJm-9sQ9'9O`8A&ldY`,ZQEU+SH3Ikkjj\?2Fo"4;UtJg#!%R<1`\f+R`_Vi_;=%_pOM+lN_f<<$",osmsdG`IS'lMN96-;5Ekh8W$`Gs[R/n^&R(QJCUA(2?b>hY.e/reRsLe#p4o8hV4LK\KbRQB)W9)G7i>HG(@CYdiV)U8'G"orRr4?Gt9aYV;rPQ"6=Io/%:k/V&p("kTm1u>ESmemRJIm!OW3b$n\NXkK1D@%8!V6+`pH"go5>Ndr%rEr>CP7oc["KdAPq`H]!a9SO0b5N)2,J?o_9k]HgAuUfWPh8^C#%(38,>!Q"Oc:[@]Y+TpQH6nX3!f4!Yror&LDdf^5%]3Co(B^a1m]MHfI`3cn!_gek*kk0brRhaG;XaVu-V;H-u3o%VSaT+sAbc"2%MGiX"L0&CKUbEV]Q]ObDj[M\9)Z0&io/]7#!E!e1)MiD*<6Hkb'c]\!F%$G6/?4aqbKe6G#4X0TGd>DW2YteS1*W(ADH6@%T_WB1XB>X+hco&UOdkAK8;?&+i6*HWXg@VuU;]9P5@/\OMD0ei&>e$@,+]pfg2*7bA4@@o\KCjK=em7X4Gl%]lgREE8lX(t'Rsi6WJ7?SUUc'1_%$J!9mnN`YW8Ze3n)GqY:,ZVb*bN1$[it<-6W>P;W+0bJ"((FW/?YerXFbbT`Q\7>5F/-1'S6'k%q;[W]KORUjdEo6*Kk^';LIRDRmmV(aREme%PX>B\%+:a8br+anf)2CJ`uu=!-Og=&cD8]R0e5(,gOPVe[j0$V-/J\bFi#1U]_$(I]XFI-3=2cQM_t;d_lX3FPtdKp9/u!\KCB[I7a1ZL[\e$qjZ=ieB'+Si[\91TEp"a`T>*[W\?"WDM?3-Z<6OTh>4+=5<>B!ENImEm[#2q.l^RmeR59P!iD_05=2/Ze"X8^$.(Cd:2I70gqIYL9AU5([mB41%'#;n2O3V?I'4a!(IrdFC`E4,Q\W'<(Co6uFK[Ap:.]dD#?a<$/`1C-rIn9tSZ<(!;n!5Q,*fdS[USq15JFKFH`s*`f)7'E)BB+Xju8Q/>X_ZpY;0`ps`?iLRJ%jIZ\r7"OM'C=*Xp&EgY`hu[t!r9>)Gp3&eS73%f$bEc"rf=D*gQ]H0mUm*bc8bicB/t5H$bUe=k*ca_^Fc1b&a`/^C?rC%60F,gndNbQCf*FDo[c,=1,o(QTQ968'id"s(_lT(a0DY2W^AOh_Z-h_j4DC1pqc(H8-X@N&I^6<@pIj$T'csdZ`=M,^]iVo2(0KMh=i4paXRc$_rJrgo_ReA;q09c12"FX06a^_FdeY0&?a$Zm+cn-cY"q&2+7BJ!ruhmB;`h$Gmg*$4Z1tq&<'2lAlab5'?`"gdS859aY,Fq-!Zs#:aJLD50>Q?<^W,ZW;Pk6[rV1?Zt$(J,GtBm>M#)XRZ#Y1C<\7p!U71'5+SbrrUrcE:GTMQ'crUIGLQtXF,=j\FrD!-[i#nqY:OMeuMcXF`hgM$R1;jq>]j?`?cdum0pP=@q3Oblf]1PE-R(l3#[2Q:@Ed1E]"9cF]:9(`l5EWRF)LE+@nSD1,aaP>(bGB\N-S(B1Z-OMI>B(op2,KEj=)/J0u[?`j1Gf7)REn^HVR/A4,dES]0+r4W!CLlXZdSY>84=8*/Q6?.'(r0M3NDgLsBH]K2>]s+a1q=3.Qm+sPnl`aF'agpfZ)d`>+;(VOtl>4D7+QQnt/C]Zul*KRneW!@*.:pg!NDekk0+R[ef*\>;(L'h&1F>hphM=`)cb(#E2lU2an1"L+[ZH:OZK[GqY2-nB$XS>]EPhTW?MRUt0-jW$I"diUNI[S#=Qe[.2'F\"#K5^&0IG4'u4fad'9?1JG;krj_RAVl&mlHfKifCjGL=FE(85rSt<:O368poLG?/76TEDMUqh*=(g^A?!LXIhB.2Caot!/JW<@oP$4?GTooh-L0G]]\a/q[Z_oIIR9r!7F7IWuB@koXp>C+K$+FfiK7!=+Id5,*F6D\HHoU`ie;ijC]5+=FrLsD6/^9cZIdRX0FFhbfTVKrJUt0-jW$I"d6'Wo[Trm49oV^Cr3agak]IC-BW,i,+s+-2&o9*:HSY6ZX6f0@RTrm49oV^Cr3agak]IC-BW,i,+s+-2&o9*:HSY6ZX6f0@RTrm49oV^Cr3agak]IC-BW,i,+s+-2&o9*:HSY;4$B>=+`c)T9n-a`R$P!7CV'aK\%RQ!YEO/hlVHg4g4c[;D7d_)C,AnS'\cHrUm4e]"8RIm1"Y;fqFd_%$71T4MH4nF5"9CnFIK>c&\mtYC>b4+jYEV")2(>CU5fr&p!\MIg<)UX)p[4^I?8Pk-$XMgsWha$9>-;^BU\K21M>%fgt^t>+;(VP,P_EqYOrk<9&Y?I\W'5+YPZ[gsWhaME7cg^Ci$b6Ct#=2U]76en/Qn,kgT6re=T,C3W'L^LPB\O;A]e)/7qA`?&%F?PSi5J^7+7)eiVVCU5frP1eLnJ0r^W/>d\l!)OlGMjL!.P0D38!&Ti#AMMH)!e:oO?+fM4Q"5(3!MG9+08jNc'`aK>m,DShW$J^U%ff>"H!*i4VuWJYAf!*^6RA.kI/mq)c-'Rb7g/l=1:qea)(NbpliTKdBjMS(4=U=ZOkI^sc;7MQ:B1Bn-fk_Fb/X\d/*(p-Z85IFhfAbtC.S/PR.@K_^^BmC[d4D[jS(J2J4e8)'W-A5!,ssI$^R?WSh-KB!&0;5>QhZZS,i1^Y*UV"6Z'@t,ljT+[k<0d3a)N0-0'oJSY:o"M37=L!s#LRdApSD%i^%XAUeR&1Gh%8P":b#G8%TmN^N-IH]fW`C\t+kG'4&i!!".!SH/]j!/P)szU=^=`!!%NtFp7pH!$I/i!<<*"Lgjus!!!"nfGOYh!.ZJ@"onW'+Gu]j!!!"T@V5Z@!!&bG)#sX:J1,RF!!!!AMOabJ!!%gaB)ho3!2A*`!!!"L.!>dp!!".!SH/]j!/P)szU=^=`!!%NtFp7pH!$I/i!<<*"Lgjus!!!"nfGOYh!.ZJ@"onW'+Gu]j!!!"T@V5Z@!!&bG)#sX:J1,RF!!!!AMOabJ!!%gaB)ho3!2A*`!!!"L.!>dp!!".!SH/]j!/P)szU=^=`!!%NtFp7pH!$I/i!<<*"Lgjus!!!"nfGOYh!.ZJ@"onW'+Gu]j!!!"T@V5Z@!!&bG)#sX:J1,RF!!!!AMOabJ!!%gaB)ho3!2A*`!!!"L.!>dp!!".!SH/]j!/P)szU=^=`!!%NtFp7pH!$I/i!<<*"Lgjus!!!"nfGOYh!.ZJ@"onW'+Gu]j!!!"T@V5Z@!!&bG)#sX:J1,RF!!!!AMOabJ!!%gaB)ho3!2A*`!!!"L.!>dp!!".!SH/]j!/P)szU=^=`!!%NtFp7pH!$I/i!<<*"Lgjus!!!"nfGOYh!.ZJ@"onW'+Gu]j!!!"T@V5Z@!!&bG)#sX:J1,RF!!!!AMOabJ!!%gaB)ho3!2A*`!!!"L.!>dp!!".!SH/]j!/P)szU=^=`!!%Nt\aBm'"onW'R';N>#!2ne!!#][SH/]j!/Qg4cOsEV^,\cmSIn).`OsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEV^,Y=.E8Wk>jOsEWXI02VPoGm~>endstream +endobj +9 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 900 /Length 82705 /Subtype /Image + /Type /XObject /Width 1400 +>> +stream +Gb"-6KmOM8qmcYbo_lG[?`E#cJg:I#8[)SgJej^4mS7b=EA)$GG::Gdh;-oCJcnF$GKR;a:05_91:n2pEo5JsEUD&34EJg7E1SF5ZfuNF9TP!cLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLn6_YnT*VRlof;I`T'f^)D)+E?i>bM26tDLkocf`QM=/\fs=%5!&Q5Q"ro_=8&<5b"=Eu4T7qf@#8l7!cbZDGisLkpkCLhK5$FTr)2SN%Wf]M^N9n+@s,B>:'uJVgH^`S8c*Ia4?qj&THW^N_1l>37A3(TS@&J5Te&_!!4l3s,p"q3;:HM795'G"/ja2GW?(DClMet&XeXJo7(\]^lAfE-I*NR2eE68Q=,K>Z0Hhcf]=JtAXq[Xa*"1@m=&MENOZEi*=3Z&D?&J5Teh%fYMXt+$;:F[mT8II:0/*,]s:tGOI]AY!"J2Zo2^Kc/WPuFU!uo,pXbWkMNd\7gAu)GO`:\!Fr\#qMe_!`A?Wb^&RSarooBPMdB-1:(@t''ftO&^#I,b>3aQY41JlO7f!N\%^I#58XqD&J5Te?0_,DOC9c5"$'uQ'R`9&A4NFL'7ZJh;S80B^2T3Wr\f2-o5*tY_i'kb>'B+t4`@U2Qm`W(\O8?QonsRaYW)u[cmAXSe`gIk07+Yr`@Lp?$d(l%#lZ3/CG[\mFHW?,^u(3:oS&:j#g=V2q8_JgUNgEUJ_hA]3M\Id6pqX4QB<`X"F@hO(.Rr?ANHX*;>q/Y=SA98K9qVf0hR9a2af8Iqcj2W.9uX%SN4;5/Za_9382u091T=Q0SVh.[rGB+VAR^7VrYV4^m,<89dR]LQGWUa1+,-UXu^,[-cXQ/1"J9r8d)Pqdlib,U5WIDrrQTm`jMd?1&nCGNpnJ*'AKRQ5VH!Zn]Gp%j1&f\g23tI;pq`+sJ3T,.c;%monSZIFi^<\3mPX+_lbTop`-@F>VeAhk56bj%"M&O46BLPI)5]M3")d8)=].sKIS%bN1K5XRM,H_OgU,5?mRa\Y*6@Vi22mG4T*pdo6V)61KQ-PVh3(Qt)PNrc7umJk\CAsp2dL&-af4eKDhhuqM2Y..a@t%IOB(,Ks'Y`,I5C%<&SY>.>"pd8/nCJtpV'#kS1e3_&ui8.e#p@h)cp%<<0a8fJCpf?rE8^hFUNTj]Z#hZbO4/,TUA8*L743cOM=>38^A`1^HC5W:"P#QO%V+Bs6q2_G^5&>3^]a4NG$I@/.T+$cX)Em\6SjU,:?YWKXP^SA,I`fE!^"_/N`S]Id0aB88I;Y]2,lr5FXg79$:&r,goG5HX:[mg]Oi6psF26jMPu)+589k0;Xrf5IfsZa!ZfmLG(FqL9kS(G9!9[sjN`L,8!F)F#\g?GRJ;nHk(bP1I:"aujtGbiO:fGuiG%\b_$DQ`j_>2lAJ.h%o-W^u9!h,)m$D6Dr,!f;FPHGDINM=p*f:HCZ4)&Xr(2B?smDKTRK-gpkYs]CoC\CL8.lLkpkCLkrY5k>"Wk1^Xd%02P8P<1e"]NVbpZ\.Z.J[kFMeE@Ues5'+tq0$C+?SFSWM,nU&JH7uj,q^Li8a5T9)cE&QDH,uFg:A+P^5J,2uPlc-Oa[*(AOGM2YY\)"G`Y5uP#Md*A@3'7GOhiL^T"ZL;SC&Cr61F+V?8W[8(%]%4[p;OjuLkpkCM!.aul3rYVFYS@;g[r#dIubB=))Ph&_4r3`WnF%FGe"a'$^Af(]230tb0suV1bMufZ;u;=k62;Zq02,Jq.=KUMhto*49\@m042%d_q)`Gr47=.^6NIl-DL`$NDG0`ip[(Aq3po0Q#ZS)bN18+QE0jlQ99j'6R+'[D`E4:o\&i&C,75a^EdPi5.l=,hW-,l`M$2&=JXTVBO9*3`ntr5r-.^LVTVBiY0RXmo3Vg?a4tglN[M9+sJ3TU.^cP1C.X>?g9C817tp;GkedBjgrHSMZ!G+o+stj_3.c1&2*okNPc*9c@7f;2KTZ8\.S@d.N4U7KiLl718\BVi?Fb\,N_H*hmke+G:+(?6KVq2fL(SSn+Cu;APldp&[2NH_;dq9.Z"tP&fh1G_?&J5TedA8>D))C=_m5&FoYnO%1UL+u?7&q];=n3900[db^nJSpu]WMhu_/pYLNC]D%6-d6F7]qpWO&?3>q#hR6)$p+@]Sj2[3)bI_lXg?sBE-N-,$[#DoQr^j4J(nV#3iU5Y;*nQo6Dp`I9LTKC?rUue/Dr85Ag$u3!G=<;&Hf0^m@:_"XQUK6*[2ZLch6CtCNXHZ,4FclV2E"S]g7ffE?bO0gmA;e4HA`KoGsRKs-Hq])FMQ8NVp:eK6,%jKiQg9VbPtgKVK,tI8&e$i8tA8SDJu+3\(r(Fd_8f?CMFb[S+$=p%%UIIk/g$lsAZrdl0H_P`+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3T+sJ3TWp[$<7uN\4QJu?*j-H5@8lhmmqBf*ZF%LE!YR18X*h-&302SaeMUe1lS@R.KkMRUC?-7n]LkpkCM"l7!Wa_M&b>o]IH=lc/rI'H[ad0E']/`U:)>'_@qjt^Fm*+FjDXBo1Q`\tdkkNh2laPDXd+[OVf505^lJ*-5SqG'2r]V]2E(PK;ag7'pUf1iiL.j2Aa;1:8(/gUq$GeF`PHo-[+ng$XpG4)NZU5D+HA5396k$O7-5kf$8@95i>uWn203i5hm4oil_s2X:[]PrchO1D_rff/":=8"BYm&J5TedD8/GWh)7q,tjiHc6)."<-Ii>q0NSmhm@7(81i;?W\\b^3I'qgSHk4Iq/tsbI46nao1t!-*kM+(M=gfnAKos]0-P#XV6@d@GO]M%\u1"`Nq/QsFb;<[L+`@E@sY%^6Lf(R:S,7)Wa["3O.9L\B![D*Vc&eF`P\SuoU7G3D-:H&omu](R0p2SJSKacYV]ABnK%@<3gA>RCn!cs@5'q.lV=UZK+e2e25EmIhVcDZjFLc33QReT6@"l=rBQ0:G)Oo#`f^=((@@%Q<&J5Te;nXBG'WKI;&JN&S<\aSN?G'ULHLmLqdmX=<0YHD,&X1Xm8t+lq=d?0]q7MF(MI`jB5CW_Me!I.@+'^X#H^iO^-?K@-arEWoYt2gjQV<3OGJ`gTSS*#VSmfLcoWF&X)n,2!fOLStO5)T]X%n($DVM3t5HjNEaiN0tpDsVm;)q.\i[rma<2FaoLBU1BS2P]Q2!oG/%__jH[nWr4mA=.kIMjdSWEQe,U#TdDQ`h]L.$lXo`=%h*k6MEufq==<)(h[">pED@bNPmpq+DDOC"uJ%j0Htgnp#6/?cJka>nabQiRHP=[He^c/Z=Hc12KOC3:o0S+sJ3T@TlT=7['^nh0n56hErYYcCV)P?]R8[M;a#\V]Dp]&4ofSlA`1&I>N3F(eRl2.lp+KBY^u89=.AT]NboNEd`9":4:,VT'@?>"5dTH99>YU)Hld,Tq'c7->=W&'7"o_4c3VU&O_k4+9\Y>9,/\8g80m0\#tf/'f!e7Z\M4i^<'ctX.r.Vd2M)n5+DE7p[+J#jH5m2+u26\04*[_;@'FXe57nbD@,!ML)_)mib]iI@sWQMPah>Y.;nN1j:i2CmBreS"kmFHi)JMlmXJS2bTSjOq^CnTs'O9eQ1ibjIR\h3]UWFU"2QS'1dd*aS3&aP@3r3eP$JooNF5/a3k&*_/Ud6psF:CY!@N?=ZOih-\Ld^,8P?YkfUDmA23/F5=F`H2'*p)cJ>rplZcN"A!oH8g?8QSarM(eRkMI6E5HRN6_b)fKb:f&QE3LQ7u9/lk8b4lQ.g>+IsnRp%WEk:chTROu;#>c@$q;Qj`[GMh@o%I=FPjNOF/LkpkCLkplN@*9%nb#N;?4fDJH2VjFa3#>PmXN:XF1E[kc+sJ3TU4_/QJ/gUnB%?`pQ"r<9^E@Y'6psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF2e:%9R"q_FZ&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te;j1:$hFBt%6psF2`2&j])?"3EhCOK`z!!&+&-o`'%$n:!Oz!!!"uKX>!!i#2e"z!!'3d2D8m>_>jQ9zi&f@dWIZ5qz!!%PQ8NWaQl3mXmz!59e>e/9Yiz!!!#O6`Mds:h0P+z!3h[:?#$%Xz!!!",-e'"6z!!'f=UuFE;70W_lz!;f?iV$?2nz!!!#m6_+5Xz!!'Y8FTqgGz!:UcR)#sX:z^fsWJzzDaBopz!!!#3"a("Lz!!)L(e/85dz!5Mf8B5leOea$RSn9=BVX8tUq-!RbB])U\sairXQcCN?I?XQFpMUh%c*Am-,\I3"MY5nR.=\pTR>)""_g('"r:X\7b)ooKt!<<*"!)`sb$kC?O!Q't/-^gU;Ac$@`hS(j-s(>GH=L-p^I8t>)/p6qG5!D/SE)H#O,,HenfoV?GSTS\WgIH\OW,]S@=c^0U_o/KfqXicYX#tn2_Ya4l>Z/#UOOP&SM"oO\I*JWHz5cTT#K*0DUS&hI&S2q<]XK4U6pYH#?Aq'@FmEsrA`Ah4s?FFmVp[@"OS)5$,0l%H7U]2@CC@-`cT8Ig=2`+t6<%AnC6Ckr%S`/2XVs>"S79"a0r4,Vs+h=DJ3^`"t%CFBFW_iZUb?)ef"*FeJ!!!!q%dFH4\17`!gp14XXq0P=FT[cFkTBI>1>Lpf?GsHY>O.=*[8hX?.G+M'%uhZRmb(D5-sai_GOF=o\07EM:hOa&ofC"OWAF2r77pX/o(8?26V]BcRh"1XB?4Gi['i!bAP(_sW&"DR!!%Oi:hOa_>q+_%PGe9L;AH4TB,8G)`>'d>TmcQ][_1>MnJ:F!B?jd:?@XU?J%n)Lb>tc'B&[aVY@$V%\P#W7oK%t8k/q&lgFRWUk7&qIYt!'RK6QcI&0DuIg$#jb]CiT12Jold4Z54L0-EZP?FaYMj!"_h*,F)u>>SGDn,*5CqWAOFDVmatDV`%e0#CV(2agWHOZn,R#g$BM-MLdRCttiD$Pk8aD:S^7"_/qYp+\0pP(F]7G+riOSg#9+U(&bSAa"rT*n0_GX4J5A>l)L@U(NYY7i*Wm3ICa7/I[c`"rE+-@>L0Z)a-J\On;NDH;0>[B[i`gA&R>^&fmd_'p4<)ep.jg]jlLLGs?&'+PP^_?b#HBLP`Y:m]TU'IYJh.=`YC\hk]qa93:a>9HG-">M/!+?o"t[?$j-;QEf@Uk1Fb.3$oS&ffLM[8kSp]z+H\^;'CJHnNugO5VsA&]]P]FeQdPZ-CY!Fp357s'ngU?-iT9\:rOGTqB$FWFDV:f*:J*M`(DiDgIh@GV(Mqa:9jbfN7Eb>f^Pj*"E[r?GfsGmWF+g8.o[fo`X1=/GjM&[Ta4G+Tg0o_jc.h=h/`AGg)_kr6\r8Y?f9nF%iR;Gb8XdV#BB]1jItu!5:Pa&:CA#bR>jeB[3^[:GEW(#^na[244a*FS9^e@@:#:rnqncj6@GoHV*P+f^PBm\SjKW-jL!:SJ-3NjAB/"Vt3B)sO%W_/J8U4YCz,Z88o_HZb/#So'tWIHsPdVju6ScbD1/$!#G7rR.egHVX@[eS2]A$tPRZSqdX&sK6;Gl?canD&^jZfa!E>dM8';eP/11B+5j[2V'4M(RG(eY[`W(\mQ$Zo2q"au0$cr<4u@Q040Y3=YbM2#3Mf9p]?khMS=Q/n<*=d-@f1H==`3KPUaT/HEa80_S#Y(&LrQdLZHXtsa5m+t6:>eccGA_*/!0N=OIE6/I_N=sNmh>^i*2L_s!o(MH4rV;OL>'83Te<:p#>R:]Cg;KJimX19KQ_"sQ6tlKK^Ee8lqd-T+&)*9GKhLaD\c:SrQRQ$nE`KN(m5k9C:GcCfZJs3dX,6IA3=i)DD$8J,7WlFbZ@XRsk)$_0KXV]jl)k6r3c[pI2o-Ab>X85'k)V00If'INCLE?`edd::FO3,VA&(ChQ@Cf];RaUqkd9)9a1LcAc>J@?\0!nulRZq>pWs!!(Fce/97qpf!G&`_:J7ZZD\RR!"FYoXi0>c*2'*m\[*J"W*"dT0:7=YWN)HC%JjYg8`_AW)",NMX7*Lqee4P/26mi^d9=l[:R6J7#JGt2pp6cDW;LLT'4e0ona0(L]0-CE`Hj97(@UF>49+;:YhRm\A4em+jfstuSnE5r1Veak%p,KfWN5&HXD"bMMg2&CJ[aSm8qrK9j]Mp6Xr5VR&o!mqhPCCss3IU$prI8\qpBq8So@Z3Ln*0E\s6(m[;lQWP4Z'gA6\OVU??4\abP9?Kqm5J3S^TETgqcE";D;Ufmd/>6OLk]Oef"*cfXu(!54Q_!'A>iobif^g>%ae_YXMAj8cl8RI:lhk;\ceesDs%kA7VOP?6%?H?@'r:+/YYXCEmL*Rdd%ZQ[JL:+`o8aQlc!!!"L7-Y1U,cMJ#s1O9I,2W72$'EMGo$=Kk>:QqIa>gOXZ9u+X%f)@$*;8L;=7[4]le&mH`Tm-7bkaG%C,PXnp"O]Yl48@XC\Te\*ppB*:Yq7!L$MIlHp*,RSIs/>RbW+2J*Q]O4bLX(r+9pC]a8PMZ-K",?.65CK/fTChR[3E)J%=JSb,g4akec0M3>PCo_.qd`g&XH[cY=@neO-54I?ON_rLCu*fiI&?-eVFSP$mS!rr<$!)RH'F6]m!gjbepe/SB>25p!iT)3^:me,K85L+k6Wg5pT=CfiT9\na)Be"4eKPa;Ib1593%pn9aN=V?=2ZB6V$dfNOQ(V%jED?;9AU2Il$kucCbtpL6%pnBEI?AlMAb0!+#Rrh6(:AT,%^m1536*LjA:/kUTsHPZJ&=]@QIKSO*8^dAjSnlG)=%_;u7TG!s)@7,);?OdIJBa5h%Xqf13"7J`qAfR*>iq5)89oc3d#0@^ra*uc8*f];S\PraQnA']FAjr;nJ:*lkmz!&UW130cZIn1pckA043sf+)(X/C:s.SqIL9LB#kRk@IlBKKK:_M27`0"Ts".9ZQjQ22K+p@["S.aD5WuFD%.RM;?$a-ZQb$Cf,?iQ1N`Sp^I&F(j!:2TmYJH%j]]rWL%UM\GO;5l)U.i6q:Xj-.(36U@1,Y6Gbr]IB_p@8e&#^W#HuVp9Q&&8k0,ccopn]i?N:'+!!"9BB5k^[SO)?'+qYJK:;uMkq@+KpmXjKZe1B/g&eYfm/7)YW>ZJ$Ds.I4QAUa.+QXNT;j+$A>Q?!!0]LolJ0$^H\;4lGKB2fJ"<,U99C\aPBIDV-$ml*g^_,K//cMaWMlpm[YFs2k/9r^.Y`GPpOd%c)GHbp!i0r_TN?pg9pY57PqpO6R.Whn84,DhpB+^RgCp5Xlqff\,boARTBd1`6B0BdiS0eQ3s]tIEY0Rmo+Bjm(CK=C+SB"$f=F!_jWqG&>HQN7'd!!&rR5cVklkq?;I,,N0Xz!(b@2B7NrNRnc*n7SPsgiR6Jin")Xi[V#IbrHe#s"cC!Bo-U:9"98E%!!#R7:hP;X7`FZc>i(7-41OLRdq;T?3WK-[!!%OK%WqtHA_aot@+=tnALc6SSi?#j/:%/G$/>PWc!!!!78MsuXl3u682$X3`5jC_I;m^QG!rr=O(J,Vl!U:(/8KEQe!'i#'TbFh#T`P2oJ<*5)irSER(.e\M!!#:L7\LL'6D4G\!.^,$"lfXK$s#n@`h>!Rqn[1Yb,!!%NYW'2](c)=@&!!'e=<$)iOB<[!Q]ak+)7Sr)dX[J6N!!$C/WfILc1KZs9h?O$O,:IQC<[('7!!'5(eOKem)6BKWmfNQc&X57\.hO$,!!(Z%lD"FG$s$3-ulh!,"M\6!3cLS7g7B[XIsn.!s#,/PW2r!&L7>V!8)heUB9]h<`$L(!%!!$^9,u3&a":5&.!&gMHW.6p]'iaXM!.ZnX&uTLkJcl&R!#na_<'["j$=<)tB@!3"RDE6To_;!rX]%6M)r]nZkXI/XB?a^Y9WV@0?HS##OXknn&^7PGX)2/Y!3Dj3J(>BfN/jG^ef$B.9E?hQ!+X9Mh+*RPV4=C0.$'O-;JX_!!(SI@d#"e3eJ0G1MG9RdTT'<;u\!VfAkWlUF/Hd\"tV+LlID%*9LTR.9)WiJ"Ce;''6-N22`0dlYAD8[uLIh+/-W&eeWn.3chJ!)AXe?)&!Z.hGRtd!!#h3-&+#bW&%P,3eN1Ul3n]EobMIM[-MHe`kScbBsY/#2-]a5k-^Jd&_)IQL]?m!<<*"XJ<_\707T9.p20:)`M\:YLb%@cJ[\nX%]-Kh`.-Qn`",PJ\QjP/"8_L:hY*a6,/A=If3GSlK,)1+iD?RQ&*ZJTRl4LN8/mHs*AP"RO3Ouk.ZcTr`4SO^`,r7BD-NH<>L%Sq/M$Oh>2@2-=g@+K>IJlp"RV7i\mbr9Uun4'@np.rntH/;Ma[4$1[*]o#OXq/P'#Zl=n7A;U8H5!m$D]cm^rjO+1Z/SH-\Drk:\+$T"ALVbV9*ZZ7,78[?VlRM:D;XeCCa8E-IIbW&$uia_&geM<7QrP4OXn4:(ufOEOH0kTYR=K,(K[IdG+9@e:s9;^9=X&o">d&G>!eCi$2=\;_=]nPs[QYPpo.lge'A`5foVV8V"^]PZ5so96)uY$Sm5o>kq*$FLjmlh4V@DX%Y,,-*kTp.S\[:o'VBT01A\[ubjJI,u7uV!p-hX^%r+Cq"iE?H0`VCL]Sk4,\[LMEf^Mf4'YI%>cG2QE;_h#*WNLr'?QNrK6GguOGJruTbcl9.(3_S#6YL\5OS"[I2O(S]]<+%8^Ri8ef8cIc/REq!/[$#YMmjlD&Tglps!c7ihL*:\?sMEeM6J,&M!]WG;LSi3AYYI0XFRjF,=Dm/jnmValDf)EmhNW$4KLqe?58mD=X@j_m`f,5o/SuTK+YgNV!u8L%ni9'Qh2;]*R*3d^TC'%?d\6>"GEYlEWi0pL4cHONnB-"^iJV3ef^oc^]S9h>-%>oQC>hVD3P0QZ-)ERt>).b3%/MM-Y9]V-XilW%^Z8<1AOkqPYu!BtRhps7Z+Wt*t(gVtg,8/ad`P3b4s>[3fOMAXBK1Pk"s]B^>&Q9?s;>*75J1\p4c='2SB@s@gH[tD:e8G^D5)bO;jh,YM7=_Ei_>2ha]Vo#8[*'/+F45Si/IkNhU&ud[;asceP[I%HV/03o0HH-a3W`EP&\GILohpG+gK_W1:tc>=tJH'_`TR)*@)6*b9X%j+"1#8J"QZjRg6G41VCq)dWqUP[E/bi:DXOKp;)T=+.Q%$Hg5am0hOR6@."&l"lAjl[NH$ig8-M2D^I,Z&-XK#Qn/KG5s6V46X(BXcD/mp.ML\X)jY)/e6B4m;'+g'Wa,<7V[FYt3(3h3(WJ&1c@5119=%kh!$,5Bs\cjdO1@4(r\-`dXJ)oG+Rq2/3$ZT19\UD;A&_&VFEMZJ+mf%NIP#:$15`@H=g@YKB?nK7`9]R)=KEchc=!n;k>9d3hkW-N[2V%X>e7#5hHD]&4L;:5ghfC+8+,)-ddlh7iip0MlO8q^e+e4L\1dmXZf[j-#89?#@Fb:Fr-VuCLTF$7KkpADH,K\S6bYtN.p$_e[`K]'cRO>ZaG)A.YY1Z(!1CKJ,>dn^2a$rV,:hPTBMd,`7g.Ko]Mp;(Z.9NRhO(+@>1/p!6m5K97[_P_e8r[#]f>c?E1@@8GikI,QG.@oN+%b25?->mL@RU6%$!jetP$QPHGQ35;.n!c9EG^B$-p@8La-b&Y!r..>i]h59eJT"UT4Aoo5B(gAQCNlgeJTWj8Bs$@)#sX:&eu:q8>+79"k@tW2C-&`%Om<,!P\L(PG9QI#_6hjicM:jO<2eu`b>%VN@>kR!!%PdW'2](cnI!'jsl*u.UbY_)/RD]@1D5""TmBq6kdcJTlYX4D/Zku[q5NY87*-%_@8A]>^0-ulh!,"M\6!3cLS7g7B[XIsn.!s#,/PW2r!&L7>V!8)heUB9]h<`$L(!%!!$^9,u3&a":5&.!&gMHW.6p]'iaXM!.ZnX&uTLkJcl&R!#na_<'["j$EEha!'hGgM:8jF5lq#dJ.8G@.\P'p"k@rA!$I8o`9CH^+9;HB^]ma['i8PIK'L#[!0BZHicM:jO8o7\?j!Ei$E,a_61s(>!(\=_EOo0p8,rViYQ<9E"k4EkTR-&/!2L3k3*e$H,QIfEfRW7^!pU1p:qcT(!7D-FS?A+_&c_n3Cd@Yj!HeSsW8@CO!,2Q^:=i)@#ljr*2PBoFJ3&;t<:>58J2DijVe[T1"98E%)c1r^5b5^uWqS[W5T2qFe$TfS!WW4N%B)H?T[$pKeU&A<+H<&4kurod!<<,8##lZZ:hR"alFd].O@E(+FKIrm!!!","0.ChW&%OAp"foR80]O&\lL"G!!!#'!S'[De/>?\HLCq9U_/hN>q6L4!!!#OJEim2l3p]i^%VO-dKiI8Y*B8*!!!"85kRtTFTs@phYR9QB`o_Wf3SdSe'dhTDR@8>LqC1!!!!JJeCEe$.KioTR-&/!2L3k3*gkWa=]U[FR%HG6Yrjs<<3("5Y@`gcp\"Y"tQY/qZ$V1"=6gp?4!oGZOSeS/@)u2!!!!i6'N4t8>+79"k@rA!$I8o`9Gu+6.Tu(G4rQpf%1!(!!"I(&jmHAe/>?\HLCq9U_/hN?!@j1re#uOne^2pICE;;!<<+MPX:5#MZi;R<`$L(!;H!d+\tW8@D#_QWPh,,09Ul*%Jr-uli\q$[6'!2-%(cp\"Y"tQY/q_gf."Q1O"Ed:'0dl"m!!<<*")G1ED,Z&-XK'L$f1ZUh%^4Ym@*$nA3?4!o1Nrbf`p\tdDCOK1_!!&*Y-o#h+5b5^uWqX5uO9>UZ)STbqPW2rq---atcA!$mr:7I)f<4#:^,>rk!([]d(qN82cJ,js+h_GL1S?A+_&c_n3Cd@Yj!HeSsW8@Dp63[SNC\X2e:uZT!7$%BK!+5o/Ns_gA=@)W:[hCM>!+3XQ9S*nTCF+Q8!!!!<:jl;.S\YZ5pV*2[!+6!bQRlM*MtQBQlO8(0(I*B>9N'L#+'@%Q;Vu!l4E0M_rcV2hN%-\'aVW?WEEKutQLRfSg=@nW!2(N.$sb,TB<[!Q]l,9/5QJNQDj^_S:=lJEcB(/9<+g0ZId.=A!:\[9`6^pSFTs@phYVI_"pEk"pm+KJicK$5S`.D;7u^_pb2OKU'N08;jrN/n;=b6tp0"5lOHHARiggLjD:Cf#mR5mc'nb1t=.j`Bhpc`K-)KhOYC=gB!H3Q,(Uo5.S73fctR^DGZrketXL>ie0I$$$c]'j]u`D<'h-`/_6g0RJ#S2t/oR.C%BdmhSDB$+F&GJY[ujPX.f=W-/!_4`/%5@:am*0gXmGX4M7cml14ulO9&Y27S#%rdtH:6Ae7X>HlQ,q#;LIH%5Z6RaqS\aErgtapJ5j.S6>I-E;6W=EEi76T(I=@j>]8W_l/q.0!!&+R`6^pSFTs@phYVI_"pEk"pm+KJicK$)OJgBoq`\dZr=AiFa%r5Ni"m@Pqb_^pY#DO<",FLYR.r+_hR\-E2Y#Gi;d'#cZk@q_+79"k@tW:<7qcHk"sg#tg_jD$Y1\`bhEg+rr#5gTWOd]Rp-+e@;HSXh)$4R.r+_5'R!h2KA,=/O`<5dHBcNCTtuC_ta\,op(>fe!"l5urnhYls6o7ns7n.VG[7k+6SU`V?h!Ks#PF(:SM6mdSS$SkGM=lUB/#0^.ns2jeo&;8bac#<6.>Pik5bP_OJ'P=707T9/#_>%G!ZB9i+r+R8PnDgXig;FH3Sfapo1>T6Tnc%i10[O\U%P_>V,mRrHn&m+LoA8?2MQu>X@=p*C,:H,Hs^*6A!*-'Id2'(neS9=D'=j5M8kG!!!!<:h&W4JNADu<:>5s+Thf8213Rm-uli,+\7a(ld'4RH0^LiI"h]Vb7,:DlIDs!D*.H=SMB'`l#SI)-N6)Z(A$Sp/NnL2V!.$oCH$'LpO!2.gg@-4F,kiRYMFHpk3\tC).02_VUZQA8,P&jd0d"a&0E!$3jNAdrkfdAH2@0doD&c\:Rh/][Q`[%Bd0c;B.poE(Sa,Q@c)aSgA3t`)3!m*`r(5u^8NiTgc>E8U_/h.\k&L>?j5)-hbM7C!.5751'pRCY3cPdre#t8R^C8&]n$)m7=e#*.p$ZaDUlVO*(Y^ofJ8@FbZ@X>"kQr^uNuH!$I8o`6^pSFTs@phYVI_"pEk"pm+KJicM:jOPgMRX%+/tB)r!_[#F:F!pU1p:qcVjKFA.%fC1AUTZ$(uM')g!!5Je<*u.UbY_)/RD^T'\!5=2+R04g2f1H/P!!!!WT_bU;3eJ/HmsR8@!s7sLI*3c`EOo0p8,rViYQ<9E"k4EkTR-(]#oO;)YMi\46&F'u&jZR!!.YNW4t<5N?j5)-hbM7C!.5751'pRCY*B8*!!!"85kRtTFTs@phYVI_"pEk"pm+KJicM:jO:qC"*3T=E,ldoF=@)UW!HeSsW8@Dp63[SNC\X2e:uZTaUEG0sQ+_S,>+6!bQRlM*MtQBQlO8(0(I*B>9N'L#+'@%:;G1)m/mP,K]'j_;jU1>'Xl&^d0AXn;0b!jdk*o,pN6ZY_)/RD^T'\!5=2+R04g2f/?@]eEf,BsF\VIp^N`OH:SCe>)cr(GB-P'KCSE`25+J%NIP+7Cm<=?b\=uUf4aO%@_Le?5pf2_[n=7Ri">8P)+28L9:LEgEah=e%'i*(2^XNCi+rL?66bsoaDkQg3Pma!!%Ca-o#h+5b5^uWqX5u=Nl;u>eU,J#(Onc]a#lu2WI2<^WrA(jl0U7ds8BD)09E^cW@&UA=&ndcX"'AE\@nD3S(i[Qb9"<^u")kP`Kb=rqDcUf^VmCr'Rh(JY6'BQ7he'4o5_''8Hu8X&V%t#V8eMS2V)\?"Z-eT+qK1A%1c_-&kLZ&eWO5I#VMgI]t&a3of@^22+M$dA!Jh>dsW"rrUN$7iaC?m^WWXsc08XV4a,8toaJR;1WY3Hc2[hE7[+b$8>+79"k@tW:8frcBD\At,CTEpkKihc^JCJs:%Sf!E>VurMN2T3V3h2Tji^_SGmaO6F.RumDVn$/Zo6DOMFLR&O,qmVV9\!\W&$t@icK$)OQ+3Q5G-osXZQCN)%%'12dj_*=0J@-mF_#Q`dj8NcafR5q!WV.n)kaNqWkZsCH$'LpO!2.r*?BrUq0X2h0APRmA-Zu?_klBV7jhmI[Il`Km*/'-]QQ:21,'>p@ubYVpCrmoR,B:^E*kFAbs%JI_gO3\P<9Nq9$,1Fda$t;+[fi,eBs2I/Fft'_;"i):i`]k3i$RB'Ke*m[K:Cs&mkiP-g\Y!8n6L(qN82cn!G"l%=bNdH_4G+$W@!)#rn9I1;C[ZD'6SV#6LY2uGRThV^_3QiF$tqa!5j"onX>7eKUZFTs@phYVKeRFE+EmG,%?bJh.MVoRsV9V"2q)#qibGJ;Chf=3=#[X?UdK74\dqU7+?l/]oi8=LctJ%d29Sj\dgJTTKR/fT33r5FY"G0jPK=T$cVaj_2U#B^4W8t<&L#Z=N3c!>_Td*^IKh^hn-a&a,[mQYr`dLcK[!6@ub<'["j$EEj7SPWs<0Md7/ZfWi[hM&KJQ[\nZUECRnftL[,CofOarj^&)_*sR;HM5r./mc,`4g-VJTi*(`l3tCZ3eIP]:=i)@W@6B$hl9YX_7,j((+rHua%cdZJU$MS?/r$uRUT_u`ruGC2PKuGJ3&;t<:>5sq+U&^.^4SJ!"=6gp8d#G#!!"pMqP\p*K,%ASI64.J+D-OmO2$)(>1q'+oSLR0I!"N@PG`o3>$%\LI=;+3V>gHSHW?Z`T[ap_h70FiUlhQ?Ym/J,;J5J2e/9M[EOo0p8,rViYQ<9E"k4EkTR-(]$$?H#[_);%J*.WH9aiEe*YT23g[e4%j9dDD?G?h6S#FKu9k\YR6-&DAZmki):f(fo3n,#m-ulh!,"M\6!3cLS7g7B[XIsn.gBi!,j(pmU%<9\3"cJ_LS@``SI!iTEH7IJ?;4G+@fdb^?QS2_AjXI-&oEtr8Fo+q>UU@#FE9HZ&DmKZ3e#>.u!pU1,PW2ru5!el_3*c?7b+#m.PUKJt^Yef^MXjTiFG^!tOm^d2!!!!Oq0YX8ab)X,'iaXM4/'r-SF-0t>M>haKq[JeoYSJ0)0<`\YS*)IB$D"4^461^g%4B9UAk$(qXYR-S%%e7oA@.`93l?T*O,Uj-8Y*]`:hPl_`9I+SX>;\HdVeLNV>Bi2@ZfeSP3Dd(_nGpXbQe4M!2'lq$sb,TB<[!Q]l,:J)&u\%pui%_UC,Q:C(p'k]f0fZ]XFAWQ7,fl0VirJ*'rImcKu]QpkLniB$FTuqsgG&,k'U/Ll^gZDA>u%r&_[/9`Fhq'TK'aA$a9UBBh\ms-_@S"T=)aVp=3^W&$t@icK$5S\Zt'fXQc:$5>+Z0jAUpDZ)cso4tlQ03p#0Y/^3=o@9eo]N)Qb",Do>[l,*6(QP3ZT)>$P#E4Pr]Vp8lb."(^Abu_*CkKI;=IHOq'!I*tg^I=W0cI8aK!!#867Z!gs"R6Cr:qcVjKFA.%fC1AUTZ$*K[Q;=kFdoejCH$&9.2jXA*'8U!MgpQ^*/7Yi>IpjkkZ9a"f89N,'$d#\OMNSP?[V^O"`6d"+n\VgL),p#5?Yh.AB!!",NU;YDI!d+\tW8@Dp63[SNC\X2e:uZS6>Fj`kWPW&(qfs.Z>?,HKd!VdSIAJ14e?/&Cm#VTKVf'U)Yn(\R07Z@.#n^I(CnqEAN5&*u;o]rn([NtPA%.WlXV'BdLmQ^(.PG_3K4eKK.q6ZR]'EA#Y#3YZ_hmdP$Uo=kG4F6hg:)Xme$X%8#44o1d!VdSIAJ14e>q6L4!!!#OJEim2l3p]i^%^oI$jaZ#n1Bis`9CH^+9;HB^]ma['i8PIK'L$f-Y,IB^4pQo"=6gp8d#G#!!"pMqP\p*K,%ASI6/SS!q8'pb9SKU\lL"G-0RF0\G!P)mP+XuVHWJ6%01o8K'K*4l3p]i^%^oI$jaZ#n1Bis`9H"T+A\Og(D^=#h=nI`?,,M!BlKcOQ`jY0e"Prfjf<2*ao"USF!dm3i1l`.BX,YIZ33=;r^(tD@cc>'&O0B)Xd(r"agQ>Zbs/G2GM=J_@D%*irekmOS/!-&FuE*pd[mBX@=ur41,/8lF_H#69j\`6^pSFTs@phYVJ*,m+eIN0nc^O`+C&a%F8'LAaD]kqSi0[sfE.@pOPP7d:CG6KGnLZ5;^hGbk&!3ePC*F>E#-\9$7crN0aGQg<>9ICERd0WiXLY&j'/Xh%&(6Ce,W5!tPO\k&L>?j5)-hbL+++IY,U^1F8b.h-85p'99T=biDd(:j=l+o)`gm\Hd!+[uG-1OYIQS_nqlTZnh3k:b7p9D35:VY$`:nqq"kigXP4HCRKD:H4n8B,`6$]g`3bN22>36Z[qKQM4a@r;<+B=>2'K:lf1mOd.7gTk[_#Z&4>`8sUi1B>4'L_<&k$.KioTR-(]#oO;)YMi\46&F'urBZ=2EV@$k->++9>,>sCmbYSUi5)1MU65$_/2M_n',*03p;23NV;pRp[$`FGDtrh\j/^dLLn%4NTVp,-J+<)0q9&@ujst%784\Q8:od+T_.'-0na_H(Ctc24j`W_0mk:t8H#-rbq8:AQ11GjVa&fJ#,SGC)cJWRjc?4lrGOC%jIo8EU%B"Vu1bhRZ4H(pXJIC-L2*27apKK>-c;q>Bau@^+3NK)Aa]68Rn:4`csY!]:F))9%*L[R-A'#o6#e#cX6J/$Hq?D]Oq+Sq+:Ve5!tPO\k&L>?j5)-hbM7C!.5751'pRCY&+[>re#tM`SS1S\&nG70"GWP+mnra@:OZYqo*iP^]Ggc>eTPZF1k%[L6%q%]oJOB]4Kabil.=l(IS>''dX"3B.[fGTr6*$RRoi,*C#h.5=Aj_XnjWW3eP&H\9pJ-fnsnf/R9f3m+Aj%Do#>7`Pp[OgJ.%mDc>hT(FrRh%k/Er:"8G:2f@LO2KR`ep[4NP1WUM0RqME*^U*(1)n(RI8QsOccK*r'hh91DFcIs!gKgo@>\>`SCr,(ZRJMosMAT[7INr2+!5N6'&jmHAe/>?\HLKSp)%_>%iEIWpM:8l'5n4to8L.l4W\m=<82.T1n]:d+`^Pa>:jY?8p;6`9&RU!R92"oa9\DCHPEqc;cBtfKSiLGGG'h+&NSDCq,3/[;YB0X)X6ehgjm!;=]fRFI/R#H;rjI0W_-4S;DC[@*$mH:d?Dj39dC/(257\hh=^:=L\au0[c&(,\Xk0N+I,)Xhg-i'g+C90TeuqHm^*`.Snj_*jd4QRRS3D:+,ghd@FGM_u37JgNm]:J/P1Hsqq'r707T9/#_>%G!ZB9i+r+R8PnDgD0(e_mbZ9X\(LDFHVMfSZHdFNl?/4g*]ni9rVQ?KD*W%H/Ud5X17pUK/k9:]o2Q8\,(QaT6_1DnE46RKFbV8>T;>2QkMH.Bl2C0[\pRM`\AQ3$5CSP);mpMsp&BH,;_5(GeE[Nen(n!j;rHm0^ZfkFnb1Q$]@uQdD7V%$cJW['J>=L)nfsO4K#3Li#+%F;np1N/G-R(L3l?lBYHeBI?F,+P_hX:/Ad^eAkbr#Sj%SrI/_"Edq6mL\QtEFB?1lmHMFF1dF#-dSuY)J_;//IrN9`)3mF\SCogt^iGNYur4V!\&Qs10)ZO-If,4]Sq[CT2]msF%&F97*`.W@'@^b[Vo2UNqUt-F#938fLqsNi5pV_t%@t']MUqFu\nnnUCpA@?0N9(-(STTrbdX'#q7)NQ+Tk3!Hc.d?j?I,1W1q6@brQ1n]/$Tp(!.Z_!@d#"e3eJ/HmsR8@!s7sLI*3c`EOu/)IW*((GP=i(*B60p?iKBmKtHso+HepPFb[h15=Qbn3PSg-_Y.:3BMTFd`am(:2HQVhFdKj%iOfnLFb[lYrqmsG2Z9>-mM:#lh_/9L.Mc:!A>MK/=D)mNkfMEo"8"XlnIqh>V]sXeNS98332q%TYnO!jX>to?E/1TE[G9G@9?QQ/2=%Z;5&5_iL0_K1Z[ZB1s*U);O2lNY>t-+HbQ0@\T:nftb))a.fuTJWd.8&,p":frD`D:[=Ec98`an*0!;I$ML+X+;1KZs9hR=.R+95cd[nMAdVec0^m*]Bo8Fc=Z+bXBIqX"$]1BtL;o/_0cRN.9hGO7UYCjT^^j#:kc9!8oGn(qN82cJ,js+h_GL1S?D5io#.N6+[mWjr%?U/laL]eFD=.e4pR;h\k&L>?j5)-hbM7C!.5751'pRCY*B8**-h);m2,#mKbTNr+,ZGCEOW:()#sZLNpn,KTcH.V6R4Qb^pTE`Ap<S7`..a]C,94CS(()6t3C]^=RRf^LAbjX-Ro]aTl1d0;]:KP%jf3DWnF\UDqWd=NAqb)-Ug%OfY/hT.b?Ksu]2tUhDa9H=K"j&^W46)2+VI'P"@3S*TRBgj5(a\cT7&0)#RHP-`BceDhVJ]kr6_68<+!5$CM-^snKL!ceA7h%1UFL"=`Nh4Ng3Uc"o$#J1'E)<4A^%.VEuP[+:*QA&jZ>o!.>&+cp%>)Je8P<*uabAEic@2MZ/%]n*?`=$c\/NC#Uq1FKV0?h1Gq:OJiif/)u2.;1Rs5\21J:q=/q\eaePmn0O^[OlZq7]WbR\(kXUa5&\oo;i6U]_OaNUSe^Cd6=4@mXBc9Q8P.U*L!(UKmUnU%%NL1mq:!('V&N3^5_m]m6Bek`2cNAl^;g[1ASbe2o's*1`Y>V44^q95VcAVT7M%`U!BdppC2-`"*FeNXj)+_"FASN`#4R[\q<0KJfoOtjKL*F"8WF8TRHO1"=#$`>lMD;@XR@3nq39D)5#m^m)G)F^?WJ/Cii(aGA6OFT!!)u_e7lXCd+O8LL*uig'*emf!f[K&H[H\ga0IXG>c\:PhN(rn%Me&e`*s1]XFNaIT]h%SU1%7MWQkD%D;9M.Vmo%PEM"(m:W'5if)#6K/R+f-4(k%Ok#ba8I.nY&M!ZuTk2jF/RnN#@V;nb<#:_@XEYDUFloBa(,_g/RDDpfFpt+F&Zn6#u?![Ajj0h_NjJI6PT:r[#eRRsqOKbZbY:Cb;ZubrNI.\h!]+=rpnd?3]&u,.G?_-9(#C1L%Cf&09Y(9daKp^d%S\V'Q/9`3Ks61JF/u]=>?r46L<2Ma7oSVklV0VT2AtZ#BY.VHpYC'D(dejVJUt@`Rn=+X5V"#.:#:E(+=l3AYeF>p48[j`H*(+W\6P#)<)n`G9u'nBJ&Bf3*bj"+hZd7rG@/D*ad[%(+?pP[FX48]g96]7@1/+#R*N[R0abI"p71f!4OIA`Pd-2C[+H2F/0dg[M,],tR$@GmhR]`#8@@>4(TBeXF2XiV_!MMV@nckuZE;n?':2q$0f4UJJSn*:0#W'p^c(hc#qfX%k+ZB@qF2#&=&#H\.,'_o),e-DpL\A,Z]D+7fjKjfD:gcg[[-(`L)2j*Ue'hs[E8[WH&KSiY>ep^ET:EUM/G4qp+BJnUTeIE!8Acf:$P,3`?iURN&EP5#G]o*R\J25'I7$R%^Om5oN[3["JNl.EKj^.VN^m4sD]o#7ZVS3W2F0_.LQlg!g%gW\.VFbM:KR*u@RXcJ_\UO8NV@[ORs3fD?t5S-?_aDb.P($IH0JbIc`&r_?#\bpf,n%O"L1Orl'p^GdB2a@Agr]DWWZ_gXXT4-<2f2*:s';Jn4Rb=Y(Mi`IfT4p,-^?Y'UqUS]DHWW^Fl'hamB6[\.j;Rs9JnWVG+KZHG[4hc5cYAu]jY]s:qEiX%pJbIKclc.%+qjg=nNb(T>)"4ENgi.J!@3s`>J3%C&!J)bjLCbe`s9V4ad.5uroNkl;D)71P&TW'>qFjuC_#\9P@og$(;1ps.N(ImVmWpt59Jlf[h0:A!YAiST0\Yd:7jh#.!U%@d<*C'-R9/?8F'3O0AO80!$d-k%$4R4*"f\9>_p_Am(G+!G=>ba!_FIpR`IV?!G.Yq-.:3`5tEV),Qfk(hh#>(rA-GiF[KH.;T%ap12A%ADe?,bc6Dlu&-S+[10bQ-"o8X:TRHO1"=#$a3.6O^pD[^^J$!$Zh.K:TZ$ts:8r2.jXKLLWU<82s&"baSh=CDcHK117hDJ#T#"Sm9cqWdZF$^gW-eR-08d?1g-*R%-CJ#i\I]h]IP6uaJ_Sn-poX#Q-s7^=f:Fnr"bicA,/7Lu-Ds&OYcr+InH;8NXRLqoJ0?jhrP5&/ns=@YIKiN03.2#(U#>/IgCn78C52ap^&HhPN32%(9Gti_.")!q7Vq7ZcP`@+ErZC?$n?H/#SbCbfKWnlE(&NSn*f8[e.$PSRSKd5=9dg7HcNM#U4b/\15i4oGPS4qs6r^7R3ItcV6YIcTF-`;;L69XSgTBFl_K_#'HO=$:)^ppo=;Mf'n&a4e/.Ol.,S%YC:fqDC9VIB.,0BG$7a,^qYip"$(%?3G>I=qcJMP4p-(Jim,<1Rh.2GYIo3dV$oP6l6-)KGbF&:/PhLmV_+;"4dZ,6jTfK;]dsA!k<)`mC1:Z43uOHcp^HRshHRGUXf\_;Ie._q'5J4-\$WM-ITY[^P1$YAnqr+\VnY3U^tGGGp1JXAV#QH6:\mFpbO!QJ8WotF>,hu7:QJIApkTC6+CnOKb<+`?!240ep,$u$Hj7js'^.=]FoNl)TWmA-F%C-EoJ>GM$#d7]8A6W#;[%`YVQNbEl."544OEWSrX:6BY*8f%g?U:fpDL>!lOX1b,X@s%!o]fu+9pP4?V3!RdKJ_sO:QB#5)FaEIn:MGir/i4"o+VV[1#,pD76,0H$KeD(Y-G!dm)?-792,BAUF\iI6ofU-U'ogh0KVjG\-^0/%&RV%-48kkSLQ9Ud/@7`SgFkq@!R]MT`Ci7@s;N)[QD0SH]DZl_D(]g6l0W"GNq0GZi!u\9C.H1;!4aKj`e^kplE(-6SO/mHY1QJ=s;\G=6S\MYI=gDh@T*"e$]Nneor46;rqE6MMprg$lu@-^30iffmN,Ck5Yk])0YC1?pE;m`7-tiAU+1.fCB7_8J([2$$Emn/38%N(k3Dt$9:m0jkCe0L6%ckAo6t1j]f1\jlqd4Ra*)o9_*90q(QH55lCt?+HdnoCpp!Yp8>)5Rg^l;EqCC7)dECBb'9T=E_V6Y\T'hkh9jL5"67*F>81hpQQCrkQNVsGXpd7jN&HOL).VHKT[,`MAkN8$R:=OcB/ohNM4a583aj'pi\rLpS8jR@0?#(DqJhoJuH\m\cq31j/5A]a!+M\[,X8R%9F"dJHYP=oZ=sl_@Zf>"#eF:lcqp;ePrM1,:)Hm\Y1*25iGM(:eSt_8k4u1Dd_jeU`\mb:EV1tSmu6M^a*.0._"N'b"bIj&U4O@c"_'`h5n(-H^6E".`!1VoK7H-Q7tuoE[2_TCYKm3rlg6cXCMIV!s5@Srm=2_E)p.gk44SiVR]&[q$=a77o]+94Wdh(VXPC\4p$OL-F;B]U#_MOgLK/mBct;YCcd7fJic6UUOmMj"pM#'e1]%Dk)3A31>QRbV7%NV^"P,^/UR?,l#pe?/O6rL1IN`D2C"Gah(+:UY2LaeYV9GXkeJlSRFjS$l,fXJaoZ;LC?AM+41NRU.-[O)rmQJq5ATZA2']ppCrL?0dURN&>Rch;W^7iAUIK8t.O9$(_!qOm2,PO!a8P3U;_e8$ID`C]o;Dr1HZC^1grG78/*]VBCYg)U7p^E.A9jN,"0G>-3Zkbiq?h>3aj'pi\RMEI>H'&r$,g,b%e_q.Co.L&c8,/7M[8"6!;J%GM]+"O80Iq4Z]-k)ebFgWDD4*SK5Ogi':,>_0-Bj$cDen*qXb-s;05^[uE2-mkjWAAt7S(`!CZ$%-B6&37$`Z.3`56FkHaE:0eeFq&-WbXQ-LM/jD@0S/jgNR:$'"@7,rL8tBX5bC=N[*QIN?j+CPI0P=S5!qhpMT`Ci78EGWlo]CVi*kY*s3sg%$"G-5KqS+PcK;b5*FLWGg9r*i8cC=a\osiLH6B0d4ROUCP0Tmh^trC\!/7-o+no35Y_Xl'[J^suZZ6g4$0l$^eC32]fuf-AMH;'1`Fi<:[k`4$#"UjMIgjRV4!Ye.I*=5t<85esWqd(&%l7U@(pDuuX11FQd>I=8f+RLoZg&=nsHW^&Q-1PgVUfp<>1JCpO@?kC[tkf?S?\X'/7MjJ?IeB,IZ!^BCRc1b/cD&c$,B+lBr[rl`K^2#sOom-AZgqCA0IJTB$g/9P/G8i7K&lYY\<&"`%QGdD3lm5lFn'e9p`b2f#nXB'rYtY.Wh6HPf#EcB-5NbOt1RWV'f;nZT$otloj!XXf[H,)=T4(Mhgt7["Jpuh9Tn'+f^T6JR\lcVsfc8ER-I:783C2j*)5'JHVY3h'"RFDeJfk?9K033=_Eje[%(+?pP[FX4#(6].J3H=jL5O0^$q2W[2$4&B$j^$P@H1P]lF!"Z_BQHA?+*r4Y:u8fR0&&HT&Z[SY6RC1LtStQ:gdq:=jh@ZM_4Tb(b;"kk(%NMM572"dt]`_[cBuXeqI.\g[#C1,Rq=_f1Qku$C/9F.*ItfR=XG-#eYh20NH#Q/W?(FLe#_F1T3\jqTBEe5@@\A/CV$&"c2Wuq6"S7^="=QJ%rd^$1LMM1#f^GqH#Ho)\ih_u,Y['n6R9dn-_%*=ii2hW:ZJd=l$WrfCgT0Wmmcb>WO"N1Lm#(qFi6UulgbI-+n?FY6>\W$W!n:?VfVp:gq/?()0,`hYC2R0\4lkpHUcfF!Zl'INB]HI^PD<\PU+;CPjaRl(/khtE06A.WqhTE1#GeH6_SX=cmP"=%*#p[96'-8Cp/M.i$t>lXp8%m:+?&F>(^0IK3\jZ>Y,MtHE$1NR&eGtk1>L5C3],5G@uPaFoU4mg]^5bd&-Q]SBO;LIcQEGGB4"7b!b-dGK0_bpTd)qDjdHO=L..f7l"">ekiO13#=nt`&-S+U[''h`B+P14ZS*UA!O4q__'#Dsd#k$]E_V6Y"@3S%5pV!S<<;q)@\A/CV$&"c2Wuq6"S%D(g24:4gX9;eOCf$m-!)B%kj^fuf-AMH=8oW>DnJEGJoc6Y@];c(/tqiml/l$pM?V*To%Y?gE24#=hb+HHiVm^!>crqUiZ/s7sX#bZcZdVTEK99OFp5M'*'j&QC;eGX.le%(+?pP[FWiM*"/ZcDS/MkCLGK&\I,VPIn$`CQ/f-P=&%r/cY9)!$iIdRV#hgo\LB7TM2Pmej@Z8$i;)A51PYc(\/X@9AInYMrjBiG%\QB+^^!lRsqtWHmI5&b;D3dT*0UmikN61ApklgafAlKi5_Q3Vpj&n't:8o@arBpFRk\mmpGI2FNqD/k8Au8\`^g%DF[`O41b8nmK8XJiSdVSLDIoXmseJEV/qPmU@0enhu`CL`WHsBC["7lKrfq%Y+`+_o4SC!)>IY;$jR:b1GQ:%PE]+B-GnT`]Th\'cVo?Eu$AQhdR)[ekH95&;m,il,!Q!$t>lXp8%m:+APPpWf7Jl++&%;[cuU/T@7FDc:`4C\,1;8/c30[lgprL!"q^XQ1#e'K!;qgYqGt;D[)ie7LDE1+8'ETU9S/,_jg[O+Rk;JgQ7-kF06O7UZM0+JLJCcFV`[Mn+IQ&Nlh5aZ>fUsN@3#od2WN0u383'(HHPl6..'9Ll9bI?;fY5Y&cqn^[baY>7kKt#]0""=NJ)*0NP>csn>$"5BAm">AtmJ'7:L!O*?'tn^2oD7b)fBf7D3Q<.$DX6@YDK1HK'.2$X/hY8kGm^6("N:p(^3X'FB#4t4a.Yb6CTGM.W?G\IO9lMnS[6AuX#E&n?*Pl"O^BfW[em&gk120<3I-mT2FgZhW/qj&,(BgbiWAEo<)+mNE](E3Z/$FJFI7$@tEsLnUC!1A3`4Z"\q#uJ6fWdNHI0W^(actCV-k<#:Z.7^/Z5V`_J?ZeTEL89;Oc6YD3SBjnMq9CpPc#Jfp:E`R9GFoGPS4qs6r^7R3K*k9`r7rlX"M!-C66lM@hOWZ19AJ,Y2m)$gDrjdcpaJq"pQ?R5Li0[EJ/=!I+)@m;n<&tDf`1_!G*H?=r@n:Eot!T[CULaoC+ITB`/1hijQT7O=;.7'T",=BH3>"Xngdm9?*@:O(gX2(o(Gl-]E-;![Y*=EH08]Mo5DWgBVJT5$0q@S(*?$Mt0MR`EaP!3tEd:`HJb?E&blVRBTY*OS'@e!c;F%B)o4BkL?&l0g!9q44YgaAbs[^M3oIaFDNkR$iL`_#+T8=T?0b[2?c?Dl)Ip^GLW[h08s0kL3uh>7[9qT4^+b.#\2R$cU:qdAu=QM:H!k5=rMK3f=G1`7i,pG;aBo<2?RcX?)":*'VUq\]qJkr;MEFQ!7K"u4Igqbi"XO=#F$OmVpdo`+l&!8.SiE_^6FC4%;6gX4Pu;m-k,iB[86E:cA(rOO"P^%M,XjGVd\?$cNY&:5M?s8HJqb!(n4_&;nJGDi(':"oDMEQb"#Hrp,V9>UHm'\W.Vh.LD8D4Q+B0VnReh[oYE)1asRB8]Z>5!qhpMT`EG,+fUaYSo4V`iU]jf+lS:&-Fi5uU;+q_N=Q[8Ys\i7Nmml?2Achgn/J5!r7I1XpgFqKMrn[X.qILs`DH5=<$n-@][]_*3PPn6aJY3!D_K=]Cu+>'@T`LuRfV\%e,`5[!V1)&k-['[3MH[1B8DCm:h.k@fRORnAt$(UAi\^`q+de,aXECE;L?WU;)bk#0^^58b::7jgN8(^U;5VF7!55WTYb0$a.XIRD](5s(nL$XTJVU$CSJV@MR+"&>*@>F4^)n,FEEampu!,W0fs!YXTYi+2U88S1qZh>E`2ET(lp1nDXH^[$$]R5@

Y3#Ak#o,9[2\Ebf]"=r4\[>(,a>sS/"o8YM\$&>Q@*l9a1OK7UergIQeI`EMf%&;fgq(\G`YF`^Rd3bLdSrH/c_.6^._@X0q"gJr_oDYmfW(-t)>i5-D>F[t1DUunI#PfV!//mg2K%u+2J5MG8S0lfFo5b_;[1t0[J,4M?r)U-"':5@fY8F3Zd$dq"T+[`pNV^fVQ#`"hd.M1)?JN4(+piD?4[`F,shJO)#*E-jTHSQYB\%9:EEdrmQGOM)".P3^LFXC:t_JWFi4F.7Knf1Jfol>Tjm9'"8WF8TRHO1"=#&-i1SECOeLcT/\O[\W$1XU01J@:@ddr:=:H*F=]m&H0SIOX/u+gnJSIVWqP,Z+X;-U2-E"PKd1D==SM`B97N4W)6p=GPFQ!7K"u4Igqbi"X&0$nd45rc!%hn*795Q`648K?iKSms\oHNb%VE;A7I:1hh-T>DlVJ-9eg#8\Qq(H*MmoG_WKEeRfB4jj*1J#tt"@3TP%2DMP*meO2"7[>Z2dYOUQrlXp8%m:+?!\<Z2dY5nF/b&.,"X;YCcd7fJic7bI801`:!@_6if13%%[$.Bf/KI\YL0HSZ#_F2162RY^I0MFQ55S60&J,oR)%6TC$lp380%Y+TBg:6+1FpL!0_FGjF4u(E\+!XIMju(l+(dJC*Ga0,T?8Z?2!$6qoGR;a3B.K<1@@<0]]'\%n!U!4@3-MKXAb)(&A9ls>9DVQ$NcfeS,"k*im&2?5nHEiE`a'4!IY/,cp%>)Je8P5oGJ&=q@"A^.PB=n&4rG=&/;EfH#Q/=A"uY):&.E7gs=n8`2ffH6Y+\inm@%H$p\N0\V6%/h-]TXR>F*0Jfol`Oi+1a%-TL'JbIc`&r_@nT[.!WQn[FU+$F`XIq:`=EOhBf89Xp@Hf"jrq#S^5e_uuaf5;jJLkn,1R2L/52e)ED#AG&$P6oRmmqV[hjh&7.M:fITlY_k<.4LamE#Af1rG78/*]U7XU2XsCk3N8&LQ3^](KSZXj%1"WmFK=$b4LCGrBhEoJQ%a.r=#-LK(J,IZ>D8eja?W1O@O[&9p4"S#0rq#kn/U\.,'_o),e-DpL\A,Z]D+7fjKjfD:gcg[[-(`L)2j*Ue'hs[E8[WH&KSiY>ep^ET:EUM/G4qp+BJe4MfIE!8Acf:$P,3`?iURN&EP5#G]o*R\J25'I7$R%^Om5oN[3hpo=OE>@iEX[&LE%(+?pP[FX4#(6]%On7AeYD`]90%Vim$"<)ZBaZ&gFP5s(dk)$pGs9jnBWj/mX6qE9M4G/Df]/%d=:`B8b.Q]d!_2)*c6@[C)8a+!PU3&JLQ6X4BZNT0\Yd:7jh#.!U%@+ah;)-R9/?8F'3O0AO80!$d-k%$4R4*"f\9>_p_Am(G+!G=>ba!_FIpR`IV?!G.Yq-.:3`R@)\9'Zg>L^pfsRHiHdb9E[Wm7'F[N1JCqq'<^leGoA&<.N!Cgbf.n%C>#oOj^&R[?7GU]*Sn)GsbcL/9LcU%#QV.7mD/DN8eou>&XH:)1:Rh966;i&j?SDeM;]fURfXRr+![;njpqgd]O;kZXi6MY-IB8sgmq9umM:6*6*t"S\Ys!Z8VIoVlea),k_q5=1cBMabL;N+,@)R6Vq4-sm3!W9Qc_,;CK0YP-Mu?#/#=m:oe[:g%+:*S_'cF.]ZiYX[1!i,];M#Jl)`bs=#X<@$48bB65fMhgSg#OX>;4HO0)L*J#AG'h/-]\K4B3eE@Ue@Z)4@K!%.7HY>INq$Xf]3ao6+a[CD%u'['W)I=QJ%rd^$1LMM1#f^GqInfqL\(BO`R%!DRu^S%ghflK]#qt)]'+pi1r@S"3a,Z=lKAdq$;"DJNpXpTi75(a\cT7&0)#`+J1@o\1(3R8`Fb'9T=E\1(L-bfSWPE?`hdi]f]I<9[34*,2(TTF:-0<=jVp[4qFB"'t4&FB9H?,_9M"GEMHI@]=1&@@biNi7t=&Z`_A9gCs,giG76q^0f=C%<.kLI+q#<'p@-RG%)Kj!U&C$J@V\bEo&2H<;se"6TXkoGMi>4^^M,e&9a"E+O9B6\B??"G-$2:rdq&U4\5^nWuNQ"@7\ccW,O8ctct%;.5uiFeu`$h8RC=',i9`?V*F7n_cib40sm$#-nDL*Y]7ARbIoeiWU)I8te]K,A9oI4;u:dEUtZj1[!I'PbdW*f.Y!"G?u^$ob8H2Mp9.A))F(cTH\h,7@56#_F1T"OOk45bC=N[*QIN?j+D;cESk9O.>ACIq:`=EOhr5,bc"\785-S1IjAWp(!/iJfk?I-FBr`ct=Q17,YjdHO=#_F0)Jk,n/Wrho2`'F4d9*n'QC^_@0j%'$fcmKD1pabBUMT[jl+qXrD&-S*qg/eIA1PgVUfp<>1J.P-+i3/(E.PB=PLd^l-q"e[dSXXFTha(sqg/jP%qhQ@#@OPns'qikq#23]s8h^<5&:K2G1*3C(>g#F/rF!sqX;o!jd$(BRM(^bsNaF.Y1\e%R'rc4%nPk[Bo-iYU".--KW2ltOS8V?/N#4^SCJPn9iT!ih?'eHeVP^9:oHj@me(rNV>pM/s[i9MZ_*aJ][a/>qj2Me['SD>1@!5<%7.7Z.p)7>iIkW_8daFji#ISRV3;^mRZSqM"E,+N9Sp6G4pMQI(ol;+9k=GWrb#KcQEGGB4"7b!^[HHK>0/_W46*U6"Kl4mt=\VU/ZMp936!tr:o+8T5&+UO.T+WEU/D&b,STcrU8Q<;^cAn:F-m$lc9#hb'):Ve+D.X^;j!=D6nju8`E5^4p+Rc4iU7i?bWD;Wqo;!G!F`T7h\YgBG9VdZq5W?$mPRQ>#oNLj*LHdHgT3."@3UTOi+1a%-TL'JbIc`&r_>P7,Qq+N!Cgbf5_GENoP/Pk4^R9Iuorsq8L/mi5<=6KMUXYZWQWhcF!3nr-=!%)a!d-iJD.2Hs1/1I0amJpMmVZo[[W-T>)d(H3o`/=3&&+Tm,cBKYdaUCTFKN=kU=f#*$:gh&WWoW33/.[FJdRe<$o5=0F,1ZZ72.^O5]$.EqG9f#^($B+4DKL(qS1I0T@.WnbpnD3oD2n!FD;cSUoUq@$i+IJ0K?,9R-:2u"o`JVqXY4@N$:=mS7mm,2=4R(o>qUQs.*Z$%K>ZdIg26TCL#s3,'Lps%35R%k+MN>!Yb?61)[Xj.f*r'$0'$AkR".1i?@+B;@h$:RZUigC=9qiY/FKOZlI#^k`-;Y%,Y&]6aZ6ei.D^j)$;,jt[1?>=CO7qO]1WAAr[q$bKl,TF5\$B*Q2D=9GG#Vj$k?r(g\5j6p]>4mnSe\h%"-DpK1G7GZXjqel7dbd5h:.t[*%CXTUhFB:aK?jFL$A1[rWRtP`Jfk[NcW,O8ct[.=F1:IL9FmSF&*ZpSf;cE:h\c/5Fnni2Zd^GF*9@quh9SC?KkmM_(4.tumgMD34lm5lFn'e:3#Zpd#o?bY,or$**O,VeApra<^FFX#[+``gch8pJ:'%mC)X#B]bfWdM=I:(5W;=>VQCn9@jn(OsAeE#^UF8,7^p??3neZ#\YAcX7QrN;H9lXKBjB6-U2UsINIOK^.Ac_0.82LPdXoG;&*R+d1;r_5]j"@;[;4BD^'6(^FO[*QIN?j)-*q?DF\4A^%.QD$j*a9E%k)%a1+_T'"CeSEtj;;\">\"t>01OPU0C:NG;82N7acX!pUUT&<[DOfVci^sJUY?q7s+3%@-?PI5I>p2pfXPdjIb)rq!l<^&O(YEsGAZb.^_!bZ)oSu)+4(0`e^S\d`@L.0"K0IZ$^a(!"A6h^H2:sQ!;jaEl64=?eG4,1=VP^f[flN4Z;dlQ1lCb^Pnnm*Cc6l+5%:%-i7O%t_SLld/uRhX&RMI$q_a"@3TI,K!N4g#k&Ko=QMgDD'aL@F]^RIcpp2+:rC[dIba(B>O(U4e=56?idI:&?uTM:`7:bqCJUQ\8.Ng_!H:HcDe4LQ;`Rr$4';^<$=$$[&F29g_p5>fUsRB`la8HQPf;P0Eb5?Fjr18OFefV_)9d[JBfUo,"Q3g:4iJfpo]n6>)pAVh92BqIS_)mk-c)HWrN`#mdZ7XO=,$S>o1Rb!6'Q/:7MNern9drcn4:8Yj+B(G4OMD(e\%lp238AKCWJK)5?kK[2W0+@pi&[oJ!fT[+_bg1Obb0EOQPI=o9i*iQSR;^#%JR[]ce>Xf*KOs2LV&VQ7iNU_%N6mGTQn=ut(`GGLH&'E$F/8SS[rc4(Aq9.)DJfsW;p/M.i$t>lXp8%m:+9^(NpabBUMT[jl,%V,bK1c84"':3r=pWO\LVGtAe(ro]WtiZMSF(-%rM$7Cd#.fsoZe<6h?/2gq(n)@+:*Q9$JJPbkVJ$Gp=YcFN.;I-hr(\s#:_@XZ2dY5nF/b&.,"XsF6Vj:;-^c7=NOH#QFs(^;j2RnL-,?^fYO?"4VZ,ORY+*`[E&?(&YraHW*MtJ5nI5HUN;[FeM5`Z8[?=9P]L\GC4fl=DcHLP*KZR;6QRPTl;ePrAV%Z-+`)':8FQ!7K"u4Igqbi"X&;'*br0?e;`T:9LO[1/VQ3To:1cB@qm8,tKS+[<)i,*]fagl)73*#4ZV*CqQO4QZ;JFo6aUnIpX8ZnSop$1S\jd7Z&4V6K,'$pC2-`e"qhB5g\5D7o/&VB+sS[dhc%bd*HlKm"*'ENUi_pDtgsJ%PFN'R+\gjPFUG+M;E;>1E9"JQU3I&GJlalBR7XtaL\rD,qG)OR306Bm5lpaJKT_itR9]jXXRAtFQjhs"&W*/8=&IPt\rhlaWtaF+H-e,(?TNU5nHFb:pG-$!IY/,cp%>)Je8QGkSsGbnNb(T>'c;B=!%2&UqjhYDiUIN;u$8Z;:/#BX1p^h2>\eTdd]hfgH)l(2`Hr;'.2$X/hY8kGm_A47&anbO']N&*&D$C^AS;15\k/9a4R@7@8W*m&YGW#a5s?\3ST6II?@m@&:&.<-KaDSb:b8s`/`ZYO9oA#\W2N*g0RobFm[3C?$k;$50UO/RVm$1P+@dAR7@ochRN62;S[>eS5j8A(="64.\X5l\7t46,=D79$&%PZ8SM=o*nFoa'p,S:B]s0u!56aTVqn83T^FTEFEB`q2Yh&n_;@Ja/1E"mR>c9]:t2QVhrHY7VFj#kc:e@,&G\]4dY.qu)8nf;lq7XS5R=*&n5mU3'pi]m7D:0"L?K@=AqB%ehRn:"/kL!:\go=@Mg?6[LCm\B\LN;GbjgVJ)+2iWECYDCY(FU0oZ&;Up.TFRnF/0I^ei="L&2;A03f[bjGR(_jG1[eqe=DL@q-1opKtW]I!p*_`ZNe*_dC.UdqH5T1N6BkBim?a+E0M'_2Ok\N\E5AO./DeSVF1)g*oi,JfokXTjm9'"8WF8TRHO1"=##ld5UhNj+3*2[?Ml1GJlbj21C]aCMTudYH[a1fWdLRi^]/l5B>Q)g#E1p^*J^`5rZFF4PplnnHgIhk\-^:quB9`>e1E!hsY=U[k8HbFZ,$IKZUR>oE\VGIt%^OdN:ah%#G?.Y;m+6bEN%\o+qWt,4SWqf>O)P`dInK[C(L1DF1>=B@'VCVI<>?K#!&fSE$KG,E.S)+#e@UTlRUS'-T)AqSM(c%e/[rG8UMuT-8/bq!808,TRO;mlFnZ8Mbf^I=6Ol\Wgu[CgRkk/+J&m"@<#j:pG-$!IY/,cp%>)Je8QGkSsGbnNb(T>%3W?$=?mE(rF"`T-)@/3\*9.!mfcmV*`**s0]9W:?'2MI>67,)&>-5_HdWpnc[gq^jJSEVu\Ul2Lhb)Zd7!Bi)$QDBAiD"e=.SB:g2>XC$GsKUYWtMh:\[&An_/.p$_lgD"[]p&W`N,QU,$V%!?]8h>5d(]S,9QqI?@jF^WdMn!\)_sEnk&5^Ec`^;""ct@$+BlWn<%ZB+G;Hd+%?BK4)oG<8q3852Igr*%`O7EYc$_BM:`3rH+;nh'e_80^T\rAd$/$#i1]\TE>2$csfFF?qY>Z&nlf9MUboDD[FDc6SfB,Ke$EC/Y&&k')#B2Gd(e$*dL5p2l.VK()7&Oo7%NuP^;5fACoIB8sk2^`S0Bm1H]_'/'lB9PUfqdh/t9qAn>h&C:qhtJo`1n7@Ur-h^?:B,kfctC]t-\1RQp-r!"M\88NgEbi/:Ats$PmHE+#Jf8bsF6Vj:;7thA:P5Xd&h0\W&&sbFn,[ir`6Ac*lXp8(1&&J3]0BG]s+5KM^V+^^/k1E_!/cG),e6cJ.j%O,W])&W@!4p,6DROGVji%]DTs7/$IVmuoJ[WQ`]N6n*Mr/'9ONI)1XE#G3g/qmiMhpq;ZbBNg76u:_eFZ2n0fD"YskVU5YQc5VlU6fp;/amQ@37-(OdZp;t5Y4Q#S;#.Z$&D/_%ij_r+^?_3T>>/h!:r_S\G-2$XUob^\*k9s3i5O\l[YY9)3:AJ(d4_%M=m+t$R&F!1]f`5%(T1*H^NJN8BZP]io6+b<_g-mgsrF&";RQ&>9DT]5Q*psJLeX[*VKd4A=e'h3h.u/2r6J)V<^N6*]<]/ITj%!,`LJMC3GVZ9h9XHrTI@LdY2n>F9sU1aRqp1.SBWC_NA^PL3omILq@#J_EOhC)aSVt$k120<3I-mT*E[2h$+h>"^":RfjhDdm?#T>>%(e:M>Z>?Y3bO.,.E+q-g;Vg/GS&R41,CMPF?%1.r=ostcF>qt)]7Oq7a^&-f\I$FBtb"u4Igqbj.QT)f"7OtJjR:@TaC3rPO\#=juJf&jurYl>*iHpc!h#lJ%Y'3LNCL4nsl4p,FDUcIRARGn/LLX^*?rn1p4]W7iA8E5IH*+G9]EDbRU-_.r")eOjJ1Mtk,jWNCnDklc2UZ6))P=0hH(jNU(aLlV.M$sB;j)Pn`e?5NFb+HIs&c?cb:6m8bTogc8bi_C[4LoBbU+VGbF&:/OPYWVin\>c5\_0P9%8FCMVg4nLe(Z#*CZ>!:o;+%T;lo$lP+t5U,=8N4l3h&K__W9BZ"EXDJ4KX.H7uoGtHCjR4nrO#ok\-^:quG"S&AuK12kY:J>8FGkL;q4[>:914]Cm`h20o#DgqC@gRgK9",NC[k+sa$Z?atI?!So"eUZ3`t[$N$@5nJ\l_c;7gT[+_bg1Obbo`!W6eofO+-5rmW01RdY4:mrf'kBgWJUc?:6hZ8[%4+e@>4oF_5?G_d1T8g)AGHWk=Z;r?Z?`51os97rLTu73("l:0c&,DtkOgK`n8Sb&>L7$@JVqXYCdg\7#XS3>c(?IChp9ZWV[`56m6uK?CnH7]nsoG15c06pCMR^$HV%drL;!bF1-Pe9.rG+k"SN,b$reuid)^a1[32@+ea'ZY^]iJ*aNhonA7PnpP5g,YcZ.F@Wi`8")+NQLp$_lgD"[]pO`$.29frsI'.,/B2Qd%?m=)bY,o3n'Gs8@*Ca\M[L2rlUuq@#J_EOhC)aHT?LpVaub'to!#=m7`gIs(N5jkK_O**bt:gUO#aZKh;2gKf,-PJ%F]]tCgjgKRld#FV,WXOV_'#kOJ_)=m?jOo6/$>$BjB@?Fbe9$>B".h[l7ro-`UV\j9CRi(;XEC/Y&i[sZ,_XB:"Ne#F/T^Qq;/q_*JPn>:86Z$Y3Tt[4oLRJ+d4eL?Ue.t/nmP/l7*7[Xo&@#YJ+"J`25q>M,%-GuLX4]Mm,pct%;M'*(U+G^0I^+)C?5n(-H^6Ij!B5"IU-%O!6"Z>TboGOHXMK=CWOU-O]#_GSImAg<\)8nf;lq7Z]%#1(@25j[8T[+`,<1Fn,L_N2NqIoHN72=H.Od%ln/!Zihl]o-\B>[56HG?L,Gr95Ng^un(64a9^0=7nictL)-99:_9uLZ;c9'%UI55Fcj1#AHqXNgSPT"Q7#.m"P&@H`0Oq\rH\-8p>4PWAF0odV=+q*8fn*\.@Z&36g!`.1%((hfOi.7'TBck<\i2cbHbA+j(ija[b5P6^tHdcTkm!6Y0iZXL\?)m\_KJ22S5oN4S]*aiu2g?j)L\3%Ih'^11fJq#OhLS0DZ7q$]d-3n^WrD8Phl,pd-!A`_gH>R:^p;JP\=fN%UM(j,)U45($,&-UAu3NNS+J3JT&BV0]%6(c!?'!qj#lPoI6UkFVH6OkOe^,.K)N(G>Cl=heYu"I73gJ)fN%P]+HV#i?WX]Sq1JKJ9aHTg@@\4p+4%!sX`qk9QTk!R87N*RN&D:mVMSE!ga]1jA.r4#HZH@?S`k_kY8?_`]BR#=2:*l@[PlirI^lH^t&s!_J=B)00ch-[O)Bfa]X0@6>\<`Y69H?WeD`.pUCBk]"K/qMs._T%jO6DOgR8lg>qgtZ`/4DN'J]iA(_kE@R6hpkWRr=%^6q%Q#B;,m0#K'oh&IEgFtK[5SSJi0OU'OQpuGh0FZP8OTB"C!8JkaaF^#T#+"qtl/7CnF#,2O2*mYAo*7Ju0XiO[]72Ff$fc@V6?if+AZ]Pu`M;4W`*mq:QpV9O'WgYj@SFSE7>7V:3$$M?d?q@!X]+SnQFWrd-(T0Wmmcb>X:cX:Dm>(`::%JgK26H-JY6]kCOL-/#M30TT>Ch:P(ccH_b-7#1Nk-LEpAUK6in"o`dFmZ1Ab-ukMf?Ir)QhiE70uUUr2\-rnjqel7r7[1c.*cQoo_@E.git6;[gupORd.p6)Q4pBba>U2oFjA"!@Ko(e2rP](DlajV"j@d12KS"o^+23//f4QFg&V?Tef5uT<3kFQS\gs9A;CB+5C5;W>q[J'[c,6RcN#_GU+$s*U9JNe]'BV0]%6(c!?'!qj#lPoI6UkFVH6\ZeG-CgUgZP^Qpk:_]F?bO!X8W^@YE$dVXhp9+;;a,7e6f3G^V=>E-3k?CtRDf$td*Y7H(BbRtl_d`5S5N9-Am!]q[^NWE'IMl0g[>YtmUoA"9kA:N7:dI3h78H0Il):#Z^$2)dq:=jh@V!F#u,U^Pa7RRFmfj=7!DSA-^iX[bp0!h!N&ol1[q#`\j?%&i-\qQFi4E+IR)96TTF<_!pDE_#U1uY>SUoUq@$i+IJ0K?I0N&3cl1E8DpW-Y&h;09)2cY`H2:sQ!>*4;\uMdALRGhqmt".\c/,)Oc.3"ZhJ>oJI.8\m5Jo19NtW/P0]AopT0_5p"b-CF;4HO/p%&IVNDJM1MCNWs4l(H\/5^*H,@MLrn*(6V.JcTpJ(#QljJpF0`?!.D&q:Vim(?7YeShfcQH$aJfok7A@O,9$M54S5l9n@$2P'bQCp+6=l5mu+=1!W)tF\Wepm2;AZJB@6=]`6jQuV8E5$)Gr.QYe2K%u+2J:l*+i\0IZun>)('Q%B%gZ@^-r`^UBCMLtkhtE0D>%.se<5tMct;"`)*ZD"`74-nJ1,R8W(CM2jt9iOA_UO_g/J8HbW+Z"'WTs'_7[qLprT4PCMTXDkNADq[YGBS0K8sBAdKXkM-_7>j@jVpW_M4a58lXp8%n?#")&1)Utj,ctAFQ.aAJQ6m;ng+:'.l[''h`B+P14ZS*Wg1Dj;Iet?W'K0FpP:iUAL+VI'P"@3S*TRBgj5(a\cT7&.ST>AkeZj&DR)tY#DKSji'$BYUG+:*Qi!:?fgoGPS4qs6r^q@&+ETJ`ZNhk8:<,ugBRNLkP%nJJ*A8ER6oH;M%)bTd=@]C=Y?-1IqfekCssEg(3o$bf]G`$pAn4S5s!]fOkboe#6Kc:.Aib[dKGT(kNk9K!Yo+=;?VmI0MFQ55S605(fOTBFS_-2s<%g#o2WX*(9f!I"pf;MBl,S+:*QAm=cN\"_'`h5n(-H^6G;:?t]jMK:;HBq@$7g`OR,sOXfmJ;:3RtMjF+GF<'N.Id,!L;C3bMJ"l[Bj5'kY>Xg*39-K^>TAfaOQ7lUZlcY`Qc/a$LdsfSH\*k9s3i5O\l[YY9)3:AJ(d4_%M=m+t$`g;-8RX"\'-$E(joq$ro3G5Ncp7/sGJq:jT&pM5<^kTieZ%la"SrN4Jfk>qaC/'k#4reO5l9n@$2P'bQCp+6=l5mu+=1!W)fcVFdaBmue0P&/@3m42:\+q1,.9aKF*$pqf.iCbgFFeTY2/leCJUGLLD`]m5/W&qZ\s`7Z?)W2Z5DZ\1-.#cdAtla@j]FP\,RR"$t[FSngStcU8[:PURTk:a1d;Pql/iBeh5W9H-kQuKTe?4rLbcc`N%!JI_k=FkVF=eJfp:%[oJ!fT[+_bg1Obbg=KuQ%t=LMTD&+qT[1D@4-$ZHOIO>@LDeqEfJ5B#&FS@M1GQ:UChtE[I!rA"R*TaKctFM`;[?)1PcC%qdBQ"FUIW5nN*1L>5f5g4DM@(hfOi.Dbm!$nXb\:p[mPq\c2_MK;.&,#^+"G8fJ;P'Q$G2$FBtb"u4Igqbi#0K:sT)%;OHQkVGa9($C>,7-].a6e@nfq#uHt]uVj/][&i>-u,F9Le7Ws-Ea<2jm1&]T6^F:_`+Pf`TJQZ"@8-a(iigqBFFYF@\A/CV$)2N6VGcEe?!T8B93`Uc4(YKHr3iOTm]^X#6c<9GEFHoChTrtP9j47KO2Qkk1m:OW90.X5&f82ZnJfk?i(INqX!j+_[5n(-H^6G;:?t]jMK:;HBq@$7g`OS9g8@h'Y!C78"TbQ3^"m@auJbIc`'(d%M/O=/KZbA_t5t\(82lI9Z(Im6WFYY]s2cLn*Jfk=fd(UtpT0Wmmcb>X:cX:Dm>(`::%JgK26H-K$Kh)>4&-P9EJG)tDq@$i+IJ0K?I0N&3cl1E8DpW-Y&h;09.RYHdJfk=C!OT$;ctN8-&%X!q[AK5l9n@$2P'bQCp+6=l5mu+=1!W)cVW0?eB;7r!Q?jm.p-JPMYbC)&!tHAms!!LTcbF^M0TpeB%kgI:U+C'L<95Tm]pk5(a\cT7&.ST>AkeZj&DR)tY#DKSjh)Jj+g\-"ma&ei2eK8-p$oLAXKc?4_AFBHlU_Fta3\2YejZI,a-!PcU6UjUaN)/h&6=ZZ'&CF,,4Q6XpWHJf#'pY6t%jT0Wmmcb>X:cX:Dm>(`::%JgK26H-JYIuuPM/3WRS8KfCfI;Yde[FJdRe<$o5=0F+tW.`gmo$s5peNu7+a=gXoUFQ!o/6a">gtY$5F\H>qp<(OXCH&urg=%DA@E/8qFE;5am$p2Z4IU6[`iU>9p:i1kbjf32B->MpnFVY2*>I3fO4pmVDcKg1q;f`fGI>r-56HDm+\6er0ek?]=aiX[,^/O7jm5'nCrbs.bq&!qC=gn^;I!JTcZZ7@N@W+-0sud1+am>#T4.XCT>KbEMMb_$\p8^Hlt_14^uI5$YeP[$q=p"%cD+krbW(+2MG@GI&-UBBnm<.$K0Fo)BV0]%6(c!?'!qj#lPoI6UkFVH6foS"'GX!f#SF,!_V4hp&(;UfE6:9oJ+2q^^VE\=C>8@ua&H(g&@bKmPFA)MtHuBH`=\1*LQt-BDUo[1GBtno#7X@VfVPP'(+G%WrYR/Uh-&f8m\q]@^tU^bcI=f`&#ki((9K(MU-8=cC,2(::&2%5#jud`:oA:S#A*5KTJjeUt,d3%\7udBKEb]AiT:=1FFe=5_?_m/4(U(E0R)mbW+gZ(TRt)X[IVLo8VklU50t#W_G@eC0+%#Z!s#dYDFT&0pk9Hb1+9(ha?XW)1T-#7Ig[(]4r>@j;c_D%$E;Bu;:!L$,qL:9DQZ63YJ`^@5?rAsCE'Os;0e@?O'aOhg"u4Igqbi#0K:sT)%;OHQkVGa9($C=q76W5L@5VGK^t\5Q%NMLjB4)fjnl$WB=P1+j1bgh\mPAPQRm'-3W:?8tY[R.$@N&gQmPFA)MtpS,+"J]^pG;:`r-ej)G3T"RKTjl4(-<$Iqtrn1jf:\90):)<_^/.[b;hk1';&4@#LHr\N?kVJ$Gp=YcFoGJ&h6#0<'^-SAW8uO^.j=aF+rX?\,5#+X2_o1/CT7MEHa_tm-EVK#6MqhK6>#n[1O`:6j(P`XQWti-/!s?K2%PFO.D;7uk=`s]*m4LQ'+/EJD>e7Ws-Ea<2jm1&]T6^F:_`'%%mc(`jlY]ESo=)o9mPFA)MqP_Xf#^($7nco_Fn3MP@eOFOlMaY06".U9kE+?il"?N7=2)@j7(rIYG<%bJl%cqV%!6TH1j#FHRD!V/JW-GPAfo\RK0Z'&c0$E]bSU/3N;Ij#Rg-a!r>CbOld0DM5nF?as/LSkoGPS4qs6r^q@&+ETJ`ZNhk8:<,ugBRne]F>^'PP"?asQZj7ZelF-ZJoW#S]\hZSUWVL>#o'+hMdU2opA[IkE%DZer)P@m66Cd6SDo\!crJada@em0%LY2)h>B$Kur%Is<(hD5of4FF6T?E\dKHNIZ;1ZFHj5rnp'X&T[Jt`'G8_c-Fn^=aeU?9"F^JoIlS0W_(fY$d!'q/mcp2OOVl67c!>Rm4&nX#FkM>j3@08#7_VcG'Vs%9T0MNK)rf\^lMa[-Jb93;moZ8HV^E6D&4a.jBiRUB+7*sriZZ\d:]\W55HnZB8F-PXAO&kkVK^oEGjieOc,PWDq2#>0C,.EpZCS,h"DV#]RmEKlI9V#mFK#NYBU%4^<-CT5qr-D2Uk7S-2J$IQ]O(>%NBg#QR'icM'A(SkVE3(%AUWeT[."5IIpg>cOb4*=ek,`d:[DiinTVD&c_nkTY;nKcX9+goNe3;&9S:^UZSf.B5gH%glNos!!#!O^+,f%?pfA7?)#XVFU;3Gk-36GE(T'EO=1_A!'$Xc.\P*q6[eT4Ul;46=DMWnag+*B'+N3a[;6h>/])r]4K!g8`P5#Uh@9g':(_%).4UpW!b]m=!=U8^fJ@\3u2Ngu'qC0="2A04!lO3n:4]D"jO7hETnf3W%DErRUN_D"d*251?T>OE@D!s8"+V-L'e+GgO4NS_rDSlV9F9l1s_MR/>`qrq1'XY.sP]mcOAPci),4GNPbDZXE.0P>5oM]k;ioC'IKZjo;>'(juT-lD*e\I>4[na;QpkNBVtf''Da`(HHHUa8ppJQQ8,OH;edT+]51dL(,(\fD=$#k,,V#]pnGWl"Y:mBBXMC^DCLpT#kI_c0mj6.1KLA)"j9jcPkJL81.JeL4/smhgA)S7>mKJ'ch\`opL7Bn*o:Vo-;.B4M$%BJPSK,q['/W?*SEMl="lOmV^O]m=L%MWr5e'a1;X?pfA7?-7#VJWQ=b>eN#Y1BbeXlPuMo0=#rNr_oG=V:(hG[o$`NI9`lY?7&C7EAV+%S9.]h%XR<`_B-2DD>()E2SX5/`+c3+%^G3tV_u6WGIQJWG=_E'%-D7fq=MUkk?iOUK,0;LUL.C#>>pC3kF.2$HKg;\?930+Qm]r+WRkt,Nanu)@\;Ul-T(P"2!uIba$2]_Uj'19++*k>[[/"aEg(qS+#"XHo2rEd2DJ"Jm&'_OXL,W4?^\k'1*;OP]?PT^c0KAqhB(V]]gbti(5/1E%3I`%\"56s4q!)`R,.L8M9_1qgM]>WkMU+RU)e/UA1cesu)\WQn\hULSgkqBc:aZ[!/]nqW(MMjN>*AVH\hB2HZm?lRDc$TKNeAL-!GXS`!K*!+GlkA9$C\Du0DuBEfNQobu]@(NobeZ5Ug(IY[f4XmNo.S?/ritsnJ?%tNTAdd2IJhDIpqJa"r,CcZjla"]plWs"R4\69g%3EW52c;U!a[;H1u!/_lMD$[2Jh/b/rY'rI,_8?@ln8ubKX78oKJ-Sr6guBr]>UXn'6ALLHb4sdEMFq='jX0qt?Rrf6qjXUN9Y2J#V,BRjWR9PrCo*biFCKTPS0LOaR)7-bIUT"KD7qIceo,!"oZ'#Kl_"$!L+BFk[X$'ID;06@C=h^hQi9nIK2t#uV>t\oIe2qFF*YaIk"rNFdj'[*Aj,;?[PT-s7K,<4.sphpn&n'dHn^rbPqHio@$\S;P,--iP&L&UgE(^riKIEl0"/rU0Pp0:[?\VCam2=hFZHV2$hH))u/;BkaQk.f^\&jnYpL9(X!;W/nYcoGOAU+`#RI2Ymh78Xpaq>\([Yd8+L91mcIY/))9FhtpgUT)H@Gj2Ol/gYkcnZJ#(#rbd'JT:u6%D2&HeFUXGBrHDQ"L'a?(NhMj`B-\oZK:.GeXF?D3ff]3j6k;/stJ"H1<]T1\fj5@%Oe#M[%2Nk?mIs>JG^Zd_.D-j].f'W]r:JlFfP,HMu)k,=XgSm=eX=oH3qmB;ZeF)!c:IJ&(e7N-TIA4bH78;S_8/jYu)Fp\LA++$+Mr^X>7CM_DiZG24Jc0"nFF^^"cA25&Bi2%O>+-1dS$IQK%[C&,Cka96nq)sX3e&q,M59?8#/LQ+KM9+pDWSenqOo2blq$`\;7T)%plYY@"SO7AH_s1MgN"WhcHOUskb[IIG"Xjkh%Pq.dWc[@+XTqY?K@[_;$aV^?^KV5l)A5""hWIC3b1BrAGcnFI%h.fI/uR^MJ+?I_/kpV4\:ZtTK]VdCFGlD=+L%%F_B4lMX&A,l2&he+YCgote)GM2?BZg'?BQC%$)ajhJqI"'(N2fu[,c%V^tCu%#sKJ'r+1NBVtTjt47N>i#(=J3T4FqC'0#'12u2&I3HCp*V_5kV4M#T8@H$W;1L>Oj\Z%A_%ib$(!,oM-gM?s*rt^@B\9VGPQa@]+=.=ECmFuiVe)hkCs(/+/.\P*ajYo_T.d]"p5FgDd2K.EV@*H.Zq[]&'\BXb(>hJT3%3%6EgpG%*)#a6%c';Wh?#aVSF4[SlY,LRB\FELXX4[6jYa.LtdgE`g`6Y^o2?CB_86\])ZQm[@BWFn/*e^7V[0CR!l>1BP'b\JXQIQp2rYCFu9P$t!!YK]2;48KGtr3nV_2@:LPigJmY^>6J8n)Jndd'1Xf#7hSOHDk?2cS0]Poq"-nI$Xf5Jme3gCoEE/9Cs*r/g5#[*&dX%/kMQPq-R[Jhj[.lCX2jt:##WBG/L,jl&^!cdbgNJS"ogm*;eiOIKLZGgW@s_#&Ks8\c+Me%kR_WJS*4aS%cdqbEI+El"]hY[Unb_ZfQRXddu_'$Ks9f\ZscIBeNK^qGc0]W:Jn@H0m8q2YHN5AG&9WVtn80'3guN8_s4pqVV1Cs8UFfI&Pt)p!5AifmuL[[_AD5V1")oQS,PhY[b_Vj%jRPpDF_u?>=@8V;B_^Y24@3cDo2eBmGuX1;SBn%*-66i2lP<])+\[Z?[5;hU'``S2f)b^A^^-8[a&%%3%7(qr8noQ`i62e?7QeW\1c^>.lh"jf*`J,-*($+E-BAWZW.,"rlj&mh1&'W(Y2M22@/TK1cj?7fF3Y!M=he#J'\:K01M9(A8)ZmqL:Ym=L%Mr+fd4`.9nhs&D?=q@#:38)GWh$rN@Q2/3U?I0Q#`cAh`TEq,=SXkIpoAXtXP`]7jWri,+2Uk7S-2J$IQ]O(>%NBg#QR'icM';s#J-5);!r<<`e48CBq@$5fO>Ub_)gqpW,gHjU+oq[o"6uogq@#:38)GWh$rN@Q2/3U?I0Q#`c4,US!<@WPlDk!_$oZU*h^/+-;4!A%C(;22#+$U\%>c9M/)Uq+8pKj!Jq-'<#lm5uWNQZm1Y>MGI@'.R6sW.1W&\\d)-i=a2tF`)--K>r\Zg.WPKll#HP8!V]4CT'Faa)sII3#538Zsr,HMs$Ok.f0VTo`sA+klnG\_cO/8eMl$\h]hSD-i3S@f=9?_]a!gQh!NuUC\GEu>h5`ph'NTV3j3nVrbL)fpTB#Ebus5=^VZL6p!7;-@*nC+H[eRIg.uHB4R'68k%?&(pO`G>'`84,de0Ko6tYjB`1e=2'e%#I=<1O,5s*%2^\Cm5mWj5i4CmO[-n\GNINkF867lR,JTWG_YMDpFldDr:OoX4L[)6dH-hF1'o8n;k#+qp&>cju7/1TuZPE-f($_ZNC2)q7eBb7\@MOqWPOZT-k9%,*0I2STo^`_8S!PYir`cgKle&2[T_j1V/q:Fi?cU]3E8WuYd_RHII__W8h0\ik3h"AWO_6"7Xn3q?W2]?;<=k*QK+7M$GDSLNe0SXbR_qUe_'OqZ,L;;'\o%=IkPX'#\21[:[XEmAbJ1#\^P1PGQosc455g86*k'5IZ2ZNYZPd-Fcc)mXC"fkFrtPQHTC+k5--K>ZFB\:S0,uY]/RE0a3csSipWpPUmXO`"K!,qAWRnYF?Y@u[H@('p%-u5EdL1;0O$:lbHJVnoq9Ibrm5k(9c^HZI]0,uHpW`B!QVkFto#h4:Wa3)*;:.[N\c'M!pn*mD]RT+FD^m1b0iuYGpOa,SBps?e;ekUj"_5PXrnEq@UEqc2bVB-"n>E$1hp9*)DuuuSnpFG6-2J$.e48CBq@$5fO>Ub_)gqpW,gMBs0%+P_kD?to9"WY1L?YpN_M.s5Ta)I\*6Yl],:IK?l=RLlZpi'kDn[K+7M$GDSLNe0SXbR_qUe_'OqZ,L;;'[!D!%B4(/U-\'>#c=\uG0O::onL";4--K=GC>(S`-:U$fS'V@PSbM9jfk]0A2]M7i(+h7FAohOI(@=?^oF(*tAtQg.S(1$8r&hl2VmfG"4@;m/:R(JQ*^3hHWdXob:Oc7)oIX:Vq=Q+`Sfq0H<;K4QPa%P:.IlF$-Hh^)PB?ip';q7JRMrj-@lUl$kG3Pk_mC4dXn:#Smq;,N.eFSY`(-E&$E?Ld_1qgM]0r87l4UBlc!dBni0)$hOoIj^rr!8?^?E$^??t#Wn0[iH&o[?E5B>gUa%fopNHfR.Y/8'3Hd!i/\Z%A_&"DOe$C$jAH!d.NG/7N=?#aVSF4[SlY,LRB\FEMAei:(`@#FKhTAfYVS,D_fBR0TR,9Iu5Dr:O)5Q:TUPFIq,R4Fc9mT;/Th#@6WbgtYNIYJ9sYOX-WG)PrE0tV8j9(O:p0=eO>^Gf#$rC3+mHVL+*;RS6OZ"ir8o@.)qD5Me);u[M,9f08G4a[3U+7qaXO^T-XGU9Q(rjEE6*rD!BB?r@k*'RW![/L#7_4N?jr!)W\4+D[^_kku8Y1pnMZcDHWqd5BRb3Lk0qt9(5pns\>g(_;Kced/AY>_XXD_C?2EUo%e#=t#lT>CQHN?fCUa8h=JnpaXNN';k'p!Iu?5"!gGAUb_)gqpW,gMDI066TGjfR6ZqIQ3Reudg@FY3,mpK#8=;:cN!r&=T5K2K$e58Tg&<*d:\9HKWJ$lf]Y-$,]R]m'FFMkM@L\/X$Ne0Sc!DVo[%4NJ/V+0?9Ykds6T+mK]G7a5A:cesu)\KOfq!!$t'I8rP)_1qgM]0r87l4UBlc!dBni0)$h+]2c(a57a'i'R\IT9VhDfXPWgqhqZRfa3YYNLs,1SJ2%3WA!-u[aH@@Lp,M4O@jq$5bGlIqWPPUgHG]_2(?(^CX?]"OMf[14;((0C2r)VX4OH=dspRsDnP+9P9N]W+J^*!q(k_,'u[OTgC++6D%#C[ZVi:RW?oZW6]:K$26JaC)iTKZ%*>&Cd]2D"jO7hETnf3W%DErRU,)O4q9e!a^G0Z/a%WABm79quIp.DH2dO5(a=;dJGmFU@-dFJ(#seaPhF0)8(bP(kH$]8S$q\1j7^*KDT\'on,%M;o2ms/dWa*uV+!fX?[7'3Xcq'&s$#[9S\+S9E<#q9#>?jb2S\bW)6X3.e)2V1mC%Hsb]l:g$M1(>OElt##Yo*dEl=os]RT'bT><3o?)+96(G&g%=!3#!aK5f4ctBSV55HnZB8F-PXAO&kkVK^oEGe;]RAeOt_imklCjH#V-T>]n@*nDK6\imNAf#VqXTiB=gYpTH^0\Cfs)E,CVk9AnG&=-83d9>e*OkYZ:p4l>B!",.2udCV%V?N)%WGaH\@q8J[.^!$BCIF*=DWn1mnk5*hq5""=ZStXT!eDJ-@)qh=h$jC.\RF*i%@@jlPS^TacdJl?-'$I6GFA;$VN-THV3A#IA3;/)$lneS+KZ;l6L3X7.nE?(m"$QM5e*"0Qm.cd6oGdS@MNt6dO_`Qc@\2`]rc9]R2o,9%Te(n@FKsjS';,C*V42)S%^?#?Z+`3U]1pDF6AHBGMTcCbE4#>g0]5%hg:*G?.F/VD]C\5&Tb"`S(X6i)"lOqIJZ8(kd(ptBt@j.$?P;hD(^9JoM]@S2J`"KZ`WhBUD4LYk"nF"NS=9I5-sE-46UtYJ*]D,he1TPX3g5+$?tqnQV5NEbk>oDP3%sp*IPXjAj>%Nc_*mKqJsEeb`;A3JYGi@2nR9$4o9Sm;k")jJ7g3&Xn8Jul1thC\*s7jM2f:GG)c5lo+]CafT`aTmJ=08rJfpZ5Aoi8a7$2+^Gh;C-2"_9ksi*Zl!AEeRLPaV^NSH-k+$^G`bQZEo!a-hoM7^?T1L-*831%?q@)ijot;\_acNK1L,3BGOpEi?2'mM'jI8Zl-eZD9g+hKH/mB"9_OB9IH.+R5,n*&R0T0SZ#*;(!IEd]FGH_F48l*TUPD[gq,/RDViIZ$RK%X\6B45g)C+"I&#d?8g8>PXhIXuH%IG,*6HIq.p5?U&hi97?XIoad>_HP:!!r9U6Bc%VSSbk9.P/N``XM$!M^F5HlRKN">:?>gl/p%j7pj"CB!c/.R3AjY[]Du*t[T8odr5=:^N2H"7]U$U,LZh#1kBXiQ:QEAnFS9Kg69Q0fEUXD=n\sLq$_P\@+8u6mZQ`p1m8W3%9YR!X-L\F+RM5PariFCb\!0LP(gcg^[Yr%m*R1Gj%+dJMS/rT>%.+"k>(QG1u.gtV;VQj`'OO$3#,;:35K2f.d3WQXMGs.&mPUoLfJOR=Ff[d`NN2I!At5-r^<2dLh,p#^oV/hRGI8,r5Qpmm(1:Y4)[_pKQ]XT,sEB$t>]^O*f0)O%&Bn1ILbrfqB1p%+)5IH.+R5,n*&R7B1@1dCDX*c9]V>bDd2/Cg54jI,eQ?`Ek[7Q;Mrg)I!IqA:uL=8n9SbdiLbn1jOD-Kk7;/'$eI0R%$2NRb7LS+R?cKSQADG+&Sn,Y?+I1O5R0E!3iqHqc;-h[?SVS2K!pWlIHT>B9;>4riX96X%4!EXKY-1TMl]C($P#q[Vfkl&tHKJ0n6L'WnH%np][X-/=0jFG1s7,W0ED65o7B_YlVe`,WL\DV2JP]A0I5TWItuWLmfo=+%G`)L4j1+ThoXpV*a2J.VBR!IY.klD*e\I>4[na;QpkNBVtf''G!;Oho6Oke`?]S#t8]9j>hqd?">'l_Q,U2Lk,*n''@$h"W=15F^A>0KU``q\d-*YfZooL6h"03qD5aqtBFWnDhiU5IlV2Pe")Fl])-Y`pMZ5^hh'hhr6k@j@I`FQ]gD_VKR_(B1kD1]489rnbT_hiB["g;M;bUm<$K^dJ4<2doC,iDm4&IHf:kFqsF?r-K(j-bj>tJ*ZJ^k1QkCZgQNdHCj$n$NH=WIPYEQNa:N!S%.jGJOqe3.'_*+Ss7oK?N/]KPI@!XAS!5JBOUVX#7hT>=5]gu?-Q/Fj2q-Im5(Pb8cA*jW,uRV.V%mn+9$!0Ui"k0r31*H[p/adpY[+p`j*rU6b:aSdQW:`?jZ*X^/D-Wdm9c%JA+mM*=;V-"N"(_a^97-&H\1U<$_S#P>r5'3guNM:k;k^\:%_J!rUs:r0@#T@:$dq#cD21jcUZ5(g+_gNKnX1g@E,DsB.5]dp;RIc@>>RfgCpenjeIo-AJDoeq.pn*^XO8*P$jh>Z#)]^kpCo6u,`0C,-Jg?G`aKC7U&fDcH_9,QsDC\F7@\kJXlUAmISPJ3Z_D20Xj4g*K!-@M)1fuBod9+YHX\^3IcnL$8pf=9A%rJ'ap\%g@$G.Fm0jCp7N4BYIVI>4M2?;c7\T5J1fO\AG^X',tnPXG/GmZM'\?#@0K1IPM8eu1TFoGLns3&`+?X9"V>?YT4griZVJc$n[g:YmHmP(((JH*2,\SjlH//m,V3l9YJ]9mp#,T>?9Ykds6T+mK]G7a5A:cesu)\KOhG3jVu'Zes./pHFsh-%-!I8-NMDeZ%0%gT>o&cbf_oU:r+McX9+goNe3;&9S:^UZSf.B5gH%glNp^>#E\`j(^GbeZP,9%?MXq5""UR6^[Z+7L/u*V7nFPcX9+goNe3;&9S:^UZSf.B5gH%glNos!!#!O^+,f%?pfA7?)#XVFU;3Gk-36GE(T'EO=1_A!'$Xc.\P*q6[eT4UcOb4*=ek,`d:[DiinTVD&c_nkTY;nKcX9+goNe3;&9S:^UZSf.B5gH%grP6p>@5bA\69>Zmq@"9%A7TCgWT0-A!/R+,=VXmTI0LYUU[JhDL8[bd)E!;05(cK@k=2$W):3"uq9A39oiiD;X22C?)]Vo_!'mXHaf;#fkVLjf++9L>1IPM8eu1TFoGLns3&gE(aFHIl*IW\O(c8n$Ur77E!!'r3Su`:!NBVt(p!Iu?5"!gGARpf70pF&dJnh(,?pfA7?)#XVFU;3Gk-36GE(T'EaHIhDHP6AZ6nV89"k?)7_1qgM]0r87l4UBlc!dBni0)$hOXESplSB7ChUAE;gB@s$\M"6hJ@N^bce40I>3?Yj6G-0f'V&&jlPTd'F"P&XQ7:!^]o2k)sX3e&q,M59?8#/LQ+KM9+pEB7$.HL^]F+.!IY.klD*e\I>4[na;QpkNBVtf''G!;OT5Bs!VKFnI0LYUU[JhDL8[bd)E!;05(cK@kCuBe!!'e8oi2$@"rlj&mo"'#%#!-+jQ`j5T-6H0?g$oL'F=a>*)KuWctBSV55Ho%H%r7ja;QpkNR'Dj,]R]m'F=a>*)KuWctBSV55HnZB8F-PXAO&kkVK^oEGgG/A@auK!<<,jQGh2t!.>%jlD*e\I>4[na;QpkNBVtf''D`/7?3usSN[,U!(%rs/ck/lfMEZsd,@3Ge=*>`q'*kVE2=!0>(H,li>t)sX3e&q,M59?8#/LQ+KM9+pClI0KZOi/q-Q"JF(K6[eT4Uj81\$JctBSV55HnZB8F-PXAO&kkVK^oEGj-9!!!!?M5?9Ykds6T+mK]G7a5A:cesu)\Nuhg!!%6hQ7`4%1Y>MGI@'.R6sW.1W&\\d)-i=a2aT""o`^nHX4;_a!rr1IPM8eu1TFoGLns3&`+?"98E3W36Ql1Y>MGI@'.R6sW.1W&\\d)-i=a2^F7`!!!M-Y6sJLfMEZsd,@3Ge=*>`q'*,`2^)!"Ps2$Ks:u:`k+PkVGV46Ir(qD"JTMOuPBGM?EnZ%]HQ1IPM8eu1TFoGLns3&`+?"98E3W36Ql1Y>MGI@'.R6sW.1W&\\d)-i=a2_9k<(d%/]e!bLLftY244BEg0!.[U2/6r>(B<\'nqC^0.Lq88@;01CR1Un]MDV,c9X)N9XVJR,#>a1Fu!!#8`,aL%`kVLjf++9L>1IPM8eu1TFoGLns3&bkUj<^/M0^%7&m#M5K!$W\nF9t4)_1qgM]0r87l4UBlc!dBni0)$hOcptB]CNsEF6;4!#64`l87LfrJ3JSpp!Iu?5"!gGAn)uiD^nBX4,pi8?!WW3tO]]0tT[."5IIpg>cOb@2e=="ieQ[Yi6NDu-3bR?r0RKDiE<#u(KHuj9!U)>l:`k+PfDu"]j'%jlD*e\4!5Y^]ZU@I9\8u,(@L&.W+jui$Q%p#*WQ0O'oAb[!;[*^e48CBG!J=FGaASqR'&$!//UIO:;(8qDXCY7?Cn3\!!#80,aL%`kVLjf++9L.!o#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k+PfDu"]j',"Of!8rD(Wdm9c%JA+mM&d-=2Vr!G,c5@6+oq[o"6uogq@#:38)GV95X@H1W/5[qG?Fp&kusfP!!(r-qPo'0K+7M$GDR=O&2rBV!@4OXM';s#J-5);!r<<`e48CBG!J=FGaASqR'%`m"98E3W36Ql1Y>MGI@&Re!Fb"o(-l??Q7*@G!'$Xc.\P*q6[eT4@L!$hNH\M*Mo#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k+PfDu"]j',"Of!8rD(Wdm9c%JA+mM&d-=2Vr!G,c5@6+oq[o"6uogq@#:38)GV95X@H1W/5[qG?Fp&kusfP!!(r-qPo'0K+7M$GDR=O&2rBV!@4OXM';s#J-5);!r<<`e48CBG!J=FGaASqR'%`m"98E3W36Ql1Y>MGI@&Re!Fb"o(-l??Q7*@G!'$Xc.\P*q6[eT4@L!$hNH\M*Mo#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k+PfDu"]j',"Of!8rD(Wdm9c%JA+mM&d-=2Vr!G,c5@6+oq[o"6uogq@#:38)GV95X@H1W/5[qG?Fp&kusfP!!(r-qPo'0K+7M$GDR=O&2rBV!@4OXM';s#J-5);!r<<`e48CBG!J=FGaASqR'%`m"98E3W36Ql1Y>MGI@&Re!Fb"o(-l??Q7*@G!'$Xc.\P*q6[eT4@L!$hNH\M*Mo#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k+PfDu"]j',"Of!8rD(Wdm9c%JA+mM&d-=2Vr!G,c5@6+oq[o"6uogq@#:38)GV95X@H1W/5[qG?Fp&kusfP!!(r-qPo'0K+7M$GDR=O&2rBV!@4OXM';s#J-5);!r<<`e48CBG!J=FGaASqR'%`m"98E3W36Ql1Y>MGI@&Re!Fb"o(-l??Q7*@G!'$Xc.\P*q6[eT4@L!$hNH\M*Mo#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k+PfDu"]j',"Of!8rD(Wdm9c%JA+mM&d-=2Vr!G,c5@6+oq[o"6uogq@#:38)GV95X@H1W/5[qG?Fp&kusfP!!(r-qPo'0K+7M$GDR=O&2rBV!@4OXM';s#J-5);!r<<`e48CBG!J=FGaASqR'%`m"98E3W36Ql1Y>MGI@&Re!Fb"o(-l??Q7*@G!'$Xc.\P*q6[eT4@L!$hNH\M*Mo#\7\s=`W!!#!O^+,f%?pfA7?"+$AKT11Y!/]rDU.>7ai.1[(J3JSpp!Iu?*=rc?hIQ^5VJD#4!<@WPlDk!_$oZU*h^*G25hL=J"d#+S-&Mg*!"Ps2$Ks:u:`k,+fE;66iVaKb@_.jR&c_nkTY;nKcX9+goGoab+LXU%(jL+%8Rf8s-kZL[32!u8T[."5IIncCD28H@3D@q@CB5's[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO?0AZ;s#'dN&oB0iYg[a(&Ro3p,+Wo3/eW"P7hDpOZ#g:;T>?9YkQ=(D85.XG.PgSn2+^J!7POCm/]kn0j$\cPIn^PSN=eS&8M"-KctBSV55G6j',&c::5Y!X>>8"ZeHeXYT-\cPXA5S4\()`]=cFOHZ#g:;T>?9YkQ=(D85.Y/77P"b-L$]P#Y)Ol-$c'j:Sc&je0J>"41c_t,aL%`kVLjf++4-F$&Rp#ZH1+rdNgePNaUpp=<`kW:Sc(@dNge1o/pJN@d+MU5(a=;d0G2hOI3381Xtbj3J*B3@#7:O4HUiF8!Dl`bk$W*M5Z+Yd9OB;k>,(r=;&Y!aZ=-W9"eBTbre4k1cX,aL%`kVLjf++4-F$&Ro85!t<*^^*EDFX9?\30>EB6'Fu?mAV/3,-c4r5bGlIqWJ#H9Lqk/oGMCk!_+m7XXauU^kid$%[ppkC/=MY'oAb[!;[*^e41S\@R=P8VU&*!'/5$#DdA2r!`#Q4GL.V!<-tW8X@OmJ!mkSaTg&;Q&/,]*Fj95.CbOXXC?tl8['5TlNM_joeXl%<.hYLA!;%.FW/j+B`.Z'NmBY'BUi;OtZc.\1ICj^XL^!8Fc\-a=[iR_RA5DI+YBFe#[;bic-4d3Ma#sg=In--II@jsHpDa&UPa.MNg:Zg,=5LOZL>GM2QBr[R:ip[$]'j!PrLGRsqkj@okM+PQ&eA;jYdi+Zc#Ido@2r!C/G8J!cEQOO&7h1k-/M=*V])0S7T9[c9T[//DP$#9uT[."5IImO_-7#I(pO.d_="c7o:Oi26D$Q,=I%FO4@FD:XB0tLQY"g]n2;0qpJa;IJ3hjpASJ!q=a1N8[i#OIBPg:7sqjdZ2*Rkm5o7SF`5^S#3Xaklc_LVqdNuYqt*#81Up!ckVIUnUs(sP'5nmRld!?T#4K9Ug4>ZA06QcooGJ2j&kePkoGMJDO$3Q^KZ%sQ5IVZg=6Zje4lNP$5O:)U]Wq12C@iB507%R9`g-GD8i@^BF2oXa]UO@1A^Ir`+0GKMBCXqJk29_cci<7jHb>hs5%WY^Mrq.q]=mE)ffs\.hu<#`X#sQ`T>CQ;`M"OHbR9p+9LXRqk4fq`e"t%7k6+_>c()iUZQa>IRCWiO-TEoGd83qt775%Mfk!gq7dZk]-StFm[TFmFh*?DVJ#l>%VYumePHems9?GeiWDBPs=j9bdiYG?>^g"=5iSF-Tn$.Q`mcZ%*P"prDiI=b0%l8n(;2Xf^8g6Uu#`tGl+Y]ji8G.jtT('F9A+]\+n-b%NQt#=M)!=NcFs/S'L8"3,O-7pH-NUbDom.aD46,BW4.Jk5>W7c7NA;Xh;0N@d/)lIlI4Z`;<5q>Q"\R^=i2t[DF2`+_U=B0s?J]8uo'q@EUpo4@o)-MjONL.m'7q^=nb*rWa'msX,V`,7hT,oN"gs$L;?K`aaKT:PQ$d#jCb?YU2N*#"r5^]W,;5/XVh#J?*Sptl"UZpE%^uFaH]S09_*>PM@:GkF]:3g.JE2^)GFqB44*K\+qA"=#lgi-R9TD7301Ak^LHYh2MT!ph!.>%jlD"ji0d/8W8+f$,-09n_mG0sH_5sI$J]u[-)8,A:ER,*`*q$n5A,Cb!Cq%$[XMh`?H!Kg8S)9k'h,JKp/G#V_h=P(7q`OB0gFN#74`I@LIuYUfrq?&H?8NH.*rbnr:O<"(mj>6ai&ttXVQW0'n@3blBCM-+3j`VE[MN;ARIiY(fm]Ndb!&2U/j6,IoYuV[>=qNemji4_g\s\>amiBf47>5r$H23SucSJPs*"tsPGb>u%B/$l8kak:N/c'R'=\7;]?_uMKgm>O/^MiDPIhUeE$]^c*o=lc%BZ>TqC\Br(i:e,%]+pZ5UcrJOmoD:0oC)[oo`[QjGiU?86_=C)7:PKoJ3JSpp!F"pR#m]<,Q,63i*65._Hgr,fQjj8hp7Cq6VmH%L0r8S]ZSPV<7tpR%Y!>4Bp2UgrR^g.':+,_rqYfEeQ%!giQ%Q?5((FeUh'81H.$=rpU^s8hp8NLgTfWUZ2B'*h\R8Z,tgj&mi4="F-iJ>k'_(F\ST6oSZ;HI_m,g`.kA7&qHg-3Oll6DRJoag5!rnRB?9_4-=(ri)`"/G05o20%dnbF+lgm)Uj\o)d:_stDXd)bA%VH0G>Hk`\;O/]4@AS8O$3#rZAM,b.QL8dT4^^^%qKoqq@(^pZ#g:;T>?9YkQ=(D85.W\fOt!J$$Vfn])VLOIeEX;3U&?tc\-c(f-Vbl5Jt>Yhkbcd6\?7$*aeho@kVnKcmER!]'>]K`0G7GV\s1O8,]a*6_)'4)$=APgX@.EX_L\2NEieMs&I_@nLcg^Dl/f6=S]_k;h77H*"%s@a=q[1'pG\go'rcR(?h>2<0A'gU@TCY5NOKQokq2_?;1Se'7i@tSmp[Gg+5O1OEeC?M7H/CuMR4F2R9>$9N^iN3GIYMqTqt?Q:]C=B!p/P'34]#C'hS$N7GOaPa1]2._Z0un!h#*pJ]r+Rom@Ja2,Z)?gZXqiU&"ul8/A,BDXg!jMTfM7>3$Vn#ZQClR.(kA[T(Jd7Y]KhRr-hU!f3Q[LW5ileW3ds5(]SMr-IS>C?4mGP_`FJ+NC]YE#U`I0RT*KSt]tY5<+sbC>rAJ(6flq[B%-oR)#Zr;?kXp?t68jhaIK#Y4p$cg^(upQhpdAN&\?2K/K1QtQ?WFR@K%guSJIL\F%0gRSG%#P8lhs,hDOL.WutV#EW68#FT4+VIG7!;%.FW/j+B`.Z'NmBY&',"]QU6aP*B]WonX?>V+Ugb$oZU**rob:@_/G_:u`3CJrsuD8VWqb:hAiH<1.JsonX?>V+Ugb$oZU**rob:@_/G_:u`3CJrsuD8VWqb:hAiH<1.JsonX?>V+Ugb$oZU**rob:@_/G_:u`3CJrsuDM,47KUr[c,,a22SW^j-]/6r>(B<\'nq>_'?'%8^dL)Q\7&WD,'8q[gr,"94u-CL[`;a"SY@d+MU5(a=;d0G2hOI3381Xu1&N*t^N=!ElZ'.NJm1s%#nT'?n<&kePkoGMJDO$3Q^KZ%tL=_-T_BG-gb7kjMi/!3Af-W9#pBG);SGoj47Z#g:;T>?9YkQ=(D85.Y-)/=>p*5T]TYXB[8Sk,"4UIfE@k'=n&`6oq3I0LYUUCR>Z+Yd9W(E*$LR\WT2,8g4tQK3`ebE*[[JJ=)C('*P?>C!T[."5IImO_-7#JSg_Le'rgHrL@,r82OsdLsOWr[i'?^tUCe60`!mkSaTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSV55G6j',&d%7$.HL^]F+.!IY.klD"ji0d/8W9,%[4!$"gB(!pTtTg&;Q&/,]*[7$,W!5JX.<<7LP)sX1/!&5WO>tYk_'?'%=6VOT5Bs!VKFnI0LYUUCR>Z+Yd7q'F=a>*)KuWctBSYIKBL7N@-P[$^D&!!('QcecYO^/Cf8l!!$alTnusO;ucn0OrCPGT[.#L#+Pkt:fGJ1d;fBm!.Z&h)(Paa$oq0@:'L]s@72JUdBWcQJ>F0j#,';(.lHIR!.^M(H6V[E\5CJ8+1+,Oc3]@%(<6^eiCW<[\!!$$!H2l9ic]E5)8O<\+,cX6is+_cg(R#Cs#U*V(lK(M'd:WFZz\O)nhz!9=K8"onW'!!&*2oGIW/!!!!aY0^e]z!4bFg!<<*"!!)'eI0KZO!!!"\/+a\Zz5d&IHz!!'PrT)eol!!!#[$@N*YzO=Tr@z!'m^6B)ho3!!!#06D"8Yzj9g;>z!0A`')#sX:!!#9ect<=Yz\O)nhz!9=K8"onW'!!&*2oGIW/!!!!aY0^e]z!4bFg!<<*"!!)'eI0KZO!!!"\/+a\Zz5d&IHz!!'PrT)eol!!!#[$@N*YzO=Tr@z!'m^6B)ho3!!!#06D"8Yzj9g;>z!0A`')#sX:!!#9ect<=Yz\O)nhz!9=K8"onW'!!&*2oGIW/!!!!aY0^e]z!4bFg!<<*"!!)'eI0KZO!!!"\/+a\Zz5d&IHz!!'PrT)eol!!!#[$@N*YzO=Tr@z!'m^6B)ho3!!!#06D"8Yzj9g;>z!0A`')#sX:!!#9ect<=Yz\PcB'%($oQzE3'7&)<`jVzi#$kHz!0A]g]?`aC!<<*"!!$YHI$9+^!rr<$!!$oTUrblo!<<*"!!!8`dq>?(z!'mJleR\/R%B*Vlj&_JV`j,6.]D!!#7n&a'Wk@]P(+2?3^W!!#i4rm!Rq4ap_VIp!%#KFgHU+bUDiGp;.n'1)sJKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgHU+bUCn#U+j463n`f&4-XGKFgI@cL_&<$5apK~>endstream +endobj +10 0 obj +<< +/Contents 51 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.341988d5426d9f1d9b0cc1a0fa827541 8 0 R /FormXob.5489e45b0df84801643005d75ef45612 9 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +11 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 900 /Length 93885 /Subtype /Image + /Type /XObject /Width 1400 +>> +stream +Gb",kKmOM8gP>e;hS/AYMF.Z4huj>R;CLu$mdBL)Kr(]+qe?#R!JEk'NQGSp-RXSP1rR@0c5XF^M[;B?m#-2EUO.FsLXr4=L:2zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!$EF;?G7?PYP'&!qUt2p#jAYA89h,+iXG*:FDMQtA2F;e!!!#WX('b^F`HjAn`.ZgW)qSggfhC/;r^na;J"/:?24V+?XBXAcW>/>kfH`--VpAJHP[V7oBu.4V_V6tA^8/(h>7[4>e935YGBe.1B7CT!!!!E"]%=78LI9(c!.!<(ZkNVaQh/kR'C*5'n5j?oJqIBR5Sg5q>#q>le/ROa\(_+)*S-&z5Z4iN1PfrIGrJZ8iP_%Ccens-)k!"qg)r:32SlAEcesW,"98E%!!)Kn-D-u\ZOSHJ,cju.?A##I?5])iSb2MdYHY?beh>Ip$RXM?.HC@?#nfC$FjlYI8Sj_@6GlD7f0+9=I#\8>XB/!COKI3?ffJ`]"%Rr`HkLWNFp_q]#No=!p35-4n(u$DRP/H<7((a(P5tX`!!!#7'40QT@17k3=D1a/_SWfc.[@@nDU-24cMXXGO;]OjDRRC]7&;F&S%`iC"tU>mc(DFIHr\F,c4>Z'[f\NH(LQAitCT4\CT#Q1ctFOP[K(2hnQALUg;DQmISF"z!8nWRc[j=/juJO`-I:0lRXuOd@4'?B\r9OQA1ZNrAn-FIi0!OV>&p7q+BcZ05$/3]Cm:T;1H&<:pG#KYuJR]#q2Tjs'>I.6@)^=L98Pg[ab/$locNqq#c;_76H4i6ck5SY4MX8c83`$`n\_jS3H/!aBg2AR,*/Q5t;!NLRC/l>NR*(B(huD'b773,PSB7Z@9kb[8#![G*8[Z!A-@b+)6/m5Ra1%,7TN-hjD^nMu\bb>^:#DL='iG>lTBc3RkEcFjud'3dh^d2Y;XL2j>H_o$*b/jlG2Bu`n+O'_PdYuE#u6K3Gak;D-P;bQA1)%J790((4P[L1^t_B%-1%X2UN)_R@E-N<%iitW?UVVm:tiFd9CK^:U;DffR+NIAN>fu9S+Z5Si%p+@)h6'!e75/B:,>rDYJ:(Z=g5!HaEl[F"DQ;qbMf3D/M=nipFb$AH%pa>Tjm[aEu$BlaVGKY64.^:por/0P;n9)mG)>ZPW;fB@i\a[mpTI9nei'E6]9@IGOVPNXe;1QN,+][=PL?-l&)l?Bsmsf!rr<$!!%NU:HjD!Ofr+^hmdrYc%aJ;gN54T-7M.gFtR(2m\tT'5/Xo=Q]6po'J==*N:@43G(S;,YYn8h7C[3$MR02[Z;=naIeEP3:H;^Wn$]IX"/_t^8f0(8*P2j/.E3`#>'HF?WfJ2c[2rJSgLV&_jAm:Ic'l9*prTk^Mu8hU/mXa@+on!'6^Z-pg-Tfc@TW`L.`t4s#=>X7-+l-ClaQus,43sh8V#rkHu8/hb;;YN2l;5FG%i:7Y,/OEKkFe7M]Dq$ctpOO7]c&c'jSPO_]m(g#3NK6K2[3LU9N$p/Y$:J.[OF#!^q!!!#7=,p((#1p?Wfu`AXT0XX:>-3Nr,ZL"1IeUQDDr/4Y/,o4n?_Lo);n?5JDQPP)#:HqbKM"*?l^[G$^FrTd[dfn#``ikQ924rnNqPh&HXemO3I4F1H(Qk+P$em5W^<^30CqPT&fSMEX9/\poERB`u$VeB+$[i5=3dCG0`)bFS[k(d]>*ds_dprd.=1$EBq+H_5(+WH2V0]hJiK\n*c%#HcJpMAJu]Y1O)tgMb;,o(a%NVK@QZ"s%K,?V*Fk3I]oTmX6o^BYGc=du/53-S/K9X*TD*I8Xm\T$)r/N]0K/djeT@DSa$GOJ2WmdhT#9"N=k9V8`.k2s%si*?eo.quTC_l_e1Ip][!qkW[?5+`5`z!,ceHcQLG=]Y\NAA3XaUpuk;K9!sXi9)Kb#r'd>HYXJ9q_M[5/QjT@qBXnq-gTX,Ea%r:QWhe$Tn?-%44F[rW?'ORDea%o]<\^_Di/jeW'"2H1+kI,E5(#3Ck26oF+\cqT2&eHcDXQ>m=OZE>cer(<'-,8??2M<]p"F9GLn6eg0UW>@Bshk,!rr<$!!%ORSEMc)b+,Z]TM[(3SW/MQAc.Bc#H_^H(AOk(1Pu)VBTfUo=iBq++$R>c)ftKI_d.U"9&phR_p//EP1XQcaK7Pt8@CHqhnFU??D>(_f5Bq-N%8Y8_7LW>)9o7.M@UR^EUWnE:S'b6RRkO2+$Gac.m<%g5mg1t[1=Vezzzzzzzzzzzzzzzzzzz!!%PuflQ(rTi++'p1jAm5pI`L+#a,!lCr.-%i$U%o5ed)\%VEZgQJ*%E2!C6zplFDLC+WT!rp]H!>B_+S4(MTNODmuUD2*g,mb>;@W%e9/rMqAJY3(>4CQ=oE[s?$nk3[Iu(Z)"7YdoZnl$m7Ze%^$pG"c]_GRE=dCu0'0bUjSYih2Jg!Jf>6^X(L%^K7J[FLm=YVYBCHCY"onW'!!!:P_MVE\fK=$%!j7G,@%[/9idHSXDV;;0C>G1)j28cp4U,i[ZMX.]F&Q^'dVDF#Vk/Me+PhPB<6B^N^);!X9$)tASbnlToi.P0/([uV("-V!4*KmUZ#Y?7Q$&P&+$XnndZkdD^J\)-OLId"KtjdQ9)cPIO!M<=A:Y@n>#[c<^TCDqqY]kfF3B-i[)C<)ooY1em8!.C?b>uu=-^_Kp;bPqA,Z?@=kri!LTsle!bg^'2VHNZ"hR'O>DAt+\>.&7+lWAN!@>1U/\R!B\T-g\Pc!InHV+[#[/L)j4hFlA>>"hmkeSr-U!WW3#!!"8`&m%\A13h=0r5F-_+XjNhQd;_aD]LcJ[Y-G^$eFOZ$ESuCS)0r8pV'#7l$p`JSKm5en317T`(W1K<3G'DaN=$Bb187H;Y"YX[]fFu0bVmcC=H8cA32u-nAk6N*P)dR[#(%I7aMmM2j21HY$\9Hi?q=McGqu<8qQt68RdU\ocIlM--VSV7+:^:7%3Lig")e5LjVE=*,I:"KuI"JSs/GcfQ8Fe[6KFN/En$\U4@]HpoPW>FN%e.3ZIN:2h4t[k780O\EG6KcE0s5oD4O_qbQXQ`O0,\tAYm?*@lp2HGnM4U6q/_Q2:,IIc`92:`O+XDhAi:MUj6,L&>mm#:"i_;2ign?.10>/YM)g$QKVYoN%/,M5b6.-T4.N)l09Dl?$[%3M4T)!M&BsO>:(HCD;$-6Z><_EgSe-(iY?3"5aOMk^WJZVlC:-b-CH>dU-e6qLJR3u%*Vkad\b?pAEA+DqE/U]D5D$?@6=0&ee,0@c_*@@f)0+-..t,V[fM\)bV*4uRVY=BYZ8_-';j$^(^6E'9l/X.0Rp>LNFNZ/]%XSu#B^LCGCo.j]5=OFM.Glt@G0r'eNH!ZC,XbNo0CIn-\kgrZei'eq^,9PAZTH\l^n#c_/_Ea(-QJ2,u8$+1MIbj_mdohl0i6$MJ@=c;qN%T8'"F-]Gu9/U6cBp9a4(G/j(0a\\EgTk=]5IU#BETWF!RYjIlZ+5P9936"5rnAbK/UdO#oHR_OnS7kRId.p7@p&K3hR'O>Y)P<"p"4c6g7j?SWoRkG;ccZhH%(P:"%SBDd@bdJ!Q-:nB]!UB[(.3'%'n`mlc=C@W0YtQZ\JS^zHnK.mDC;,M9$]^hHhJ?VpK0X#p[-USfGOOTrcQEB;3N<'Zd+ae>JZM906chAFSb>M.Rdf$q00m9,:PeU#]?`>kr3LLf/'?q',2rue,":^$Ip)4gp3hNT4'52aN=%a_TT"+&q8R,)5R:Vm5o'qPJqh^4S[.!bDi^4&_e?AW*6=D-FEfD.?4TB`kP139-g7TD3@,O9'pIV9$UqE0%fe6UmGW2_4r>ic!)Abmc$spFDp!7YNq'l'\rDa+;NX\pf.6%Pqn#GGO.'Zb_9gZT:oHeYh&3V??Lg$XEdV[jk6VsK"'NNB%7C8W!F$ig8-!!)LkOFX06Z]5[)8.`9-^i>4soqh,N@AP:>gjeCLnL8O9nei](h7<",f^6,tM:OG&s-*rU_bdDDu"Z8r`sa,g:)Z[=@]R[A4eqd*-dY-I&cA4[[Be(CE_)pDuF?N1Km)KTiPhl;@'#[jg?EL3Vq7RGIb$NL]LEeAUE(UrufCmuVP$p)TD\5L9:.DoGI!R(CdG9._KRmNk"0A4)o6rbi8lfZu!2]f*cF@geX&[X.mQ2:g6*=fh%AYioNEj>9lYm96Z2lBJtR?^\6H_cCp[L%TWFNi^4C19@O-cN!qFzi,9A^?.6Glcd,o,z!!!"<-nX0I.Tn/2d(#U+j463naq/)`9,KFgHU+bUCnaB-5k5R8Nd&4-XGKTNBjc[ZQn#U+j463n`A$(o&0CY*L%p`W3"D43#TJoYDJ>GOU93dh6m3-X>E`OZR%4WZV,Eg\"bAdld7/'?btQ"l6p4%[j`Xn(W!gNa0nenNo32Xu3MO>NAHjU!S?Z[T7FZf]A5\,X,<6`*[[P@A+(`4g_>>kdF7$ZnPP:7CTVH]?adA\0SadZpk).B7^MVQ-0TdUmpt,18>9T7OoQ[a(JZR$;H%q69i!,1CB+Vb>KM$dE%[H.sqV%j*Z@rk-MMq:5X_1jr\uD*)q,!e9+?c+#0+T#)s?D/ep(+$]&_I0U8J4fQ0Cosi2%sl`^8"JMMjC>YZ66fD%o<(hY?n8fEc&EV:NCKYQ52#K+Xn?c.\ItaT.%P/3-tK:SN2POfB\Hb0\))]-C`>C`-V9g10uIdo&Y@!AQAsE*&^uu9B^+1ht%X;lUBh\cd:p;T0,ho*NWi21TXaZ];14KXJGiBe`s"+pY(-*Q`d:*9%E7.`,F+8$,Gj-Usl[[;RpBAe'br,&*XNtRPlZF)`$^%p)2@rr:ogBWAE`.L6pKUd[;R@5(imrO/Z-XA49L+fug^Eii4jTN,e0rKhM*5ReB_iK>gDmX]_JY4;QHK`02\EHjNAs:Gj*4'SR9+3op$p"$j\#0&41C3$nehFB9n`6]r:smOZNHW_ajRTZ+oaFLlKrCjKkZG?cr"0\WN"-dq?q#dcJB=GOAX6l/q@t;eGqTAhRK)lMD)6jt'W/CGKY[AFE^e.c6ik\*D=7(%k;d@-JlqU/!lJWC?hYQ20j]qaoS)f%8h9-uIhL;lAq8&>-dAlIp$h5Q5*&CtcAbdh-<#JYU6glW4%U_nS2sRr:7F6k_-5+YA\QII^!E?N5rmHXn<0&qVokTQm_U:1O/*E`VpCg0FJTo9-I7Kooh&lgFP8D4[2QIZc<9YKZro2>j=aB(RRBMipE)0I4RT3i]CtOjps7BG^K#;#(Sn@#HVpBI2na]]9G)lO`=09s(R)b"AbSG@YNh3$^GCFX^S4bJu(k/WogYtQW4G17-EqS[ha\*MJce!*K:e+F,)mCW#WT>,&"WE@m4gf!r^Zf\u\MDFhoB.c#X$j[\dRtma8utjsN_ZtQK>*j+WjosfJ(%pgIJ1=E7[YG^,P_\5d>!M4?u"Q8V4Q7$Ie'kb7R):qTJ%HH`W@Vb;(VQdV+NS9ru7)Ae1KF!l#htCPgRmN,qedgJ"(;A*j3u%Q0XiZ8A:fIgdPGB`_G%Yf,Mi%UVPQ(([MQf*I4*5O.SPbl+1fHDSFGFL4R63RlX&OK(]bgSrIo@#!:jS4cA)F6(c!)a_l7ep)T]Lo(6;Kih*EQm\T4%J&n9kA(2^q_tq#7^UdGgcJFRkh;6)qr-"Y2%_W+.(mj/39s>.f.D>Qg2:WjCY!TVtFRPO**AooGT@iUI?hk*c^A:up7^Vc'Zi6P,o348l:&*eM^h,rs\GID%&4.e\L!O.iof9AKJRIN9bYX-6ZKG.8BnLK=/Q;[sT.qV+9$%b[QK$e@^h1QghmiK1L(NC5fW`a:]P:p2bG_?[]ClG_(/X*$*Aq0"]+(Y0UB%19S0N$8E8f61q2:S>Wa>_TR<-pu1;6`I`i[uFZ$G(V.cp]YB3.#R)t-Ae2gFE4B+^;05F!F(`m?ekn%%$=]6)_TRCC8sGNqT(IDM*.HJRE[L-:HNOCf7Z;*cQJUFl-Y]G0m:O*$)?.4='`S$u=Q&tlpdq_k^3i`87XDo,HEj(r'R*>9)bZ"dR8\O3hiY$75q]j]A*g"+A-s*H&LHqmY+]XVmsk."O>,.C1kB1Q!c[IhpElS`Vq(]RlFp$ZhbIb0:Ws*_4)da*\?QR.^lL"b[LA)1JObTAN\<5eCkQ`jXE;Yinm1]RE/&*hp9`2PORd3h+FlCaZ^Dr)f]\FGVsqKf:/FdosJh6dtULYdsXl8Z[5,f]^.N5l"[I1rd0B97tDF-`q59=c`:qMflpc^MIB86#ONaj.B&rCnR!X2+^8P.pf9KFgHuOG2"gP4^iAnVhJ7n?FJ5gOF^OP,Q36RG%0I;&LXWbuNOk5E8F2?7P-GjKqaK@t!=L4u6QWI'rX,'!=9DpAFqc=XQt.'KO"\c\H>lZG"DXK,QaSrp-c&<9!:0n*9(H9).FM6fTCH/F%/[mJ>E#S-;OKAfa'^e8;Rh/oFJTl(.CbCCF7Ih3b.$ng(]jJWsJ8ic?5JRic8r\<*gOC=-AN/6qI1IGqYTlUD+Q#B!go%7jH`]^QeTNf3Q]EiT=k"tuDrC=9,7ash\*b^B?lR!\QL4H#"dnZRKd3FuBoIqpoTY#i*Cj&iclchooaV0!kNO.UGSo69[#gBiuq1n?GJ7m;R1"-&Y,kt;qr>@DU:^%eaj9npH]'.KMWd!T>;f=F66h2r2,fUR.@RU9Zm#:WIo6FXOr8%>P4j.2\,RS"rHcHDOP6-^Hg%.e@.Ef,@9&A(m6Ha>C`Aa2Z-acqOI)*uFr`&+qnGA$kpookRJLY%S?g<0\*^1Y+32s=o#O+`Tkmt3h*jBb5RE2d9bkW2[7YRrObOnc_,/XkWN=@0rIfpL->DElC?UQma::b2ZD[H\u?GdYZ\2Vd7Lp[pK;qg.Ke;++t1l#R.O'),.>"B-'$KZsG55^Ih1Sk;,Z6RGCn$6]R#1+1galLh$G8;Q:fJ)\;Y2404)A%g6ULigM)#QoB2^jkOk,-3nc>ifFr91D%#\6.'$[n>"[Y\p`oSNM=$Q`sl>nhcbUaTi\d[8^GlnSO^Gb?+Z2M37ZF*-Q2&oo?R]tQ^82LN#uA1#QD^p<6u=77]+746+bTo"p^AKP^McHRi6;2t-J!&36SJ-/I1n3eGLcLJCtbnj<&.o8?h6#mbZD'plZ9(9:Jq0f"]"(r%+mqg[4YBY."VF0"'AU:VZ0AGWg]Lq$&b=[Ejrm)[!ck^63VX+VR+Rp`WS7X2X.6BM;8jdV#>QHJ0GW04(PikC"#8RV\\Mp[@cl7/H1pIF%nUAZJL_rgP6-FS$N[eGbJ]uYGNYjn:N`QM>JfKh0Rc]Y"<8KR7*a>osnq'ga#]V`.sRUge3K0"3>HMj"f%dLts6-_gkmQ](!lR-Irr:j,Rj=nEkc6s"4p"e)bEtkk8[$'r^@2f(g5>gB;s4h4XYAbA-hm`67p%''fp^HlNY(nHUOg;R66V!1$eW!XklhfZLQ)sc[e!S=f8tsX>^\K'j#E9]bfi7P)D*.F>o"Rn_Ac'b9G.+PaMAhXA)_L>hF'JdeB8HHWMKac'M2^cN/>b@Eg>$\LgT+$Wj$OlJST+1J#5Q]2J%P@>D^rRN5(bSm+$=#&:3ZS_#1lo.*-s9PX5fB)q$b"98oa_[D1<3jq'rV`'mp4=&45U((-[@BY34$Vd;P&;4KY7MSg+/sg6e6Ej''ISMUcUo;U1`f]mFu!au/2ej5qrie[WcQ*P6GRO=a8eQ#"scGS0cFm9;S^h6pg;a6nABY?i.ammuY8pTrulQ[dQNlC;4dijX%G/Wqm^M^g2WX!d)V:S1)JkVko5DB7CfCu0'VYV?c198"-$)uK-PA,Z0U3Mj+3V8`bo/*+A!p`);n^Kr1JdBeW7l%C-or"FQOjg>V_=J*EYgD;JJTbE3?*;BC,Mi3q*KU8e$)K!HAqNQhKD)u%=EDqVhre#u]O.@+DEE^aFQ!H&bp.e3O)=0:Hc4D'hjD0^/?:I@$T;&Q;eQSGH=#*2R8XtbUoo-4?/ck&i8:5:021EU\C5gI1K3T+f#:%mVENIo1Ht0&?kn276?b(JgLW7?%Y9*SFA+r/c#sRksdU^Yra4;8.Y?jep^>bu(S]95JTOiV>o]!L:L[U]\=/GW4dq@RNq>5OO0g9%&LkK%HIHYL(obm,*rStqZ`]uo=TNU$2HpuRudl#Gra1?aj]L%3-4$Ae#P3=^SDn`/Cci0f3lIU+;Zf58Q0!a,US@b^C.C7ErSk=1G-(oVij#mGmiZgPF;V`o3f1Z)0loYPpm`CWUdq0n)o;eElXeM>aSPUhg?'`Fpf1^C/,0MY+b\4//URbd9]sW?SgJ+:&dMF8>,U99OV]WQ4Z2ZD_ab>*Q`=.N6hYobVTC$3jn#_('.b2unE.u"3U*[%W+ED"L#pfCF\pB=KhBppf6#`J\['ep*P6GgN5)8@*BA:@T=[!thThj)J,T&lP%C\OQDlEP#mr7,+nNTAO4C#c;^<(18^;U>I[(i6%548-A#PoQb?9%IG$U.M5@pl_j(3T?>)N)Flau:>GkbtD[Tt/iO\JA0_hs`F4^cpEgNSU%]^QeT[QQ8B?M3heAk;qp"`b>/3H"Br8^Tc:pZt,_[(2BucaN;r>BPiH.orY"E8oB82BOMa7nNFmlo4spldn;r%?[WmYD`+I\I4`bpZS6a86Hh*1mrF,Un'DbNd`Qr@d@rqrGQC3Rn2O?J^(=T1E_>^6=71j)%cA7",Dp%1Z>1R=+BZ'+S=?_?;R]Z7>h^D#U+k_[I>%F;JP$mqrI"V>e"l%3r7+MB+Z(@D:+]1B?_IrlLjJh>sX,T63n`f&9<`J.P$Q+bUCn#U*O]T)g*g&4-XGKFgJa&j?Ca#U+j463n`fHmO.EKFgHU+bUCn#l.*f$j\#0&4-XGKFm^>n/2d(#U+j463naq/)`9,KFgHU+bUCnaB-5k5R8Nd&4-XGKTNBjc[ZQn#U+j463n`A$(h5AKFgHU+bUCn^(NU363n`f&4-XGKR>(n#)!OS#U+j464!BZp^@EOKFgHU+bUEtQ1,Y&63n`f&4-XGj=B1F,dZo'HjTiRn@9'"8^ajOIf]TMJ:0WUTf]f=c]Du>!_t9Y64!BZ%Qu5=PGOZ!%fcS0@%XXID89dT*]`b$&g;pi^ZDPl!tGD5!'jHWHE7Y)>pDJ4C^bb+V^:NbbGA+!rr=O5JUoN,5;QP+bZA^^cZAi1B7CTp]GmJ-\BZp&44H@$I#7L4p(cbJ3Uh^E$G&c#U+kkV8,3.i%k?5!;HYD"t,#KJ.P&g=UNBJ#!N+h!.[;LB5f'i$j\#0S>F"`C>^lJ!!)crHj1sMc[ZQnaB8koUBWma!!%O6^h7U1p^@EOKUemS4DNe1!!!#o"+1;#K$SrY6HE::bbGA+!rr=O5JUoN,5;QP+bZA^^cZAi1B7CTp]GmJ-\BZp&44H@$I#7L4p(cbJ3Uh^E$G&c#U+kkV8,3.i%k?5!;HYD"t,#KJ.P&g=UNBJ#!N+h!.[;LB5f'i$j\#0S>F"`C>^lJ!!)crHj1sMc[ZQnaB8koUBWma!!%O6^h7U1p^@EOKUemS4DNe1!!!#o"+1;#K$SrY6HE::bbGA+!rr=O5JUoN,5;QP+bZA^^cZAi1B7CTp]GmJ-\BZp&44H@$I#7L4p(cbJ3Uh^E$G&c#U+kkV8,3.i%k?5!;HYD"t/tQq[=(_T;VH-82u(h[%B5g+SpCfM@`,L$ig8-?Ouo?:'@14?ra+E/#dg?r^6$_G'$@h67>_-)LR8IQ`mB,Fj5D6APSL>8,f7E3cs\7lJ0A)Ib(E"[qVnGjI,V+I9?'a\Vl?2Xn"iV:fVaR=Rj_o=LY'sD43"21thI9.9E?@Y5uO9SiL_om[s4p%NR^;FJTlnZfdYij_q,UeVB0R+R,IuH1CIuXEdHR2/J[4:Z:auKVZn`.sI[bea#)`o(*j/f$t_KFY=IY;s!\A(usm[B?nt+*Ar;GWUQp1Rf(WlZrnJ6NH!^"ci1iSl6f>22(]C%$ik[;i%m>)I"m.d4p++W\^fBfM[S?nld%F&4`<+VORH\#BWiQCgtg4C_X]!BG0&=0D"UK;Q>^mg_Di*:ucdK7B<"SeJfJ1hXb"t0!'q$a`Mhl0eWELP+^MNn*[pADnLkki>Wa?B]]k7')811P"3_IWo\*ujnMK;g>La0q2-g$Fetm,BuUemfp5uL\n1ak=]^KlrT@J^[pG9Lno)G.m.Yd4F$ej`QQjLY?YGLBj9?;]bW:$:$$d"mX9ehFgV[TY'?'sh2U[q2To2VK,k@DoZ)H;U;#,BWeL]+=P!$q8<s?_nAko=.cIqVWi7c8#VT=pd"l]9+$MEE/;O3ZP@il.<(amiEtp5dB&[n=843Cdlb9Vk/3?,Katm2J^$2VaX3YM7j*%92lQuL8kZIGb>se)u;nZA-GQm>TUD%+mX)@+EaYW+>_u3O@+ZspYhmf3r5G[i:!<&dg"u9Mdg1+eY:T02l][fIC,AbD6(q`,r56NJd^N0m$-H-'po/[]&idW^;o%u:?7o,_]==a5bXF:;*d9TniBq$_chW!WXh<:7DOV!!%jrJVkeW.s`,]DYi`b/9IHl=AD\cP,PJC!.A^+c1qRpYuP*k1p0s1GSW)p1nKU5:Cs8.`PrI+8q0?4&9K`%pTdq:?tT4.RL$ZtMGCGtI6EqY*]:Eq'%h76n-Bj6iN_,k0s57\*gZg_%%Cla$4mlu,ElJ0>[`@L.?*MD(=1I7X!_G:KIV$*P^+J5c_+On;W'?3@tZ)=YK@'^0ZWldVW`pHO6PR5eIuB#p96V5+FCmC#]:jZpiPq,L%apsTZ%JbEa%`@KQjEEk;E`:sJe1;6`Idaag:Z"`OL.cp]YB7KL=Kh>UYC7WZ'Hf/l-/'4t:%?WDUaRsdN`4B%;gc$D:[<_Z;T[5BXD:")YHBHOOERLa8!;I:V"t/tqq$[nZk7')8_S]:[$5>.cimXe@Pce!'or/,(DVl*s$_O,&pV1X(XOF]0qgT\+fq_UQ8a4a"T0HN5UfBoVDqqY3nflLpc#`(94^X0V64!B`?^oAL,"o*.?fj"!AhI?"Zluq\AL?Us(unjA9m>mMhms'Zp^B4YNH+,;fPH/EWl?D9fGko5T0]2N]sRgdd44\@pran9i*:ukQC0mS&X>Y&g0DT1`eSdE(U)[dE0[1Gcfk9Oa%_\\k:^3,k8W6^Q(r)N$IoV-5-!%l*^:s%H-2)>7E\Z%ZXAV+5!rTQK,5f'QboSh>QmcDkgnqfQ"t,sL!LleMO1NH*ZJ+cI^?O[I0ST;<&IBFEaHD7P^e&R+-IiId`pFs=c8>m!5C%1kjf_\XfQIeOZoG4o#MU\*n4aZ9un=-1h9k2-FsRX$$BK`^uf*!8prJ)4\d7k;+66&Gi[IQq%V#hDasO-MIA6X2]Maf5BBFEo+0I"XtG8L3*.85J7cR?(`PZVl1:86L@Wd4JT>>si4B9r2ka7\0*BZqIQ)J%9-I;9$Uu\0g"k5"_(`*r==eRTQp^CXZ:=k?C:S"QBW0R4L5$QlFs#rfufW1n(0hPLAVh+,mX4FuLG0WdOp5?mtC&>jkdl?U@'`e.=5(aNbB0Z_Gj=CJs;'QsM"*sM3?2\ZZXLZ7!Xl[PED2n:o]CO,66a/:i\,IQ']$)")`UsYNeZRL[\Furg;OO&SK6!uVU1LArip4)B,e\'X?7);\+4E46dhMl\$9j(U_.Q"=+lk0Xk#!@KhD`iacQJcBHbhpBC!a?5(G&EL7;&2??0;0)Cq!\^1A_JQ802=J#`kTA:Re75T:k.o-ANK"iiF=24o_D.68lg$Cd-R*ebW`q,';oupD*.KT@/T611O7t%N,8&&Cc9*W5/ZuYY7;R9.D;Y.93&(mnl<&:X]b7]kbU-U[#f,rIEl0/@XLV>km4)=9R?WXCYoJ@aI.U&^cVQDr7FmZMG`>Y"?qEa!rOEh`i)p8YA'JfHpuTKQ6!R&%G<9gR=,:59!(R[b&lprht;C22OfdrT><,(gNJF0N,i3Df"<=*WWj-oV9:c4hI>):[d;YI+1^<6ag@b7*F+*A*@`V)!n&4QWFL9fFr/`@LrMFG_'>S)ATFp3X"_Q(bUi)CIY!.KaV_L@;5_+L5i'd&P&4-X_97_B<82d+!^u==";;!G,Fo((WVqZC_Ppa4db)@K1Y(@sLXP%RZjI].BiKHY/R#0:'WC2t2$^;Jk@@F"UT9?hZ)/RN5Vp+5r)'1te-Ae.3(6g-[-sg?-_I$g.^":\E'9_c>I$6Tn6>Qscb>kOjHf4Blk:Tr>Hi*45$/S7@K)14W-nJM<.*..r6fnpV'!UaBH)qj_(b-J/9o!!PVt2)4Usr"%!8:B.5Nq)G]f?>.!`VI`fl5k:SrJq;F)7/N+2Jq$E:'@0i+bYr`'UVB"Vt^Z#!!(:GT>?BB1E_>^Eg?duW.E7p!!(pfn/7`%4p++W+_N5XNuId%!!!#u!2%)ai%lL/&9='W#U*h00TR.I$ig8-rW&S,M;U04KFi0i!qW@AcN!qFi",;pS-V:\63n`I.56f$p^@-&!<)tj_27)++G:;HQ3-ZVJ^4;r!8nCW)4Usr"%!8:B.5Nq)Ya^@!!)uuT>?BB1E_>^Eg?duW.E7p!!(pfn/7`%4p++W+_N5XNuId%!!!#u!2%)ai%lL/&9='W#U*h00TR.I$ig8-rW&S,M;U04KFi0i!qW@AcN!qFi",;pS-V:\63n`I.56f$p^@-&!<)tj_27)++G:;HQ3-ZVJ^4;r!8nCW)4Usr"%!8:B.5Nq)Ya^@!!)uuT>?BB1E_>^Eg?duW.E7p!!(pfn/7`%4p++W+_N5XNuId%!!!#u!2%)ai%lL/&9='W#U*h00TR.I$ig8-rW&S,M;U04KFi0i!qW@AcN!qFi",;pS-V^mm6+s.4](Hs=frOWi-FS?3^?Muc:%:Ttd?A4UW,R[gh4t0<r`$ksP=7!\..km#&:@T4UFQt=&oS@KcFNVuR+KH,f2[jaKfoL&L0jgq8&:7d&crl\Sg+Di?l4^Sd8+I>4-ahn,_2YM[8DC/LX`%R*7=YD3_l*..rd=-W.p!U?\;%,(4%Cs_1ieXO-DA(^eSh>8WWkN4BrlMo:F%kC\0rfS!3XYBS[DHFLNkc(pueG-!mc`(t%Aa+.!s+pLF-[:XCLAi`X=P#rBpuSR?%c-tR=%GtGG4-gCg1RWlh6db,jSGu?;R+EsDVA7#A]NY:jaR%L;eVcldM&PW')a`>\k9-u0oh'\J[:qC6K-@X-dS0^=-RRdNj:Zp<$e$@mM$?R-8cYpCs8B9"PRG7eZ*pNI'3E^Z,e;fUFJBKk.J?\97NQWUh#2EZGcrna`U9O'3O(TiG$WGfu])>,fWTF]qAqlm[8,3bS65T8&(aDb#qCZRoN)M$c0;>#ltN"K+l(6E3tF"&9=r+J%\lj*]4qu1K:R0<.^HTdq$"6og[0'JRSSPUI4Se4`p>Wj/:3nN12#(pt'E_dk6Ierf\i'S;"^I6q6F*s/$,%FlcdufsGn"/=""Zjk>^bY=/$?U^fS%MEiY>e7IA]u%;=1=P;e=A8j/67sI(an,@0nDbXP)g:'h4h3du&Xa0l>Ko7nuHA78&BDSU9VO9g8lDT/*`tq5X9uMjii:pDu;!,+oUIcTcgJ9T"uCe:F=4lD?b0Y*0SB4FUls?IFUlkN;0D#qhAr;e?H#SrrD4O?7^*plf@9>?Aph9\j$Z@52`PdjZUeT>AhNO_dpgK\0(l]o^B04=fB'@_5egRAD_hb-aGc(+"BN'LPAdPkqT@[-cQigr3RYZWp"CkU4[3'Ri73JPQoCel[K;.W6i1_=8d&N=RcPI5=%cPINp#UWH/m+^W+G!;J""UIJ82];kf5CC,bk9$LKWOY:,[^=eJ1;cFn67.V4R%/:7Zf!`aq!US>NL&@-'\?Ag;DNiAoq6TbgJ`H5!Ao!:-lt3@fQ+)JU,a9*hQloSi9)b7Kg,D>%u@TK,;53qcF)X7o,`P:TDWoNh+ULiOOkJrk>-ir`YOs1W'"b+ll)';s/L\ca7p2lVF0c80-)6?o(!%2-9ZB?ib1p1`T1KYHl.P*077#:qe$+1_[;LtP7lE5PKJ\&o"gU(,8CtNQ:dG&m6CXd9o20X<&5pN4],GUtHClrL]N';lbJ[:_=VJ2\Wq$_H/O(?]uAc1BXrJ.6IB?qg9mcmsHQDi$1YCWo[Pf1r]Nh8?[l)'AdXF&(d=b\>)*>lf7LGK[Ge^K)C$D3=*9';cJoM:mXO5i$m8A&>Xmsp93,Z"ii?VI2c)n57JIM;<"-4??_1G4M_N>/DSTXjB7aonjQh>lPsGW.ZYDJ(n@)\*t9:$T.\gqMp^UK?mr=H=@t1q#'5(WM]l7Y.p@9>pR*8@JJ2H'+1*&;1__H%>u^HejkdWc%33g:<%"@bAZ19UX<^FE;lePh>.Q.l.Te>Y,`X/IK"YL&/fI.ZeJXDPL35BFrU-YoTIr`2,.J:4kF9n-Yefh>,6QNlcEY78p7o[HoR?%pu!qf&UXdQM`:k`kDK5iCB`it,8kl`d'h8Z5(c[UFJ<\=2?nn;Y2>E6IlZ[NhDaujb-a9OdB]D"2rTJ:E9ketj4!MI:V*^fWk,!Rb0P-F[R0j"(+W"-;nRM.Ao0S)Rl*EIQJBKa%hodHm/9.-m?CBB5f'i%#u*C$:<#QqleTYbbKp-I>7XF@SJ2%:oISd@`pJ1L,&4l_=ng6N6d%`%4a&Dktdna(d2;rkrFi3p^@f%VpCZQn;-V\?bSRLrfRC\DSoI?ekHgJHhhS!Sir.IEU1n'o9YK*38IL`N6d(I[%c&%,[XD_aP1q-V9'IQe^Nt9O:\K[e[kU6%Ar;R>1>rA=@uE9JUI)H_Xng=Mq(NbB'219p>9P&kig,`4o1d3HU4COP@r/Gk:.aH[]YdIcX:hPXJ_79Cs8[p@Dsm)^@jB-EpVkZN?)TfB2Hp*PS2Je+SAP1p:FLlW0\2D3'`=Kho(V=j+B\92K%@`n`&ZXP@sN/+?fC\V_L&'i#'deY0B_M5=m,)g+9ejG-^fZX='(R.OFkD_##Im.e"=G#X3m97@\skF2e.E[0#ruiGY>33l^"K$tGHB4bI_RiKMcZF/:S'fB[*=\kr_pbsP,m*In$ei_XV'UJ.;C#$i=T0^'"EN>*TJeGcj)_tU34OJUZCLgoP-WOd14!!*/P(6hIA7IQE4Z\J0n(pj/5!)i^P2BmX.:&p-I]oTG?LfqMV?n7&H-`ne1YA3CG'jM[a^`(XemA]>)G4s0p^Bn#T>Ao!:-lt3@fQ+)JU,a9LAN=[DY`r#%*b@b]B[Y9+Mg?7X<_f:bdiX<^G1eW`?K8ZSG*L41J-DG@:rI%+)>VlMU;_Y&j)?9FRU0<#X3m97@\skF2e.E[0#ruOZ`*%=L'HgE0%ck2c4ki$h)q2!KL[0lie"YI?Q_EoauckMnm:!I>@fk-9*i`pp*ocln;gi!Y@R*,m6!u$r-qt_9jH%6--TGs7KQHH.5A+T)eoli+iFe_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%!!!#u!2%)ai%m>r`$ksP=7!\..km#&p^@-&!<)tj_27)+3*O6L#WYuQ^KrEENuId%M5!H9DXG(/rTr'*r`7Nag88)H_>^KuZ$]nqbDS-hfX,RD`o$a]"]]:p)E<-2BNnsS(MJL\T9p6kn=ReS-7RTX6Gq/O(j(FMuGG.q7QTi"q7]XY8%t'L?.TecPZ/C3.5*[@G*-<:$Fk6)/;$Ffk\C-jQnCd>Jt.S5Cq/=7.;'6/`IItS1F;?Y8*Ep%0u\;Q)`G;TC4pfgq6qE%,(3nq*6]:_g[7[P/#YX?2N^#c.dHKj9i(sYN_JHQ_hR^03t^9W0O/L\uBDIhnIihkZGjkq7H>AkdJ^iG99A\5LsXqkig-TYG1L@J%0e$T#ro07_arU;_($>T@%-^h7U1p^E/uE=,%X(&P2d$I#9"'7C'npV'!DIL*N,oqqSpF3amPP(3too$qR'6DmJ4,QW&:et#`Pc;gi5"%de8metY'oCJp4BB?ClnKfgP4cB(A7N`?MaNc4'AV%PLaW@epH=oamZYOl8NK+Mkis_Qhn?07Z9'mgJp.MhjleVV_h+39E31;FQrIZ>;BaMpn):[[bdN%:LMA+]uA.moL#M&4Q3+a:A`#4UZ-"[4dBa/A7INc4ORpq4*8f=ZXBYlr&slcFh;cL<_7T@4I%%i[-H;=61ae93=;S*R]#W4;)eNf-Y90tPXC1Sk1iCsp92Q9kd4K5s06EBeN-E8/`S%_'/aL[.4@#HH?d600f#"G7`Wts(b\GnQE=>'r)YT?"a7=llmoOa2/Vm#j_M0:]A9F1l!aEPZ-I&r-GUE.5(aNbB5k5@1JYK(rMDcIFR)(D;;$nbY5C4Q(:U@A,c>Fds.mf-.O[ehZ#ZC^oY5A0MVD/O5'EZ'S'E2QMTSM&b)E%13=?TP=g:9![R3NEF3XXFc.dLOQe#m+.XU"rEk\(kF07XaV/"S"2LX/hLQ.gb%^nP:"u7&O$%IB[#0S7%im7ZS;3,rI/NX4LiH?=C:JHYT5Kdi?T*#co_F8TV;XP'NfNL;Uj@QjMun`&Y[dfb`(1=K4KBsZqp]$qnC`Fk:788R;>"4Dj@dq"k#FdApXnp)aE(]uM%X/P=*eg85H`QP*Ao+`^Tns?IV><9]KF)F,A.5PPT&;cDnoCZ=3#*0UNo#uB;8R`Td:HjD"P>,Kb2lVEG/R'fZ.%/Nek?bZ?V01,:>UAVLn5P"@,4k*OQ#!5^2Jq8!Ps5A:+JnF8)2)9G&KU6LQRW6Z:11el^l7k^Nc0;hXe5&:qV2+^]+(&YCb(3+Mqd\>(LtKE0/CRr-eps/9d6@,^X!IsC@1I>>p>VOGm^SX?.MW5.ED/nDEt7\;cHC7=Q-Hq\HZCp.$WlkWm@$Pu8?tO.5^HHt_B>lc='EA>=A:5EnA32JlK/Qh@q-4b9XmDG-2d%466PNkX7'Xda,6oBS>NVmAsig32mqd5*[^8U:Ok8s!&;_5/P^U4TJCrs]Df^;.YZ.M]#7P9KgMHG#*VS?q.B%@d#7.C3Q=lMBD[1M4i.YrOkbiJ@"8ofmdE)-3hdrMFGh^3f`kGeS+5\5?$cK5%)=Vhag>,f-!o-4bLoi%m>)Hj3*aM*?R2])Ke8RdG6>oZB&W[?H]UE#E0b>IX'KRjO%se9f!8HhSVpHhZt)c!(jZcHI,ghrHS0gTgXFeA3W@*3WHA[P$S8o/CUE?GCLOO0(LtGO<(keQP&B[ItKNkQb1Y@cJQboIBVE!?umqY8*EpNTBUIQL/rrZtDd'Ml2gE4[42=HkCrNN'I/'Iem;YU9n'D?b(VYV4>5%tq#B]OLKbM6rl4tmRsTXq7dMN/dLf>Q6,eQ^Z![SE'uf#RQ3\rum$_UhZ,BsXM)!CGA*b*a(@6p/#YOOj'`EH&mbPK8kNoKe@::Otn+1gPcC(5oSXJ;RcM(mopg_P/`Q=Y='>UX4/P_4OL#ENYn()uKNBbe@[P!K$pTL(8EBjqAK9OA9IaT(rU\Us?^-1?G!A']r>PKVM@)D3a?'KtCH*!?gLdjc,ff?20kPPAB4>q4Gl+Sr$%\WbYfB4p1`l-n?fX>N%C%7.;'n9:rO[(&/1VNu'\mRP%teSpog^`E%W=_Zb^aX4P#'.h*Sq;-0rE'NRFm8>:?pJdAE3:+RGF>/K^mNSFL4pmAM"*#=9e,P4RVB!HTKD%`F(0Sgopb,hF)U#ipU.ssGPTTI`H?^\6=[S6KD)hn+IMasJe;!oqNYCK:Q7_'8BCTFG\:og9'qs_LsT@d3>$p"uJ#1_/bXAK-bKA2b%Z-P[g/C(]2&6#3P+pI[54s;A/rb$KFpclsHZ'uNQq@)`$M9XfLLs'4&*:2O3=@d/ls1]okBTq*s%TlT/enm1ElJN97`D;q$Hsq1=aKUJ?At)7UOM-!6AjI9MQBX5<%V2EF_?_:rPM(XAd6Pt@2^j9lrc.Y+Vb\]1iX@U>.X!&blc>$U02XT-:Gr+I6^0el&#foCokMr4t`ird"1VS%!=\QJATdY`L[:7>ac=bH7nD5/W`9B!MrlI6+XA^h;#Ni%q,I>3uF;BqBVBHe4rcimaATDoYdR2f@HJE1$28mXBm:C@5^GrdUTup729]rcIM&Yk@)Ao.BpP;7K$1&VWdKmG+OcL>n@T?a':NUK%Qq:Qc%shJ3udB2OkiX\@UXR?L]3G4LRrp.ZPjI)\ZGM;JS1CtQ%W*S9-%DbAO7Pgn="T=H)G;^[\%,*a?-Ve/,/D&eH4.&XRh7^m-6gU)s7TqmoPdsdr1.dpsgAR;V5)r[?B@\h;`bWQS:orf:+Ti*@J[KI=/6h$2"imek_:D/iS4T9Nh/1Zo:Sfo=+fXlE-3$1;-1%VfKcApE=+lFiKqO)EHK;?mpY1&f#LXZQ9F4fH6@_t_m>RN`J76Z>9oYY^mp>)T?fX>R&c2TC"Bgfnlaebi1/=WkKUn^FqMgDSlI>.t;+1'kc1jr=$iA9[cn/51uT"K70J*1f,;i+[Ekth`(JL>[;^TD`q+DV_n[S>_8[VXM,5Mb+QoT))[9!HXC7'bL!,r'g"s/?A^pSFZ)635;#p\fm>&N62hs=[1*^?2RF)J>8*DH32[-S`t8%>1bJULIbH7GnrVU%u@GAE3U2jo*Mo_hP[$p"uJ#1_/bXALkDS(RO,U$pJAn!aTQPHF8$'>2]I\'rab^WU.9-nac41Us8g\#eB_C9Oa+;Gpj`Hht$,FTPC)^h3XP".t-7i%o=(p^EJ>VlZuddGq-q!r<7\iYOeIl?.Em_&n0phE+-HhpS\YgVh;3%*W@/Rdcj'UuBhI-T$3-Hj2_>5(dV7F4R9.T)nH)l#W3VgURh91#D9nP5o8'Hj7ADn/6HR4p0Dgc_.F)02c--[W,`4cCVbh`PljLJ,fN8gUCL+r.Va*=<]EeRp\D^BmetMQ6Ntm!^9!E$9j)Wl#YF+cN!qF!,)C\"s/?A^pW)VW2gGCC@kc[8=[&"s.O;Ap6Co.)3r[acTmf,9rB$`,pt(l`lXDjg,M#e9M/>kgT'c]P$b$7C?-qA_e5ok_.QRrIEic#)#sX:!%i`I^a&=d\/'GreNUmWkD="h7&#BRB>I\P^Zg);nS6fij-K)>YJFVfbfZYJiVaJ-q@'1WIQoCuip>pAs3Qnpm%!(p@Oh;on#%O,M;!=7Y`d^@NR'kY)Dqa`K73rq6+->FCVXQ_!!!#+!'ULG^h;S/e`ATS-1:K_pBncDR=1oTYOqZF$#b/9IQmb'<>q7N+@W2Y^'04Ei^-D23T%cgV,Vme`ik3ETVBK&I"p.X=5p]4_IofR_.QRrIEic#)#sX:!%i`I^a&=d\/'IHMYIT]Y2'dMFmV&:,ppAtfskVjkQt2BFq/V.hPQm8S!CCV]j&[OrPQ'[gK"+4NG2+EMMc,sJAEJ#4ah,#\2:F.g8oFP^&u9fh6?]dC7:)6*"LgOTgWg5h]%JU>3!!%Nb^h;R;p^CC8E=)j=.u[icdc[\4T)eol!71fB$p4T`JSQE(JKTDqnZ,jiS2K4\z=ob1G8)Q1B/]9(L`31kDXh,0!'3Mi9tCJ11T<7n:jl;si,6FF*X&4F=omC9L*LnTR-u5e"OAi">_m>RPNY"S""$?e*TfX9"s0d_/+GSG)Dtp@POJETXpQPSc52]P?^S<@br/g3iPP?>Ed^30&T"\57S`nr;;kb^0SDiS1N#=@Tc!#=mD59M@Rq"jlU$OuHlIPlI&t\U")&ZZF=2b$c_&7><-`>>\l&q@"pn.l*>9Vki_UiCDK8D7fHNaiuJL)4iueG4b9t)W&(&J::#E^&Nmt=A#9/QJm,[938iEeF'X8kD0pnkh&QX>+>aZS:W6^)%QUe]XEgCP-$ZQLVnLKQ*e^EW^_2HW)nI`b#iM._WB]9WNG>N;$RoSc5ZTn>5\*LVJk<O`fLAZdG>c9dee!h%5-VCb]8P[B_Co=+)=9@_e(D7@+Qd#Rhf/]II8$m5);cq=^!0XIZ`33DcOJJ\iAR0uff5GbMSn4fpIActqI>rG9qaZPQGKEBW`-lKaDnZfY3Y+oLnt.a[ChLB%)Y'M3ESkfZm#L(7S)C;&84QoT)iCQ#WfY2"8eSe\kR'u_qhT-^M?_n8DgN'_OcG#Q)j>_Hnf(ta#u*^h*K.r&6L:aM)VI(Nf;V5Itg;!Y3a*ET?!+EIl<1o&pkhIds2CtYh2;V@`jt'Kn.?M+J0@8)cs^F<9uG"H*]%LkIE9M\XCLSm_r74jH9lP-Z_oJRjY'Q*pp^ap1Jh1>]A/ErR#mP!0i:h@Wo,[0BbX/+g36*?V+p-E/Da6*#:5asE+^h+8c]WS\9U0-_OM]tq9:>*nWTk"rS#LX2t,Q!OQ#A0jcAsh+c0[eG$TD/)9i+HhkH]QA7XeH\*HZ&3!I_#SKJ[8;5d$`5_qc8Mb>M!-\+sd0eH[qL?HY.4fK5rkfGbZeISn]"k+hL3!:r0e,]MB/!P>q.gUj3l#Cd&blc>$ZQLVnLKQ*e^EW^;)LPTShifPVe+RPU^+hK?+afH;$-]fT+Ma[5$sA_9'cZGW]9;a!4O#EPLFc!XCE)Et<65eYd\6[/75A,/l]$MR5@Q-*(c1WUQ]aCd2R79O^JWpCG@>^l6\0tYQ%bEA;iVp`1_=5T$$;UWuD;P/S3N]"%Z9$t6/_u2p>`_N,!iW>>7)9Vmg`2FZ$T0_H92WAKbHof&Ui">_m>RPNY"S""$?e*TfXAK-b_oC_jNJ=;bs^.a*TlfJL;_mrEAmG5G2^&31:U.g\0$WV?WA1g+B[[>krIn%X?5:,uFlOM`T[I6R,<7`KV^TaDAZb6TnU-be_rqPrF%Mi>X;Ef_%s+/6rGV\rY^F$dp"+1:oJ^;->&>qc)^V]bG/Ubn_Ii.('=(mFSL608d!tF)jmAX`KE(f6h5"c(^f*I^!SN,[M3^^(USE%[t"K\a["$kFP;;S"Oq!NLjdk5afMiQHp[;$WV6TA1g+B[[>l]d:Fa`s5g9iMToB%Fea8_Y0YbB1\uld=LW"69Ck&nULMUSApWaqBsm.h&=Eo%VZ(gX!\iOgn-FCGY(\h=K(p)#YA3[m5"g8h!SrNt.UKe[YqSV&a%r;#k-OaP@q(cbHhtHKcXNIoX7H9Uj=`W`qFb+XFQeI>c'/WOn2C>2"-:61i*(q8+GaB5r2Q&HB+:tkL-gO'q\b]!k^E`UL+PJ9#-$.oR6lEQ;01Dbg86mL^\fP9)`r=7"8er0gl7AR14%E>f`K_"%.ln5CgWha&3im%@`eS1!hqlGTYXSXT@Npr8?n4Sbg5"!*Cg1QPQWVui3cJ(P$M^\YK6=)"#YcWh#o*^!oE?e=/oQOd9LP?W8!1](KOR80E*EQ%W$NLW*[gno2`"7OpR"k3W@YL88`S.WXs;+THG$PCt1rodMY\\hn=mSJcYG^5<]J8,,:,V[#Hi"Pko>RPNY"S""$?e*TfXALi=!s"dQP?0_\k'Uf;haUA4!CY(Kn#(-UT!!#7li%sj.Hj6`Rol5kPT_QR"NdJ5*ccs_`W",-5ZP=#3%0f2gro$le>TuX-.c9mTEh@nuc_5qS_p1CM5Hin]]1od3%j!5mru25-K50Xlepu'H!!!"4!IP(mJ^;->1lYF[oc#qTHG57WkJaS@4apS2f1/Zfs5!V:YnK#*?E'p-/DB`&J+kbG3MlTMrl7#BV+l`:X4D*ePenr"?AaVt#7MLg3IQq)FP[1n6+->FCVXQ_!!!#+!'ULG^h;S/qXbZ&Ho5PGjNL6"O.`NI)7FA9j6%Lpl)+3doGOat4MBKkHi*Lg9@9$N5[([.eY)DOb1!m:Hj8-LkH"]V!<<*"ciWtN49D.+CK8'o+:a8:$4<\"c#\"$X_ZCmDb*8oEXF,@#E#T#o3tdgc1CpE9KG+UH.Tin>1Th]%NVC1FW7eMHaKnXhmmh&!HGU/=gkuUI+k.>le-MVQlKC6=N'p(^MmcY?D4bG\i'0GGj=pHRJIcN=_ch/hlM$;hHm342K%C!Tke"hS'o_ke'Y.BcW:%PdL7edY/9U&Sj*1@Ps*;^k;6rI6Dp\tKHlA&#()]fVpAUUT2T'n;U'9'F'7I/c&ALj@b&8J)KkFnh!2;:.RN`JC?]fjJBn2q!!$[5Hj1XCcbQrgf4Pp[GYF_1_^Gl;bKHgIPsS+ZE^ih(hu*s]Gpp\>Fn5P'apn'"odFNbr;qg^sW.;jS'n1b*Z>IX&arnAN2?OBu?hmcZc<4m>7=rR^MGOOD1*6ZE90Y=NIc]FWc(E>>Jpo):A2u*[]LCP@%3^)M+6=S]0]`arn8bLa!m$uiLFW>>W]uLaq(Om+FH][gtUq"-6,BkB3UmEJjZBpUOfVUo_L2ZCn`XR)H):S1QGLQWu?Bj(5E7_&l@X[EFo']L[RYqK1m>D0e(<_MPVHFWdtQ4,UiK-9A9@/1ZSL;B]!a[D.]Ch,cL=Gh^eCWu?D@MjLUScUS6\qt8HcOj>/6LLSIjq[\TXVK=jCKtUtC9YYZC5,DMoFQHk1p?[51Z,Gr.(^pW27E?IlaCd3_=2#d)1GV%8lSj)mN06ou04(nui$*PC9R=O&#)1S@5+ar[f%SEUUpTddfo'uiRMH\U>L]8U*^6`(f-rL+Ri6)&kZ(g_L8?\uJNd?8o30E8c7`,F'`&5)Vd6tO-Z7kp8Mc$XKX-FNRck\'Z!bu2(0q%25H_%Ym>\mTd-/,8V/n6`%'$/M=T^hi!!!"l"n3CS"?lq>W^`U(q8LO,f!M2CeoXEuB9:4[[:WfL=W+'fC#iT"<%N)TK;hopF0#`F%&DEh2u'bU\BJJ:.Ubc#M[`BJp$MtY?q+NjK$U)nqOBG$1B7CT!*TApJOeWSE38D2T-5IrFMEA=:S&mI'c#W9H(2Md8kRt?FaXIn4@V'f+/^d9=g3iOIbMAKn"J'C2dr`ld(U455CE)K2`L4&*WK?9_5p]\FY"h&KD[clS%mi4ohl+F9bc<:%3(q2OdY]$WEn[N_YO[5W[Id>*RZf!Uh5&O#iSt+P*g;eWS!9Gk,A=:gT7KTrJ+6-[IK>^:]:g0JT0[anhg^$W7-N"&VYr'2cF)RdW0TV[%8M>+LiJR;,,;0O)?;0OalPQ;I!"G.3RqHd^HF@N>eR&.BE,fS(G)]^rW/8lHj1XCcbQrqp)/g,GJAA%OZ3oLE&'IdOfPB%"eLtXo)1k4K,+V>A^qcPD>CVaX[/Ubn_n/90WI$HE2-FR(CNjW_/S3;9*$m']jgnj:QC&bCLdq?qWY5HZ\Vu=6!4^hphB^b*>UL2YthsW$C/eR8G;=.lY5RDl:Yo0h-:fqq_!GJZsrMi`ZKgKds(1^q!*>("ThYZ.*EJ5O!JRAc*b$cb0#]iX;DnbP&:)0?MKk0IXFbA4@$T#l"fj!hY$Z+\o!TSNM&'^9*1DQQ=.`Wa6Q88fBO(-G2!p$g$OfoEZ?T21)%6FP_`AX'5@i2;g7r4AUFjlICoDS6rjJ,<*@k.4+Z^aYSMH_C52Z`g0YVcbLb$,"$'b9%ojYIWTGS[Ti23l2d40g%/`E&"fMGiOA5=TH@Qcmm!P6PYrpCgjZm8kZL&1\*\MPYaj_uUV,<(aiQ%I=5_*#]MEnddX?l84_9*^ZlWHf@?JmO/qANt_l9sY)`fmH&iJ:6i5-md=Fj'L4p-k]BAcsL;lW<*hRj:-)cb)8Q+b+%iMLA>]6E_X?+8MDV7!N/V#IcCcb[qC2t?DG1g2V$.fF9.N*k,`kH)LXcTj^[.HG3i`5ARBc\*ap'U/oT)uV7BT"EXkUNN\.cL&7;Tc`,B]t!.JlLeAMqf\uLle8%:&GsXV8m4:;>dSl9bB*:#^"P@s#EKk"c_87r;Xc"1-9"9V.#*c`!nD/+paJq+[^'uIRMn>M=VI:5mC%4W.K4\Rn1e:)$m!=P[VGbQp=EjDG$VTFga=_6RMJ)%&iGsb-iW.9r.E$FqhfS+kW;=Da-q`(O.JP5P#m+EOaRZJ+%+kI7j6-,1Jj"nkc>rhp=m/QgF*P(84r^BfL`,u:=jC?&T>q`ZLdqDr-_XSMMS?23);F5CBX(2Y^1\a_.4.sBSqqHa'pfnW&A>J-,JXrmK$6q15&T@`+V&<[).MOlI"Gs*OYYbb\cMC&`R"(!Kn`tbX686%q?.#*c`_A+DufZYd>J;`a$Ae]@R]aYPJP"8146]B/#B.Vk*4V='N.fI]([(5oj"q?S^H"c';i(VY#9Y%EbfH\s't0TSC6RP48.+Qd\;^cgZ775^lknQMDN"lq.ep=RFLgpBIn;_AM.&Po<.)%L2&_[6J'b)m(.Z;G&#*^KVUW5bAZ1ICXMfX.AK81)X@0%]SSfXB.tfIU%ghl0f%@2b`u]3^Et6qRCrT2Hj9+pTk%8V8d@N^O2,Dd>)6*"LgOTgWg5h]%5*$_S@l^"[]Vh7rgA22TBjdo^?fK^DLNa_r4DYC&i-r\gll1PMD$@XTm4LlJWujBbP#Em9rCg>"Y;V$gnR^*a.Ii=RpYG/ln\eNTu4kWRtcupbe+>$a2hi1paPS$meqniG+bRcqKD9S:S/GHTs0@Ooph;u-R;sLA/#Bmlt`u'6Hk0*ZPP0hd-O-/glDE]/\h3qPi;DZe!,=KjrO8H@m!IVU;43CQX3+8^\iMG3lJX9=*@BR$D0V#S+q-nXe`D&j\Q6&6>8Jr$^[uib:G(gPqF,YL/-nb)aCp*=&;;Y3]1(>]LuP5o&m]<5"!kj14_qkT2Qo1:SV$6I9(`;R&u,.IMOih"]27^1G_1M_W"JF(2]mq#-"j\Flc0mf;,W!nHD1Ef'2dm)``2L"Z59n%"lKs!La(^JOeWSE%T!W&B(b+IT9%5ZUWL?%"$86[@NUt+-@TUPBHDe_:%.Xa$6A,`=u5V.0Bd8A3]t[h#">?hP7!cVD"jnmN"ESi[IL7HiK5]!pO?IM`1QA1iTsHod3=oMU!&:7q&#=5aXEYM6Mh''ae'qkCZ9b26_#Aq1in%YEtBUOEmQlHuVa:tgkq=J7RH:e52*UE('n)4S.FPj&r!Zr1Jrqi.jhb74m6le/g3Gl5<\`udN=D!^.M,m_bsq#(W_f%.2J3cQ]gFnYI@HnDLJT7M>"rcI.\F&^nG+p5INJqo;\8<%aLnais!bFa!Xb>nPS=+\bknL5,M>k4b1k]!G35#F$BWC)=B*%\Zb.m?#<<^V!o$_'i9+C,(I5(hA;Qb%45rbIZGb4G`HepDN5p7o'/jlVnV@7Xr0RKB+48)Q1B/]9(L`31kDj%mLO,p>&Ye&Z$pX&93N(Pl5Kk0m7>t;%AcV8Kgk\F"8'>A:t&TeBF2Kmoemgu$Fs.0=G^Q2<`CUR\J&sB&*-)OS3RkT5K^?aOa;h%t41b1+0?*Nsj#udRP`>L(_FnKMDjn.5%'9W][$rhM0^4chulF]bqY4Cbhim1>4IEIMAc8g=P10nD(*ICVYce;sXoi^h4@C@)SqcVQnlg=kSs)@&b,?t=+=,td[9eua..(K?#]eEu?"PNmKJOeWSE%T!W&B(b+IT9%5ZUP])$uTQ1`'+88Z8gU5&p!P,4LQC(gr/XZLPNZc/YPHI[2(EA^aDu'3"C%sX9'\DaK"b-]lflki=I^NX.>:)TiG\SZ0@AnX$rWFmr-9+!^IBSVT;P@VqlY@Ajt&8iIXP79FI91bl@)e.gk=?r5j$4OqQEHuT>Ba.JBq'b^h;R;p^CC8E=)j=.u[icdc[^*[Ejqt;/0Vs&?R05/M2a0HF>A/>'d(13fn79I[@7W^!=]*]]*.(KuUY2QeT,t+$KUMAp3U-)n1KC+R-p/71GKl\E$B2_!pc?#-n6l=lKerG!P`IUh\7*CCmDEGLVMn^AE>pJ8D:Rrf92D7ba(_XmFF?e=P?Vah[92ge-Rd7^7o)9R1s@EICl,F@]D!>sB:1"52J='9u.%0RE.rR<9Xs?3Bb"NnOH$.a_mj\hHg%UlK3RfM#nMJI2INJOeWSE%T!W&B(b+IT9%5Z\I$p6_V?Ornr-HV3*j%KQZ$#FJd$MF.me$=u'\jQCS^r;/,ITIT*!'d\4pOp@qd"Q_)%dm+fPR>+=>L[ElW0=J4U+cIFGtlKslLeBHgUSj)).Y@$WUh_PEm:1t?(J:&>qc)^V]bG/Ubn_5FaHi%k?5!!$1&T7KMj1N4qa.1jG$0Rd"pTg@?^pW@0F3h\KCH(d$e*[-ea3$>,'G*d;=T0&,9s,4Z"OfH[GWj>Q9Jpjp^@-&!.Yj#BAaBs$sZG@T4*'5J$9ZfmcFs&[DCVdFn:hlA5TL+V0Rq"Y.t]'6m\I0QgcHJt#eK>PZ3\d?ean/51uTCK:jq4^Tr&trU/K'qV4"TJjT.V^1cm"d<I=k6C1_;FmK9O/\9PIQ^NMbXp"IZT\P=CDnR"bPQ'JU[24';VVc1T6U'B+=VE!!!"L(;OS@&blc>X,;=[1ZpAf<;YnL;^(8igUFZ[`4NKl^]2)F/B-h6lnUa,7Emc0h50=[b_53prf@(73\*:I6>p'Un&%YUZ!CmfL>:Rsi36(r7nm$oaZgn-FQhB/ko%e['&.Tr-27lN#ES+*@+b(hjLi/'W7_Q,quW;0@HoXZkN(3mj*:Ih4dHqspmZfjK@jh96E$=%S3O44TT4?ud0ci$aSk[plYJ5sft2`YATbC[*LM$=44M4!a2iWVG8$dOi%q_m>cWa1L*och;t);jab&)\gbpEe,5\IsB3;Kh$VN^.iQoiaBO"YA`4c^'2*#:J1ASN/+fM?Zc7LKHAHj3Ut@2T:Wbj.*+O2(GY]u2snK836i(,_.:]R0CuWG.iM#EB)W10Y#AF6UiTip&s-T>Qtl1mF5,gNak9q8:)^(%5n*3\\6qqmLjT:s*;5bfFUP1_kBBe^EW^!M9Am!!(@Ip^B7dT7LcXbP_j1T0/mpLQ0j;(8GEhq28=mLIb*b_0guqQ`g`l*s`k`p!e5&514,A=7t1Fh@W^\LaI-kF9HiD-$L/NH6IkDOXoIa593Fm+]3;'A9ZpJ>A'\gjZjG/[n/51uTC6YYeSa%r;OS?l=B#sr+LMpK+NI.mJL6V5CbX#D'TI>-U'^n?fsc&@)Bjt6Hk."'gc_..M+F-DbcH3=\ce7XkM#BKG1];8g`@Ch!6.hqMe"(`,1b190'/;(W1b+!!@O::4.j%k,(!HM/FCHbiT33k!J?6\SOJ'QMT4RON+a/i*Kj&"-(7`M-+nVj0dA$R=mM*UD-SL,JAEI+T=[MUKuKmZ"8`<6)(FXjb0=kmgF7/4N-KQh:JmobXmY%q6rc;',WiK.+pD#oBBUEq@f!2%($Siq$ik[D^h;R;p^CC8E=)j=.u[icdc[\4T0_a-7>B7OPdES>*_@fFc?=]/r6j,r?&sGCQ`f,:?'8)`O.SNJfIs>1\O"jtgF<1rW0U5U<\&e:AHtSj'&XRYAkJG%h55$'3%#uJr,h;$+'W[^+a1)GSmr)6*"LgOTgWg5h]%3Bp%MRZmeFh<#QNah(uk:bT%H1*h:P\p83p&YS-Y/f?mI@W*@epIh%KRcU*0<#$[KSGQPfKCW=41D)p_t$gnNOF;J@4S1PBBEaejB5VIY#rA'VBHX^;)$P6cTnMGZ;p57k+N?L,&?0*Ku6EAJ'l'j=lKhc4EK@gf+r3V?+KJT4Y(^/.LOWG5PoC(WQZ:RRo"2uF^TQarS-t&Q`h`2SOrc&7%fc7kcq(RKpMELf!0AriUG/ESY@KE:L=kKam:FSZ;(-PXG!&2q5Q:5CdFR>*:K.+tRs/c,\b@8bcbIW3j_7&EQ*k,60"n'PK=LsF)3sgJWO(r,^HiH[6\hpI:c'd'bB9<"4]r%a!Eu+WE,d%!pV>r,'\0R6TW/nohTS74W"=Cn(7.q[DJ>0ZJOYTj_ERGFJ!a\4g=N(!8t?#EK+rtsEq3a6=GV0c.:;3m0IZE.^>6#YNd0^'T0aTeobku^?+pB;c'PFCSXm?O>q%lpm38O0Q?uqK/dBe%Z-W!c&[KM`0Led&cP\c[XH5Vnm,TmbVTW3o!9bEt$p4T`JSQE(JKTDqnZ,jiS2I=dB@q:&W9prcqhXlpR&l5?$n=j\@aF@[G:<`oi/%0&JO>Fn:$AWJWt)N$G5O`(r93Bd@BT]a8$[Y9AhU+cM>?'c\@7^s)<_W0)3!4PAVX8QVgeSig)#c?8M9;M:=uCD2B#q*d%k?FG\bUpg*LlFZpesfMCMNhj+4j)gW2`HbJ^KK5ji^m5#*Y^/aN+Zs#CoRVK1G6A1]OcGUQ!MAdrq\tQo8A1e^o-7dCKT)nEkHj1XCcbQq"Va(g._Y@+_IEia2i%qm&aUn=X7*+A(9+)>@:NePiWcae)oAnt\\?h.-4cCNF1F+6B:fo+#42Lngc9b0lk9cGf(bp4)$jt#+D;+.#]FApW/?3HqVgorI;5S`/bCBl^4)"'!jhb>@3qkIO!:J]ne>-e/Z*?RWFDCG1duK].]6jcURkIbfFp^-Gh]pYdVH#5B]Z==d#3k:tA==`RPIY([R]JV!Hj7AJn/6HR4p0D'S,u"S$KG3qoJp]#m5(PKPT#qu7-hof9?RpfT!?I>=Z_$+6Z#:ncI7HBNE^TY=h09(U6pij=I5>FBs_9=b[+ll6ugncN3D"PO,uKI7&eGNdk/-A;Ga)3-`MOhJ;p!e%?Lb.BECD=KJa,hgb_]VsQ(&k>pHF;9imG,E1KpK7Q#@AOdt_hS6_kLM1u!2A$CE_YVFknG0"6&r5'm/$bj=+82f>%d""A.GR+>"2@ZXau;PlJ6Cf2(.Bp0:o'`/)6*"LgOTgWg5h]%BY&56A)iG)4"BP5JsE+;ZloN$"#W-fh'RiX[^SMTM:93S!*W:V%(Do?md*eb'E'69AU\@s7ZsBO1VTkI,;K9gJYLe.lf2ZE*57HS'@neku,A(2H00,V$.>Y.]c%"NQ[1[kZt#-NY>"bQLa`ij.AF4R:Ak9`+eqUbBXL8A7*AF]L)'Whlf41X'p2#b1^W4%CuBCT.+!!!!u".t-7i%o=(`$l89Y:tE*9:rO[e\#g0k9#Dl;a7p5,&g;cV=0nHi:kBR>P7C=\*VaOm6;NhI[iHGEPn*5.;A%g.;;X6$gT]o'qPF,!!#h-i%sj.Hj6am?(CKNL!sYZGP:ZGjQ%0i'RKRY>d[W>!!*!>^h;R;p^CDc]/ZWbHj55>d(=e;<JD@*m!9l#RQ96`L<^6+->FCVXQ_!!!#+!'ULG^h;S/lGA7i78go!Z7Ye7XH$C4gD5/W\'Hi3eoPc%SZT:4(k>.A+nT^ZsDdiijcc_+J[rEAKXBFGkF8#]T\)SoK8AmpMb$ZR9lh$/*Ocp\@Bjp&[20/'5XR$p-%Q49eRBa,o<Wpl/dCYlaOVn53,I+6;3M`l%i@-dK'ijS+&aJpDVog=[m-[WnDn<#kI$da^2i%;0O2:,(EKil;9j10(&nT6=r8gl__L-0`N)?;gXKB?'s/R;E#mCXp5>ZiX^/+lR\ZAPPpF_7nd95C/.>1C4LdIXL-4E')f/#:A`%"!L!Oej!*"r?-h^NbHaG@=j9cip'#ioR5X,7+FlIQ\uaX7V@pNnsP+See(HrPGB]s0ApHhZ+eV"?JTO\kRsO@jXmaF8%lA+SH\O3WE1(?7:RdoD4GN7a8\o/Pb*dZ'/cr2p/Lop>*(TYhA`=m8a"1prG03^Hage/#Q=TrhfM9?\;^CH)+q"=m'1\t;9g#u"oAA^lf&NSKGLMWnp2:;)YTB:r_e=/5X1j9'dtp58U0fd-4Tldm$SZEgC,5H@'1Y#pchF!peDGj;-q#9:\%q!S?IIlSc.joH'&OL'+V7gL,1\;P=N28$2n>4iSj>0X3*dtn!M\UOq1$QYi?Sjrnr\Ekijm#Q1G@-8U#+:o6/R5S2FQciU*gTERe-S9,:5:TDr.EaMhocC628*$WdZC4t'!Xe-SV#:.B*^PFRAhR,N%]S$W3IWJIqOBG$1B7CT!*TApJOeWSE32nl:3lHnD/e.+>1ThgUEc&"6cufXcb[qC2t?DG1g8Bq.NPOF50`V%.FRC\!M9Am!!(@Ip^B7dT7Lc$:4XO:L%23IqOBG$1B7CT!*TApJOeWSE%T!W&B(b+IT9%5ZNbd]!!!!a$fEi1#^ciZKfB6fp_CfPC?]fjJBn2q!!$[5Hj1XCcbQq"Va(g._Y@+_IEic#)#sX:!%i`I^a&=d\/+'<#i\o&^T+-V=T^hi!!!"l"n3CS"?lq>6C\*Cr!MIc[IcIp^h3WI!!'A+4p-k]BAcsL;]pm'@Jm-k5%b?"$ig8-J/5q5i">_m>RPNY"S""$?e*TfX9"po!!!#G!r*0d!hY$Z+\mS2IYI5FaHi%k?5!!$1&T7KMj1N4qa.1jG$0Rd"pT&>qc)^V]bG/Ubn_n/23+!!"U$cbLdp)7Z"3j-3U3!quW_UVb6(r^#:^m*i=*3gW:k"n=5DO'g^8T.V]L>MmHXW"];N/gl#cAO1?1[Nnp$+K#3op$"cA=?Y>-k2+N`@P&1DCQ=%i@,YEr$c0ktlL/5(dV7F4PlfzBE(rY4uVB>P%Pd(#-6D#9?lS3n7ZaJn:Lb&#e=2c,VL,ns/MlSISA:rp5Q_c5phhXB>)^h)cpbld]oeeEhla:"oqR(&JF50!.pA\\LD,]M,08EcQ5(R:"3tV)h^9E:Ic+J*hR;lF!*1F.Gegj1gO*.k?geW`5%9X*W^N;5)*iQE:W')f=:n;X%#c#X3lUl#YF+cN!qF!,)C\"s/?A^pUP0;hDnV0pc;4b-b/\bSAPT]X;nQrq"8Ap,@Dp^\F;p%'O!6\*_g`dZdlcs1lH\q@"574>AiL0:u]s$E.+#XjC_%c-<#@%3IH1@62r4^9,Gd$\-U`cFR)]7H].Up&,`6!FhRV\SJSni1/f5$s5,@#)4WkDhRmutFr<)EHL6H)j1gPub0G;'oJr1XprG2cW_2rO;,meehKPoTX,gXYPa`._Mr6CiQ9Jpjp^@-&!.Yj#BAaBs$sZHS3$gHTQ%PQEC$?T5S=,XZkL-B?\ErraEtgnsRaci1gK:3iJJ`mLi@:D``&J'u)^=?We7h6^*+*4+#nZ/R#bUI<_K=a,I#Jkif8bF`!Sehg6b6$mM;R3!!%Nb^h;R;p^CD#]/ZXgXN])JpVFcI]`XD6B4:$,UZDj;G3U[>1XN"m,:9he&sSsY+lZ7Gna`;0m4u#R9b47O*QZcH2u;dncf!ZS4`^ToEOXt.p^F$"Q0C$&FX*6T>h?T;\FOa?=p1H`[IcIp^h3WI!!'A+4p-k]BActI`@8Qm4RMA#.o%NB/ZiUO.bq0[%W;R\)Yqq-fJdaJZUB?.q@$qHA`LL`UI"b"k3mM`IBS=WF?4;l`m)e9]TSmoY\MF[g'uld1GTW-?@;H8j0Ro%e"NsM]h+3KnemBi-h\FL5"htSa,p]FI"jrGis#u7PEVK*Pap/HBWqi9_6g3t4XT8H/6oJ1FQcigktnbn5(dV7F4PlfzBEEr)=#-K4@R/(^8um/2@@lt,$46)&&K_n/jib>\hCULP(MHMULK9ppJpG*6E5mP@\J[N0]D9W'qib[8r#>Q7mXY-$IO\9Rg!9;b&3`mO,0[2mtF$2Q,tJX"Jge2jk\n=`_,$iX#@SgX=="P9aDm,cuEe(.eSHj6oWQ0L(QT4.`9Q,7PT9%'DJ&UXf5dc[\4T)eol!71fB$p4T`JST\>EQZC%BC";uR(bMqCqpDg/QCIkFq$]@Z*;mHm'-G!)Vp?!@UdN\2:NlY:>l'sJi%k?5!!$1&T7KMj1N4qa.8'5(q$[g)_Y@+_IEic#)#sX:!%i`I^a&=d\/+'<#i\o&^T+-V=T^hi!!!"l"n3CS"?lq>6C\*Cr!MIc[IcIp^h3WI!!'A+4p-k]BAcsL;]pm'@Jm-k5%b?"$ig8-J/5q5i">_m>RPNY"S""$?e*TfX9"po!!!#G!r*0d!hY$Z+\mS2IYI5FaHi%k?5!!$1&T7KMj1N4qa.1jG$0Rd"pT&>qc)^V]bG/Ubn_n/23+!!"U$cbLdp)7UIA'F<]"(r*)IcWL?6!rr<$TEXg&GQ^24f0Yu/62V)M=1.Z\CVXQ_!!!#+!'ULG^h;S/Lf5FP?X`l4Q9Jpjp^@-&!.Yj#BAaBs$sX0[$3]lLN*k,`kH"]V!<<*"ciWtN49D.+COP2^MSW]ah*9\pJP3rF81!M#/3j0-D*.G?cbFPI_9ZmUnSZhCre&6`dNRK?M3$PO8>!3mHj0QN!'gqM1[kZt#-Oe:SC4Iqd!sQL'h?F:pE!3>`UDM$e05nrG/D88.lI!b_K8N&VF/\#HOa5ja[eih`<-=(N1<(%@62?7i%q_m>YAk)Tk3!H^?l#VPV8r[VA0"($sU1-nad8hT!#%B`Fg;F>dA*@pc.C"&ANhCTN_2^2;g7j!!!"&!2"g4i%o=(XaPpa$^Nfaqd.$WMnTr@'\9V\phn8M_.TF*Bi4IM6X?1YI7#3AP#GJ/X*+O8(U!,]/$sIe\#*IP:Rs\qdU/lKobfHB&j9IpYQ&M;5AJh_A7iq"[Gm\KDU$p/eSsR2*?D`bBf`N*HD"d56RTei8?><"q5jMR%0M0+#SD=O'c9t=kW\5OZ7D0MMd:*G8gc?(8Q0>epln>8a.+\$."ghFm^LJ)5N.QnJQ@go7FkL%3IH1@CgqRE9PZRYL>;!,p]qdfW/8LJa)RV\$teD]=2Igs1hD]7B1L-2_>=$1Pdt)'GT,4jF6pIFnV(=gUhsFGd#s#%Q/8!&N^Nokn(U]c_+J!ct?`i[rL/aLl(K)g"*iVl*;X"b-K$U)nqOBG$1B7CT!*TApJOeWSE31VZ)(a*dddBeNMZ:>PcQ4D%glh@cI>_8F;Nl8iKgAQ(TINaAQYDo?uC4a*R&:"/la%tuAgjO59$"eS)goJp^&B)ho3!42_i"-:61i*'.@1GBnYeXB5)=n!;l?bH;L9fi]J9m8E5M9F]#+B+N;Vr]Qi`GUe<(iji#(-UT!!#7li%sj.Hj6`R2*QXpiq40U_FF8=)"H[$6;^VMNLREAX.c?M]lYOVTke#7objQ_P$\H7oColA^/r0f3X,1b_oA/eI8K^KJV2#(jQ7d8Vt:65b^>/`U_fYOdJ3)(b>aHO=)U.2qj-P($lChlX-p52hRjS`./44JRh#DlMiE?**J3Z/f"r`66ALRYD3S!\`38)TW0TV[%JU>3!!%Nb^h;R;p^CE.H@:PGr.=."7BW52PX7+tcc8edFK%h/7EWg1rPND0FDKI5o;X[;-p94:?bRq6T7Na3[N0]D9GbJ26N"QSK]br+!PpYZ4+$dHh6_^o'Q;8eCbQfnBIH3_-s*R=hCuk2jBdaW-WlHGOOC:]5Fsg95C:;+F!66pj)6R5(8&P%oZ#q6bJ>\nZ+2)F4PlfzBE"bQLa`ij.AF4PlfzBE)6*"LgOTgWg5h]%JU>3!!%Nb^h;R;p^CC8E=)j=.u[icdc[\4T)eol!71fB$p4T`JSQE(JKTDqnZ,jiS2K4\z=ob1G8)Q1B/]9(L`31kD$ZQLVnLKQ*e^EW^!M9Am!!(@Ip^B7dT7Lc$:4XO:L%23IqOBG$1B7CT!*TApJOeWSE%T!W&B(b+IT9%5ZNbd]!!!!a$fEi1#^ciZKfB6fp_CfPC?]fjJBn2q!!$[5Hj1XCcbQq"Va(g._Y@+_IEic#)#sX:!%i`I^a&=d\/+'<#i\o&^T+-V=T^hi!!!"l"n3CS"?lq>6C\*Cr!MIc[IcIp^h3WI!!'A+4p-k]BAcsL;]pm'@Jm-k5%b?"$ig8-J/5q5i">_m>RPNY"S""$?e*TfX9"po!!!#G!r*0d!hY$Z+\mS2IYI5FaHi%k?5!!$1&T7KMj1N4qa.1jG$0Rd"pT&>qc)^V]bG/Ubn_n/23+!!"U$cbLdp)7UIA'F<]"(r*)IcWL?6!rr<$TEXg&GQ^24f0Yu/62V)M=1.Z\CVXQ_!!!#+!'ULG^h;S/Lf5FP?X`l4Q9Jpjp^@-&!.Yj#BAaBs$sX0[$3]lLN*k,`kH"]V!<<*"ciWtN49D.+CEZH(+F]%7X'5@i2;g7j!!!"&!2"g4i%o=(`$l89Y:tE*9:rNpHj0QN!'gqM1[kZt#-NY>"bQLa`ij.AF4PlfzBEif[dD^K.94g&>."ajqnnKF>mn__rE[H^'hFt'#(-UT!!#7li%sj.Hj6bHGE#OCjYQ,XXFSX4WW''\[gJqW=T^hi!!!"l"n3CS"?lq>dPO_`eSci>qo$7NllFo1k:^(C<`Z*RiPa00c_)d?=g<^-B(s#,il"IZ);92r\T?*5$5N\G,kqeJV9`9H4p(cb!2'Mb)0c9J"4tuTB:'`'T0Bo5oCha?lZF,VJ%oKsG)$_=5(d"'Q'F@VZlM5B7`TEF`9Hb/3#-fFe^EW^!M9Am!!(@Ip^B7dT7LcXNR,Di,A?SRW-R`NhiNYDe?Joqmq7%&#F:U?2Kit`n,=OTSbAMY?l?A1NoK(8GkoL)@?YE+c1]\LLl(KT'nY.do$gh$/*$8i$^>MI2s]:g[l<\88=eZpW0TV[%JU>3!!%Nb^h;R;p^CE.b3ioPH7b.$iZE[HbMhT01@O..Z`[\&(ng"gN5i^N&l=bEoCJ04/@0eW0HO*VIAf:dkIR7^2%kW2V5pk6^7W=6&F<(GB-jesJ1XEO@+q;TAcmuT>)[?*18Q83(^j9u"g!'k[WS:O1l1N9Ib=eC98h2$pfr1h++Y2?Tr8D#oqRLCiP@.q1AUl>#ic24.5/W`,n_SW#[p@dAA/:.3_iM4'`6@/1cnInrPr^%7(n>0\,kf&/ZjfFur319!BpG-l5>ML;D+s9D5^s#j"N]IXq1d^@Lr\d:+`@D[HOtOhEoikSpDneN3C1RnslE2dF5S[.E.sq$*s8Id[5Q18aQF?0f]m:u0p:1Qs#W81-qeb4.V9`;&YEd+t@8GB]gX_tXjVX]A,30/qV9E'E37e>3gKA=(ef7A>Hp+>sa[$ehTQ`n?h3Y#-Jo*d\ReX//V=^S#[edh*cRFspKq8CII\c`:cc!.\WfH`T*TRPIG74$ZjSkAu`A'R@)*usFpI:-YfcEh/5r3GYKq@*?dJuJV+_aeNkL;&5V=Cl50ACqalV%8/E7T02Th#*Kl?enDh6Z;5!idU1VNt;nn4+DPDJgKLJWQq*6_mN2ifn'<8BfhD9X<;;^EIA%.qeF=moW0^sl1jjl?K.-_rr1Z^M4O-Q$aUVN0-qo/J,Wp-g+=XGmFh=El=ZZMRB>j["V)UQj%g'9=(@,F9.au9NlIYgkm#^OW*1?WO=Xtg)TWcr!!%Q7!'(.B+D9V927#IK3E(""Fs4cC#gXZUR5MHk=3&8%gV;X,1Da`J)4j"gA)buuc:!H21sUl:ika1p_!;2KFuMG_#Re*5oTN6/HnLS4G_SY6JUIFJ.Z6n`jE1efQ%Z+BQ9dod5I&hXqf?:a]c5cDW[rm6K[$Tqo&sc[\jWA8BfBFAV8`++HE)Z*1U+6(e!_"V)SK(Jqead^6Q$Y;u3@pi[Zcgr.L_ZU`Hol`>]XZds<%XsW&!PPW;OJkFU3glC9]Vu\&SO=Xtg)TWcr!!%Q7!'(.B+D9V9n0p-XFStsSc(3q`"iRZ"IO.XTZNbFS!!!"l3^D!+,KLb4(48^`.luhfdF_CDT>*oi^Yd>MbCh=NjmE`!YqUVQ9:<*jEWuLD!2)A73HA3EX&ZMT)q=V$KG3nPW473FhpSM@TgpY\?J5371R$o`(\%NIUD8PA5mNGQ\e/RPpUeZ2bfe(*Lu]`NqU1psOAYa)hEc[?%-KY;^++%jQtBTm:KcgO=s]Ql#%IB10Z`66jq0PT6G

G9RJk/JcWU(=a%o$WO)Jd\L-"JS,=m4;)O!-n?mgP6Uie)s\NL*$<-4a6l\H.Dd0fkihG%j*Z_Q%obe6]RO[7@U/JT4`&lNbiO.NqMX7aVgPSF=)>eF@2HV_t7(DoE"pilks*?IKR@Ngau@TF=m<#"#F/mR=G,4=^HQN@-na^>AIg=SsFj*iPS06",D$d's.9D5$e%abB+hl4a>Vmceq)VIaG!`?GU+ULQ9s<+PhM#2F6er3bojNzWWV;j4G')SCXk\qY\EF+:0dqn/15@,DOl0F8Q5Kr?9PJ=hdGOH6"+-OD-j8L$QH"(jLkKjpKsWn]S0"joF*Km@X%$T/D93c1W$+d,BKcf'5.=?kKA)Lr=Qf4AQuIjjLB^ul))l;r%clF%O#eNH$nkrb8W?h6\2Q6gU^BQ0V6'[%PoK)EGdH#O!BSAV.C7RNMeuAf;_f6IDi?8M;sHrk&*&,GY]XG'<@'YX=R.mE@b]V#]lnGdV))\dZa+Z:PY91@W14c?rMCTW$M>@mcj+RVcQO).q*QB]\G$P_aAb\gG;#*7Rc!NLW0oif?;UUqVu-Vp@!W`i[eW[Sg\cAe&;tb^B<]XjAe^pQD*qU2is2*BS8PDSoMl>;H1VVU&2E7fD#EGpds0R?^.1cd'XZn=Z:h66Z<#c^f6/oB$LI;h`t?+"qd-oi/M?lqnjam0H5H4_SY.a@Q!!P9Q?pf!Ym2VpniO3RrYQJ-ik#d9odhJof=8B?`QQm4puD2@=iO3\))c$2;?`dqnPKb7m21r,VQp:UJGeOB*eM1LVA>W$4;]j&*/>aU,)$a2P,!rWdd1nQMN&:9k8^lL"*ds-bX!\41(U)1/1M`mb45r*+.5aH&AE*$D5%ferkHoDBLD*.OEDf!nM\'LnHA1E**lYe8^#An%u]$MHA3EX&[HXZ=;eIF7,=>1g?JVphRAh1'p,(>_*]pY3D<8u9i09fiKQ8+dZO?cQIhQ]t@R\U"5H^QJGG+t>,p.Ud8ah9Vh)%j+!Xb:fY-NuifK[eok.8M"L^ITBQ.JfH37e%>?05"PG\&j@LhbCqZhnAQTq@]p#u-%S^a@NZ+A[5Xo.9K\))b9Nd>71k04i^S"OstSMcKbzeH'[p*^S)e[As+LLP0%SLcf[*Hli5!"s#p/Cf<8o_)`M\63OL2u(D`8i8"Xnr\r+`[i_CeuoWpTMB40''=5i`Z)`I/$B%^40)ZSUuNupE1r54;N?G-&sXEl+4-h[-m8T_\r%Scj"n4jZBB`#m#Es?r1j]Y:T`\uo8oun;,Y9)%\+T-utps01qS&B`06;<[eb+gW+S-fNkFkIr=/VNUF5,taYuA4rdmhmg5Xj@"XM'Q;oeJ<[#)KHp,iFuqG3^^8i=`MOh]@n;Ap?[&2oX]64'(2UTp`(2>d+7>O&Y21C*L#3\H?5Ef2J9+?D!p0aFl_Z68^[,AGLOgS"OstSMcKbzeH'[p*^S)e[;$gsf_WctNP@EGZ(/Iu=c:jtP*3qZP2A*1CB+(Ne&%iB>4l'(\9.E:?[n24[WZWAQnsj##D`+t+%USAfs\=q+iD;rqtUCaSt5`chbXRc)+jMSY=RGB]gH`&\F7q]YlF^s-5s=]*POK\[t&4VUF0-drmjb,Z&XYUfhXZgYJ:%Mmm'Q6F2ru!Y@K^%8]'A7s$NCJVn##nq,NfQkb\*F%S-?a9u4d)sSBBA1fc)o`_H2%%$pZ'I$g2_p\ci0:kFUn4&177)KrPZFY:Bk\"pZ%`HZtX.*2JhG"@C_#r#7nqdWW1fXg!Z:0,41o6aM?5TNlT,FqW\FjhRIiX^nC/\=S3Tc\9N+$Z$Om"=0L8Rb?'kK)UhiNGOFD>F8*C^@4u$m#27"Ss34b^l<=G1ql4!jou.olX/Zl^JQR>@[=&742K%qNVrlC+Qc;u$lgMUQ6lap,dn.sKNK$$;b-bLjNB)WOO%`d'5b`#C>9RY#0.?DW5-TKGRs+4*[VXhG+_T/H0Bma+ibK0N.Y5ls/k??hf8sENfSZ5O(+i``jj[(uY5O'p7Gb\&1LkSrPEsM$f>*I[NukuaEot68X)u)_&"1e)X^+#p]pbI)2=hC3Tu5gB?0!!#t'a;K4*3#Y>RN_!K(p)#Y@K)'ej.L\!!!!u#KRd-"??S9Jkpq?IYI;B=j!6lO>?k:!!(OMEX!RNcG6jG;]pm'@Ji``11q'W$ig8-5]qUIJObeXE%Ui!#i\o&^QPG;=T^Yd!!!!q*?]"Q&`a@*$U+`Gp_CfPA1;TN:eo;D<6#%?!!&+2lr+aA#(lq:"4r-#JKTDqnLIbbS2HOm1W]P+;ucmu#(Z'h)0,o`!'(/5Jkpq?IYI;B=j!6lABu-(s*#ml!!%X;p1sai"7I@Fi*,V!&B(b+IO.XTZ\H+QKC&U^"TSO1@)sBB+D9UNj:#9$4p?Q5'umFf.F@q"4r-#JKTDqnLIbbS2KBM).`bK-ia5I"%N!G!BC7[+D9V9n0npeY:tDO9:<*jEWuLD!/?9q+Tl`h:-m1@[GXt+LgOTg8sV5F%HIot!!!Eu)%%Mp>JSW*"5S1]Ipm!CAc5ObA!!!!9*jUP0a;Hr@3N1B7CT0K`kV)3?Xn$???R"ePi^r!MIcZBR@b+D1ZS!+:&m*\njNi"Y5\>RN_!K(p)#Y@K)'ej.L\!!'h(O?I,>cG1mM)7UH0$3]lLN*j\)k,a-(!<<+Mi?Ci-p_4"n4?k:!&-NG%iLHbE!gUiXp(F!62V)M=0e&NCER6i!!$DOaCi-p_4"n1#D,XZiNXA4OjVj2LF=jnQGManG2m@U,e`>M^osm\dB/k>5;TQ'KqA_+AA5knTQ/):Hg81gPE0[*r.9$Z5#,]$)>0P>ROoFtBRE>oRoT"T@8NObO@Rp/^0m_Z@<;o@pgg3mgS6e?;F_NdHqd1^+>hafP@iZsb9;:kA0Cci`ifr^aR1D,PsigN/#`fbsiC$T2>iM'eb<2_K`(d!$2l4#i-lTP-+;JUAZ3oZAA&Th\eSre2N9]*)g$!B9Bn`Q&tHidE\MJX/uC22FnR\Iq@P>[-rSh<"s`[tK;HDfTB::m"'G2k2Ro/:F*#%gVm9@hQX1U?S!\V4+ZX0J5?gS9EdJl<&Y>.qoceGkc_FL%aM$[jWW(O=O*=]^c)Bfou)%%Mp>JSW*"5S1]Ipm!CAc5MG%1YB20UPmpaX,jb;3UVKn1:##4NfpQAmar3?k1urDWNCK9($5op@cR=q*3R_7Rh"8r(Cpolbt?&qhTsF;p(&F<4CN""qZe]VZnkV')2+lI*^<<<-1>[3k]Q1W-,I-UA)2Li=>MJ:ju2YgSV9QeG3t8LFs;L_e@95Y@3_Xkmi+lQ^>4C_>a'XW'KYYWH<(\P=-WlU1ipqq//,,Ho\#.tO.=XH+rYM,D8"KNNr$Wn^[.!;G9E4L5$afMaOThDP/P[MoF2^Y.kRN+kPj2\<6(8t.o6/ue[%3j&*0qCmUjioY3j08Fb:UCSX/NsWLjaOW18I240I8H;rdUlI[[`Frh@h5;]9$X*ALUou.!&]Mt+Tl`h:-m1@[GXt+LgOTg8sV5F%Gl.1p/c0Qfk)!P?@IHIOj.*Q:oR.^F40[aoYTD;D:.p6jFRbt*umLf^/*\]ibH&G#'-fUq8N$O*7[!-*&hs1p*fX'4jP6e\sS^K*nfb,D7e./\TR0kqo/m"dk-qIG:SICjm76p_U6>phDVcXhnmBc?CP7$(Wtro&&!EJIGhSEFJ"A8cCh;K3ndFcl1EBM0$UKQfNWC4R5kFGY$K[ahep8EpTiK*Bff71=,(#V0b\1--iX*?Y]eK?i]=Y:NMnrA+?kKOmAT1W/C;P='/f4:';54\Am:bZ\EdgUfZ:$k-hMm?5BW$8-k^P)EE(AeIoqC,%0.[sHcU`-JQ%XdE%Ui!#i\o&^QPG;=bGV%J[qAB]OGotbZsK6B@[9!:;]Rt0.njNpAb-r,^&8Y"%,QHO$4`"m2%T'r`g'VSTWsp>QQE'^F;@tT)D/lbZScS^U@E]MYnC#+B0]bba^b[(R7)sb1U6hY+ETB:@h"m]XC$$pBnI#Oo)PkNDI%AN9l-WVKTOH6p520els0^W8n@-482hV'7Z'l+!4H)Mg?f6,^ZZ\9XS.DG3+E2O0EX?;lH=uNc%Z<.dIt0:SCZJYQF*liEV&mPp1Oo,B)nP1ZA/k0))qd["4r-#JKTDqnLIbbS2L)d):Y2hqh);2YDnm7C])o]ea']`ItQ=C1MkdRDoA"\m'W78$anZgIoq+T7lok4n[!oA#MAeCKtT<,cQG'@nq7!aR_nY)/SmWE\\dMI^8ttT5Pi=l?&*3/JXjJL!MO\^"(NUWVDD2S:UND>[$"R^D.K*T_j!=odaOJ4_ISUE?3jH2o6,uK)Ri(ptisdobhZ'A*Yr7\;`AKN?D&u^@d=]M+^ofAplWQF-:)l[(CWs_BW,tl\l[?lSDLTTE-/CZA/k0))qd["4r-#JKTDqnLIbbS2C^(B-;Nm$S6P2Shc$An2]OTDebG!cr.dh,-[i\cnQ[F#Ipq1i25Pnr1<=Jq\Vqj:#SV1:$J)a7\[c8_Kk6>m>af@ai0*Db=cU3+oafOmD*F8O.Wgqe!WrSFSKCTC;I9L+tk:>e88abm2nkh,knEi+C\CHqh5Auo8D9(!4kroj8'2,?5aM=:;!?^S:UV8q2^VZ9n1_Nr6Q);d-h8h%Gs+1?@_+i\XV;KTj]9g3[o5!$EA`c\Z>Z)79';><A^X:K2?=oeU1@g9-BpS3d+l[<4i"/l4P3rHG@4#%eA\cs<)f,Ak>a4Y@d=ot67j=3oa8p)ThWP?Uk(m_ZC%;s)Ub[A,f,2nrHsn)AcYI03G@N3qXSoT<-sXQf-r!4!hraFKe3;iieS/VEdHMTQgH81K]WE$U&X^XX]Cc5N58$oQ9,T@\m#GLSp4IT-9DC95b>1FMU4@\jjF"Fpkj%iLHbE!gUiY#X:Aj_F@G?3*DeRbHA1fZN$^kFSWi_PZ2gLONC83DluBNJg))r7L#0Bd*XFZn8C8pRko)QkQ[N,TjV.Il@]7g-/L^IoUmZbD?!(]TQO9%?DV]]X1>1Me7rr)RuZE]UjbnV%XJc3027:B'84&O;mmXs]!nq5>p)B5(uA[]%B4F6oNFSPWCQ>OmKg'o,]jk&C=Vo"3"*sDe$R5D^]BUt]4,Q"s.!tHfDr<>#aUO_`$D#\T0A6C$&^.fZ*^mV"[e!'MInBC>W;aG`9=sg)12^QFkcj?+-(R&ckjI9uYJ:*T@H/h4G\G..$^T/=d=F?'ot6`@K9^47CQ6q\8D#oqU^BDc*1q19Gfr(=GaYQ`>IhSaNOQ>l(=G^o)'hkCZNbFS!!!"RL[6/dEX#9)cG6ifc_k;aAs8u`\T(8Ipu]hj3[RnOCTBSDn;X\A:2YX&7]rZEHDa3mU\bMum_OPHP0u,Vi:NHFrONLZ1j%6Ba%u9s$Tn4W(?Z+Bhu5n/^7__*O$B5^QlSIVqX*%H)I')AhG1]Kd+8*0Tjt0WV$&fhq6`pJaaLpQrL,c*F&&P-^=nSkc5D#A%N,'@pr?1%jqe_WG4$l&;VSors/drCWSO"6o:Ln^lT/p\HQ_bb4KsG3UPJ/\^SO@f;QOIX#?D)F.c:n5&9h,VNuZ-'NO*/UO-g:1ee9M@K#BlSB)p9WV![3N'!AP#BR!(cc]lb+=V9h7K:JDj.B&dXN?%I_lHN44Dut6J_>/*Ji,:l2829NQPQo/3l:SQ_=Zj$]r%6*eSk9UfAC[lqpD/d?T53FNB?b0q$T7[g5Xk#r;*Zm.dK@6IJ]=*a0_8PbEr8#itjb:;W73U3qh*k1[%tK7FZBo#PX2$Cn]p;ioNp@!e_TW/R0cA@a?iD4DPthWhXJSER&MNrE_;'[_boQ:fRf^K4HEPej.L\!!'h(O?I,>cG1mM)7W_TqNR2AcdabTMHI6cUpTL?hgXI,+JtjCj2s6KfiE+<5[(a.".A&]rr-,uOnZULdBM0fnARDu"lsOhB4R26(4L2=^IM-#i37tI+0kJVq?@FVpL3<=OC;YKQTcMqKoDi(m&)@OVV\#UYQ+GlI(7%fP$7N^>e"m@b*0$,;O:@'L3)N2cX!c.4?cct'6UgnM'ZAC5V-bB&LS=SlSYikTP\%q3J3prrqsa8[9H=ng/B@VT!aSo'f^I5O$>5okF_JZW"]u5>1gD,NBO,d%BRnFksEZ<=j!6lO>GApEMjJ*%\G:j$NL1rq&k%*J=M0hO>CjXlLlZnY9`l+pFUYmp8\>UhkO/m)9B9F[:lm`a$0/cDVVlf@*nXYId8ksEUi8(@eD'V0nJoda5kfca(CWS_a[C1hZ!J&S@Lm2B-9iB*H5]X9qj111u[H.hne5oN*i8N]CrM3c@Sf=@DkKI;mgN@>Gh1TOe^`_"FC*iA>>WGqNSEuM'@eAh%$II2=bG1n+mREop="BA\OFP7SbM[_'K173"RM15Od/k4=&=2iiH"G7s8S?US(9bbp-bh7bKe2OO#hNuA*7&UhcqM]_baO^O`Gi.E:VYQU6F$OT")1!!&YpA.KQ>1N3\A#-Ls953;\59X[$/7m*Fr8nD"Mq?@7#%gUp0ADSV;p`%N$bbr]HUrTofoNHT[BT17B\m>tkdZT"ap!"IiBeW;ZWfA*D-!#[N1E(TonFLRoq)+PWAQ^h*HB5\#Wadm:Ir,R.t$$T'+%f%L%4>h4F@34\]VB&KVl-,IpYBX=\S1Mm+e<9K1Cc&TM76*/r;c:$U%*0;G"ZZ\:JkqM%:Oi=[8D(Glc(-EQ3_Z(V/pn<8K(Kl!Y@K)'ehEni_7m#n?0(]cIDe!Ye[$_R.O0`J7:"*4CT0Dh7([a=WGQCNhI_I%_i`UH^&s.k1u>)spFF@p#)8(K,mfE0mUt[-qZf#5F.+d?r;D6`/_V)AjU=ISg?MW4mBfR]:Anr+pWS7LB1PTgGP1;s-U)hP_R-pX/EO\=$ig8M+FD1[S:OV#1N4r@'F<]"(r)61bZTSmS:U$PjHB1=3JD&\/ma!XFHOgPF\o&2Y'e[i"n][eg257.NE;9]'c'"nId2Ch_EX&ZMT)q=V$KG3nPWiLQ5pPC8-.1+C2ibj'Yk!Ic/)k(+fme+`SAdttRkokidT3!_`@G%/rGTsm2!![D[Z72lUULhU"onW7+a_:\S:OV#1N4r@'F<]"(r)61bZTSUS3cr,KYSCH/[+&*f<@G+BmE?U&+rDp?GA(@AjCRcY\Dk+&S#FWf4GdNe7Po`@J.kbl(FfkcOuO3@-]9JHYIl!6/7^5qVj2[;.7ah.fLW4"onX2aaD\G6TCdrTao\&]*&2:S:gDtFTVd$As1M>_p:;]Or/M8XLm1q8>X!;8Um3.I/j6I&s,7e5gI.oa;MK'HjU#H.u[iW;Wb'3S3\6[Y,/^RlDIG&$?H<7VN1N3\A#-J-%!^Z_kj&`ON3GTaM!!!",GfUp]+D9UHj:#9$4p?Q5'umFf.B\5j(6Ph3*GpDFOr^s"]Qj#e]4,]D"bG2R.Aok^#H<>G#rW!/-k.ZBR@b+D1ZS!+:&m*\njNi"Y5\>cS'V8o39#F/sHp*gGtnXu(uVL>MlaITa/UflIs`XWF$ZX]i?uduRBQcSN4]q'p@Qn4D*kl<+Ve0'!G(V9E'E3^`M;ag2fDfTU2gH9`1g7a6V$HL%WO)]%$II2=T^Yd!!!#:6hZTB3$VeA!a=Q@,JtnmBV2i%ND=+oc)Y-mM:'5c;<57/@as!pAS3aHF3GTaM!!!",GfUp]+D9UHj:#:o\p_`-B7CQjUCJqa[F)@L_rE+?ofj$SHhSVj[-JjQ&J^U!>RNQEA1;TN5gB?0!5S)c4_-h'^a[>B\5p$6Phl52a_nSlE@%*U:O-8q+dG9/?%0->(Y@m%4$R/ZbdlV2E]3uY*IIZm9>4l(sq<(EEp:CnMkKI<(m_@p&KFTuNpY3D<9)fP:o]FDfDS6;&?7HhQ[W71>+_QlfA^248)#sX:(`ou<%*0;G"ZZ\:Wc"I"prQI,Y5K_CSYK!VV53/VB"#S2_P.Z_cEQb&N5e6'SOt%%:O`>!Z.%.Lmo)g+ea'T;$<0a5*H?fFF#:%P=&8)]X7+ecJ9i6%1XM%1f2Clm[OHRm:sYXt=F9"Qat<-DNZ(-1gcG1mM)7W]Vpls=p[eb+gW)'tHo*gHlYD@6(h9.(XIJ]<[Qo9#1q=7O*8_I2<><`#Y2t^o8m0FTHUIS+oDI>bBr;#q#jM]Yfgb,[*WA/$.%3"fTLs].SSACo$2bO-A\*i%:O>G*b\5XkhcSOd7,(c+3?f,K]W;blif0[b*=j!6lO>?k:!&-NG%iLHbE!gUiY#PQfAa;!r2?'b3`cBt>"%%a%H2Q`;IR0*/kJ#Yj#%;q7F6>4&?*GS5YOM3lJ*i(R>hd2[/Xm:c19uCK=AEc5bEoDMVV\#U<'e2<+[[Y/.]HFO`J$rdWESlc<,2a5$?HD4BO+PPZPKZGc7h5"FRZb(r;Q%c;/p<2Ic!c=)5sN-8]f;N^Rtd*RbG+@)>$$'5nT#U%2q9"s)Np2+_QlfA^248)#sX:(`ou<%*0;G"ZZ\:WWA_Y-G?0MD`u:e*^&d.3)&B$9k_`grqcN\'rs8R[.UTRaG/uu`gpNQaKK2n*[+a2H-T^Yb).(K?bXOJj)jOQ?oH"\!mr#M*g0e'>YMQL0#Ej:$+l0CeEj^po5lRqIeXX4JkE,(erI//M?Qd&.lC>0%R,9:<*jEWuLD!/?9q+Tl`h:-m1@[;*LT`$\f'gtYL"QO^Bf$S!fZ/E@5$5'm5+7?;oTcBoWGB0!oBO>BFn11q'W$ig8-$kM#Y#362_Jt.C-eUUHkkFX[86UhnOYmVL28Y:#ha;HJ(h>?k:!&-NG%iLHbE!gUiY,,[$Jt)jnFA'a9=5d'>XFZlB!!%Q.+a_:\S:OV#1N4r@'F<]"(r)61bZP$.!rr<$_aF-Z!BC7[+D9V9n0npeY:tDO9:<*jEWuLD!/?9q+Tl`h:-m1@[GXt+LgOTg8sV5F%HIot!!!Eu)%%Mp>JSW*"5S1]Ipm!CAc5ObA!!!!9*jUP0a;Hr@3N1B7CT0K`kV)3?Xn$???R"ePi^r!MIcZBR@b+D1ZS!+:&m*\njNi"Y5\>RN_!K(p)#Y@K)'f&/T%W,68gFmsWN?Ldm:]4M"$/H>bNjWJokJ=M0hO>Ci-p_4"n1N3\A#-J-%!^Z_kj&`ON3GWT&1P?1+5hGU.>)&leVsOGP"TSOq1h7+7O>Ch_EX&ZMT)q=V$KG3nPWI9;OH#E/09sXe7('">bdZ?V&5gI.oa;MK'HjU#H.u[iW;Wb'sDpCV,SM]Nnn[#P$CDHmMJC9NBA3eGU.EEC:(46GlnLKQ*a\q9&_0+&mh%/!(HP6AZ!7[,oA3eGU.EEC:(46GlnLKQ*a\q9&_0+$WFSOoqB.qC+Y?:i*!(oWPO9%?DV]]X1>4bN73R$!J=M0hO>Ci-p_4"nB\/'H!"S""$?cc4.XFZlB!!%Q.+a_:\S:OV#1N4r@'F<]"(r)61bZP$.!rr<$_aF-Z!BC7[+D9V9n0npeY:tDO9:<*jEWuLD!/?9q+Tl`h:-m1@[GXt+LgOTg8sV5F%HIrg&pHBVkjZ^"G67gF$k1fV#362_Jt.C-_5BO0^V]c2/7m*Fa;G+kZ2EU6,'*_aJ>ts0O9%?DV]]X1>4("_^AiAoSKZ>_RtKK1C9D#LQ3,<&p8Gf<1^YGO:C#Rus1E:ic!@[0]dLl^6C?Cm4AU(0oPY`qZ:2jcS2?g?S%UX_)GN!!"[n*\njNi"Y5\>RN_!K(p)#Y@K)'ej.MW.4"'b?e2PU^6,jEmIo1rkJZKQjpYOB&'6IUqf12](,d3Cc.e>Hcc@`+p/@ckM`pq?"mhJ16L.ADTC$eisTtR4Zs/b^$!Pp"'mpcG1mM)7UH0$3]lLN*j\)k,`"\3C?-m'f*>?:*aB3'ZQbc6/raJ=S_?k9_V<\C=TY"28qRC8ntr#80FF@/C?^m_)@CAWr>Pr!*cDU_In>eTuh26h6lc2[i@8+r#F3Z+&___7WbQg=4@3j/+Kq=_6_034X30Dk-+J8A4n#K3%WUTm<-W484HJ$7]9cEoa`uS$to8$VPimS@i=^I[/jQ(\n!Z>'3Xj:J"9Q1joCOXg45oq0Hn37fNVtXP)_omb3]%^-4oZk&!!,e8a=.o!6H5Ou!(.=N2B":2BmHo]@J.kb^Skp.CA]Wk(5)ZF8<%9E'\$i1s!_$()S^_W?,QLIV<+>`5(cJ6qWtA:NpB0*<)7bU,?NL@*migbY`pj@[Q]=)4o0jJ'YXO[M<6_aVWM`ILQ9X#/snhLYu!aWmnMjXPg3F9U6SY)\hXc_r+F9To^>N<^2?G1eXNSSLQ!/2PBaFKe3;iieS/bg"ci`?u3P,6B*j)`9Z<:U1]=`H/FV1jnam+hXAe1e1`%*0;G"ZZ\:Jkpq?IYI;B=j!6lO>?k:!&-NG%iLHbE!gUiXp(F!62V)M=0e&NCER6iZ=@=p;12`j2&gb^hD#!1^W7HO+D9UHj:#9$4p?Q5'umFf.?k:!&-NG%iLHbE!gUiXp(F!62V)M=0e&NCER8g'&lY6%NR`9p22;YgqRUNC@0#HfssP.Q]eDE1Gur6B+mp>)VU1>\!?oE!!%h;4_-h'^a[>B\/'H!"S""$?cc4.XFZn88jL[pk=+SR1u_tBMK'<-C?eK(F,!Kji/f_pTM/l,)3?Xn$???R"ePi^r!MIcZBR@b(g,&p'75J(m!upI%`OrK-)]'q$5kaq])P'sO'U;B-W,YZe#hWe1ISn9fZA38YOh#qX\tE7A^u:![rh:t*S#?d#4O`BV*5@hJ2UpK)3?Xn$???R"ePi^r!MIcZBR@b+D7VcW]"M"Rur'c_R3S?XFqT'->3+!fnO(=[T).p+D1ZS0Ot\3O>Ch_EX&ZMT)q=V$KG3nPW^84-Dg6Y\;:d'+$[E`>=_9g3`K14)*!bg\3LF$C7mKp>pdiT;p-C?UiSOEXLjQ-$f7gY]@##VIo(3-"W.#Dkp*q&b/:qb=_FQlHo(jaOSm\V@*ijEs@V`le-c)7oVFU';s*iRXA>3.r;$CHP74ntY1B:5tabX!;9(G-"-U2i=5?d.)*P\(s.=UGK;lm8I-b^r%Om[]-BuGG"A\\!<<[m4_-h'^a[>B\/'H!"S""$?cc4.XRTHT$lqG((S9@tkgAkZhnb!of\O4;OKfO(=LiU%`8Yq+2,t=Q$%)@fAPn!1Y4`5A&UuEi>%$_>MbC!J:KYn-00FUaEq>42lABWeD2hWLIiV&W7+?8^*QJfU%(\Z`i1^1cbQ8O-AYJFoHMrlTmCQ5PVr*$!dW5$D%E-kl[](j"pGre[Ou''*X+%chIY$M%CLPgla;JYi;9;16'5PP:Za[C")LY`ETqJ@N88N[u$jQbr+(Pm"O>Ch_EX&ZMT)q=V$KG3nPWM+07Q^0T.mjn!=oZnCec-u>JK:.E$3Qb\,_s3^OP-5i_IMQ.I63!M^3A4u4L/"c?Ns:-\);.@]j:%Q1S:PIlVa(g._YBBIA^21uT/5if)m`r"RTfBdg"RNoU3B*JZ"`Sm?Ibl^07*MTM2bADEe\oY\R'`9jRgRkBB9i-XNt9_f+1[&LWTDiUfU,k?dB2D+Yq@))lo';s49PD/ZI1hHpF%O<31+HFDeCu')]5'e^aYENTOLt?9!&fXUOC22FnXj=6?5V+G;f\:+)7:&Y[WS>MNgHUef,tAdO:]EBS!"@OJ#362_Jt.C-_5BO0^V]c2/7m*F#+m\rp]Ohq\kuGtOBM/NArbg^X0,dD9hq3NH3Sc;Wp--3bauS>Ch@j.dFn+m3d0r;b/JOHm,Y^$d^':e#$\&-_:N'62;_:^_C.#iD,uf!mpBf60Q)5!@*_Ft\4@k1rA7H>blf)+Z>=[/64B9UQJY[th2fL7"ef2m6Q&UUir&!!\2E+Tl`h:-m1@[GXt+LgOTg8sV5F%>2tEWYUT?o)hgk>YIa%^5E!lckG)"#362_Jt.C-_5BO0^V]c2/7m*Fa;HH2EWuLDhu_S!#362_Jt.C-_5BO0^V]c2/7m*Fa;HH2Ee_mIp0/.ZXP(*^p5T.R.R`ul!BC7[+D9V9n0npeY:tDO9:<*jEWuLD!/?9q+Tl`h:-m1@[GXt+LgOTg8sV5F%HIot!!!Eu)%%Mp>JSW*"5S1]Ipm!CAc5ObA!!!!9*jUP0a;Hr@3N1B7CT0K`kV)3?Xn$???R"ePi^r!MIcZBR@b+D7Ve9e9T7F)9@=m:UHE!!(pkfg>u)%%Mp>JSW*"5S1]Ipm!CAc5ObA.Kshs!!(pYfg>u)%%Mp>JSW*"5S1]Ipm!CAc5HnQ1W75'ko2Hg^u/(F@STroq\&gUe=kp0bL#43Kb>cb/l\!t='Xk-ec59lCU/C%Gm1%r;XSARZH'qZVg'!gT7Hmf-aIb"WPY'VbJ?RGkP%,F4aZYO)fmq_2n,I@gkBMWVM<\W[JS\1-6_p%gk@84C830#:;2j&gr-/r4tH]LkD\aN"*+T@6-d9Ri):bS?X`k)Q83(^j:%;?>0`4kGa45u:pOWNAh$Ycc4I7**PM7%fZ)Lq2`tPL;9?`4"2`^AY.]VO(RG"ZCJbHYO+ue6#)/)\a=`kR;^C,_h^aAgL.ADTC$eisTtR4Zs/b^$!Pp!pP=%G3h#(V7^Hd,$VF,QRh8-^Ac$WUnJBo+d6O)T[S:[8^CVco6&AQ*WPq6Ll)?ufi,U?]a2/a@tBBL%-H+h3-O\=9'Uo'>MhR!5q93Vq#g<@*#U5tnkasjuNoql)W_*XVc/_a2u._h@8148_9_=-]'8pj%tmps#/R]C(>[T>q!rqE1:'QSrJ/R:8Ph3W:<47-q:g5W^#l<2Nh?Zns.3tQ1An(GM#.6MWnr4/UV5Eo)(('W3%BMVs%/3hg#f##hpB=I7jfXRc9Q(us1Z^1g0YG3Q:&]qff1iFhN\RsksH5ebWg9,io](ZXKEX(h#h?1fe=h-E!EK<;0RU5;DY)YkND9gM-CChN9Y)TW5>ba\_^f.O/YR#/.P\OeSiWb-/I^)D9EH;/"DD=Zp,bl#3CVSmtlB/p(%OHEgVC>L9\nZ%)B&0Y\jEd6KUKj@2Lg!Rd2hDVcXYO/j2cf.l"cP]nHFeSt`p]Pj;"hq_oXZEEIP*27tC&.n>[CM:/NlHj6S4[oj7>k+F!'mq9HcU`-JQ%XdE%Ui!#i\o&^QPG;=lXSE)2&_44*L&Ch_EX&ZMT)q=V$KG3nPW]MbcY1q@'k$Z1T!;hb;Y+5!s%pYWd]^e9M)l4%MemQ;2);YWQc!!#t?ZA/k0))qd["4r-#JKTDqnLIbbS2EL2S:T=t-[L!d&b`O:/ff;dgM]c%N3qaV`3Hh*XZI"LDUHbP_<^0M$\I9fV^Wifc6,Th5/WN8G\X.UAUCjL_nH5X\rWoPd->:KT0XJ@BDAJm.pHZDGnDRG^GjQ8?YDaQqqmm9:7@W\#p),c,J.@[m)4=94ccR"8RRipSQlIgO9^*EA-EcVU\c<[q\Ff,%g)^c)]IbW3L[O!+RN_!K(p)#Y@K)'ehHlh!H>urU_Mc<,QIi6.EEPc+D9UHj:#9$4p?Q5'umFf.r1cmEOq`0?:!h`PWKhmluDRZ.Gi%]-X_GrM6*46Wc0&BuWl;KT\"R=rrN[VaEPXFV?eLZ$;hJc3mohcs(oZWW0p&qp]=nn*&aq.stJbn46^];(YGd^o[Ld`\t9N^>T[)MFnr`*Y??"G3qGG0$]Na(:CC:BP?77;!>EJm"/q97I"se*8:5OjqiC?"k)]p*P0_c%c2WQSJaS!2N&(;cP\QWe_NgX$iodTllcIO##7J0^pW*!+GaB5r(<81B+9L>)4Fa;hm<>r<_hVmUm0i5V[GLPj-D;:\*co$Q^r:YC[K,IVWM_trZu#RfB\/'H!"S""$?cc4.XC:TY_pRLW\*Z:KY2@CLldXT\6I%hRpDudb[C#[E@-/.E\N9^pd[0X.=?F"@1>P%bX7bGROkTC8HL=nC3CB^I6$,ifgA%t3e)'D?/e/o,TVu\jnB(<+pXM(r&-NY]fZif\2Cm(+!6Zc,qI\2be5(quWjBQSGc)a*0+M424;rH`jKsd]H=+5/7:oPH]UMepm3H_(VHM@WIMaQ;sfd.q%IF@`k]!%^@Y`Vk`:?Vr+00l)c]KOF$^MgqZ>G%Tjs"L,W3][QIi"t'6#362_Jt.C-_5BO0^V]c2/7m*FL7L,^Oj(ot(>b5EB/p'Z(R7)sb%mL#;Rri@Dbn+K7A],4!<[JcfG50d*JobgDfttH?Ch_EX&ZMT)q=V$KG3nPWf,&4#9('b8)F:,R1$n.$qFdeG=NYsn'BQ\fQSI(eYg9Za3WJIl"o.n.

q@=57fpM6rQ26(E$I=p7f%RR+N6iM@4UpNENK!%6=('m\k`Gobl6kbkkHN>1kt6cAPdRrk4.0rB^mLhZ&fB>ldmq2Shc$An2]OT=n@Z?,tKjl]???RJfHc"#Hk9)em0U9a!ZYGm8[X.J_s'!9?TBO9%?DV]]X1>4VcMkG6qW?GCcpn7.g)9q3!&fQ8A2m_+S7AZN8Dhj`iZAK\BG7[V_o1*bdfdLEY,e[,"QI7L5VDF)CT$eNBoRE+*f[e=k,$uC=oZIhK8I5Aq5LfIN[hp0=oN]Wfa1Z1@fFr28a!RrW?qX!r'o\WN"9'$KJM1YZBZK)s=)n,*Qn`VF)i9<2Y@*HaZg`ia0IkF=kB/_\S4hB@Xq8I/-M3"Rs)k^)Ch_EX&ZMT)q=V$KG3nPWCi-p_4"n4]XTA07.=3W%hfn)3?Xn$???R"ePi^r!MIcZBR@b(g,&p'76Tpd"h^T7idIIWP2B)SDj+n9B=8[rE/@Wl5u=82li@3>EuShl%jD8W'eVib4t]>&RU>RZ[I,MJDKK?O+=bTAI9#%!^RpSi@Rp!7#\>cLNM+,THZAoZbQ<3>aeS/^3CMsXK?8K&+!(oNMO9%?DV]]X1>4R(AP)6P=D?GCcpH)hGJboAfh+11dX0qkn5;l38$Mq8hpYid7Nc6t:sGBEZU,f#W^&N1oEspi4lZD*&6WbcM&!&s,7e5gI.oa;MK'HjU#H.u[iW;Wb&hn2UT=[6=DJB&s_59M-0dHFf1o:a*M).=7;,,E85L(Nh=/E:`cOp@i#_a94?Ne9J'Oe)lk!e^cZ?qXIMIp$_^tEAQj8\bX4b:*d2hn%f@s20Od\Z9BQl4X7Rh3nDa1K9_XkT/CO)23OM77#d!Y"E"*=aVhr?='r_1/sHX=qr[;C^>4BD+W5HphU:):(d!A`[VO?[g:)4ue\.r^ap"U&%+BZ_gp&6<8k'Zu>TeC7J=M0hO>Ci-p_4"nDXmB.47,*+cqf)`\[Cb;E7T`<+5,5s1Mm#UgU/j([cb:LpYLDc*D<=*T'q0MZ(!YdfA+MupQGh%\_uO;htkX^c+\DJMXN3FBYT3!jQ!T/2:ppOk!$N)^[U5uT0DD%dJnE>lgMNkp%uMCcLBA"rkA3-ju7"Ws"gOb1T^Q>MhfRWI.L!K\n1EtlSmXEo:;N/ld.k`G>.W*S9"K%UUPO1[5SmA^T`!=0=boHC[3qIZ1h\]os#5"$m458^GS6%^:@K-T>9U<\A]C_nf_rAoaGcRo?68@CArDN]aemCr8r2Bs!A]Ag3i0'(JOBuD>j7JpUkb.e4^ikGabas0'o4d)lTE"^?glFVgN">mU-8)glb1lBrDtMYFs*#+ihfA"Nhluq>Y']]hk"\(Y?dcUKqDU@Z45tpM5<-7:O2&S"F";13mA%.)mcK"G`AbhU\ZP>j3:Zt)H=pnDk,Wt#o\Y)aL)EqH)(rS_lHrrl3.BgJn,@X"h`GND\$t5!o]gAM39,M'SmhO,4L=/tkFV_8mJ9pKMS8-lH2W`34h#UjVTnQmr9.',0Ds#`:JLC'O2!nHA)l>4Sp9hZj*rN&NuWE.ET>s;q4GDWqAaD=VqV";M'(6u42Y%a[-R&n%m8G@k*(a00I4>m%!IA%G)#59;l&22^W"`KC(,H%3;PE=S(mf7DtcEaW:A/Pb3A(RroBO1B1LRq#9S5#oJTqB%,6*OmBXdhLHW$0aW(6LT;VZ]5'P.0c%WWPIr;i/nKED[_&*+nFkg]kqsRYYAi"mW2a??hs8+\['/tS]^&M=*%*`/'s3jn*]X>;\Skj?=(k;".,8Zk4nPfB^hn%i3nZ)i60Dp;ajRLhX2#l.p>dF:Ta.F5tAOX"6cS-(]ST`kjDg\eMN;pd5(q/9k#!51#4%",X.8k&Thrl(i5*aZOn^Zr:OS_`)_?X(9bkM6[&HiNod9t@flDZ+0OI(RAfL+paHs.MMAj0$#omH3/hN%a#5X^*lsr\si?e"8/C)6UR56b].#l5rZWIe_q>`a:/LabN"Kq_L&Nm)uSM(qn6OCAn,?;fV%:fA="7i@["rk+(>I]BLl+"Q(`55=^rQ7UqM?Nmud*uXDRU$N38\Yi!/H%([Po@+WTcHofSS'0O:J)3S7U\sp\YA\gch>_`l5JMK]GK72]q8]*'baP0V7q4N5(Di67mF_iSRI]UIp5!%UNs3.'/d@CcT_-f#9I3biN:@#4gXjp03qng1L0m<)]sIgM)R?*^&"_kN]QU8n_6b-A(f_bo0astI.jlC+*ltU2d]e(nZgWjSpAUMj.De$6f)9bfQE7-?[?;^\JJL/j#>lW@*s*UrR\(hRXZt`m_+,$^5%d,Cg0-SerPmk:M>[ddU_o5UiiC^^]*VPD_2%$H64$k%&*"rdCH/G\TrX^X7OgXr6A-"j%h_:\a]HMs%L1qZfWlI\SBN72td0A^pN?SA?[kCZ84o3Sg*:Yq(8bp;o?m7D0D@.B?@j]^Tlbb>Ah3RpNM?4a'%S3Z>&oWO$C0ecJ/T:^G@Q\H64$k%&*"rdCH/G\TrX^X7OiF1B9*k]oNSFL/<&JkhK+4gcW?jeTko^)#tMFhF@c36RY#`FRCSUDP#bFl9$rj$ig]3mj!IU+dAN@3qj=;2pZD^Fe0Lp"osCUpQ<;;&B`90SU66YS*.8j3_p2H!s$6fqoE/X#\@Y)c94V=c1>.ESYq45!J'.nI:TQijWLXh;Y7]H@Id[5](fh)=.d*ljV:PVb"@DIZ(8ue;2s!c919aT<3HcT*+6Mrdko9Wq8J1fGR$/)5;1JO`L'k(0B[u&\U!e[-R&n%m8Ej@W/qiC%&6>!N8NW,D2O1ParsYpCo&8cYmfGSf6!<_b$bspZ`\:k8eQZa*-.>pXcbPe>)c#_9NV7c4HOnMNjUn\%"IpNTcqldOVK6Du%;a^R>>!2SG.[G(rh:L?RDkUte)I`RT6K7.1O+r-8rKQM:An(4b-24u1b.6J36NF&.p=oDBA*kG]',1L0bKDr6#qID*Ca"e[ceNsp2d:j.TWgf($(4MSkcH"uF.$o;P@?+t@0U?c^^rREG![HW*MYVUs<1IUDt,3@t_/[!At,BRQXleG,kD1:sD-eHS1]:en"ZN/LPpQ<;;&B`90SU66YS*.8j3_ta^SH/^;dJM!mB*`']LsA.Pb0BN^>b.dISH49"l$[*H1PE%i7-C-cjlZ@jY0Kt`c2bZLoKG%_)+*!oU2s+mEqB2E=6HPkB)l=aH64$k%&*"rdCH/G\TrX^X7OiF1B9*k]oNSFL/<&JkhK+4gcW?jeTko^)#tMFhF@c36RY#`FRCSUDP#bFl9$rj$ig]3mj!IU+dAN@3qj=;2pZD^Fe0Lp"osCUpQ<;;&B`90SU66YS*.8j3_p2H!s$6fqoE/X#\@Y)c94V=c1>.ESYq45!J'.nI:TQlI6!";Zl,D2O1ParsYpCo&8cYmfGSf2bV!/@EGOho!I2fbpN*:Q]\hr"`AsWF9E>@!Hu>)=.d*ljV:PVb"@DIZ(8ue?C_/0Kd%0%!IA%G)#59;l&22^W"`KC=jC((nTSS#!51#4%",X.8k&Thr?m_sL7J?qiTYc$YVUs<1IUDt,3@t_/[!At_p/7tnFSn"fGR$/)5;1JO`L'k(0B[u@:oRJG^:GLljTTS%+2V`8@a"pMlZI!k\Ffb2#u!chA6AX6S:GfFRCSUDP#bFl9$rj$ig]0mgFc=+d\`C3qj=;2pZD^Fe0L7mL5rs!*\"O]O5B.AnQqF4[mN$'i)Kl;bk^o?KOe#n\2&@#N9AfcUO^4NUL7J>F\mT/AA7puLAQ@om@:oRj0%_$Sfbl&,=k.e4fGO[^$[.7mFp:N9iB)mH7fGP=T)'hdVeTko^)$$<;G(rD.#"_]nFe0Lp"p!k=SKX,d6'@I4SYq45!J1fIl'%n-J8QjShC=jC(TF5pt7!8c+;H@q3)Kl;bk^o?KOe"e$PZ=9PL7J>F\mT/AA7puLAQ@om@:oRj0%_$Sfbl&,=k.e4fGO[^$[.7mFp:N9iB)mH7fGP=T)'hdVeTko^)$$<;G(rD.#"_]nFe0Lp"p!k=SKX,d6'@I4SYq45!J1fIl'%n-J8QjShC=jC(TF5pt7!8c+;H@q3)Kl;bk^o?KOe"e$PZ=9PL7J>F\mT/AA7puLAQ@om@:oRj0%_$Sfbl&,=k.e4fGO[^$[.7mFp:N9iB)mH7fGP=T)'hdVeTko^)$$<;G(rD.#"_]nFe0Lp"p!k=SKX,d6'@I4SYq45!.7rg-cpOLPJRiTtJF,3T5l3abV_:-L1cK_h$,@%Rn)NUV20uM1!)-8I8,%+jD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD.R@A,Y=.E8Sr$OOjD)Kh6_:0T!OsEWI1cO?T_9O/pOsEWI1hUH_,Y=.E8Sp?OS\`eu8Wk>jd^1n,OhoNi8Wk>jde'o!N!sk68Wk>jP,=onB4inU88)QXC2,Y=.E[G0oVh>==ha0hW0IfkiZ8Wk>.U`F_hQoHtug'1-3,Y=/V)rI`D^Z/C,r+Q03!!&n!pDZ6qzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!'olL)[4\Y!!~>endstream +endobj +12 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 900 /Length 76815 /Subtype /Image + /Type /XObject /Width 1400 +>> +stream +Gb",kKmVVAgjYVB(H>TlTN&J5Te&[R_fJ)?Q(NKfZlR$cNQ%j#TE[_#83hDkt.Ebt[g=me4^?DR_D:7XP%.@6Uo@OLkpkCM!0d%EsBIU-dV@1Qa:o7j9uOneQ/QtlaKP]9MG1[+_NLJd6pAj6psH@&o)HA(@A^adu0HnghYiHR$_"KgaP&AB6o?XG7?p%@(Zb;>7gq^Z"DeRUTSVs'>dtM=Gl^oXWVdp[:=/Ies!+n^@Sq:[fhKki@3Gd\g=ZF`4nb*L?+;Fr`?cc^)?>R(%>%g%1Ou=2dpkU\6Sm7NAhn\*Rq]Tr4#?TRR;_m*pIAaYW+Tho7&H\9e*cEMY\Wh>0W1^U;To<0;G5qe:d;h%;&3]R9XhGB/T&[nc'<=t/WlC,`>_J%C8urU9YP'T'90\pN7T$oCrC-'6A6X6DeSfj%jB7PLQAS:gDU*8h!sm]'D:?F$^>u5lF!.oAEA-cT"WQlA$gFjR)q1^;0%idbsI`h"hD7UE2;:2\_CNB]2W2Z=JKqu';0/KnAR[lHkAInHpB!24[dp6B[;H!+p?(KkgQ_+\BLkpkCLfUqZ*(XEec[cLr\NhdG.<\)c1NVDNT7E@O7E^OfF5GoAQHf&CL8a=F*P1pi=/9YtgDE3CA#@p\e='n#i6>ACMkbb=L$\^*S6r_A2nl0Oa5doa3d'+/kdCCYqEq6TOc3;FQ8E^:/aMlWHXiRfTTo?@R"T8/HkbdFp83_+8>[!Cr57Z7dW0=>?03Z%5WQT,io&J5Te&Zoe%B=N!LVWKUfl=)+i.EUjlo@XT9%&,^]hrCha(8%PHj=DNEX/;nCnM9a`d?@4)D%L8[X[[/J'e6>'I-fosfeP&RXXL$rF*eE9V-[0dMRDgl!O5MpqK%#_obI7L7EVY1QJJnI#U=u!mV6KOC,,ag3_.c[rCY\MSU6thG=gsEr!sk^e[K0.cP^IUCqXB@H?$5Z6puls=C(aT8Mco"L%ZTLY+AXdG^4ER3cs\kSu]sNm-ULld6)mCS9cWF@KGbj!c'\ocX"/&X##,$j\?"J6psF27#eWq##Rh/`Pk&dpisuB^$U:7X!p`JIpVKs%_6Lnr<@=tlSn:2B9b#L?/6Ck',6E?X[Pi`%L\?%\mJ(#20[G?GpE1Aq[[POZp]At_Y=CMSd$Xd=>@'N^Ys3jq?`8[K;S)%X4LeV8(QYt18l&N:>H.->e9(7V/,@cr"W88rS=VDQG^UQp%lpI#+.;qOcu]iea'^*F>Aq,at-/nI!>a)SjdFa!+3OI0_[0@#/d4810Umlbo+]EFE_4_]9HZ@Dj1a?L1V'iU-`3$Y?"T)biT1?u$>Rkm%:?Ol:".WF4@cVC9oQ`o(baSHAfA$E#BEX(R%O?.$1MLMVj8bMp3eI0Ni_6G%"4IYNs$jVi`E+Z:0nmk!R6psG]/?VWd#0UB>1XbWJjp[-A=DQ@M2c2&^>5lV5e*dn^jFXA1WSXJPA@K's?(]u+7bKj)_HMrQaHfCh8X4'K_ET_BIa1aLk=:]O8l&tL0(u4Ec4rFnD&J5U0.r2_dU"@*+^.Ve37MFfDX8,\:SL3a0J,WE_aJe>#hW50Kc$7O,Bro%*rVXX8`n.;;%]&s5$'mWb?TO(ir6ie[kV3'?Y/2`Xgb?a%pQ3ahZjKe;HD\1ME?^3HXn(on*&N*)Y%I3J1g)eENc%Sc`\GYJ8#tJ;B#;Lko_Ee)_"?48)RuR^[O!3cdU:$<#Rj2?TKZ45(*4n`LI+T`Mlb0Cc/J30t^tce\CL=p3H1GjH,5@>rG5EGd%$AUGr^;O-u`V$RO%43J1*m9m%^*L9snRJNjr",DLF-XG*)F,]a11HDo:aE@fTMmLTW(Hf&9-]uu9&*+nti/Ih.@QT,io&J5Te&ZofZSADgZ(!EKb.Z>?39kbhY=Da_nmeqo]SYEjIq=OlIqE+8f7mKpNes^>1c.WgRdp7%8mK:tr\ZfW=^-bZ`Q]AM'@6qf[B.l[+md``Bi-`fmS@``o_9L)l_6G'HG>`L[LK0M#P+&lGk5>6=/jC3b&J5Te&ZofZS3aZ4ogYu.P4>8(o[TGR[@4,I.I-Y`a=+Ym0Y;?0iPn**BNDWbeHQ8u[T/*SYMY#dlD-IRE,<:2N/WYF?^9Qph>:ablY72/pQ4Jd<;PhKe!:H+P>a;FF)X^rOK5&CQ5t<(2tu8uU1SI%B5jr-koS*PI>5b]``X<%6!/Ab-=h(-Y?cK1+NlP:1dq,9i>7P7nSc5CX8kpt.#m3I2CIo)3YbET$I_lDHotfQt%q\nh;U8=;Yo7do2XkioDinaG=klM/KMkFr;)1h'o+ho\^^Q]>N_)n5)`%`dH)LMu(\(E!sYR$]9/D/g]dhLE%PkJ#5)#)NuLEkui.RII,+V1t&!EqT8\dE2.O5[0$+tFJ*T,YeHFIT.t0K<$tafo]1]]Q0UHfRJfWN=/at8e&UNb(t,TjV;r'5%*KM.d,CK\3UZ^UbDr&IGMDPR,>C?;dL7m'f^F-l4[e`+#nSD>Mg%87))?:2f7;rqSKY:X+-a*GF:">7K(k[^aQIf'5&qUIpTi1i`.I)R5JU)m(oHoL_iKP=.-C.p$ji)p)Q7m^Ni>[TMg#8WnI%&Z*UhW[klZ:7Etc>o9QJCG<9p728n'P)!S0NX@N:f480aUF5cu^Kr]6@qMC''[pk.E7mO1^/$q10C,bVV;s_nc/%7pio$nZCCdg,]4omNBY1k-Y\*MA8c.[?).hk,a3+C=]I7MUh\iF?aU,&#"M`%-AHrKY\^NV\B>L]`Zr>5J7_^C=aMK,4II6jIAr]5hhEWiHb,?r4%;N7Q?Y2,5HN#Z3*D.Mh3G"LN*ee*-%BnM4tLkplN*e(\m_(TK^Q9F9+c4dC&Gkc+-Z?tAk\HRkU03tj.Scd%!2=HX55cNT:Nt3-h=d5XT>'CR$Q9&Xim>I=1VYnoK";<<@]`$17=c5_r=0c(jd1^07"[r_uULEIUa3Rbbo8CGf9(fqX@A9a%W)'e78!T3D1mQBR9U#,roteb"_/k5ub.1SX(RhW,PO>\0h5X//8Qd)*IWNd5/'22V;%"3dZ05K@RXhdTbD6lLe@1YD8&H(<*QrJRbT2aqZO4Z,,:e_/b7t3gHqJQOW,oI+,@KgSffJOKc'(B7SZ&?egpejKY?.j`eu30C/\;M6"igemD09#O([8S.h-I?\ppkdH9BLcIQ>^LOHFB05pI>&\g%,Q'`pr0;CQ!.B@A(/[?)RekBIF"fG(L*ECE2@,AAhRDcI)kKh!^3KU@)p0P@Fa+cg%Mll(5o%,nWRLucHN3")p4J%#Hg3,Q+iL4uT.L(s;XZ#I76.7.QhWZ#"Q_-0lLkpkCM!gtJGjj4-K_T0i&"eBPN=I$p-XN`UCAocb\Xu1dI)!"SDA4a.?$SSCrc7u7)/;!E]lW)YhLil&eQ#&]SDiDR1U?e`\edh^CY;B1(b=,noS7-B/2uLV`"dX,Xrc60F'9r3SaX6psF2F:Znjgs9;<:7T#Qi0R350&*mIc_u[V4aedp.T*J/U'f9(e)]`n"12*d%Z`+0A7@PU!A`lb?&J$ilkuk$FN8:hkU4MX#KJrbG0K%#qM/9t#I$-dH%!5O2)t=O\upe7)_[$koh2XP21'a5D'ORb_/md(!)B6c[MY\T(^MhLsus)!Pm\)\o&J5Te;;._u^n<_?np-R=e%+rCb;Y[k&u$?2OsA7dK8>>>Lkpjfoa.S-HGa+I7+esF@'.Fc1VH$JV00llkHmNC6psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF27)VbU2Eh-R&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J).+sJ3T+sNbpApQoG<@N\L%0-A.zm"`AB*AV1!d/X.HzE"fNteA+3Uz!!!!O-YqSk5f*L$z!:]*k;GdN>!rr<$!!!#7QR;#d%HIotz!!$Ap/t2%VMCz!!$OTmN"0H1B7CTzA0g4Ez!!!#W.bm!r+CkHPz!6BE?2/47Hz!!!#?GfUa&z!!'f7O>?k:z!._*mB)ho3z!*;J3zzY(E/Ez!!!"("ZZYbz!!'M9EWuLDz!,r\6$l\QiJ!_gCL\1IKKlVJRp$rEf;8:eGOlNY&]^=GC\!PqJ%`lB?%_8(>SM:;f8'G8Z2E!2Ua1P_fVsZcsA?1^d[-p(iKP#,DZB^\X"cN1,;nhD!qP&C2G;(mm+Mr&;((fpXV(5O2eUQ5rgEE`e:XRT*Q*#/rdEf492T"'n)?9a;!'hktcCi"Z9[MFcCS/-3Gh3u?j-\q\^$Oh@BsTV)-fb\?[dOiU<&UtH:7I3d)8>aRnO8LK\q@!^#4b-!c\%"6\Ze9d:[8Llea+u7SH>p'1CaXk:757=<(sq[XQem)8.QPSAmCm-':)2=!3IOl'@_!\m`"6LNO\.CjID@q'g9K#GUGBsZr[ir+WpKuFoeFk44$jCFg5dGStHA^?tR`B(uHoUEDVIKoadmeDt;uR1L$WV55fU"k2]&O*)'Q].CLb)^Bk9lTNC-[&Z874ViC]6f_^]ir7b(\h>.9T!!!"e#W[MArIShG\1)IdNnsSsMu%kpS/=@ehF"HS5Z,:3f5Jf+/6f[9ep8rR]&M@uN>O`KZY<8KbIG>Yc5FJcU.h)`?qG0>SFG\.&@"d.L+P#b^$aO/M-?S4CK:Fo7pt5(l#dIb9Q"nBslC>]cE*4J93B;"d+43uFN)$]9"-5[kAft_?El`@J%DhL;G0%3]7njOBeUpAQCGtrVR?B_*[rS5.T70i(_IX2-feT!Q.hP%NW.iQIn+PWD""YTM,sp@]NnAGJqKrRO4p_25@D%^u:S2otP<\3@;bT,5YWhYEI\E;eOBY(6!DGQW9%c5:P<2q#mLjVWp!2F&C4jjH-5&jp\P7p*j37pA+6BBA`\f:mTaJl(*9(qrZs1)BVYDOn:2%G1im.^YX#=:UA]G9e!=*/l&kQX[dkFh,A5bCAIN!B?sr+\^t`Sg9l.>G`a5cpR$e9Zi+qMFd&-+.Lg\7(a^%]GkbCq:-FL3#A2's,uLl@$%99Q0!?k1Tb56air73csbqAAoJ_a&rX:m+@0DEk;0$5hf&i/R,5r"s[VeE%?d%M6^[[hKQ2?-7[%XneBXhN-5Ys[5?,>,+7jem:)j/J1&-dig:&:,!!!#?C615bcnDmuN1D6Wmb%K91/\!Yqpq=a*^jr4;gn(c-.JRPdlpP37Sg8a"`VWqp>=p^Y[R-(bEfFl>e"n;cqtIpMu(]P*'J9kgYWMtN/W_<=d"r2U9*t9R<,gj86h<6UjL/sXI^B"rDh_g,,ebQTe]pL;+UZ7ca%IaNhfs5W>S:4i8&_jWmkc/-gocrhf=5>H_kf;Ga9bY3GnBna5B%BbMS<[!!!!A90pjr63$[+MYj=OHP>[5X?PJ=rVQ>0U,2O"pf4Du]_F*\+dj'9q@"@Hb\bh6>K,n#`JZ0$k.Z2/T\S9a0mKRs$^qX*S@S%A>7>bca(jVo;![2ZMqCrFh/23Ka4*ts92Z1Wn:FRNir10baCSA1HYn%YPDs4q=9>kNFWqM.b\lFE%SHU!/\s3C1a#0YIks*b.W7P`5[_6c7dcX4>L2]`Yc=\a8-K(3/-Hp<8Fi#$i3Er"H%zA1>S;2!>WYPGZWgZd`>If(i^g@ImM[9<;9aGjt2Wc)5jkHbU,?l,pF!opRA6^X#nNH+Kb]gWht)XLs78P_[8N4T3m(@]S'o,$rIIU][WEr0^2T$HY0KLDHb_UrZ%?g6FJ8Vqt.81/g>AIK@2W@*Kr!orgb_ipt,R$5E/SCrG\b)2sW5nZ=4-O3fhYWbckTm!6.OqY:O0&!oPOU=ha1;N)*gar/]24_/98cOE1NargAe<4O.I'S7].oq'K;,\KYhDC!]t),+6Zfmi4!3IU_gp%J)OT'GSg=/[5&C+s9Srf6'n[j(kQ!!()CRS//.%'hd*a67=:&\e#Uu5V#F59SIbF\Y?mR%](HpT*W>]S[2\\Ar7PodhF+c_9uZ;hGOH.c5(58:nHtu?D2B"Mdd2`OKb#.a.b>FJ)6*VK4>Bq5/*c=)_/a!Co_O_1PgW^R9QS/96HB&H0\59@/Ji-h1+q`_hSaU?A>%3IrY&O3TYnYaPY]eokW0A@jd09>SR'lM2@q0?FT@L/_fIAL]\kKHX\750Kpi'\$C&A7bLZZ$aIIUmY$f6XCYNgg,3-$.*j_0GiZB:#&7D+1Di,_Bsu=s_8\^JajgkC1GM!966+8(NBTQ"5obe1:S6m1[SG_M)+hFEe(.'I*Kb&-WH(;IF#&aLC>#V0ZDACKnUGc(h>8r7aC[DE0`I*ng:&:,!!!#?;NN\J8GBst*P;!$MiUpmUAr'DI^:r$2=qbGh!4?&V#C62&@*-MX7Lu:YMY#T1/JZo7o,YAYM&BD\jFcA\-B_<3Tk*#%@:&HudQ2Ou\jCtZNqO](;+f:(ID%1\_ZX4M6F\Tp>2-71$AD4n]k3J5.8VK6V\j=Lo]F6*)PoB/Fl/[Iz=U/sO%@WeQI*'n6XRN-*j_K`cC@2%[f=_%@bg%Qe@"A6/(_B*)<=`)9(mYh_@gD]lS`H7IJ*a8A*_(1Q`XHCZunm8R2EW3V(6`Qg?77FbKc/NRc0dQi0YA=9%r00\">]sT%Ih`;oS\;K4iIC;rioO",;fdm%BL"dP,S0oPD+rXOlBnSAF,,dm#e>rr/2/?b>qG'sq(q)"uAmWXTk1p#3E`Pfh6>T.'oL^MrC:pJ"pP_@!!!#70$"n1176?MqTYPBkiV8oq"T&Ai=S.pmuqt1H^6(\^;C'Rz^iYYo!+[c@l8Q'GAc+m6b?V`(,I;_%z!8nRP$ih0hMjL-$VpD>IZXLQl^-C]Po^MRTh5I1HC[V6'zk(T<+z!!!"("ZZYbz!!'M9EWuLDz!,r\6$ig8-zi$uecz!!!#7Qm+iz!!!#/$??=Nz!!$sQj9u"gz!8o?J)#sX:z^f?IPz!!!"LWuu$Tz!!!"#6-]H1z!!'0RS,iTiz!*f[f!rr<$z\-d6\z!!!"<($#c'z!!(q,a;FsXz!5MTr1B7CTzJ?'f*zz=$b+3z!!!#%Jt)iAz!!$7-3$>!!!i`$XPTQ:KC?]dL[!&ZaanF2NT`)MQHMk&HDg$-gP#!8/MmM&N..>e3M=;'!fdf70!=,/Qq$>6HF\5LhKe4N>fkUS0oh76j*L?08Fm]7gKtD&J9/-bG]u^_+EGZ_]]![A.7mP2'HKq6ps^MpPTs2)4\WN58aM&5Xsb905n5X\!s-olo/,\I)W!-@+Jf+`606psFqOu&IlEWuLD0Gj/$9d+.76prj[3J/b+B)ho3F5_T"'QOCG6puZj1RLLL"onWW([cKA+_O&.6o6;PK./'Y!!!"?iI9AmEX"p"7"^XYQpPft!!"\hmWVAKB0\jQ1akA:.3rO+!!%*!Ib,9S#"1jIK9A$X6?381!&,5WG>05n5X\!s-olo/,\I)W!-@+Jf+`606psFqOu&IlEWuLD0Gj/$9d+.76prj[3J/b+B)ho3F5_T"'QOCG6puZj1RLLL"onWW([cKA+_O&.6o6;PK./'Y!!!"?iI9AmEX"p"7"^XYQpPft!!"\hmWVAKB0\jQ1akA:.3rO+!!%*!Ib,9S#"1jIK9A$X6?381!&,5WG>05n5X\!s-olo/1fqs6qWda,.5QTk2pPLCp\S3L`.+i;C,C+^[$RJi>dF@4LO8b;B$9.AbO9HdOtCnH4!:HY%_8'cIFcGR5L%W%!;NQ:B2H3OcOotB\oIUrorLJ+aske\'eBq/QQi?r3IKu<,2<*#ACHQ7n&FOnhDN#iLDTkTlZ'^u2maCVDfQW7OhYS/o$t>D)0Y._8@n1G(MIsO"",_0lIa;'Vu.'N$>7]Jm8;BJFN'\CgN4;g-(:,A6t%,s)TT7te^LQ.ekbciX#^/<>[Q\PPYYR*^>9?A&FTilDjQ"rTiN1.-Op"#[q%j*uks#+TA5u(e$HG)stq_b%l)>Xg]U!o0p!QcDoL/]eZk&Iq<0u3J1eMINudq(ZFm72Je]l6&Dm5qX(D22<="G\I'e1H4M'DlbUcrd2t!uH8K(,JtK`(27G_>T=g2H.rWqCPOZ>R^O1ZFboRbkpj#lQILB^M!EJGMH1gl(N-khG!YO6dEX#HUMOYj^ea*85>XZ+>>'7O`gG=8pG"[S't=H:2"1mQr4bp:kbii8fYV=60jYW3+jJAtrCIqSO,3l*f2'D;GVr9cd(P9tgT!F\ISY"0F3;E6_:fDKGVV8?QD$nI#g;Mg+DXb"@-K4nK,AHj4Bg&`$?*##f2mS70:!RI[)_FiSCE>VS[mSJXIfRCHYH$99gb1/^$Uo?W2m+X>%.=*"<"jkkCV0BQ>->bH.a'J3Csp6^\8_nmYJD8*qLD;i_;%%8V8:RnFf^Nkk;hP-XegN:"?EmJb89j2Zf=Npf#gn+>!pf=EBT`:*Na%i."8P'M8lSiUSq%JTa4r2&WSf5fjll'EHp,"KYES@Mi--K=)+1Y%/$(O%l?;bfadF&bp`B3hXBCE+3GFS]LdeONASG;UEh0uE;B/Z>Ep]a`KrF7#l";W(aN!hD&hRAF=#EG9700D/'M!rCYm<2e3Bg6m7]%k#8J$Gp2X]tGK5Hsk.YuC*UO3et3>If;eQ(3='=a7OF2%CZJ/9?QMQm@<>d]o>$`kCR+mY`5uK&u#&](R)GDDlqBV^ni03K^jNhkB)L5:Xo2aj3$lKYb?&K;W_GHo1_DGm8BtTM9p%47eSZqA6'7:,R^pga5@'MSeSV<[<0sZN7BDfU'8'q$r@a/;[7>tF9gLoSu/!di4pD143dia6HC$$?4D00hg?cr=YVh3p#]`sH;3-);[/*-590l-4*Fm;"b=bEiH6**f;r3(;=p_fA*%N)0n-hJhPs6NHrPX@Gu6sPTtZo*i4[cuf5oC765P;A/fB`5'f_qXY@Kpt,uB.Gp>dBKH&0u(2iOnK]+0E-'='g$I*`22tUjE(p/@l_H:WLk6AEV<"\Hlur@:S0Ra'4itB#k7%hPaq/\c6.:;^((FKkGh69F#4I`.nIrn$;HX=r9REU\\@,W=Meg*]S1dp"\>&U/m"gBU1I!@EcoS!?-3lO;/5plol">L7/>X'f8nNs;26JD,^d.Fg-Yg"O?NIOPqDZML7B;RGO4063hYoRGV'a+.9f6/3+p'jfXNp"c.aD9ca=\"\:!t\CaPM!HuHmsSiVrhkRXt)Hb*\2V_>1_)Ep&A,!tXnJ#+'(US@89p38M.FV"2j^Rs)ojE8?hn@[8Fg5@.4qQ'=L"@5V\"^NH0=(g*i\OY^'G7_H?ToAPW3.ts8sk/^n//FrFUN4RXUY@T*C6mL#j:d8olpY`:eSk#<]*)aAbVtY%NcER0>:N,(\QE:sO\GbWV/@WCT?eX(f!;ucZ;SCPnk=Mo;c3Hk%-+!X;fjL#a)Zo4jf9hg-kG*8[eA2K/aArN;'2.FU![nl-3R/0pPik#e=]!'5NF7UF5\VA4U*OlKJQ+3&[R)M%&VAc3Q(Ukr%Z0s6s6Q"]R0dF#2fIP6O`7#0D]OECh[%TQ4L!j9^0uHJ8FrU9pf15o@BI>DOn4TT.11nje'"']G)*lo"*__#uR]U`Rf&-X'FFpc;:Z9?+J6.s*R[1UO'bMj/0r_Gs"=*'<6!,QS"3X%!([.__MbuoB<+HD0=-sHq>U.VXp[lp=pSs37D%3%2DG[Q^fssc-)/l/7o9+C8nr6]="qe<.gdcdjJ^f7@iV9r&EfiY_VMH[q^mEemhS,IqW=AsY#Lq_&U&XTgRa/ER'@%Rl7*H"$1RLL-j:&=0cKeW]C'.VljXO)3R:D[s'4o@/Es>KobP1C!4U9/BOn#(#[q3jXm]%k(!o0e:\Nt[_^BH,Gl*T(q`J'2BTC7*H"$1RLL-j:$Ss)Ha+)("CQBW*$aI1=9.5R_)saCoVOKg%-$E?I&BV*r4pKq5&.e>B`DE9Ab6eX&R]cf5BBdlWMZALHg%u]6O.OCaQ'\EsB8MeB+4H1WYl?lg/=RA>F#g;Z_Y>`BW3nXQ0d"mnp[V$iho5SAEXKB>nMDDhuK)6/>OFG4.ZDeh1WVK8@%%$TB,+WmO@4gph49:4%Tukl.pXeXLa(?\K'fQEP2Zbhej54>tlfW4t*m@.CPnLFm*k=sG!0W5M^BOR&MhXM$WHqM;au'2BTC7*H"$1RLL-j:#NF:6cW^?$l<]k&/qakL2qf$,ObPX$9hXrr)^iT:.>!4V1iFn&C\rkEjI3e3=^_X8\*=I_0q)VXAj;f;RS#h4ND\>08aDU94;1dbRi7IW*)DOEK,g\Yn`i):W"RdD)@K*hp7rJ6IWW?@Hc@Cp(!YDgu-b9QgtA*$^E-!q2GHqAQEq3fOt'M9YKRVrSj%M(9]*)Me":GEc)s`&GkfbL=I,ugpVp!+h9pd\7h;7pu)U'(X&$fJf.Sg]7J?#p.l*KR7ipumR:@=7pXTO)h+_S$Zr-\_4nT-XR=dED(:k"*plB:gY$ih[L?cr[Ein1)[N`@[Po/GAVBbW:_fWkZheHqt46%)rP*Y!!N_L28kr6Eo\(XZI\;")H#811tQHO)0e3!4WS\#-/4U5=8^^B$]YBY0leT.BT2rHgk/1ZK_AF7-3,sO.O$#)OYR;cBDu6o.-"dc??G9V"eY)Gfgn)u-0@7)0hbC!=Eso[[jjeFA[/Nc_GKo:+lFF?\a,)Sfa]_p9nF8=,(UTVeFR?-BPfVT//Cu-3H;S?kg,Elt`QRH)qmPYA*$Zfo]lhMFpat%<%@Xcl->1FBLt)IJ*:Q!T)^n<11r;NVoEc^j+D1"SgGd2:7X7dl24-.GajYb-7^+CUGTIXPF5Z9!,sP[-FE.TES%"77VTp^Ss4@-k;89oO_=PSZq7b[#ctLZ0*'JYNA'[H[bC"^'((8]0e7ukm"dY3"<3)3=*'/@JcDjd?WF^FW.QPDkq_)P6>h-Q(s0@pUGa8aLr=OCIhqLqKC!MmL@51?^%\iK`Tha'[8kUm&cecTD2AeDoZe/%F8rcP*c0C9a+$j'sN:7aWs5:iqmYW9&%!rte6B?7CH47_WaHh$CGRGK#R7*Knt),-`LEs=p(CohP?C'IhrkAZ"*Mlq5"DD&nPS5i\J,u!+6L]L+HfG0)[-B=EN\GaNKB`pRasWhmuU4Bqf#*ZHpGJ1;/I!Lm[^q1RLL-k6us(]D$gG.&MCW=L`J7(YT5+!B'.$Z[.7>U#KXdrpqEM!&+T;$sCNA]%5cJ$PY+4ir"d0miEYsAr>XXVU4Zi"+W[D]F:>nI88mm%J(>)r?8YJLUUXX7P3dS=Rn?s-N/W!i+p4.XsrE?TrMheiWI?l2+sLVbaVdbq3o&1B7E*\T#A"'+rZ]9_%`%g!!%P[E5-/q3o&1B7E*\T#A"'+rZ]9_%`%g!!%P[E5-/q3o&1B7E*\T#A"'+rZ]9_%`%g!!%P[E5-/q3@fm,_1=h`lGKbjQ>Ze9&_.[4`a;PdtWl&,^q14Ob/@YPC:C?8GI4WTOP"3n(Xka<(<#3OZ##`U1n'>j`]GN`N+0m(8e,4M30KcX(&5B.%bT3__[.*&-7+`F";5S%Ed+Du"_=fI^C@>r-]plE+A=KDtV#_W%5,g2T+.l%k.&S)b!TOIX-"EWuLQj:(NX@BOC'&R:e]gj8`FIut)'CUO*3fYu4YKL[\jO.h'qDRI,Kqr&WHlUpV+`3.C;XX/PceS/4WmcMaZ9>^A>\@l]0$I(shDHL0u-bFE#,T&]kIY0c1Y>9AX7SNLu(GV,BK9LhMK$70==L#`Z.O>?m8l*hob:YRSfK@&Zp;kaLKO6o+q`p:,'k*)N.Ri3NG(@QZ!(D3uA"6FZ?C>.*amj\a%/C5QQb)j](`tC.?2o(D,f/:MQY0@h&r6eRZj.c=VeK?)XL/SoWI.pS02fBAKlV9T5-oX\-s1)+r`Z6_gHE=KQ>.9KiMjq-=Pr$1IR+6[gE(!rg1.tQPX4J\AYX>m.ih(KZbBe'd[hSH\F)+5Pb[cf(j_[4J5=6`QM>H1P"0+gs=>V8p&p5@I&q!`4u?I5-L/+bh=*[1c4dg_k_Ju;U=2k/D27WkLoSIfm.O$a;K)I*Yp+1hJlI1la4dTS72&cq4b1G9YC*V]MjmM`VaJ(`?n+R?0$m#Gl4qf:L;$,4a\kp^=&aY='B?Z#5-\r%\+YVrtFR64a[jlF23%*"sZ.GL^A.AG)r0-p+diNYANCq>Ie1/@uEl&i_nKS*?mNhqB)Q'1]5RCKgao"4?S)ac6NA^9nAp!r)R[i/cN:mo=k8([c$ss%l?p^hTmm#oF+r2DqT3qS7\9K3C@>)lF/d3:7]!h:)P`J\5;]\>LQl#:*Lmn0e'),jk?Gd+$42jgR+A2]a'GH",;e9jsmWdDu"-$?A<@S\l69@/m"`*@Gu7seCj<(=R[6Wf#DlVTt'J)q2>f5B6r^4-hlol`&:s#.AQ,pPGl@S\n7[9U)kqD3&TQr7S@Up-R&tj/Ir\7!6%hbC6!?QHs3*279.dF,"^8ROh_6LZS0[d2td(IJQi4eDCFSR7[qM/5bm9>W=uoXiVIAg-R"trpN'?ofrj(E=90)^Z$)o7aGkNIb9NeY";b/Zhk43G2Gh\\TOqRg-dH-NIQpS.B%"B<\U>1roORUlHfN563&HDYl=.u#6^M4`7(/XF!LlQqbeGJD^?Il2gaN3m\HIlI*Q%(8Vc'Yh6q.IC8iu2aq$oae(j_5["YPhi-gb(-r]>)(*;1:c@L@lPA&on0sQ(2:#ecTqbNdSQ5Qlq8eAP.^5cg]j]jM/DZFRNqRo$=XDmaZ+,3G3fUs8&UCd\YiF*f9a*!<91q.(Rja_rnrh;>`n3?DjjU-<;GH>eT`&/lfAPVf[!7'Ba:jV>fYi6Gid%[\2%XjU_(q/>@CcEep*'rU+_e742a35:fnpX&,qOYd(Oq5LgdqYaf.MN+Lo//8At3o-XM^ig5as_%`>$B3;`SX]!,R]H)#OmIOF&/j^uZQc>`5@Ee\]OZ3'(q3\'$V(dCal]nsb2\n?E9Y^"^L14bFLf9,U&q2859ghYu1HS<6FOs8m`rq3t&P)"hp]M"km2_E\)):WG#Ee\?QL2r$GXa;P(PXcsi]6`A?Wt$\T\8C[@d6RL/Ln[Yi0OXZg3Q(?+Z`SD$mnFoKl:B3.$I,.uloT/gPjmAtGpapb=jFF?1FPopjAG8=aM$*QeG_g)M1=)oe5EtZ](\#5g@UNf-b5iMgl,"7hi:m@QSUIj'HR*A]_lEe&Q)0GnErYYThaQ>p:X*$E#n!JqMHc15g`3-UHb\)AkL@qUfEJ<'B^gJD`rIob21=NT.'_%IdX)Gn&"XB'6uaaaaK:o\pA4eOU7b;[_=[t\Q6m>USc3LQ3sRkb^(.hO=e*=U`%?,]B[0U3of\/S>!bP?+]hMlgX[RI1E&TVu3G0G53+KX4%Xm^I$$[9VL-\##XEI%BLkUpu,^0`l,m2%"7gGQ6",]#ALVfL)mo#M&1FEQ$i)bna2FM*o;@33J6mML=9e]J"Ndg[m(V?EU-Ag`UatKDH]a..9hMh1OqPAAmJZ*$.8=CO-VfDoI]UpqF<^T9oaLc3cAYYT!i(u3KQ&+`>@bO^>nSWfQX=@_c,,+:7/@4?Fp4s`l\r;21:L*3bK$$DpCH5tW$ELpWWLf-+p_?EH?jb/M1Sk!Ji.[;'-i4*Ic(<7n\:7o\^4Ym-gf%h',rl'pSS)BQNQ+J8FpaSNCT5Dninp[-=VOfACUd`DLllI^43W(&EsBJG6O?%G,<\)@Q0TM@k(^pPAG@3r>=$PrXq.*ooH$-BX(9SlJ+Un_F/dS&lAI_"mZT>9Y2s^I2.+@I8^=P]s(V9g8&ZMG:DNK%n\7:&p@,45MHR2]R5;5=3i$KUSiQE>r?ndEh]\3$s7mRbXLKk6()iS`QMN4HYrm`_G3JYQmokUc]N'ad5NXCD(?sCo9YI76dr,5.kCJ'Eu-&#D?.&b0Y#SA>oN6-]H1!*K['];E)#BD,pkT]?NYOIQ=O!6g/o>uSf^&.oK`9$UfOaVb'Y^g+D,22.P$&Jq";ofgf&J5IEce&ZKKq&/U&^d94%&T,V!<<,DL&5.Sa;GO$&Ih@X?jb!n!!'f>\DK/tSACNaRs4,NGBB^+__*1n;L\!koKRVLra.REUM"K^gcI=[Ba2b"+eg/@K./'Y!!!"?iI9AmQfebf?UXQ-1>0jKlG%i@b*h-?+K4O`q.j>,,Ud`gF<2i&@(!uPCH`8if1_EPl8c_Lc?/J3Z:Fq7N\,$L:-,^>Qi"h+UD9ddq^uM9&+>ClZWAOg2f(YHT=d@s+25$rn*DNolSRkUF27Q(Yt'!Z]rp8Z\*nC'&1>g%A\VmS#eOWWCq4f`k$JOds6%Ou!('.RsRrKD`nACf4D12Om.L7Fh!rcl^m/:qQA3)eQX,N^7@B-\TiPhT:8Wpq>Y6>U#M^*%#A8gj:%oIS,iTib_>q";d>eJ2#*oJ.)n^GCTB`jjp\.?hYHT;ic![#MV"DFN_jVTaSp7[g5S1#](K0>,77XPehq6l.qa;q0rt>Yi/"lWAX94#<3K$_@#&X;`'QL!1OQtRpLU,;Hj=%*p"m05A/)->FX2HkI/&O8lqtk9b-X/-)uor[Q$B-=arf)*DT[?_^/>0c@f4=qMWY^bZDB&^Tkr4e*TE<(>\%9r@9c;CX?m[S,r0GPaoQ(Ou!(R%NFg4]2N6E//:R^1>AN.lPHV_O@ob_#ZY=@1%oq88Y6pW2XdjM>.p)ZCF8juSr.P3O.[sDmS#>Pj'j,*B:*kmHq3FKL%K9;[4`.Y[1]15V'HPqt8f=(8IXk^/(YskH#E@L:e%M>6Dr>5JR(VIhm@KSXBJXg0ZXrkHVi=g;ot/NTNgt:`_JT5\=`ud\^"1:CrqkH%McO^--bnaR=;\p-^Z8*dYNf4eajHj3`)._7W=uoXiVIAg-R"trpN'?n?#J#u0L[ao`sc82`Tc200ENV/(PZGYq,P;B0+9PEs3?dXB%%Qo(O.lt=PrMR;Ao$$4QjRC`:OdlIBl]dpU'Tt6P!._V!^MA_MF+t-.&'-1[o(abDJgaBZ.2d:n_h/bfs8&m[r/Ug1/,/poX&H^%cMn)8=sQDaq]4te;6CD3`]D+&Y"Q`Af9;n>!,M=\3p;ZH>o+lRp#>>XR=nlKW4(/[2B3CHQOIeUCCP$'e4Y<`iO;]OF7d=G0rFUt+U>+fOTd3%JN2iCaS'o,J4SWWHA[2O2/lWLCbi/-H\L.3Mc4*6c/:04!VU&V?)fh>'UF7hV&R57O*Z0^5875\9pB0cAU-"eocj:#E?$5W6ZQG[4]QL1*rOXs$")/mQsMp(Hn!.;``Xsl"'hSf2'g@%`mDUgo1Es>L9Q3hB']G@>WrZW(;hM\V*UklOFIspdbj<:6mm*b&qM/=bU:p3U8)6SZ1ar-YVm]"E.T'U[hl@$jY3j=G"[_4%VK.th_s7LF;\`P;AIrAf3nDG]Bp?6dH]Vrk0s.0)CI1fR1TPgSE/Y9\:C"B`%9S%A&cH3cLBqUIb'1B!PU&))>"Y4;pEi;%.ecAtPNoQ07OEp4gA9Yoj]X5@NLDJ$-q\)_f#rl&CtZKLbueT2<q=QL4D6dGrT_s7K(e3Mb!=il!mkI&d2,i>;([9tL4rf"Y[H5!p[]&"R9ee(*NO6o9h_%&T,V_#]dh\oWp].4H_#GO6-K^WBX:gkEp(hiPb.RkokKEH6tEgR+'Y\<)/4@e-l8P-t7`,&6Z)GB+9M9/KIOVl$=Ch=n(hJB.d4_Q+*%git@nF*7Z@#]^,tD`nBN=#cjH@&%!4c9-Id-*"'\kAQ3?Y\qJC$t1k^hrcI42D+t)T=d>i7o"CCrpKF?&CDSBcCd9)o',J$c[h=11md="Ao5DV"3)k;JUI)F>4W`TTjq[M-sGlPonR"1@jWj*cPeub[TLk5ot-g/M7mot`N4dZ7ST?7fHQ2g2X_<=Pp\gHC2sNL2*7584`@,M5]*!E0XA,mj$O:M$I7tV*E>FCCs8?e#YnHS1J";?i?KosLpo00q?:DOlH/Wr7Jn;k]onP.%EX)IPW.3E>b,c?ChmJ]31E_.;Ou&Il2oljP/6UpN:c3S`n)F=tr+V7SX>JMXk+]QakHnC`Q%/'Mpuq7sqT[aT.T!c_jk>WYX]#"=iR/GqlapDU`9[@,O,2C@6XM:KmbNAk^J&^.@T/.qcji=drNC]r%oQ(G$`lmbNB6eqQ$U1FW8C1N@0)?eU?JMj,^+C>C4@,66#^\Y#S7Pj#dI_U]`!Lk#HpI9n:6R'f(@BP?JWLIpquUn58`=L(H8cElsqZLd"'O>E]uKBEi[#>atA)>*A>]s@ZCWcWskU-cNi,YXVAq&DrM2q)&q1[NnH>!C5/EQA&W`VaKKmgk+8]ISl^:2Enl%.1Y:C"g.2cMW.kam7E"aCP)X6(3Aq/Mf=2]akndB-785UC0L[8(_Sjt,3L;m&m(m+u3*_oBub^J&BXkV=Jtcp)]3=)TZqU5G='1=Wr@WK&M\>QB/#$OcP`lk^F9N3$eCPb/VAB>0@^))uGkG[7^PPE_;r[!sQ+;1ma9\bfIgUni$rCPsWO-VY86]Cm;E?BqCbcKS2*r,^/8-2J",=ea=\s-togQKYGQgbNM%E9Lu(7F#:VS]:D0Vkqq6_61%`Ak_:>8sKd1nM9adR<.9K.O9c.et!AQ)mYngpm/*1QJK2rVg'eZI1mB63baH2?];$%4d;N;57Uh'"c-r94FVm@ma+'08O('R_UPhZi%OVb[fKa$sV@IbPQSALM,bn3G6Vt1[N?[h3kTSaFA*3ca6,]Eln\KbH,QfpM9tb&-P:a61>c%&FVg#NE^U!-3S:%Yrh:p7B%!@$CfNhc/1-Z@1VsBAX,YN'Uc7/rq>1F`ICCZ/1r8us5PT2enj97P>h%2pVY$IBpD"mp78q[3s*o^O0N]Q"g;7IanD*a=V@o$Iem&.@>AO(JR`c0R\-4uMOZYSY#lp!AXPEp^0"Hpc0O#nrGgq&R0=*A4[BHumG(ghpk2&'5(g"!T=p&Fflr9MdeZ'n\].6H:O0uKW9s)ZP:SMtP?,Hip=$StXZchkc-4>I3B:n/)]+U_Z.^lRuRL1MHn/8<$H9=Nt.JO;_"@8;@n/8_Imlggu2(ecM`''!K=es0RY9,4bH%q-%`>Sb.b=o`mIR/PImY'4T,;XE$em5XfX&0NGhF\L[o>WA=k8A"mFJ38(28Q'9Du9d26+SdkqC[n/X3XVFYqfi`MIeorTV'Q'FTd6OphWQ,E_+>c(`ALJp10Jng1R[Rq$br%.OUkLh7mM;"(47L1I)KS5u=BmHj24A]?g!9nPfIG/=rCjHNC7/)!b*s3osauI_KIX?<+_0F.cap+lYKeKE.p?2Lq&/7SPp'X8r8mhbiHO_@W:*]fT&\;_0=C4=^<`H1!l.'e*R5W?S1;bZW9H+>5F'b_5k-280KiXJoitP8ECn#0OJ+mO\P>^[HRC`s>P0_]khq_rc"FB4G5smRJBn3]&-P:a46BRVd?g):c:LTN[>D:qSf1e-&B8;(*i'DVisFG%4U7G$Pn;&#"6?A_%9(;cD.sQEM'QUZ))Qo;P'b8M-g"I.b'?l!"[fGO1GEaF8'%Spf'G?$btlo:srNLq*2P6aqMDKIYk"G#7N]kc.R1h^*=.qRq`+NKkYso(i#,QET`Rbp[=5lV9Uh?b!%M8+M'4c(bdX+XX1-aN@IpT4Ho)/_,6'XBa<"Sa#Q@P/C.!u/+"3PDB.HN:,Sp^@]:5nI"0"eU>Rna84&$O-*1T:s]-e[5AW!"#aqRKB)^Jfk>NA-tL&(P9t@0&SN>i%k?5b)>pu;rBGs&-P:\9YkB"6LYl:"agLYHj0R9H*P)!$@E$`Jfk>^.JO^.JO\OCPpMf"r;t@V&,Z:FLu,e&&28jB_C'E\;!cGH4QTdqr'%4Hga.I1LQR\V,03'3,lC28%X6%mQ@?0pth4u74U=#h%V3=H2Y1(s/jhiOLEiQFuo6l9k3kG\@%a!8MmmU=2k1:1%J1NUh1&S@?8M<"^5r;'p/"/J`\%&sSb1P*G="1pYpicr0m:-fSL87`#[Ej^=esRBMHjCjJhks409B3R3ObXQI3@Vc_X/-+qle_X7jp6(g^IVT,"o=)F5MU1$V-3ca6,84aSQA`h(?$Y`tm-Q0WV,:Ir6>-%[=>$@A$V5(g@'s1,r[(Z2b"4??O-5A)8WQfBkQ%c0PL]c-l0/g[E+7s:Ig*^-]6&R?EiqtLUX7X/Bq8a+7^KkkLoFM*"miOell74U:DfKP=SOWFY5j"&Ms->G"V;C)srK(el@WXbMB*W;@q-/D'sX\u2cWSoZ2]:.d*+&C9U8Cc:ihgG=8'5S>RB7M*q&&Do:6LYim!!)MBoj(Kip"i)++U*M+)L>)F\b+JOQP:Sa4afmRo;Q*";>TsAB=,>?n@<9lmWEAN%2psh@`cBV]iE6lT[2!!gTV],-T0?d;tI`'mM,Y%,[7+LZu).JKWPsZ2g4GYeF4?/g>Wi-s/YOus7icKSU+$+bOcYbPe#;sZPRNdRjc#=3FJA+7C76"iq,6hJ"U1SYY^]h8#SF+]PY#^Bp&GK$Mp!'Fbm$CQ_B8rBCO"J7^J07An_.V[mn/23+!:Y^8>uOEU&#=i)QPoBr`?o4jq[>FO5%gqDZ-%KMcV]AJ`1oC/hmh^N33sbl_jaa3<>bBPRB>=k(c?9BYDo+9^T'?!f)BdZ.bd@"l/W^TKRt#CPftfmo-m$H\r(9uW[Pc[QSCgh!Q0<-oGOUN<9gOL:8EA@F(EO7C?D@"&^:fkM%RJ)iI'k-mqP5+3YLuH2.[>g3PNspH4:iI4U=ZBcQM%`6)!$DZ).j]-E&eep,.8)0O'k2UTRXSCCp5;-l!'`eQ&_0gfY$83q]6H\jL0a[P\+LZVQ5*OP44d4A<^2S$9hI(3I8N*ZGT[]d:7:q(Esl0"#'"K2g_Sa+:eLQm_nYeUS$(Rm8u3rgf5.H.7F[dE'UtUe6*uWBVq1#K=L5t1K9-%AiMcf_K:p``)0C"kl!8\js(]0oEK=2^k\@,Bc:R7al=uUHXHdNaK6Sno"pfeh'RU*;"J5\p!!$A.h_h53Hj4.rkU/(qUo(Tg4oVXb%`01Z9#H%2@:Q/R_.N`J!5KE%G>5%RT7QsDAY3lfhK]s'P[8=t8bBgW^;B>B-DopJkrn>$ac"K?'.ACEI.O%YlX&Sm#F#Gf%(*VbopZ>-B@(D\7P3a,Xc#p!%Y#$]J\7Gt^a:#uOSF+,62#DO&A"ml7\]CB9o&L%/lcaL`.cB$*Se8'B;r=NX1+!G/R#E9l3TOm53>e`e#:oY3tGr&u9p!e7?D5cP9Fg@:Hl30WLn9kZFbbm2VG7u::2m5%S.]Cbr#lt&Ho"I1G2$sX'%!rr<$^9G=e9#^Q6UmH!5IAST2jP9b#l:qeZg3NQ!^5,Mq[f6!`^#@lEgU_L*;TI%]R27dKMHC)mGbj"&MsV@-HLr`.K7r8NHC;`.h^XaQFIQ/4^Bj2dT_4\&JRl\=<)KHNh"i%o<]jUtH.-<'[KJV<'@8(+Qt9TuXDdn"G:T#c[m@BAc,G)#sX:n:gO@;lnhgB]@G(^[GlArH^K`X6NIRDOpMC3ii"[..h$3_.fh>?N3OkL(7aFk":b780R]+kdK!&I>;F:48%C5GmE)7R6F!Ymep920;s64TmG;pT:qDMT)i%.(3iP.&GQYF"@3SE;t([7&:=[BRBPEPY@Hm!Xe+S,d&i.sOqJBlSN20CBZ1mueWP=bheBEV;B("b>?ej7Li7t>"O"EHe$Ce'IGG=_fIpAi3\G-2m/a@J#>H^6M0D]Nk>>YU$13NTU'eS-^X(1JHZ@2J?'l25R8ckjer-T9+bGZelc1joRbI7Z7nH=&Eti9e,eK1:g%n'J.'[sks_*IuJO&SfWJN*;G!BRJ7eX#X=nT0MKbI"mVnZFV\g4Gkc4c;WPERI;j^jkQE^MJPDZ52\4^&-P9qV%n@^/n>,L"%/n_]mChgJLuSYkC1+c&m:?]oXPiQD_7h6_Pau/Xd(X9[>$`8UN[gGXA$4r='3a/4C1u/&B5CiNM::X$R9KS=.9X4iXAmC:h5So+gCZ=.4&P/'0-aVjdQW<7I7Z7nH=(\^J2Xh#d">@dIb:$VQ;.mAcbL-]5/VS/Ul$tlnelK>#2kT1>Rl6k[)SPj&Z2g+*p^@]:5nI"0"eU>R=cLbC=:hj&6J&3ckH\)'V#PH-H?!(O_f(mEctZQ"LTIS?=G`bdQML71q`g_MPq>4Jr)DuWKdcim5H_:>!HN3QSd_OpZq;K%HS.XZSZE%hn3C`')Va*(q[]L7^e+p^6jt(7*N`5aCfPP*L;h>'V"Z1_8EkQE)1ej?DmFe&AN.]qVbE$=(d#*hdq\n,ND0"pT(2\cC/MLsM^q*)]fYX>eO^p,n(c-O^KR89>:-i\Gr8QNqY^R;J*S[T\FQ%#;jlb4V_.D7Ap,B2l1$!O9CkJiCt-R?QAi!<&L@J*Do5(hbDcT]71G9oF?<,>us2&0'pi%mV0"@5k\'mp3<`4O@2SjT0\pgmtMKuj?'QI'B]+f!`ARLNP9Q-CTDW:[]E+\3\(o6H(HHc#[h;eO>)g'/_CAsLlNFiuEd-s&JV@Xj4eaEaAN>X!d.,@s'b+>EqBSq1[)2Phuc,iph@$qX`O1.ta:ZWP=sL?q$fP>Cc;hm/.@0HT^$+:*QAW6u#:!uKtQB/oe3D\T61FRj\Jp>(YJ=8$O'iqU3X='oPdUnsu9:RrpEd\k>r5g(Clq@o1>;OF)Kc__oucd0t?muX9<,2.A)gdn_-VkiCLjHT6P/hU;;QL.+'3s"*rU1LCR1G[tL'7MubQ@8!Nh+igZ?_Rqf3>99ugoXH2M-B]Hq+Fbd*^53E,Gk,\B*;mHMg!pV@"&;D=`ucG=E(8ol_C?'Yl7U&qZ+U)pqlZ>e^eeE%EBb$o0A'0SE2dXq=5iqb)%io5?lF?etIG;=tru[I2Q9r.U%qK/Mh)?pC\8YqLr'9(,Eu#S:q2^)JbB9Ki9MD7]ArZ0+XP$lfkC<&eE"Wj>L,n@P!$5!rARC?Ef`pSl9+1K/l8ApB*.#sJH2i,VTeKaN1qV"Ofrg7"O<<8ft?*%VbEYheEkG1+:*QK7dq;*&FVeMAO[Zq!rtUJ_>:;``q:4hqTf&S.e][AX#o"eH$8L4B%,$M8K!5N)$Dg4dmr'OeRu7l$H;g*->0;($M*^o/A2ioq+_Hh(9g-?rbD9U266S@]eO2n@uB"PdclZG-7C]r-m*s,@K<\+:*QAM\:CA/d.et?f3^?!%KAIG>0fScQMH!bF&=\C9hm9/mT>?b"Ci01=0[DFoQ%GHHeXMjjUMrs'k]k6_24Kq[K+gfCO2;:QGNd-i,D70m:-fSL87]#[Ej^=i<4t4jP7R/O>fjm2&PB2j]*JO*&7fn!BAc,G)#sX:n:gO@;bZR7O9U1r[B8$lM$t#d9^OVe%Gds$I6McBd&N7)".B[;DeU.R@D>nU/.JCMrpN^k^dXTP7W^2ZkYW-k8mItAjj1(>DP'u#/rcn(JIRP@bJfpfr4p)UQcN!qFJ1n"mRSj/M_jj/2.JOW5W6LhT`60q!B+XVil1,^f9*o@jD:jlQPFC`mWHhiNG7+@#;H`9@[-dFDY_hB<`\&:aZC9)^e/#7/q-S!jrPsD!kt)bH<2<3[+[MN#c,T_K`EU3V`PGc)%N)*N&I]+#50r^F\OCJ)RY2pneo:l,SnRnW*'m+QqmGbIKeV6Y10j?#NgBiJnHH9k/8dFU7GO.O(]/G0mXbl$Xt"^OZf1CX1GWHo80+:*RX0),i[#X/=j!!'a;^2&V*I0PS:/Tr2V@:Q/,Am)C'$Q\92*Y6Y7s&7fn!BAc,G)#sX:n:gO@;iL-#YaGs7WpW:FGh9[)2f(QD0t:g"6.Kf,F`$D,G_/>4-COHjWg+d!],3.okK%c=iiT)L^&M$[`SR`gRZ1`T7.;'@9O0@M4+A22ce=@^bZ_53\b((oPTl_cZaP*I%[F&3e$PfI4)_keIb4.#En2)rJ6ECFW/0?4AHR_bMPmE^h0t/;_nj"oD1*FgU0eK[F+\nR3Lq!!!#5YeFl[Hj0k.+:+,Zp^CC54p(cb!5>\OCC5Fn#_F0)Ot$/7>R3Lq!!!#5YeFl[Hj0k.+:+,Zp^CC54p(cb!5>\OCC5Fn#_F0)Ot$/7>R3Lq!!!#5YeFl[Hj0k.+:+,Zp^CC55(aGeCtbaY?2NZ[cBu3e!#V,"WC9GjA[\5%ip`AlO#OB"!^h80?#_F1eK$V5d.\"a<@]W@j](U1HQ^XWu_gR9"h>:+[U`/os)S*6=dX1KKopaFYdg^4I!/@`W<7\mAuQ!TUmu;8qQQk$Qu$&4;515;6I!\Sr@mck8BN,eG5#(:pkF^h-.8U*jfBNH:CAleI"JB>:h6SUp?4?hUc,)JQ/t,F/od6[d;Yid\lldTg\b#6bSj%;:>k(_tC(DIYB4a$1lI_;0o+S%Jd;npV:7m]4[8p9Yneq#io9g2qC2GA!4#_*r/beHnXJi'g\lpt`JI#GaL/MbDC-kW0&lgF3]D"%OSU8b]F2)%WPeS8'VWHNk?'WQ3>$\d'KN>i.kPP%r1Ks"l@mFd4HY5L\o^ZjnO8n4Z/fh[/iCn_KI32!/6GX1hl-nf!41KL6;TGnBRm'-=[Sk8gj=F?$VPpNc[`s#Bd'S<KbO'1oc,QKBun4TB&lSg18i1pqPn]QR5@*f!!WH$tE&cR\&P%,uaD)`uA`rPi[-GpFi6cn*'UqR5Jkl.3C0(_AQr9P0)Zk.g?>jrW@OOa+7S%%iuX2"[SQ$npiPESrCpG_t,l8u8k$.R0"l--5@p<5d:C)VG\i9pOKXK7*$nCsciZr#;m+Y0VSHf!DbGZOP3h>>XNCAJ@nGDEF38]`Dr*FBAbP1$7'T?C9IpA'GD.DJKOEc'KlQ@D*ml]#+mBVCP]MqqeHDr$Gh<"Hc0d]uhBrlhX:QuqRYanuR95/ZgGZCQF&1B>l*T0ZWp;L.pQ9aaPW"m7PpY1^V.Dq6[IIJ,_)Ti8S[K.#H'q!(d]rnYV5"q:*s'M>U!q$_\,G[HMVQCuIXF6F%Oi9)_I9BS7]o*egK/#2tMm%5IJZfos:,RWpURrn#FlW`Y$`=Mj_AYIlPrq%BqiF>dJQ9E:g?-Vp&$TH_8e%]5h]"6@n"/k%qVl^Hb8'CQ)=Rdtr+:B!5"tjFD5(bQdih!AAi\qbYZ)8VlbQ6tPigM[0ZG^(#Al[jgXP*l=buo@AIQf9/iq,7qC8IP8:oREf>B[I>d^u*!;k^/mLO[?b*^+M3<]rP=\o[U![eJS4gqpqF8U`Irg,KAe9B(4$?oU=he&JLCR?I[?9`VL"T0ZXI8B!D;?j-_KZnV:0WO.bSRO;oDas_@LhK@2$ag=b+/ARCHfg)1gf):rclS\R(Q;>[freoJ(bB4`4lo0%7?dIU9fdOY3LipYgkr*^VZo&tF/]EH:N?D;-)b#\AIY"l[aLV8FmfP#:&G*>Dhga124[Q+[j(8Rd'Nlmmj_+dq;spc7D;BPDmin2pU7?!WL,JMbrkI0iD7b2eqmH<9?')!WfAP#s:cHF>#Lms2@q49iqq9/Vs8GJoU#K[_56EujqDY2If^d?)DRAggW+oTsQfd,&Sn*8ANj*BKERDqR65P=O8MpFr*PML5+NR^iT7IAQT?k>-@X?-@-![:J95C;T4+N:cSIuEPHIr-IYJX*\d@saY\NLW2glP]V,F8o(+c00IR?T2b^"JZp26Id_B*OgIb&n?@B!u*[-OR)CY?Gk#BBh,JHVhT5(g5Lq@"I01;BjWZsrDt[ENDFKi.]%`,pkGCGtZ!2gLuSW`#%35/Yg1D*peiW?k#^8G8I[W2XEJi?<@O[4'h*_!QP:qLpF3'JNG3WmpMU`3oEe%Ap)t`nfh*YtG$V/#g#uT4)a/(>A6-nAfMt3@-bmoDJ.BH2WV62JL"U:hog2TDs`CP]?Bi'Ar%?C0cq(9'bE^aS`Z=j3A`BdF"bA2CY?`#hLhYaj_H98pEaY#.jktapKg\mr1t?S]as]"jTr8B;>n-#T<;edc5p/^s$9if@EX*C_jj/2SXOigr>u81eggG'>fcbh#5/Ba`2S]BDS0l:#i\q*4W/c-!M;Y]s1C:Q;+OPjXbIlqAhLc>s!:)p7o*JibC&TACQs92iYa?:4+*(*S@Z/2#*#!D@Hh.FhPt-Fct@%LD:jlQPFC`mWHhiNG7+@#P-%WhfXAs^_H%#9)nU2gCA83(D=NLRs4);KJ,EB6:;*P&AblfAb$=5ufo*=m9b\WB*&(.&,&0iHfTUn`$E2L$.WhB.WjE7rg6^Wj-I*MgH(K+:-,rm1)".G3X.Mm0Y_LOKAe-dR[HoT_J'LZop.L@T7+\@`]`sJJm%Z2*6!%^l(a#kD"%D`?ao\n6`5+o\V3O,A*>")Giu$<])D+51EU9IL%uTq5%RP_fTC[MVU_C;Wn)=AD\isq`IcFOKriC/0RJ`e),#^V'kWMh+_/X`P6"c-n/8#JT(:1C]uuB1X(%:!V1"(;GFu4lkZHr\_riG6CuWj5MJq9i=Ie%UTA`MGJgu`UON^bo4H(1hs5fkU;786UH4l6BMmGk@G*`>4[+oUoLma/cUT@a$.07P1#l03Ii$d,d(IlDu&eUW[;KBC@9TkLJ<_W$@Gn4t0,V(LbGl7@'tB&FW*6mHOY/ElKVMo_>>/T9-d4pT^o;3$15'=fKYY#hcGkRZ4p#2+*IJ$U+Y/Z3$YL@J8%b19M$G)9a-?6cPCr4sba0!1uP\>!o;Fhj[G8:WY/^HE,P='>J[-LsN;@s(UF0Fc+T5>WYd_q_Tc\.D:9*7A6%*JP`^5A`c5'/SOep`3lk;=*V/\.HrVss3@6R\p!6cQ(kKdZ`/6b;/6ffH1+>3=rs@F&lhL3NnW!=&jCrpAr6%gX$9t$6*%jq.r6oY5(epr@c8I524m2#QqMNqf@5h$k(+4-X5E^9H>fN`f:ccIO>OEU2k9"[(`6*^ZdJI>V9cX?I>(c$g;3uQ6`'LSaZEBc/Xn%`RtQI_-i=W5RVbQFiDXa?-/X/^gI?LD=NK'C6bsr-G&mk4`AGgTsg7-#-^hgeV9.pHSq:m7hN-UI=?*DpG'o[^q(XcQ,MTO`6l0M/2<`"`SR*:F6JREd]2=mXm]!J)KUb<)9$78DgXDA.3;"Y1Cp;R#t`BWd\;NSXC[rLNmoq(D)r3!\KF;lPD$b0gKZLJTb+iIWOK8$sKdhW5[PbFg9'Ai=@+]-s#pWfXun[&jO]HaM+ViJm>_;8/)?93=4T_V5hd3\8YTLK6nF"/Ch1Folfl&74U8n4^gk+a*c$S)ATl(a5JP0M@fd)IOD"jinaBXNI7U6D;'.mn(s^u^O?Oh%*<'$oofk<>`3YBK5D[Xm7CV^"9Mjm.]_A.O@p?@-N$L5rbd?92h5:qHF\KrHNFDjik'5g^$Z)%%G:dMBIb,3aZjJu!(P9s5=gH1s1713?L.isnI!PcfJ^5Gj>s8ATjkE01NZ'peVtd*^;`ep4^_`iRs"XKGkIoj3q:iK&W)C[\WL4P+Ntap/&,(JmaQ:8d;oeq2H=h$kOKeZ=b)74M3kVCChqpbrsQ->/>.%]Iq)K8THK=uL?0YHWit])<1U"pO7uQ/Y"+MJ+n>OeiCk^RKt?6I^0aLMHgkV66gD#"KktQ>!V-nRU)?)*XnYcWh#Zhk?&%moi>B\ZW(Q`FmP9I"Y'a^8gU3A)"S1hpECO*>8CZMSofm)XT\WH5`9C/Yp`1DVffC7Jm)VcU*$g>eX),f0XV:rm?$$)IKh%#IT6ak1YpZU_inWF_fb&\oFV)7WTYO7('7?BLYdbdb1,g+(rl-s$X(=R[1:eG2bHs'67)%'7:!:"J5_#E61<^bT6pTVO!'&7K@YJB_oZJIdnkY"WjCD8!@:;c#k+t]mLC>n1+D`2E\]e>l?+E;T;@ab/8?n[[]nXi5rWYOg"@3S%@>;.A"Raa8N`I[=0(SYpcS=1I7'VX9&BI>5V%`Sq1CdV-29bS4)dfD,d<r>Y9Us_NI8+2fU#n^MDSiAU`O=)m)RgD48%S?iIZ]WpK)bf<:B>Y'b)!pGo&"X-BcK>d8,b/Q9fI?G/sGB\"^l/?GY%S/hC+gpo5pc0]R$V35jK[VX'GLa]8&eZ63b@juIr=rJjWpi3_q<]Lo=%M(58aIm.`:R\)%f=G-Y22atcp8aT*h'n2#OP'39jh#_Lhml[MQ'F=A:>)&EDpQ"DS[p9MA,t0iHj0k.+:,!SK$V5dXOUsVaHltnkr[=-RDSuir[If3P_p'aoV;e.)j_B4OCALS=es5OqiR%WRY]WnrlMi=HC`O9X2mdBJXsnIJ3#EM\^+BOW5A=[T0@pKn>U(B$:f9VqCoQ]6:G(8#iMqKn[ah&FWf6[>$fi+AoK;:-Z3M-K[\ASoQVW7oM@Gj75tM@,8V2J05,LTLpa0$s^kWI>4"W1YGjm/DE*6Pi&W=V1mDM40:14=mslZDt3R]W=7d;)\6.VfZ<#)Z'%#!"9_>,NL"?F/X,:1UZ\n/(o-]'j+:oE^9MbH_^$e%RLp,T8#-8#qY_W`:>Y+VoOa[4=mAS2KUSa'd[^29-ibgRAsX"U/h7SS;$HJ,pssKn\m@!rY`*L?*W`?^L\MN-sB['haU[1o[9'Q&7_B5nPrSr8Y"iK$TOcHoWc+cCW:$^2\7jeXZO2BhbjHP>HPIg9n$-m-sM-"!&/Sjp"Acee"H>U1WY\Z5Sln6l5Ks5QKRjl$DfogHSH\[hnLFLH907Ffk8sCje$dImTd1Lj6ToPc2@Na2)de3[>+Gb&iE>N<,I?pq3e"I1sqa*<'oM!<"]WY3G%KWV.OWMq@5e&A5Rs)^kF8!cd;1Mq#lEUVc'V@db4BlQbW/1]L,?+F3hs,fhF#EP!ebSI`Vru`GCimrdR.u:o;P]4O6:WC/*t(+aNq+PH)9Y'.dkfi\I*<(d>UF5!taa1J"u5lgj.H24m/Z7@2=C;7#mieU.SsRGfq%!Vd)O)XBKZs/O_8^96nbf[MDoE,AiP%]-Z#3cq+R6?1:6LX&`)"D.#Aj=F>";a12=%;CdioUon!/+b?m)/C0hRu*qJPPPg]nXm-c+pC.4"@8,%_.V[mQ,dP$^JoLF=q4!k:-QcE6V9]Bbad#,md]U'[!Lh2*h/7qA.F0O-/W;&q(:?D9$+FE1NoY%0D_Mn#$1$)jW"Wgci$#O6CC#i0L%qgcWT\)o/"I'M(YDdU=\E#)2>=ER@g0D=VgDoqHB'Gl7&Y^j]mCbc-NSYP#s1X;P$R6T$):qB6/B+G`)f=#P5N#BJW!W&)0'p=p-T:f)1>-s)K^qa9R&C8[aqrj/eIKl3(_rph57Z8ap^Sp?`T0@#%Q>UR9:I!7(X=IB/r&sMCAr<`d8^o<);`115IV/?`5QF!#[)Vsfp$+?%(6[)Rcfkr[>^]dih\LU8V_h,jCdGI-9l(+Poi/''4h3Ff6U/W"bB:/.UI=nnD>T5N^dShb_K+Y-G>m\V0]4qn,?r;;.3R6C_0,4o*c97C:m.^h&+f]V.]keC(G^EjN]:$Ck".o)@"7$_Y;'49t8q2=."d(3Sd^GeI3ZL_$khA(tT8M.8Wo#J2O5!qn8>#^["-o3[9f2i6;57SQop[Y.1-R\B%MkhXl=D$NY,F#f`jhH4Jo",De0be1,YXYrk/RN29R7(d$QncBC-i"KkJ@/7P*u^=*nM7W%km$`)Cm;t<_=OtXkHS1%(.jhs0#F?TG<*R]nt.t^Oe.0B8H5(g3na(JKmZ>IZr5IJG.&'7#a(,bdOSQ$O';@lQ>TKr:#6McBd&JR`6@*Wemq$c9:r9"8_n:'EcoB9;Qs.#?RK,gLlEUXatn($pJ'V:ZXbKf_"UZ_;#,&YiLjK'hRgh>Ikc]_EPk6A'#H1-H/nT)<%5st;5C5tB*4S:EXPH(W[^\RSO-eKcg,E0O!q5]0gOD#705nNL:cbP7m1K]60*6k"f,JE?kjA'b1pKj+Y$ZPaa*)l=U.X_NLqi2\TdaD(u"gK:BRQW8]S_u;Sap`Y%C&RY[6q/?=[^@$"9UT#rYu\N`d(\8=*FU[O^8gT8r`>o$1l-&(jVqVA`VYX#3j<0QT0]D-?BOiog91=6s2rchRoH1WT7ORVc,T_K`EU3V`PGc)%N)*N&TO!U]o8XnI.fTrXd]sBbNgs31[6'oB%4b%j!N)NQ9NO^T:.A;I_*>CP;;/idQcjG[@C$l7HrL*VsaropLg^u,"sJ%obf69i%oo+%"&7nMe^RN82icX49"UKp*AmTC-YioThNjt+s?1YdHS8n&dI2@4sXa9i'BJIB;,J1Osr:Bn-q_2tX-U5oo%*UjrBV9BgJf.ZK:8s#o!t9Gk%B-?B9>#X+JZjp>,oU`GAZsCPutd=6*0cFhK`][I<=)9@aIc[d5\uD2M!.WD^bgAA_`uVWq#HX\!!0kra4QJe72+K>3uRrTrVY.<9e?M>&?=2$njWa9i'BJIB;,J1Osr:Bn-q_2tX-U5oo%*UjrBV9V`+t8Tiq[@9^a:F-"kCF)l;pC/Urt\=qFk+8li,'1Aa[fi0,cgYV/4T!WQe^pIJY`Z9ACb3MB&7>/N<4`:-5:lR'g>0cuOsi5nF1h0),i[Lj,Jb(fl8hX1Tg4f`P[(F>Ch5#N-W3OT"Y/&e&C1Go9tYIeSO"ET4,Ud"iJ+H\$>P+h5CJ\bJGnd$F.$OD=NK'.TP<%Bg\eAhL8i0Sg/sSA%VnY2>!OcI^>=H;\h'@DEl(.iS`RH[_@bndBAA98^u\C]8s@5hnMc(2p)fDI&$I:'Wo=r8&fZ93ML7o2tebfROL"?L:EHf3o%S3oH$,G]n@Tc,RAuEXp(GK$c-J+/6V't)9a-06`-%r5!8nD^h9m!q9KNDRC5X]::23J^Y2/(cdqs,J0f6^as!T>uTZ;5S+&aOA*K'i'QoN!!!#gL%S_Mi%mV0"@8,C_.V[mn/23+!:Y^8>uTZ;5S+&aOA*K'i'QoN!!!#gL%S_Mi%mV0"@8,C_.V[mn/23+!:Y^8>uTZ;5S+&aOA*K'i'QoN!!!#gL%S_Mi%mV0"@8,C_.V[mn/23+!:Y^8>uTZ;5S+&aOA*K'i'QoN!!!#gL%S_Mi%mV0"@8,C_.V[mn/23+!:Y^8>uTZ;5S+&aOA*K'i'QoN!!!#gL%S_Mi%mV0"@8,C_.V[m(#q(a>N9QD!!%P,a',YnYSnViJfq!c=ddB.%%k@DXS'jM!!#8Q@]`]Fp^@]:5nI"mi%sks$M,-mXnUrh!!#:'@,9EH=:GfE5nG:blSBE9iA2;Wlb5dj!!$Cf.`2u("s`\p^BWGDAOhL*?tOa!(3]0#^ciO_epJ<#_F0i6KYjMR2pH`"[N\&6'YU8^)EI\p^@-&z!!!!Q(@W1Azz?nC4lzz!5M^PB)ho3z!!%PSJBn2qzz@f`2&zz!6,((!rr<$z!!%r]Hj0QNz!!!!9$ht,1zz0Ga-qzz!+7A91B7CTz!!'f:^h3WIz!!!"LZ%1.#zz!+Q&%!<<*"z!!("?4p(cbz!!!"X"agLSzz(^p*Izz!&,2X)#sX:z!!$CXi%k?5z!!!#7=MSPLzzJ?aXNzz!!$L0T)eolz!!!#=!^6\dzzN!4S5zz!#Q+=$ig8-z!!"\gn/23+z!!!",/Dr;azz^f\Bbzz!._>)cN!qFz!!!"/!M9Amzz`WA=+zz!/q)/"onW'z!!!iDp^@-&z!!!!Q(@W1Azz?nC4lzz!5M^PB)ho3z!!%PSJBn2qzz@f`2&zz!6,((!rr<$z!!%r]Hj6>Z)kR7!&-P91"@3S%6#pM=d+*6RB.tO\HBJ7.z!!"\bee^loB.t*%G%(FOz!!&rOX=9lscX7Hgl')/Jz!!#jc=A<$,T>>KJk%"Glz!!$CrXefWz!!'5+X<>N9cX7krE"2jJz!!'57X<>N9cX7#ZDup">z!!'5OG`O]?1Dg2^7iq^2z!.^o^H_^t?_%:iUq>^Kqz!%\T9,>IqAL;<]6#64`(z?to*OBu4L:"Q#2'zz97ut0'0_$ln:(!1z!!!"$)SAS/n/2XcpS/6!z!!'g_i'#MAcX7$k++4+hz!!&;hmu\rE#".>IkQ:ebz!3e;)O#5fO(]s.r*rl9@zJ>L)/U^<[0&9pG9zz/.LG\:&#-O_#)Laz!!!",C%*0X_IkP*hN'i#z!!!!lKD.nM5(b$JIe3X@z!!$+>]LSF[)%;)jUCR>)z!5R%@4jo#0?jOCeI/j6Iz!1!iXOX>G[6f@q,!rr<$zYV^Tc1uU5-!q/W$z!!!"LV87MS$(o$FGX)$)z!!!!M%Gi=(p^DmbXJ6l0O;PVW[!TQ][]Z`Ie9@Y%h>.Ua*jRCN5/AZ?>7ON6UT;nPB::\rZ*%oXr,tZQp*0'-7CLPW(oo_2UNcXc).D"."%Nc;ZI'5m=]<;%MpLnQTjts1o-?/bKHZq_o?q*B%Uc>n/3^^cVWIC%\KG"4p)b\bcE?V)62CMYf)jp]:5X*V>rd^z.M)"d/5ogK%.OX\[2Z``gZD6o#3=t1$_(gt;V7jMNLE[=K,\S*D9(^#MP&^jSlMMc>>.=f_E!!!"Laod"qb7kaV6h$O@iO8RSfjE7;;Mq]$e_3ic\:&Rgf'oB,P6X`c&@>>?akch)-;P"_lIi"7UF%nmmd7X[>INgPUuW50*`LRf$Nm#6T_)Z&]H*KMWS,)?f!SMEhLbnG/@fpK]VqcBd"nsb@X\:LS1J2I86[\kr>Uf5)"W,L,YtCp!W_e)`AVN0q,"RDYcMKqH]ilIC6#*EtJ&:jUoUq`KM9Nj9_^OoK?o;R91\27;hG:LUFO<--MXIN]2GCaoh/9gMB:jUnHhIeN>GNAdnLauiF4@H;+N_S9(B4S6:77BWi`qlXAF7b,7Xt;_9q(eHnn*p#m3gqAK]6T;*bPW0$USRA=IK,,lH.^DZ_&d1_g9.&H`-]n).Zq[Bp9XhsP^9he7s:SU2\n`oe:<:-XSP?CM;qG,O2?/:W\D0\WIX3Vo$`+0@9\-k/5]'S4a?]QR:2!#g`OC^6!r!]IgNr4A?ETK+PmUq%FNLD"C:"TO\m.1ob.rIT:]Q4Sfc-;39=nBoLR+H1`@Y`B93&0mQYr\Q'M=E9f07bk^qOa+>t+7#6_%iU&tAq!!'eln/3cU>ke^brr2K6\Tp9=)4Iqr+@N:^7=>N2P+U%jJnk=esT/e%7f"C($8d1a*#$Af&<^rD:\L(0VrYf+H":'uj$*OkIS5Lh--qFf4U1$@PW^-g]cXsNUjM\;b$L!9\1<\s!HaJQ\VXUEXK86bdiX6MD,9n8%YoRQ&6kWgj>\3cKd3toVo-?s'\%pVd'[p*_H0[-L?ji>&d:lidIpGa+9X%a*La5IRJ6(dR@+](*E1=B25[G'f!Uds-MF+H+[1PJ-oe2dXW%F->k\7I2hc%$+eQ@S>[s`QKh&f'N_dn]r/`FEL*J[CRcicVWb[aWD:<(Tq)ZWR`b/LKh@7@Z9;&(oo`%dEcI8FsC858MN;"*9ZpAETmT3e`o0#'Z"]r#XRcl<8Nf7A-;P#reQMFV"GQcX;0n#uzGQ^3_AVpkf_5m<->k\7I2fmIi6?@J,eQ/OEgO!"."0f4@2RqY0R[Xm_)FbpeI?!oYbHPdt&aaAWE/U@1d]Lke;S$p^G1-N`K]iRn-N8WaehjaF&^VKgNkXk&EC?Do^;Lqqa_<;:2GC2r4<$8C[Qd:jAR=(T+.['KuV]R[Q]3o_5]SpDu.X]Sh5+7^EN7,1(?f?7Td*2o--G5(aDLS'GYC.T;$F'.-KkDq_aG^XdHtHGnkTMtBdP>):L4XR9ajk.ca@j_?u3d@Y%_LA,1oS5=ir7sd/[K)EI4qfrCjOjrEt7HX1MSt155L$J?%1k2S3zJ9Tp-=JiUt).MXcCGp9CGKW,S$nj._'K5%h'Qib#Li&kK+(@F>FRdu6'On;b5H\8?%!I:qgY-uH.1k%2M(.`>Kn2F?(mR].ZsjKfj5Bo^SkNSh]APQ?CAA[+'.-M)r?aQY0/#49rq>1FX4M:XfY,&h1NTFl;\t0VSRX!A%9gJ,r6F,ZZ#MTmnHk%/@Or#n:b7Z;dl&bRs3T/.d>EL72hfR#d99glhQ]SL.U^)U\G-3'13N'b_nqqP,C'0QR/s6JY(m-G_W`O9&\,d$s"fW:fGUCcKdE+=3EgA`)sE`1ZpC=qKqkNCI3_nIPiE6`b_A1[3GS8"!e4@MKK%T>t!.ELdgj`RI_4sSf)SNe[A@)UGUgA5(drm[8L+/8.hT!0!t68/"RJScA9R^(5q`$$pVo2F[tT/M0tqH_Z+&>-`Y]WHGUBJQ6"YahED#bGY1t(YL:Mi(QdOY1.P7AB1qHSSUrdEf#fihFR:UK;j-X':[Q0)m,&6P!!!#7$@pH1RGu;#+QDAokl/=es'`@=XfDF"`AE8N[j1L)/U^<[0&9pG9zz/.LG\:&#-O_#)Laz!!!",C%*0X_IkP*hN'i#z!!!!lKD.nM5(b$JIe3X@z!!$+>]LSF[)%;)jUCR>)z!5R%@4jo#0?jOCeI/j6Iz!1!iXOX>G[6f@q,!rr<$zYV^Tc1uU5-!q/W$z!!!"LV87MS$(o$FGX)$)z!!!!M%Gi=(p^Dnmqp>WKz!!$D@n/c;\B.sJFO$3ODz!!#ZEpIGr]K-B`5oDnplz!*C/P8"/ob%"\/J%fcS0z^s_.(dY,qS#eV7-zzQ3Qf?-@?"bi;MjAz!!!#'1jG';(`5Pb?[z!!"PZhBPbi%#2Rpd0BXOz!+9O1*biK(0Eg6n4obQ_z!)%t=8/"1>+n0sQ!<<*"z=;nhBRd_1'JbPoMz!!!#7dbm::K[4$3]H;P%z!!!"b#4I[$Hj2srrTF=`z!!'5[G`O]?1Dg2^7iq^2z!.^o^H_^t?_%:iUq>^Kqz!%\T9,>IqAL;<]6#64`(z?to*OBu4L:"Q#2'zz97ut0'0_$lR-!Nn2JlBhY5RlhB.AA^!!$CrnEC1f"",ZS,M$l2=[t+p)s'+q35iCYcX<0HI%TBD)n5$\8lHtSqFDE%qe)`&ZoTRRWST3--:4D&"tWm9euDZn#0qAYgg"',S/r6_2O3U,i=Hqpa6rn?oR*R]Aud?f"oCg-jik6=E@057n'oFT7@2k`=0LMOQC`!L^#2oo;ullPNi(9AjHnJ-TC6Di@cq'Mb$,f[=s+KdX4;bGa/da3Um-jCGNiD2-(fX$rKTWs0@]9gQjZh=a)C*&2TTAUq2*QHNgf*IXX0UHdgT6mM+'[j%IHq!$:23mF\VG=qf*q%BIYrg7D!G[mG'fcpY*3"?X[@db:NY=Dt7UChPjn`%R%8efIN)PmX]*FiZD693A*LHD2ii^9rm#mLJ`'&.rNqXC\I\!fXU\`la6moVU(oX\B=^S>eE1ps3T0dm$f%VI`a5?Z8C(NREkhumCQ<>G[GrdU,d*(kAY0>qU4<0XZH0O)jmdV^'VPq='Q%nG0<8(dBZ]W[a/;MickJKP+.rqaJB'22Oh2EAgoqc3_$1B.?TpfY#M:D?bCtc2Hlr@4D;^&oSa3E:$]nJ5&%ERa>;\dNu:&h>^_B>mCW)H\T^9]G42Vi`KD<5^mYfu7G0gISKt,YS/8W"H/_]D^u=0.E,88sab>Y>`LDPHSZ[$jAQuV.LEYQ8V]&fEG2.TBG_PhBO:Fn7=ltDE(eE;qUGSQcY-"1>FqK49(@/\@CV?hbB.idLW8J?>]YJ0a9QB,Ld&1GT)[H5[WSQ5"nWRUMP$_$NG8c]4s-Rn01Ng]BZ1!JB-?u5XP6W*H$C&3$cJ8FN.Dr]'0C$^(@^Jdps"+.)7\`n<(-;+*5`lt]mlPKAi\_Bne=r*!)70m?S:A=dD7j1C^+ror/.^!DVWcle;JJ((6K;4MD;96(_j%o'[sm[E0I]$DFnAm!&?L]Wl*k?Z.e^7arNkF,!M_G0E#G3)oJt,rHh8CLX&GqBc-O^K2p&,OL=42`ZI.6tU7u*;-_'7bHC>rHF:PeFd"@n,'F@P*Rjn+@d\f%.-J550>rsuWC9c)SL7Ap<,-ok2pfk3PC=II%:KIneMSD:P,gI^%X]#p&$Xb'AAKJ5_5qCW*Xffl!7f262p#7W7Zl?LBcpAtD(;%HodcD>7+\MV?>),br5G6Z9#K>D7kI0gh@meK^UspAC?03[e5a8>@P+.@/pKW*Pd@+UF^(FSk^kfaHb[P&8`q]k0h1%!'XH$9h>3$[`0%'Gir#Al_s%0"orQ8\i2mrn[:$*>/UTK%O-Mn/44F6d3Sf]>B;^nRh7`$;m)N;,aGnTj)]gq,#DOWVB4UCZ]*^0j8!oi?Z1+lj4PQ$W5$B/J14m`e'4>jGfe*X^8GHg>6Dq./5L_D5!.FmS3C#Uj(&f9,sLB#*Bd8roS[Nd,X*AKn/8#tDdZ;D:XS7X_nV\Z%"Vl5-f3fl-eVPo4Nr$+I`5ZcP7m&A3#g\BMBb2]pQo/Co]r.k4p.Bh0I#jl!uI$lll3=_SU+?4gH."8M*8<;HFIp>XNPgM]U;@umlpq>37ZapFR3C"O8@[efjFkH?59>e;HG;&c[eB7H'D%gX#@YJIY\f<'qMr!_S)drc.eq)lRE)0>$pOV[ZiGc8-B+.*&LKY;Tbd)j2)=kbEU5Gb%E]=-.kn>(I:M%=mjGm:j$0)kEe#3jSU=;/QLkTt/>Y1F*,gY/s*B@-F4L!RO')U*M"5&oXL;5Wc0`Zt[pnBCc66Kc=T)f4DJMYq2O4Z^3TVD7H>tG2c&BJ<9k]>B*`oXe*":9e;ffAX'!'jQ0jsO`_qk/!&\gE/b@cq3O;I%l=M90)C0J4&r!X492m=XI6#l[j]Bl@tYMOmH$Dj7+O%itH"mN@u>!9p(cX.H;Gtpu%94mo9o^8A?S]*?:9L*OKn+)^u@HQaZ'U;;0>Zpd44Ber?/>qWIXa#:!R@gbR)7TZ1K-;(PoQQ'2e?f7Wr;CSHC2+[C=prg;Im7^4I6t5kC3MFthRV5\jq\FI28ScW!FnE^Dn7LJXTEpd3k0Obd1K\/dl_C;&\;pQE8r8sD-^A*R5gHaMo%'EejCEsmfCC:FF);F<&g5sHP7c%TBe:H,^oGHEq\]Qpfe)tbqoEd_NElV](YrsY+8eiqG,>\gX4Z&M##+Mko)2Ms+#VC]NIq;Il*=ZH41)T@AET`)U39NFUf2q^GjQ6#9C3)]a*H+*MHWXWAE^O?ZbV>s6t"J045.N6t3'jpik[q'FMGEV,4"3@on_7>o,.)U!o9DP4fb=53.R0mlh-u0t*[%dl(KXZemSb4ad17=RtJX=;,F(1*(d(<@F]G=.f8@`%k+N3_B0s1Q&>HXZQ2N7dT("!A&NDCYO?8W"q@h%0Q;(Z$B2p^Dnmqp>WK!!%Q&ft)7^M::Wc;q'U;qp9!&8;b/obR$+MUAuBTk;*ee'j^at.[u"bO"8i+h&HDG(Z$B2p^Dnmqp>WK!!*#5]fQagU:g4(rn"^DhYZ+*4Qeh>\N,Lq)mPiB;hu5mch4WXnr!nVh[/hDuSptT65UL*kaMud]7_p*&R0K/[jDRTD];6n%je6qQW;g`Em9D1Lq*pkQ:ebO>jFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(0O*kCb$\R+sJ3TnYV>sAP';^8pal/oGOrjIImO?!6CY^.ntGH/7K]L!!!#i-MC&1T-9-F7iq^2J@p`PdaVpN,50Ch!!"-[@]qW])7#'HoDnplaICg49mqaI@NU!u!!)R:p.A8U+cFuC*rl:k]SX>Me7ZiHp0:^++7hs^;&Qdn$mF4><`H;-7tZF)HNt$q2BAQm^.E2IKNd6_CkGZk2fQ9tJiagKHL21c@8knDM4%XcqUi^Z+D)VLS1.;go>H-03\lc^=[aS/0rXqY.hC\Hb5Xnsd,dniq"UU]4](I<"t9amr.qT6pO4B8bBsi0L]eIda,ol[9kdp7I'M$Mg;=:>GX4mIr@;XZTHGor5i.iba[IHcW\$4j]]%60in7OmSI5XJ^HH[_,H[KIaY'p0hGk\l^'Q+8ag)8dOeZeeVQ@/jr81b,fu&k6\S1MrRBpKIp9UA%3:J<]E:<,A(3^0Nii--o/mYu_@E"EdhAbsNl]^GTp)2/#l0e&[W\nS3IQ$lV7\)a.h7qjsmB2@oNk(siiCVAq.4cq41DK@!5PJX>m0,k3:7_+Ko&VCYTCTg[TiXDHQUe+C1JPA3h0t^ZSUT/cr=:lhr75KC+$,W%bo>gS^A+&0^7b-?9WkOmMlVK]rl2!SIsm&>a#TV'cf$aQ5ut*orT\0:Cq=c8d=8/YoP#]=Q7bsTS?Z0TKlIE3k>A_FnR!5R*R<%iDQD)[,CP;o-AjuSYoE^^H]MJ0-!tT"_sZIeRsb1NLED4Oima$d]__7:mk3C;hRNGA^AZjWF$C07?.uOR5AiYp`2)SJ:S4?=fOm['pU5,]Ri3f[T/RMBruB2:AB:\eOMKde&5/Yjq^Vb[?q]0^q`gsQQn%jct\n,tC]JnWGgOKBU13(aSaZ<(\/e-QijdU2;lPJa^k0#EE2mn%I.Xpl$gK#"h*]!Afn9DgmIJ5lI'QhIf:kFE"LPdkNFm:#krq`+&&&7Y#0].UOo$"EF-U4q4HW7u]8UDpre8`b\,u]6ZB97`M*Z^!Ii]bgdeh(1!kW!(WDMlI\]NW3oFmfDC2l481/']E^9dS7u(mi)Y'PDnR-`jjln^kOJPr:uVI>6k,1oZf=gf$"#5cYV<__-G8kLiMLRS:4@YY[RnB:ebTt6"FQPX>qg&pun?)]bRfa]P3H!-L'rr:2DlWd7$t7n?+*GRd;r9"Y2#,T+/t)4m;,?'br]B\AkP'=6pg9mo>gIhQB4ap2g2Q>YjV[=A=!LX-Ql;Qj:a6Z-%'St+2VU-8_Ukp9OR0FNR;[9'.ZQL^UuYE!N-K>H2/W>d,HEeB<1G&!f"T,7prE5FX+b8c997ri-bL<,\Z+%AhI+fL6HQl\jiVOq?T;RuZ>DS/Kn;?*q;J(EpA_ig9IrmiS?JC($MfS6G3(]Pui(O$9-VSuW)dbF#GJ8l>&D4XBN:u*(uuOIHZg6bBK=sZ>Spt_LFYm=KJ!TpG7J#,.qrcdU/&L1J-%[:6/+bq`bhm$u%M.34Xf#GhD2_cFkpb6bB&_D#EMr13+(%j+[c\Pf0.<65COEp3Rl@I_lqa&Sc!KSj3Te':V^K+F]jL=9>C,c(e#[*g:O1pE/cRg*Iuc^+f6`8.pX*>tf:^.0B1R(AX_M$d/K.)4q2gB/QHVR8*9Hc]gAK=iO6(PMe\\[,%^onnQrQ'0e3-r@0QYh3YjJg^T9MI*(n0>-pLNI?P=hdcK")`d2ljQj(SN;pmeSI7Z<4Q3YS?$t=jBof9=5?4;4(j2@T8]aq=q\^Y!)lkI=P%c<0Q7aig\)WFd\g\\e%5uu7agG,ug?Z#d9[`Qodpl6Tu/\T4-6OGBE,YbJ\V]9E&/=%o5hV#oChEloaX7lO#.YeTL&em^[hkI1I**JFEn?gN/@D(N-ADq\c8Y0K%'%ac@fa\^#,0Cn*;*hHB#Ke:$MobEoERmJ@cY/cKM(n4Ct)o8"'OS+ZH>c^'&#r;3sp/mdL$Da&77jM-0;AtcA7e(?WsnbbQ<^Z*>4DCsX#pslQ4)/8"B2]qtMNEb0m\?W$.n;IZIJM??i:_hpL\$SY*R1.mBumrD\%l@aoDC-L:/ML/>6Ps('+[%mKoee'Do8qn!TN>ig8r6RsUE9/q\J4m:D/"rnUP/a`45AL;+@RiX*R)61oB>Aq8lmsYA)IJII?I`$"gT-9h`V9a,Rof%'Yd89!FB[Y#UsJPiljpu\=1n?>pj2o5)30,WoS0hFs7m)bfA8;rc2Oo+[gj2qjZE#.%+U&'U\i>bbC@.tS+ZQ(L:!#U<69t=u9StkqcR"m.Z56$p(d>do,6,Wic/,.Gf^`Um200!Bs5Q,1J(NuoXI8\]aLsZM3He5pAGDDNk+WRPCKj`reE+0[(+uMAK0*2aCh721PA\>\GApKS#KNKo5Eg;Rt'Xaa7"5n&^>2+k/hIem?[[5j&O]kgjGStF6:au^W3]Ef=6+#b28[:J&&I.?;TbT)-3qIIEW"qLRZ/G;E4,u/!)AHH@PV<="V,[ok)d\L&4"qr95)_(TdOTd9"M0I.r>E*cXO;a!/PtSa`gASbCFND_Go$C<"[*LHL%G[Wh_Z@Ei0:"B_Vg6Qn[Bale$-Iq>7!0/)+FoGNOg[m!0(KMrZ33W%obj8F<s45D]ae%QN[MU#&qbABF%"N@Fkoj(-&2k,U%]L/9>34Dt)FA]q6knIM+2mZG04k6D5%%-QO;p%2$lm/=ghC@!aPI?3^@B;kU(MYE>.<5b`qS5"n(n/BUqNK&picBoJE_;Uc_\BhOGF\A&K3mLj/S!(,Ie^r[q::9'QReD&$Rn9'kq@#k)3pgS#T<`/#P&S6ed(lCaDl^#r6`sRuk)?VNLT_)fN:oQ0+eQl+T-9_D97D]jmEN+5D@/8o"[e"kIkUeW@o"TP4l7`Y1p*<#\*;RY_l^NC5N&ct?E[T,@)+Oojg?L#/k!QcuA,hBNP&A7Pa`1J*!67=[R^X.DbaAL&L/!PNI6h*;T48bHZbH%>@YiNi;q@"';S2\mYLQZ[>D7/A;-X;Oa,C,&.H\\@W/2)B[8[s"/lhlZ-i=c^rYg8J.;fA[Q^<4l:\G3?[6S/jU`I%%EUN,+KDhNde\9UeVBb5)Oq5FF7aTV$t%Uee`IhD4q'Kg%l11Z[JP0&:6&IB.`&9m$"FnsTFM)#sYW,+j@>5+dmnlp:kZr6^!Z\_&E,I>0:^++4->VS#t%q0Z.PdFd+HqO;DAYj"&!]_"g#58M>JfIK[EL+HdUI=QJcq>BN@S:'HZD>gse8#j3qf"%MneX)jk6i1rsT[U@6g#pf,YA*;-!dPT/V5_e&7I6c[!!#:@`*R0C1Lq*pkQ:ebO>jFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFqA/Y?MXb_dhLkpl*RlXT:-.QHTmqF"NlR4ntcO[pc1rDf4""`nf4OH(qRKnV7>k*c@P@me`9AYE[S;4==u]p/+=Sh0ef\_LId2$a.6.r--82pQ_gBs5Js[^J?eGA'-2!T+->.9i/LD$23o.KrHg9"F_4!M=Ln%.]]iq3\c6+(;Xo$_),l.k;\>BK8es1l88I@ti0[.?_CZjF:>bFR=%;&GWRA3G,'GJ\(/H>DM%c#+9A[WdbBYM%H`FlYPQT-9h`UCm+D98#B^!BNh>2"&GjsmeIRb"R.^AI?iIf8T#LE)JcEa#*/_VU092`gA?.e!O`k=^*o+%+h)R(1OC\\itcC!UaP1[q>/1M4p)QES2!ZD4BsRm6l<$[qmo(p667l.P7u.3DMo5?u]lB>3&)eZmG>_2tAHGOAZp2V,Fb;#T&13$gpRF42_9\)6:o)fF2C^k"_<39f70@G:Vjk*&GmrI2LKNnCkjp@g`FE:KG3.p92@oOAAE[%PZ%X'sn%K$[b,_a`g4QJIO&&"7@`::qUtn[6^?/c53mONuQtaHh*KKWPT5]e#n%hi--3nLTo0nMC$+ZnUMfn):HZeH5b0tf^??f)+RB#7OFPKH#(?V#=P;LfJ8J]%C3&A$^q@*0nFFAn9*Ig[PpgV'kL#Eb*iJk;R2h`'t"+PU'asIRuks$ZjB6O$>LGhY\jOL:#J\4stVPYqtn&TKu3lq"ifs$\f1aJ'g\"=3fH2=T6Gn;`EUHiM2I>IgbX/>+Zt.qqcR5ipu1]Y.AdekO,r-Vm^R6*.$]9T6r\0ajR#Z%LncUCY#RiLR2NV<2DK;in0HXT=ouW]$SbSrqTNpVfN6(J7rn!Q;4DIZoCFWLW;[oTC^u+KJ\M'n9O8EIpS-!\W]JG$;4)'qHn[EOUp%Q/G4D]nYhripD3H3Hb5%c6g4\80jX%P+aCk53b0Q>+NZAq-dLW7)h5a,:M^lH5U&$%&I%%_KJ=nXZN"QA(7mNB:uAqm/:/S##G^`m"l`:4b>ei3^auelEm5STJK=U.PN]QIUkbP<:8h7"o2J5.PFrh!'7`1p1!sDI'qpiUgE!Bj@p;Y]Q$XB6!Bmh`(d]f$PtBu*"Jlc^k[Rr5+=>e=WU=oiO\m!a]$dL-.rOVs`NO?bA(0IV;nHT7kZl@El/7r2*[f-`=0ulVtF&Gk:!e#)/Oil.c73s1Z,AK<1n0E7^`Nn$-ZCE/(KD0DZ*ZWoHbkKaIS:ET<7hE6/ICG1uQ^fA4eQomBUfD*i.)o&>(@n2#E6jepgn5+WgedT9e&UWQh@jnC+M-HY?7MDK=cVpCIN7+>iTP?=`#]1dV8^#Zr9oN+[D$.nS%fVnDGX0*tSYZ9;Gn%.]]1&!h5R$JO??BVb[)E0>)>2T'19_i)]G!#&^r04!LT:srg8tM5/..7-]T)`#a-261n^2eYYcS-sD='%GIZp$k9\!pI%>T"$LC"#9a2h"(bFW'cF;pVVa9RTs57edn)hdm'8j_h/Ial1D<_n#H4Y[B*EWB*_k'HgUJ[Rc0.Fq\^dt?MNJ5#Y2k5^HD7]pEkYAC%F^@gA.Q>1[Bq]S-L-bXREk.KPTUYr?!"=Y^E!^Kj3"a&,02=q7ra0-1.uf&$jmN^p>\Qh0Ss(P931n^DD4/rB)gK&>DETInsul"9j*un3(]F[3Q3dqX*eE&Ui0+`4WokG6@fF9'%&m^_Som8gkd@me/@mC)n,b*8d7r4RqeX1nR['17QOHP=A5mk]X#O$)jkT,]_%lElViam73\-\_SLp!m,CSR6^=eZdbCYJ1r]$SCX"<7sCh@lRq)*]H8fS;6-JPKl;uT?iVm+KO:-.-3d0nB`DVB8s9Fd:[,m*GNU;N$PEUZD`-GT@Sj!:%?SMi:5Du'n<9`FntiRLfre+msbS(tAsp$)p>%,J5T:>am5gC_Jt<;:gSiXu*AR=oYQE0A\QH]fgU!HR63GD\DSUo+9rptDf#FDM*(='\a_PXV&6clN5I.b;\jU7:0\L9$/B^;dun%S[h1XB;dC!ukS(*h2#5!uiM^2V/tT"Y#[dsq9^R]:=`RWQXkkLrgG7=`*55QE?%^QrD)6.Komd];[Xph/X`gsQqF.XP6)aC%#D;'WDEfW07Hs=^t>53FX(%4S`Tp9`,8L)HdiM\C,pQ\fe4)!R"iF!%kdD#K!:d"&E3FA"ARugj]gmPiFKlIFFch=tumtB/=p"%'*$FcnW7BaH!`m/r!qlNT(,SO?5P@X6,g!9@'MrrhU;'T^3TTF-pA^!bDCaFBd*sgq5m$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\AN[fLI"`!.__=^!bDCaMe7ZiHp\_hg`ju&%9KL>P4$A1A@Y/,SN7-D=5(4s)5eM?S#<@I95`OL27O.=.8so=i0:.NrI5^`rGi'@lN5TkI/'I46sQ:/m5bB=h]4Tl3i@UgT'Sb)fF3naQ$$e2uiJ]2[Nf9osGk]3:OOaG2$l;rE^I*Y2VTFflJa7T0;tD0J.s*F-A46m^AG+'9/!25&+Uh>V;gu+L)DLV&NjQh49](VbN%gr-),>R%hp2b`Tl@Wjj)iJVaX;O_.HraA?0/oG*=Q,4*mU!00+k]47$27>FVhI5jj8G.]o7([e`ChYaq7tYW:!JgII3"]IX93bSU5`sMlqL*+*dOn%hrmgZW?US2#Oi*o'l*n(]LSAm2Kt<4T(Q[\*U\)1-8c'@ap8M/'>=1H2aY,X$=HOY8n3U]Bc'cbAV-=rh2\ndCf"]bHF+k(Vak$#Lhi(BDCMg@Nb9Y?A2D9uVOXSZH&,I+n3gIX]Em_X`du:HW.\B6.8<.>V5;>`uGbTC7-*p20I?C8B1;cU?/n3,%6tcb2:rS4Y,(q65(X!@OLZ:9lue%!UNIO*BHM4D4)p6]X?YruW?1lmCa?]X^n;m^N/bY!n6aIm!\Y;#=5)a0\"]\9[(jVk5IgWN&)==uK08*-GI@AQ@tN<.&(fbM1efG76[pWEWse?+?\=`KN+7)t93[PNC'_):!KkmdS2q2/C3\2YGrsSNc>p^YdQ.Y)@Xe\YQIg8^IDc/1Kg>'^tkUa)4$-g!M)VXF+IPL?1@B[:[sRKlbOcq4@UDo#1F']ik7(d'i4[3SNg3Sp"(W*)A`hr3nWBDV.t@c($Y<_1IB7QJ\c:YKO*jT%mLi4]tU$H1AbLT6id&S5_bG/)2R3l1*DSOBh:-\(BrWaEDIVZ:]%in9#k)FEd?Q;g.XnQ5q)-XWC8>TVM[9(=gG`??tf,0>e?*rmf>_$MF**Drl8-p\T-9h`U.Q%DU1B4[h\A=V1")rT7*DOrrX2Y)Ren`VrV$[iqu/6khhfR'*E-Q<2Q_mX"Lk1fP)`At^/o#p,h/YB5(++2eN'ieN7\V/QCchgBeGNOOR41/ra9SisUQKB=YcJF\+8:ZFAll5[P4;#3'Km9P+u^4m'0.bn*M8:C4q+Ole?4&:2EU/lYmf3X_9osLDX%N9S6)"EL\9KQCdFEt-H++*Q?>BJ-fmC#C$it>\ni@='J#9IbTIn@qR4"pLj]U$IJnV>lu]=?0`1-LA3.D.rdp1JH`RYqr2rJPB(1M"pH=MB1%iQ%I5f[##B8tR9N:>aoU]<46`&^En#?\V9ZhR5`g^==[m4nAAD5+N;2AJYam)D5gCWO%m8]S#qrVL1'T4@Pt!-sd`sf,JP7D=W@`>G!(lD=KF>m']n6EU69=V+;HnijNUUr'NtTESdWR5;]M@jf.861Sh,gVO]>&HB4]fAiSkK:A]9g9t(F/o?*=K_\%@VOC?8>i?C;3eD\IZ(Y-"ppYB7eBklUSePt+4W46\5Be,O_pE6OQY4LPBpeIb7:As:biV\&bfn1(n>kHFae&+->i5:V@5DS>M^7QQ21DAYkDhgN'hfJg)$MUt([QBFrAUO7oY8o?4e#dtGrl#["4&:2EU/ne>CWB&EqHD/eX&cD6YEr)!54lqVjZ?-t=grKunNK1,1H2rrO#uUMqL$WV9?I&K67EKnJYr(+jFDl3HM!k/kCZ;ul_eCi1e%Rbd8hEPX#OaI]4DoQ;*0r,d29YHl]:l4jZP5`'T<(k/H/[0tg$PloPri12T?g?q*LL8;]C*1!_l?^2CTg1E#UUYad+#r.LCU&+hFO+XRf9S<:h@$gm=^*D=WV1?NB22XQ5@c82*5V9D>GV+&#Meepd;W?LluWqPtp3KF?p]U*"R/FbLR=lFQRmpY8!q^'>$%5^8![mCC6]$b+^]r+Nj5UWo;u9.1-'E8)aC$lD@LmhWFro:Tiq2@5Jn5fN$oRsUrHQHq1j-sI,7D`+.E26cVS2\0^TR(Zs?cNNo,Sq!_dApH9Yc.euP_E8\OKI223]i),+Z]Af:=SQC(X,#rZ7f8cuNq\_`J3rP6[54?SC$k@ie8ghdcL5BO0?-"nkFHbp7GW1U]6sF3ep8O7<>_'A%R#-bWI#(63/h%p9/9bE(XEhgcBqb_B.0>m/+sj\b`H%I^ME:e"."B2Aa=f_D*ad;T8BDjE:rl_G3RD$nrsZC(KUQaZ&5%;]]["_7R;8.DV901MB@_=[c\Pf:Xo.1)2_3'Kj6/PNIi()SilrjgfB^2tE9oBU2nV1`S*G-?;MW%pROpDL!4HH2QqGM9dj5$R(=)3R&Th=orYP>#a?*g]BB*`.rE:o^u2H-ltkMORU2uh5LO5KDf,F[F6b`gfTg+E,KafDQb\bS.sk00AtIZJ2iY&X&$Q+o7Trd\e;]V,,a1E:\qa^MUa(Ln-9H*;/d!s]l)W;?(n2/Cm^r>m$ZoSgm"6.1>=/rURYlrk40RI>4W,a3mbD)O1/6K/_\Z'`S![='mi8E.iH)5"!fQ+3nc.fs\f$\o-*ccPA-H7cmu:oDU%bH-GHfTf8D8p,#!;k:r;=3;lspDFH*k/>(P?!;KNHe$qC"f.ogcV+X9-->R79%rW/XmPUmk[*%oQ0orIqX([h08:6mKJpkR[.[2gYB]q-[l$2C]1@0jQa.D;):l-<^Mr9S\'#-N+tlc):Eui4&e&uIs*Ls/G\h(4p(s'kDckETqp"r[T`4.'/%8AOh=&R]u*\fQ5;`i,[IfOr=(WAi?c?e)j9nEOe-m(DMqhqFl!iU9KOmk^3poD0F+Yk@_%L.X7lc-QFWV8[k;M_D[tPUBmKflNc-N>k*UI-54i6X6Wui3c3d%M*&Tpi#g]8Fi9uA#%>?]C-AIeX<`n?f\,UXBW:6nY_rfLLO@&/r[^(I5j+W4h;Y:aiQR`_cq9>q6iNEQ1gB2rRm].O$#VnmnFMj)5_m=A&(Ap%2\_dqYfoLd=3Y<)4I*>#@DT;:4)?^Sj#q;T-9iKJ"H`A!'6cLJJNb-+&FT`8lM?*MqCNA!!(T>`l?$MhgBd'9t,E,V,uCIYs>J2?>8[\A.e_&"10#hk?"#2j>5+rlc0/hZ9DVB?BS90oUs[Al.P7JbHGXG#6K/eH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A.e_&!rr=_2mHGQq@$NF55G6Z!9?l@Q)6`4(9roa!!!"E'76RTc]CT^UCR>)5i0FcC$IKb&c:bo!!&*>YudCj$sCM4q>^KqjA#!+VER?_Z&_'K!!%9XH_m^fO@AN2%fcSphS``7l8)r_qre+^!0B.E=.8so=ijFGRedFq`'4"t!!)(Sm$4G36Pcqf4obQ_GnYP$WR$Ypm%Y'k!'oDZ?>8[\A/+nA!!!!aI^F_G;kG5.G&Rii!!&)om@_JKB?74r*!QBC!49<1;-iHCe4'6o(]XO9BIiJIY1.*_QZdF@!!!#'T!bJR;P0YC_L^++NXYsg!*WV(.jXd*l7P(f6psF26psG39j@Tm*WZ6@!,*`@Eeg?ue_n+M!!!#'c3fhZS(IGG9&XIr&J5Te&J:/Ze)hCYLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLe-@nrrHendstream +endobj +13 0 obj +<< +/Contents 52 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.1ede323f30a9c4db3e5a864f6d3bd816 11 0 R /FormXob.b59ef4a3fb530ab7f794e80305de2302 12 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +14 0 obj +<< +/Contents 53 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +15 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1754 /Length 56065 /Subtype /Image + /Type /XObject /Width 1241 +>> +stream +Gb"-VH/)*Ts2XZg^?o_0/OfA";,R_&b#2n=,1<2k;-utc8jX^jek.2VZ=V-aQ7*sSc>DHVAD_:>cYkuXkA`O=kM.k7`\F@Bo+-n/Y&g0">j"0&]Zlj#kKa51zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!"cT99/^E8eZQ>?JFVV7D;J1M:$QIYpLJ%P;#"Gg)O05Q:HY!!!"(VIDcIcC?mN0S^90M4stM!!"WYYocD!rqKtr-S&9$goOYb0>IE?\dOCDYn."ITaq,'!!"Wqm\B!bIZDZocTPq/@JTKUUYGcZ,Sji3O"CD5!!(rKq^?cq8XIXaCu2i#V=)_W'+7YOzgiFQ+[r1"_gLTQsV%/c%C>ZaRhg4Ujp?gTF*&qp"baCt]*-#lR&k,1P@CSs5]m@)3("TNnCJ=Tl\)0CKpuD,*HS9?@_hSaU=Kl3.nDQ.16\c/WTP;lPD;)?Gea=:b*]uE.o]Y`!]=2S-:0Ql3X4Q.;F&/>fAQRbAMPd2FbaC7WqC1fZo#W8C-Vp&BL"M0"a3&[KgPt:IZY-10RA+KNZY.TUP:#\LYp71.!WW3#Ld1=&BIFtQ8QH`fCfmrO`I%],k02MX;l;d*p/kph=B*9n7ueSOqXRP->IJA4IOXRP`ud6AId3o1UbF5Hl-;BZe<6l9^=lgV3B:5GbF1;(i.=@V)Du-NR,L/@X&c@&?ba>:k@rG2='dn-jN,]'HN*jgVn`.Z\#7:G2!'jep"GD[F73uj$X&grFB)?doqX`#tc#\=*d7;KggjSqQm['XL"4W>O4%b_c@?d.Skk+,g/a56n>.&)c4aJsKLjesH%Bj2O)9/X*^s"*;XV6m?K]h5Z=hM_gMahE1PQW5,@667$r@Hsn:8'fLnYhHCri,,F!qFeq3,4EE"*gK1rS&d1hbf0eA[:[bEa`LF!H,1p9ca:Eid-8U=W^uD9u(-c+8)cC:@sZ!!!"T=-d)&odJOp="h`@DS5MZ2r8eSF6CjAlIAOk-B36q%$*DhjH*JL]mB@e4+@)$n*_s[AiXqp%/TL-ac[r%gWS\\Kb[$.4j99J@pjSJ/6V='4pCue!"c=b\KJI\o[pEY&jXZ>gU1g@mbBgt_NZKJ/FfN_p[4@@;giJEqk_pKW%5'a;F4if7ZAI9lnPIdU!3(iBTF2tbjFcO\$&,P$K_[NYIT8HLM90FhRuic;KV3,?+[+:X(Irl-VkfT*O^Mr<0H:j:HuO8lW0F"il$[^_hJ?7iU,C/7rbWINM7:GAE_OBe'=LGAZ@:pp?^JOM\ikPqrqJUM]Fm&1tTj?41@3fSIZm$\mJ';JBF??Dr@sS2Jh#RW?rpW3YNl91fl)(VMm7okg?/kcTU$kD/5PfbEa`Ch9:#c:I#8GU(S_'/IW[_fMZA]r:s20X)Oi4oZ,DZDnl6_WFP[i-3+#G!:e2E$DJJ.)`259T(Lus*sU$)IJ\1\+-nK_B!.51'Qq0T^]66$VC3WC4';$!!!#oYH`b@kXJFm:O#DG$edr+_M-7b^A-[qo@-a7W;EDn!`\^L`IkUVh3[]k/4dtj_q)64$l=#\U!%e++DjIVfh=Vd2Ha-]-nS_Yp,&,!!!"1GdC8"^]251fW@fB![VW9^bq`n4>IUb\C>]b\+s(J,]-nS_Yp,&,!!!"!29q+%ZL>_st^GiXj*(?X.Pd$m\3d:#IYJ:)5g2!kqr\TI7Z!t[IT0=9;.8?9iNRgp1fL=2dN"o2(!!!"LH^8I\`@-&te1&RB%bImk+$gF.UM*Vm&j[3hqtoishg=h*8sLn%Jse`HZg'GOC;8Su?G1Gk#6aKiFhGqk\r_TPhOCp*(hLIsY-/.osmL>-D8G[!^oRNL%u[fs@SfhP3T%k007B>fZcCT^JSRqlq?&!WW3#E6f/WMA@dI56N-Y<4?8O!qW2r))@-g1WIjo2rB#3>c0uH&nfO^2-3=+MRm.eL]OMVX]jk%\(u43i"(Yk,pd-EP/U\NS-5lmX(IqK29hadVPL#pC=UI36"9)8'.6*aC,:Vnl@,gjU&Y/n!8R07Ui,#"7LRMp`"Kcs&e\Mqi<>'&bEa`DJ+(#<5"j'dL((?Z0\%T:IOQEEW4m]W>2$OLRVQI,7ueQLC!rg9_hY^8djB;,gu\s,,u:*pBs]R3gc.q7l-lP[kb3cXp?^J/9:%,.W`Z-AmbHLN!V]I@rE'Y#!<<*"\EAc@kYZHX\oj<7#otjh7;t7r-_ZSa*jVM\b-ZF/NU+W'jLL@mq(8!!!#W?E/8rW3E"p=MB0nPhWTH^3obF^ABN/,pd486]@aWQ4ha^FH_lN)E2Q(2JlWQnL7D6bjaT/K-kARk005G?+T+adfWh1sf"`/u'h-r;'i>YF!!'grA\is%'!c9&Wce:5f2o+[\P]+kSN:oiq<+C;6>.o'AbYWK!s]n(Gk07!/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzJH)olgU8^,gUqgq!mAP(G>XZgM[<,*&qBDKMZ7eFSbWDk6bkIS8mFW8kM^UFWt%9.,>9-cI&CW:S'ZdC:=0C!!".q>.8D:o?37@a54LVc'(VW*3#.%.&,,cCI$?+e`GgP4--^mYMT)bS;D;Fm@JU>e+lQ62l;uXgcTI4WA8`@eoTV;C=hd%#Kgtji`u44aM2uh328sr:.f8(G76h,0nXts\6QnrC#^juS<?.$5ASNrpe#N>-`&%]'S+VkKK@Cq.AGQ*dL0-q;?l9oOUou;SIPS&ebpiFtHk2I(='[_M&BdhS!,d3csR.ZTRcr';7?/%NIGN6,%3j[PFFB;#gRr!10!3MWuR;`oi;3;09d7'smiK+$M5/Vb`pKET0AF92@F&/m5JJ.b(V,4)iVD5Q)jk>./83d!hlfSYT$\rr()qX&c?c_Ro9N>@1F6>ZkC%;qnThbG7N-C$:QSnA>e-o)8=?[k,3\M%U140!sqNEcSGg7Z!PqcZVPOoM]JhmC2!(QP(A$jhQELN=+joS]dQc[j9+k7urDWLhP21Km?$!70*Ag!*hi['\0fV`NWdgFAcK\X^AiWQ:M:pn%S\[O1KK"g9o_MIJ`@."qMbk=!uNH3cEk;WDK9T"nV,elCWS*R5/?rd\TSWeui`9VDA&.`J_upB?m#=P9u9B7/:%B[GI?fRB];F+peP^qJ;d')\G+LQB,o^21GJu_#'kXY?rr:\(u4s^8t;5P.]SYD-PqE9q+$m`(&&L5@'i>p\O3Z'1Dp%!!$8-7ML:Hjd/W*.OBQY.TAq\#NQFbn%A6erPKe955t?;WI=i6C(ur)>]I^t;Q!j7H4D#Mg=a#XVo1sG6Y5H+SSNW$.W*>c%3%44b]s0dpIk=>'e;Ub7-)U^2d<_,qR9F1ZtRkWj2Y*c?FOh.UldihqH1lrA]g5b:EKHrF6:]WEodWhj6*%a*b$@+1>5,nzQ^/4PgU1hko?TYeh]4b"3:@\Q`>s0Xn]j5b3.+^^.T,iNs$g8lHD;ljY[FeLc%Z]K\mrd@aOYRq`f29;QB\6n9q!=\Fd61=C1XCtmj\OL7/nm$L.QoE._G@q\6'6AQ2p0+iB$D)]YTN`6;1bhR%"GT74CqmBWc+ifCWdgU?MJpYW/X[Ar:L,7E,%;.Jb4RGk75q6=GMk0KZ,k&'"i]p=Tq2+h2`D;3W>oD.RAQh$g,KFMbY^juUY10_2'M2@)`hg^-jIf4Tem]AG!3dbZn??kE4WA@u""A=$NEoj+pkg?1&p?e&..T`chWM!TmeP2?E,F3AE-ia5IJ4n0#7G"\JRk@u-H255X%lcu)n`.Y[Aa(@-;8_A1LW>An-TP%RAlOqmKJK)TGjsX89e=&A\oHcMHg\GbkPtA-YJ:(j.%`PCWYA'oZRi%dbEd^OMV9q^JPj)Nat#s?l-lPK]^\H?S2+ZuH2f+\bhZL1B[QV`cbbr,Cfu(h@`;m.cCI%@lI78^E:('b=t8_HZKS3\WA\37-].s*!!'Oi/5]Bf+'N,9F#>Y/cCI$U.SC:2MAdc(Bg2t@/?&<90h_DTV@q*?Bgcm79p6pK_1N!;jhlf^POa_S4.c12`6$dtrL.BfhS"@;IQFXSR5:bBQgo9n6A6s*FN+=`#)(Wb),V(J!!'e\(DoRO+$QbbTLuZ(jAAmf=/JZZc'pWsSQ`[NELGX#Wp8HS]@=CZ]'GY5=V<]:p[6j$s7]hOjVht8q<+AH)A-%UECJ`sGqFaHptqrCS(dO05BlPN\[/j9q!mBYe#'6HWKOu[e^'=#KB:-F2;%2,e"JU-7MH"+!!$u["\)AZjd0>C5Jg&NMOltXp8"<@1!/Uo?XiB^AI=S$D[.ph&/"\q"tZ#h6LUMA^]59@qF*52rEu+G-+rU9(b!qGM[U8l3n[oe0l1g@"=J`n(p5"7`LB),B]e2UI<,k[bG\`6*V!_>2sg;6>=As-jfqS!8s"J)F_Vs"UdZ36.]Z^^&IlolNWH2Bq7_Q)G-Ldfs>nfeEOU6^7.94p8Ci`A89,C))GjHo[dH"3NQMS11b"Qo&\&%+2IZ#kglk?YINSLCtZ*cZTE?sOJF5Jk0'*0c^m:n2feWYfs524b)!H>dmf(0g9bQL'Y[ti=DBR.gc3E@'e32Xp"*P0D;+XERr?GSk)VK]rtahHV+X]aOp'N;V+N$\-;L0s4nM4fLnXkL!!"W3]-o.t2/D>K'FdY9T[l,OqK0c<*@5r6.TEQUfc8%ab*k2'U(-_7WKLocjN1o=>c:Jm2/CcrgW86bHd*WYMrr9R+$+Mb\VKAHO2I5*C!9SP7ZAW_NgM=B-RYBf:7!ThO$EU\DBf@[-ia5I!/*mpeV"5B55X]QSiqF\)E#\5_pAZ/5CS"2XBF!NYJ:'_o&Rp6)EE0;l4>II3I#]+MKgpn_(QLsLpDuBD#P"[*9"98E%zzzzzzzzzzzr+GES^OPL_/R,Z"bEa`X:7\uG?+Yp$'`sW\9S3DAtW`?*[(brm*+XJGrRr?$Orqbq:AB5l<:oR?hOX!B-DcRi=FQggoT?NEBLQ$)tU.)\9l&ofL>I%e]6Ou>%p!m-e/CJe7k08,GOfPB$He3hnS&H5t[_tqW[S4b9nP\>]I^tGMdiC++O4I^2EuO!!(r3>ng;LEoi`ICK=OH^A6o\3j5o(nst!]ES9]mIJ[oliT51#Wf8P/aKj\&9@>dnUAQE4E+=qY!.il)EJ31qS0GOI.dYb:&CW>ooaU1(rojoIJkr-5&1Q)%s*2TgK'anAGu9=I.^=9cKj6=ftFUK!9?2fW\eZ7ZB0Qn/%h[jCF+&'&4b])24]3qPj,YmC2!(Qa/Srq;-JeR:k$q8W?7X6*iXsmZ]bVh0#'0`pr*0QRG]t;Ld&*VbNX-/MqA#fN`[hgc=%3))GmS4.k99D(B`5%NK/bO?7[S9URXV4aL(6Sih9r;J2[iL!4rYO$4UsZY8V[?99q-Kho1HfduW@g]'?:hR5,Wpo&Rn+5nm%_2Q\:OB$[();Bfi)r(*Y.7>bdSn%\lDF>YpV#Cb)K]p2@Xhg>(`O_+t9.V.=p/"Mp(Z6I:_YRr^mGOR4k]N>t)Dr*V:#%0M*]k,Ukr:>u[nEA8p3HO?,Q7\Rig,F*8bdhcU$JM,u5QCYos&2d/7$_Mc,9,?\iVqR;q??p"!!)FI7*uYq:)MCId%Nf>2Y@HR\T?q?]6<4LCWY56@u]&;NMEHM(gg2r8dH?i'[2.C)nl3,kOTb=L?poD\XU98+iqWp%X)oF1d#!!'mt&4OqB5MaefP!+jG3V'H4:I"fR;brrF+qCb9`N7GG7fX!RfDo8f2.XHP3:L&)f]hnL7kZu"F$5Q14iP(?qai<>W\_Lr5]noEj78\$RBUs?$D\k5RMAB9ib>rqeVABC#+kKgUV]hk.L?bX2N/Lg\QCTm-^]t:(/I8Z0Fe\d.QgU1iECNn6%2p!U.C=G4_il$-B@rLI?jiWi?2>&$NG4!ue2PRrG,?"sc/@]EC-7s>s2ZNgX!/Q.m'UA$!,XG-i=u^-<(s.F)hKs144F)mHd\7RIc1ehbM>9nGUKUbqkgcTSNZ'dt;I6G,Z%Rc5^#aCn]QoZ*YIsGKWDf^d3HO?Tl-n\5O"X>&5j$:YobQ-"R[',8+%2\_H.&Y\at'Yd@JfccS\$JKrSi_g-MU0J1g2k]lBKWp/R;$JTgOS>IO^eLP4JG3TBFFd;^U%t?/'a:Z^\Z0!!!!a`#PN8o&\&;P,'lc)*<#C-5n0J/RQ5>;3.IJ2m^YjQ=Dl0M0O]PI55=&g&N?a4BT=#jc'2KaJP%g7JBJ"rJXj[r/#<.&5z2]SQjIM#K-W`AAts04KYJD;\YZ:O%Z[;+6[1M<.8D]W$q?+4^BQVhkcaH85NkK]XCKu]5r:Ra7ZV+R$FAa\?a1M4k0+(Z?cSN<%'Qrp.TObfKDd%Gs>=h/RLA`!(DdhaWAfWN,T6_uTLEoiHQ"KbLt9UQ;,17UOVg0E:EI=#,Jq!mD;jfVn$MAIouSU'P'[k'DmoF1d#!!$90MkX.I9JM!aAa7dE;DMk.R(u+hcb4=YU6?s#ee7QbM\u7H.T,j!"d\&m1i1sW0hn)n2/Cc"(J^DU8_SI`fk9thfs50&&e^.-Ok&F.LS^#n.jJ`9CY,`'JFA]igpp>j/Mihs-XXT83HO>I]H=M4d/O5&L0[fY;FOX&ptaI**dBs8N#4:dY)s"d"onW'!:C_%Zr!G_:\dT%\adZYN?8Zg,)JJr7oZE`iP:!H')DeC*pgK]0T,Sfd6gPP:MECT$lONijd5#JO"XV>TQKGH;2h6K5!`9"W)4dF\o\lLCbSJM1hks]n?XJ$M'nnarVQ$6o+u:iD;De2^>-JQs,%OA2K.FlHF(5-n!4;9N96M_Z"$:rrteXe2EPa-0U_dR#9VU#MjQA;QIKX%ZDCDBj.&#Eg=irMlcUka[`HXb:ST[udPh.+!!%g9,Dl\J_[SQ+?b]o_DV_m(+"AcR',.]`bN:VZ#,lN?B]$OP[3S\J9Xil)l`!g\cC?n)r8rpRpfUM@U?K+,j.s/IUOW78f1h_mBk0,Op*VAX4aZnpl-i94PBQ*6SbpDGDoaEkcCK=FcCJ-/PGpS"V:r"qqWXoSn@nefP9_b8]M4kRC!rffo#`JD*'"Y==\6=ks0&h:+,jb+oDXLWkr1c;FQnsQPVcmiN)HKEa`a(9IC_>22\5)rRl>"*db>?1"onW'!)XOL74!fOaH8hVkQ`2W@/5DJ,UVR#;XrIVY8P1GN]Z[U3d^Seae(f4;+D_Q3d^R:a[AUl<;>mnmlZW)kPYpY26sR7s4\rf^bp&e4T-996cFots7kUbo*G*mDIuYOfs>>;[VF@8gh`6*;l4>IH*H(J?'&s7Y2cP&gj<*%8r$baC7aBi]'(Zt[I7&Q2-iZ33EoX)W\!muetiqXs/5If+F.p5%J6(juJdzzzzzzzzzzz!!'96c^m9mrAJTNCc=p*4*Ji#cC?t?:)CBcp$/J7^3o`sBmJOGF`nL_PEU.Rnjh2rISlXqET41:rYdY/e=]*[B$?XIA&jV.1og_Al=`^/);CgJNZ:%lFOpQo!!)L1pX)JQq>;:_pgJ5h;GpDT,"6TOP9s!L,^Rh*6\c09'$HLg'D9@dk0,8+B?QT8Jm6S/0>7"@/q*NaiDEtY7<7\CWBPb,jNX1GB9G/ig.%&?X]`!MA`I-IrH5-8EVAa%WKS]*StK#[:S/]$ORRsBZ=gOuI3.(Ac:HeAMs8MtHqWXn!4aL)+:dGG0kK`HMN=nY\!!!"(,_8hbjN3V9X&moiC=T=)5CVCoc8Gn\8e`jTUe&1FoeL1*I.ZW"b>c/:[rq#fO[W.3\TDZ.NZFGLk7C'XSN=/f`JWK`G<7XnDr8:Ds8G+DUd+nW1JO;p'!A'+cjD_hI'YA-,'Mli*Daj$Cu2gMj2R&k/WCBa'UA>p]6:<]M%)jMz&[4Z#j84uc8sBTT8N5LNUJBXNAW'F\pu@ENU#Z\8d9C#m',)["8ld^]_cWU!"nR\99V6\"3Fcg4CtZgg*?,haf<8OgWDY&6G9O"gYJ,/F5Pn-]*N,W`:kOE_0]jXBB,#R58Jjq6k.pC=T>L5(.`%o)J:(01PgoBNk4q:Hjn%dd<^.oAYZ]b.M#lG-tO]kudubr>.+nX=pJGRjQBTQn[Ka='j"?4hJq-OHAtQ,EKoHkh!#1A4c14eQ6*@J,Xhd7AK(N@Da?_lZSN^.tbKJd3<'L6rLh0kQk?PX=,Q9^A6oF$Q&6f]t7@L?a?pDIe_lWK*Mp9qsCk\11daZ;<)086%]B4pBMeRLK;(Yat#q'6B@l3LZD89355;oAK*^&(f\g'0'#2LV#RRkQqn`,TAl*DYaU.("*c*>8Y_pXe*\tl-t88OWGBY!;/`qF3KSYT+>?bUp-LV,-=Y1*W7*^/4j-VPUZuGp9mH72f!_WcW3cDb.VE'N+Y`d4DrgZ_'5(#>,g9aa[TKiOQ:kJ),IXti-2&K24jN*HIs*^eK0);PETgH6FHE/b=Th!M5?+\8:DnPUp1%jVLP;5,;/=%]qGOJk[]_C3&O/6cU4S";-PQ%2h&4NX$YAUfn3XAVR\nrm7e#&+9;c]r"9daWhIJMukc1PXm-(LDsRPo"tCgW0r7d;gb90Z1:jF7(p'QlkZ"TSN&?t#(iKaS\TSlm?'cht>I$7gu\,UAc?eYhUJoA4oih>5QIMs96?Mp5+@ldi37;DM<`'B@!Z4aZmU^8=@6Pn]WHF6:&VlY?66^\oKRp$UZ5I/$S2n%\ltQS+gsj+\!^IeD5m)`MZA/CY;$F]j\B24F;YO$33(Z!<9_YJ:(J_n&A=PXm=J[JWMZO1G`Rac[tCV>52V?+Y9JUSrWqe%r%aX$U/l,Dq@K++5toqXjVH=M6dt5H>5PMMg)nB32'1`TWKW]P#Q^`bhuH./M1Ih`.]4s8MuC?\kGKI.E-cl4bgR<3"V7?h_55o3'`LQ7-L^Qh\3XMTRh7QNTe*_#&esGOI0GhgYIiH+kd9!!!!A,([KZ\oQoTbaC8&Td@5PNM?9+?FWk^put]J-]-$4/Mfmo8XfKR.SgAjiHF!AjsW9:oOqt4b:gW[]5qo*rH@dG3(HjErhF&P8P)K@L(%eIXI27_l'Z1Ud;hkoeNDK`;l;4`kf;$g7J0S_#Pt3in%JIe?%kNBpqmneK5LfhZs1"WQBqRF^]4-/rM_2B'EA+55Ze)_k^!2VSm!O^;L]`e))p4e57o)W]'6'tU8U7!Ac/S[:-t-21EQ+Gb2R`o!=p"jsYQRpi/l6[;+7?4(^_Slne6H=JDbULHG0%Y8Tk0qWk?KapY9hU^.CDL5`ZmFE^&P4\miX9KS5"0=gIDHYp3ocr@\6H;,db9ddg[fh<"P.G=@@_z_@e\_Si;)K=eJ$2?+Y8oU&N]"c[YEOhS"7^UV6X"gW'2g@7=&cQmbGA%4;p['D;Mq9]Nh[KJMGc`C"%/i)FaQ1KrqY`Rk,l,LCAHs3al>.gp="F(9p[K'rX=e7%4>B/=m(Iep&DR\T)HI'haDcT:<7E:B,VmFmO;8Y.-7MOD1TW)2,Z7Ke;Sitt\s1Mqq?'[t-@DdiAhq)+Sc%lrV6ZH8:XlYXs2HhPrl6B@k_aiQSufs>=0e#(AKhgG%=0>GSe\)2YH'M;1R>ILX1-n;8K__,FCK@$Ml+.5P)-'E%lU*p!A!.Y@-7FC`+kLjIgO?oeQD;4css4:6h2/6[IThdiE<+Ol$4n!l`D7t8gN2A@Bbc&Y/*(A3N5?PSplDr/;X]Vjf_M&BBNCOOK,oGqA3rAXd+YmC-,'$9dGp^7^0/0t\Rk'/?+[iIlDr5pqolPZ=R=eODpkFQT7$3do88;O3B;B7W)5^)p6;CISN?H9l-ifgj*'Y5+d\/rBlLn?"k*1!#nnj#E<6+?zzzzzzzzzzzzzzzzzzzzzzzzzz+=Sc(;Kj;\ic:mRJ1V7UN.]Cb7Lu)!B*7L>FMrcT!<<*"i'6@%k:lg`'MXTLEOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9PgncV\\m;K0De#<^!lk6@[dc`j_VG)2lt+>1u;EOetd^_R/;`^/blUBf,LZN56*U9Pj5F4@']Rhl%Yeu`.0l5gSCaA0CZ;TkC[O'phPCY-_AX&c>X2mmMW[]g[4nW^SM/6NTO#QEaMgu<\Sm'5op.orb(^OQ8Pm9AeDeZotlYq1KZDV_mH7escHqi(*rX&iZ8DT8Vo02bA58Mb#)*'ScFPUTPT_\dr9bEg8;Dr/.[9d@0,KYFcE?+SO5I?^)1G3ul>I1+lVSNF5\(]0ATrtM2@/-u1oeYuIp?\#2\^A@0!^V6ZD8H^5nU6?s#ehtU5--M;h4&W1FA&aI!P9q0X[7QQ/1@MpNhOEk]Mks.%4#26]p=0Y+gNeI^`T8Qb\.9r6-8obsGf,7F(TD>HDcZI9"N7eU%_CrUWuL/@r\Vb>Gi4.2e]V&0ej\kRs8-0SXBCPA8s:UH_[euEG4"#)(4G;0=%X_+^%YiDZfA>)qT`-?:nbZtj=Rjr13`0AMqZ'F9UIM"qfD9[f(]b"MT15RU1e_bN#=DiQc5q&Vd@kY-!V$Md3kQ6dQ$cGp!m-Cf%6tugMaiDbV!DRTL"3@U?JEbm^qIPR54#ES2P4f/\1Ju4"jLh"qDV$$S#8_@&c)@U:?.M&4P^A-Ds?cn(bH0;)B!U^]2$.;Z?Uin%\o%MA7W[\c0Bq!td)q>e+lq7dAR,>6OQWEYNC*9p[K'?6@Xo:TliaJH?!-GlT+IiaO$f`e"JjW:=2'r:oecd^3^eF%s2/Y$SfqmO!hYgUF@i[48ItBSaNbU3lV#ad"BCSq6"\\om>meWb4.gQF-ce5@ZY.(Xm+HHR>A7+$gEqlY1ZJ,riZA]pC;SpF!:s8Mn6F(O#c&R=l.2lf;?bNJ?V-n:"uRPek#%[4;9fC%J,2r*i#SND%5gpf)C>Sanbe#(4?`.(Lk#G%GlkKK?hjn7oh1C>^2<-E)gJiN,pFuupI5%[/H4>4.i02cB)QB`V.e>SL,d^*R^*R]WL(Rf-:\onQR\!o*JFfI7.@[cJFZ]IOMjS_GD;Nc=9G$A2iOXn&]6=]^.7Sst>'Q)F&RD+mdm,,RmmVMjuoeY3aXfu9R$AWDYm#'rqf,`)ni9hK,U($U1c)s'1IWS&+(sXgnHGJA',aLbaC9Q#>b*LF3i:299%(,?-AQfYDm)6O?q`Jb;gi*H^#]/./MbDhas0_VG6s&s8>aj-4.YY>.\rp.=C3=7m?h:ZTNO(I.YfVo%kKD0i8;Lk01427E)3&UF]8ad\KIrb*>V`-B6?$$i5r.6aU)Nd(TLPIep$=%<8_sKsc!bcM@%me!cOO8iaol-p5.r(p%@%j.s\Vb`r!D;2Lb[4j5U)R6+dqGJ8s7de%kIbf@S^%U0*oB$qNd&gM2X])?*2-C`$r#tPPj117h71):nW=Y'Ul@e-n9.Qn%S[:3+N^h.Yh7I%dRm2D:QIr=1ERL47F(WOW-$>_02s<^nk0?nD]^\H?O\Y17M%A=RT76Vcfmh2Mr*?0n)*-=5*EK"0Qi?$+5<>Y@K8N-";YJ)JJYh#09q8t4kaL9ZsY.O*_3JrebbC1j<[8#>$5Q:Ff9,*AnK,U($U1c)s'1MZ^fon4):+=R0;rs6DY[BbVEn=ZJ]`un)3HAfiPkY"E`^AY=`NhM]GIHGcH[`$bCFUN]Wd]1ol?J7AY!l;%HkSD\mPr%#("gmOJ+B*4A743",JRHg.AnjBm`Jao9J7c[UkP]_OCYW9h*A[Zi"-N[$^Eb&4WJ#__df8d$U[lMST9L%oEofnd"c'M78MVE/fepe&*(A\B\b"7'=D4an5$VA&d`^kFR#q98XE4OsstAE#L0RJYH?#)5O^'6or,sf4OpNXr-7'u&78;B#YBkEKFdGrkY?sW!T$sQ2PIR&$E.`&T./Ln!?UuI:q4kOXDR=ihG.l02)DikqJ'5u7='[+*T6T@PA>6"1DB<"-A8<*UK?L-YOqoWQkfZGT)Tg0]V8eRNsQ$r:3MJhX&q%P:p0dFha)fCtZ+*qDR9^='nZ33Jpk:;J!h)'f*CM3Ek:nmG,6NG"u<`,:;VY32.f@6uXZ.*!Jch(/;NIDmsN6c5]:7FR&I1+q5$SIJ0)Ts&k3X7ubCr/5mX9j:QZ?W`1E-OE^0MIJ`E@lU#1IcA1SZ')G%3o&Rn^i)4UOCtc7q5"Wb>m>R6`j>&`rBJ;A8;)`"Q4>k&*3ca<&j9tuR-f07Bc2IP6)lLE<1M8%A\0suUQ!R$HDn4sFSZ:kpjEb@\U=Y_='e1JuSsNQT8E9XX`jeSblGAFQrVH39Mm#;f^IO>+nhM@3_74bmY@#:RH50$d/Pr*jci:b'`aeUQba;h/H\_L_rsDA-9dYb/&FR/>$%Q%SN;ofX?G3r&$Ad)LA\;keLH!".QaamMX'@XpYC%c*^n#7e249em(i0i'!BR\hkW;Ugph>bpM.m;/TQZhhPJ,*]P5c!_YDi@d+e+uIedQ'.=#ubT="+-)fPNL2eF"op%g(IWaneqs"eltT+1><7j$tpfp?1>TZ6)L-lNI;Ln]%XepY@&M'nnim'G#sqfO2pqC[0NU\)<'jm85uJ!Ns\VG6_V#:`6(*;Vs3e:i%1^Z1>9I/^`JgA!i1puC)AO$EVG/*QY!5;4jG&k*7Mb117HJ+d&Vc'gMX.-cDRmtsa:d_akSH`pY_0'EKPqVT/q)scNb11\I6I)e&8bpkffmVG2$B6f*3jis:b[4e;h^9J2!MAkAg2?%A^hDZAA+cUd/qX,Sc_GLG5<8W'5*BI0WTPiW!fc3HB9khu7kl(85:NkNEGOOCjIqsR,p>YnOeS!J:NM:`n9>1s+NB;^9;:PLhHo&knaYoLVrrP.:'hq:md^OB\DHjSfD:l(dIYYo*s#edI&4P\QCtYsi:$;3@Y7UZ@tihN9GDWc9b^=9E4Kf@]!]2Kebu13NujSrUj);H+-OeDC1Hta2ljRtp\@&!0V/e(c-#o9rUNT\U8W(P]9N1ZMk\5k0H7cjgT=[=+&N`4,)DuiT,pckoopEtA]pC)WTGTYql7@>[N%]tRml^rO+'s5J,fL/Fme%q3`VL6I!AsI+c`.q>nat[J,Ro&?GCr;TDt3&kHt[[BdE^?MRj\s:njoYX["dZssA!]a[s)O4IJ)@ZJPRH@U^HHr;ka0>.]'1Q:o!E,[FM"_]\Pi""n)&6uQYl\T=\JO6_E/4t&(rG3pd2;glYYZN"+'n+lWl!^1o(P`+\BM%cYg@tf!`mF%hh?H$5qiIr($0YU.4SP43cU,"(l12%C#lDq+!..k^X3XBbXeOdak7S>Y%FJGJD&k+#\m^lpGn-shE@dMa>J,["..8cgmci7r6SRp*:3O45.Tmos+CUS0=hV;r2RruQ!"^:N0n%MHg?^LFXrQ6Xo,eJu/EpT/DbCs8,%OI!MhRm"kQWo5bn(taC.p!4.#7Hnf&4P]..&VLL(%pnFjsV]*51=Faa_n)%Wr2D-+3CJc+8o6SEU63td]'NokJQmh$$#V2n)(^)?)U^#.7^Oe\j--%Gpl`n,]N2.^q&fks4*<,!&3+k#]:W`?*S$lPf>cdTCDj5^U*_eRi.U"7g=Fblb1@k1QZUu*cSkMs\(P'pFkSA\"Z^KI!`D;iIXcejhZ5ej,Z-Ans1[ncDFP;`SdlI=5YVL5(+;0f/8V+\9>HK_%0'e8DmU*q!L&4P]WZ$5G2b03QaX]hg\W%TH8m+o2:G'at*FW5Uo:5?7n$Gbc(!h*S)jn.-bEgSYn[Km'HOd@YgQM2eo8=MJPVB=(K9:\4"MU%_P;sVLgd%Wr:IFaMZk/,ugHhDedcC?n+^GR'bBuET&]s=9R6M7ILd[Q&%n=[e_LaX/LU)6=_rSKZf-c;uIH1D@_2G>L?V+oh.)V64+s4t2t9@p/0,`43XZq,PlX&gst,e9$4/pmgdkk48Lf3ZpOorYqq'UA9l4sa4GNrG?Rq43\=iAL*O'1H2_3/XS+QVQDKaG%k5A[MF5pU=kc`n4/M&':OA"tAbI>/(I\qIX$HH?IK$23"&Fm5FAJFq[<.r=?e&\p`%%2sHSg`$d,62kEYk#H$A59,*)4aJ.lScTIsUs8;K7jF9\IAH18aNLrf5q;[5"CVS.VYT1)@bBd.Q*u[Qg%aRcooIKB]!sdPhDm-p3@45'Ob`>!fW"g<'0%DA=lse20Vlj428lMG0s$+rO1M8=T'M\:NpKs@HTmucH#G,JFK%9Ho]YN,!"0Sq*&;'Ge>ZC>6]J>:gUBt=gonKl>/IR/Eo2,:#R%_0VceF-Vd)O[2iPVZB[J"aXQ2&lnuqio4(@KV)t)p,h7?T=WA6#F?CEs"Y46(EK:B8i1Zf0jm+@Y!T/.G?)lu1hY?X$#7hklq9!cas$)YR;u:_rd2R-V@I?GNejF7^mij9Z++$f3+.ZVZ#f*R6A5d.bEq\ZQX?%O^Kf7\]:r#g1qD+A6gT]0K-\7^W)7(%p?fk<>[D^;Q']'h[UO"D&Du-n!'rAPCt#9+TL"3ha)qGL`S*Ve@Ddi&?+W;lbVRR.pKWb#4_">D]iZ4:`%cEn^^a3u(<#;p.P=d0%bTcka#N;<@.`@pFuI,G;)B',jZ+eCd(.!V_)(FoJ/sZ1=:gg'+YHh'%bTcka#N;<@.`@pFuI,G7n5+dbH2>B.g6/oEPQ'(FD`dYn-hAt@#(L%(<#<8Ls)'8"1C2I0b-6'(d3+uSIMg@d1HcGE\#)i9#1O4*:OdMSK!M/4N#GKf\u%M"`_'fic:mRJ1V7UN.]Cb7Lu)!B*7L>FMrd@g^8&3;K0De#<^!lk6@[dc`j_VFuVNl6!S;]\6LIB@#G+.j.LIGd=Z)af`4)R*O-_>[mF?&'HF?r!KV6I\\[LG1[Jq.*KH.^&=6TE/lrAif]%G%39].*o\^U12S]em7kBJ>XUpgL"UAj`^ge@+DD6D+$p,D9LSH(0`8t$UbE[Y][Q*2"%QZNc4a;^P%C!at&I[T=/&^OA_#[a[n/)D$)iPh#_p/J=iTQ($EOchDEi%]E/Im#aK?aoq&"[3B"70uK`.GMS$?],8*>U_X?MZY$\TQ>b5K4iii!';/@Yok[.6dX7G`5R@/;VKO&=4mN#AeCq@iTT.0RE3s;)DtHTk()u3aam(BK)Ggg@ZgCF+r//_k71YT'A"5VE/q:A"8Ed6!S;]\6LIB@#G+.j.LIGd=Z(fU-T_/,t!C7!P>i>9*,L#Fufm*]ue(%GH%T)(Lj\fM)h/%Hj($rJA[%@5[.#BS!Lf3fKB(c5lBkVrCeiQWkUc;'utp9g^8&3;K0De#<^!lk6@[dcO`Nt2BGJF$DdiJ;hK82q5%AHU,#eP9fWVci9[EQULgHH#<^#*3#9Hotl%%U>T\XR9C"JuUbS=/W%YGNVH`FtsRHiQ.O)ZY0"`_'fic:mRJ1V7UN.]Cb7Lu(6M?[o[PRJ:!#OJ;lm=t4*]Db30Y-=@8(pq*3;]S?N<9Fa9N)O^ILs)n3QR`4ECiR7#*-?'PHLM>?1hbpCA>i],8*>U_X?MZY$\TQ>b5K4g"75oU=\6\Wqh];\*.iV_-,5>dh!XJQsA/TCD_LX@m-\H"`.[1Fq9b#eckEgAjM99(329PV#$4b_JJB'Y5ggKd4)5:fk`^@jETle(fC=$iX^U3<&<9=Og.>L1sS3>D2ZqPW1JB'Vaa+ChV$?K6G0.V-SSF107RP3=K*Lm&:JiAZBeV4N=?[(<#<8Ls)'8"1C2I0b-6'(d3+u-lTJ_:bkuu*O)"OZl@:DmJ7K]\\`+(@F,'g:N[L+;k6#.0i#]m+>1,i>cnb\Yf-X(ER;84keT&Cd@cJSP+b5,JDJ_Jh/IgWf:T"c'in6CK,-FnWl&Mm%t!SL@\'Mr^:>#YaTSL[(t?n*Ce4Ok72`q;fO@EbH2>B.g6/oEPQ'(FD`dYn-i/NB]GdsW),N_2`58-S6t"C-Rs1keWdtE"jW_)0Nt>7GJI^YMISqWDM>T*.6(^n"!6KqF+_kmB8E9J)\45^L!g"6WBn/Tr6h`4;4/r9VAodlE;!7dd5'7_"!6K%*"*tF$AT*3ML&'m."[^FIJWSj%3%3DhX"(Z@BF,7#UYCLkKY)3HoQchrl^]cB>U2c^.#9F[r1"_A&aJLP:*P<[k8sQ-,d?)Hc^_Wm+AR^([%3M-Vl@$]NEa#kK]Wa8Ond\Oj8`rZL6scFlL>r9>e@^Zt[!#]5G^[lS-jt,k5oU=\6\Wqh];\*.iV_-,5>dh!XJQsA/TCD_LX@m-\H)9&^O?"H\&Qq^e#-9N?9N`5oJ0M2cCK5jYJT#Q$PtFs([JpV4W,HSLreP=R$ai(W?t?.)#oBe_$;&Q@B3G2/9?7;n]+P1.IYSIrsX92.H_%PBCF]j`[mTJ'g]=#RI6Ou?@Mn:B`cTV"nJroYg95@,mhg"1@)fNCZaH7^VhgTq1S&:.sa,V/QIcVU+Vk8FLEofnr0A12QYEn$gl-`#d6nsRb.8qRXpP8;l[rq#fldi1":DAdMiLXZCpl_DrZJ51ZeS`C*cpr$7`f8ZWA\7QZ4'/LcOckkO#ulXMd\9ud[":bE0luJNo8J5to_nOAs8@Q6e#.ERcp8$)f<;CNjm"0![!_]?Ei=0MhHeEjEof&[X'>>ufXpUV.uNrgrs&kD8I%OY'F@/q6m3DB+GsXE%Mg<%+u]gXJ<6kFttJt30%&K=hK:bdJkPbOn>_#Ecfbf0RIZSV3s@1Vt2_u'*3f@_rAo@u..Zb,sG*8%&YP?Vt=p&=jWmoU:=dAd,lW)9>N)V;`RJ!oDBhgJQ@g#pu8VP64c:bGXCDdJ$:W?qA8j:TKX9<[FY.aPd+p=j=\DA%EgMdPh\j,W\4D@*-&Puh:KMn4*!.[St%bECA^D;05l/[e3IU9^\%Gti4N9#bu"5mPAuqsClMem!&u<_l*E39.&@YElekD7A>%1:?37Ed&nWp[6kLaqh!N7B=U/7ig-Q6%epgHS>3URPekU38oNo[;*DTrqfQ8UnUGVU4I;Kc/*g9]lLoe;eX9]1M"Q<3B+tH^.DN#Z_.2t_L^j4qrn";%tB[\/,<$0jd0=\UIL4h99qub<)g#-]mBA*DS,;!T4L`pU2gGdBj?h>g9k^s"Ru->DjRj$P>=A>75s%EPADjV\545>C+7\E$*0dZhKYg"m_r2*gTFho'2L_f(!.b"2GZL/<4-G.?V?lNopA%U84BqG]Aud@!LQKe@G!M5nPl;b=\W$'/R?'4@4Wk8#N-K!BHF\0Jm;$i'SZ:aW*FD?7j!0OOa;WsFD.<(esR26aYn`.ZfMe$4Fo:+XU2f^\$B:Ns2kK]Wf2Jp%O55W8?3E)p@Ue-b>N>g?H;lAd&Ricq:Om7ZT.NU1Vqq^^ag1dHSN>cZAeQ-^;p>qWJWZjI1V#C)78M7[MhL#:oTDql[GM[UXp[6k6Q=Rq>>OliT;l+[q`(H>2rCMS8]6>8!4VSYh;ji$M0e*.@J,dCN;!mbG@*"q>>#ZDAP8&s]8nICbN,mlD#O"T:RB/gf<6hJ*&(cNICSA;=a$,#,#ZhH\=[B2:S4f8U@mg%9;WGES4g.47p>i7\8gQi+IP*&iZp=V2MC8LC0kFTHdjY,Yg`JYO*[X7%o2b(d1="\@3n&T_;dR?nUo&,3%KR&)74MY.Yk:)e/j-QUnW.=!OJG*U^\afh.;pYIdr>'a9,"#V/+fMl!@#K&a(9V45IJj9@oGuKZ8uj?[:aunM>CFFdHVnM\[n-Mek-`)J(Y$HD^>4IC-8fW_2h>t2A>=0<)&6(4H!XCu\4F:Qn`m0YQLntBW)5Eff$qEB.RoI?X\)SC3ca<&\4@[mW`;^jQDWb^W@rNCO6u!5F=kC!.N5PXWT_Qo1CNN`U%\#)fGVp7)>k01*VYGKJh;UOi%7CA,ejA7H0QqFbpfJcOp<2F^Pled'X]d6+rVG4\^MC[br]M>"YWq;&gIZUU[r,WDqWMj>sEg-"WVk9t`aUssuBl`^Z#HKg1J=Uo@=ku*^SND&MD7>d)IRH,8T(.FC3_0H,q94Bp*k6KXN,t]fa]j&]kbF3)H_bQmc9:pWL(,(klVc-kQ[*-Hj*WX02eI(X-9$qS8%:.Mk]u?^=//4o3UfZ?q\AcFrA2b^'8Q+s(LP7Tl//M((*qQirO5(Z?[fPm,=f8T78/1,;1b$FjJ]Eb/\+;dhRn->c"&;=)(nh7J7VMFjhQsFioQM6Nh?.Aq3_1*Pd^\YCOQ>D>eR!e'q;Ob?\'8Zicmj<(:o;=S*@b?"T:?9/hggq!%Elh'PsZX1=kh7Il4?OgAJArSX:r901)eud]cLEA,ZqY'=,Nl]1uXo(!Vb<<84oU%cn=RWDjgkIFAm+7;A+%KB4<)UNbmFVBiKI]oHR^L8X;hk:-Vobp;?-NSp=nARa`@EfB[J$sgBHWWNJl@`7AJjt1$%C?f:sf[TI\3lET>(/B-CHfDLLr`k9bD71RS$[mZ8SZG2@N-AC8bt6e04mDnl6oBmJg_Q#Y27pY8[qIUq%o^QpdA84Bj0("G46hDr9I9)theD&Dt@;`keo_9&)J(WDc<=M8(PZ(VTIh9*N4O*,TF1BDdl^*\"2&Ik*6bb*9cS<-5p+!=']onE269f<.jJJo7*9at952T&$u#PJ8;c>d>f(S1,1Qmm=$R<0;iUil$\:oJL=/TR6G$o!_qRp!lD!GF2%?8Da"gZY%IF4\OYZ:mNbAhP*FHorV#TMT2:/'2+WB.26\sm=.d'.f!Z?A1D=3/lL)IAPYa]/R)7Xs5UWSIC/dY`rkHfHFrRQRp6+hT)A<:D`?EeZZFDP-VC5019,3F[#n@6h0%(n0.&+eo!crKV9L8`dHjCm[>h).:@IE[J>lKeL4.Mb:IT#`eWaXldabB<`fa5H!1o=1k.rC9MOo"FBlXe]rZC#pnI(qB4IT$-!X\)$GT.^,lTDheZf<8OG=`,NM[O*M1R<)LCpVI$6#VidpF#g6B4RVT'_MP%GEa#Dn'F55pG]C.?iY'OoP?V?k[UnZP)MJ=)Sae;r@0U6CjY]#uiWCX.sR^*?*\pBXZ=AilE^b\m94P5ls;7X3GCtUSXBZAR#F7T'<,$hDHhL"]lX]f#F54pLp))GmSXBG/ednc>/,or(OEQL/iQYoE[Hrj:Q@.a]:V+[/t9tU8*9B4onP]UEiD7VO$0pbd3?\(?[1O`hS":)\DrT)AL\Fc4*Rj_g)YCmEH7Bl2b8/JECXHnpR<_5W;:MTb:^D#h9/CP-%@=lg&LEFc^'u!D[1[dl).h!G*PdeMXJ7Zr`a9NV>ALVUe'WI%LMgaX'ro#adq29WDfYZ34OM1kIk6)M8WtKFhKe;^q=DB#qWmCpV]Tln!>:P8\nW=t&X@`B>*.cCg6Wi0]-jW.o!c!*BY6S]_aQ$nY_o6NEjWp!Hi!!)jfp?;3IoF:l`>ttQt,QZpWPG>aSM'Q<3ehN?`dM>lIAsCQ1`e@FmI#)(Iu&9<"'[%8DW4W;c33kW&i\WR57@Y&!ANe).<:2jc[`/n(q@;-B5BNhnFU?rpn\&\g_E%dRNo]UZ1TUEir5'EM.bWGN-PtWlQs1p,6EVU=kZdC)_B=Tj.XQQ"n4@Djo[b8?K1dZ4'pJHBlBM;JH`X1K)U_fT]<3or;j!%B8"+J,]&&[l)XJQE9R'.IjSo4Sn9:Z75$mqXWmbqsKsO\bfK#.Ot/m(LMQpe>cYNX&c@`V_7(3?NQGBjH;+pb!iu(J!8PrQ$!p:0&NKuQhU\3j"+o/](Jt#BN4p.fS0hSb!a:@NU>id%Ot+VOgp>P3=7:tnSra%AV4t;/cYh@;SJ3qpcp7Sqj!"E[XrK6\.a!t?.$BNh]h+pj`>;l$El]EGF1u1RpY9gcr/2b>,:`G:f3EBV'WJ:5p?^IR_1DhjriL8l.O-;#(B;\gVVr^6%9Q%s;)qAs)cGugrZ*t;i26"0BN4-XaU43=S6Xd2,fUqAd&*P0IJ-h(`f1@+V5!7/UG68uW(gEjZEE:=-C:<@[b3#'@K*amHE1W#QM'RqQ]mo/+s]I7Mr`sP]6A0bA(<"\fer[)>2"ptMIo@.Wbjl3F*^WK!)06C0^P:+GUcUlXJRP$QEFQU0U@sW"7V7K1_52.Kq*6WnlE;TGjM]Ub5Etp,f,^%=n8-U9>kjX+dnSM;7uG=)uOksC]e9SZD7d?-G99IbONa`hgYH>nl'LjpcnZBZSHr?r@jJknicQb,P&%^P^5]%]d"('^C<67./flngn%623d'fAZ1;hTM`fG/gMahY1]H0Ncahi-03bkYri#0JCXt%8hC%RNj,ZG(g2!mWI-T&VDlm3N9)9:;pCV9+E8ej=A&IJWU.V_;T25QCZQEc$up1EE'WE$RP;J^\I>k1A$..YUi$gUKldjV!*C<#^R?dhGSHC6d>6A^JlUWuT-B;L8D8jWn3c`!&./6$`hON!#ZVkd"Ugi!lZa[W.WRas@$dWAY1^VCA*oe1.LJbFk]4=#l3cV=jmOj&DNR6-_fYSUq#$%X?!fbC\,o2l*2%`a*U5QN0^Ug+_l_VKaRgX/r0LK9iZHjY3!bg&pi';fNi]3=A,r$5UiFi#.G*$UtZ`OG[clGKHO`!\fmS_m"'Jii,JNZC8'->.T$F_cTfO&&9tr`H`$U/-OWT=>8ccB.UVF(d3+2.]R@@-&6LI^f7kQQUEC;[8oRc:;;Xg4D$$sL5gQ,?^%C(J*9:;qJij=CGe.9J:aJ7gFE//UNp6Ro*Qga._r$,BN?%E#noMPhZ+b%f'SB^+e^%V&)04TNef($@lEZOgZF@)7d(T!@Lb@.`@dWMm7FQQ4-o!)ojT%/ZnNSr2#IX!u5bV5mZXN$Y=o!'K:@S-M@*6BIai"Z$X5`hLY.d=XBRU>!UmE[[7S9VpGsm$jks.T3=KVC[@cY$U3DQB^)*n;L:c*X"J26$8ccB.UVF(d3,]_$6:23q=E7=U;<3Y[GHOcWG9l0RE5CK+0MCFlYiMZOgZF@)7d(T!@Lb@.`@d#9.'flH"T#B-G>k_1EO04CccM_o&A?]]!6#9NW<\&EGAFfdU#Wj+(bn\h"[]Gf.?%R'8XB+NR[kZ;[u8`W=CfFBL;Dn:lQ)0O]+b_>aN9!!'e]VRl@QK_^3bOI^t,1CeZLU"&)f;GnB$f"PG5+0]R[r/@mAL4a=l\#+2VUnfZ"V#dRC5@)`5n=EI\"HLQZA%5;45j?\m6&7h\H_2JJfZ08K$o\^/`)dpPJaFbUJ+imEpJf+eUA'nl(keS2J2Sb!rOU"1t6BIai"Z$X5`hLY.d=X@tCk)hm,7fBrKciG\$YCCJN('':UBb]sfDlRc7ihdn$UJqC(8ccB.UVF(d3,]_$6:23q=E7=U;<3Y[GHOcWG9l0RE5CK+0MCFlYiMZOgZF@)7d(T!@Lb@.`@d#9.'flH"T#B-G>k_1EO04CccM_f.b08^h_`;NO]mcfmD5\jgCcbSUDHoD:;qJij=CGe.9J:aJ7gFE//UNp6Ro*Q4M>f^:R;&TV:mWiS#1E[;Tl>J4o"Y_>663goV-*;WAkE?S:r(I"Ueo^n;Kf&"eu<@84BqGVfto)kn8NG<#^R?dhGSHC,skQ#G3&S9)rO_?;sWY($@lEZOgZF@)7d(T!@Lb@.`@dWMm8qoZl\a>ll^FC;[8oRc:;;/]YHri7"H<$)"BIMlI)]i]IKe(4tle/=:Fm1DX73N#oVT("G46hDr9I9)theD&Dt@;`keoj]L+UI!W.O!L,Hf;)R<3S-M@*6BIai"Z$X5`hLY.d=XBRU>!W94/_gp$,BN?%E#noMPhZ+*:)=2:QMq1J?hWtW[=6no,u+W#dRC5@)`5n=EI\"HLQYg<82YDkOb>u!LQKe@G!M5nPl14kc2%ar7slRW'b%K-4eMaA0R')$`96d:L/X_&H9LD<'lOdsJY/?n0]]@G`o\;it7DFm[#C8)"YA=ecd5'2HMl&EGAFfdU#Wj+(bn\h"[]GXEs\D*5LQH;Bk-9VpGsm$jks.T4HpY!)RPBNkNdC\4?9_PoL*Jt.N;3s?"(*:SnUQNa,hDb*=)NMgtqn*(I8WDjgkIFAm+7;=j6[0NFDpD$cl:d>P"2VrBfEEYa8n'J,Vk^bZa3(5s3[:.]H:%;2YQ=F3InEJ?/"Am\57Fd&iE?56C$UJqC(/-HGnB$f"PG5+0]R[r/@mAL4a9=DWbjl3F*^WK!)06C0^P:+GUcV7Z*$7boOqG1-u8ILC;Qr0%t^=*+?K`7AfUh).:@IE[J>lKeL4.Mb:IT"Yf!PaT*c4OMAW:"q9fNmN6'/DaA>`hON!#ZVkd"Ugi!lZa[dj"8kri;R0U6CjY]#uiWCSV]](Y(2UMU=1XO2s+$)ccFfRR+,;m\92W>,)%/RQ6iUP)E,q;d;QIaINYhuE]-eB$@OCFu@u15o+T""K2YX&jfJmC+$82a$LarfP$S'e?*PJ,fD<4K`^4AI$m_G0V#8)`]8,c[GQDGOkMns7t!=T76(gmg9pJq9r@3p@[$EbAJ8H0]U30.sMikNh2bXB$[&3H1L$q;l>*Dq<,koYJ0i_5!L;E>IH(h]\e5=IE<@F_1Dif1RR:J->VC7C:Oi.0;+Uh9ikl8,8J`eT&)K@Vb7#e;Jd9E9iF.hWT@76*di:@/HM(nH;QQY6C%jfc,-Nb^:M?+HSfQkYYL`M^\Gc$B$?XInH-nN]i0FU_]ML:8^3\]O$*!S0>@3*hIjuq.6Hq(dnbG`PBQ?IST`_$Oor]mn%\o%^juURf<8PnG3qJAqRlCA/*crBn%O,rSNm/McY<^,-4W&sONf`A]Kq/S`u]ToQX>1Z[jcg$Ut3Eo5?ni0>h48pl?1#W7r6!!"Nc)3[AR/I`uT@pl+d8sDgD94^])d?M!Q7rQ.up#Eo_WAfk9EdD^Y:=o&j>,nO7a$S)=/+Va(,oA_X](kFR$*Xq;1-oT8Dd\%<\J6;G$D])1s2^Z:o.c8k'(eCa>qX=LKMT:J#cOsMHA+o->gbr.Z[kbH\/BB$D8rN/1B@`4(c>1[,2]f`L(]RTnG?g3b\X]i-.S`IcXj,ZDG0OR/ZHM(INDLM63B.)0D;l441gOjP"8$LNMgtqn*(I8WDjgkIFAm+7;=j6[0NIJ@k/[t)pV2O,a5OlZ*Hg\GB%*/YqHltl+i:-C[E52M&cBD$f)&;bip?gW/mbM(s??tXt9q!n!nA#.dOJK]64aJC>55X]Q-"4u>=^!$bNKocd*coO[1K0Sj=V=^Y(&dg/J%a#X]9F8LS_P_fZYHV)MBXG'(Z!/p,MTYDRlmV)Em$$R27EF(+2)skju$o'BWo,CRQZ#kg9k]B"240;qrCq.jH2s4*E4L_@E]C3J7MW>;IlfmGj5;"<qXr:%V5g1i.K>,fdHr9$;()`KtPbVM1]BH+,0<)aKljHCs`I'Qu[eU;SlY$LeYHgeI8Z9m7ESTiqQa5b1!PK.UUq5,WF\T4NOK&tF[rBl`+``N(ZcTSaC]6<^[g/hX0[C#Pq`udgjO"*^GErU'7q3>#fOdh">/R"6n`l^nBcThGW;e\Eod3MUejFmE)gLm.,L(568;1n\l.JG#dEjh)<9oU&Ke-frQMUnk3ZWF>:gMOE*nmf8q<&FSV:/$hhg9k^s"Ru->DjQFOP>=A>75s%EPADjV\545>C+7\ERB*&@hKVCG-1QqODdUZKm)0Q5<(1h_+If:#HE,[=11Z2G6fWAljWaK+TD_GH[^7Jb=EuGHC)lD*(L8<4,X4HqGGLte`m[#IpN-_W<2pDF^1iJ&,./EVg4N1^[O$I07PCbgUnW.m4q$+`^]!Z\_irF=m+HI;IJ;P'6"Q<9'cfG`o]DW]^1PWYYJ:'?0))YIZF!K(7Om<.s8MnlDXoSPc'pXVn%A8?Imkun/R,Y_[gd@f+M3UO2(C5DB-aZ^([D54()5>J'N8fCo&UlQFSPh'IkUU-WG$)mV5!SEcTgd#_m\3,MmdKW%N@;W5#+^Jd4o.Na?l7MB?o1CT.RN\EeNempYKpLoth(iaISpP)Dl,h//GYbN#=FIZpflgSND%])`B^reFP?.r:5CD*[j)lHgJ$.(YcE;03P4L;RZKHWUeVEDaiuiU2gnq/KB32d48;$>d7alm.9A/Dot5:`6b>RQTOWF6_9XK[j\iKP"XeP/m>VQC2LB/ZKfu@VnR;ZkFR&"ns@+MMr`;5QbOJX]J1mJ^3/_j8UcM&c7j9BP6Z,oPEqhfm^]i@jN*HXRP]kY?h9Mt0"po*\4F;^4)J]lSKqQN0^Ug+_l_VKaRgbH\35q"/6(![qjVU2%QQ.1b3H6#L$U%uN=-+t+8A1X7sij2@3SQ;mL92r85sVTihQSJDriSS#4Q2Ntd,/sXV+h7@aZ/&7<+2JCH&*j8bT8tNfkg2#ferR+=lQ2Cs1&R)SW'u//,E8eZ#nWlH>kkO].-V^%or2S'6cTbbbIW&*39Z_0)]^We$(W2:ok*XtKhd%uO;UM;"Oc"Vcn],Z;p%+gUr4`'rPIj"MgcBQ@T\djeVP8+3]\0PRr@/Y7h:l'55t?;EbNRlgn@H43-"HG_=AuA]'CstP$>4YlFWdRLE:p>i@S9B<;3>S6HVKT5>''I:!'#hUJXp>o?KGdM'nnIDnl5XlY[MM(!@3'p"!>?Vs_4hc5h)\6#pW2;b3'E8dc9^msb!m.?\'aAWEr+7ic`:[%eWl;UJ4#j.__><>LB1[j+A$khj.ij=.:IrqaWp/cXU%=mDbA?+Y8#4*I^J4\M_Q1b-4^-kG;Jl;X1/b(>o?+2=BuV[IY+Moh5WI4Y)F'2FA@buEa,eYuIpH19aE%nb#(uBb!de[D*5LQH;Bk-9VpGsm$jks.T4HpY!)RPBNkNdC\4?967SE/)`A(E7G)b7?0+P(rquR,%k5,2;phI:S$j`F?bai31_I83?-9$ggB?sWUX&N't]%U,UE'*dGA(B^ST7%Ki^OOpJQc\2)rs\A%A]l@n4QVf+jRFh2g`j0*rqF1.,.Sk]UpWH;$6@/UpYglL(5fkg,NgR[$eoU7]e#R^HEq67lcM;$bS[l='T,+W,ZijMUIWB#As>hT^\dF\8`f%2UFnLi<4$#IIOD9CbB_8_\!3H6G=+dS\oj5*?j\pEW,JKS_G@mS)AQ%i&lQ+)$RWt;aAqE:3HO?,S2mp[rYq_TcBMu@pr>VQgFOM77Cc7Wo6'LD"]A37j6<,`Hb'>f.b08^h_`;NO]mcfmD5\jgCcbSUDHoD;UITTG8Ac4?$kb*G=m>6TgK'qctoMV1+G3t^#Y>LXtRBS]'IX%k8[%nHhZsAEofpH6#Ojl5OI+.UEkm&"q52$]!^>nWuOrRk%,*Igi:BhDS,;-Hg^.Q\$+lT-"F6*nRAK#^AjqKF]n^28%:[CgX-*53$9)+r:Yd`;;Jj.:DV&m.$0.]BpqXdH")cDh?-Fo)A-r%rql9<3]5k5*D#MEg&#-HJ^DO7AJkC>;^0F\D`/],$c\P\T?rifBLtpB>&WaAA,%i_6-qI7[h$]at&[*Zs1"WLECuT4HQo)?@2()/<[qJD?Ej.,Yq+JK/mAWKL52B`=fC;GkpHfj.\3Ar3EQp9;%S/A+Sm0+#IYm<&sX$;n`.m=lCM=eMa#U3PD=`!2`Y2)"p[&4;FjW=P"UAHF,7)PVmba2'E^ZK8n_*BI05I\jbRT"H.A^NCm$ZM34&Y>G.JqRB)p^JsJgraE3`FUcPeZU`%Tui!u\A,`$bPeB`-*.[;0R/XD*RfMCYj.;l>ZPEiA[G0kSWHa3Fmjii/kM9&7($YIWeacdsN^?aMF#rS-6/-G/s8djOt7dcj^f/s5;UJ4k#%,1mZ]LqnqXj$;NT\@$IIq^;D)]!4PWYpoa$BUtXgi?$l)*dC'0Sf'#QQKN'c=gh1'Zd%PK2Msm_CP5?>KnA.86oSAC87PZ?SgP,e@4A[(EIt;R&[5!-=BZD-;4RT`>ihGnUqsO7>O&rkunn3m;HL!/nAVtstfoh5M/[j:U3PS4Q/nJ"OL(nH.2skG*s)+75mMVWm7ZA>:U.#I_.r&PIZtWG"+92+k4J"<>8g3^o[Tmo"9>0JVCSKg$DWUE52r>Ua.46aiE7NuSGMP.UT=DidQX%tGBiF[hcJ]lSKqQN0^Ug+_l_VKaRgbH\35q"/6(![qjVU2!"ERKnkZ+I=mp9ZW4Wp$8)(C!t"]E!)>oMV`Bs/IrSU*BR:W:q9GAhRpDqW2+`Jq;-Je?+kRWCTkG&\om?62iD506Ld8LQOBkL-cfoERPgqUA*JfT?N#E@`eO?c?S?*-d)@e?OJ=YcWoNH:5[nQj,L")MK\FC=ZrBP7HI!3DArQIVa%0\_<6=N%VX4^JboCs2BWa"j$sS#oq&73.Ot1YL#S.Bah=IC9Q?H:R#E:I"7#[B",,MJf^>(S)OaEh!OW2GCD(3F\m]SLS8Rot.;p1A=_u1XA0.X&9R.)9J-o=0>`7lIAsCQ1MaqN7=gOSVddI(!ApDWT_Ec,F^Q+VVZTg1M>!FRr'L=0U\g"bEkjK)h2p6IDVn3s8MT@j^NGV.At8c5l;^lWUHjcT/]Y3W&o"Y6re?L*I#RbjQWS7Nf(TJetbm$Zd(V4au6(ddYOE^9("X$^GZUHUnZS_dlXK%F:#`^WXZk[Bo8f4[2eMdK27Q:-%N9j0<-@pU3YZV$Z\'$':k;)QK:NFWG%IM-4LqS;#Qu#<;`?o%Q`gH6Lbj7jkg(@"sbu4\Q7:a?!Aqh;C].[-_,-Br6r8TnSL/:5Q++668&Y'ZmJj\q6skSNfrJC72KW0Sp96$kln'M-Hghba^Nl$;'S(fe1Zdl*^!R'Vb!;_ZL33QmAo-MN_,BNs$WG:(&dL*cPe`[>c9+ePuP#Mpm-[dA2tgS78Tfh0>8ONKBCTDbSeD@'-8[\:3akmP^4&Spmj6<,`Hb'>f.b08^h_`;NO]mcfmD5\jgCcbSUDHoD;UIT4EY^.].7l&0N>neoP3eo3M^4dRg[]Cb?Q6PuNupUcPuh9`?CI-*99r8>1.@Xk?Zq1[`]K,*%@"t_lD^[$?]^UjFN07WO$q1WeZd1h9hPj;6J0u-ZIpNGNVQpu.*(qs"r3Dj_55=&gN>L$(8@bWL3O-f!4*SPp$'Q]1MLUk;A!!N=VhOBaVl,%(Gh&focThHBS/d^l_g!0XXBDkT4S;YB-0EIA-W<6Vp?_Df5:p`H;Fj6aNMgtqn*(I8WDjgkIFAm+7;=j6[0Nh).:@IE[J>lKeL4.Mb:IT"Yf!PaT*c4OMAW:"q9fNmN6'/DaA>`hON!#ZVkd"Ugi!lZa[dj"8kri;R0U6CjY]#uiWCSV]](Y(2UMU=1XO2s+$)ccF#]^]4lkD"o&A?]HJ$?2P/bc]r+L'VG_7Jp.\IJ'rg:sf,fLrHgp:I[KKFXkXF$T;fNi]3=A,r$5UiFi#.G*$UtZ`OG[cl:[ah1dj4umWAY1^VCA*oe8hX+%mE/1Q2o&G]r7B=.aEYhB-G>k_1EO04CccM_)mam_5BfX&jTTp(KD,D`H`$U/-OWT=>8ccB.UVF(d3+2.]R>J]lSKqQN0^Ug+_l_VKaRgbH\35q"/6(![qjVU2%QE3"LV2KciG\$YCCJN('':UBb^.7CA,QG>@Vk&qHr\)hrdi'Mh/43S(SCT,qiB!+h-r<)#=ek^f7gi?$l)*dC'0Sf'#QQKMuk3"??iUFp]#/38b[4/dk,ZhN3V0)c,pmhUf.b08^h_`;NO]mcfmD5\jgCcbSUDHoD:;qJij=CGe.9J:aJ7gFE//UNp6Ro*Q4M>f^:R;&TV:mWiS#1E[;Tl>J4o"Y_>663goV-*;WAkE?S:r(I"Ueo^n;Kf&"eu<@84BqGVfto)kn8NG<#^R?dhGSHC,skQ#G3&S9)rO_?;sWY($@lEZOgZF@)7d(T!@Lb@.`@dWMm8qoZl\a>ll^FC;[8oRc:;;/]YHri7"H<$)"BIMlI)]i]IKe(4tle/=:Fm1DX73N#oVT("G46hDr9I9)theD&Dt@;`keoj]L+UI!W.O!L,Hf;)R<3S-M@*6BIai"Z$X5`hLY.d=XBRU>!W94/_gp$,BN?%E#noMPhZ+*:)=2:QMq1J?hWtW[=6no,u+W#dRC5@)`5n=EI\"HLQZA%5;45j?\m6&7h\H_2JJfZ08K$o\^/`)dpPJaFbUJ+imEpJf+eUA'nl(keS2J2Sb!rOU"1t6BIai"Z$X5`hLY.d=X@tCk)hm,7fBrKciG\$YCCJN('':UBb]sfDlRc7ihdn$UJqC(8ccB.UVF(d3,]_$6:23q=E7=U;<3Y[GHOcWG9l0RE5CK+0MCFlYiMZOgZF@)7d(T!@Lb@.`@d#9.'flH"T#B-G>k_1EO04CccM_o&A?]]!6#9NW<\&EGAFfdU#Wj+(bn\h"[]Gf.?%R'8XB+NR[kZ;[u8`W=CfFBL;Dn:lQ)0O]+b6'/DaA>`hON!#ZVkd"Ugi!fo1@)D3MK-4eMaA0R')$`96d:L/X_&EkB^kC7##=6X%OI^t,1CeZLU"&)f;GnB$f"PG5+0]R[r/@mAL4a=l\#+2VUnfZ"V#dRC5@)`5n=EI\"HLQZA%5;45j?\m6&7h\H_2JJfZ08K$o\^/`)dpPJaFbUJ+imEpJf+eUA'nl(keS2J2Sb!rOU"1t6BIai"Z$X5`hLY.d=X@tCk)hm,7fBrKciG\$YCCJN('':UBb]sfDlRc7ihdn$UJqC(8ccB.UVF(d3,]_$6:23q=E7=U;<3Y[GHOcWG9l0RE5CK+0MCFlYiMZOgZF@)7d(T!@Lb@.`@d#9.'flH"T#B-G>k_1EO04CccM_CU@9\S=U;<3Y[GHOcWG9l0RE5C<)hV^9+L%rJ>lKeL4.Mb:R52X9l7'AUn[?/aB8eS;m9ZL!RFki=YP0kL/_.,\4[=n&qHr\)hrdi'Mk#up.]D-$`'Nd/'(j!Z;[u8`W=CfFBL;Dn:jnAgUKldjV!*C<#^R?dhGTD>4t[-Y7%/#n12R_#dRC5@)`5n=EI\"HLQYg<84oU%cn=RWDjgkIFAm+QCU@9\S=U;<3Y[GHOcWG9l0RE5C<)hV^9+L%rJ>lKeL4.Mb:R52X9l7'AUn[?/aB8eS;m9ZL!RFki=YP0kL/_.,\4[=n&qHr\)hrdi'Mk#up.]D-$`'Nd/'(j!Z;[u8`W=CfFBL;Dn:jnAgUKldjV!*C<#^R?dhGTD>4t[-Y7%/#n12R_#dRC5@)`5n=EI\"HLQYg<84oU%cn=RWDjgkIFAm+QCU@9\S=U;<3Y[GHOcWG9l0RE5C<)hV^9+L%rJ>lKeL4.Mb:R52X9l7'AUn[?/aB8eS;m9ZL!RFki=YP0kL/_.,\4[=n&qHr\)hrdi'Mk#up.]D-$`'Nd/'(j!Z;[u8`W=CfFBL;Dn:jnAgUKldjV!*C<#^R?dhGTD>4t[-Y7%/#n12R_#dRC5@)`5n=EI\"HLQYg<84oU%cn=RWDjgkIFAm+QCU@9\S=U;<3Y[GHOcWG9l0RE5C<)hV^9+L%rJ>lKeL4.Mb:R52X9l7'AUn[?/aB8eS;m9ZL!RFki=YP0kL/_.,\4[=n&qHr\)hrdi'Mk#up.]D-$`'Nd/'(j!Z;[u8`W=CfFBL;Dn:jnAgUKldjV!*C<#^R?dhGTD>4t[-Y7%/#n12R_#dRC5@)`5n=EI\"HLQYg<84oU%cn=RWDjgkIFAm+QCU@9\S=U;<3Y[GHOcWG9l0RE5C<)hV^9+L%rJ>lKeL4.Mb:R52X9l7'AUn[?o"(pMI++DiZO]9[3FDB'h207s+IHmf0B$QpW@`=4a&XCrIrqF12^])qd\pXW4$]4*6KQ-;lMY`qkbg6/@Fi6g0PRd7H%kpQlSbF3ZclJ,6nVmb;<>?*mJRRl=,pOfTp9,hMGo*BO,[07PFORfRT#EOk$W3@i[a?[pBbpO)l*\)Vnt+Kt@;q"Wm1S#/Z&n\l<:IJ0(UnA(*Iqe9*Z&39E#\(u3bC=HqGVTm'r?bC.(Wjl#K.lfQ>XBBWAmC0k-m^kDQYdm]`77r<5;lRXINng7-2?]!O,dR&rU"NQ.o20B0qtJpp"*P(c`8Vc?iTt(q?F6+X]j/5S?Lp%++O4YJ,oc;eZ7<5FmHB[5!,/:b*8H=dReJQPj@A&6%]q+?C^pt2r&@>a,V/d]O&9tc'U5\,^@f9>2#37q2drROZO$:XRodnbO39%&u;8U`m[#IpN-_W<2pDF^1iHP9.g%<[at[\;>B6:$ff9gQ_S-Ud%O6!q4q73g9tkQ]mKL$^6DpSTlotO2bUoG4ndNr1M8=I^AQ57h]+h-\3)QZbS[b*OsNb3F5Xib_\;)tWCjdEl-c=sO(?YEcT\Ce7ZJH;UQd=@jd',6Ip*I#\NSE=U6=XYIe_k*?,!XWc'iFO]iL"]7:To*U;n9ugruMUT7:0ZJ(nhLQ%\e?kFPWL9V4NIf>%=BQjS8lf3']+=P4ZlV^]49$dSoOg2W_qD0"[tsD"lUq+3EIE_*Y0,D6rm[mm[L"@5Ps-[2Fb'!j*m-e_]Sk#_c?9$>fl;Ie>TW_ac`TiMUnk3ZWF>:gMOE*nmf8q<:nLdrc:ZkOsJV]?!AV*P4qQ%prOnUW1oc!\k+dr/mKfc-+0!&P+ntN2r8eSYV%l!]'\4Z47U6&s.teFpI=.LNrGB0l)5\MhEr1M4jmK4ioFBcAG&9\_]eHLtmm-.UO(l,=HG*'Sb[qO$As%mDCCAF99/$Pk:T6'.YFNHaaAd1j^C++HDM82?j$Zph.OW_!#ikdYWmUe$ZJ!i]j"Q;ggGr:%Vpr7%]Ejmh7-p:%a0hE*?9l(saCp$:52=gK/4Hl(rB^HA-FkXBCf!2eUo!;X/'O-^3VT++N-;k32'cuL<6XsjG/)[%QNBshS"9jpUTXrbI6,>X'9JPAcM`'5P3;iDn+b\p_'Q4]Y3?c4!Z,7CSg):nS?a>]%3rc;f3"5N#9sWIt,!i^]+)ql,F5oj:Kd%B^3QUm9=LI^A2Al<&>b..OqbOc`<+&5OcGjnQBkcZtXP2FkC,XrTR+-3pEH(jRJXNSf+Y'76>YWFQJch55F9'^\ZKaA5aeAP9s"egGq9%jJ\/e3Vg.%h7C_C[G?#\W;uqhTDqHaSiqE1*BJ<5jN4/eO-Tn1Qt).R]3TX:FmAaInA,A(g1rA79ejhPHN9Wt/il"FrVPLP:4D9^]^sF4V6jdT'(o/Zq!mD),5"]6r,qme\R2/(IJ-e]PHJ3'NZC2^jdmbt.N0&ZDO(NJF\pCcR>QInrV)KFad#M9G3mlO[*qcCma.t6/+lbS\_NOa>9jeYV:`^RAmG+1V#E8a.\r*%f*+^'!K`f9(j>K'.LJ5fM&\4[=n&qHr\)hrdi'Mk#up.]D-$`'NdX5$i[^3o`O471P)C""D'R`(Q*]Q*Di[bG[]AB5>Z50"^kX=TPf?+S*g>#J*e&9clP=7qEF]C3II;b#C4n%d]iSK;;HfI/W`iZGbaH'BEPb"1:BDMEKRr/%D**jV3$\).u@V0+o&OImZrD..kPEriop0k#GQZ2eL8N\]PVD5?K14T@'E(-SN2R.f.tFhao:F-QdK*8>i3\qXlpiSYM3+Ch\?@#CTUoV^snWVc(l?h+ZTW-FVlOQ=7.='mO2-U0I6$*QHIB?hLor*%g5aZ3CJ,e]Me.qcU+7OkETga._r$,BN?%E#noMC2%KqkggR"]A4m>.$u*%W^%TU.'uH]m=C"Uoeh.SW[cn>`nFNr;QH*^Yj\OipYf!Sig.VNV]aI`/,/hRNDKln:CfO,XXfki.L.]HgeWqR7mH>'&S3=rGK77euD`NjG/a>;UGinR#4LZ=fYT*o?TWc8u/13ed8U/KD"f8!oMj)7SUQ&6pW\hCVTP-)4M3\#SB]MQ8-Mi6X%/WTm#Ta8*n3^Du_6jd0Q-#U>!UmE[[7S9VpGsm$jksZIH0uC3s5/'np!64:?5ncBZR[5(@q:]i/s2dsaP`'#653`k;$!CYDrt\o]t)cpP30,=dc1g9dif8:=4pXgd.Z5"R5-&K+NpKaS^>o=*V+H^%&ie^%nSn"X>A'i"[_YT'*i-Jp54;pkL2^L)k]s/W6V]G3t+OXF^G46-BZd%Grc5;0_B;Z,U&n%C)=p#O5Yj(CRPkbF;0&ZRDV5Dp:/;SOJ"f9BtI<)gqqW.+^AP5&,S!F88`)`MXsI/%Zgft)=lF3d!.\O68fmF=^MLC>'+o?KEFMhV]^W]j`>VbLlNjiWj.Oo#*^Q7cHXT3k6\Bu>Z7CY,_[o*AbfUnZS_?#h?[!)06C0^P:+Gd>i)DeaW)+;KT;NjJ6NkF]qhP("aMPagt5.[DUQLXnKKS0OGR>hMcAs4cH1-;.k.`/32OrVH1[I]bHjMCYj.;l>ZLk@N]q9\Q"#IEH1p7m$8rV$a?2B4l+oL94*_mpjmoB4H'=0LHe-_-9G;A)R35hE/E>C*tl`JUe+g+)oL1$Q2Q5h/$5If&LKs3?RDnA,A(kg:V)k+l:oFHN-S,.SAN0pJ_[Edq!7MTCseR?>`>;mGQ&=.o=Yp&Ba@2"&`;s(=;>&rjanLN"3p<4UERE%%41F;)OgOGW]-]aN,"nSCe#(7eOX*oo(TDl^qYg&a5:u[;GP,/Cl@U'&WG&[,569YekFDu\V4s-"9&o4,W)9ik;4MLXRS)ZDNhgP7oB>Z=mCMECa1XBmgXBGI.^o0FhlCH7n8^'Cs;/P>G3L!/:VG_7Jp.\IJ=_cVK[Cn2SMScR&IVcGeRl9QK[!_]?iPUGojY*7@\mO$^Fk'JnaXS,iGjmrtq+nO>b.gFgIC)-.qqqE[mBHWiqodN2d\KHT!L:jrY[PH7euc!e-[>$df?.CMp"*QcFQl]F3n:,Ve^"??5Y7+)/GBQnEM#:7C@gT4j8[ap7OhRRAYl++*dHU17i3KigP=\-guEf$,V[X7c:C,]k&IJ`a:qtHGl/kPR^VjnrFU\a<9W2#B9;lKQ;"SIDYnHXq&o4r&]`f(d5lh&Y%QZK7Hp>Uu`8s&=BX4REJU>!UmE[[7S9VpGsm$jksZIH0uC3s5/'np#_Z`moX$Fp\6"/]DZ%e4)8hWP:+BEZAYl+U\aP^JElQIlp"/Ij=`Sc./8r<%p@#crIT0;sHLJQA9'KA\D=uUuYC6HLpO2o1Oj3%5S'/Yd2/:XTqsNd5MCr#8@)j:3<6MCBVbU,87ouQB!\2?4d@G6n#sZg7^B#jAL1EYlS4bIZrsg#.E)V!S1b/)@-+R-I2JnW?/kH[gcCCk+[AiA&T7,;#ET9AcWMlVMo)+k0A(9X.%m;0S1-&LZfk-^j[Y]K=2_+ff.WXpW?ba=NPB)ME"?A)t]X;tPhJtYoeZ+nAQL(&gIP#D#qWO^&.66_:o28F\S&t[`#%\qmeMa#U3PD=`!2`Y2)"p[&4BZFP2mp=O)!9#i2/N>)NF#RY84E-CgfaFA_[di9m'5`FHS5,`.XA?$LXsV5.qd(nnaOF,b=,cYK_,`rIItq^n`-H&q-u;)OsNbu9UR)]@JhTp9Qkm\jd2h'#9S=iDFe`U;,8N[k0/rl319X(a/prEXB?dgP2&[/%qEfFo?TWcDVVaIoB)>2GNI/m6@8FZB323=Fm5`hG3I:]"+gb9OpWg&=W2=DS3;4Bad5R$iQ[fK9>X>N_`_V"?V?mGI.N>fFle'>.VA"qVN+VTgUKldjV!*C<#^R?dhGTD>4t[-Y7%/#n12R_#dRC5#].L,$*@RLrWO*C&8uaVdRF+9N'L,@[cfh`o\^1XW4$]4*6KQ-;lMY`qkbg6/@Fi6g0PRd7H%=0ZOgZF?kM7Ss7Wq:X];FQIf&MVlD^[R*kM$q>;'*_TXoaWrdWlY3hI6PGXEs\D;6FmEXBN\WXZk[Bo492/c2ERf*,&Lp_Dj@"PG5+"?GKq^A-]A(LD@KR:kAr`uXD_)$AD>a@58$UBb^.7CA,ejA7H0QqFbpfJcOpA>s.teFpI=.LNqBS:r(I"Ueo^n;Kf&"eu<@84BqG]Aud@!LQKe@G!M5nRSV1hphA25Um,UJt.N;3s?"(*:SnUQNa,hDb*=)NP"7J/ch>3[:.]H:%;bnA`)#2\j._P^Ohu0+?K`7AfUhfZ:bDd99!r*[2bigQWFau:p:s.teFpI=.LNqBS:r(I"Ueo^n;Kf&"eu<@84BqG]Aud@!LQKe@G!M5nRSV1hphA25Um,UJt.N;3s?"(*:SnUQNa,hDb*=)NP"7J/ch>3[:.]H:%;bnA`)#2\j._P^Ohu0+?K`7AfUhfZ:bDd99!r*[2bigQWFau:p:s.teFpI=.LNqBS:r(I"Ueo^n;Kf&"eu<@84BqG]Aud@!LQKe@G!M5nRSV1hphA25Um,UJt.N;3s?"(*:SnUQNa,hDb*=)NP"7J/ch>3[:.]H:%;bnA`)#2\j._P^Ohu0+?K`7AfUhfZ:bDd99!r*[2bigQWFau:p:s.teFpI=.LNqBS:r(I"Ueo^n;Kf&"eu<@84BqG]Aud@!LQKe@G!M5nRSV1hphA25Um,UJt.N;3s?"(*:SnUQNa,hDb*=)NP"7J/ch>3[:.]H:%;bnA`)#2\j._P^Ohu0+?K`7AfUhfZ:bDd99!r*[2bigQWFau:p:s.teFpI=.LNqBS:r(I"Ueo^n;Kf&"eu<@84BqG]Aud@!LQKe@G!M5nRSV1hphA25Um,UJt.N;3s?"(*:SnUQNa,hD`HAL'37UE"??iUFp]#/38b[4/dk,ZhJf\"-EN4i#]^]4lkD"o&A?]]!6#9NW<\&EGAFfdU#Wj+(bn\h"[]Gf.?%R'8XB+NR[kZ;[u8`W=CfFBL;Dn:lQ)0O]+b6'/DaA>`hON!#ZVkd"Ugi!fo1@)D3MK-4eMaA0R')$`96d:L/X_&EkB^kC7##=6X%OI^t,1CeZLU"&)f;GnB$f"PG5+0]R[r/@mAL4a=l\#+2VUnfZ"V#dRC5@)`5n=EI\"HLQZA%5;45j?\m6&7h\H_2JJfZ08K$o\^/`)dpPJaFbUJ+imEpJf+eUA'nl(keS2J2Sb!rOU"1t6BIai"Z$X5`hLY.d=X@tCk)hm,7fBrKciG\$YCCJN('':UBb]sfDlRc7ihdn$UJqC(8ccB.UVF(d3,]_$6:23qD5/z?kZJpGo37tIe]VJ6`@X?3s?"(*:SnUQNa,hD`HAL'35>endstream +endobj +16 0 obj +<< +/Contents 54 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.0ef093d9623e449eec3f5ba4cbf825f5 15 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +17 0 obj +<< +/Contents 55 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +18 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1754 /Length 59856 /Subtype /Image + /Type /XObject /Width 1241 +>> +stream +Gb"-VpNmWdrr;Ng,p4=!"@5F?9+chW!G)u\=%$H8[B6Oo.Mc&jG_3eRK26A-H^&k_@!3YH`J/O0AjQB4p@i-\n`H%25tS5XG@P*6HLNutmobhR9cSB7:JmMF?"4obQ_zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzI+u,Ks7Q-[m+G:Mp"'n,Gl`5Q("<\L[:/s8Ft,m./tVhl4i%>IVJ6ft;U:];fSoV?L8Po&\&sr8"u/D+nb^XJ`'?J,F<&Jd'-4`Qh^=dp+!2SqeL3"$e`,'te?F*/%51nl-p!9hW5QWm%mKbR]2lHgc^["j0;=JEVulh0.\Q6:V(2g>c\ETk)"W)ti2ERV#7c"Dd8@*if@E[:inh@qHPZJ@5QA8t(]&*-rZC7\=s!`h(iA'<;=/#>Q7Y2TpV[_@BMAC$odZY%J;l`Xkgp]WepP;QFB6bA>dhM;ag1p!69_uKPYJ#]=,['[1i%+NuQZu00]G5^Nh?cjt5B@!0bIF:jIe=KaJ,Wrm,@sBqqJPrX"8>YfJ+>?"(I`XD;8^JSNHS,J,D\*^A$K2c:Ekf1M>!\n.elW=]PFsl`ZoMQIO[t%8'JsM+/f!8tJVb\[b>'2Urg:Q2]RXmbGAE_[eu1bf:fTCh"ZJU0"O)eY_ZcZ_u7#J,oa='iXB+HK9tQ$[PnhSMtJY1Zm8j>NtD:/R,[5arENgYX5bJTYMtU4X%s.eG&hgHLK_(FmIUiAS"k5c2,sQrUeQ=;O+2Mh4R%9ccPoXLn^j>*muJ5c9(Itk"qeN7r=05[;CM-*p2q>*B+N%9Uma+T:3.NH12#^N.XC20cWU&L:MEbP4^dYi7^@]iH_hJV!8)8S"Z2E]:Io/'"o[?UZNM=k'>;nu2]6c0I.'!-52/B(CcC$IYjV@'5(5kp%Q,!@tn!\@dgc9#+OK.n)q;<^VWPrR\g`Fo;%)B:jV'f`r!.4S\3BY;U.FW(E1"IJ`_$IJU<4MJE0`11c>i'4k`dC"$dgd:UmecLh9[kg6$[]mFOXC/BV6qqL#RS2k)C?@;:^k09B2X]48\=gMpT:/9*MJHI!Dr,J!?gU?LF8X#ZKQqs;9WKOl;n")4A6KcXbQ(\[;)CsHg3Qr$[]6dK^5gZ=!&^gWU8[J_,/MV=2.q=Z+7?rUncpQAeu][Bm602Joa\s7sujo^VnShk*,_rjZt.o]LSfZ,`B8:USuUr-nY@BDj\&i`'$B9mJEE/PWRM]XE[2R[$r:;#qD1]U_01nh\TSUNjC\a,UM/]UKR'=0>f-N2&f-3H=#9i\C&@DdiBGPY$J+!*F_UhYA;KbnQ?6:-8>XYd&W[NfK.djA)1T/^h";Gr[KXOgWYq87sulf4IQ^8\ZMdqV\Hfs@TrfIb!^kK_V,X2V%rH_+74g,r6^/nr[UdoOn@;.d:UD,E-;9$<,*GAl%Hq#pF5kEH::n+*8iM;u<0>#M#`;pQJ[]LN2TBlC1Qj/d@%oD\[r/U7$5#nEb.iKR_ai*p^S")a.(X0D.d("aE[otWqdpbA,ip:Y%CgIpAnGY6s(P$L[AM(t)RF"u((FW]E^fe0M9gJ0WkMH=B$FY1p!kac-p3E^g6(a,;-geW%D;IWfW\eQZsgiVB?Yl*qd4!Db?ZVe;&(-5FJs9VESnKY[CG8;O5!1l(%s'!:f116'e5cNJ,AWB)In8cl-lPG=FUfnWbjJ'"*uTHYaSj._])=u1(r_qqG&_7^dp![u2M->f1W,KEG`]e]$cja?O4,Va!G0lmJc:5mraKXNl7FCU)=eALoS.iV%D=B5KdI#\t5BQ3r,D`&o;"n'+%A]TnM%_8,@UZ"06CdoJ2Jc6tIJ``ArSH:I^Ko5%$QhfA[VYbC0R7qh\E:mO27VD=/fefA_+.A<.cp/;f`tQ1YIJ0Vc(UW[N2Xd\X4`(\e+q&,f\PNutRf7>IHe?+T[shuETB^J@Ho$?`DWIUtJ:!ft351iD/O-sS7)]P9/Ol7;Qb*ATkT9bf:`>;mop"!?I7k=W9l`Yg6jd1l@/Li5"$8Z1Z-sB_TW:-n/=cM&A0>-fE`ujWJ7K+B?Q.q[glm-!t\;o_#Vbbo2]6E_HT#7V4^8gn^q0ucPpk,f'i"&'ME8\H_#7mgfm3retMQ1%NjFZ*/JZeJ@h5kccUV_V;m0/W';,iDFJBQ&u-Tt8<.6!.PgUBr^[-7PF2gFh"NUc'V'=A3ie[odpfq:W`/6]WmDr4k)m!_V[fCMfZQ$:NiM*e-S7`:S(W/_metphP9s!2qF))e27pFeg@u"sRRK6a3Qpd\pQldTBV7S^B?&N)>MI9oEncQtVQN&+m[C+"63)=_@`591%Gbl4GM'._jK:?iTSEs1<]\Ki-?SeVi!DI!g=ZL(3NJaTrtmjAp.4!Q76nO;qpu@F(ABuS@0OR/0-;B3t;i)o;%p\dt@o^t/8@s#l6ZLHJT4.,36,/5MW;]93hrWY(F6`cfo?9#9*M[iHgeg'0lDq*N1Fc5qlI@DJ[8I]Uf<1Z#l-Q+k0`b(:;Vr]GF;4Ca,'O_aH1Id)2uP/9FmGnhY'.@*s81\.+en3"rVJHD?TIW%@=,^W;0DB`M[L7gbH9#07J2RXY,ccFgD8ij.=4o!*l,B'`a[j[X4hf/!NhSQkf_#l>:rD='MG5>[1O/7Z@`_$X\AYj`fU1f1&ed'NJ/ugHYA\;kF$:[@@m)@(kbl;17cmc'prpm'F-$lBQ'^KXm8G6;]Qg.7qFhGOK^A[pA"[fs;DsIn/FD72ILWTF0Kkd'dfGeoSsBSLPXBG]4pDjb]_so4ZSPrqAX$GrriJM(#Bq=GmqHNZL@K9Nack#_Q&).FZ8`MbN$_>lr75(jGt,B?B].D04?#>=j]T"&O]V+n)fGkN)\)_?FR.L0e@A",cTMb<[4s0J7>'G+'I`Ic>61BlHB9PdCtURdK,+6Q6UpI%U01W%R`0lSPFAO7MV=@)]Wq"LPq,IJmG#,EN/p:>ISc?b?$n)m'E&j;:OcYXO`:_^?@[f8JD04"Y<8I.#O1&kK^QoITpC3e'kEaKqbNlT*f_ZS2=s.V+[.MSN:?.?Circ:A?CY7aNQ`*2cOuM\[o2ZfiY^QClHORNUo85AKYt3HV8etKG1/`In?b-n>m3umi3o7DWSMFL/2YZ"MD_7$*]q*j1'/c&+=g_81$l)4]&(-O0d%NfS:7P-j*k2ek!q$r*P)]8[;=qgD?W:lWiQn)Y]6_Lr5algd-@_M']F]o2AW[+m=u@8YNKECmhLpKL'[G':=k`ZP..j5]0jW>1Defl;D]ldUY;cDMucqqG?G3kSp3;cq`7T%\rIf+HR@P*#i=gM^_m+AQU;,j)=q]>f"=n(!HDqW$Q(&HFhn_Ls/=AuV"[V0N-HZP22hS$OB?W'=fB_^:DmhJhnG<`#o;,lpJbl&q.^+,j*C8\"!dAp?Pl::4od'[Z@^nrdSSY=2#SmmgMdAgATW+=DiGAjU<*ROK6GHM;H`3Imq>6d?ZW2-6-F7JWRcTL5??q4E[NUbdOU5sk,Y'M-<&2]:0OPtK1XcBN#g9gAaF.ZsEWf:0G.&paJ`Tc]hJb9`Sl)1/$!!(M/3XG02^OO(O"Y3ZWI./NVWFp8Dkg;hW(8[q,].]VTDX')jA7R*cAS,NY4t*0=CR(*IZY\;MD3IdLDiISBI_I:':/3upk`BrA["eEjYE)PIA,#EI$Dd);=m<,oB$D6BQX.4HKms5:,U0EdgJ'2n4[Js4d/QA0g(a^i>L]D2S2kXQ"e7X[4P]rgB&&^cq'(`kNHg1E`#g#53P(;Zjr[j'tmBJ!!!!a9o3$f*AhGkVneQJ=+XIa%k_r#q<+C+"X8et$PGjEo+bNPbuHRd(")Urr)`?Sio15o@!#l"Ll20a[[cKNtNqnfkh==mO27=)maQ^FStq(6.\+M0@*R[-jfrSCX].TlbX!TjUV=kObd0ToiuTB+eFI*7hS7kC2ngH.-QRa*..GJNT?'HSND&pn])_7YL#%UBs,n1[>XroYP(Wl2g5t!<<+MLIH[6@3aDLtVr?$I[Olm.&Al'!%jUVH3P9R8jkgX)MP]70*Ag!19_@.r)6uG'*30^!c3dah=EK[C?HuU5n6miXHhbI/W`iT!s`k,paj?i>FF`GUA,jDGRgCl<_lHEMp"*Pp:MnRX9r6H%OsjL6MlW!hlF;',hVPqms8DD92e^RR;sfW1rb,ju1,:tU"q2=[['m9G152ou>_Wb2mOh=9;7*>]-;bHW!!%P+=qjuDnJ''eapM>&p$:5YIdcdb_sRSg7+&#<>_Sp9S2kYF\bu*K:Nu9a%9dfKo]_r^SX5o^'bu!HLt0OekKX63Z?c%R:F0MjN,]Z4W[M%N)j;ZW!!!#7"@ge"5Q:FC`(EWoXIaH2`c&Wjjs`!/nDKt?U_u&sTs'DJ:7VINl00o'55t?;9:%86JK$OcI/2ljSc\<5[C^YOSpNb''h,0<@hM32!!!"dBL^C/)`IuPnB<]7$lLfg_<99C5AerNQ"Ok1qXo(#h!(dc_C/S6MlTYgc-=KBqF8k-SN=IUc9$X_%2pp.5j-F`!t.6io[BY5V+s12GWgEI$nN_G4*H#Nq<&iJo[1HG99q.!XA9R#d43h:6ruatd[FBgL?2ngO@mMlUM*eIhs;SII595!EX[qtKPth7@_S28&P+4*U,J$*9h8UZd>K9VNp8!!!!4jX=l,PEWns@8fJSZd1fsH1GLEfcuQP&&,Qr^!&o2XF:!>j_haA*BJ#hYTZ\'3B9*P"q@S6Y?n.G*e4+XWDf^LH;8D/7T&b")j;ZW!!!"lB&1%@96opR:Hs9dKbp>.o#YLgRf2JHJ,8Jp!:2=,-EV=F-X!(2)=e/A1S&N/ok5c+#B!<l\@D=bX]ngt8P)KRXQfad:f-(Q'9/u5D>FTjh^^g;jkI7_#7^hnNp[@N-Ig=A>$@rdL%E]?*&0Ju"HITZ\8gQ3T*D<+4cKqC"nua+!Gg03mG>O'J\sa+BWD0LKPD$!X]dT+mT^\pFQcPKI/LBff0!WA9q-=jd\WVCn(Y<)2)SA9.4H\N%NMFI[8e;\q!d5m=0?Yb-qJ*3]B<*9e#-!faiUO//5!)P#mn&rgquC:@ol(J"Pqb6>e)V4lI;S!O(qbtDTlW1Fk(2;UB5_NgO!PjA'&''VHj.%`,\8^Eke#*;k6kVr=WNajH,uCq8sW#ZK]V7>jp44;g*e7"Vic!)0?bE7Cg`cLm(^2f795P*2R"];7hAMB4g#ke`#]=0Grd]Qph^Tr)"ZeG*%ElG-L9eN1aka'2GbU1dtDiV)ZnXmj#NpXZHNB33FIfWjJ\R58#7H@!.hEFrg[el1B5]'jOS7qTF;ppU_hE;:s/@mcrR\2as<^.PS;+&A6)ciH@HhVDH[LF06m+o;*M5$nCSOuOJ;raC=SS_jfMVc!ke*>=YSGt1jiP`R?W_KO)I1dobC/#D%Sb:T*:!t4TNukG$W.'bALl70ipI:'>Ds-ocj$%r,SMY&DelEAb,Ah4t=gLTT:;sYYgSUqW\NYKJ8L$+)5,tOA/B^0be1A0iLmjtuS!n=EMOltXeqp-eeu_k\HgKCi*BSGC*O[ArO(r(Qp)Z>@:^ucZ1M;+0USnY3s^upd)C;Z)P3MJm+B%1SZ8@O!BEij_,DJmf'SBl\`dNQ`4EXr87TWJCu'C(#g4+-r'Ytf]LMdou"Cg"DqZ&QM]<>S$jJYqN/ml>/j#,8Zkc@pnp?paP,8D[[.XIhf%Rt3uXasJnIHo=]TM;e*;4I#:_J[AP)(MV:['V[?ljFRt'crVp23=B"m9C'iS=I6)cQ8_E!o9LS31p4a-oRE=(l/<32#s#:m@j@VcK.M&L9"@WZ=+d)S^WfeJ"K"-E6!tZA&jV#H_6>JqtrQR1b1*"Nr(7S.G"IE6!rW2BQr-]OI_Q]c/,3@A`(G=oYB<85jc%;`=MWtbV?AHuWECWm:E8a-"Cog'&on##:Z#SsPSWQE>kCf^a[anIc=+)6=*281q_KNV\4,U&]TsY4I#&4q0)amEISSdcJ[EeQKXK4jK(>5oqg>0Abqu#'UW_p/P\p3aSk>a2"l03@KDdX:0!@9?N:59mMp\Clqu1of(Af:hRR]_!sfi]11C4($g^N5(Co!U8Vg*4fU(o3E^&t'h0$/Phn46@*M&rs>nekO3B9+Bb7.6qQ/0&rVkg,5L4L75pBFJ.FD![_q!c.S$gk)g"h2U;-XXE)--@a8B%^M9@h3ql@5";9>T]#bDo6/<,FD,Yt6g+<3a;#F)Bu[JlcW4qo3B9*g>m\J51-\"\2J2(9r.>C-*pQPf4?-Dlkd>3Xg;U,?FR\5)Pq,p:i_4-qdQX`aA,fd$*X6@!h&A9n6aL&B^UO?-#eI@-QBlFC[dD"i'D>:cd/D>akU7l/=gDR0[6@281GdLjOi0Bk7#88i2/`-SfeIqA&!!93rjaBSm;IK4UoM7`#?t2Oo0mc.CY)iEa!77GH94[Y$j3Cd=ieo0J?D+%:qp*W#QkO+7)ta5tm9Q'GqR]`%QYG(4p^<'#mh?+O!BX_lh$Q!:C[;/pLoU?I6&4Tt$YIa2gH73?g9OiRFcf<9*_MC5$D16QE8lp"5eIIto8XQm]ZSIMMSIQj]MiM1'7H$O\,qt7C9her+3rgQu_9SLAH#N4ahS*m:u>Rn.gW^Kj4;P#t-hRR\Te@aD9?&SVT>BfPm/b_K1SL>sLG3lGq@A9^`CEa>W+])h@F*=lr9:,Oga,Tc8hOAY@'B9C4@g1:1!tD3.OZ^DHS:q#B*0WCT+>[AKeCa&naX6[^3feJa#-bMd=;/eT/P<&=gQhkDf>;2pY9i]kKinuTCgR8?U#Po2,^d!`PjjHUKS,Ar:5b\CYZGin`.Z=Bi,RsM7g!b?SBMqaVdn`2Fe\;%Zlh4p[?bciVn%JIe53a*+`l?_a>.8Bd0,G#=U8V\U^YQJDZW6Zdd@ah[U!Oh^FTt'C2bt,F6\Z#S]0,G)T``6&Dn]AX?9LB+]_q?DG2Jo%YBFI+Ud+nTc^C2h`PoesB&1%@a\&YS*AS@i8"/d:UcLGh&fo2QW%@b-#*?3,t[Xf+D70Q0,Z%n,CBQO'"+uk#rJLTiQs#Vk/4W.T$>W)/%6bWK15oej4)GiQ!!db^sTV-u./82;Sn#h0aiSDAcd;$BNQ2!C$#>$>\@SZ@C'6>5uQc0`85mI4j\)''Lio]^G\d%L`?W/c_7c2KZS%\Pk/>0Sg?gpe9T&ClE(%B)+45,`I`8'sJHp=MsYoB4HcUQ1r>s0kXf0(lb-d'\1s9UT?Me;fL0aiQ::4([b%5F0^hYO^V&!s``"\n)97eZ5#gGPq7+MRm`@rO.G^Y?l'9g;Hd7mF%"m"J%lFC=5%E%qsM))#[`B9qSp#\JjrTXk3R>tFmE'I;d*A)9KI\&r8,,6gEc["dE4o*Unf9*W^E@AIf&NApi\c3:,iGU^@MLr;7iJL:dRL#cZKntZ_4tD4QkX<<.hjfm#t4/dDlb^r%R@2H_-nr4sDXa[OgW'1i([d(F"`cqWXnQc$&MT;:MSof_mo".%6]th5F0qQ2gX>Nru/UqeIAag-_OYi90GB1lA0.Vq^b$_M&Bo3,[M24+/",^GOOH*[HX.i+5h=MN/N._EJT$!BBlMTZ0DA7:Th;2;FrsO5GETfWer#J119JCThGSLHJ@@pBA/%F<`_U3eb^_]mA?\e0gl9o'Y>GhgP6)N;jnQ:9c=n,B:jLHC@tISBr6HO/+=r1)Sp7aV`2r%Q-?F2tt@pGQj?@)n9V;l8aiF6_8S8>>=:2/@#eqf3f$;%u:6q"^T&3Dibr^?`PsqgB/Q9hj1-;boPV;Gpuq.KJbt[W1=s?U,>(qWk=Br;QT^>KMJK!eiKH[]=-F1YT=qI]I$?YOJu3M'?SA@Ub;r0nW)k56$7\m3,$/gb;T),q[Op9A7m\.p$I+k0BO`X%3p6]%oJGe9O_dpaCI`nDTdac8L?.p(4/Ypc5rh'^a;CLE0T[+$Vr*fJ#BhfYK'j0$Xs1oB)Dn[tGOOCr_io09a#Dn'6PK]#$2f0Ij.%O_dABVWhs[>=dSko2*VAmP='prJO1-&R++#L6Y#BhnJIc)b'F>nDM,;rl6liRPa9ds8KL0;K?f`YH"@rUnjfN)b$="IH/>,#QE3&27/-(S\`Y*c(\mE(LMR;?6T0g0>H-V*E[FqZtHqigqOrL\_1NK\8c[LY@b.\g94kukFR%GF6Fd)!f.CP+4RgAUSo.mEl)(dd+f6JBqC#?Y<4Yg+4mbMY-fI2_?Y6PLY7C=mSH"TSehsG#U?St7!HhZqWU_?0INV3p^1\`uBH(q5I%55Koo#Qqh``r.`XI2#M`hgEo&\'g1jI]ZAW+Rl?h]PVG#FSR$D=-gq;@rF;Gsf=hnGp[QR[@9.F'U]\@-8/QC=9-,ffBgF]Y\K[:ICB?+Y:5+k<8R[OkRE.XH5Q<`YN,n]$P-oCMQ(1aA`Op(4/Ypc2E?%XFO&Dba)(=7?WgHM-Q'7Ea5^=$-GAWF@nnDVDIsYcogmCKg&.ZN6?2cNaFYm3,;=n8h(KYd4@q`m4ki%.,37BCKt3e?H7[Q,_,T!"A6<:hT9=7b"ZK!L:[N#652"+])h@F%4Z`ZN6?2cNaFYm3,;=n8h(KYd4@q`m4ki%.,37BCKt3e?H7[Q,_,T!"A6<:hT9=7b"ZK!L:[N#652"+])h@F%4Z`ZN6?2cNaFYm3,;=n8h(KYd4@q`m4ki%.,37BCKt3e?H7[Q,_,T!"A6<:hT9=7b"ZK!L:[N#652"+])h@F%4Z`ZN6?2cNaFYm3,;=n8h(KYd4@q`m4ki%.,37BCKt3e?H7[Q,_,T!"A6<:hT9=7b"ZK!L:[N#652"+])h@F%4Z`ZN6?2cNaFYm3,;=n8h(KYd4@q`m4kib\mLHOIC&an4-@)HTLY8X6EtFzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#WO6AM&!!".KRdR<[W1.I,!!!!1$@P>CeV*&g!!!"mcrU?H9k[i5!!!Q;I74.dK]WFo_DEo)Dr,Sjn(bHP<`U!$26,2Eh7@athE;f1/hSb*.B2"n!<<+u<^]dbeKe,cZ>.pi\T?rfn=`4)ioB(&?+]eQ$T`Y.Cjpj4K@E^:Cu)Z[+X',p<5YV/SXMT^C/.N!9s562!'kZMM?9_'Tph<&A&^L+5o2.YGl%'s#@,WZ^](6(qgas]#)a6K3dL:l%;Y:3?ba7Zc-*%_UR^:MIei*\\T9Z6=BN(Fc'jl]'[:II51=sH[59-[T<`ou/kWYT^>c5djlR[U8!D-6,=C=T?,DL2?`JD-#3$D."nMQGmo\T=&2'_+YR*j$!"kg6$5\2]JibKHA"L>B/8GnUi)20IZ^D47JTH2[U4#nnY!Uus8,W[UlDXC&aAm+J`:kKj2$f3^C5lQ7&bX44,&rquB6q?l=:<#\-\ETP?.-Vp=5L/f;(^oJl0q!_]rQ3sOfVcWh("TSOqFs)YDW$Xg"QRc.?`5fpQYk$DaM%f:3U7tn5EjC\>Gk#7A.&r(^D;$g.gna.SD7K%Ndmi.X/4LBsCNLe>h%X;E\&ga,V05Q7OJ/Th;!Si`8ihBrSi/R58J4]Z&2hSi_-K.4M6*>9!VCi8Hs9"].pF2D:7A:Nim,Y=X'h'^oHDmit$Q%O$Aotne`[cVcS2kZgq!h)n%C8kWf!/`*3XaKi[*+=!AZ&:oWXs%5Y@[+V\MM[Y%0-Ct:a(\tW$Xg"QOOllUnsp@E)p#jZt\"UjP\%;)qV2rBB)WX9C9_pG8+&3F\Y,8Up=;n6GiH`gO64QWpHVQ<^rc_;,gPL:PDlR?C`cY_C_,6iaP>RL!%2rG?MpI>ibm2f1"6L>93'.6O'RG)5iKnY673*Jqn2`q'?^dEW#$D1t^;s_Z]?+Y8/Z>!_%\8g3TffoGD\B:'DEQXkGQS,[k1GU^:pF1t@4Es[)RQ>BD4?HQSF6ChOZY'$U98+iXET0B5DQSZ$5"`5S.%6WpCQU;a'OA@rn^agHD:\om>'>Eq#[0U%Z_']Kha-;9f"@WU\Ud=AoUF7nhKFq81V8Vr>Da2]PS-7WCQ_"u2HKg,P.Dj>T*M^h[t"]A,1e]?7i<*tG0HMmPXXmj2]$WZ0Vjib'KB?m"rGG.X4.]Ki+]QS2E`tNOq!5KZ_;%u8QWFut\,u&f0?>^rGDr+HfZkK"-['V[1:VkN"Pa.N)5C_OmC\@Lq,F"[eCR;\'W49?>2)l+"Wi3eO6ETtKgUDV1M!A5E*1i%%0'A3J5,'G*!;Ic^MPA*r^OA?#cTP12_F@Qe*JC,"URJAl]2n#N__"jZ12Y`%]-,\f583=pMt7HS5D0n1B%Z4f9!rAIBtJTXY3D2Q!!&rM6rDIDf\"iDR$^AbH,LSq*;\)V059J\:HWXV`/,sN@di0eIHPa@_L0,?j=TQpP^CWfN:I"gMlIDriZtX#AISMClIB\*\FE?ZrT&g0(GB+]f<=),O$9S+O$EVg>[3fr+ZZJXRMPr(!/*[G&N.jjU@[NlZ[eI6SEq[<8JH$oYbIotC+V;hjDfh5Wg5!WW4N;!9F(``X!u&u$$#JHH->AKlu*Z=qW0H`r2Sd78OtaLC&UX't*aHcr3`f^e0h.8qdQg9nOb_6t]$\[g,C#^$d)$NL/,6D:T=)WsN9HM-RV$-IGYg3Fa=)G(W[fs7GQ^/qLE)Y;34he9N@kKY!;0O]Q-;WMZEWg+5d#7MHBiIM(9Y4bL[8^V9dbdqr_U@\'D0U`dX!!%[=?P,0@M5#i`M-3ta9q!odE<#q9h+nT>n6StiI%NTNS1&,b85iGcSZ+c!p2m$BQS)QQJk8L(LsFVU_e2+Fju5,P3S7NOu'%NMG+QX5!;['WdS[r1$e^/ssmYJ8ZXqsV:<1DUZ=N#Xiu`/##':S3ZaGH]b7?2ss*&.3hSe@<:BHLp:D:7XH!m@QC!3?%M,%mO0Fm+J`.)fNCJ4;<%_QW#S!KfO"3Llrd4aEp;#K%NRSi&)*R3CKBLn<9DJsCO&ibJ,T$]4aP&VhUo,Mfs9bbRlbhN^@KDsQ@JFTBO1Z=!"]Kc76E,=hnHdpW\D+dSt4`oo7"0X0Q5FNAg!!%[=?P,O\Tm6Y=!'ht)'`h8IRMPr(!/*[G&O84IGl[mF5Uc7>!E9`$(B=F8KL0#X5W,6\!<<*b..e5T<"k]:!!!"P6=1!E9`$(B=F8KL0#X5W,6\!<<*b..e5T<"k]:!!!"P6=1Z+I/_ftS+]m]d$ZAfEcO!A=BLrPO?bT3!!"'0oO.`!P>KM^Eg^teFQ()jVb`q6^]j]5l`Z2Q%p2DgLdDgKq)@[:p$6HS0/%7pXBAP*3<0%EF:^kA<0L/'bG\:5SDdh(q;pDBF#I9*=L_tfRZs$Nc$8^64cS.%BiB"kYta&fHhZ'k=#FsV`/1<`QS)IKB`J)1qO!P520J36jQ'jP-T8,&V;l>p5>G_P:H1U1HdS_#uX0cp/b-Pa,3iOoSV"4)Q9:%Ch1(G9`TT<:-W`?*!`]j7sQh'FRl`4`qZWTEJ=7k$"UCCSFIXV(bknX$#!!!#K$:I_keKei"U9lduj@JIo]Qs+oT0KN1P*1u"P9q`**^+gkk0079CHhdoe"WQ\.lhhA>fAtib0ctS/!ML6`Pof19O;&^m+J_1@Is*^(%a>@QE-C@OH?\Xb8/@$TVms1QHF=0`f8GFNZ:'R1oJm.>?3V"@Uc(/DVMTo;jE0(mj:_qTTPhLTN-u2NE)uYrBL>[Ze!^jO,Bren(t`]-&#f$SO#cCVP_Y+0k9nAebU$b"U/DVNjZ:CqCC3u^lBEsPUj-FZmJu'mG#)P^TYs*7FT`7D3_K.e##j?l9?9h!'mq:M?9_'6(=2k=0BK^a4mh-l,8Dl(&]tjI$^@nCu[0T]GN,U.T\*Ffr7jaZc<),([/#(Z!ub5NE/5%2cn\WkDu@_H,F4:Q7ZIXgkI[a(#HKB8"%k%Lp*r)f[Xh9?RT0G4d=gCEt8P)LAR@,u(nDV9N3eNGl'\*QCaS"lN03u0=L6Z^JN#86BY,Q,LBm(QkbaC9`RR+^W\T?q5^Wh-"mTk7c3qM,S!!)N/5njK!9nG8VP:'-iHM"-F.sX,kR]]f"`_J;#"\)?8`ruhdN#k,c\TRAt]aA44ISK!c)%53fLRT3gU:rW4F?d<43acB3;:-YP9q_4.Z.Dg%A_^B5\JB43I^mNMkZY/+jm0%7SB:<8#g06RqVbu9UXlk=0&?1H$OZA#mh7l9Me=(]Ks<9ra!$QiQduUXfCdC\*IN,Ih2S[J6IUS$D7a4(<0O!"M\>%%Z"'>c8p5K*GoBMnRkeQ4?&>S?VKeqgET>&ATY#I=U2m)nUU$8.?#)o!L4qo^;9NF;3cEk;4*A&Sk>$B2D"oEY_@n:l4F-Lnc[WB#l_@GFM5#l\QMVFN?G(FH,,.S8?5!`84D:54OF6Ci.Mi0ZDp8l98>IRA<k2spX8sFLne!-/ak4gBMg6f1OZLd8*gZ*7$rX2tPF*!m2X[Jnn\6(UJ%ke9bYcpr>W0$67^F$t'+4f^k,sAR>*U.S2g,7FC]WfE=IufOtpn^WMSEk;"^FrFu!!(LL6r^3k5$_F2f*O6-TG!!&_>=%"W;>$Cd@'2L#^2Jh#Bs1\O4qa$-G]6;F'_F.8qeXg>`AU/QHc4aU@1fBN(?/hnWY$\pbFAeJeiCM*H=:IChkbEicL$f"VBk^@-rNmoZCtV\me/^tjcCCkB9g*IR^iRgbpYglLqYY9+m+8G5lHuEJ++HC*0$\_LCN4@apYUJXZtWI>7'jC!_BpTV[VadM-7Ksr)`Q'10he,D7.UH[!.[o0/#&@)a$9QsI+P8lT?EQSf<8Og_i#9^Ei-!G^"TccEbOdiXd)ujUSoM^kg2TtMP<%JhR#8q[;4CghKuG'UIH1$m^qqh2W[b.]5PFZVTkh]mbGA%kC;rre_IKDcQ55qfU>L(376o=X%8U=&W#QQ!!!"mcrWVPTTn'R:>*N)/h/mU<2Dr88T,pd,6AKQ^^G?Y+7br`l;3D>#:\HD;sR72#R14T5.?.?G11'q!mB%l0Yt;eo:CF&W#QQ!!!"mcrWVPY\;E.Mfn_sME,b?fLNP01bUN.P,;]cPs9TeBODNkd%Gs]gt_u5#&)5rJHK!NV50p:X&i),eu`/SWI=X8Z24@jl_eX%M*NmN!!!!)Kt\aGK>)d2g5VLFr4`+"9?VsEM2@[iR@.b2PtA*j,%k9tD;2M$;k]aN%?us9TW*gUG$V8GJ,fK`8@8^b-gOT/G3s2B3Y@21"TSN&U!Qk/NDo[pmeud&j,Gusi67TFp@7@oUGbb?:/512IJW3+SN:,)m59k@11\IE^ZSiqHgfh)4aZlNp3,lZfrFo4UQ:quZa7!99q0_7="cZ(q;d`8hS"9FgcFC[o)\mlJ5GG[U;kHF0uGW1rSRYS2se8&hgJQNPlraH]NA38f!8j[IJj*AmqnBCf\#[jo]r]qNcD`EVP'SijN*GjSu5AVh7IN%C20b#8?3?"c=h$kLCh]ISJgmb"dSBkch&4*M`mlnNp9iIr)&%j.s!CH6U[O1]]cJ4O0)ttP#_fu:C=]@_V^tg$ZZFr/IJ),-s5S_gXLS#XB:h0joKWBO:\Z=fbEa_qhRpBTb:Bd/P*;)>P;4mKS2Z4lhS"9n\8am"EcZ;Ko]Y8*e@pA.K*MpQ>:0L"]Dqp3+;F[0G_fmCB.FBOGDqh\l#POeD5jM6LCP?q9I_PCe'=SOQF;2:o#$4nH_qiEEb*_#S!!!!)Kt\a]C-qLn!!%OGkUQ_5-8[@U!!!:Y^*8)B6Lt6Y!.[o0.fuXr1bSh/!!n:m,(ODpo)\mlJ5GG[!iRG&0)ttP#_fu:J8.FB!WW4N;!9D2W$X>S!!!!)Kt\a]C-qLn!!%OGkUQ_5-8[@U!!!:Y^*8)B6Lt6Y!.[o0.fuXr1bSh/!!n:m,(ODpo)\mlJ5GG[!iRG&0)ttP#_fu:J8.FB!WW4N;!9D2W$X>S!!!!)Kt\a]C@W;D!!!R69m9Y>!;M'1h>*O?=.M#Ds+SBN,oVOs7f.1co@7VlgX1@pYgk_12Qk6Y+9VgFbYndU%*1Pb3Qt=DF&>AGmcSrJQi.n>U*pKVC?P9dTq8[TFj<0dYPkW;cTV=/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!;DAc!]b;1O!ju.cmd7G+ZD5j!!'Sr<"_mO:3DJ)=29hcEW?G)gd1c@7X\GXf-`.][PUeFntUildr>L0#O5)M?3e)?*nhD3e./,g=k7[hR[jqL_1k,T0@Zb)qqoJmt:u\DJ'F5[Vbob?iJKA3F@72jkd[tT/gs>)tV3&Y:NqgY\W!ArUncLI.>0[?#%?9'f@j+=0GqI;2./&'EnK0]4gZg[9p[tfk&MZ;l8p9\*l46<8f7Z[r:/\'.7C%.N_*se>ZC@m+Kk!%!RLU$33>8dGDELn(taand@+`E:Df%.'-U[lGSMm;)iXZ9Z4VdgZmb8LY&Y4(PRb`0.pG8-o0D[A]ku2)[jV(;cg//*A^B]5!=L"(.HiY?Q](r$B]L5Y$;j&/6K.7m+J^ZlLO&[UHE27SE%YN?b_&GL>Q`CBVGQWiBkh,35FbLS?J-H./@!s]5OOM9"#GjsWnAAsE@(G8sK:cWRWa;m?c]_:&prVQ=b;)AJe>I!iQ>IMJoDnPU0l_QqDe6$A[dV'Cb@gs#"e*Dm[Us'[Z.rst$SNA&p5PsfR[C*EICrFOpUIGuU;7']FIZ[O'SrlfY6h+X3SN@WdW`pGET>'-R[VksXK#*UT@pYFbA`5mU&Y18(N#bUSih:=`/##)*3h?;=6-t[0pJLfOA;3!-1Y[/Z7*b`#7hl7?l/o#/J:W,@Ujh7I72IRXHD3D`Trm''dNZW='):>HN*j<5(38a1c2#)?@;:^<12BD]$As`gt]McmrTSY:s?R$MN/Q1B#B?4C#mF%.oV_=V$b0\F@-b:L+g74;P=b$FMWP4C#mX76R1P*MU+JDb$Vc(/RERqc?N3#L<-:_@M^\(>ZY!n`^ESjeZ2b]@q.pSLpYhKMO#'d0#J\RM?3e)?*nnF)K@=?Rl"U.r;#q_3FZK/_[)FO4nmaZUIQPP7@]=d)<#Aqd\U*8$PS+F&pcJ!`JYPm/NRq58;f7Y+eg@b!8U)5kH5EDB$Qp7b.DiaWiiMMY4P.2>Iecc\c=d)d%DebbDrW)YDtl7X^T_X;3=!dSOF/b@q)[>VP^o73>-+R$IH%fa!1+eMaUN<_(\4;WDf]%`Tr]#HM,FPT!W+SRM82#SWW.hhiQ[FS!GOg7+"?k9(%ca6R"b'NhTD0:.EWQVf#C6SPV5A1\QBpJ>&Oc^#kUtROGAV#,(bf>_2E6$Tkj3o]W`?*/;G(m?b+bDDB8p^EjV5+_*^/5dDr4)u/YZqTY%Xn!12Q$fVP^4m,^n,t7RgcZc^69nPn=F'8;rt3)C^P=T0>D,./rr/hg`V&'ntZA=\rH?@T;/sTmak4Ioe;>Kod-&PT/U*p!Ah*l\RY1;(Ql#t`Hn`J82bEc_#OJObYS2iB?e>RJ!F(lN[*)RCM\0_$1dPoQ7G3-l31im_Zo;uoljN3Uji:5jJ]2Zi*&ng,mNZ?.^5/TO[]lVdmLCRl+c96C>gnI5qdUR4[Uil"SX^AiWFW'Te;%s#o]X;P,p*b7V_$=n)>N>;9bL=[JcCDGq%K64f5E>u_o:>?G_+gCW`CW^8o'bt%nFHD$Im2CCUs;*1T&FKfYQ^5=>4(8IJ;Rlc#8&Pil$[.c\F^VTf]]@o$=isjG)e*!-HY=r5X:TP5=?kroXqB:>C@!rDB.IF_Wfl`O%:Gih`GfeBN[MkUgL@Z)\hXQUs;A1EQN59F[iu:kp[t":aCk`YQ_LMXh2Jh"WEA`ZKOmK5W]mB)"[5:\?ZDOLr@Ddhr*1EI!4*gDX'O$P;3DsP`fV0-?kbc0[IJTbUW5^'C4OUuos!U,%`"NaZIeBaKV+IrVR.J?_rc-n/;7(<RUSp9SJ;oaSL7?Xj>1]70_TLHk^q(jtVJVd_>d=1U4>MV\j+Y)jTk1B>c>;l\22.Mgd5>^jV#,0gs8MKeSc\0Eh7N^G+9!FCI,KP\dQOksNM<8QZ%L:Q>ILWPk3D6s7+'cMg_FisEs;V^WkQ4H/T5o-S&t3j`ue+KA<6B)QHGrceu`0*R-[/uVG3O(!(PpK^\ZJfs&NcMcn,rMIuT*uU%hQYqG^X2\h3V+?hm")c?I"od\TUOrq3IAPl)`L\T?r6Wi@7Hmb>4ScqY8q1h]^ZQtLnTPl4j$>1FuanVM&5Y,1;19pdW.;#J"lo]n;I4g2Qm>,k@tXAJh3Ra6EMF.J/^g%eO(f@]WUiYAs>qu-Mc[WZAc^t18huB6r9-l__-p`)80^jJb]>+CEmq5GgD(gddr+UnaiPpirgO+u$CbDO&W`Yf^\+LS2p39j,^+;&YIPN^nU&[E:+(DTfE2T'sM>sSd:q"G3s$!54[aVPq-LkR#ufhZor3UXI28#qN`^;dbqNKfA\W!k007"B@#GCD-Q7p#7_`0nJaB&83[d:\gB.Sh7@annnZ8a)]KSF=qpS;IRnB)2]!\tDVR3acCFb-qFQkt7211:Z,^an?/">o'llZ_"ou.H)B'MXoUudYo#N%=HhNC`HM6^YoNfk:s8;&(]5$/hF'$Elbo$N>%N.HXGe,!lTna[]p[N^l';%70o&SW0=#]9s'llZ_"ou/SG4"!@GjsYKrqgJ^!!%*Wcp2-`B)hqC$g4[S)k&P_!8YV$JK25T7hbq'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!%P>pa_FNGPd35S&O4_UdOm"[p(Q%4i-Y"E^OoF@XQh$b;:;k`:4CZ6Z],6I+Y+81`q7dnIT_.F/EDofV$DE++V<"&9:-ZVIFr*TZ]/6J>@hXiMB26Z>r<"_mO:3DLZ_/Y$AM^nRCaM=EBGfo%IRC>@$Objic8Z?Z05)m`t&+(";#pXf8;!oWVTSO5(m[Y?m25q+^$dChuf,k2teYG7eC;F)8W,?GG><(TQo70F-Vp$*^)QEn9:f4#7__5HhM7ieui:?CY#SootuOq[lO':]mHM`C$LB[(ZM[&Z#CNTp]2Z-*=r&?l^(l]SMFd!^4#lrB.L6qoB4F9MG^a!hnBaO::AE">rj$\4ejAoDCW`GgeuY8qB23gF7tha4?C]12p%;h7N4F"PK8qrm"!m7S%t"'=SX!Q,iIumh%i1&YGBEf<[r7m&I&LWnu?f';^<*Gp*]"6.U2lAC,ongL&1M3H_gUARu\*!=;MJ;\"Q4D!8*5+i6*SI7]lds0c4MkJG^!lMdc!u2i6c5t.^)A^^Nm+K[8ZRiB-+]-S)+X67'7Zc!M,#G\M*<,0MA%@49UIMBjN*I'f\`uGbCKa#d^#!5;jB7Yg_fuV)AugPb]sHM($H@PC4N,)j5K[sf--T,;YBlID5Z@a'?'"4EN*ZR?_Ja6?"G@[r=ObW'ChX>o*nQ)n3!mb)6FNKqPiEB5ghe>P\gMT2Md[dPt1h5qMZFVG1j04/a?7_`m8I*V.JlASDI'sD1:-sGah.L#_Q7o?+P,l7)'a(G.dP&CBFeON'hTYSR[+"11eUm32FT@HM?iu^-*'V9oP.C)X4Y2Y?hfKlg*lsn/d!J,g?V*d8NGg14/`]R-htW,9&OWLm=bn7gBX>*h4j57MLjGQTb6inmIDjBP>I>4ruk51pUkif]bnZbao)>H@p*k_ONW-?@(k4678MkJcuP1a>b-lZ=Q\&pp?ce4aTX*:7#G=e2Rtqp`*Lp:`Pm;n:X:.uDJkJpj4(&,L#Tpuc'gM(c3Y.2V#+9")g#!m/X5%`)f+ZdVb_Vb;Cn=:Q$VrX_1$@u\]5JTVf?\od2bCb+&dePVM9Vo+5uX1]\=4EKXYMu#hZNF[@raH76Lkgl9\:bf(:Cn!A%NXd7=a,C9aGjsW*,gW#C(K!#Y/WRgk7+&>RcRrD.B[W\JE>YmZWlh&LqGKe=,Q(92BS\OaeE@M(n=IWfr1#NRb3INXe)76+X0O7R:goC7!(i[#_`/s03HJd^n(P0",$qjP(af<[hlj#[X,F,F6JR(l"/=7?c]6)@BY*Dq[#UkpD%U%ucaJk.EF.&7-sHJgUHsM:SN(U5[MuWc>TtZTU-90?,Gh8E)(7((\*!=;MJ<#t4*gC-9he?nqUs6B&7I8@-T$jd]mB@o/j[L^]lb#`a8D;PHB[I6Q_-9Z-B?j.6"EhL];XH*.%13UoInll0,H6GLq`6>dA(Dpm+AT-2B/SWa(g.#c/W6&7E#!e2E6$Tkkb/P68:Sl##'=3gpqJ<0TR59[Vjp4ljH+!imD'H9oh([NM;-dZ[$olm[`@uo]aiR--iBbVL\gSFu"rp\OsF@CWDGU;/U8hNr"\V5']_@t*L`5(3:'UNZjqWiE)o>A-6YVCYjg7;'r.!>jKG;g]d%iR:'r,2paNajq3E_B3TN>$gS,=^24e4c5`+hIH5(*dJ,Xhke.b@#(JuPSRP\X#R*K%RNNL-%8n?8Hcec?^$TILjMNP"):acm>$KhG>r9oEud*U1ik&IN6&AN>i[hqO$6\(LJ.>C/bPHD+;nV$Pp[NES/U3k`-ZFU,0s+<>oY/Xs'j8-g5U>E3'77DDd;@\Z)PW,%8(*R5?`W`!g?RFReVqfVR")foN8B-`oCWeYr)B>e+n=d%PPu1irNcl.BHlWtIkC-)W\$bcUl39,s\d5^i1^`GOA\Y2/6+%jg_Z+h4<#a;A"U\T:#&DaM_I)YLgB,D1:+]AknaL-,mb0(G6+:3jeR0-;1,t*HLT'\[?5)%N7/P$b:8/1iqg'FH9.,fI0F_2XQOU!BT.@c+P?^LHUM9I.4s3<8M`r9q+&[#<9o/5QCQ*A(gISM+qXs/YQ_D$4H;j)r+8Sh!'Arf_[qE0\7,]0TGXi\P^A#>0maeUHC\,FZDsti6.sLI=SHcQ@h3pL32KRflJb4$0GL!I'a6MsT9!>2]hnO[*d\Z3jR>Vk77dlXK4GCq!XQJC0gY`"=`sp_Rm5sg"O*i58*&_V8)LU\8B-)Nsi?t7FZ65%Q-'!bB)k(iI/;f2Kd:A_)D9>>*U:8$q%D#7)i?$Cre.c1sFGOj`lW`E<%t=##p?'#2mFoO;(CR@>BW4`rdF5!h\+ji0#>qk%U#B%)D/#P6QYgVXY-5$)^Br?Bji`u`CXp7E@jN.CjY2%VkTn29a:6D)e#kirSI:_(F+G'Z_'s`4SeIFmdHkPrTn/]qnN:E`5iI:hucb>rH+aN)g!H$Qk8Ag^$T[;j)$I_dpV&/]jc[9?gd%T\NW)%p>e,/k+Hg\H-*d[%D(juA\h`l&9]X7#a^@@1"o8?uRilNR?HqR>LOAi&PrTHa99&'="k8GN];/l+n^&Mq'JkGi55b)VYP0aLcC]0f>NLZ$TE+Z^\up%AM^,'0LWY0Y[Ko10;ui!\nspa[;4BkA2eD]\2;t%bEl-?S2"MCU"F]]GF\Nn69A':CL?tmZ"(g`cI?Dq>"miJmn=E)l*hnX4@(>l['=aWCfr0L]j9sDYgp/2W#oDamfp_6ZXlFU?HNEo:+rGUN$"tiKGWbp*ec3oZ'2q0oMcsl!L0W9&3O,9\mtAV+Y;P,%p`omuADM@^&Y#5&"bhU1q6Srq3HnI@boakns?Z-U2mChN'G`@=p2]I(0tdSN=/Kna>3)(q5<\Be]Lh[;_lGr;,$[?Fj*KU?JA54rSqNi?/%B>:Otr6Zf(2MSAuDn&F:P^\m1[4&L+DQn`;ofs51'fbEs;'1G.\_%3EB&P1C#oJlTd[V7G'_%]=fnro]AR:DdNMDt1)_gJ^V6VL1B[EFET@i?hU?6'l:Lg^F,S?iN!+KtW@mq9*-B:29_%nS*aE.k7AgFXDuX\^`,)fOKu=WEBp0^[9Q`'TM^;1inPKfq#pT;)DRHD(Pg3HZ'UhjELs@TfJI^U?JUWX.o+\hu>lo_1`75Q:B9IoIiH+g!?tSVL*2Z'`H(%r5[4q0mrPUT1g9hWDf_K>]&-!AP:#"N:QRKK.bW#\EiGGlVi#Yg>e5YT&sbC!uMqcs!+9:Bu&rV*KuZf\H@X3d[kqPQRV.8>ea'o8UKY,'YSnincKCb&3WS\_WL+3Vb[HKqJR^@Rnl;=qgD?gLX;W6qrt523Pbht1aAoL!FTi55b)VYP1TmG5B5oiC>1\YZ#NluD'"6>\'NliDP!\mu%CFT;@=l.7p?GSZ0DlAXDBg^q:X"l@*J7a^8:O/H;Gji$e4iHI>?L@*a)Vr)8_rr2BdIbD#m$@a!`$b+d'PXa%eZ)^L3,8Pb#UE?=&*i0@R\[f8NW[dn$D%n1LVVX!3I+Y+81`s<:2/Cc2hq,:!*phUgCY#Ri99q+hHhM9B.raUmPuh=@Fme%qksjZiBl%V@\8c"a?/;M\X.#KG._4d`F$,-2d%%`7G5@O=-VhmX546qO%QZc%cb>9_/9U*"O2O2!53-If/sg54OIN`TI]EpV$#i?Ri%XY.iZ`WWXD%kVCBf+E9MsgsDQAYGnL8g9bQWHhMjLR:h6b+22sfhRd'g$LqPW0%51J'$!A\%F(;unR7&&dsM-.a$[oWc'aIZ@=p2]HiOf"6c]_]R>UNCK.bW#!#!=>a:6C^MXb,-0%51J'$!A\%F(;unR7&&dsM-.a$[oWc'aIZ@=p2]HiOf"6c]_]R>UNCK.bW#!#!=>a:6C^MXb,-0%51J'$!A\%F(;unR7&&dsM-.a$[oWc'aIZ@=p2]HiOf"6c]_]R>UNCK.bW#!#!=>a:6C^MXb,-0%51J'$!A\%F(;unR7&&dsM-.a$[oWc'aIZ@=p2]HiT>E!]b;1O!qYDh!IluFDlB8"Tn`)zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzE%h&<5T\bKK.?p%*HAq#jGtN)!5LbC#oesjNbe[qpGaO:5lNaK!=-.%@Sfn(pp:7WiR+QS2_6h7NE`/eqS15(*.a_hY!,.Cc7P`n;nb;]7:h^cej6'=NAgqIQ!ZVbEMaDr88]DrUQ^j6^,L/WHKQqXbXbE+#K_1o^%CZqu-/(,'!ab4YH#A&aJl=p9Gg9,%O0\Au"$_H%T:??kF_K*MpaEb*2$]"4k>Vf(4q.@Xc%\olK":LCDQ_-EfG0ZUF'/MNN)O4c_!=FEr8Y`8P>iBo?TWcA&aIq1MePIVPuh:;l(s_UADoul4`]W)bbD30XfE@]Y$Sgo(r%F)`MYn\tqE^DBhZ3]Zmo%\19sE!.]E$RjW"ab,VJAZG?h\-6,'gW)*nQIJ`_t&A!#Mf)GXF7p:k6$PtE85CRujad"AX%N.#IIDI]@ArM\1(k^-tpKRjI`l?#IrVA*P]JtVuFSB^3-lTp@i4sp.$>^JHf;r+2Dr/-+P;h?CA*hjQ;:rO,F&X8[A1SRU`-/V.h]>'=WdX-[V-)'McTXF.gpin:GHP,WW_]6Na,V0UZ`6lR6%]B\aRh[7)R=5!V!@7148$;iGEO?]!-"!7o7ZMlacdr=N(E&dV3)Nl^l/71l0R]cX&4mr(BLk9TcqikFtn*eUe.c(qJ)]@7:YI:1.BTX1E.!i2F\Hc7F=HlH`9Af%ZT7idjUYjZCEdff'M(r;`R=eJe:Fup?[(caH8;7''PiGF5!^1<$:>I^<1cki5(6`-`1p*F*"/5/jHED\;NaP!.]E$RjW"a#.&Yc,Nr_5X@AY*n\l=Ap?aqeo&L6!2FLZ*:t_mNYM'qM$lLg1`f*5=MUpD2Vkm9*/JNhD7)CcbHVq.H%#HXPr:3RWkd5'Qd`ABDb*=JU3MrZ%qWtQ7Arl?8[V]4ObVlL?'o9Mj^$p88;l35k]m=f>>d\19MPM?3e5j)4)f\reBcSIHGlADF\7;+Npf):B?cl&m7#Fgf<7\n9MmW0=XZ%;D/JZl"Ud@/7:W`&m;sT@jN3V7=$Bhi[7(f&"C9(R;%s#g*d=YLk0hc/FL\9SYq_a,lIDqj%NW]tB6tO8)Ibk_ca]K-H*WX!N+@8,kg>;)06VC8CoR:-qA*<"\>l8OjF\if!-"!7mt@gS\iSZj)Wo;6[qsa'#b`!7f3N@Wb*AANB(Q_6r8CHAUKE(]Grnl.2c02gdJ,]$M5Q(#<0k8@4OW\nlG/EsFS5I/.gIC[>H@Z'(-^Z'bEX8B]9b)j!:EC]MhRGJ<[>OZH-b[BQp@n]sY9G3qn3-;L*+TauQ"jjS_UVgh<'f2sI#aCC0c8XhYWIdF>[Ie9BW'jBFdHgKCiDggqUDh%Z=A)tN<5MX#'s7?sD+U2FeXQ53cSp91E#GV-M0773kcCLMoqUMcu29&$1dpN??3cuoY:>5.!552VSXb^rmqqqE;eLdX^p!coC/9pY^Z7hLGS(Z'(=t,@bn/C1j:)IJ;P6J)C"7pSCG1P@gkQ9U[SaVC3?=a+iIBT(eJpS1XW_DgjKZ-sf=NIc(;Mpu)a5prF\@7/;aJr*oN!a>Vob3mS*OO?\bA!77=FCY*0L/,RcY07NGL*BSEYMDqW6lo&@nN'd&Hf8kCQUG;ONs7K`Q)rW;8/mGYoc2R\=$\'*aLCG2gEbGeqP:'.d_7.)=/Otg@.GP2u?i/R/,6,XkObM7OPL>(N4.b/o-lQE@q;iHpWiA[DK*Mp)DJl%'CK;A/]QnSW7MLgn)RYG34oY6:Bkk;TR/4GPr@TDU.'I!m50@ellWXl?3Y[4/a&C]oX/g%)h4XA0YQ=R[a9DVbL`A?nikur=pr=gq-?"7cgGWm#Y\DR`1`0qB6.'nkqqW+ens@*r\.QFrGi4-'=0?(L.ug:\rq0];)C%NRMqYg;q#6-,MT*3FG>mOkYHZuP;I?^ZUaP?hD@3?qXbJoUHE#(La^7]M?)(^F,#Sh07N1bT8JcGqq^]b[A@)B?[r%I1j/6A\\3=^Wi`BTF5IJXA\(Ic+7c#6'3U2HD\A&aH77+&B,%t=##NK&p3C:qc83D5YhC%'lNo:3#cq;]O#!::X\BMci_+9(bb,ERBSqqk1F0m^l%hN9FU55k-&C$Ld'6R&$i.#Yp`P:%/-&OlH\fotRuktcdiCtPsFIdr=nrqOMuSplgnG,"1BrpY\"pm&%1jmgA5^]4<1.hG,oJYo@*IdLoX)_kg?'2La\pjtfYs/kn-l3HO=Eht^#*l+mTH9],InFM.=PaWB_.,gUD*^eRgJtn,NCUQRuFm_7N"r3FN$\a,pf23d1&Q`HCLtc'U4qiPL;P^]&Q?dhXb+g9iFtjcUo_cCR1GX"-Darqsp(.q@[F[r*crIK)N5Y$?8FeQ:qZS_O"M;"(@&`lSD^cfsL)j!:EC]FJ03%&N-r]%1a!8QV)YQ=R[a9DW`O)r/BjGtN)!5LbC#oesjNbe[qpGaO:5lNaK!q"R1HZ&4HU"J;eS8AVd&\!'j"7TJAo4!!".j5ruN!mFq*ja%rrqQQp$:d5>e+mOK9]fTFK*OU/ST*?5(EQZHW.+S]mBMFjX`u/6:3,Xlkiq$31':g.Va6ra($Ge_[udNu0T\nDM+b#7fP'I=%CsENa$$T)JQ\+&Gp:3]cf@JMrXbJ2uS/=;/BR-VO*9he?8cm\A=]6F&>iJ.pcmTKeb7hc+,!&ADgK1M"7,gW&FRg/WSgDAOaa,V0o)c8FtLb'7DS5,G*iIr(SBX*;%a,ZEsc[Pih`LL57@8g*'l_p:%NM:jup740_@Q(4V;)Ct;3d&c?4fKFimGc*C]2jL\&Oc^#J5#9NE9>B4hS"9.3d%HEjG"*_d\Y&$;)G@[]6<8VOY'USnDM.2Hl=M/L$R?o`tfo'e^`3h4DEm,X&iYVp!md*VQF1<\tPf@`Z.!ZACmti>ISL03-jc:V%kL]UcJ2;h)fE'X=7)F/6fP6,&6(TUM(q:iPUFhg9`!C1R(@Y=m[H\n[;4BkOX!AV9[=N4&=Q&8n`.Z&Y@ue*GnD_X:S'[bfW_HW1$=r\B1f4..,M`Zan3Z:,DG.+T;G;MZ?l3/>MUa=,`2X'!1DF&i:Q9_V2q?6GOF86UIR7[g,*?]O@!1/'j\7ag%=OX9@j_`E71ORV;Ksr3HJfs$n"iBN!.kLJ,b=@ldr>42Jq10&ku(pOmc2r/1I^JEE:U$&NE['qB;4smZGuYh7JpmP$=Y/!!&*p1EAl>)`))"H<*feWBl.@7;PY!2Hr]!FmIUIn8,@a?+Y8kf*Waj%N$lBPp]A!*:p*!q!mC>I,`)$kFR#Q!cOe-`2%k\qSdX4N1po/Zf`,nOR+*IL+-&u7%d:P1_rdBArVm6E8\N,7aWW['H)%O>"(TL[Sc5[.,aLI[n"Y9'e#'9n^_R0YT]9AT'V2<6re!VALA%43]6j;?-pRb0o//B_Z19DHXqZaX`u/$&il$ZcGgj@?D+;pD4*S[QOYOn:*BSWAlrYN]X0g,")L46@SYBeD##XICaOcut.QV"TKF"(;2`@*KE4Y!d.T9PU)j*%e?>('B4[HP?U*p!AOQdl.1c7-2.>gH%A)m.Ab9MpfEjb:'d1A&+^juU.Nuu[hoi!8FClLkejOr*nL6sOrfV:rtVC1JK7_FB[Roce"mH"2A9=:_Kl-lQ*%dgAj'Q&mZ$31':mSGs#pbm6Xd$#hQVSVQ_l90LfgkcKr;pLmn1MYFB;W6PK\(!&Dt'Pp)"d!!!o$JBAEl!<@Y/F?jDnU&Y0Y7QR1t6r!$EL,:`5uU!!&+C%]Be5'EA-S8-`+K-jfqSA>B;W6PK\(!&Dt'Pp)"d!!!o$JBAEl!<@Y/F?jDnU&Y0Y7QR1t6reo7dWR/a&6]6Bk82$)Hs>NPG6@iD(&`6q=EdEd+$PZZ^":C0c)HIkh6dk)]N"oPFW:I/f&8/#'b30p6]dl09m]<6J8d"VBW)n>-t6.WbUV9OTPgu*&1nj"OAnR1=ssN97-F$*?te"*^!iGJ8O&LV+G=FSE\_5kCB:/2PtBFZ6`5&FI#YDeCW;r>ds+T\'LO&0,r]]It(0e9rrX(d%RYXrd#KnHhZr:_hRjLeLRYGq!d7n/"&VOIViq=.W=.S26,IV6$HYb\OF`d`+tFcS*CZj1cCRmg:MRtW)9>$[`*KZ0>@5@XY(>m*'SapH8eI>!,kWX*qRYUV(tG9.(_CleFM_Ea,V10Y/ah_IQauL,e,[FiPL;D7uoi\p1tZ&[r5UVZlM5O'Q-=dFPSV`CP9"mrVQ';[B"6kMK\u>A?::*RPf^%%EbDY<2NH`4qW-O,n]eGp?`gb]R'6cN/YR,eC51T*\q7slW*WDf.YnHPUTP*_OZ*j>)>AuhFf8VU/@c.n!>\7:6R.L717)j\p3c)en'@j+_Ql3B)baHU*u73lSd;?ck'WcoTEeHYK;tU8+__Te[p%o;lDVQ*#VjU3$!,k3L*qRYUV(tG9.(e&I.M>[LQPU%K)dFU/[MTme-o0`"M\fSfdE&XC$)T+sm+AQV-#Qnq86]42NP(Z7=,:]^=H6W%gDW.sCs3Q4061VL\/&k9)'Z+nK+fS*3-=@\'OH.R[?2\(7aPAMEb2=%!bTXo;0VH`\U4&:R5Jb\K[ptRY@u:U60$"H:[c_QcTN'tUp720?b_&J(GCfu)+caBrS&NR7PGfAE+$6YRmk^^CY!#L-aIpF4:7Q:DslMtJ#(.f0G]LhIf&j+&K[_$QS)R$)TK30ElQThF6:Cf,&;D"Wj.:p>GYn]2^)gpq.BY))58OD?0aDVA]pC(P$3e%(5]6fp]sfR%j,[073aV.R#$hQM@LR`Cj:f+eu^cdAe#e?&F51AUqq3>eiiosZSaTt]mB@/d+;ahP:'.<[h_KQ,0H`0#Xs?73HJf4C8A^;dh1nTC)Rb*0*5O?:Tl2DIV=V5nT#gU(f>CjJ-"?"hH3RT[PLoHGjsY0M%a*[!T&L"4m&7494`pR:j/tq<+N\n=%-W[fs><9V7+)f)JL]gd%sC%>"@!#a,fu^gUD.f2s;S?U1e)Q#]#Pi,E&BQklP`pQR>OuLesCcM)?`1^elYPh5=F`?Q\NTd%EZ\B$pZ2!nOb<&YQk2teT;l6X&]t-WMi(_;GA%pX2rmRc@p[6j!;GZQTO\aa/Y%Zmn(LD?[:lZqBX,YahF6:]pDhCMuM_(8*`XLNVH]qN;GpW@5k,r"%WiN0nX*=-qabY)%i/Sd;P.n&D\O:6^?;X=`8W'5sF!ST(>IR)uNo\q\'TK)S'3D8;d5m.S!psM4/Uc\W?!Z:?[;.j&eVNDY@ZMQng7f#F-KOMJhs=]"6PP6[CU6`(Jf?LXbf,JVe)6rhM]uu7+;nT;-=tNL3I(%$,bW4cKct03I$@Es30@M=N#*,-MV$Km'TJMZ^(-VjD<`7$(5`W?MX[4sA1X*Rig_c88ggBI]Pf5fVAGW6Ap`",DVr/kEbjtr^mgFla*b4CW=2WcNLdOT&Q77.b9(<*m"YB8$X2=3i[8DK?_;\Vr%(5f-Cf%)HUYb71WFM`\;e^`4?2ej'b9N,k5eOj2uAra&4N;Z3bVHY/mX@mG2gGsk2teAP9R%K3HF3Un`-a$4JhTm)b)usCUbt')+=qPqiD=.3"Ra:`H.>SL@jTV%Q$"!`,++Lace)JG-\-QXU+Ueh;'us[OoO[*@p.sWiN2,`uN?n2fIBTAbSN=^8%i9\MA6gb]kL>PQBX2S3?#(rC^^XU/6#W[nRl]bG@jub.*9qLCRnI"OEW#[qO0`(/NW.TDeZ]03u.Gr=!IU);rc]fjhbL^Joq9$>$,0!K_5G\pUi6W=2W?oD$kf@e'mEJrC^^XU/6$e'EIs+Voq$rQc]k.U$T-8!:ii[QZ)RNPp)#OfkF@bjI;_nhs=]"6PP6[e#!,d2a(H\ftUL@-jjO`9`^>oHFeL1J#NiR'Zs1?![-CmFSTPK;Al2WPas]95ecLIo$.011.4tf4)G=TI+-R+S,GukLn[^hg(XP_VPhTrqj5G:7A9(T.0/p5:R?"n09m]<6J6'O!9BW@0&Q#&.ROo(ZI>ZNa>Z7f^=g8#L+!C?VbI2RDgK!BZ[\q_;&%/JRfX_ioQ9n@s&'`/.$U8\"[Kfdl13*uV(tG9-p)8QJ:,hpjdZ3AAVd'WG1mW1q51(52uAra&4N;ZZmc"G9i%*op+M[SMF-!1;ZPmJShApe?ReDWKsK1)!6@)^?,#",Bi>#mS";7ilsD50'SWjAV?"[r4^GeT^Joq9$>$,0!K_5G\pUi6W=2W?oD$kf@e'mEJrC^^XU/6$e'EIs+Voq$rQc]k.U$T-8!:ii[QZ)RNPp)#OfkF@bjI;_nhs=]"6PP6[e#!,d2a(H\ftUL@-jjO`9`^>oHFeL1J#NiR'Zs1?![-CmFSTPK;Al2WPas]95ecLIo$.011.4tf4)G=TI+-R+S,GukLn[^hg(XP_VPhTrqj5G:7A9(T.0/p5:R?"n09m]<6J6'O!9BW@0&Q#&.ROo(ZI>ZNa>Z7f^=g8#L+!C?VbI2RDgK!BZ[\q_;&%/JRfX_ioQ9n@s&'`/.$U8\"[Kfdl13*uV(tG9-p)8QJ:,hpjdZ3AAVd'WG1mW1q51(52uAra&4N;ZZmc"G9i%*op+M[SMF-!1;ZPmJShApe?ReDWKsK1)!6@)^?,#",Bi>#mS";7ilsD50'SWjAV?"[r4^GeT^Joq9$>$,0!K_5G\pUi6W=2W?oD$kf@e'mEJrC^^XU/6$e'EIs+Voq$rQc]k.U$T-8!:ii[QZ)RNPp)#OfkF@bjI;_nhs=]"6PP6[e#!,d2a(H\ftUL@-jjO`9`^>oHFeL1J#NiR'Zs1?![-CmFSTPK;Al2WPas]95ecLIo$.011.4tf4)G=TI+-R+S,GukLn[^hg(XP_VPhTrqj5G:7A9(T.0/p5:R?"n09m]<6J6'O!9BW@0&Q#&.ROo(ZI>ZNa>Z7f^=g8#L+!C?VbI2RDgK!BZ[\q_;&%/JRfX_ioQ9n@s&'`/.$U8\"[Kfdl13*uV(tG9-p)8QJ:,hpjdZ4ls'tLmTB3!]qf2WhNg$(cZ'..=`Ru_a.VL9qHO7_8,eI2NJk'Samf"i,@=dZ$3Qb@l^+0Q`=(!61LjDS0[j7RIlDTlWm.0]%b1j%]D+)PSVgSRW"WnReR9Dq^Q*&4L$k*)cir2^@.'e%Ucq-ji?)Qi^[.)7rDrW3^hnHeg6N-pVH$8T/eT=(W!!!k57>hq0Tu.uM_&lp%`>&Uf*,)QaqtBD-KitZi7>&PZ!!$EjW[R`@^]41\pkO?d&6]7c\T?pl=>3Sd!!$D3/uh7nI>Q7Z=P?WD^\E_mjM1ZJ^TCkX^:\pJAXDMD^\bXXRlbi^n,DbDk4.@.mGGYSlDp7YIed'Zns)?9P<\l,]C3K2T^0/IL)]\UI^O(L\o3&hS&ZLib`jNE-%GCXIP4L#]'?:X/ReJQo?T(.:BW9X5P3;iosLo,\ajNCqcY%jkt>Bppu744@dMsbqt/?5s8Ufu4nm_oc8%1fbkQ#>(]XPd:T1"$6=N:=o&\&-c^t)*J+Q6VjiT*W/Ba8gQS`p)&P"*hQFhE$D;*M93/[^dDuE^crp_*1EEQ;`Uh(j79Nj&4p/t2eIWq4&q@^]*o0kNQ]YS_!WsMT1)=h3Y#U??fn(3bQa.rVQ?HH0:a[l+2$'qQHfMa#NqZUE>!`nVnJH<`/LtgMZo/J,I>L3:=<:WnVq,M5'+F=jJ%*]THMZXgZ"@X1p-fPWN'@IJ2@bo_.$X?eP-[s7K`ERX!K]3/[^gTD_nq>68MAGjEq_XnKe1bL7i1GbY4a8pL9)ht`fR55:ePWf!P4HK^^0oVJ*?G?2[(,`3rE$-VG>hu<>Y78X$bJ=8qB2@iW;7-@L8pF%pXNF@.dE8;P?<[;N^s@m=bQ#V4r'qJj'="SD>b#ukBqd!U!5QZtNM8)@r,R(&jiWhpGBr\s07NH]`uffjP?QFlUA`]m)'5h,RacW!"W)Q[r=ROo&Au=^RdDf5"_4Hb$4;Fl`OBsAh@,hTJ`8gg4)86U?M10bBN@-or!<9Vg3[VZ,`0frqjJ1H_,]P>Mgo+n$qD<_4t[DaCh)i-;QR=hYcIgIp!Hh!!!k(?=-q/Ko`uF-r)hfUceV!^\l8*YIsGmZd18]q6P>9imr4GB`IbtM5'+(\KnGGViO%3O:jHkCPq;GH63G,DlO&!/sB['`ITh^\mhUs7b,MF3R2sI8lNcZ"(h(ro\d^(V'1mCWioY'h/#$kFb\Zb)cSl&-%a3Rl>73k/J-G!5WYK<&%Tb(GAoH;FbF!.a$Sm'4UFes7/BV_>dZi`EnkeO7f]9:%PB1]RLU`m_YMqi3YqLiR]W6>60MV'D$`ZMHMT!!!#g=a9GP#ClB@+.[lWl*G$KIcQV]RP#'Mzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!"XTdKg?J;Mct(1Es%JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nip$.*Tp[8"L_[ifG]63UqhCDHO;]e[/AhC"&r'hKc$NDjN"XZ>A4"o(_1!+27I&C\R2K1Tg8R]/mZ&1rVH28(7773p.$3Q<$'q?gMIlfCmaW;!!%O:-Ap6QY!):5[ds4df3c;SQoqmC`uX7K/-#Z()PSY)lIl=^I.4s%MC)V0;=r-qn%A)"ldi4Eqsqo`?Zjn!O$EVg?;)]jj6*%arop>Q^@]iHZi$+@>CQM1+929%5C_jeGBWE0H.cbqX]_tWDomo?F'7%Y='f$X@Pgq=@J2M7<<*$WA"kBrlIl?,/R)93?CRa9f3NTca,-N`QS'kN'.WI]kFOf'2fIQRYJ+1HI.YfVDnGDF.%2eL='C4Dnc&0.!?F-!"_S5>%\B$\om>Hf3\@JgMc9FLECuTB[NPeT7+0G.T,i[-_DrN9,,X'9.mbckK]X[`>;m/0ep+:Mk\C\/UREca*6."J).DFeZ'?7S5NkF]NORVU'/8\<`dD_I1?^AI?+CY+"^]*A<9FIFr[r;Zg_J"e@9lIl@7mbRc],EKM8o#p.ZqXs0T0?tSqHgeYW\l8@&Vk/52l)030P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!Lfhi!W^"=&d2m6*XD`G'1`\-=aD1j!)+M$J7e%s!!"^("9Fsf#6Fn@";1iNQ6$;3!#%m7TNQR`!!#\86%ES3JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!Lfhi!W^"=&d2m6*XD`G'1`\-=aD1j!)+M$J7e%s!!"^("9Fsf#6Fn@";1iNQ6$;3!#%m7TNQR`!!#\86%ES3JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!Lfhi!W^"=&d2m6*XD`G'1`\-=aD1j!)+M$J7e%s!!"^("9Fsf#6Fn@";1iNQ6$;3!#%m7TNQR`!!#\86%ES3JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!Lfhi!W^"=&d2m6*XD`G'1`\-=aD1j!)+M$J7e%s!!"^("9Fsf#6Fn@";1iNQ6$;3!#%m7TNQR`!!#\86%ES3JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!Lfhi!W^"=&d2m6*XD`G'1`\-=aD1j!)+M$J7e%s!!"^("9Fsf#6Fn@";1iNQ6$;3!#%m7TNQR`!!#\86%ES3JH,[(JHQ"BV$@&%^]Y8QBU0\F!!!['&>30P+92C8+@1Nil%&g70S'?-R\^5j!5J^M"DF)B#QOi<8._FsH6<1f9HZWOB'FjH!&/s,!LiZa!!"^8Ra*)Wzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!!4D;DdGf7!"?)fE1OY.HT/g/S#/O6=i]ru#["qtBF/eLXh,i;WWBs6-5="tP?6Irc6/>CY#T_q9OQikuYT.`JS<"H)B1oqKV>.[h^W'r8a&;Iekhlp\O3ZVb6^Mfi*ATAR;lc@34dk]/RL\[Vac3?&[+Hg9k_b^AI=o\WU>"qU[[_GiMWCe).<6]2I2*4ni4Sb--9eX1\"mhu'?t-/J-hRr19+i4oW@ZXLb+qE_T(dA!P2IX2.OXlL$1:!NF[V[L34hKq8oYJ0ku+8tCn99q,Sq;mt/^Kn6^]Rq$='Tb.STfPP_$AF@mIf(<^LbTSl+Up95)0;grqYa+-uZiqk!;f93S`&7?-?TGh@D(V.175,=iXg&\PI^L#,"9VgiLfH`u_jk/Re/Ho?TYla=r/DG1o:7X8NCtq<1n1'sF(QW?5mnJ.rSRX'd7"j'qP;'a.9h)b[F_^Lb\-M$bgs(bUQ7V8RVT&T>Nt117ik6>mD$kVQX0=#!tS(NnW#^!kW]LtABg6NC'&X`Xn6VlKbr%&1FG7JpfjUqYY"t;l?;pih=VR_k5Y7Ls2fm]eF.k\]4p@MDK02BT22kEb*?M[HH\+a%&H&kFil/2eGj9Je=!25cX>4mdP1r5iMUCY`ufdn>;(cm/[sMUjcrp0i*F!?nY*)P&1$%jXQFloeV2F%Ea5,]m^YuW0$V3fGOF6c:**IEjHTGQmsVB#Vr_GEA&aI+:Hc*e)U2D>CIk\SK:i/8Vs+M#S8lPjdqIGDO3YPoSUU4RpAR\!qG:Jm>O&3$oqW\A7S8dA6p[s#GVAWH?EQ,_?1CXGhH18Ae'UaWhpu73enAa_\ErRQa=_r(g%_F-Xr,VMaB3.mX"N_l)?$&qhHJlSij,ZG(p=jL-I"e2iBhB)A^N0))G9;8*dJNY)41#_tfB5&L^An30ad"g@FAok&eu`/#e58_!p=Nm:Bps(b)rH&7c.(po%mSj[Q(6OuhDK*"<3IRPVY--EVcDHs>N2]2h?oRcUdtS?4Hq7?=NIHg6h]`Q>E>MXl9k=K/-*r[9RLir"W(EnrUm;d*LPBRQHWqSh_)J#P4Qs\Don.geXa'-q-S9pFk9Y8VoDUpoB+<@I'W(,/"*jt?bZGn5Q'K:QX6+>XG'/H*MA7X>g9fIc(LEILI,pD[#2eE=:Hau+ViZ16G/)T,UI<[sTX8.FL;f&eQOBuq(/#;g$!*lpbEea.G4"!`X&_CXgiIQ!bk]'cIZVNHm:D^8=CsGT#mh1M@X4J]P?g]iWReCpiPKV>h;5hlZV7fmP%=A<=_.?1>IS3cM\[nE8("KqXQ[5WK@GD,6Ou>EFtXZWdaRbH]9A=SY)^3c`Z&WkWl#g`T$r7ggDT9;UM*\tW[P>#Ur$39>Zm)F\T?q7ZcC@GIdk/Ydm*F\'@,l$L0%`12-i/kGkKTgDqqk-g-jXR7p4P&eXKUBC;/:Cd!9G&dAmXtmEA"3(RhYTV+[/P<`>eCYGYahp%#UKMRM4d`q8$26>#3A%h=lS>89TUdo,a99?nCI`0q0]o?B5WA=gs!ZtWI(pj/LoZ^r_?C9m*0Qml5hEr@dsD:l[s^EQ;YObqPU>k1OC>h0Hn?B,&V-GpPZc>-M$hMImd2\#.:^F^:bUVBo5sb2a_@gVXOdS6\cJP>GHM&':.%DAedfm7rD`cHcjRG2$jO0h^nFdZT/CDpPrk^$gBQF3Siq0qNXLM&F5fYK/%gZ":(9D'^&I04qJbU!.6B\F\^&=sj=re)1YoWK:pE'>1\I-6uai07NGL?EH-D0%Z@:R]09"'sbS#MWSp/^6s1VU66Bq1187sC.[q"gg]t'bFE_+=c)4-VP\fSba=MA;k!'s1XF:*Pe8\]Yrp;O\126>98W6h?IkY"9:hG2)p@pEbgO[_Ot"E4QX??7AsieG<*H_1XidB;:VHL9!#oj='"O\M0V=F*UeE[cCe<^*=IWi2*=+SD7mkB&f'PYRU_I+X`21]PZe\,)k#.QOo*6C+Xsj)X3UBu+ojr9AjA<->1F*6q%rI<0m,Y*\(YJga?Jab8R\K$U",rpX1okKMu7'4p54"WH=AP3-%RBhuVmka6nY#qeR.6Dr)S&j?*hQ'EE]t.?0MY9'DpSleGqim@oD"[5'pYL78%aVdN>>H.-H:`U=e4^@NoSW!RhO>0[._OQ&hlC@dj?Zi4tXaH#=h?aOKDp+_>DSsImZlP*K2e,?[]=5:nD:SaV^?FY5B.q_nh3F/'9fIS8lOdeH@>)BAgj=2e=KcMO*QoOggRiC6h'lpFfXL4Z!#]-Zs=$eK]sKO<$8eg[B22Z!!b.I4jg904k362m,1PqlS$955e=(F'b(!S#E&p[90JRN^t[28lJG;;kG?[,mIBlB$=<(%E_p:PGP;)1F:4\Xjt^mWPIfiAWD[2/U]23q8lE];I6Q$BWl=)B6OQZs!b8!E\/gG:++8Ahj-puo`FL5ZR:selI0C&fNCQOTBoE1Ej_V-C&&u=Fu/BpHMrR;DC@C"lO`9&CtA99U0Tj%Y:`e@k3eZXPB!V"cdY,DSFs-TZW'TL>9L5:KU7k%\ghEs\tGSb8\+P`i0/Jc/tXF.Pf2);4MPgl^@^op3RW;GGD#h^s8Hr:Z.2Sn#t-ernuh&]XEi9l9tf-5C.HYsP]GKMDSc0+7pUtGe__ip^%Kt+C9.(HFipsc=2.&13n.*@]Lp2[F;#0P&RH@KQ?"85MurP1HCnQr8Slca(_VsV\2FFeP&_gebLfi?X<]6DU@e";L))Eg!:Nba%L.=1.IUo5e9Z)?1ZfkmBtLA']]I(JAY[E`0VW&BDtp`MQU6s2FI*$RPOePc7ibJN/T3R?<3i:mbPK2-tH@`/XujHo8=DW'[=.2B3R9_Oh/+eWIM`fm?qC;Tsnc/^3K4j-d1+iPY];ANM;g[<7`6rmGTf^QsD];XL"ok2-3`H5.f9.MIp=cBgtS]]VU'QA(N,tW_O#Tn'9'dBhB)agc.*FWYcVu1]M03W1mrT+`k;2q,DBXjNTX@m+Q1VmdcStB-?!=9-7Af=8AVQBSOQfn+Pbq%0-s&s_Q-ahWjDZL`&6#08_E$_aU7L,AfBs&Ls&7]pdnQ5AVV7(op=N7jH"5N(._N]Q!UG$HVWjpFd4HHpY[Knn@S0W@"khAfSpTn>qsI+taHENX.0V+9TKB?j-;YtZ<)9iTOt"[@s890T7G=KcI'5o1fhqSnOP]S!*MQEu!XETjYRZ/Tp="2rB"(oeac=NKq3@F[hpB/C\g%U:n-@'h/"ih@Eep<>=iSBld=s-L-"=HW8GQ+>oAS6Tq'=m7REF>6!&D)Ih:!=aa%2U+!h9Y&!%?\5Q/k<><^M04Vr;:FaiLSND%]&!(8@SiLu28;>+SV7#uMl]\oSlXrWk/6JtIB1:FS>B`SAq7>Cb;)FKGbZ$AQaAa;rq!;2H.[a@K50t09qs7)X.,&F^W&%)g`3NY;m;l8aPNV4_Dip;\M5$E#??4.6ojX`4SMa54dINXe.BQYMptXP;"7C28s3HQtM5'\/BUr#-cPEi\F[^6/`f4-&qC9m@qtAR8BXLsC,=c9R>Xd':BBr/(/Ml70=3S%LoX&_'lqXj!W\j[M>kghkWddN8Wu[>F"bNi=V3bL<0@m=aG3rnTG%\VeT;#SKa_k/Rig-O4M0FE7/hp`s&(i_PFFI8teSb$-NDi\'@9VWU>AhP+>`YUZ!QqLUo5eu@f%.U71[S'mo4;B\n%JHrY@gmCC;/";d.Q%mld^^#G31toW%QQrb:gWCCQ2nT9,Td/d+u'C;c[5-_QR.NWgqt7YgcM'/Oe3_Cn3K+]o&\'Xc_"Ps](K3IH:%:;KL7.iYB*?B$<-tbipqkbGMdhXf,8_RYu'%0MY?=I<>=hAH9Z)^<`-6SXj`SsJQLHc>O=XH,q9C,1Y"Yd7JU23X7'0^m'G$8MrqOM/to^g;7'+l9o5Up-oiT2ej&MhK/u*Kk7f2!!Z^Vh'444^bU(D5*)ocl,=n\TeSHg9`(Yh>r+1hc/d*HUAFap(NAkJIXmX:[o(L@Yl7q*C=ta"D;g`FZLAmSsB9r!r8SZJcOqB$?Vs-&Q6`JL9A#QO9dd9bY1fBs&Ls&6T%c9$;up9#HIc8t9ml>F_[la\nOc;<+MMC,I'o#jJVlFsuQ"(r?;WreO-B6Dj=f@!)$pWbkh]R!)jYuYb1:/U?7".%uDe9nGeT\$GOf;f;PlHF[f:hB%J[HS"Jm>Is'9_d(F&uDeGqWdW\B,"&FX8;W+.oramR;g=KGtHpWs8;ImmB0[NrUOC7Cc#eV'Y@!6-0cg3ofCE3rHW=l_)8u%>BG>*2@J],S\q8YFg,oJb#D?K;Ek!8CX&tW7a^H9XAZ.3;/R#M0YLNI(JFu#qe!.^kISWLkU9Atr21Nk.f;'po6^CDIqIK<21sM=<><3.RDP)$Z^F_=58TLipm^qr5K5s%_VWH@AJ)rJ@V<1^V;boQae9nGeT\$GOf;f;PlHF[f:gGhR3`!=Tq;X_@Q$A\FBm$%kB,&UaPdPX_d969F2O];*6:uQ93H^QZ?0,#/jYBc'03)1>Bj:S<=7.#![:F>)1%dTRQ`s9nOQO(3L)XaMSCq&4,cRlRg_?1Zs6-n3,=/Lj[ltZuVd$AhbqZ'?;\,_RmbG?/B>!ejMdC&Gksj',h5lL.]h\%0.^jen=&H>+VbJg=&2(.Nn\c*k^HJ^r1Q#42T$3(m=^S$8RDia=9Kp_)172[A1/#a%,(!:,e*=>&rM+$Q&ui,L:,jE7GD>H>YF`&^]$),"I-NV`46;klGOC\DR^XY'AQ>Y!G$=^&/Y.)#[VA[HeXfWK>8c5&O/JV!H:\RZ>&B@,Y5@igFHA(LR2.-XA4P&S;bNO6U`RYfYu;F]PUr$9e7U,naU"rc-8b&=udep8;qZ`Us2R0Y)D,o1pZA)8tJ+4@mqc_USU>;t]#D6'q8?ri>qa;TS4e%t=##oTQ@+D3WqD$rnrG-JRc4WT4pQB&m>Q'?end]Qs+s9PKNOjSJ2G07ba>hR%<(RhDTgC$"VY\m5ht?H6Y`Y:e>*1\^?)PnZ3aqCIq1Q#DIQhoP@K^Qf[cf72qG6abMtUZk**S5[b5X40]foC\;FNlPrd4.b'1U$BMM6Ou>E!i,pb01sJj'eT-G07eRNb+BMUD7-r4TcCrqgE81gK^g08n+V)p0d/b9:\AgU:tPUU4+&[*2s)II0^/P+"W!5JaFscI;VmF6C;dlmdpiZ-pAJHGi*NhR/jGfq$HlrWcTtJ5*@rp$1gce%qmTAl[q'+B`,^B%IO-GOOCi]^pf?]#rbh>;i[\_"H$u'jV?$Y/fZ=T3W8UY,-HNnrd/(%2-:aIV[2Yb%W"2VXqEk16#);PV3HK^Rf2^l^bZFlTCec8:b,qn\mdTHrn#44N2CMG#6;S$"[h81el8B;sIf&B@K,amWtb4oK'\[YLr\a7=012X>'O:8h8LP#FC&h`@eV.AL31Rol%\3=u4i"Fu.mQs)[7Ch,:^^3=i6g&k0-uX?#HsEjJ0qTP(BC.lHoYT5O]0LUHT#s8*0>/1>SM`JYQ,qP)0N`F6GAac^`.cL(OM+o#:k;7,Rc*2<9#kBFVP4qtK_H>C&=U"0,Jr%Z531Yj`H>U>7c=9&>O5$iU'[F7o9rV5E65OlZ*1PtC>KD4?aYhkqaD,$>u%cZu;U9eLY54Zc>qu"4#:MJF`>o-jqnPMdsFn3X%T6/LQork92KI@0-I*N`lE+&S:mIgKoG?>fjh1endstream +endobj +19 0 obj +<< +/Contents 56 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.8190f3850a7f4637acd3a79e81462df9 18 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +20 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1754 /Length 67350 /Subtype /Image + /Type /XObject /Width 1241 +>> +stream +Gb"-VH+ZlErl=P]1anem)K$_i9ZX;'18JS='IarVX-0HSUdAZ#):L%TO=@=@.AC$W8k;D5Goed1htsZCO0]nN>'o_ES[0?l?I(j]A+/m_mdD(f3bs0$HVK%kzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!"MT76WNr7RAg?(-^qp?gVtBkPhf75:E<^E#CZr;?04P:'0*lDq+#c'l%Vfs4Qol)!B+I4:N*oDem:eWD(H"q2?qUe-cmPq,q>?N&DU?_'/rii,kS0(a72WE8TCCTj9kH1F9tLtC.U;dVUjLCP>Z%3'KK^k(\gl-lP+[r1#"3$kIuT@VXB9UHAcjn7rkX0R%V+c"e"G&-!LrQq6*GO=,Ge2_pOYc#e$DneGIba]ADRA3HEa_rp=:?[qaUoB)N\`dDOWiVN65f<&8d8ril0H4t4mjGHpKG&?QhfM=6%UXse_k&oCgs8Mo%A]psfkF[7\ii6Ynm_/AO,j41*M%f_=dq@4Jeu`0&dgQ9oga*k-f<&8D.p&mT5"&8WM_4d2CsrIdLu.^abOaf:UX#u'NuU6)m%]V*deJV7a]goHVM=+[Zb5QMRq,!4*0Q.\8gPn3$*SInL,>Z]Qit`KaUg=,oZ6]hgYIcT79=/3LV@r]tCss,eN%X/>G",=XZS(.D<,>*ZbrEmlkDWU]#hHcdq>2/V&(o#DJ6/MGG=29RdHnPES\%"#T5[M%e:D'65/?22[jbc'tchNqW=EW6m@R;l7cepYG"koV.5;2/Cbo>IJ@+(+hY$L(55m1M>"QN>kBJU9\CU)O7A_LIL"4_L:rKo;Zt-m_NPFI0qda&fEK=a;8_NZ8KI2Z2sOhjcu9%Z2b0>+n**PP-o'.&tD<=8D3hcg#YZB$KuGd7\;PhN+++9s2C+^\]X,p2#cC?n06&Wo8YrMIJb:eno1T"NoIN!Qa!X5)VU,_0Q.=:U((\Lquh_ehGe64Dl&f[Y2;5-q4`u]S$$at9JhF3><<<_QWJQZ:1MFO2XA44fY-Vc'^X*i[1D1RL?FS4qL)WY-.HEfn9>=71QW%tueT@$&(Rg*Ls7MA5`V<]A7rbK/mh5aV\o.bm5"W+3fR[P!C=Q#V0E50m$_d.(U'EE*/Z;Y_u#NfR9MA8ciIfK@j.p%g0AS"?/VNog,J@9C=QS77mp$6In1/#/ujcn\n)rCSmpYQ]9<`EtB:;0.oAM0msWDf^p7"=lUac[rrh6LV81M>"cd!>6Ffj<"!BT!WX1cd"nb.muTD[g!_Eb3>V$2@9BNSK-&Y?j?rU.:4`adtZm>Aq4:e5R><;5/_/(.FJhT/g+4pFPlkSCFot4VN]oj'R_=H;UA&"m6:u))>`Y'"oXH+%^rkg?1%?8M]G@g7JlmS]"<5Q16',ra'b"Aoj5&/27^rjm7sRl5,((Fo!cG;7Z_%g4uK$BjhGVb`pcf=FhS7Y/L+PC(>e]6-on))uT.$LJ^J(.I$i`N\B9ecWC&ESWoYPR>g-n/AgU;58[IgK_'QSL$B1L>p>Hf74SB;e=78`/a-Pt:3;l=Tn_Kk_5)*2l8b(L(,(OP1UYY:)$]?ak0BO`RHA\[g)Wa!X3ir"o$!GA>)T7jba:+gJ5rUKnSIBJ>1P%[mC1u%qWXoYrBSpID2Rl1p,9Se'XL^6jW]*?N,e##jIZ[Utt8$nQ1XEjO"OV^YG(1oBR8V@8M/a'?H__b9Y_&n'o61)9GFQhZ<,p!&*r`H,hCiX17T'[KtE]WT.s8D\Y/6UEm-pts%m;;u^q^-N+ZX]lY55VFn^>1m#/dSj5lFpNkO$EV_HJmKhkKfdX1Vp1t\$d]rDV[@eW)g$h]C@4BR]+RC>l(?GE-;piZ@sl7[V2!"[VXX&8omq.9Sout%XEZ/''1XI]V9F.?!/mMBuRCYmGOtT"G*mTd-]AaQcaC3bZV,U4ag&m,M2XkH(GW>fk6qVn<[L2$+Q^CP4KMb'NMX'f0l&9:R<1j']$!%K*F@!-XU[;kj!k68+l6e.%k[j0";:0gS0dj"EbD-;FK8>kPb[G;56U7qhUaAcL&^mS^DqrVnQHpYDotr!F`?DGCN66TJj2jN%ggVa!o,V2GbIKN;)brgE+WT;Sdqg("U7X>;+cuU-5&1$-jbcNZ@oh__$b10?e*1P&Lg,M_DfK>Gh:3pT9Mr@@@2s.AX292=UZL80plmE2';%:Y=7=:9_*RJ\1MiIICdmRe]1RABC!"@MEtQ`Y1WFf?HOm5\,(ZAbPf`JX'k(';U;U<+II$(6`1D;&O0l#XA0W-/ht?;NJc=UXuRZgHMV5Q(#gd54b5G3oA:%Rg,h9UINM*k31bN>a[krLB@oKph9Ug7q0!aC?c%XB=Nd%0/qU4aZn`c_%s_ac[gnISjk$l8h5?C=TE&d*C6K"?+\\`Cbh_u8k*Ika_9VJJbA?\pCt36W./Jks8Mc-rg2hs0[cl;=9:+:[GLrWR3&BI0W`]6=0f"ouT!?+ek!D-Q2c6:RMem9Hs.U8[XI3pk40Hih.]%Hbcr7kFj17DDQd2Q:csJ,f7mmUdCrCfn&X;7k^\j=!'#b*8uaiQH&p^--,SS66N;";NCcW)g$hHa8pIZo>@)Ua?sJPAK3gkFT#$Nu_C*g1,m8>rQ"&[IV_?7gFVVYL2\9r9$;i:usZ2O'QQ@E(/.rIeZ3%adj!PD;1r6Idk/YJ]&t:\E"(K/Rl3FgCj';:N#h*X)lb:nF[gYF`1:+ce,L*t,5g[D//DN_5Tg)01i=L'di4,tdGV3)9jAiPJ8p'TJ8&+P]o)!!"IGT!hptTl'e]Z"$k:=L!8Lo$9Q#r;QT^Y?8'(G&pEVIH/>,8qMpYoB4HWZY.UC))JY[cC[>9SM1^4qUlm8]63G:cY?tHWDf^rM,u,1P)>t@!Y7E_JASK:B#foP99q,+0[u+6CLS!K4F+5=5QCZQRV&Bq%+seoB+W!e*ORd`g:F;<9nCf:_FBRXI;5.#(hX-F6(E929jFl%4!lil5L$i;D%/hA]grIlZ?\Ya,V0=Bkk`SV/g/Vikm6o@!9q-GYFR@f4*UC'cn1SkW0:%1-%DIU07sen',A>-Yc`4sA(%WC^%2VI@U!m%5];.<"enC-/?O0e_-\93H@AY<-<\,/*aFfH0)'SqJP)<1(kJ,fKApYC%c;lsTPP4Rh\ZU#b0T0f/53lI`JSC8XB*(9tGB9]oEi1MKul,fA27CDG$4F"(sKN"R6N>g)r,U')+m\HX=[HBP>DW/s96_4s9W`5t'DV_mcbKuu^>P@F:(#(flkhlT65k%N4mYcLX2`1W];"k:-?[hgI6E=$`I1gru2TVVk6DaRV'1sHDD]u/3MFO2X=@H)r6A5csY?ue+TL#1+9<(G.E1GD#4]0^pVu*/SabunP7VWGaCu;sTa:H#T`Z&(,IR[5XB+VT2;D!dofs<&-Y$CB%g/.[m.J5n]<4U+L/Xe(+X3lVo7bX#=1@4j*D7uLHJj"*I4(A5LM#7L&A43fG*L-kg,F<&ZjCC4g9k:9op'jTaZ.I446"5;(QTRuG5:^j+n+R&A&jUJ^A2BbQn^i*r,^qG"pT[+)7?>uGMdj-EXPO+/C?(dgph@OZl]b%L#tgFUno+-mX2Wjn")O\jqhBPTtg"c^fY^4[;2*YbaLD)o&Rpb])BU'iWF/N!p1r0VOf.?!'eA&SU5>VL)I:Epo_.$XLKb7[aHeJd50n;d9YZ&Tgs6nA?ba=]_:Pj1rUXXPi,?mamfMR"W/^!)ci,RD7ueQ4T@hT(GAg:%^4#muHsn?TMCRG;]M!uBhqX3,+ohU^3)T<7:C$rRQ>0:(A]pC2$G1NN%b[*&eD8B[^UK%HMT0CQra]!0=>A,4^MXc9<:JBj=Kl31p?h%eR:CGA:Qi#QVhNj4CPT!:o&NB%c@)nb\))GS>p89GMaB=5-[<.Lpu."Rcr_mDj@)r?;kDh3q;uQ%oc\)P!:UNk^DB>JD;3Vk.1nUT!%p1/(.B`SXQU^/\8^E;@G$mpc#Y=F1f6)1U[ok.QX4te_K+#MXC:23PNVc)TE"8acQ\u&A(RWgp$C?fg99IOr\#R&XIDA"[\ouaMT0C>-818Mn)$@j2"051do2GY$35V:IkQ[#5(*.[UkF(a*e9/FW^Te28Z1aI@DdifVP8pAYo9/t)23IbM.>5EA^NX1Uf+$]n%JIeh&tOkTB>.nj3RPu#`AUiYM+)FC:^0RX;5ERT.:h#R^I),e0KnQ!8ohWjG)lkX2/OC/2iPHjt!WW3#0W>^Sc^["Z4aVAHck7WsFGQAKe]X(c'TM)8Or$QH6JSA.PE\Z1kKb4oUq%0i.-`d@r:ldBF5"*Ams42s>=(Z.O\7\XJqt;9aneQj>!;)D;]P:-bA%)BU'Y`MHeJDW,J;2f.,#:UA>6:C\I1lo?4iD`;OejDST.r:upRHM?jpXq7W^)QSQ`'EnI:!+>_%[!D9*^IIV/M%eH8OssngU.(X\YJ:'_a@Xeb4Z/QY?0\R(9b`T;kftW72J^mf;gH32"X.Z1pYC%bRdL9HMH$1@/R#ONUftJ)=4<=Pf83KANRblkM?3bX!&4C#H;6A:hJDRIP;6n&W8Xq$lI78\_QdUk\od2rWRIM+"&D#+7+#+rm[U$8-_GeGWEd/bH2kcLJ,AWBb*=K(C+>`7'kY[WOk$@ToB&,Xm'$g%%j#Q9VN%K?\T6fWS2oUN;66L*X;3-['EA+5J4\!63d:!sIg`)GQYtQdXb'?LpF6E6-RQPl$B6n#(7:WVWM4stM!!#]-7aXK"LLs#K=Qb`HJZ,>W9La6/[k6muZY/o?FL[qnC,Tn\OQ7Wogg5n@O\8gOQ4CM/Sk)D=V=M&`n\;s-%78lC]j?:^U6*,J0njtII$5G&7R563W4'T.0C"]e'[VXX6[8O"Br?-3+#Gzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!3%1n!!!"LJ#!IC7IZ@]TiZ^D!!!!8`eD\^zzzzzzzzzzzzzzzzzzzzzzzz!!!!RZ[)0)A]pD,h7GVfRR`D[?*I_Q(LMPEGjsW?;l2tS&W]kg:7XCd-?>Z@-Vl)BcA<2^P,sc+M#:#?4roj/Ml+f!rVNuZU7F%>\6-^bbF+<$PHh+%aEKuO!;rTKCXt$h0(/>W5EB&d^jlHphKit-bN5'thRIRc6\c-t3=>F-3d'^eW`5suJdN;HSrqq4qsClk8T"+`d8d2G\adZYoZ9VG*D\^%PXC#l1Ipq"XaT^L)&1`uT@\B[C/]mbOHA4*U+o?bcU-\)4>L,tjOD2/6+#d4J_>>RU&!T72Z0g&U'jPiS-Oe##i85Q.stMV;`ZbM97+]4b)K1`PLsh:,g0]-..Srdgf#U*"m_Z0L+bb:R#2FI>:=p>!3"#7hk\Y[Ba3.(@k%o/[u?+[-+lDq+;jH2qN2Jf."44,&nU)`[RdrPcMj!e=7VJ,fL*614-0A&jTM)ROYQegObW[r:1#p$7Y[4W;d`N'sGi'Pb;DqS@dh&*ed_f<.j)GW0HkTT=$EZGg+ZGOJjBR)s+WJLI8VM%_8d1!#_:ULuT&k?GB2=ag"%0><7hI_U@1<2Xj&dYA>T[M""R\)2YHqBlXe0!l7L\s4dI[N2s!=KYmhQ&HP7_CF2H6tP?-X&iNIOX!Ar<2lV/mbPKZaY1F,U:5F>k2!@VO-PYA1I`\U1IRTmF]$YZ\EpNE^AI=[/"&;4RQ:sORSN>2f3a#-M5GRqp?bo/[V]6Vr7lA>3UNb`UQYB.HdCPdgpf([k0.T6O$EV_lKE_1o&RnnP:-d.5MCmqEH/DnLm96pSGHHc8.f_%-Vg1F'i`VgBiAmFL(>Atlt-@Ag=0Kj]-./F9cnfUO`a(j-hp9NL(-#=HM-RN1tA6b")I2N:Hsj3A;57$h03Xn4aQ`[f+2U?otbFH\L)U^c(7)15+Wob#'KL-6M:7n$#nR'Z6^AWQRl8PDGR8rL'BMMe0mZ\gA@q2ZgTdS"q5GU\"Zg;l>ZICJn\)G3kS\J,TsCr,BBJo?robQ?2TU`HqLHUQ;u:*'JW?k*p9A>e"aYRggWY;h'quL&`>R7?4+rNa6kbF\b0n<0HY$##H@ekTS8qn%;89'HK&GP\*YGp#M+aU8YR<%T,(EP)Q.#O/YHs!X8MBnIH['3.:YqA]pB.BOBZ,s7_:e^A168^@8uIH@=_e!BV[O;s00&mRWZsSXmo'Y?jBB;;]B!iT/+EC!rf^%r*bi.9!**n%A6sD\LNu<@e+9%iI,jL$Ep8gEK(Dkj>6AS(r.&P%Mt-V:T(&op%eB;]#f>$S5Sp<$fri5[e/*^3mK'cmG_eSN?I&6\Z".gi.o/KAF+];]Yfu40SPSlfY6geQ#],FONt`OfJ"?'Euc(b<%"CQF+-T*=NiC."1sa.X^Qa\(ihU+#[uijLOkU8tr9XM=)tG^4#mQh\BHaP2((mTAoi9cV^rV7?r5&rJ\JDjDF08o%aiWUo&2o6!*s(k09B&GMRBke8DX"]mBB$FaEMek8nCd=0>dqLCOarT?o[m]gV1#7_`@,tf"h6lkDbSN8e(%idRUW)9=K))K89Dj:+:'2LS(Bj)5$2Z/tUT$\[o/mc3c?[r%9bei;SKC)ik.9j6^F72*7$+dNZe^@[H;25W%Cda[IB-'9dI(89M;=s.SYL_StKaQM/HD5)ofgKAugpUnU`/.Zh[]",VmC!3.)N5XrdW=5^oY1>$l`5Y]mbAZchPHTdGG"nkk9#3O&Jr));]pFIDnc%E?H:+,Hg9hp.nuHhrniEcU;2'9M5&#hmkSFp@/C?!+;Bb++)78QD$oW:;S1Q8DnfR()O)m^^)qk&n^t*VhJaKmFnuFo?TYo2GK:mao>Hc9leEkB=AX*;T-6Lgph@!QG:S[mH]sP2VFRGO,Ia3"9>FcS>)tD[9IOZV0;7[p*^BHY`gG1NYjLfY%rh$?HA4iOJ(F"m61('c)XWGEQ&Z=Xd!8]=@TVYJ(d\GG*S[7W[U#ZaZ5^Mrql09>GVkt7kVF?195"O#$M_k#$ecAV%RQ3&_K;"Vb\DJe^u_gRM+?bgT??"7T#)02rB"h[A0G-G3oXIgan=4]%UHbCtg!dMRmFV7UOmLZ7$gWU:rqVcCNLn9:%8:>b^fNb<+>E7-"(4j4["1(,TUF'It.^DOd/ArUnc*Q0k:bVsie,C!n:*;eTj62JoN`*LjRsj^=Oi-;Bp;)`CAgRlPQP\>2kH\$a`W8/cVG<*65(Ys@gR^0^,T`:LgMA&kVINAo_@lW7GAj[.XJ$-KYg:6(eTsf^n#=:jXiP$:\\>e./s^A-]GgUD+QJm,BdJ_bNUr!u\^ZIrc,l5^]"D?p5?;tNpd4k7(#5tO/C7!h`,rRRQAka\;]mFXSA[2HHh3.1Mj\DWW-G*=#kB_nbl\7j9a,=ddHLn"k+hL5-(7GW_?H:Y4e:S)BLU,DSIG1M9I,$F;BbC!JLYHfBnFk@jf1BJ$Vlc@*/SlUZhQ\&L]&(O3'#l>#&QLaKo#H$849qpi[W"3?3+)r_K[KNGq-rj+_N2fe!#\AY/:G!fP0K;Xb+\lq;sCM\j%^j-YMMCr,AbdJ/5VbbpZ^G9;R$lSDu;EN-$F9dJt.UT!4kM%a&-j+=2qg<-1N?_!$q<;Ph+UPc3X+nZ$3m+Kj/,=1W;H>],f86eN2s8@/>AAE]rg7^%P^&7HESt'So=8?dYfXPq]\A[8`g9bSSSijX/e&LC]CSEUVcTLfX^"$Y+acaWlZCM!baX<]?YMH\?FZuaXj'Qmr;;f(o)+EqaXtk@tCb*n&9UU"dd%Q=W2TU=c9jSOAXat/PVmkARfj"?'GAa__^EK$tB-=^;[4i?cRP\`QjfEkrSN:mm-f!O7PAE.G9moPKa_h@a0"C,?W#]jLZ]!g+;:J>ho$\pEi4=`m):>m0gWGj9n#i'?GOFq7s'C>b_2iZnZc0h'#@7'FfhP]BbEt"o+A(Z5n9l'Qr+deminod5>^j>]I^tg(umEe5Pf7J:BJ>Ua2`!9/!uC.p&lrldgb0C'VJj%1NH4-"fF_kSrEa@u%h9p?gVpJd2uPjVDYC*^"+S5Q("<^!2lshi]9Yr/K?O8P_J=KW"bHpYV%E8ndYP>W9MTe#,uC@B3G2m&al,l^R&i=;G_fqW]TEek-nE3rr,?Tn4(E*e6WU(\kIYl08]MPu#,4+%n^4>k_sUa1h44((E-ME9p;r_H#2BXXESg!ubSDKqOZZcUtO?f\gB!(]i38'qee3lD1T;O`0E?[r#3i/==@b*7_j?8(cHlom_emV_*_9W(]i\o_XJKR1fn\"#X1\p2[ebu'uDk:Ss!p:1bQS2_FL5Xm\h&SodM2,shmO7@m9gk(R'XaQ$`f(cKEi@QEFQq4B\0FMI?G6"$VG3P7];r9\eVJO"b&0u5JHH.a530qUe(u]`]ND553d=Dd^uOmus1\3\C].=V2JLSb0)SEk!f+$P>ViP_Ma6:Do?M&aB%jV+2WOe!&k.BC.V'7$j)I$7Gb_]-p?sG9]6;^Wk4db_O!]b<:JZP[?_@>>;)HBHkE-uZqXj%4>eXXr+jm18TD5.!2L1egMgRGd!3+(sU>#A/G-N+qh,.,jhRMLsO3X.=$@pjB9qOU4i/=>``l>Q,7D<]t5(tjo[M)sE)=?OP?e2`WP@SK7Z=V4FJHH.s"`H2159?iCDM%NRf3\b,7T%^C8F,&fIJim1RYChF"pE3tMM>ARSg^UDm+hS!653_6Cg!AQSh;$YP#6>pm+HBp#Hml@L-KD#,Rl5#U-s\.ZXq=G0k3]IrnXbfa,XnIjN*HYaX<^.&smj4rBT?K:A1/H33U$h>+Fn5k^h[:0!n5am/-PG&,.NT869/HFme%qmE'@!?k5lYI)?CP3$mI1pRPK*e>SN$WE$!"V+mH1DW#HUQS4spIJPg:ei4t!G(Eq]l9Q*fc7=gI$3dkb?*Rjmh<*GEH.b*r3Ifo2Z1gX`rC>Vhe#-!rm`E$9_[bQ%PG;eJ>L'kK\k=%MpK=T+]5d<$[4TqJe9dXtaEKuOOID[fl>c-l[g(-^>Frg;X>E;:N.e:u/^*]6M3!]n15\+cS%V'Hei1q_;r't"/ZWA/6>+H*WI=[;#mgoApVr13VkI95YIa!KkBT4>G1MlB'FL[j1pAXsXDqqj"fj+Ok>$]sF`g])9ZGL=,!X6=qSN:o!Z[(rhY6q1-X&cXQd6BaN#,9ajgANY21hP"$2/h>642Ie9l-f!,L2F-]c?Di<)pP8:h;oWn+H+[lRm&&D3--&#(h1tkJ$J+_/kh,eCHm`N2@Z(o/IS.cTV$T/TV$1a$!W62X5NK=%5TGn(tL$Hh5K@"2XJ9GCp^d`9FK&_GWII(AH.8U.K5_Xb-0*#!r"QZTrV#!!KS5H=eGC][:7O<6M_Df32fG9N"id6A[Z+@@cLpPT7MS3fWY"=g(%3.?(s&n;58cirdcn97fXB?2`9Mk6N&)Fd;kEmu6o^D/EN2^RGWm$hbj1p3JWB6pm[3W5ObEjk(11Z3Lal2ZVS%N?s]r@(Z_X<-Yzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#7V^=N^U@pYSW1/fclgglN[HB$['^A]pC,1je6##q_-r)`L6hVE.nh+U9#KF@\dNX]lU*klCba!.[_fFk9n8(DiDm@n$X2O;43CD]T_eq<+BJo!B^tn`.[ep$6hnbr<\RUeR?PWMc=k]m=f.)dg@/]iodAKbkr_3HaVOlJ-L19d,:@o?B34>,P,d'M\r7!!!"(U+D2Eq!mDC6Vj==A@G>K"TSN&;F-'J*Rnr?m'=g)''7JL`JReoqmYI3Mtn4WOB/]"c!oNbr"MTg\DrSf2/6[CO?qd*B;hAlqpJ+j,qk/DhnT2X?[g\6AW%r47>R\YNuq`6@`A'.gESPeCY,`NbEmu(ZtRj]1hkAd>_i2*UI9qO)RUctJ'dH/VcU'.m9'_\eu`/gG-.L8;rWY.RtHhOs"2f.,CKh%.CZ+#UDA]g6WY1(&LY.M]6*G^;mf<9\A%6(6TRVT(R8&"rq>:WdJX&>e:jd0=l+":0fd*.n6SbBhtqJ3.eX>)d:A$&*N_6rCmQb[_Tf82Cs\h@M\e%T\$K\k;R9)!!%N`njLmgT7:0cYINSLfs><=YJD5@G,V&%0Aj6WT9Y1jU)LCUgUX^kQ'RfiBVtG6-mbR0$7I`BA!dd\KJ2aGV^cW4rKC'N"?03BPp#B30cm2[&iA3d%IfkK]XqhL"]kp)Gu,=KYo>C_W=gG4"!tC7fnE8X8AXOi'@l;,m5;Vbd?^_[gt[hYj:;?HS?QK*lu!ltLTuU&Y/n5RP&skhC$jD24)t9UOb@;mKq*Q+uk/)tm;U`=Aq4*P,t*p55r_Y^D&;*3),hu=']t!>Aq2T^3k3M']$EIF4I9jQ"s?tgsiT=a4$q^Vp`fh"'?8f$ft2:A7\YO;"NhooqcK[\FEh!kU3!MU=VPSoPfNp*BM\u7]uaoh.N=)7O;Diop&JHdn`2B9tT_o]BnT\MkZrC_Tg8l1M7C4[B=h)ld,u[b/X]h'[<..ZZD4PjiWiHU+a:ZdV1U8SieL-3Yk/\#UFLE:c_1MooMnV!no>-o]>(e)W5.i2W#%NII$3gsk\H-;L*j3C]&9Gnd[;=q9J??=`MWi0n%/u_pUSuQK?!f9c2;l35,S\%X\-;@J=fk6o\&u0,N6r2jHtjPq?oX#Z;/?j'53m2C0;$DG8-RU.UOc11[=i]t0KTRl=-$>$jeXgnX*(jic,N:S0O^g;b:bI)LgQCY,`^N78M0D-Tk"p!hKteZE'-)6ZKV2rB!=_RsRL;P_if4jQY>2JcJI(JUAHMK\IFh-L&LCT]*i[&CU4@Ddhk-sElb7F0W$r:3LGGO3s:O;LE)\D`20To:!RQ7*(?!!#FL6rA*tZXh/j(VGIFhS"9lFeX_e2r8eS;nmG=dW*,#ZKcSXS2p8RF6Ch,8:C9&Dnan]U=H8De*EG[CJG4oO,qn'W'gq9F_:Z'SeFQSaX<^nr:8%u'N7(Tf7"f$f-i+ik0,8\]XW"c0NYD^4aZmE:5ed5dEb#R/AffP6%]@F&u0-D?G.Q/ct/*8JS8(%2+l[)fA\8Yk]n7pMSf89V0!!"J17+$Pf#Hh=BdVdD%a+[A$Fp8sLkd;:LVf-6sir6S6/W'X_`Kr1*Z%+GJTJe;ii(+$SK*c7N8/XHc9h7IBqAc]_0`DVR3ffWYPh)I.XV[2Rbp8J1M*mf3a$p3@[W8"TSN&P0J%Q>pTjdKC7U178`5#0&*jRO$8HTV4de`olGlEF3d!E'X\0t]^WcGo?YD_]!:7TU.:7c<=5d)V2CfugV85f.h$?d\TV"baIM*GE>j^$lLg*H0(<7b:-4$?+kQlhS/pYbFWEH4%c0$%NPmE*CX&2=HP4A\uW$KHHVU++Y22:^F>5<>%m>ZNCrBZS`A#0!!!!ERjX'tK$T-M8_UOcB?Z`O,o%q2FEd0e&e^q"U,?`;e8+aT:RjD<\$K_n[a/+kD;)@r?9eGaj7^<;qt@F7gU9hG2UOak"-L-hBHW\loNa]QbVT*E[r1#:Kq9^hm'G%'m>jL2k^7-rXBG8!=VS95r$ZKp7s+45pL_X:0k:tuE6FY*kI&oJqraT$3qX"'305FZQHYaQ>GR66MTRHQ]V:jk8sQ^CkW!YGN,p:cb+kno*')HHY\29'9r^Bj$(WIO!!!"pO?\UD3clc?NZ<&Tb]Qiu+jiWj0mZAG_'`II3n#UQGJcum0eX:VOdFG:!CXd[2Lnm:8W)+YNcCR22j]81I-]1Zj4P?$Mq=Q4p=0DJiJ,e8r5m-usXb@jGpq_DffY)Y+Z"(gR14K.GQ/$]OX[@gOq;mrM^AdtEKgGI$f[34:]mKK;nA#-G_405gCt\BccT[gYF/D-'[VT(].]DLTSNGq1<3puJjd12Wf'VXmIi^b![/EKSO!l30!WW3#.HHPaZ>A2LHdJ[rkOITQ[r1$%ggLdA?+P.VqXob1MTUGM"75`oU:d.X'Ba[NbLj(0m7K`EZ=HPM^PE1l'NHioV>]r)+$51J.&ogUD)CkIO^djd0=tIZZ>7W`=*]>,h^?:[j36I&;sPqWXnZ?[]=\?U7J)3n"Xg'Fb0e,l6r@n"rmQhE:luhgG%"@Dap$.pgAnW'4\BV)mIZlRh:V[mX'n!!"-a*'JUi`f(eqa,^aTNF$-WGOAG]Qp6)7JusOdrr)`/rV#!!KS1XEQDAat&KCR9qY';CbHBak^]1J/g:_k-cT_6mf3a%#%,J@/gP?FdqY0IIS-COVG3t_VD-F,L]ge&(]kPrm'MdWD]mIeZ)qVE/:Q7dnVfO+hl`/O7'K0i0X]dSmaH/'hpu8Klrea:"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz/h6bmmsdB3g9bQ;.s1(+8OGR_m$PB5FhqnJ[&I]aSkY\4D:,)snDV9G*BP%#B#"BFqgehS-MugJ7Z<]pF/H]W?f1M?e),ZTrSG57CD<4L4*9\jB@!062s%Maf.Jp%/h9AiDr89th^bnC11.bC=gDScN8K'Xh9i=k8^cV#:n^5H5'uA3OmB3crge8inW^4ZZ/X%jn'ja;ba@q+b:_8%RPek%5CVCBmbPLa<2ibF]_q?DI.p9b+%s+]m@()+$+LWZ9j9BIka=5>If8rkC=T?Kj.7[!I!YD/2_/Af5FsoY9)jr(>-q,6eu`.\Ki_W0JT0@[&U9AC?bP_2-6V]"EOi&2.;r/Dm!!(6d0>Hin*uR"T>ia$qd7](F#WjI.aX<^*L=W;#UNl=gGMI2Y\V:B$Vum87GR>[KLk>pC7VGLnbL;p:Sj%SV>nWjcY:TDAhg\-KOc^kYWeI'oqT3#F[;+7XYJ8rOk(sa!r%7\XkrJc!k8HdSLp+PhC?OWK-ou+m-l!454P2+11=)FKn*RUADJsI)kpF_2b(h$akc1\dngq77s8;JWCT]*aUkgCU2J^n1MCYk!<"A(RX[OU5T(JXU&T02KllS91-ph^@00SAG)IY5O^OL`d`fD*"@P&Hce(:CK/'s@H-m;(f,f:i]n2Ung2;_*])rnrD>S-0jQ2$g[KqUZo+/m5JJ?_#QUX`F92_Rk-q.XPp]1c/FFD#1$q#e1XjaOU=k!0@V4m?kJ+l4Vk9G+N1Nl8)Y2m)Bu_'Er1NYO1:%n:4G+ZU^?7un_fEqS!$o\!lLC!aG6leEZ#IF-#^o?B3hMU.\rp]i>FH#ml1@Z-HgtMPX+@hJNn#7%ai_Vqj@TV>btPC=Q:W;Pd!OWbU%^TfNW%2H2nJop'Ofk04hN`aNEf26O<_)*)d#N7Ki!X];Ef&r4K-[9(ls2/8r(HM-QOqWXnmiVr`Cf39Uq\teK'IJ\KgiVHEDZ%jnb'ur:SZKqHgNSh1^_uR5/@%=8_mWT6m<2@T8UB5-fHF7.s!ejI!Z^j1%mb+qE*O3"(J:B0!Hn"2jcCF_/pYR&TGd*a_gph?6CY$6=6s)nVCQVMmehP_,>:lSXD;/g[;P68UB#?giA=tLqg?:9+M"&!0KGCo[E)+W@P#uB%jV+om5]?Oj;M')Pc+2FQ15qeoL3iQc.0;*lR4>O8I4MAeX([(SVEk`EOHkF[7\WNS.)l`IYMX`urU6Ws[k$gqM,MHpRM:+/)Hn=Xf#bEaaIXZMEog9-LKF6N/Sa7$b>DC$Ojrhr>J*mL9>])lAnS(!gn7o9eF,>UN!UoLtdo9t1/qqoOg))GmSQah2(c'KM%SJog@a[!(ijgMXVtgB;lh=c8ksjr&SAmUOrClIAgeV+[-Z6ELHS=&I:Ie>lY(c`%pCD0E5QJ,fCQ]rkSKY-UUBS2o',:7Rsb!!!Q\8ca*!Rp?;s::4Cmr:%U!L"s4[X/'dtb3H.1+)=A!4Af'W5&]:?FX+MAm:r':qXDCX&%=p/f)J^)?Z4].Df:VN6qSHm,`%0a)er46d\Ug-]C3J75n?-NOBtFp'-T@Z6Ea%I.TNon=Y$uQ.XUgO&NH+*WkWk^*9TM.(BD.>m93R<.Q:Sc6Vr7T%JB&\E8UG+\6*'go%B9/!thDr"94d\KHQ^]!kY%mHp)76.F^R]701Gep^C<2!O*DLkWb60)%qZPFQAE^]5PH]c&;iesgELOJPp>k`.WU0pV."TSOY+hNt4rH@LqIf/`VHE0f6>oC4jgGV]nMO@Lpq=JHKW#SFrjr6RPcGr`Q-$Rja0q(:=[]`Pq#r68gPCBqiJjFn%E?c(FrN[3HXfN`D/oXEgm?V*?t@RmAhPAH1U/`i\taJ55H\-BMbsC`OOjZdC!cAeotc/),CskOsS:g\)$cMfb?ZA'-QsONOYlenLuS?[IOD14OCW[k?i]6`>K@FMY?Mrh_W$J)W4li2B7B/?!=h`jbV^Ql\i5$a7Rcmtfo?KGRa-Zb5DV\L#?pQBU%3%4hD>j>([IB`.DZ(sHqC1s6cH;D&rI`C`uffp[H>[2NG&]m69C(i?O\3_UAjY\1ocO,a,V2+eubE+It$/I=;7l9VbY6j)*Nnp:')f#!WW5=9'+3\j+8(Z[L$^(\?U1u"qDUi83BaDPY&!k,,[Y_3qr=^46=elB@!.fW^ppgjZ4H.j:U_)C)#dQQZit_SNF[i/=?0cea)*=]+&S"("4q6u3\S6k]t%(,a[A0sO-+)LXImQ<9:e9oQeq/?pSr&ngNC6b4fFY+i8D2np\'N#ua4&B&ZA3JXJ*]%*k*]kRR56o\T/3Tbf<4Wqs/Nm)`ugo\6khfBJ-5?\r7"Y@7?C1RKP>*\24o?T-lPP'eYef@'TnPf23,65f<8PgF.n:'.N_)(V_lW/QghZZc>.+)orkUEdAlc\H$2U'2rB#SHf+^,Us%4^40@McPo?-0ZtsE%5>-*BmbBi%++H8nat'[Ncu_]BFJhc9$h`uG^S/SuaD,"=$DZgWrq*,Dod[7[KZ)O0U`7;i?$+KdCI$phf:nBP7lE3;Y-d[;8RHnneY(,9R^X'Oa&Q2H2%"a2qqmH7n_A339s;W0;)C&s;G/U,[jY_I'L`$&>"b[+%NRSE9mKrZYsi0Oq]O>-(LMPENUletD\kmj3#9d(N2+GW'1\#!^Fd'bG37#::I"f""J8[p=X@&_&Ki#U%ReW-s8:,"gFSoiN!$pV]W>3_KlTOKA(*lQOV'eUo[=(*=bJFM7113ORYbr:^!5WKkFQH?Ln\[e[8u-_FRg-*U7')]qsCk"p/=>t-lNCBqAahFU"Q!.ND4E&Hk`,*@7'UFgtLEQbbF;Rokr%F>!7a4p5JndCOX[lGl-m;0=KMBK*Mq4mJ4gJO#5'A7C^fA48h"Vg2!l4K@XCZrTK:Ai\=r_4S6uf\_hG;o[6C-bS*c7;)l*if:p,1RX6eEf>jk;#l-tEoD]g2De\l)[GFocOu#=d5,'b(PdoA/?qU\XGc'VB3fCV-Aijba<;!QDhNtBf&MfU5%;gG1r*P0)=Y!De;?A$lBOCdfXFXU?KDu+5EhoVq`@$*dd7Y/mZ&YFk0^[@pTk/E"nT#hQ$D>]C0>lZ!nDAZ^,t7nr5TbBW-$(m^_MP)a.[`)Oo#=G3I<3Yepso/J-Se>#k)5UTGS+YIWeak]u!,f+f=f^]47N%*`SQ.Ar[K4_#WOQI!0.2k9rn95rX&[p=AC7Ge)LlWU[;-C[D`c:4EeFm="j/XIcnD7A=ZpF3M09rgm&C=8pLetNm\>]HG)f3mJFGjCAc\R&7N+=s^91QO$qsCjgpM,tSU2c9\T!I+[Dr7nI5'u+.f8]3`E^N6@(t=*A*r&a!o?TWc^!AF0Qm"hO1c.A/lD9hRRQ,[*V/((?6)QL(55mWer&=a6aHb*dmIn-uf(N[kGMoo%gm"bJIXn'TKPtBC@tRaD:L(CQ:ROfWer,^ARQFku#d[0/-rONM;1MIX!EWo(RAeQAD:"'r&>/^AGY%[f?@(VZJsJ\77?ZAh)q%r`^Tg7Z`S4[HIuNo:fnLhPHNA.bZe"i4r,Pq';9nTna[-"gVJAo$k5d73`b?Sq.Z:M8JdGVYbO8Jii7rUDd`-O#L8Ac[Yq8n\lX5qN=ASun3?[&F--T82IiS@s8@$IH/WL7IML+3M`0C5dqDjb3O&X5nA,@/@:@Za;2n;r)=GtO:T$sY@\W>+s8Gqm4Vb"iHG!I"'[:@p!2(ZK`f*JZ?WUT_Fl&cN:2=NhHr+q*TisKaO;rQ,Ol`?OA(-ual1d&kUXnc78f[_>D[oLMgiCU1!eiTp:!]c^7".]Df9NP'U@LW=j/cl_jdte[%2!T=SM#S5hnFNWN>QcX*I$SAR)giC2i;.f-'uh.'9..6?'DD!g+)d+s8MoErH_&]Siu,7c_aokJaR[4>o0I`.j(JFjHEA7K-D,-1MbAo\r0m_R9oL4cub.0.ZYtl3A^o'`c"ApoS2.UVL)0]c_,^^jd0*r8Z?@-js_3;dt<1V\(-^@1lB;&_#hSD1.h_arqbqt[b3":WB^CPO7UZmAdTVaoYqhgI/j*$cc1s5:H\0c;X^]dFY.q4eQ:eCDJ4?\=o@*'o?Ar"kb9WEIK''*l'8H?2:bkS]=&l$/W.Vpm^_MXHBO)Mfk_F0%EbcHH#(gV:HtDQpIN&=rT#=j8Zu3UKq,Gf1aY@J4GbJ4rqY_i1QkgDl#.C=JY[PH?%Zef_8ZRZ"s+_\F\:=PXnHBZagt12#1+9lH#^Z7%HZ/>q;];,X*<#clruRqJID5L9M`@`OqWb,Vn>&X>.Sfr;O$8H)re`5/LqhuiNQW=VJLD^BX;-FB1s([n0d7NTpYC%kLWkYo*Q277IS"kIXG_SZ`nCGAQI3k[:nRlap*zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzg>6VK]f'WTW)#VQ,d77Cn`-DEfWerXqG3S=D,c__a;ad,F3iZej,KC4Iegd1"5eFjXld$(b*4>^IJ$U.!eo*??C>`Gq538=<)Wu$!.[2HqUMbf)B+W!p=R%WLE(>*o`+?'^RNjTl)1/6r_"fI`6=W*Z^sO>%UELs'cOf'P>*qQ5(%UWmFc?ch1#4LT,&G(@).;kF28"rm+o;JIf&M6(nW#iSoDOQX096`LCP?amn"mt1k#5m]J?tOEm&X\D:cIJpF+Lg:S1Q]4a$>VagG1?n])a?]C3JW/@/#,B&ek0^?MMaC7S'!!.alJ`2JKO5Q'INoD1,Tr:2:6rqF2-c0bP_^]$*:7USn3,ENsfbVAM>[pNNo"npYcY8B<6d%JI(>A^cJ'T4g"^OQ:K)`)*MR*M6a(QG/eS8q5$\E&fG``+kOE5UmGEQ&[MHgeYL5X`\cr8]6QJ#/E2MO^'.nb1^U5@_]lXN]@1T,g),G3ulY%QbYL^]>$]j5[#+DOQ:(C+=N#br6l@[qjSJ6Kk"fmMVudb+*b>RFTV1!!(O)lV65apYC]Q^]+)q<&jWN\4RikoMLSBrql.CX,S_%_$;'po?KFOkEVE%`"s+Z.K\PXWDg-pYJ'X5oNZ4;`T$??(LEJ5IeVZBO.M\CE_6-&O+7'P4taJ6Z;3UQ6se,>?$0.H]AS8K^A@,qjkDJ7o&LB-7\"u-q9(=q9[m)[7:1B*V+A3QoYV2(9RVpcrqIo;b?t6(.s'BTQURN`\(rsECu9X3bnaN"&Uggom^cBU`>;m?O%V(4e17`8P57k@1hjSh[Ypa?STeD*Q%VAm6(11b]o0>@3j[SE/mXgZqunJsdgjHE`=PfV-5pY>N_@4es-Y?no:kCp\Nr-RjXhUEr"Ak!.[)JTna\X*I\M=33[ehQ:0-<%QeL3`>73LcTTatmsXYO;:!p.TA?#,=7,S%02IpJm^(5'j2[4A1n*.uo[?U^f'-)5hu2te\Ru,a0"^JuY$JZ#55Js[[Faj%\T@I+akLaK*@6()k`J'#Fk0]@V^D"/SN8W6j#V5Aa>+2A2f@E!9a2"C:c+'4\))GY5OZXV=KeI^K+C/ufG'4lC8(gs7t!ia&n$2=_*Y;f3L>HO#c?i(j,5[pSL58hgBKmr5C=2IL`8?J*\gSLD%ccT:3U01[q42QK.G8"'f`esLpsr\kc&Nf+VOQ`AgMajHVUoJYi=CG%g9k^r5Jgpu.G?T'3$USR-$8J(/WrQ&p:gFl90KWRqYT1M^1#RpE2)K.G'rZ+WDcK1^jlG9YInm*^VU=.Ua,]PGq:b^jH<.gM-4WGY2*,_D0>O%=%A\8]mJ)6Y@r@s_*8_"GJ<[>oPrNf@Bj5?pr>TgpVRM+*8O+)EC:^epu."Ka"+=&,(3/"Bb\;N-.c-u>uc+fZ':t[FOHsV%8@?^at&u_JGAkqm^qr%41Yqdpu&e?IJ`_trf98>B[OpjbPUqr'*[g7kFO.RM8^+`Ys.?9l.)h9/Amp*WrW3N]%Cf%^!]Vi++EunqtBEPqtfW^c\Ap-lT?CVO6B.8h7#cjH2sPd)_n0$V.ph"9.MEp,r?Lj"[K^s8H^^;)iU\ldqJ..M_?]?[[-\()J7eMH.#8329`Z$Fm@JUnI;Y,assAm\s5$tlq_r1;>D#MhLGS(78GcV^OH.ParGTW@F>+X]C%/=f&4AsQWe.'(jatWa/(uM<0AkG^@TW3o?+/KqWbWk$NL/\BDV2B0=u>j'$%.V?$0.pr6^RSP]m8%@TkhW1Le:YLoXYmNFXtZb*6VhVPQ&]HM*.HOPWkInL\$rGjVojVU51b47>!A4LQ[,!o7!,VjnCU47Bh'KYHf;<_PPHm]jeRNKp5Oj/`W1f3ECAoWdleh84Fg1V&o0B.gg_ZLMq,IJ.AkH>I:V2(XWnMZ*MXjRgu'L]"q4&#'[s%Onkh4i^6ncjgM\/cM9M@=g2Z/m%2goHNqq/ge5T4Z7FAt2=r*Z6H=0KmiIr(GZ'.sI=VP^)l#Q<$rT[Gt-VeL8^AYLpDOV)-/*@XK>S/JmFS+tT2]J!16AYhHVWMBL4Z:I\q9OPNmc08-]-F3E$p_`rYRj9.kKpPCjB03$"N%GN#BnhfK&VaeEGgY,=HjJ,ONT'>Z8++'@`Y$SH+o'Ldcd)j[YMc0V[P%OmM=pV6aaBVUPbc]0#-VJBXF2i?bCA!tG%pu$dMPIp(VRmbZTo(hI@7ljjk[FN]*YIRHXIJrijUX(R)luM6VB1>Dkrr'/h&MU!++bq%8WnQ^dVl)DYn-!E%V5!1RX010U;l@8YJQ&e4Ps;iEr:%VfhJ0*nnj_DZj,Kg`p-c"SHC@q`s8DD9(J_Z48oD3$QKUO"[*s%'`.)7Wp\!*AYF9_>!.]Cki.DR"YeOjlb[+YD4jk\s.uU.T;06uUE9,*&&HEc=c>!gg[V@GAD/?f]2%j@gtFfKh\:T5bRs8MmS'O58i%?=#X?Y6&3=K?N#44DiHY8:;KJa>kXkFR#QAoNA32CS61gM/2U4*GF>ntR<*.!NUVm^]6C,R4="3PgCc?J*VH6#=;brJmHqh2rLD\`qJP9GG_m7WdXH-cX2\(0]qF0>EI`i.dbW_gM=FVoKm/Hpl0M+I]$%o^pU.Df!S&#;h9>ObTa5qXj#.IJWU.4JaR3]X"g,$s.cP9WI9\`u[n@M2!lG]piW9[FV?)MFKj+IIcO*r8_=I@Yr(EF3d"YZ0?rel27M/g02pi['9ff[FA*"aYB@TN^:i@]56>+nRXR74_F!TkF^'>1gn+LY$JZZGP^gH%p.G=;GhQ"d%Ske^]P+kqF(+uGlmroYf8]TSF]hnFNb55X\hf3L<=KQKpu?5-,c9L^fB%j!iYo&N4T=X626^%U1#*-9=GrpY^2h7GViHM^0X.W>5JieSg;h/q+&`KV'#rqPOG;OBlh?$+\(GKl`C>:PM"q,AJ?Qk%gXkHW7l)J;KqR*@V]?Z3XNdSNfJ[A8TOjF&8p?$G+i#492*rcs-.ba=NA]BIbDe$"9"li-k[5OcGjYn!\$QXc;pm'=g7DaUKP)U\1fFmCr)i5#,+]&AA_\od2bUIUB+55HZB=EW.oUP?2->&2pqg&7TZ.g^FTECZh_pj[Sen]0O3j,N\h:u6Iq!!&D8N#=Du*Rtriq':Zt8;N7:UZdh1*gpTf#\D\Q:2di=ejtMJTT(ne30(&gTY)\!_?hUN`l?(0]mB?daKaim>CQ;!B//Vi)fJDq1IUgYT;LuNrql0)d'M"Y/"O]hRr#CPIf&M6-AmP"'lf&)pS.7]IW?)K9\fk-`(HD7WC'Fb^':/#@YM5Cb$1aoQOo?TXncD2hm\EWgah<&q?@(k4O#c?i#c*SNd_2@[*,n0VRg&im^c^qQF3[?Y7<\"J/R;!&Vb`r?S+ls`!2.l%*^0@Y1X7uPcpNjYrqMt$^3SG>C%Z?Uzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!!#jOUjYN?rW=-1M2k)3G$?tYJ0k5I$noeq5/OjWDf]qe#JedkF[61:!"/G#_6NCh*GkUb7pnb4,BHQbaC7k[8?q>ggo`Q[r,mMi.DQ+0=fhT]D_B"5:nq[Q6m<\NpIF(7b^&S*/V'Zo:Y.jbt9/!u#?N8p]mWUlHYiCa*k*Ci+Rkr>LA(bF[NB)m<*H8dp++kh3<*KF&7nQjHp"*R&[Tie\mJ?.PO0*2+'RflG[oZjXeJK!M%mKdHD7A?0?+Y:IgUFr`Y.LtpGMdgmQS)QQLU,s#42sI\;lT7j!-nj/19sEHIbOWd%f\ShIhQ,/tN_G&/rQ^c^b_J,O.&1]7+$^Q+hoa&-S*GM[UX2HC0S7j!/$@?^,kn%Lc'.?(!"VbW63RI.K@ri6*'R>W`43(E8h[r6H;f:ds@)L]mopY=m^*FS=*k*p:dI:B"Gh#?guomc"]2sSr%H,bLD'-;VtiI:b%7@#JC7&O[j#3m_Af$%NRV&kg:Vu%?4(@?hEdBH[u>9(clbP.WE]spVaLg`>)IuI_>kl2L4;=-dnuaKbn(*RPQfG7ueQQI!Cr]di"dMrTn1ErQmnBV5c`TjHH%dn;i(s,;l,3m:RKHrqbs$b4*hP01Eg;N^8:%jV:=%9;XD#SoDOQdJq?>YKZAoHM$Fb\b4NX8,)fKisSA)l`IXjkE]=iR9*T,mb+pZoT*7I(I]S6`[Lla^].MMG1Kc*NGdR`jo/n@pu-uYXgHM?qs76n/79N\Y/^g=4*T!<;N-VMRe!VSTR"sO81$!I7a-h@frJ2X]K8B.nV^aBiAd3]mQ9mM1]:^K>@?&gGE&2T4Ru#^bQ>TX/=iP-"qDVTZ2F@1pV#@arF(I%[b,&ImCDDONM7gQQGVJP^]48r^@&SuUAKH>kC<'FN#O_D^*Wpd$n*#_,NVAokFR#Q\*(,4e(V3F(E"p<,NisWn]'a^F&$V(pYUHbRrkg*s8;$l66iGKHCbpAn%.hf)!01=0.f%C:I"f"'\IWeIB/f^@,@&8d4f%JLt$M,aH8nEk,3K6H_0p:J,J=K$_up$YIt]7GM6c/]Wk3on\jX@_[SOmpJFF$Q$$a9p[91e:H71DOl`@aW\/K!#NVrC?s,?B_.!j90(WFajDnc%k1XFj)pY??>i./T@m;KP;^$N&JZIt)BlcCNHbe$U\R"qLdRWbkN??foDH-%A!A3CNjcTR5dc=%7D3:7WGSo[-XseQ6+KrCX`uk*p!ZW6:*nEQfLHj/@En?$8f'>A'LLrpuc^UnJ`G]Q$p!m,np!m.Dr9$:glddXOIcifM\c)6Ve$qX=d>t$J5mJF;kFR$DBG*,ln])`lhBu$AXgQ^u4aM3"*9$PZ_[fO[MkU%7ZVS#BcWa4W:6SQ3MCYhHha7#^g\%m9TZ$lK@M8K#BF&1Yc=;bRRg1Hgk)Od75'_s[,o\+)aFm[m?4"XYR7K;k45@fP6M_)/)=q?s*G1idbH7BXhp=NlM:TX8pK!fOS4r&m!bl/i;H!&eXD6h81nTU$Wp..@Dp?e@BbbAdirCccCn\c*i?7be*\T][=p"!>3rpc'([;-SR7iY0_kkY,5s.4rT+$P)>[F\1.T@ir:huEX^)_QY!ibCj0j$;)hUJarG\eeIVJZ/1KgMTZl7C5b11ocP6R#^%PUPapud7=9mq@ZFPOm7l.RYFiV7FOV9dL"fm126LNh:'EsS#=`@.>k!Xkq0XEijjcLEOXY:X5'N`)*G2r7$?b?GMRDjWOKMD-&OTV,e-s&gMOE*f&r\*r+GZTG2$klQEN'$%N[_l^9oA7gi:@L%c)?dIFAuQLO\KZIsuQE+hlWh2VP*Bc^rej@:9l+@>>k$"5\Fsc,QX0\1)bW^\mZek0W`KUfb$623,Sql`RiPdVDN)f!k!\4^_T]U?Je1rTclg?$)KGQ:X5@=CHp9N?38q@C]7Bir16IM!:he[(V@QjnSB+)k4"JM3;Q\[d:b?I5Z8eBh&reriV\OETTa@7+%&[r]"cdA)!S<1FaE,jB`Ue8k.,92V;Cq[MWEO()u*E]<8a1WlA2P/GHqDm/]T8]/Xh+f*18ATNa7154QQ).G8!Mfk%/8Ue-bJ'"n&&Ri@iWo4)ta++NmOh_^XTU76&3Bk34Uc_auk*5/8*WE'[$6[DN)n])`D5+Zc6))GmK\FnEWe&U*,BdMHZh[IaUe8NLJt6`u^0-]gIPb72K[W-lQGk3o([oJYc,D`gRd1a#>(41uu;5k2__%DYWp.eA^BT62:l)sbu)(&1b8(!J,LnlV\NTGQ(mJ\J,A!-H$T;S[m0`QUP>Y(JrVtaa=N3LZ[[i1<8)1Xca:<0i.2-m@mnUsVVcW*HKh9G=V#AmU1g"`+bq&#g9^hYqo?aB='iF4b@C5q+%9hfS9a@qQ_pO9*Hp(Dgph@WTQGoL7Jfc+=UiZ6!mFF(-!YG[s7+,O2pT"V+R&,=$ar\/PtC8,CF?G5@e7N63/NKlZ*+a0W5S*[N2:>&F'7AK&mQX#\;55=&gC#"qCWemH5HhL-#dt;3u\lC#0Q\JYhbtCoUn%JHjKqlrg\Ct\uV2o?*((2D!cTCU.k`5F#Ga@HX?Tr6pd02s5VG3PGrSV&HieoHB*2S#s^&7HE]64Rg/MhK@FUe'L[M-D`5Z;A;i<8H8=[5G`,$he)K*!6uP+7+')@Bm1XR4MHE[TkOhJqWb,l4\(JMQ$[`U5c`X_gMPEBn@0eM++/%]8R6>T'raHAMbeO7eYp)s"oFC^t\h7>J0Ln_Gh]$qWe=']t!1c1,b&MtD!7+!th8;0tVbt_@%7aZ*6dpH`KqjlhU?A+pD@B]ibr,P"msc,`IHHr1@[5.8'Yg>]E/\:/?WB4.YGM[Tm>XgsaXAcTaYJJ)>\KQ!.!`n#NY+lIrZ3JdX1jET4pRTtBd-HUH9<^3TZM7F?4+5CLL>V)<#ZbroRUa6#+ZonK>j49lBklsGoIA:S='dnI$"&)M`Ae.YEm$&0c_6+8R[&_uUJFj!1c.AFkh'C+4mAc+d^+5nhgb[;/bBG?H&eBmjKiPOD:Gl7*P;mCfMqF.YPpY>B%QX>cg^<8.@1_cH-"e`8^))EW,XffD7lF]FI&3W0NW+a&j*mg8!99tF/YJ:'_H95aBchJ?.1qb4kM;Xd'De"c(o_nOA:ODJ`VIqMeI.>0m&4JqhQBZBPjd'-=_$;&UK1+*&8oGP"FXbhl?[nX'VAET*DZ9W$g0CO\g=HdeZL@#GXeM^@g&]n%JJPU6f=i.C.(opYS2Kd%J6'ccfEgVbV[&R:gEKl)$rmIFO7*o7.Dt7U0rP'n?2J?gkSlY4R\7B)(`!cQ7Q1iJT>"-k8,lH0:`mANoqNPF+b&H0CrWk/h7;!\MobrQBsfbV@-XG1^6dS9)uC0k9M)+ohTCzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!).=Dnc&0^%^B1jcrp(I.PV/55T/)JX9\hC"0(Y?[_TIdEtIF*rY)V04ljgV^rnCG>\`oTZt\"3(RQpe`lsi,>?FHSAZD_?b*4=ik6M%fJ3pHSrq`e0mb7/I/$,tl!tRMU>AVD-Q]1nK*,n0j9"t&5mk)3A_V)sSO$'_AKN2&UjjmXSbo8fdh[([#YkmXcGNdBsrgn5[8^jS5cRTY0H+WIP>@`jb(0u%0k]m+&kF5>j`uffDn%SZOZck040"BiZ)fL,Q9fEg4bCBTq2VDW).+#SMn,;t7mupO2.CJA_gMOElrq*+bL&q>T:t4[#J%j?'.n)e[H0:_C+[5SK;hG;c55aof4*U,JY$JYp*dT4bRA+A>nA,>;lR<`@GM6c/'6>.5`">61d>q0OK*De-$:fdIa\R?u4ej_>o?+Y:)D-f)b]_U]Zhu2teA%j.?m^_MP9.[>9PWA?Z1NR3iPZ(>6Sh[QumBtQ#)f?MK/$?DAHgeXL36PgON/@7aU&Y2;7DA]jb@dGq2NIU*I.GC?5Q8/=Hbg@qPTs7g0/?'^@IW*r$BeB@>>khfDiS^mYf0;Vb`qd:Sb=W*BU]Jh`arpUe-d@aqp&3s7jW!$E&.Fl)2Rp[F\_HlZ:`jQURN`\(rs5`;JbeDmn;-Ms,6RO?UDMc9"18oS@6hIJ).?kG=MOMJAJ\Asj/or%Re(rqPM`P[FF\QWYVu-Vkd<@`8**T-)$]O=1G9^tdr!;buf3X]ot^@N>74Zd1fWIIpD.C5W?/Q,J5nlSaq%`6LI5*:(p,cTG,cBUs:sM*Z'prHA#S;0;'!Qi?sPIigh755OKU_UV0(:I"e7#">Q:DT5q2rUlp]Q3Y;80>%jE,"neoGM[UXI-fUsDf.`&U>eZaH)/ST-;L'JWAF*Tm]E?&?$&r.3Vha"e&Qq9qSgLUYJ*%J0Or+]mbPL!l-^li-T#EbpNg=H'EEZo_?C`\OH*^qp?]?50"[q>kO=\-r1r>i=Gg:/mBma7Cp?Vc\YRcFb5>Y:D75;On$^tg.ie3MJ,fD[qsMWO=Gih[I.9YohRu!mkj[AKcfGqF5)N++3jjD5p(9aBV6ceDrcu)T2Qp5Ob*4>RUALmaNf#SNgi,VuJc>WF8'_iD32+JeL("q4AUaS60OQZt[uQpu$c[fllrIaV-!pB\q,,VGEhU4)Vur1+enNC!r>TI[N:R;NHWj9"t,`RkiGEZSX'T>qWb-&kcJQfk'93@>^e=ZSLA2^]48fB?XBu7IReMSf"j-em#&5,=[WJO1Xef>@+T%\)0CGs5uWHaguPcd$p$)qsM't=ii\eS.j]p?[Qj"R4_dV`2og'Kbdi?(.DP\1ub?u?CKLG^%^@s70*CU>K!da*5;F607V+?9V"6;kU%str,V(Dp!m.YkS&T?IJ2>o='[[(K]cX6)i)IRpt`K%kNKJ/@Z-dtasl"R>N0/bN(S9HAXADt4%As*l`?;1dOPg`GiOd)0?]S_J(t4cPpP>]\7X#OT(bSfO9tlt8Q[pu@EFG1(Ka>&17fUIV6!&P`j$r:&4E(qS$Wqd`j;kgH,)P9s!r:\tG+/?lp%Rr&r,bckNn$A3gD7Dgd-nV\e;)(ce21l<>ugi8D;\F\!-A'L(9f;huVlq6!Dn%LkU*dmInH'@RK[r:o"Z(h+#5PRP'ai^P*HH,5LAL2j(iub%C^jlH2AYLpHg9mD1F(Qt\oT5f[!qH:-rF7/"lS"+s!&,3\=6)hM4RB;i"qMb;DVVb7!\%Q#lI>(]5Q?"^]BER3O[[9M*LdN'hS"7U/SF7!Ehhi"?[\1\V%P#mkYXons8Mc-:Go%8f0s$YSL;[FJ;l689;HEN,e#qOdf`T?'=G^$`JtVNZ!gQNk\gIJWRAM36M$3B,.plbG6q*0^8EU>.0niJ/MpG8K/jCTkF;qGdJMQPa_dQn_acJHH-Hc[Pihjg?T;6)+BbGMO"ikoV)C"F=S,CK[Cp"rhATAL5+gh=%("jts9clDq*0rF=q/5CS!%`.)H,JQm'+[@u7?Z(`WH!-=8MSp2Fe>Y3854V'U;TU/u2WNk\%"dl8joDS#)0E-ekXgZq5^A8Q9VG<\N#3A>%E6U8l7"HH[prDW/d3uThSpR'$j7Ler:X9sEdA'38-c>oWh]I:+Hd?KLJHm7K0^FDS-C\fah%:BC$bZH3gC:L7MH3YI=tLu+k*9(uq;pXd,Z`E^e+E*m=5`r@YA\A\'EEZohh2:LY.jbt4ndMQ`QY,VVbSI+N#4QqAGR-WCN,K.G1nB,oom6oa,V1Trqbr^[bN:Bj,Q2Z1qb"eNB:O`J<\kf6;1fDHbe$]%mHAXQ/5_BIV:T91bs1l)O!f]dpmsX&UP?YI!F\Q.(]00H`+_XB7*s$[FN^G)fE0ZU$51skW\IJo:e=4dbn7P2.Xr[\hn(PcThI-Em$$N9DFApY"4!3U1fA$)?m:Wp=dMimM/HYnTL90T)/7>"o]:Fk'L@cn('O-^PU.U;-ZoDc>U/7C+LqF/*D01Ku9eH)[W+:&aaVs2;BIG[5*Jc3@mae1?QQYJ'X5kK]V7?[VBG8ZIiGcTLem%,,L#^!aq<[isptlqCUE^A-]Gk`3%s\fZ:cZ.oETh035u4R/l?WiY9I>Af;cdnVtV\%pU&J).heqt8NE07AeUdA^'B]_c6#479TqEQF4bH'O;^!!(4pidgiT-DO%ib3bfB!YZG'P$LH(A[0.-%3,:`NB%O7aW3t*V[\JOJ<,`8J:rl/)2rj+\DSp97O%8HTbjipQ3R(;G/TI/oHbLK[$^$$]$dgIuWLo$/d;)FecelbisUo?TX^F^UJ7<_4C^V<3&ia<#EH0b(HAAZqtoFFeYITJr&UkBk8nLSU".n%X@iX:'>1)fE/oLCP>629q[';%s"\\]'LF1DX8"OQ)m^>hI.>/lEO=NJFJmm'ET>In[FomW"q;Ib=lAko05mp9MT-6N6d@2655k-&j,ZDg7Sd)D[Npa-9/.[VVP/#-hZcq79r2LKT%WLg0q0mZpYC%#WMMn_2W&oRL8MS/oD6LO\'[Ya`LqSH]f5U5)F\-n?>#gO)ObP8Xtkm3=*\\pl)%UU;bf>!qHSOKoi[ofY.?+ZS9s\7l/S+;IbD,Ef@89>HM$FpmG%*6_[_AV,)QF%0Gd\[=1sEaX^^A4OV&`URU5W3l(sa'J,fJ0oV3W7bj:YP`Y)-*eIXaJ@Fi>nOtomVil$Z_9i'ut?CUicgM\aZpu:,@FW3;Zi4*de@NC8SLE8U)UjJ)bIf9+#1d)*.jd0>'rqY`$fk$M_o;'o9ElT2E`2^HCg1rqPpu?;*nO>S,SpR&Nk007X`A*M"hg+CULECtijcro-[5"fHGskL0!9PJFXF&Z8V_,3q+q6Q`=C[q8pNe/LPsFG.e`n%CXiN,,QnZd1g^jH2s,npg]:hlYDbs6o9W^V9aIqr=onn6N!!e^UQs,:hSldnPleqInaWA8"Cb^\mYFf3NUg\``\Th`p]2KF&=G\,ijd%37M%P"REQr:.h6bAQp1*BQ0bjF@75Z6*2;;9AV'is-)9I)Qh%]^WcG7;n?[0k3]Nmp(>;jmhfmN.4(mzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzJ2pHD*3$ZY58PoP2HruX!!'."hH?kgqTf(F[&htt5lgrc[%_kZWT*2)qfC/jC9n'I!!(B'lCFc/X7,E$7E_^U()-`K5V&jYQ7B&OZTf6XX#=0Y!!!#$W8:[W\GFMM>dUTdCdA(%!48JHB;snU48X*HZ>-]L"TSPLMWu7%Ak)s'YHt+*f6:BJrL3ig!,*s,%lg:sQ0S?C!<<,,QF[;@;7&rir5lKi1L9hbck!18u#2dY%aJ/6F0>;gVI1n^_C!WW5Eam'hKC2-!ABN)pi1Clb9H8C+92`^mqL?nZ([[BX;9b!I1ZXkZa!!(5'l5jnJfRUDhEqN^=FoS<=!!$1qh#iZc3`euq!!&Z,eNMiHU3"<'!<<+';;D>7-otF'*<6)4("GJ*Ln\t0e,]OL>#F)XN[Qqi9H=*5TG?!?i/"+K`RFng!*W7IJ5^[B2mpn&cC)kU);dCR!'oAj4%g;iI8en%jIEc^Rdl@>!!(MS]sC[XeMjn\9$WjJWYs\R!!#:?eN6D==++$%XQ5n^XIA[=!rr>N?+mRDERd"Ubt?9LbGlH;2uiqDh:4S['j#f^gT9J+\ZD7iN<9.\e6Tbo<,pGI[EV=hREMTJh`(T95i'sP9,1NV;qnD7S@P_inVmVNzzzzzz!!"]#BX:cBf)6VXD>@M`2Oc,q!._UWI?S&5Ak)r,=D(@WC1p+3&!!!#7S?0FrYU6]O!A1CZVJ3GL!rr<$k$`BCQuckT%KHJ_DemOD2]"?Z^7tc1!6j3O1>g>F9s*mJ!!!#j[^OD(F&>m%4$!?A^q?d$oA*[$eG>18!!"]kCWh)a(H&V7UB:Jrbi.h.R]Gn#$%1223kOdrM>fp`C3Y/r[J_/`L-m;?;bD8dKZJu<'u(,Q7C\,C":]5J1;:O;Mo?uWo*"Tm9-^n_ElH!@$YM#X])35?A`Jeo1BIl38J=!C#/VY/_,`:U14($0(=`S$c'ENbl4FJ7^&eGqN`[4\:rD3W'+[8*QqGq#a2bptZMicM6#UikuV[8\Y/MMh(.\\K`@/-,:)1AdCr(qldbl,1hV?R$"WGn&!FRrE/7^$LOMY.bqC;pIa9Ohh.8knnT<&9tEC/Dn6<`;TUemE0k[=.ECnjs=U405WCh9f:G0A?!EtS5r>n!2rfS-DfqgV>?0Xd@M*=0-&K#%;)$Je2ik`k,#"g1p>E%MUS])P1HbMe5EEY-nr!dEP>W)nht//(S&eW#6Pu16&8U.Q,ID;9`c\WBh8s>>6EG>CWWK>&dD=XM;m]??'QXQp6kh'@h)+AbM:(UP1MS_E%^T.bpg6h7T!0jqQW(Q.fc6WN*1)`@YDqqHGqERc^HFAi-^@TSh4#VNTN4^XQ/`\0riX?f_?m33rV/T??MWl8Yn$Hc`_D_O5.ISH)(nDGl@0?HR2-MJebQD6h;`d:T#uFU[-DfqgV>N6Lk]WrT-EBg?KuGNZnOh?h_Pu$A01@anH)1^FS8L3LZu5i=Q>4B-;6g*M(O3oe"^q=/AkuCHBpI@E[Z)'J<"&!p.&q6M;KVM.I[a8X]2WO/.=K/9=)WeFR7CP1O2FM,V.P+V?4'&B\(/C^'Gq#a2bptZMicM6#UikuV[8\Y/MMh(.\\K`@/-,:>1Adi(H_6`rDgAasW<"U#Ar@S#E'mKEUJZJ5;KQ\QC-tstWkr3[[pu9"DrFZ1R[9b;dC`A0.SdIA8m8_';G4FWU8V1DPmb7abQ9JJ.^M@>\G)t:oTiQ?Ri9X?D76AD$9&Yf2]Cee,Xo1#V)C_QW[]Q#EB@4$rYA8*VKjVj)9jZhW8_p"WMF\&0==b0/rGPZ=1Q*sc7AteV_\.EML1ta7W3R[Z`*sWe7OUWTQ!7qFJD]^92]kI;ee[!VQ.LB't7\Ll>PW\C7:K`RaJcGK.9X*RS$bmr_cCsihEARJ!CDSilhHXIk%chWjqf&C%R]m4.@/86>a00!=Cb"75l.H[j4DO2Pi<"AZ@42/'][Ge4#cG@`@/19m,%#WO&R(_#0sHlVVas;L\48F;%VglVqknGn#$%1223kOdrM>fp`C3Y/r[J_/`L-m[\gXmPXLS/.WQr(6FZ-W7R"#ff4c4,Kb&:UDDLtJtSLSO+b)]k?qcc%FRc^HFAi-^@TSh4#VNTN4^XQ/`\0riX?f_?m33rT](M.cG'mG-beQMXDcDFVCo8gbj8'rn[q9;R[9i.gk;oNTWq9c6ZIg`/Pe%?CFN96BD<,oM"<78ANQWgC((Ic=>X'FQtB,1L4U#qE?*WjkbR5C/U^DrFZ1R[9b;dC`A0.SdIA8m8_';G4FWU8V1DPmb7abQ:%8Ph@3\h#5c&BAK%574k@7COQ(2_RTY6)D"b't7o=8$B5s/Y#F-o28ODRTF6#`T^E%8aFr7C8k6='G]r;Ee.;^=lB=bGN[qJPh"`CLDffi%3k\0&jR40PYD]%`!m!A!SiK(!+h"[O[UHu"9O`7!WdnOXKmdN,VD?V3"QAMKLHTlVSFp"8)%E;nqRpmB3JXl`Qh+n$MQ\#LDe?lLUS8FO024gjAo"j.bZF1&:Op=3PY[FWP)tr8Hl,*i5F'^:fc>TW7FEltQ,'ccj/_.Xg]\e,\`5*D3K('4eWCX/_U>75B=(_3:>lJ8nHXL7!AclRV,-V`KmE!rd02G)t'H;VteQ>>S=D9(oXgLM,c,E0\02;JLaSWX^?,bm?/\pf1nWiF0=,i`MQ4LnSp7S1k:bW'@)CAu-J>,Yl^Hjt9,d+]s@RmqfR.IB#nN@:_g.SCGd]5En>W4%OE8t#"2-GfIr60a?2[dDLWHjgJ7h&DAIs><.2%5tXiD'E")b"JiW:)".h571a-2V6O__^n&\4U+T.5aA:r2QbD99G1*=n(Ka!>m+?mkWq%@B0,6mq\VO@IlA3.6qgH-uBmqSYWXI<&LC\T<*NeB)W6@l"_rK#"Yr_:ibB^+N'1Gc15J41R)MZMgE2N]LNMc"X;PSt[XW^FmNF+OfZIT9C3V+AVP/9l3A!0!)0GF.[OqM/_Ghf+jpp/5XUoVrBIf?FUWh"XlL9pQt@5I9:iblTRkC>N;E=ooq:l?ose?p<#n-q]suI4$K22H>_bftQ_nSsb)Gc"X;PSt[XW^FmNF+OfZIT9C3V+AVP/9l3A!0!)0pQp`&^dt=`+)N*eO7Y>fd\]n!8P6ThJFoiO-.gBJ1>MY)T)%9Me00;SkDYNer)h4,V*NF,]9A1<]31CKf0/-)H@k5?Uhb^@YK(pg<4T0+dtc]8CZgHA.j8UYq7D*_1X.G6*7+.emM_c?Qe9;qs?X#cJM2^c[cj&]5<=c-bfb^q3$$c"0iH%3pr1LK_V`[n1Q-dR_Ko4%joG)t'H;VteQ>>S=D9(pC'LM,c,E0\02;JLaSWX^?,bm?/\pf1c"X;PSt[XW^FmNF+OfZIT9C3V+AVP/9l3A!0!)0pQqC+o/069ONsX1f4\@e-I=!D[5ul_ifdH)-Ssb)GQ;ZFCl?c9??`IjD25,=l96RtJp^L,8m7UG2X!Ug7BuuB:'u/]WII3l\!9mK(9!4WsA@V01WgYJ-14EiOPFD_`Pgm@\jIDXAGlm#qJ%tk!HN!p?HCA^uJ!4Y>@WWo>sBV6@Rs)Bc_n6cjIlJdaSe7^?,_Ygf/?)\Q4oY!.#SQC"'$L,c0=oWY*d7l9-`Pa/\,X>c"X;PSt[XW^FmNF+OfZIT9C3V+AVP/9l3A!0!)0pQqC+o/0=:iMN%_bI*e7"OPmO8t/:u-RnF@BnZ/[Y/4D=CB#0\#"^mSE]YENtRBLl;%6)hm=K^1"-%OiA;;*kl4%X.qWG4gYTmBL-p9CXm%9Me00;SkDYNer)h4,V*NF,]9A1<]31CKf0/-)H@k5?Uhb^@YKBXk&(`cA1..09'!MUJA!hapGP9iWF<$.XB+ZB&#)Dn&DHHRUg;H<#``lfJW4%OE8t#"2-GfIr60a?2[dDLWHj!83AY%6"<)0X\ZoD?8P/urNMJFoiO-.gBJ1>MY)JFoiO-.gBJ1>MY)JFoiO-.gBJ1>MY)JFoiO-.gBJ1>MY)KtA\##=tQhm:Pg6\gCPb76Rf`"uBQku4nk\VcFmA7P[PkLrRQBggnoafBm^YpYjmA8;4kuA`rY+$)8\FHW"ROgl_IV-E[Rg!2ae@`t`U\n*S`V.>-_S"M85]9:ED(kQFVmJ*W[B*p5Y((\.rXDrnCG2Lg8?_;TEo!6._i8#'eRU+lnM:QEgaiH#Uukrp*9F(Z0=F*2&a%'0!.%jABmZiJ3Mh/'Wb!KgGQ#E8o5D-2?[F4Z5^HFcP3_65)/fAPW[:B$N1X8BjCSE0,rP-Hj![.BH*R=QN%cnC"jl"%9&!!ecRJ6S<@o`S^$?c3R=E+SqV"TA!Re#0P[$-paDg0@?6.=g9@;VGIBHVS9^WbP\YmTok^bkrE_daqet%?OoHU#`dF6&$>nWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSp!+7"O*uVXbb7E#VMYnWiF0=,i`MQ4LnSpzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!(pfdrWhupYbLeqWXou4/r7`aQJ6n?5W-!!!!!9VXr(pDc2XmQX9NA'2Ef>[F`DQYub7WV+Bak/$Br51]RLU(qTDh]$sVN/[NYV0nct?dZ[EeBcIdBM?3bXN2lS"qY9*3(\bia>Agu_gp>R8CNZ3Go[?Ufr4$POO3]r[9`*tQYJ0koP>@KnCUH?$GkTg'LH(/Tp!cpHB@$"Zs.u&go$b>R!!$N4G8(KV*-"Bu.!kA=TiNjXY=H*4l+BgXfYJ]fl,FZYL8go?KE6?[VCRH1K')a3?3EfHS'/gugk&4T%.Qq+Yl"p"*R.)==H)Y$,ha($"UK(0T_^UQ9;jn`#H[m_Af$$dWh6+c""fER'>(r8Dp#A,lT03jhK*F3ZcnL;#1@\Dk$YNdKUJ?5N@+GiFS!3Q5MFe(h+87CZ6%`iZ[WhZVGnq22]\L3HLHc]@L_QX+dface(g7t:d2mnS&H1jmBp$ma*i"udGhDCkKudANNkW'RI47=.J@m"SP*CX%5Br*"W%&Cka:HeAMCX0,S(,p0En](Db`ULCa64;&,26.#5*^s.:H0+%4WPAE!Dqf!hN1r'&[a3iWl`K3=!tI:5^Ac]m^,9WMpMaVE/rjh]mC#J]!!%O(;u4,#Vk8G7UcCY_HiO'=\%f9&A]Z6bCsIT3l#\(#nNiI,G+GdI"F#5&S*p*UbCo?@(k4q4hUba]i\s2/^^03HL$'Q8"0t!!%tGWfJa#2"q*+_FHf\OgqsUC9*nMie[m]Gi4/]/f6On5QCX^5GMn?S=3<^pgYp2Ynf9Jr8Sm>c+j+U^FF-8rU"O\G2$lgT95U!MFQZLf3NUKS6m)gGMdi'IpBuA$31&[2L7m@-'hYB_[SR&ns@,ho#i[&k+ZY'1"7mEG#D;#Y!4>FXh?[1O`l`RkfqqqF&HkA_ZkF`.^!!'oZ_[SQ+3(Jq4EV&%6n!uL^C5enEr8orY4#I!3MpR^LE:d*"W(G5at'[&caiDJbMrL;?[Qk'9?.YeqTt!]rpc%nh>`Q9plD]8pV6b,c9%YDk*`aNZ_.3_E-!EBs)qkRGV'BunB>o9rqPMB_/I$[f"i+?bbL4_)N3Hk_[U+dBL>#[a\U2Gqs]X$FDq^o%f!o%S$h+]ia1r.#pMf\6ia2ZM,WfON0H+!9rra#g#)m2`=CqW\GA]Q!4NZctCTiIr)*F(2_AH]%.eVk8E!DVfj>mHk0,T7$2E='RK4lC2_+Gsm,BO[hJ$N0df)q10'(T_$HEY.5nIgiqY(#@",[nS]f+qTWr-1YBT,b>mSe;bi`;a!X+Iah\`2b^]WTJ&\5?r8orYEm]W97$7)M^]!PP%Q^OIq>%']!@5@!='SU4$*QleiGC"&q"EPrH5h0%=n^\cj^if6+gBHN]3H5$@p#cf%9X8LlTrSRYSn,IRe)+.P[qXTufgj=JY/=htkQT4WmF3jNE5\PWdY#fOZV:Jjh]q'?#.4:b>?@2)8kF_2n^!]cb25bPS/@*@^X0:CWOQ5r*>ZY%JIarr.5c;?E5rmFFm8e'RNMBu_%aX$oeaAbB]hKIXj)fE1E^]*Q6[dUccL)[SR@Z))#(0Fsq9fC\#rCa#S?$=mCs7%1$W0fI%+mj1\SU'@c)f2apjN3T%>%jW(]]VG%h/ud\eD&jR[^47?leC=rp+jfB'/ND=o>*FJ'0,s_dj&$N;T2lS?f,tS9p':t<]i&_^^n$ST0RP"We25PW&*9(N?DcKqj[/oa\We$^WqG[gPj['r#cW^bC?r:8$$Q.e1c]^sDcSX*AeM)[^,)q4>,rRZP,O)DMiQ;N=fb8]=-L,`Vd2:oM=o#mYMieb`+P)jr6L\CIjc8k'XfYt2C5.eiVHRul&d]pX52rFP!>Ai[T;<]m(UN@30B."JKHgeY+Ro.'o.>F9^k)F;,@q<+?at(Lq\)2X]r&9A]81_Jgs*ej74u"V,65sdK;>ZqJpY7PS)3s7su:R53mfUQ=h%X'ud&(['(*mi5,4CbT1H?*B-SB^Kh?`=I_GIX!CUYPb$klt=#h;SV_<$RF-PcTCU.,E=`mp!m+s:2$!*e`Z8):t$)h7'42nNGfLMN7,ZQl-Md.NJYA/gAB[E9/5l1LO])Sc6+5)a@D,j1-gmMFr/,FqqL!LcYP^rnN-D;V>pT`;*TpR8)(cg3GmKW\E&"[>MeqYYC5dg?hm<6I<`R3(UW=0ZGm&_S/d_l>aH5`+8O,n4qm\W^AI><.=9iia"=piZ:cdW<*W07dGhb9rU55c>lO,p_[`T9H>;6A`>kET'Yd4@I&EsR.c,XOmGIj(2h1-thn%g)/)pCZmYQ4q3;KI:rFq3?0aO:h`Yg.oE5L,(;e'X#'7*0r\8I?Q?iTuSYJ:)5nO6]cQf\qpCZHJ!j-RLPV/ssG2i^A7:OM.8V8_[s22]E3)>AXE6Q[dq`Y]FN(PDJ6Nk&2G7HhJmH*gc1ICrVE1r$#e?m]jeRMuUeA'!'%h`O@Dqc"GdJ[uD&Yhsu]%j!g!S,JK0u.(3BN'/ORidhG6/S+4(Id5\k#b/_ao%QU?VjBZucFg8n$Mu!&?0i%G;%6a?a%dVW[DnFkqB?%QeZ#)*>UGXnII>Q>P6c?UPO8+C@2KC0AmZMhRJHu%%TEA8FDq="@_n)EJd-_;/FGMI2YpA#;;o&Rp32i`g$kcJcOC\rl%n%\o%(f%QpDS&rh1RM-hCsa#>`BnR0*\55Id^AThs8!ha*?_!6-WH#Mb:T=C$ST.H^5g'"&Y=IJl.2BnUj)f1kq9U7&f#Zhn]*^AefKj/E@.:=p338.c)R^f`,,HeDGg""2r-;<>&k=jiJ&<2KU?_:RkZP'G?lUdd@GL<\UDe8QX/0k,q&`CeCUUCpaW>Gdf/4[ih(K1]XZYHlSI3-]#6!8d5jMTlJiudGh`u4oNGhP?2Z2*lG#j.m\3bL:W\(Q[F[=h@"[Y^V:bnMd$OZ-oZ'2qnYG(Bd$Se#8LMKJs7%32dH\9d/#J'H9AK%)GJ?3l*K-P0NA!3FE5Ttr3MYg$552V5':)pIft[`2!rG_He6cHLoB?8&2n:]>&.CNM=*%??kF%0>4`@>$U%,=;mO9mRYg'=UZWiT7(n[SjO#O2!ufA.BaSH3XF(#*keBlq`k(L;=JQ*7t%qTb)`N1pF8;f)K4UQ158O$EX=q"i)[T8]uRj^8"`rLL[9p=_%2Nn6YgON=6hZVohk\)&+Dc!m2W%ordCC$mX!f)MdBeu*b;f5MP4BD^RT?a%dd:ZrGk!8mRk2g4'LX'bh*rI"9%GQ!Praa@QAd6fsUm_8SdCTb3[DlNd;oIGD*/NtB@?13)@kF\#uCV70`pu0H"bIe@7n:OZ:9^2C0P\[J9G+A0jZd6)BN.--?Yt*tt3MYe@B:[Ru_K*gO='S]@f>-bq4"S>"e(6#%REksG4:mS0Apdhpn\q"q1b/+l>]CKAIJWTghuX9;&/.\5ba:jE86cm"`JU99mM\MU5Nh4L)fM8=qqnuE.ALYm^%^B14#8nWN&0J=>Aq24q$\U8riTpN/`qc+(LOhr3I__`+J5!-IX/3;(>F#eD2VrY5KOm&>\&sc55NZf`n.8n[bA=YY1rcN(ft3"qs2#rleQa=/WNVWOD40Q9a]&YZ7<'#oFk"]7%p\s_RdD>D,@>>jILSpbn3p)[QIeL,8qfgh8`t_WWU%keDrql0A^Akh&rU*QV/J[=#45]kZ:OVM,0i`(sbr/k&B]gHfkr5Z;k++`Uh3qR>G_IE]#7P&qg$@>$#[HLeuc7@Y&kB6C9+J:7aYa1?+Xki70*CC-[ui$2JlX^Ct7*ZRd=(Lo"tu&S9tO)W^bD-cTcp-gg=I5+%6FXVtb,Ii^7:,oV3M9mk9.U2TCj(q@k#g[/&jRGQ-FE(dMh*d=/DOC>Sc'mdPo`Hm.p*m'4TodHX6L4ndO'lT:]?\W^V[NjY=8U<36?G8*dFKJ#!:[^TCq<\S+-PiCHTRA4HcM,M=ErUqY7-ih&qP0D;'FjB0Zd'neCsr)?_\H3S+c;A/#*VYLdFkj=Dnl8E$S8MInb\:@UZc+]'YggJ7t:/$0gp-_XiZs^MYfK9=58)L8LJWrj:-$P6d7%5DcTcdkb3dk)XibT%[ki:G9=CKo4%DrJ,T$V?[VD8cThHO-_L>$:Oi5DGJ.cia3W-+Nd`)KkXXZdF3Zcn*rFGc:[PL75/khlk)?%n[*qc#^*b[Wk01=RO0Q&/9WGhmOW6eC^A-]4q"rqB^,tbmj71/35O5DW(1)7E2o#15`MX+R2N!6V0A<%Z[+/2]`?)4rp=^>aU.U1]G1`TN@^F#[",rsom=!25a#s(J@l%`@fQ"qPj.=^q5J9%erY^+CM'lcC/[sN@F@WGnUM(':SM--.%QGTR(dZlJaP&_57Pa?:0oGtPTDV:X)6(r[<(t$F+0=7+LE3r9Xg,kaEW64^Cs]oZq<+B2VsLO(IHt0_h%bjf&hsU13Qj(jI.;\'HH2G&Z\k3l`3dlX$QX`pnO:\IYrFsSp,UN87aZI[GQ*6[<.&Jk(a5B-U<36?G8*dFKJ(4kkf+!HqXj#lrn"paom#iG/$E2OnYORflDq*0s.F8Dq<%HBHI"bKCpM/0EO0Bo:$,A=MC/A:!!#ijR&lFO=#^3Mh/2GP$7?JHo4ZBr*dF0'qW5gMF4@=24U^r)#:'T(h,ls7UIpn%A6>54OK>d]V;NEYOM6fgrVDVXTn\]VYR2JHLt-Rr?#d*%Lrnj=RjrZL"m?`m*MCqbR7a:VZY;n&6(tXqj7n3P[$],BGSl(ZL,ApP%q*_&0ZAT!",3mM)F0f8CpFghK+1mpU0$a.!#+@#G/3\'_5+a=Dhj5lXa1,(>E959,`Ab-r;hY%W63L-(:$;E^^HUpSH3q\7M!@BHrgCB%Y0dc^%U/$=\qPNMS#)#%=XC"&s(S2iBNIU'2Xo0<9Hq<+B"cTV#EreZhdGMRDn2nngA))GmC_fspZfB,:l(MR6)p!n%:5CND#_,@<-m'G#-EFR+8hK``Gs5oehNgn!pam;YTMT5>_;boOk1\/L$?i88<&+uOFf/)&U,SLPS-H4PBI.>0(B'c]!!O-'q:DDd)$SRJ7-mlITS0-dMGs>3,s/!\`Z\fdB9D>a80)O2&IapR7=;n8)"3^->0o@#k^]BQeEW/a_nrq?@afb3e@uj(LQX5"&07Wf@iT:4B!2VU.CpT[VhRS%jVV9<[JG=nm4c58D+ts/=-p$3f!!#8Nn`d$Frq*+l\`T@(0>Dmm/[ebpTnSBMdeNuR'P3LG70*CU0>-ku/&r]Xm./=Q+61ud9.[@8[bKYY`uX32e-.%h\/FpnXCO=tU=Rn*QgR[+hg"rIM3;em"o1oqt%Q.H@pWiPK0LQ=Z@gmXSVlcWn:K^Ws`:*?7.almf23,Nd488LNu\[HhV0&-1W-PX+sJ5PW'UIe9D+4*U,L]mJ/$7?]&m8k*kbg[L8Rr8X)IDRliSd`s,B=*`S.r8JO!B$K&^[r1$57j!.9kFQ("`%DiY>e'b+gCp>gm]hpAhKRk*,78hojd.p^FONJSq9KXaB$Qq"b\*-AA=$nARVk^r1@\DYo#`K;[r7m`q50r\3I9r'%3%2N$d1qaqWXo]XL9YKb?t8>-U7FKFZWjRY'"j[mbKsMo&TFjg9Y;0Nqr;0:Ra6oSQ!7l9I.F0\B)UL?SWln[uR1d]//\@GuIJ\FEf6./Pg[Fq-j&;gK)2O0BH01NJen<9u\Sf[%JlFSCr-RnGGEp3C.[n#C\`JYqT(qi:IsdO3?C?YGU/*uKj9#oT;#d"IqVHSfXf%73-7MWoTnsl`fk6rUktceT7IC'RWG$@rSiqEUF8l'os'Ai^Qg;?OW/i'%pS2ep.R#2C?Qu(cb]C'Ds8ufJqem"V(i8MS/-V^%OnDM->2t\-3$DjK7/t%T'bl[gGqHC&h!5Q'N6K1KWI<8lWKaS^JY$G6RjA]-3XB7BQ\T0;u-K8UKsHLoB?LJNCZ'hphK'hqHnr:A6!p=NmHk0;*CcThFl)j=pb#8^1,3gG`J.5+f-+B_flMD@nPiIr'X*&s&BAc&W9]?9i;DnVjt>&uJ7/PgL96Q^"2b:gW#XQ8a$Zb?@A&b>V\YJ5PXbr:.Gfk8uYo]X]P:cn]\J,S\r,tf;*kb3r.8W2S0^\Us9VmJ?0rp$Pfk.W*cI*I)Nk!519XBW0:r\nInF7u,?VUj3l5FpcSW7B\^baC7)heYtZNZ:(-RTAL*RG.f_1VW+kN*rh6(#?QMpCDcK_q&/=E9+Y92Pt>@r8Sm&;:"n26Wll.94RbT;e3kF9Z4`Oi_^.L=11a(pXb=!L2JnmHIPZ7Ou'2R]TP(PS1d-E&jq:82epY9gc8a@#':7aR.]p+gnN:M,Un8rfm0f>:YF5eM?))6!.<-A**\(CZBk\3N^3d#%LAIpYE;b8D^[g!brThKs1E/JZM1,pum(C=Vf[RC&`-$!iI\aiqu.AZ9;!Uc.=XD0):%>-qu2gprimLCP?IpnmQ.UIRfo[-?%85L#uR.m;^UYKOG"%7b2D#.1PFm$J!T0j+mpUnj/Imp?#,PQPKR*B\R#bt*n,=AsJ\9>8^DlZKDaAh)NGAd=9^1Tei/?ibF&RAQKLL1l055dVl[TVe:>35:O/JqSIpoZY%HcZ!p-/4S@3&l)S&&Ek]e6qf!&J!8e[9+;2mTD\m+$Nq%QN&:5XW`#=OOX\&,pA/37[b!JgJQAN,;l:L2:/kBa[3Z/S+C1bhk4=.0]6#Jf@oET+,UpEU/ln24P)bf3Csd'!UBLnco'1lA958,+Y!kqI-gr?!;J`KY`XaBq7'_iRItt76:uDWB?m$#^+WfWfV:Q2=AmNb@EE\!N1pj2R)#;eeHEPG=@Tcgo&+!se*D2-fD",lqF`r^=p9n@A[jS7>annO:RB'0_Z]0+h0XY88-q]C!%[:X'G6=]Gs:C"&r3#7oDT5%/="j.)s0'@YN3[&`7&uBO"ZDGM;`M]>W3]oIb->)T0E*mqUV)$gPVoUK\kR<4''.b+6mkq6[L+_Q\0G2bT1@!i1t'h]*EDGON9+N]Uu%>sAD%#("h""rQ3gBW%Z#$#CZ0m'63mM#_o$<&CjS/`0R0)$fjRWG(;Shu)UqFaHHt'(R?!8b0CjJ!F4?M,2uRkFK1W%9H$cEpD/R1gn.O"UQ`$VSc2W%=_E#I!iR0WsNI;:7XFBD8O&"Ln:f6EK#m:9q+$m0m7h72IUGYqi6'i[F\`cWG#AX'21j!L_AU\#g49:%95jib.EO%u.tqA2iVY$G8sDuHbNZI*]61Ki\C(F9M>q;(O%S+g/0m#Akq1Js6cV/5e(s"2bT1@!i1tOEJrhlJHJiJ9W>LXHegmf\ct3.h>G[,IJ\2e-ieYPm+f--+]cJ!k/P>(fiV/"`'qp!o[pEY-(YuF7D"G"V4rf6lDnrOrEkhVODi1"*R,DQSj%T!p"*P(WCkFAMAiX>m?5PjQHol_R58LN:BV0*U*ZqbNbO!3<5[Wnpr47kV",Fu-ZM[@=<@B5YuG%I9dZr9^//b!Pc-60Xf5u8bnEc>s7;l_Ufa)A%/Z6%B1k^r]VQlR%6QnCK9jRO\l-of]6%a]72,Nprc6Jr^*G*)hjTFgkdUPK+K(NC9TCoIhRqumg:DFmJcuPQ78f3C"CnX-d$7?C0l+R#-P,[Z$K/R;BZS(N`aGR$tB^9WE2PsVcf=FTr<'M2PlT[LZ=fH*#R]WQ&f:!^>frd=k@QDpA324V^J!O'@[A/m.js!XVq:TDQ9qFJXr$C>qVP5<Tq!jhl^:CoT12SNpZn2(aVkRnsLgB`AgR"k?`,Z/MPH8WRY[QJ^b=>Uj]-t9:9M1(fd?bD'n^:Ke3KXH%$%m#L?Ga8Dn6;Ws>@oS5"L*AAZm36A]s+p5@1h#=Ks(K:nE)07%M.D&a=6a>5.=9-.-Guh6p[=oq$))6!.^]!PYQ!b\PT^CY#S4jH2qb>e!VQkNL$o-Ba70*OMg$[OYXGb0sGRKg/k\dFst"KjF"^cC?oVP1AlJDD[>%IpluAWG(UdXf6!cRN4B@XuS:I3Re3lU.h_OR5!a)CGciDmAQO_Y/BA1(27D"4DWNLP*oW3(%$-N!Lg!$VId>Jh7@al/h5tpIKXa%F=u^DR3gt=LnpZ4WG&iNp\OX_7mEID!8Pp6=sV\D:]D\Xe#,u;\s+m%ECG`M&elX"95&bJh08&>6qnu3)+[3.MKPbi$'S8:8g^Q0&<^Mq9pI_\_Q$"#$20Mselu_gWG#2QKZ)s],d"[(HEg1BrcRlR/ces5,U$3/JJ&SS6hH%i3JB:7rK\!F6!(63eirleK*f#Mc=a?Y>LJVq)g#;"DPj-SIi5cb:aHSkGW)k?5.(,9B_u$d\P+87+\24d9cjXbg`'1YIkc1HaV_::9,-`?C\^O1rrgt5I4"NS?8c(\h:sVhg89Irm(o-e:.p,rls%@,Ig3+P8ksFPK%5Xd]2l-JVg1s,7`EIht0LS4)`ug9RnBY=_1/W\qZuf0`uR,Y.K,Zp6BO;HI$OUl-:_*UR>L>g:CmcDpW?,ZbsB:9\4;u0#4VFW?KM=DeH)LBNI]8Wamu`!OqgRM*6u#[-J(G9L[ido?Ed(=,*C"r?G^g]%aK"8%,>oftM4OWqm-Co@dOM<)@@3!s%3rB?m#=gi_u9Z#]jgECKID=sm+;9H[;ANnS&r`MsS!:*acsIa5&P-=LH`UNj]%SirREVnUZcCR689NZ:#ti4\mA)u`+^7&1JoB5/L%"&_os*Z1;NpHi7SU1Z.K0]1;aEf50'/BjD2N$h0F\peJDOene6mf%1VnE;&bXJ'0FQPU-+DM%_[Wbbu%O!!$tLDP44WK$KuQIqAA=iJ)N?qRu7[T^fendstream +endobj +21 0 obj +<< +/Contents 57 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.1c75bf206878d5d10d8f231043c1f17e 20 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +22 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 1754 /Length 90582 /Subtype /Image + /Type /XObject /Width 1241 +>> +stream +Gb"-VH$i+!!)LVkhESMbJ1adk*qEKl!(T4C"BAR\$rhq!,c[l2/CcjCh*8/HM,fi%H#u#hgFJN62a$_s8KWgM6dEj!!!!AeJ9]+!!&*q)%f<.+u1q%I(\f#7,Xue'-9RC!!!!]*M/]JHJlR>EtjmelKiNh`t1Z?!!!!]##@r-h7nHS3Jq.UGgY4)qMueW!WW3#GRQ>OMFL*+n,9_OL^8?>Pd9Q&V[j\&W*?`K++3Ro='pA5ET4oh#7oOUjnSB+C(W]1r3JD@"pYBK@lSl2YdI4=&e]BTg@`>o5P49nn&#Z#m*_`Ri5(%Yc'fq/P2_k:!GHB-]W!6sa2]i>]XW=_m]B^&roB8=NZC2nXV8h(F6:^2gUHWA++5ERn%S\%HibN_NXQ=)]Q<72MIS>bq!d7ND;3'j*W+rb?cpD;IEIJ91M7aiF=>+Rbu+,fDnji"-71'Wgpg3bUsDf,3_?dg(+ct;ku)7dR"d7t\T-ZL?5%B_BP=?<-7LB8S,2'ZK:nm1!`F?BlMkj5XWdY1I$1?"0@a_)H)V`%]B?A]pl4-77l?='j:`9=?_%HiO*DdA'2J04*GRYd7ug/r@]q/2%CueZ5%G\$rd%?@(i^)29D/CH\&[W$Gh0C%^cA(5J>9CY%@UHcO+EV)Z-[I*mhBGL4U"/!lr!4rH4lq=ebaD0RJ,?BOG5@3O;g5q9E/-HLJQA%)nCOX#WE]iD1;Q<[!!!7EDA3Nh%@+oc'2Q!2E9"qII1L%PU3#MCc&sB2rJU*lV2N;mkgll*U%8*L^L+EcRCNQN'Kpg:CoUN@)*`S_[Ej6EQnbbHY4d'>ZtN$N)S:7XFK)d`BUBZ87F.c7Y-B#foP(/NmICYuk>[C#u7!!(q*:5ko+Dr*=CnEK&rp$&BH8nqJBI/2^:K*rAA?mt6o\[0#6ZpiBHYct33ZPj/rSULD&\$FeC$PuG)1`&]pGqD5Wln_"35X<-NYJ4rrJ3JjZ:[@]Cn>K9`Ni]k:5%)0VpYL8cfk6p7e4=a`8,!GCY?u3&LWV*ipKOh-^"g/>S#9;g=>,ace)js$ODc0e"QNCtZ+Kb$)2f)/^!")B*@H?kSgML[+a.l!rqWDV_nhKq"Q9c'gL9eTU<3;-keZ\l?pprqq&0Un=J_WD[BSS2'Xe3DnorFT2::mi0Deh7@/-Xn!d@>IRB-.=M$RQfcWWLECt!oOa,Xl3O/4ls75Hh7\/Z9MCE+bs?sd8Tm"9.)A#u^1bL2-sE<2"[e812cr7e)9fgCqda\:Nuf;sA;L%G*5j4sHt)LW!!!"L"$%lh`l?#EH?pLP!WrPL]h+_NjFt$ZgR?=PJ!eF5[;-4_3HO>i=LiD06:9j15Q-i+asrS4XPL.)jiWjCii,kS>-(Ck9[mEF.S35VQ/San8WtKhQQ?bP@d^?qUIKtnM1c0A$2PQ]'QluBKaSYI0_DeaaV&[Vb:gVH.!+_kD.aQj[MCW16fj1?/'O:?b*=dW#ljr*^k&!j7E:H2DlAfBAZ`j.D;+2(ZY.U%5!!D-'Q)R2WM/[RO$9kZ>`!0K$5Luj^Adup.B]aFEje,ZqR!Z\R5SoNU&OrX^UI7VH1PX)907@c4EKZ/K*Mq2"XQg-2"XhXDI&0+mG5D+4Oi3!GO'#qL,`t@O87@#mdBLt5s"^t:/;SkhS$P?Ktd)s)huKd=gD0-VuZku!'#kBU8U'_>.caiR5JcGU%m5HIl5a.)+BaPP0DMd>.b,?1#F,Jg9k_)=&o_L37,\.A%i=I^3o`C6UP_7@a3#Y-d>;V4aXWV@TiF@/R#Mre`t$_5O?q$f:YE^7ZAd0'k#7(iSIZmOa;j1h<2a3,Gk:(Bk,"\0EC+$mfIo;1;,g`#/Tf1%/Ldh+za)Xcd]m94HH0;q-JHD[MnFQ6-'[*]i$ahdJY$Sfq>k\*ecWaWG1XA0n.%W,$K'eiro('*[&5l6ab*C5hd($^"96C$iM_B[6JdaS:1?dW1^L:G-2`L>VEU@BKERrF\I?aYC<:f%E;(HV\(S0\:C?&-l,^8!Y!<<*"^u:dr7AHTObWGj(,#QXi:ckH9r;#s5\`g62qTANSQ7Zn-Hj5!CDJh$.qV)_bZM[GnN*c^G*?%ri*ZU=1)Ne$Bei!!!!=c7)W?iYebqU45_4@V6C_G[Y![)")i_?J2>YX4m.oX^Ah,?bUp]0=O]I3YsDR0QbaC<@^F>_1DjX=h6KQ&GOF.hcMChNfH#Y;]k!=r^E_FMPb#ZY.VLHYD*YJ)b.(`kW".ZOsX%f`8[U&Y/n^sg,&%s'1"Wg'4>j,ZE"cU.#XU)&g=/R>qEc-(6G'\0g8j2Qle,I1k%@d&=.fWeV>`J;"jgptm;T0%5_#RUpm]Qs+_IJY:,8IE(XqmO5Si??LO?SkUo!!!"D3]JXIG3I;h:fG)Uq=H5fc6t0"'IdK>leT0sR[9L`;,eDnEhoE/5(39@;brrFAR=]k^AH2ZDe7+X2&%!I/aMm;kL_GV-jfqS!'D9l'h&oj>%HLi%hB2[f\su<.mNpt1J(\)B$=AbC=W%FgLF]%$oR`K;=jIGKaJR+J,d7%7?8?ElH:iqr;QT^kKTJ4(`9bqcQ9uV5#WChAO2(]*Ki:CSj3)8UDc")":#1dW8G(&T:pa;U;!9oR50KuIt.L:`'eZJ(*;.'$LWk(oUnStW5n_1M4InbP"rLH*>'d6ph3!!(sA@#gsq@!MIASa"@GlD]%*mC+;a,.&6pK2npN1"=^O;8_1YrD?O]6^^U";4+Mc?()G\X2?bX0]QDRBGSiV#::aR?*d@s(D^:sG9M8n`(S^WqE`Pk"?r:>XQV/4MO6!A"eHLtm'"qAeW4E]pg_a6.'`&[=F-Ahj)!!#e"-UuL:KS6@*X'4koGk'ds^%PXg_M-6uEob=3pYUIiHV7?QQ1U2#GA_K8]=WFCZ=POcW/rB&*qRmJ?@'_@*cDskkkau\%KUStJ@ldhq-S*%q_e(hL7X)!tM_Lr4.-Pn=9Y[PG($PtFk\O2d5d@s'n-Vp&Y=gDRp7!4D`G]='h+(2)O3Bp25MN/UHt$9k^iS2fKeimOo21M74DA`qC32uJfZf=,PI0#KV]O6Ge@=mPqWlT8it$PtF[%S)KsAS8^Sh+E*d3cuE"z!,3P^dDZ_o:X>%A4!$V8gcWcfCY(UilBESf(;h[,$Po6rICcsQ.4Ih$W/m"#TjCoW%NR#tG/m*#1mE!WqrTc0LH7=eh^i`4'U`O?\oUUIQ+O=A[_dr:8#>?+OMX70*AgJ1#o*U6627P85fXm,?p^l03KWcloO]STiqQqMlRXRSUt`NfNi)o96./UXhD7`XHQ1;52#)oB-SU&dhUIXW>*7M2;NL&&3G`l6GUloYuk0npqlIIf/0BLXqb8nQ[#iUah:"1rTJC,pgZX+sS=2][0PFdC*oH)VTE(hC\-@4nkIl(44V!n(P0b;Jc4C:AGQd:G4Uaet*ARIEP#U!!!#W8RNd#MXS=[?D]W!hH[`'$O]n\6_][]qEOuS6OI.InO<+O_G7@F`M@(oVG.il[r'kXGOA^a\<%D-\T27_=4`EN2p0m:O:Z\CUIG^I(SX)c5)Harq=VPV-6F[7aE`dA)J`Q^=.6ijj`J9:%8F1R9Ig7QqIlTa_nscoRN;Ic\]eX[_UAeubu"aVm$NdR<1VI2%rGfW\dOmEB2b+.pB%#O>I(Gk'eaGtPrrT0L(o2>udF3HF2bF258&h>6cm:NP[BWQcrcn=DdiXF7P.U8[u-8:,mh"n[e_f>;p;W-hP7l"M@k=gFiN&_^2e?^Z62jN6"[HVG6b\[f+ch-0eqJHPJS<2icp)Ns.kDf9P#+K%u*.T3'uA=9Bp.,2(!kf]/;O1W%$GMdhXCY(2\1,?HKL?$=8=#CVS,p*jO<(Nn/^jc7TfYJ:)5pu@E8>gf@F6mVRDjJ*bVEoar_q]q$A,Uqs.XddmuA6p-X]mB>se]N(Z6%6e1(#I'nKfZ_[c[aOpdkY)EWcU"-aqT\rP"bOg#JT56PQ(KCR2V]o?B4*n2kg[ORJoQ`JW(V(`91YjGue8p<"nh89S=SIf6Q`bGnO@U-Gj9&4KOqQAM=9!!'fu^igD,2/:X&!f7Z_\n0'Nnp8QL2)[LCs8D\gk*KG(H1]F&`f;'$VKPp's894IQn)5jq00rD,q7EGj+@F<%+&1<*^)!p<#R,XR%RV.P"8,@)-OLhiIZ_B8\5VmjK6?9WR%/!H['eF;DJj@?Z[06-mp7HA?G3qa':$tP.,)"?:O0"Umo*+^Oua;Uh)n:bYH1'[2Jr*bj@tr?!DC#uoCLEICu)[&^,Yd;S#Iec$$Xi_If&NA+[_"FcCMRhl-a4iSC&fb>RNn5;lPc'0YUjRo?P(Vig>Aq2dR'BYlW>rrD!L]'ETQV7F=GU$@-l@(p7nEO&:C7="QsPUV=_Z7I:tsN%JhrXD4m)@I4Q917g(%[cf5?>RNn5!!!"j"=Zf;fkK'D5a*NhbV@/rP>=A^8\X1^?I,#qa)JQ8:6L!1?!Z""N/JH'9!SAlQX5hIFZU_*`"O_[Y$&)#?C*0DY5c7:X]e^dHW*A\*^+i54&P1!8u$hfF`/Sn`+,&D%1h,C;5-IE/6UKg:I"eW$C38JVD$T:J%lafDr&"dP'gE/@Rmj(o!tI6hN%S=7asD?ci&F^NoCFJ"ilbAZ-4Q&>02/I2'*P>:,4/!!!!pJeXtnd@s(+5i)J6j,ZEjf<],9[aAOD`f7C$W,("fQ.L0EekO\V@U`eW4G=.Z5(+LCh_S.V0;#GIt.K`.p#pOGcb7%qWOP9$$BOU4_nK?D,FhSUeF\4KlK\5Y0aC]_plf8C3:dZ)\tJD`!E=^4*KtcIn*@_^1F#e!!!#g,d8:XeQlLhZXak*?7^#!ZtNmM\%?kQqYL&7H@"GZFmDoqFar[r0\.;nOd))PnDHT"9>,ZE,^nmoll0lUTk+mqe?*EnO80VQEhjI>!s8YeFb^GICij,@MH6`V8K&$KFtlNBMQ/0T%7`k]m+J.&d5uR?aD:1sdSqg>&4Pt(YU2OtId>RerVH31OX#XNS(mZ(gF\`ELnZZ:9PW4aTq,t-NhVDYn)<6aOtP9:QfYhXm4)8r^OKTtXH&05SN?Gk^S@_jh_J%C!!!"D'%i#7&p`!_9%>Z"8'+oOgY5pFQF6VEW/&.#qsM("9@Kb4V56t[4r3I^:S2O7Lf3&Zkd/T!dos>*lR"2.7Z=RV((tJ[B(+TiqF:,`<#%htSN8(#AT_g2@PNa`m+>/Rf<&7iA&]4XW*1YK"%U;BH1P9_f8:=q>#abrB;4+d+@?jNB>A+/`:`EGbMlJ?;,kf=?!s/]>$-]WR`h$NH[:"(.p#KZikG5qXs089R"iXnQR>t!WW3#:BD8"]tD#Sr^674KM[ro,Vg5)"XLh]qJ16&RhdSZN#O]nk0072L(.(*L67G!D;-s9rS"YpI=-EQC>#n(-0S'o3q\t\^/;pT$PY"nA&f'ZG2pT%kF[61,)5p=XqKjOgtYMe.V6+.<$V3*nr&I,GOOCO`Q!r\00QArK3Aru#ml_K(G8s;_1Dgq%j(Z/O$D.#Bs]:!0oAS8e/m'f_iRP>j-TD)1M9JM,hNg+W:iK?t4nm`Qnr8\I0k0b:bnC&+rqU4&C?3i"g^[D\U8XkSm>jY!kLQb>kKTJtg1Ah&gppqX=r<9WWdEKDl-^k;3*>0Z?soY=2:h9U_c;7=1i([D0>@4UN)mYMq%@JpY,tLEL+&MM[nIJ>!!!"j"=f;oae$8>T3q3Pc%#WX2euK.DVDHh$7%NEF%HB-o#i[t5Moq`KV0ALHMI@5CA#,YkO-fsNs$,uVG3Os[hC,ae7pmXfV"7n.2(!^%NVROUW"YX./C*K$sp6/RS3L,l`IYgQain07E*rdB@UEeeUn"-W2M*\dg^[C2Jf>k'>Ppi$)\e)FO4B,CN2Y'5UH7u]?GNbe1#_K/71oB7ZFbYM2E#u9&?rKfpX#F,(9=_pf+A!LY%n(s=+l0[l?odhP4gph@XiF@_=nn/^M&YZpD[@5O;G21ja78s,MM4stM!5O)TA0OTILCP=[+$$`"njQ5GN78df8)cds:paaiCtLG.Ii^,8-XfD`fpOX/oHt]X-pBiofWepVNZ>TLj$oJmGN$CB=nIt0=)?CA]QmF>U(\nLkg*/8mIor%&jd%'o1X/>EH-!(P]X'j25sae)7b,8iSibdLLE0#>GA(.]=WB;rqq&@Z$$L+K=$'Mz?pBK1K*Dc?4G!-a2r9WE\psa/B8m8_-W*imE#AWU!!&T1=0Gs'p@cdo,KK0(Zd5.%F7A*Rp&#LqUWso!dY0(V!!!#W8[`-LNfk\]lE=i:d%EZu9T6_mFns\cCAnJE8U`^f<8PlEi$*4!<<*"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!!$sb(B=F8!1B+Yis7CnobSGQ!6CDW#m#S#N3*)MLaWT1R2J(0!0EVR'n?r070+Me@j_BZ1,H??E$E=ldAX"BUWG,n\<,EiY?nnglI79Yf27/l%iN,c&Qtn$oHUE3qDiQTKVQNk!"QqB#QSCIC^&`bG"0j]#7esM(*"<1UTA+SSuT[3$PqC0,BWYGfiG4YA^-ZDB$?Da91VU0rUXW_`JYP5($XSgH[>NKF68GHVek%lko\H=,tlasY]fD;_^%gcC/S_YB_iMJ+S2gY-fj7(L[l,NgMaj'=;`2&03a;gA&\oo0OXD._*@qoj.8D\m+`j4,pdE`\8fHC&H`7JS2bNJTgOSdp:kqHl=%SbIIk]BbEa`lHhX\R-9OD<_Lr4NJ5N(28Vb`r\L''e;AKiU&27tTZubEUff;BeC\$Q.K*De]iJ/Kb+$Q4'iQ9,(J,]AL^]%EfeCsC[<)f*0k45QjkL]bW%>^`t,!2R`:I"fR.[rA8DPJb";=r$b^Jo9"H?tl.=n9m's0R:4%.[pudH@-O?M3IBj`TY*&cJNebEo8$Z=fI%"Tc\,m+_oXIJ^HP54cuS[`]qs55X]QlK9QcNZ@KTmcnrVb*C;E4_oE$oB4H7p=a;^hUU.V^$+%L>@M'9k!QhpkLHM?6_.gM71#Y[E$he>cM!.On%">6:RAHfDsM)oGmjEi%"QqWk=,5CQkoarp$%Y:hJj)=8N;jDch+Y6"k7KS5#W:NaI'!RaQ[NZGM2aX3ccZY%WfZXuq+."I7G'SR2\2N$32S+pjT[Y9EhR8`COYJ."t5BZ7U@?MnG]mKKkhnK']l-hOOQSR6.1"=;Dc_#^d\S'50fjV*Cj,kQVA5q\!3=Shb,.G+otLD@7c9/$Q%*\5Q?]^2maLV=S2%;>CIr:XPIZq]d?$LIdOP/ldr?'baGe*M%XtA:]#qnU?ZM>3(ncbF68F-qoq(W862#4rqPLaU*tPN7MLOi3Auau4@*&WVcq_PHSQ6]9Mgou2n>HTX5;1buFaB44c#ip\ojp'OldjD.:YKB@65iinPGPUBMkm!%hF^:/Qs":BUq;5[d64l2:BD7l-m&>=qm5VXBiG=/PG0MSQf^UpEN=Ld\M^\&^)Kre61H8d/p4kp5@Q&/]XKOX3polT`DVb.do%CS>f<:O#LnSm4FS4M(Hh)L3VG6WmDr8:;a(')QdNqsrf=0U_bL#+G<@d<.SV!?jnAL5<^6gKV2T)FIA]b^dR6#JjHFmV'L7">FGsN,Jn/)^*iC"P(79?TpV61Pr&1;a"dZ>pq4aOJ/SMk>RKM@;kWmNn284^ge.p$K9WhgVF-U\`=1M9I./HJd3oI8`oc1:;7n#Atp74!_h[tP/(Wa36FbcWScOZ9<\*Z[+QPcDio2=&F=^T7UqiPUGO!\K:%TT_f[,BQMkYXhF*a,V/j=KnGknmt+H)Duj0f6?T6Z*MEUHhVDlY?\WDb+[N(bFCS6<6L(0,?0TfkJUP]U:,Ci3,kOMO&nctEokHc>jB2,^'cSI03M+jE3O^X.=TYE1)gHfd0C1'<39>(rT;;C6B\>Go':3TPU^nFgl\3jq5Mk=lRcGU\FaU?/6o]hCf@G.,MNeJP&/+e>BT.Qh7@_<)Doh?-Vu]4)`MZA0c9SuLndJ$2RLf!2+uY7)e@:ajJUa$GJ:?E`/,/UhRIQ86T\-Z^gfVDKbJ$2']$EIZ[1B1@7.0ZQX>2=NS9f'jsV_PW^V6\AlNtT/6T9SHE/&o*AV/]ILHr@<,bFC)6Y;^MjJUI))Fb,fX5KrX\f;O]mKLfIJ^$`WWbl6HJ0Bp,]B^&p?gVT-HBjC+!5ct.p"@*TC_6lWrnn7I.0G'bpZbs=>=SS>GIpkl:O/5qoq(W`7g0E[;4C&d3jHSN+:"("ll+(lu2Ac8fqn'GN>!0)NFQcQcUd^1Wg=2E?>=sgl7es`_;=32OGN?i-fooQd3/aLhJs.NU1:/]PXjlKL;7ZIEGqs/#YG3im5D.ZsZCu)\1eu5`*'!d-(Rs^L"H7M'2eTB:IaV(+RD+;o2D;*Y+\bX!/7RkDs4,QWACtkk+,ggU1g`5C\.T>L^3)B/OD\^3pB3%NIH9Qo??=VK1e@nnYFh2JNR6.[2Gb0(ZCHr;>W2f?jsG54RL0cbk1N%'aW3d"=V0)RY"OY^XqP_/Gc`uC?8^]47.g;!OQ4*u^+r:k7\DVDIsTg3HDhL>?=6T\-Z^gfVDKbJ$2'HK,MS;VM&$.W;C.&u[G=JTh"Ud\/6\Eh1SjiWk755S#:.SfI4rpTktpI5M>@g-+Z(L!81I$i*[?+X(23lnA8[AZKM'!X?iW/[Ap3#d0B=/Y>YW;->chmH6X4_;FJ;A?ODRK29/0i:pAnDV:BIeuiOPhDBU>q.G>HhZ+k^'u,G=C3`'ZtRj]lHC#2="h5U6C'0*b\-k9ace)Z^3obm=YFp8J\HR0)X>k,'shQ!ei-pKHIX>;XID`%pVf#f!m<&E>IMc;T;/$)P:'.lp*iq;fJC05QS,gN3r5iTA$]19?';D(0_Eqo:EO:X^OEke_on;qQi*!c3g$B/P'jG56T\-Z^gfVDKbJ$2']$'+MgAU(8ei:dRA6^l6qI7Pl`\n%Z4TN8@Uetjl.ipsZau!2j2R'gFa"U!QZFX>i2TeX+O_)pXYE=CffN*XOjP4DP@>4hIJWT`AEl9i!1B@PU?K./kN$8MIX*J>?+Y9^9Cb6fD(O]An`0H9jXX6)aN9Vn/Ja9d4^'mLZtPT9EV8VI0$/=E;fD-\]-ggQXBDn/rql."4'B%1S^dE!eP"d:*?FO1r2;/^@sd_'JYYj(2S>Ic'e7:cY^/^:4i:4m9%#qo<.+]@kL(1]'P-Et-jnle+H"$m;B&%T=0=[;&p4DXq$su>7++D5T0@\9]Y%cfA)kRgWl;suFPhK;9m,r)U/ToZD;2L!2&;tNhgbZ3]QeE&T&$u#di+8f4/Qn`qqc\g`?nrKW@mB+p@d@RF/QCdrf=Y4Le4I'kGA:Vj!&=jN7FA_kmn/\+RcV_Z)^[^qpe[Nu+i!EqAku#kHL8,lZ=hL4kg1Jg25a6BQ=')QPq"(*,cI$I`5J*%CV%*gC3S?r?Xjo$q6tY_.b-+f,s,n%rVQ>5Z#j5KY=k370)pB8Wd;O?p<6?[L8Sp1,hkVeP=q5pjiN]VL1Gc*.T$nq@mC`^';[UE=u0sFXB8-c8"uD4+t$8t+C/g6;MTX5*\tKd7'L3S4.Z/OtH$s.Yr+J;e51*>YBdJ&TY?udrKF(;;/=AG8T)@HFVg?IgZ,AnCrMp=_V6[9N>"k-ek`YkYPk&%iFQq5bFmHX&%WPgfGYrq?--oc]jQP!dWbg4c":m4+Yt(fY9Z9ltKar8>aG0PoAq=jrKX8*7sZbLb?IItFrmiB9dCVs;i[qnk5O'+2-;'?m,ffdEE1T*.+K[W0bpd6R9(.D_B@X@\1+aXLkiDm!`2)mQt?T*3#jJ#)$C'Cn=+t_MJqZC>ABP<#&%9*CO8IiD=o:R`'N.!6S*as>+=+$Nq8*9!(Y/?OGQJ;4XWWi:@>m^:H!rfg]FJ_Eg),RI(T[!#KShVlA-beEeua];*D0>pB!M\Fd%3CI[!OM.^je[?m"?W0,Y55)QmUK\P*a)`O,o?_8>^l/9,^2e73+L80XW.$Z?3)fm&Cl"g)U;n$n\mCis7CnobZiYs-3fh3!VMg!0EVR'n?r070+Me@j_BZ1,H??E$D#)!+]^.KE+8L``<(76kffTb`&)(!6EC:$G_MbN1pOe*13QYHhQgFM\g18H'\L(#+c=>kZWVaJH.!)Elp.%JB(./MCg5?YYZQA:5cUIL5$DVUV6rLYr_eo^3,8N-*QQkob\&GGRGS32)&9URY6T-[,Gq=0dfIXZ`9NZ?FRmbbe:Y$F,sFi]k#S(^>&cqA#\O-0V*M_DfC3coFaP8BK6=hF)1jGj<0>sM:)r(h3.")WGK_tN>n5LJqP%1`u9N$\i`,U=Wuh+G:ieZ;o[cC6c]iPUFpn(o'IGd&`tA&jV\\m;pkXV;I%>^5)9FV9dI2:X7sMA;?MgtQa(W0Jo/mJYk%GeaHHW3t/@FFDhVe+VRr[<*Sb*Ba@qJ4EK4dRg/ef#bW+uXArI-T4\o^iOlR=Unj+[JC[;VAa1GCe!U:hmmeU>IJ@^^:sFGK!G]EJm,QsV7Bg(2F&KVN6p1(rqYa;`f7=UXkGZ:#7'Q6CXf:+NOsE'lm59`gZ7XN4Y$\r81M=uG,tb,FUIUB2q>g[&R)^P;dQBDfGbPa<"KD.G*LeDeH*n(=li-7249[:?Us#7jSe4rOD`jm:b/l.ND@<,UR*=l4K!n6p$Ih7C#,hR.-c]RK%7G769n04/%7NGm[dRC7"PRr?"iR8J"!S_H"ZQt=I,Bua5=DV_lq\*MVIPLm*+OU]cDDnT_LYuRi*;PQttrql0!=05Z&c`1IEil+gB^OQ8?Nsu)\-q$ol;>R'Ol-lQD]Y)bDYcofqOj/*D6A8A?X^/P^Pq#e`eIUc5Vl+:RQ7\T8[s.;t]jpGfU8LbW;K(mNW?[W!V[?M*<2jfn^+RO*&8R92LZ>^at&O9c\;l<%Ge:!LCDr*Xk`qTX]dU8.\/_Lp@qP1!6o?B5EeG8_!bM-ICL8hYSIep#nB[W]5C0A)fV4g9T$+fgud5,F\BEp\3%jsD!3]K*$h<@8N.m"U%,sS,:c^nk)3s1",_9SU5il-ggc^rtJ?FXt5*'&&\Mk`e'\g1X/Bdfo_Z_k,0p=jM"lW01DbhfF(Zak/?k/ifWqu-!3V9?Q!pZrd.o"Y5':M+Ft[]Okf@)2m\h0HGt=gM^3qq//`/Tu0qaH;uQEu$9,9J+sq@fl]Y,)X6o*"k\Oj0#7SQnT[Aq(gAcLCW_,\MGur;AEm(FNg+,L(;ZP7GZbSZnm/Hf<24o5Pse'eZrf3)V$#\30jAP!0E&i\J+PX1XG.-S_Mrfn*f`1lC*t(q<+B:hDT6)UeT[ZIChO7`S,=O'Y@?]AOt.$$5K!mHhN!m#D.PZW`H6:nHc3Rldi2%^g!O$M5s^]WYVuORP\`ATlSPT7FM2&\)3W93I11k$I68,m8>MG)&iQ8(JtlAjH(eDXB@>:Fj?L;W[0,ECAdks4aZm=eZ+m./R,Zb.erGDmgL563JnS$;FIS]i.DP>j1K[/Be*8f>ip2o5Z;%3HM'>oth(iW)IcF7d3j[;heb(n5M;GLA'H8G8DZ(5_cjij$p.*rF5p0V^%)9M&[-s99q-.VQO.4:>W-Y\^K*]=$'F(a2^^D7N-VAk&%1WkKP9bT`]Qiu3eZ5u]<\:Xic+7rWMUY/u[6KOpH[G)UQXi]&"b7"jk>$iEj?G+D9&FmR`XQX`>.(B(ptE,k[r:/)YMXg+D5koIi?_L[5'ZS4_o&6?OWoMteTDriB$@J;i2!.oFi$h]DV_[4M/(O=Au*5hXr`S6If4SpA^6f+Y-+p-W`5*tOJ+YY@fq6/#>l11Pg1[,M9k):?VUClj,[\m%pRGR5hiGI4)7]8^jlGh=b-VX<9)kcs/fJSdfG9!!0BM5g^-ggfi30UeZ<)j=rR;2l_h-9,UDR]Y$\r84aZlpPq&W.>D[oKDJiOY>g_/FmbCr[euW"aX_2c5G4=G+(8jc^b`s]FCqgDG'e31EF=C?p^&@&Z?Y%QIVXNBTCU'M=N=>lZ*(3X`;/2k>jiWkO-C[2IqIcFKVO`P/kN=390if)*ZXq='m+=%,=h8]hQ7Q0g,@\We9]"5IfVleON=&8DCjia!u\^Wo7q8(Zd6:4,LD;1rD@+LoeVbNX-SOcgc-aGao"aPB=BrBc*])DU%hpnUB`Ys!ad`(>*(U9tf]P,VI4a6=a/>Z%.1>3=H1OI+G!)GAE.%D]n;:M?B\TlIANXQp#f)qJi)kJ,\``X6#+BhTBcHr_TT*r;X]l'D?YIi5#N'=m=YJl^B\H,lRQ7q8qBR,=br'[Tp@`nl>tAf0iN:WelarcC[>9Cn$.g)^^,8HBW33YHMkTA>C]:0h<\"C=P(`13);Aqo8m@:GSXmS1)WZ<2*iq6A8qlA,>i^(GB+E([p1l[pm=6Wm&r@ZVR2WQS2\e3cq=3V8$j1UIG]0;O&_3p@$nB9l8[qZ*d>5IJ$V;`s)N>1861eaNc3&#*L0Sm+;mj*Nc`JkDcJ\)(C_$V'[B169jMpe#0Zmh5WUo'EF57;S*ST+!2Sem/Ht\((2BVSiV#ZaH7]eEH)KT[LT"9:25[K:ClCUXNO!!!#ge8odQ60>$C!hK;)nc/[Q?mc'W1,H??E$D#)!+]^.KE+8L``<(76kffTb`&)(!6EC:$G_MtUJ^[%M%`CC3I;kKnDD5\8B/2coB+#M(EYbai9Z!pJ5pChi'_`Xd/sU`bXrWj*,M!aiPL:/F69F#J,T%A`p>2nPqH?GNVq5$993_B!:WsnF!p&-_hUmJmG#+r>0W'J4/?9WlICpL7Qh6$EH18gDjMGIVbS6iWE--)kKfdHYhc.*+c6>O6eJp_Er5QIorIu,$SPU584Z9"=KnG4'JjgBm7TM;[jR(,mFt]WA0Yl0WnQ*2]Qc0%,67d[Ln\j_oL)R037b-3:UNh)U>O_hSc[\ogYQVN7J'Y?sM9kYQAC[%T"E-iiESMSb4u(.Df,Ti%RSWhj%8HErgc(OuDVf4raDET=FG\T?r6`\5($6FFK+rqi]A1c//]F61Q@hNfQe@e8a,q@88h)3Q47%W,s"E,_4#A^""nil$]"4nkIiL=JpM]bD.pPb(#p!-me*.Z1ZPh7>n)#2\4nEH-!pWR=SnXB?ip^%gTF=qj,Cm$Q#FXB@?-jo55UV,;i9H7R\9dn`3QR5:c7dp8_5%1-_op4r[7`>ogU=6`AD6%^M\dmEm,5^4q=Ed9JgF'UQrbXi0sPE>U=P@o5"`QLd*A1DV+bZem>c!l,_Wo*g1tHN5!D.ps86qcI!k,&S[2kKU)H8onAC"l+0&IC']$!%6i6TE[=VIeI8rHKX]qMJ!9YP`_MQ\P7:hD7Ue)6m[UI(.L)_+IG8+'3B^t2N?cp.;Am39qpWAaOWbh%SZ!.#40>(,[:nc[TF3D=Q-ou>*5V9%FCtV_[L#dBbCtV-A6INWL"oqH"<(0[;">!ZZ5[M[,5@6YJ`ufeq`iWISqYU/f.Z16YO'TA@Q+XPBgU8P0VA(FT5a&,E[bnT7A&Xij+n-,0Zh#-M=Jrdt_F:tmF9Zp[akc:&G$';[UE2Jq/Ip++YYW`?+>`5J%$m>Rc&HhLDjZ8J7%%gpsaSl`R1R3I(%$XefOJNm],n=$(XV>;9iSnZ0,KMTU1Nj.o#4;tS6d^ZYp[X&lKIQDb61;%u:8+c=-n;B&'\gt]7RQnrC#?+Y9JMc1Q`AZ%jFqs_K6pKUNSr*j0s@+/M/Y8o`F`=i8+nX=`$87FclVDVi$/?ZZ#3@J)j]lE/3f&nu3acD4$qUo&YAre>S6o:^Z_%UZ5R,9e>=@^YG<11Z3l&eu--/bSG]=)V(Q*A_;dIM"AKcBLfO6E.FDMV:N6"d!_[U2ZjV7T&.+jjgk\@kAjq5(2-]SD#A@]*)it>:RO(Um>.&+)*'#c21c-X18RHClU(o1ZPhCEUkg]E?LV7_,TU1dqBTRIIr+X,:dZ=Q]%<^kE]SNAL06uD:HU&ZqY;%ucig*eHJ(cup-OKEBeg9jpRrVH0rpUj4;'O@qNJQ=,(W((oWF7SD6l>=S%*VG>8iIr*?;7(W?k/REhekp)R!W^Hm&4K%@Z=RTgOH>RnnDV7d"U`b[=&66%2N!AD>II'Te*^K%n*e#3j[sBi+c<:8-RGE#2Q9NHJuV\9;1D?B=`A>ae@bCu4,3I.;l>ZSLPid".&u`:7F?DPk%QC_USt8eIM&jpF\0:`Z$OU$U&^^A-jh=oD%tMAjq8OL=enS#ebIZr?g3KV.&oL;tL'U@=OmoCGDD;De2H:nqUi*8ZI3)Q->W7\V"UMS(Qqk?N;[.YSjpd$cdo[-04@uD*SdL\jt-JRY>f8><:KkX%>*cI^\BhS"99>ouK]`5sP>)Doh8,GEXs'\*k\5jIl:sVXJSbhGSgZ'6$qaYf5_-6D7n(fS;l8cjSNV>.qCc+HQ7**U\VQu!U@^k$f]5PJWci@)V]gr?]Qs)/;(XS9b`EUns(U2oW?I-?4Es]YaQT%)Sd>o<=#3mX<_WcpY$ANDB?rVNNsu)\3baMHU.'tU7>hr+SND%V*^-l"I2'A7j+bcUXB74Uje$J)op-@^_ns9j=0HLd0$KnMH_fT[O$?Z`oB4FQgD=_lYJ:)%U-#tefsbm,rVH1GDVV2Ig)3=jdia:0D9(_ZP78>,b$0_H'!\i[?nHP;B,%IFUP?L(F[_.1!@^k[J9);kiC)phU9V:6#*g`B1+Fb'2E:tV[g[Rl/,JCJ>ZD9UZh0]s/pf_,s5q%qC!gC=0=(Xh7@a`Z=V5EeZ5/rBqcXRf"QQZRY^#tu6cHFCH`/#"p2fIQdHhYiNs'3!K=]\[+mJ=s4'e2cQkg?/,XB6Y!<^NPS>g_rn[n@!t3d%I@Bdn^:&`%3@WV`f(e!-;EdUX-^T9^GJOs?*e.&e'kjk"oqH.1e1CL;t?,&a\cDWLn[D#*gIkFIZrUDh'G9l^3j'i[qaGc'hEdie>SN++%rG>`JP:K[2pTEW[gB2k1$A/dW4NrSK9q?8:X_5P$;LUE:DdOD&3#DW0!7qY?sNm[R3*?*ek.FHN!\_I:X=kBW"UrjR)sFqqlhr?#:U_)rou=Nu^;oD3d#gG4"#B_hX9p5CVqL/VeF]mQWfrr7ni()::GEU`!#D:6_GL'EIWU@j_BZ1,H??E$D#)!+]^.KE+8L``<(76kffTb`&)(!6EC:$G_LSU&^:CYnI0=R2K3030=RK!!%Pnb1Ub;R@!aXFS>aW!s"jDSIbeBbh*96-\q;%s!c1Nl(b+>[LX!%3)/;=q_Z$V-DO3HO=;/.MYf%sC8p84#XpI(]$RZNl(UkOR`XQS)Qap*fF&_,^P2P_LS)',*1f+!DdNG0VshmTd0$0>@3*e[nERJ;dq":<:>.&!nQr[r7nHRN4J58AXTAWu\[/qG5hQCKK?'FgGZ&-D.EP]6h)/jlXgWkJ7(lU8$^i%LikA:FCASgf_(%ft)=l/5Em*pT@1111\Ja_1Q<'J+;MeF%ob=fX,AA!WiGahnT0ebP'rVcUPno&J:_E8=rO+=gM_"[8-KAZr>r#Kme>rS375WB+RMj6tqIO$PtGFm^Q8s<%0ol,)QH;'?JIiOP@6_X5EC_??j:q5sdn)_1Die5^%c#\pIm9)`ZR5"gX4Q^kZcA"B,9'8N=@S;jRJtKcCeVOU]qrVB55?JKSa>.Be)0%i3[n:AXEj)s/R-_+.9p.aj^3kpZ7]=sc'pY]2fGiP&<.Sc\pjUh`PnB0GL"gl=),a8*NM'#>e/;BSNMfF.qWYNcMAcMfKO'"W%1rP33Z2:*;)g8Ln]pp(/HHT.%D[p;7&oY-Mjja`f1r)R>WI#!)K7e78XeO,]/qWJqASRJR_VD5X7Tk]QkOMTf"]Be7dO@Abu;'>IUb_%f/?gCY,`NbaGe^n`&g"q9l*4c'gMRc>2"4RH>poi5(&^K*Q&2P3'qIhm=4h04):>.E:3"IHo=]&io"3ig)3&lK.+RZQ)&M9\$LegK*HRe#(Bh;l:o>779PVrV#!oo"bPQ=BoOWL(-:.4:G)/cC?oC,2_jtJ(qSZYI22.l]3_F,Xf4,FQeegqm=FAItWP)lDSUjZm(D,J*c!8F;39_#4R>",Qna+q,'L48d@YX/(+S(Bjr;$WM0ZMJ08,$#t:YBK$p-=F:"%*V'L^j66NWH6:+Us'&Mg-n)9jXAp9YrKba3,rp]:0\T;Cq=m+Whe&[6+)attr,<\.OYQt_Skc4-G>ISMD.Yi_3"U,&u77G1bLn]Y7*C>0k8Si2o\g4Y%p?YqOMb&OdrqI]`,QrP&]a`i'@n1KWYeo\T:iN:a#uk+=S`g-77mIl-k.^rO6[ql`\'@1Q(&$G7P#DfWer+7?flXmcZ,CLn1l`J,d6k-Haf8:N(*.qa1pQbZ"*;5fSlQb`f3@]^juTqKaF9d:r-=^[7SsE8&d_$)EhVP`;<^/M`JPCQldj%1m+J]a@iuCnjiWjbVK<]^B$Jamd>f5/9$+eqqrH)EjiWjP=dLaH674:5q#p>9%2q(=d9a51q=dY3KiY\5@*qGkKTg;5i;G[+VN`1\kf+$PY#GMdgM-8C0C8BI5RUH26'W)7()rr&joOs*0s=Tej%mbPM8E36^=[Vac6+4=&sE8cBP$\j=fjN*Gc'c&B)KL-ru(+i^_2j'r@[;FX)Oao-*i^E0kOE==OWDb09*u-;,PWu`Oj+%!sLULj3Q4G$!(i_q1%LQQgjV@/8J,]9,-lb*ZPd^(.&+qKaS^(KtmW`.k6&=`>A<.J,10IG0%F\('6Jh6@BRm.Oke?(AnAIS$c+8kg6"O#n.5!^[WcJ&^#hGDk'4P[LR`gq=1O0;[!/b.r;AVM[G1TkaqokP%l%G6nH$6D(DiuMP`UuW2UsMDjd0=F7:oT'g=`,_*Z+Y/;`c?J>+IkX?\;lC/"_)K`+t3KsA.6lU@K-3#g::.Z9L7X_SND`F/XiahM@Z*@d\R=leui;jVG<\N1M9H&[h6c#gpjV*feOX"I#q!-O`[COpunK6E%o>+*r-)^n1nRtW"Y`c(D&pjI.PVZp$7,+p"*:j@Mcn\Q^?;_hgC(CK/bl)cldOVGP#RI*t]+TrV,3Ec"be/@7:^t[lWiodENlfmZHVNnrfWep%q!d7pYAN%&iaZP4#1X)0\L^KO?u<%-VTn(\8^DCfs8^PgME0HLJa:@-s9F>i5(%D^Jh%*QoofnZs9B\Z=Q[G2=raU>09eOgGmj:W`;\R(IRp@7>g"*rgTu;M?.dl6A;c]csLn]fMS2Ib%@L4/mZ%&MmmKR::j'3If3*!5Tu>&bEbR=Jb5jE.JabG;MYjS4*Qu#`Q`:DS:O+jnBYA`bZtjC*W0*;L"pV(o3?)2(=>>1eJ,[)[^]>=.ELWFI\#$meTgN\2aYYV&:9M/oGGY^%W0#3355an;PMZZYd0hP:;&#Y7FQnD'&J5U1.l9*4o(W:9j@3!G7TdQigYR7!;7&]G%Mlr^SRGr8."(?_[q)dL\T2_69NAm*8mp0)nu3I]l^rRq#td[G(ub7*JaD'rX*Z+O;&"FNR5/>qQ]dfj$O<89'TJ'17*J%PDgY6?ZliP\C`*s&V4EP5gtURf`GK*!Pt)sk,=[/GF6:]oUIWKpI;@E8WCuYO$@[Yh9LM`<=ZLWi<-qu(/rIg-YJZ,+f2^"V,6sZ+>'slDpZ)&#DDF#VDVZ5]U_.->b-s9Escd*,es7a;.+id.\%c,RMUe-bL20j.(m,#E['rn<[NDXfQ\8fNr5ip.RX$;?4LrK5;GbddXO[oEX$j.D,DN%'%_o#J!#g96"S"!X8Z=UXjlaC9A$FT!DD+TbjXs)tROaN?USg,G*!MpormbPJkT*GfD,dT]5oMYlFH"9NfUF8V)33_Ek?+4_-0k83C4Es[lnqo&Wb*A1H]6F9AUOW=C(@0/_UlIi?h0kV&2_o!hLb\^d5Q5p$lri^\HVnn,OsR^.iS(\TZY%J!#,!`g'RCis:JZ*TX768I%mKd(@_G5:SPHKa_L^kc7I^nZ1M9Gcm;:Ud)Aq3/Q0-2Pa7B"ke`Fu@b7D_)GDr8,*ht-oOSL<9@D`;KN#j@iA*Ulrk]Bcu3?#f?A&hR-r;#sO7FAYekA"'D&"9^mg,sZO,R+7[=WSV*,=[VgmECqP_q5Ya)L;8.SiqE?X9BVIap3)X6n]%6K+Ml,!(7YDl4XdCOD'_VhL+oh.8OgqI:Rba--"'l=Y<.$(<+p1c.,6[\N1=tn[o&@.TDKj&k.f+[RE,SX&^hJH_\Q+H_$%Lp7`r:PdV/l/Tc@UlX*9=[r:0#9:(](r]#Oq<%pehHhZqO.9N[\UAY#fn)jA]J`d\8J,T%A0/'M\"Uf'4Zp!WAZY%I>4u_>e4hpsh>@]@o^Q32";4A=R>_m.`^]2$m\LI:c4u2lbU=6#9@n`WRVM]f8JahW8Jh/))ZTU59g,fRqg%8lf5CKu`l?#-d"9-OKaYA-h:gcD+01^Bp.H*bHY*l-F_f*i4#`o_R:ifA+F4ga?ta/^,(J(d#.Q>XWCdh2@9=6:e+]lh\mbN685b6I/*+5[g%g/(K*5m,9hH-Ub%C`+$Ug1)`DM7ZY#3YnPa0ER>@SX1.rQT`Vo].GOF8>^OLaO]!Q2#WopGHU8U2f2DR&9_5>qFU<8H72pa3#80TQ-UrZJJ9LdFXV+Y#$miOh$EY([Y\omr65_+Ye>,6Qg87R`'h.5]A)g]h1s7:>jtVaV$^lsJo$2$/ol9i7r^koK3b6;CW@Vt"Z2F3";>&/f-UpsU\oZuUPn#_:r;#s?7@,Z7NdUK=)fONBF2p7aoB+DI6Tq\HsX=%+gTb?N>pKP?)q`Dq$tq=rqKumgRNj;i?RY/RY\u;Ftf^X3tC+1MO'B)bEOG#PI`.lmn&jIgXtOGMCR=e]CAB>VaTVU5)T'8W;L)%6%]Bq$>7\V[I@L"8e+9"]\6p6=6CtZ*k;,Ql7=+$_e0H!=0'6J$AXt?jP`%#:Sd^F!s9J0PX9Wk,cl)10';@=6kOJSgKRtaN,TibgDMA=Z76EaY);SIO(<%(kQTTlB&kk=>o:J/thqDC,/h07a&B.-88AV`+A8"Og64;G'QE*P%6@O.*\$j[tHion\+sq'SYll@)34'LcYc_@n:lBUAShgM\[pQ]XG:?=.HP^<'$m2+@mt#*JTcW7WciLmsm'LPLYL3/F?`(6\gU!?.HK0n"(e*m?P@g.JOL,FT'p7d..5PWIq_:W)4cJ8@0na2^r*c9YU,D4/dYui'Ec!2T1pEbaDE,Y[;2crqV$g,DZZ>6SN\bEa=+,5nK"EWu[N+hhCSO!?Xhj=4p^UF9"?Z3.D\XBDk`L.>R>4F(u0baHjEa9B/2OBjrp;U[fW]MaV!k-QQV-19cRH0qV[UV\G2nX&kg6$o-OWnnNu%aPKaS^rieoH@f)%hrd9CX3+2<*&HKWSEpi0cpYl!.P3pW4\dUm3=f9!B"`6HMQqbZ3\JDk;M*r/4I3fmI9&_m^4"NVD7aoS,'E6@;7LT(!ii6sqP@iF+^J)5MF9MFcpCb%o^kO!GkC2sm8i>pTAQAomV0h..G>LW4EqEI#t^e?#1:DbUG4ib,9hHMV)X>Z,U?bOY((+:Ju8aUtoJ:.*T]GRVs6eaW4*h[AO(!4&3d!bU6I[2;0@8O^Bp5>rOZ%&[ljLB;0_KKN1q[qSlC\oG^+>qe-R!(>:\#D5Yn;;U?Bjp(ZB^:iWbHXS0qP.+"XMTOQamMn&-f:(D=[rD2Vo\).OO0bD&?4Et8;Od,eMDr/,UpK%_"l^U%\%R7;dfs=mlT(m*Qr.&,(It=Ps-q%6soktG'XLFbsqtmFLE?WWf=+k2UIuV-RM0(;-U?"@UFF$D$*!Et2]6A%/fM%TuR$`=!p&t[+CL:8F'ceAf]r)jPl^lGG6Um[j(H:=Ng^Bqpj606q"#mEu9R8\T6fqdA$t>p*q33779Nd(uDcB_`/G5"=%kk6GWpILNe*'fQ6H625F``9AN[JKp[8H_?JcMA;nl6@(k:[=0XK#G1Gg)V+[MUU%kh9AlH,S%NtY9Go_jM`*;,XG5CiFos!*`^fQ;`a&=ne7(7'i$4@6*2m(_c*uG1afH'lpNW3+JM]f"4,575mlo'<\=@@?pVdka:mD^4kWo#l2e;84`OF_[k:M?AXK^?nXbt`$e5GPaZS'6:@',YnnN!@MC+49$K=$+X0P'fF*cKfm?O:&J5Te&cLn'3f[&%-,2]Hs&GYHLg5Rb&0djuN4f5%&>LWc;/4*:#SBpK`a41#Lf'Cm-oL$-KSV$6@kU)"oK8m^>[1ODU$`EhO18d?p;g=c[FU]%-_1kK]W^e\1V'9?A/(l'3c#:7=N;Hci4Ujo"rGX]r:.nF44o\[f6sl^K%AEYUB_OT#(N03YaHe>ZBd=hjq/)eRp@IpZ9+p$,PADr/-0>F:M6Y^?-4J:N0dK*RGY4o2(KI_'LW64/%Ap$:5a>cGLg^A6n1XCB2.)K)L:2o":WNhX45p$1&+do3]F@\8/L\SP1?o]_8K/,%"*J"Z;`Z""l'n,Z!?Y1b?L,0.n96DdJHL2-_erjq[1\@An[dpgnZX]oqSVG*D0no!9pWKIuHFU`pe\/#]taRC93$6+huSkmdYLkQW`?*/B2tMDaN0Mj9?J=te"o]m%tt?*_?"#UU6-Zj@P28;*[26-;2Jn=SCY,_Sam["E*g>I;h?*um4E03Y;C"Tj`f1q,2fF`Im+J]e4aQaWS$?YSU+BHQq"a_#-r@]k'^a_g2p/aSl%8lN,Z]SOLral>pi3\dfS5nVF%UUF!lak@On[a_?SsTH^]9VKW)4cb,U=NV!NB#kV*g"J;B[J#<-/9UIL50b@oei"h31q$[M7(c'toMp6m^n?Ft@ih,ERdV%XLU?`uQM$U]XW6/dD!$Y6P8Pq(uA[:aii?b`0eA&]]]ME'H_,,47Z;3Y<6\P[IcKF+s*MA7Z,eu^HPc.8JWK^$s`9:a1g-VNn:kH*`#L)e9_l69G.:X@?Nqb5`G_ILo`4Y\!S=)^$1ci?EUiarg"tp[5-bl,J]%V7]6T(2At1VbThB/$HU;aaemAis*0nm^p%C$/kNk*6^a\Ct>\U>jZ..SnMfcUe,fU\9;Wm$lC,=H9oB!"ZL8Md("(*R5>T0M267I%RT7CiO@]nX%JJsEokGD^OH,IK*Ga"Nn\="[Vabqd\p"fR?WVAVbELfYAo4]<7"oBCSZQRbp\Ig;)isuE8=DPEob<01T,Ui:dpG?bIm$QYi$$Vr:%dRFmc,$RrIH?2,_)3ER_OGpF\Z(kg9L)!s8Y5'uIi);#&]3YUil"SW2$tbQ\`_j9_JNUc[qr0o7N>YbF=_Q+"%sFT)(/#d*BP*Zlo^]R9NqOWm4FepD\Hfrr0iHJZ;[V9[#9';_8-CY-^G5$.ruY@u=X;F.JSMDl>?VbNY8`RUR&#%6=gPa9c!fG=d"cH27tnXW2PX]M\I.a+o[?[`l"[B*F^pD(Z)'uM.J99q+T8sGDMlu*5#TgY-fR2gk_"U1SH%aM*8nDV85))GmKL(,*k@G\YBC6kB;P]2E5kN1geiSj>$hgaBrr0Lc>6%("9PIA42XtgLdEeMAsi+S);6W[^JY$Dg\=\c)g2fGQhT,o#+9M09n.uGB1GYm\Kdt(8d4tS-%>IJ@IXX86&=f`/'6)n*uKfl3+W!k[3@83=U=\<_qa<;icB$?@"O$HfHNOE5Kc8Ed$7gX/Cm&G9*s[RVPBo]F6Ci.8W5&M>dt>`/rC"r"hLD$Ti.Vu5hFkZ1Le9..IYffQdf"/jC1V5H0*26XBDl%acA[c(iR[cD;)?o?`EJK1_Gif-3k\##miQo+]56er/;RR%a,nQE8^HWgRb".mFnsHQ-5IFMcinS;>>P2kYZ`1=L"TQ`mL9s?f"KM>W/?*3[PR/h7H`i=ftWOH:#Zjj'DY98@Qcpi25bDl:/R3#&.CGWi2(qWk=r.J5k@\K]!pZY7a\khT&ETbWJZRP[T;@H#(W(0d+:'+qbdUFO(:E:f0&V^3nZ*L(,(oq>C'[eQSVdjiZ*q_]VH)m%m@Ailsnh`(Z+*/<:Mq<2a*7Fu*dVPgc2GiPUE_qY^=UIXY$XV%0[OHZ-.7ZG:?fs><1[fkct?:Id98f@5Q&@mbnj,ZFEkJ.&rgV^orDN0=SA&i'0rr)`aq59j6_WLq%#08@+SAnm^'*sj=li$:5XESG4pa>)`4`*Yc8]leu*R[rRF.,B\6#u2/EF)^4qPH4.GXGPm/O@urYs,&RhS"99*(O:A?XMi"TU0YBGK0r11ft+*F'StFAoL:bn5U#34_K_Jj?i"(W8%gbk\@FdL@/.N0ecE]\>'8!^NIN.BW@:;,d>&8n%3EGJ6<5gd@:G(e^YFkNN]MPV-.=;Z;6HGTQX.7gJZ=Jg2f%Ej0+_BrgW=HWL,,48EHnRbGFOJR+)6To>IbPMK&gB25g=![t77GT*"U\qdldrIMHm6'fB<+Z_[\cThGo>>Po\[r:.VQ$&DuX!ijGe_m#^H_*EYC;1bT'ZOibNhIK5="':L*2k8HGOA_(e=B?742iU?6n+5!6&7Y.-RpV2P>=BI=<1[oRD-QTJW@)`MZ-nC:TIIIoLdJ,%uX\cr!)m>LO0Rl8ss*f,WD5=SLj+d5dqo&\&_11`es$lLhEqBriI$&/j+,*ec;7GZbS:7O9eKh,Y;&lZ>(;n\`4jiWk^[`;\g7C:Rpe6\.S',)U?*k,8O@^"Xhd_:-V[5%77F;74VLLh)c.FjH)UQ*AD>-hg8#BqqUh^(N-D;pWt47TpjC'IBIf8CenO0#V&*E++G-'oEe\Y+:86QC!pSng5i"+(5:mkBlg_c#'n7rVC[/!_A6iNupGQ^0703eUOt]1GE_*&*85$^lsJoB+;]R]Tf'f$+O4&!q?q(m[_7';HtgpYL6pW+'&HI/2i^VgFdft0^FWM^+d;>2PXq`;A)"l+!2SAdZc]'aD5?.4aq?HhnFM="aN(QhRn-ab=8.)]lL5(FTM**;&p$1(B.=&gh]"=8ak[/p=P[):?'NLL%lYA=*CrK?!!VSa"V$7gtVC`[KQ:8JoPC8K_;f2jS%mbYXh\$ricqQ/L2D;)pDY0g7r-LVZqU8O./5tHP."lsgM^]!kq[N#=p@XSnjg9bQ+0Qg#/5CQl:@#3iIs8Mtp:S0grnmpf=\_cJDO$:u\<$NC5q`Q8ZM=/cdLJ4^lM>mMOmoXq16A;:2Rta6L71g&ME)n\,R8L+Ap@n;g\T6fUR5;*JW3^,9GEJBLlc9H+@"T(3ro?_dSADs?/t=MX^fD38U9.'Fgl8EWm5*dba2Fket)Tl%3r@\I_NFCtYO4(o-;t?+XWd@^2M/gp:Wh]_,,p'e<>7B")U0ZM!V>=&-3@d\TV:pV6a-ZoDjP/<$7O'uE\72N>0mrJ'A1;ZO/eO4kaW6&Udt&&jeI+h]q9,-fIE:X'X]rkXl=g56lR`kElIA6I1p^N]kVf3-4aX2D8>(d5lA49)D-PiNFi)PM?Tl,)T0F'Rb9dDVPL.&!)[.<$s2e%``<(3H*ceBs.SY0e/ibnX2r1@J`i&Bj^P-K:W7eIroQd20m>JHP#k.rX:WIJ`a2p\1"iR+%j&j5=Xh6pqN(&4/dLR^!YO(Le),JR#m7[:dgWSt;P-H^Ad6a>&&8CfbNn&\Y,&#U(Bac.EDc$SdOQE$?MOQRl8P&.gO0d\O9dfBR74,pGqs%RPu-;D\"Jj?a=t'hC_\6psHCD6AmDP^:G)d+*W2-R'bdi#m]/-oGKf5VBu'8jno4E=bH)Pa\in+;\K$,pGt+3!^ZO9$PurO:/T]MFL*+LKd2977deL8-rlgYur7p1?'F0LaY,j00h.SJg_NN'/SsZX]r7ujXB?E?[n>Xkgll*Pk=1e6V;h,q.D'59120;.3!rA>e+n&U.#Y+&WWoo?b[Z4mbbctS<]>'Zu+R+dA'2B)Diib+Q2J2UW,@(Dr4m,ABCcIUW/61K6D.h]]ig0kKfbjSXhidC(%Lefs8\b1M>"s((Ulb*]nQ3Y[PEb/6ME9hg[`E0-[.j$q=*7TbKmlFOTN3>K)L::[YHb=0Gr$3d">aN1r^./sLrRaFOEuj8dr?AP7Am/mZ'\k*p9][B!B4)Wt/#;FT`F8WuV-FR@d>0elPU=gi-LcC?o&'s_DoL1@j?eKlId<3'%/Fdb.$U+J#sVMrd?7F%A]:Y!"&pMTTbc"0?.d\X9Phq*8>d%TNL/OVu[,">FMTbKoBB$HcY47mCE[[CKGqtBDZ,]28BW['2LmYVb!.T4,38jr=,UgOb^WDb1?[Mh#<\@]@C7n4LK/6]D/99q,XIXVG-'X/HDX&c>Pg%44BM[pmngqA&Yn`%Mb13;SOWGqLn;)Fk)F6;T-Qf#>pkHDZ"RQl;9LPH,/U%*q/-L73bH#iB1^%/^0T0Bh7C6YeJMD5DA'o*8>6DW.t5;A%%\o]AL-trY[rON/2!2HWDqt?__f[s;+GiHYu^qd`AB?iJ=&9E'`gki46Q,LVZ?q?$UbMH9RL5'0"nF1D;RtNF?/1`>44$c96<,r3e2f@F?p@^rc7:aeaciM8V[F\_@7St/b:fsi'2/V='X]nZTY[Knem+o94->1SlV6,BWLr/Vqs'E/qjAo&PcX+;2)5F-kO&,TBjW3[t%]>-5Dnc%E[W's-BnHX$2C<)]UAl9(;0&Ak7aVMU-HIA]@i0L5VlO#e,"@IEF2X)mIL/JZXpiPUGYgCOo-O=ss)[D+B0r%bteA'5.sp$:5MLN;M!RK$nGU/WYRK+K$TZ,hkA1[a)2QR,:jJcuNsYGr./7(fHlH7)`LMA(n8JL.J`o5cQrRk=GP\0/e9iR7?O6So(CUAa"4WZ:q:W.If9+GXClu^To-Er)g_5EWN1[LN\n]gjis82T05>#eRP@Rb?_`'Pn/hJ6tAc-#9fp:QhL.HQ6us[M9+S(s4q!mRo.\4c'pYeB'7I1*Rnf\^-1a(U1t'k%j-h'"U@D*;I(!%]kcK;q'0Z+]l;q^n\I_96gOF2f,n/AORCo71Fam>M-EV@oUirJ8hQ@0.#LtPp#W_OVb`qN4GY\iXeoQ8qXj%;09U(!E(!o8kNE>rH3sM&t4K2J`u!RaL!NE.uMW?1C$bb+#7HPpr=J+W'pai"/S>Z7ZCB@gpI9kB?tbVCqFlXe5GkE$M`S8+/C/b;%u*dDVISCQGPh6qFCoZV3EfPekEO^rr2mpZ>%c7'h-Z4V)!:JTV*E$NZ'cI-LjB=d\i^d.YVo?=LF+4E:>MO7&6$J6&;%te@mU?aj//U%>T8!p!#nPgUD)[DVQ)Z!WiF^EsE3s/-e*RQI.-pBAL=Ps5fSS/lJL$]R.U77Fe#+O[dBM))GdB%#!iOm`3Dp2SNufl!ablhgoB01t55an;.@`>8Ss7=l!iTD:[Vd&R]h&N^Um.)p=].+'K0>.cZF>)'I@qDqWVnDR\?HYkK54[lQRELZR:1OU&fVdJ,@n&g`O(>>5lUWGYAGo_`$cN;'D'?sYG=aRk.C)rZWU_k[V\Bd%.X)da$C6dHM6_$i5#M`2/qJ=oHlji5r*/5U,ZWBJ@odU3c0KW(G<'sDg%5abaC7s;Rc@c/R)EXq8*plUAl]4;0!iO;09^1%8tm8h*&qklJXrEDlB*S#-)`o9!Y1i,52,;7E1B1DmAd0pYU2MXS0KCW[W)-0j.BGV3bLdFk#69.ora5P47s[.B-=JQG%-3\"-t^VOIA>K+FbS/fS]UU4n6uSN1bg[cP&@kF24u,U*j:dtcm3d?cZZD)%*lI?\&=sQ%%Q7ZNeD;2M^%-2&GpK'8p.5,0WU/]4p+=&BbWGph5mdBN)%-5gn2BP9O+Gq4$F=:(b9Y#3*g:r-PaUTgR0$[q>CEB,0;;hs&1f0lJY4Bi*1FGA9p!m+Rg6'Fj@fu3FU?"WfUZgg_QSE*V=J#sXl^u\oQ:$B8OigIYU1r&O;'f#^N;ihU19%FMQ02a]XH3=h\%sMRU):m@aiT_oV.@oD4dO,n&k0(c1>/j<5C<:N-qZlV@r`-dET9NHoc\It=`XOke##j!Zg:-.;l9W#u;104/&[1)EVfXJ]Y"\U4)=Y8LHDO&a4**%`78h[$Q!acc8Ycg)L9]0Bb6@ds2O0>O,nCqnXl83uOm55nla.R2$\]Cp1,s0Nuj:i4tjB9OWm\9jiWjo<8YE<]tM*6Yh?I%S!dlB0o@.f8r5[V(2L!LV2@A`fMtd*,U>cQ%Hkm!.l9's-.n1AeZ8TDqN`R/#,<_rHUgKr6m`-^o!iTXP\eVsco%^;3K=2s5tP*hVm""`_Rg9euYjq/4(B/#4+$^lsJN>a[;R^uRVMOHD(m;C8><>%dA$SU\UXWClC9hR_UmBU+V@"\cC?odkKiVHW=u_Ve'le&"hho(qU])(Pq?3@\cs,nd=:iSe]Ze)*KBF=ZU\$]gUAj$e>ZAZl-cC9(+bQjG8iAPOIX%LM!.:H-qZ+&-Ak8\7*')YXBDmPBgJ;?J,j;]CY,`Z%\r6j?+X'pP/2[:b]rgG<>eO3l:W:T1oeo3]dO7u(q"W[Zq<"//H1Ip4`@,X#o]^*CUF6_NN0uuQY[PFGDc't,,,n!^UtAUs0h)47>Ziahh-Om,,3SG]`>SSUF6^OC;rOF&Q*;_?@Z::;3Zkb2<,g4LaY,j00h/.-qZmlRW/m*7$O.F(EaN7n/+M:+sJ3TqJUFt*21kTIY"[$X#pt+\HW9^6q"!lHNA.17StA(e;T"k,,3SG]`>SSUF6^OC;rOF&Q*;_?@Z::;3Zkb2<,g4LaY,j00h.#15[,5Eb*a2CY,^H<`lYck9&J:-]0T)#$R>dk)rqN77b#Yrefj\H$[<'Za3TK8aVCHE;\FGsrRYZd@R?BE5\U4)=B:jU<-;>C0[;=MOh:r5G*dmIn#LX2T*N3/LC0Y#6WY66f=gDR0PbZi$QS':B'Im)GfWer3l-bBD.%(o@ab\jiTKVk^W[9:gTndNKB6`KS0K(cDF=*U81/3%T4H!.B-R_EbX""SMk?=rVQ=dB@3GB?=$r,M\\a?F_9N#6q$/kMNS>n2i;4hOp1mQg9mu)Xpd4!QH^fr&J;9`f.IJAio8r;XQA`tWs9+S5g@K=0AE#/B@!1-i8@7p/ihclPH,oP,4gGKg9k]tXB>#2M%bLH%lQo)LCYL'q"UX\TDmQPCT?m-^]$P+d]6WM]70^)/D.(/2sl2aL($B,JcuOR\jI\dU1@aJ,o90k'Q)L,+o[rY:EGel&.C;;5[jWfoo2f_"-6'>.]F)Y\T6f#3,t[]4+6sI.A&G2ddOsNmcWa\PF41;RPA<,Fp!3mq.D6/F+&Iba,_<,HLtm=>e"aHajgt8OcK6'aH@iBjP6TV.#M/s2Jp>$?aj#)il+djmbPMMgnR@MHk$Pne5ch_$U`l7n%=kTSrAJ];Mn>9>U[-[FMrtInmV.PbqeUO?[fh%\od0@%NMF*U8q=sEd)_o';d?c[ObL_S5^=aDOaZk^m(#Mh7I=DQn`I3ZmnLjG^+mpKLdu%9APMp4*U+e7>k?NpE)s5L-m:h7moa+.2[`jN1r5d]Ql;]qXca\b@HSN26c$3ldrOe&ebr+K9Rc],.X1/6psh3;3Y<6\P[IbJd(u@jhlj;IJV$dGMdfbPBH0?q>0E\[8Ab5/l"0sQ^?=__hY'V0'1?>+[]4.'M,o90k'`IjjT0%8bCp?1q0]%-UB!uO/0_t+Fhs-qL?soX$,"S_WQ7lStKsPF&B+[QS4F#fQmuKN3>.(qcn")#TP:)EpYHP3[TgFIgh;+:,)+6mboGC$=Ki/IN@q0#TB?uUa_hJWdeZ0KM<2ib!F`^K&r:odtqqci&rHM$NmFJD/>1]?/HaMrp%j*tdP=:?Cd;G,;S5iG9bj("?8B9sl'Q)F'>8J%Np$7s3R&HQUW`1E+2`G"cABgPXh+D]HK8>>T*ht-o:^WpF-Js1=4aaD6Y9([upb6aLaEU&dSM=W/9X\fmp7+EjFEG1+.!k1..@JDC-&Zr1RQ#/fNM:#c7moa+cAeRMY$EPZY+3,9qs<"BNH:RHCPE"fU8##K2f@D9iN'/rRbZ.1,,2!U-qZ+VZ7(SB#X3T]H:jkn-:eqAGO3s*P?"Ya[F_LJ-jo7!V8:!a;KDU(A[t<278YkA,9eaXXb*=KR:>`d6]tM,NkKgn[gU;@U;7'W@Ft.,'q<+C/iSbeO_"4ZgR8LPq,p284\i*`5KSt[;)O0P9r+C1qB)A6psh3;3Y<6APj/q[V[N@?[hgIPj"iT]_1?b]FP_V`Rs4IQX5g^c'gMR$7;MrihqiuO$t:'`f,lr2qCGq1TM`E+rul"ONWtDpNruF[;'_qQ-&RVa%HRH%hChFjhS#Oi5=\+0p+_Gf$`,h?/mPn_8p9[[/LACb$EI40;XXq"=RZ"&R,lDT.l,^e'TKS.Ip9C">pN7Rd%E[W?+Y9&l-`##@21+j7moa+-3k\aNuk^]n^:&`Tu)?_#OGFjFieN1@cGIk,;WuX/EOU[^-dV`H2-mf1[O:\Lr_bL;0!hD;=l<.4F%Ru0f1^d]fbrOWQ,ckhnK%LXH&,#5KP4(OSee@T9ehS&mcr1ml=J,uh03[1:7(^D3P7&_&N!HOkM,)X80l-ltOc`XtQaOAVEDr891Y?lAEV@aER^c2TC,"g,4$]kb0-rDhXq?E?FCXu1K2JqHlM2N0'5',kFX1*n@k_7&C#SBpK`a41#aM@rhM26tDM!2UueT$7?0DPd_qQKHX7-#7+KFe`lB']]BKc!78Lf-#=6AUFq1\Ln26B%X,7&_%/+[e_t)1)C)Tmp&VNJNAr[u-*%F7lsQ&Z#gSKFe`lB']]BKp!BDs7kW8n%S\eo?TYie#1NR+[bD;SU:5*BkNE]b*=J)gV]rL&eR8KaW6&mQp56/S?K['lAI=0(c?'Xd\TUaLpk0s9:$DG>-rPEiqrK=gKY_>c^d.qXfR.5[qs_1)]NR6"46D'2/>[?(bojZYU)r.gpqLHk#s*-T)@]:?VZtB+Y522))VK-GOPOnRr8KA*^!rPN0otLRrr-;qXrJoRpQF5O_Z\/Opd\=U;=[^.Oo1YH?u;%G05Vs;3Zn#3AWl*\TR5h47Bg,7qjn@[u;1\b3/E]dncJn;,pi4G--u>+$SK4aH&RbLfqf1]#mKVe#%!4Wn!@b=1!lU7Ri[p=]..#?+P.Q:oI3aA&jUDl\lfD&p#eNbKC:n9p6nus8MtfhT4NbGMd`4/_(Bk^DSe;5`""Y0=(;@Dn[[NY$SeVnuF)]H>XQgabIX%ITgSYHjjf`,qXj#J59buENP/fooM#o0OW!9d+ZT%fEf1\b6:4*R',+76f3a%+o[?U(11`fJDnl5teKeEEa!%)r5CQkhLs7@EqWk?Rdb(j:bD[;p.TWX,=lmekHgosE<)-%X_B^>jZt\"WhnPeFOFVKc'oNhZWp6ZfYl[QuX&eW;WDf1sGk#6q"q=BaGOA]`2?LR=pI7`@/m[J=-\W'N3.T<%_o"jRb@in/Q7RK6IK^&m?kao]Ij[]_EZpWD'Vb`/M#i8&7aA3Pr`[GV96H.8=/'I?$48h@p8in4;/Q'qh2^g>>Akb*puKeq6]Q(077WE(U?:R\QQ9&;FQjDrD#aM5:OcP__?EruqXs.l1M/19Ukf['\T[?YG.D_ZdLs[@eu`0(Lqg^>.`#YN%NTHD]_U8sY;(nIdD$?i.(PG].&nKS^juTqjY8JE;l37)=Q8PlUT+miXCokN5!D0q,-(nW)JBdbTgFH0Si:Ro'`.Y$iH(&$4lYj6TSm5GV+R$&kuS:H-;L)0k"_O4?-4NhRe6LG^Ir@(.8qS3B2u'Da,X&HnDM.Qj2_&nqT:)''nLpeWZ$U-.*ReuLNXb4PUI]?j`IVJN=-OTb`X919\-=Mp\ajYp`@r,@a("IW3goB-VkclD]1QP/9S0CF6Cifgejh9V,*^i$C`kdU5Q8W!W`?+Th;'C.[;=Mo<>[Z4S5f:ZkF\THHhZr1&RqrdCWMba+X'`X7RZbAkFYt[=,s7p8=J1CWFdK7W\ntfg_odmC[BNJ%sAh#(fc/B$%f^2Y;9_1nDT-E>-)oh8KBH;0;MI'27'=e7un^n2IOn)5uNNsgo=@)7!OX_etfEP\*E[iCY,`[JPhYf9JSU68OuCf!=b<,ba@A!VPMCcJ:Qt;YNO3%)b4i6rLV,gU2gk4baC7uZ:9flQpe:73f/]Ml-cEGJbmdSo9,_nnqjN?OX!ArPrb`R3K&b98lt3Kf3_&Djia!5jc#p%oWQ4^8hOX0MFL*+bH3BHO>_%6I+5)l4*Ku;ePqn+Ie;#X;R1`JG)9N'qtHEi8X(XIS2p1bhgMtZoB*`5pVn/HBO"eId@s&UX;sKP=A##?D(:)h.OkcO^]+)1/:tft1j]0!q.%I*Pq?3@$5)9.NUg_$MtQTYe#-!^\-OTbkAA`e7Pdn@XV#i%ba:+>0erGEU]cTceL++^3-t41rquSg&G?69K\m[$9L9M=//]1N2-_kS3MPr_tjpgc/Sn=gM_6*8QU\)X5bN'0`2Sda`X;h02_Fi4oA!3MRu7rG+-FOpd\:U@Hh3+0/DBAhcR56J&;V\nolpOd'W7I'$;C$;-0j.jgH0P^W5T=5$[7\V*Nod("Uc*)NK'2aF6:]/_@@SI8;R[hmFnsH9d)&\i=A0N+=5-eU*u?8-s'3-<*/,j(be3Ie-TBfGB-,)@/$Ln;Pcu`Ep;!uGnOVQ/6Sc:j]m10S+PsCT1U9tXEO'teZ8H*In1b-NFWJbp?^J]Ue)5FlE%u$(WGt,bE!Msk1[4YWfAupJoh>=2f=jORo-OdR5-!EL("rO@l4aNBO@L+aH\7lNfD&\.U'2-C*k5Q8`Q!]:"!$D\8\/'nb'7aBa!*,T0kq3FEKWgmVFU_rVMCJP_f=X(e)Q#bXYO8A&f&f''duGUJ<6FoY49ih5shjEolSIA]pB6"tal'WX<<'5sa5EF\u,X!uC2o=OiWu`<$Uki\eQV9q+&@SaG1@94?l#NMT$s22j.e27_G`U:D1#=])PSqt@$";RR9/6psSfe>ZBCjNB3keEu(S,=eO4Bj18uJXfJXF*!O:FWY;eil0H7TMDC/QtuFk`Ej`4P>X(?\TR5hL(,(+%NJTQ=uEkS"\7hUqtJ9=>nfGKp8ka4GG.?WDVr2,-oir%H2I!<[qs`l?#Q;sH$k$gNSB**h;-oW@HPe%=Rc4V^XlK\l)1.)O7,)O8g>?;FMR',LCWS6aBppS[HYgO7>^58Mc#^D.(N2S6'mHpJpPHW7O.J3,31_1isL_;JIh:>:j2-R.;bQc-ouhTGR$sVs8MocRUFdM>;t*XSiqFr:n:?]@I<6MIob*!qs&iEZD+:@NH-,>WWR8jQUPtXYjkIjFkc.nT7*T*P&$60VG/S)/R#N#n0MJ`Utn+T^6OMq,g4XG6I)2f0DVYZac]PrMk]^sGMcQ)pLl[p'1H-5CA!pJh"Im6+"BmJ.cogTVL<-[aI4u%p?^HS4h_uipb\\dP:*,QlI;fYC8?4NmM9#>57sMb*YoNg.q]PBU49;Clii3:L-uk7_j/E30?Xfo3pIkW(g:$J-neU@5eiT%"&P#V^]6Z9"J%7mpn-dgnd.P*1\:.=u_^=FOd2MEZF_Y^H9;mdBL5NZ=/`]An6,j`s@&?=#!TT%'&bCXroZUS=KiKfoi8YNo#!JgsMBCMA"=O(8E:gOI7MCl-cDk,tkh[\KRpi?Wc!c@7+a>jiWjU<3Ia58XiCCd2b;laCNi$3bbGf?`ep*W&4#Sg0BUIG^[l-"),`h@A1_M-^4CY#Sl4?hm'i5#M&?XFdAFfeZB:a',UFNBrsC1Qei]b]qI("s#i1(h"#O2gXD;3Zn9[2;?SL!2s4GYPt)]f=T$7Up%;F't'TJ$/PJ=J?K5KM[ID*>-oB4H7D;2LDB1Gf:9gQg[*>-)J*^(u+3d5!H%1*?'Qb;D%PtN`\`[[uiYE"`CR5/@!T0I74mtceD0KBF7p=jL;f(4WZ`O(5KK&#/:o&e1IZ-d.tIJ!>e+lA6@tG0NOTHM)$\Pe_?Eq0hXL*R%mLp*Ki+(jrjM44_7)&J:F>EY*9[hE;k);)qFD4T5-LRlu,lOsNb?j@;7(BD("t^I_.H;=rGA>OisfP>N$L8ou$j11Z3"N)YN%T&n\6CZA7(Gk'eip$6*#+]hZ/2U%:.LUXbeL_1kn--(r^j6Q$#3HJg*7Mobqo)%mjj$6nK:n_UPVQF%0WdFL.#d`_Mmbbc4'p-f>4XS3d*33Z!pd.k&,$/1e,o8i&I*R_GaO/X\$)(1r"3b?UYeK]3YGp[6kD=6I_k/*Jb8'0Xf6*a,]A4aQbac'pXdDEJNY^C$_a\PNX--kR'iB5eDK7$O.F(EaN''I=qqbr>tP,"g,4$]k`NM@pMtAfQI8&Z'++"iuB77>Zgu1Cca-Lf-&&!ou]AT'o0;6psF2s*:c-,=Fpf6psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF27.e]/]68&-Jd(Pq[I`qYYrl'k@)3mIHE:Jg4s;(Xc'gLq]6;Gg2fH6IjhCZ`bM_;dmG`\JJc5K?03u/rT:]K:SiqT'rV%\B;(\MCkN:q#em!(;QndX\`J]K]*?$qYA@61&/@H6B<2`m%?5ke=GkgdelIDrIFQnr9:S..=b7>XVGk^X^2HL\4)**!5j>YtDe(rinH1U/SB?n/3l-dD##=j^i;71.=RqjHX\8^on]f0iaBX>OU=0KoA5Q@9uhXU=5eh5CK:S1@N2Vl,tJ*"hS"c=E3QOTmQP%NK&pg2fE$geudE!:N,#T%hF_e/R-Ml4o=g3b6JLs(d<=lPq#dSjN-lMLEA-Q[d;;14'T13rUeQ7M\e$aEsF3qWq=hC?gZUWn&gnGF6ChceZ+n$Q^>sc9'+3\LCG32J,fM8R$]mTk.LZdgRb".C2U:c`VT;q]4K0O]6E]r?bZH5O$:^S1T-\"cR;(>k,Q*YET4oi#nuUSX/B52p&b,C4jndDRl>9bjHEAs(+lPd@;E-mfQ(dmp&b,C4jpe1`Z&hiS2`5I,!n/=D][e#rY=p@TrR&Za4H>)+9)JDk4.KPa,_;lC%n[$/pe)h20fWerDIf"!Lg9ht$90n17%Ifk-04-;o+[^uBD;+p[dnat'EVMa%s1dLl)VlT9VG'!kk)@Pbj8XH'^Q0Uic.1eQAc*X0s0$@s]!Z5!U5g6UB$$4teQ6)u2/:Y"_hTmM\1i@-oOc@:V+mF[/b7=_0+AaP@)n9J2HNC:6psGB!McS*USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&Yl9:USnd".&/2c-kR%'&NLGuW"Gf'&YgbL.&/1&&J5U8&YnRiZ$5)F;H[@KAQb-7CA;)LI<(+\'`.W%muYHRp>K=C_:T`Y,%9@KO!j26e:4@'GOu"f-s+MBIMU71^&[n&M")pG\M.h7Ym3liR'3rkW+-bdlo.Hfs7RoA[2VU1buQ<"p'9!"TJD77C&R!3/R(/L?:?&k,5d;%s"\.M>0CM5$h7;,L:,"TY3Q7+"o,BIQeX'GX%;!2q)=[$2tB8e`"/78X$bW^mgU-&S!$77C'N'EEY5&k,HMU8:7T;,e55!2,3;d8H]P.8a%Y'h&-'W$5*GPUK^-'GX&*;#gTr8/*X%MO"lD78Znr!.ZO378&K3V*n0X<"oK9TSc.b;PIhR;,e5E70*Ce,#P_3-sB4W'h(Pg!!'#i'J1VgQ4cVT;,J#-J1;1#98TC>6r?f\'EnK0MF>iiU1buQ<"p'9!"TJD77C&R!3/R(/L?:?&k,5d;%s"\.M>0CM5$h7;,L:,"TY3Q7+"o,BIQeX'GX%;!2q)=[$2tB8e`"/78X$bW^mgU-&S!$77C'N'EEY5&k,HMU8:7T;,e55!2,3;d8H]P.8a%Y'h&-'W$5*GPUK^-'GX&*;#gTr8/*X%MO"lD78Znr!.ZO378&K3V*n0X<"oK9TSc.b;PIhR;,e5E70*Ce,#P_3-sB4W'h(Pg!!'#i'J1VgQ4cVT;,J#-J1;1#98TC>6r?f\'EnK0MF>iiU1buQ<"p'9!"TJD77C&R!3/R(/L?:?&k,5d;%s"\.M>0CM5$h7;,L:,"TY3Q7+"o,BIQeX'GX%;!2q)=[$2tB8e`"/78X$bW^mgU-&S!$77C'N'EEY5&k,HMU8:7T;,e55!2,3;d8H]P.8a%Y'h&-'W$5*GPUK^-'GX&*;#gTr8/*X%MO"lD78Znr!.ZO378&K3V*n0X<"oK9TSc.b;PIhR;,e5E70*Ce,#P_3-sB4W'h(Pg!!'#i'J1VgQ4cVT;,J#-J1;1#98TC>6r?f\'EnK0MF>iiU1buQ<"p'9!"TJD77C&Rzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz!,,ts#7j":rX_5l\AQj&-dB?cFfXqN!<<,D-R/$/bTCjPYHf1OmQ,(]AZnaLQO6D1Y=j#)$NL074s>fLCAqeJ96HR/!!$Cj+c;S#rai9+FdEI9!+7u6MO&#VAZnaLQO6D1Y=j#)$NL0751'e\Y,p'>QAqV!X-IGBEj\FfCoIpH!!&\fM5#9-.Z+9-!*#(/RV/Ll-ia64'oAZ1Ah&Z>!!#u\.%4eGU*p!A5S]-MH"JO`!WW4";9f;$GjsY_.TLZ+eW$<"1YmNWmH8U+XmS51:DmqYLeUZ$31(5*hm>nf&lWd&Oc^#JC[(%c.Ug`?72Hq!!(AlLnZn6S(Hso'EnI:=q=IeB5@*bSVX!?!'okT^dZY@b-mU7cD;(@!<<*L,DtWRl+C=MU*p!Ad!CMB3G1CVf81m_!!'AIU1hi?cKfTsM?3bXXbS&cDs'EA-+188I$eO377!.`4JU(p`C70*Ag.aq9%W-"n2M4t^i^moggL34\t!WW5&LFAUhDk\W[!'h9UU3ZS^M?3bX<08StVf/:X!!#8!M5#:l-Ahj)!*#(/R\t(u-ia64'oAZ1qBh($!!#tq;j(F/Q&VO0\lqhrkDH^(-@WH)!!)U<;)Dpn(=C&2(B=GCrZmB`XO\Sapu)8S!6h''d@A`j6k_di!!%QFP:2m+>)R(RLC4(^0Rj^(F&m&g:&Jr2!!).WK*MoNDuL;2.ICGU3no,\m43(VCsAL#>"!KtCB+>7no444!!%O]-Ahj)!78qX;#gRrR[GQ2!!#8?'1Dp%!,,u=-ia7__WSRPcP:;Oq3K=5m'B?*<\'Gb\Z2-BF1,->EWH.?/-JAgS5HQNjiU./"TSO+%oG/r<31>TEY:eA!.`Wf'[7L1.pfBK6r$7\aD>W_0cSK!/.i\6RbbAp]S?"7i;%s!1TSc?/4Y&P_M/`G8$Z"TSP$=ETg5MeG_<.pblC-ia7oHH\SSYe%t(]l/X1B=SoMYnn!19sHU=E9"%TiM+!WW5Ef0n$OWc!SBrDWdt!2s/AOY@u&cIOK5>L!qTZR9=b!<<,Hr'XB^!!&IU-jfqS5Vj'B!<<+5Atg[R!!(8;'EnI:=SU*)%s)GW(<\^rSC?W%el!Lm!!$-JM4t_d'1Dp%!%K4N#c8RMT2aI8id@\!76%JU.ndJ.WuX/!2/ur7@URs!'oinMDf#pWn:_[!.`Wf'Q(uj<3a=@!!'-V.,'o^W+(M_!!$2`Kd2JH=(;'o\$*;7,!3dTf)+CU/FJdT:G"L3tCNXu%EA[^rJ;&M%RT"?U;K4Po!.]cR.%4(WHW"i@!!%P'J1-jbFaI#+2#mW,Kn(S?;g!FbEA[^rJ;&M%RT"?U;K4Po!.]bgf`ZER]N99RA\4:!l%FZo&'cu[VCZQ-U>e&#Zbqdu,QRlF()V/t[,tFJH0(PSkJC8Dg72"pB+tLL!,+M`d>Fh:70*Ag.O0gO4KU"=!!#h5;7,=s78X$bJBE\B'i-?;!WW4"7MMtL>#>t6zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzJ;SdQn]-h@:N#E'!!!#GB]"4/c0bPsSpTo$f>%;"6*I,sepoX0>]Z#r(2<#>!!!#GBO?/W785dZgU?LuVpC,?Ib<'hXHP%>!!'6R8l;s"[r,!fp%[R.pZpFLj,H!XnkD(![&#id-W(QX!+5hmU?M0k04.]Xjd0=,Zck2pf%Y,X?1c^,))FaA)Du!BLo=6Jb7c3r(ccWt='pB@Q$i/E-c:]Ms8;K7bLY"gCp]L.W,<2dia$ZR7JGPT^Q1ST.''T'>&3fpd3D!AAt*Y'l7BL,P.07jgXfe^IDc^f6uktTLE1Qj2rB"H^Y,2AH`jsFWl'Q#>B\\2UVcE-h`dq`MU%eVqnN:EN-?qbi.?1k/]?PM^%PXg'(*6mSl%Ijm+B237L7gupYE/3PCN5"*u/*04*9]5%5ui]^"'N+f.4&;o"bPQN5%$Xm'95b3<0%ECKFRON?l%/ier$LhE]7=K,&*o8l`\)&;G/ULeQ,nFIJ2?H#7nQ2RVOs-m+AjikG+%uW_]6N%mU!]!tRMUP22*VhO)(2aG^]tGMRDn?$=mIP%G&g78`\Y^\Uqe'*"hqH(o!;m<76$(Yp#eB[C7M4ncc8r\,fAH/t*e6=eM^h7C"0fC#Ak/rG\FI.PSp>uPXSief7doEbKt!44d9MK\C@FmrW<#7g[l+9*0D0;@[jO$B5d]^)`4U?;IPmpA&"$@mX%b?r]@'Jk71S)7`k%R0[G.#BJmOY`7jiers%%m2OqZ]Q+MFmcm1^4g\:UZgg+?QSlinV^abn)fJ$WOKniIsb:*g9bR2gU:C5jd"<To02oA"2/6)kiM)5_MNW&,4Z=l/5CS!Em'bYdNGWj[O_<4i]'6)]N]?$S87\3+ZH:%A'3!.t:YfNA4neLL^]*o0UMu2Mejsp]\1>3l;+.i@l.<+Ge$+%OFJ471PMAdbd`SMN3^54Zc>M_;U)G2$k8R%!1p-Aqfs^],meZeB/pAHuGk?$G,'0Ql[1_?uW9HDr;"!!(@[p"[">N]ZZb\+\[*n+8B0?bGa^^&(DJ2VMi><%!C3_GlnsB`J)1Z]_%2>$81G_DZ8bFRIpEhHFBF-&V-_Rm2cG2-UndHhQf/RT6Q'mQ+2Z!!&Z@lA;6tdFu'J+'C7fpq#^eRmtYBj2TWu=p7d1Z=`:Dc*7*6^].S`h%c?"j,H!h0k3]HDV6G,mPpFqMQX;23`0>>ZtY4/0"L$U;%s!1TIK/_U@D8P]QW\rV'qdM5kN,BO4;W^"];Y4B'9*\D2\8am9=Z7U7_J`k>Cfe$SN2gd\nS*gMXVlKqUkh(0:4XO+&@3!WW3W79rbIiod;=Sf2P7]^sFJjM(NZMjJkgoI6m8o#i[V?@27b-e$6GU1e,_cM??G3cjH-/[j:UlJ-g^h5TJrP>@4*J,S\?Zhf:Z%o.=Zara&*]^We:E;JgsBCES*at)`@W1k[?!'nM$'^aDLe$%nk"FB!W#PRH5/'=2]Asj5U7\lKZB@"jE!;anqcU:sLp=a;K?$=mR?+OREf2`GO.r0<'a`BnkO!!8eCY.pId=DB)`[!(:[*n?Nh`bSlOK5Oq.fPHr7cB^hA*Rd:0T&Vo1as>Ze#(A]-_1s6q2-]*=Dk\2dU?BX'EA-+@V$YD'$56dFk5g3\*rD"P7&mjq;ms`*d__9S#SnHgL5jXL(,)fpZctC$]o)ZI4Ru%XIf88;AD@#4)#sYe-MmT)YMXZlXUudII/<**o6I[ik,;.P`f1p=prLhi9V4L3]-gK%gnJ`s!!!#L13W$:Zd(Vtem!&E/DPF'D+j?B$NL/,KF&lt',@%m8[Zd5L13+[9jIJ9I/BE8)5TXna]SipoBY_O6+HX:fnGsph*&Xq-7`N-.!Rm)7HXL'=Wq1V19]UDuX0ggi5i3*3['Lg8nG`.\?*V-uE[P@O(^#^]*or`uc,J]]GG`@\m@Vl)"!M-XV;pL\%HGA]5X!EqsV;7.Q2r(XpIf#*F4#U`@OeJ(EC8jWjl#R_#CfjVJg(Xob'Rg#[pL>XI3pEI8qqZJRNPBu9X'ZTBW7I:D!5JXc:D@ZIn`.Y[Rlg)OEu!GGAci5GLdei;U5S1,N)CA'mC(c@/eIjWjHEA7LJ.'Jo?MX;LZX`-Zu4^2AW-BZj,`s#f5K]/2idH'2r1jD$(lJ%M5]q+Rr;mbB:jVGdRu7LPg17tpu0V4be9s&NA]:C]\0Gn]2(Zi['2ZhLA8!A1=HS0-&Uh$HZ%THD7A8;]9qi&`uWbo1G-"R7+)&4kd^*5:fNORJGJ,Q,4Dnc$Z_Lr6#)Q-8s;GYK`_cRj"I.0F&'!(Zl\)34Kf!TC.c'gM-gpi_$QEb7[=GIIp@l6^t)Ha3VF_tj?cXiDF-JjWoQ(9U\=A]dgBr@NE7aW)0ArIWcWp%n\/&HbBq3.HKUp)Q(9GFAAJjlU+7UCnfF3d"YYV=X+XGZ4D4]aM\WZFOg1*KG<#hF^Z;m'G#5NPm#2,P@S1*rB5j$LtflQ,L6P3HAY9?Np87P9LYf:5n"Vg9bR:IF*H7M(n0A0`c%9!"3O$0r.HL#/(htbQArr2Z,B+;lU3=69WjH'BE#./=+55pR^FW.8cH0(dt(('YBr"H`jsFW\JO#G1gH%0JYtIX.ns\.oK.WNM0sr>$4E*Thdf@`%G?,A@($,Zcug+rUm8/*I$9NKf@k5j5lV7hPjGO<%!:PB:jVGmsk@!qO^BkGOHS+dj42-_#k31E6t7D/$60VWmJ"\`sXN0TWg57'7]M(+"X_=,,rGB9.p%0hu'?K=0pJaV/;*_c@X8pVC!Ss:bgo8]n^F-0FR%AT=oEHl2=aU*k'QaJ8#PqSpOZ9lMI(]#`KshM8bT]u\DiB7BA;"pCsHfb@s_EgKb\&9LhQClhu,0E8;.d&fqhDSkg6#=XgM2u=0/IO:-1&>4'Auqp@$mgl(s_AFh2_]QqJ_'#XgC$N]IcjU-_^`X'].:=p0Dq(LK9?1V:tP@<@CN'cU&`]]+f!ij4FL)#l3p/,i(`f88_`rU55#/S9CKZ*mFmrUeb!,+X/\p"+?Z-`rdfP)!/<#RJh;LrL#lZLS:l&T_EPUbrqPFnO9dO$"%Zl&[&U@Vs&2UT'(7fd&!prVYhCO6o%bHb(e2K6on`'Lfe2^$i).`YoH,UULh.UGMGNBA6+4c/stZGM[UXc.pcW@t0HJ`-_qCI.GB,;.6N-[Yg%l[Y3;!@N14G/IJhBRaW%^`u]Rq*<,82ru,*Um)?51UUBIPB>ga;g)HJLjVM6J+nB5e51XATS"qGN+&L00@TPB!d5;i!`I.F9G>k'>j6sG2DYrk6Df"T\h/ufC0hNXL7Mq**p;@V?`1E-tF./o1m3L81m*W(jS8c=O0r%iDl$lIf_bCkD4H,WsrG_>L-`=#4)iUM&^LS8\50:-W!<[l>!"/4u.Ve6_cI.4thZ!$;t\hQ+'+lDeJ_m>M>-dorU/$GJg/k_tp(h!C.:OgOPjGBTYSTIb(m9-NE8*FF;(kq3J\JXY0d9ZJ6='pB@`m55[l<<8sF6@!JYm<)P/R3r5=%1)*1fDZi`ucCA*IdeBW?`Zc7"]X6?+9)q>,999nL^p?_Z:KkI;f"u^s*K@cd^?BIktL7b?2I*NBVdebc/8k[ANXoH[73%rsq9bd.B(K6LWdEZd0r"NED(:P9""'5q*/Is!=%r@kT6qU?H'E/QR,MD)u2FaXCf.3MU9+Zo2dTAETA"]Mp:%fee/fRRVM\*N6\c.+YOo-+m3I+cL&^HObq??H16J-V$,C9HLdcdQNAn.(%7\`*-!rEQ^/+=$?3#KZ7:W*+^OH,rCCRKp=X)N-r4L(VGV6ocCG?H;Tp4OMlsOHO^$Dq1iAA(9,hSE']!/L%AICSOO'Pc).f`8As5dF1sNB&0,km[tN"CVYH$KdY#$2MrPp^]@QEH;gmnb[71R2s*,A2p:+Xp:!JsX+)cNQ(mIQJ,$pmHCh%f4Ag4mkg<7?`uTBJ8fid<_YYl]1rTR)cleHaFNJ3@f2-fq6,L8LD9U'A&h0+KN7C%h.Rf9I+4%W:+4#adUWH=SNl>>L[RoBlHP8B4r`qFOPko\Qh,CpQi1mBq22J,X^fmDYbfMj_k>b^YXjG#\,(\HWK]FONrC`@?bL&07,tEFPs$fI32ka#s(J@gfpClX0ZQ$J/BiNI&/M8\[uh2C\!j48+UM0k/G`,G\HBm+J^X,k92Eq^e3j.boC>]s.UV8r+/p+%/`h=is:)A`;I+oBZXW;AANQ[r5\``:bTQCEQEZH(sLOVjpX`HRWi512GIBfTK`-A/@\3STM3_2Ck:O4gJUrST[UYdhWcN^T^Ju5iI-A,Ja@5@CqhLTgBsZgT'qk*CBacH6.+=5RViI3s)gn%;)Fj.QX*`FPCDsD$ln#O`($LoI.;i(0_Jq/0,I"&%nj?]uOhMMj['u>?\,Yp?gU)[OQW@@tRX#dnMd'RJ_K]n;$A4FQMkgVk0@5(G"jan%SHbd6)bAWK]6c39,t7_HF3We^U2CS?plQUM+thAWIlq2CK.d/3@2ee"^TJcfg/SnW%mKdHW:7kQO#4:Shi$hr)3kj0'S+WV1IH=g`@7n*%9"f5*2h.N@.$4A)se^WGV2eTH+7aZ==ikhSpA^Y#]oK8897+(Wpf>:0WkKLVVdCbL6Q#.ltMAG%`.NE]kJMhLE%kcVk[#5A31oRW4h0QQ5.%9>r6kfe)(+,$#U+l^VFOAh!g@rp&=DS,;%NY0JaG6cssf3c:3%$j;[N-LW)?.i(mdEO]7eD=lJCY,_KMPBWZ:$iTBZC@)-qWXpB$(FYJU3Td.`HT[Wm^_N/,?M0TYb$.&R5K'3-;B4()j['QH-%A!UlpV1BR&Nn-aF(n<57[pS#2P:I]u7\5$$)1qsU.?6K7$d5E5qHP+l?%uMWm#6DlqP@h``i#+pb&3LSmKKFb'TKbqh%D_QFk'JL"W*7YfPLL`1_OIraVCJ:>Aq24hEC/&UZPN)ME^n#UGW4a,G%j2N7[^oR9b$m2.n.T.Z0scD'pciSpg=c=ip=#dpk1oI6Ub'?+iE$r:=_'pL*iuYJ(q0=?TM?Pa0e;+C&WWQ#=>3jp4dk-#ocbuclGOODQM3cifCCNb\fs>=hK+Tg@rVPLPIa_"MXgd/5ks:D*N1tSu78od.RZ@D[[mQ#"E_YpaFU&?o']\B"0>BU^=ZVUcgMOD?3HF2^=gKTCea:kV7u];n&=H2T5o$5@X.5Ufb67_CpsZJoJklt?@"'N.K,EDnG=KWRV?_:"9=fbeFeWWAF.sRF3&Mfd9m4M/72K5DUZ+,*eQ,m+Db0M.@N5Tl8i&L$-&`7Aopb/VGM\1>0>IE?14-BoWl7Tb@>>jI37QKH9[#F9X"(\%F3`R1.>:mML#k%mFJ(PFDS,;1&*(]k:MVVh_jibGb;g%!"f;(impB"?%R>F6km2N.m<-$0?)kZmHD5)#-kU8WGOA`2r6lkSbja70Wcd'jLE:bTq;mr=?&bA$q;mshR="U<\A)'sNDpHXk>\gZ6kkWaN_uQ@V$H7^XY)O2m-1-RHQ1tf.[s<0mbQo]laOY-D>YD'3)qC*P*seGpPC:*!&1>E&4;Dlhg"1@U5S1!(VqI'IM4&%.!gb^4^pf"j8>#a7i";a]`O,3SIS_s:LVT7-FdRr?#$G3mj.IMRnX9/gbD\=sWQA"=Dfp"*Q#*MIr#L_6Ho_5Y#57BD@q;l4(OYo-6+3jn17gTi<]$g,q[TT"q\ba:,-c(_LU>=<:AnUZ]A4ZYd4X=uies8Mc-bqSl]D'ooagU1g`rgl)h@dN62rrZ37fKS?eMZ'AKT1F$PT)\jFmsOfY_-koOcn@0qJ!9CW>+2):80/d6PK\(TOO%ld[`i_CTY"qM_Dfsdf#UfLn[]V;%s"\-@5FBG9;>4nHU+[i/K\PaE'XS.ktPRN4\PmHcV9l/_q#++$KJaU\EVlDbKg+zzzzzzzzzzzzzzzzzzzzzzzz!!!!7I^<\5SlBLje>`+?Rk\DBWqQ8OT/U!3!!!"4#33ab^V.R6pYGTAo?U4)5(-b]nV]'7W2[2@"rl&jmD0#L9[um!l(iUP%0-A.>08G+geq(+-'hZmm'G%;k*p:h43+X(oYV2(4Sn9:YIa#!X@*a+!!$,'eItB8,EFsml8/C9euW#\ZB?`@\0C(CdnVu9-*q71:=[)Wp=lTk!!!"L(6h88rV"u!PsbhH4F-MtrSRXOnht@=N#=FKBW;S-r,C;m@H5@e.u]Z\55=&g='g.uVZ#e\Y8ZcIk*p9q'Lh="iUi[bhMD`\//kVfaX<^np=a9q-Vc5iDY/GFfWfA/q<"TIITh4_e#-!&C9]b'Ie%Rn!!%P\PXa'EY.O+jhAS(U5ZW..p"+]f]AG2&M>,Y4O8[CSr_kdbs8Ms)la1TfIfKB@O7\mt/NQ2l]^sE!3Y%Y%bFYC(jd0>GHKqJ8]6;FKpZU#bo#i[>4EA%0lDmGNat'YXF6:\VN]EtB]6:19DS,9OYr&KsdB[]J^.U)hA9rH^72FQdO$2?Hn%Gg>O[gI\hMT5l9>/hQ9;RtjXKb6*gSV0"!!%OMX.C_cnA,@-\,,d`QV&ITV32#P5S@S\!qkq;d%RdXc+>[A.p!m-u[VZs0kFR$<.Z#HDFe\K:hKnKHhgG%TM_A[4;4i=6l"Y\^!!!#$72A>$giCU)@4kVfH0'A&16^F_$e!$d[Fa0\E6sRj_NMKb[M-At*Y'i`d\TZ?P3.3/XlKiefV$f<2jZc9#1:47Bhg-q\,L["&,T=gd,"H`+^e'.1Z@4nm_f]du:rG,qaR9$<]1Al82^6Oq6'7!).W2r/RS@okMf!!#UhGL0W-R:V*^)jY6AZ,R]]n?'1V.VrOiPu^N=;l36FQPWqL;)W^_cCM`MrU4*4_$+bkq.<[BZ7,S.LEEC[b:gVXiS;J6*Lk4'?@2'=P"!cJ!!8i7.AX?[\9%p^jRi\Ms7FAmLorhL[kt]!en@:=T!!"iJ(.HucCY*j7V3bLLEoLf2SMkcajK.JN/$+hIIe;#XKe6gIp$K6GSl9tRk38e9^=ZnQ'rBWVrTn/QB?m#GBbVRFC/fN4]6E_\\RuM^7un^j,`ACN2cJFK^\q&=3XcpP[VYS2dN+XZ.!kplpLikuJ,T&>nB*8bXNLAE!!$\dlFCb/OYt`q1Y"$;.[o2>G3[SV=lJP9Ii\p!Dr895Cp?F?"uBM5q;lZINM;U`9hI'sNf";c2Ct,s]C*80,Yo-AeZ2bt)%$%q''Y'[;%s!1?lmE371VB9J5ilE>1(`m8#O4(='[[6S2kY&G0clokqCkAG43-=Sl9PAh/UIUZ`-R#'hrG2.?&NO("%Cq]Mm=bQ_+c[M/ef2uOB+8k%%479UgH>I9lp?dVF*BL*''Fim0F\@E=Y..rJ4K"5&MPf/"L8C5CHG^1N9F3ZMmFsR8.SgcWp=jM0fO9P7d_1#%k[[k_:7XGZnA5QI&lB>C!+6j^<"oen?$G+K^@Rna\KVZXEQ/m\QF"]WR57W!jclU-=t6T%VG3QI[bL5\kFP<]b!se5DS%K0?n+t8qNaUu3OMXE4n[<'$QJQbX4Q8.p:%m[k)#hk^]49$M'nn)pu73E9gq$il(s`P8OQDU!.amf#9S?_qWk?"o?KG^%R6f(rV#"9j2X[X)a8XoAC!ATIeD5mDnYhpHgeXL=.>U\ZY$oLp=mK>%85jj2aml4dA'3m(bt$VcTZ,R;ZHdtzzzzzzzzzzzzzzzzzzzzzzzzz!#57kRr;KA$NL/lEt\[i5rAWB5\nouEJ2mnD1U0/[Bfb[b1Qr3jm3&UEhXs68/.ncZi/@qf`c'NliOP7U*qTa'W%)$rR8pB"_d#a!jm!B-nRt(V3Phqm=3?I0lObupKfkV)u%`Z&j/jd',BHKqIY;l2ChD?BE#AV6)6DRq:jJtYPe<]o:.I-3TYgUBt.a#H)jZ/'TXG0Nh\I/ff5.p),i9$MI*].QWqsV9aYBsC:NAo^MDL_]`hp56sSTiqIb2<*QpZ?V%=?n`e(Pp>>Xu`gd7"s8HWn0>"kcg-#qHMd*=pY'DdF3Zcn:M!CfqDEF43:*leb#WcT\`ZkEIJ2?lWZ?b<9,+3+2(FJ9[FA(bch5XP&,#DK5=QbM%Z.Z4^A6o'fNFm4.Ysf`s7suNWm*K[I$$i5))5SgSk18(SCjuM]?;h=XR*Qn-nVApj7(^@Zb8nA,@U5QCYfcTXF>r:mR7:7aRn=KP/Y-<7;15ZKX!MSAuU],`tVN#^QdJ,bo0bVRSHX6.GEJ,J;a09.):3rY.ZHW4m/'TJPKL(#Lo4\QQd@Z;:]n$UbR7HKRoqIhoQVKA!R=e9p$R?q6+l(a;'WiU,uD;i2&hMWJHfKlB0SXL:j-lVu!HMRF'YK(Q[fdN!$Dc?#5YJ0jJm)#$1]>6t20Y1-2:KgAcG(Cb7n;$Q&TE"iPU3EM/RBkUgbO)t6c=Nd7LED!?_@&$8`Yk7Z4gTt%Ml7;YIG&h>4SFL*>A3k.7k5jBdXmo/7H<]Od7"jge##i_dHK>'^V0*MqmLG#4uM3*D;1V)g?Fl(?HFON0BDm`O%E6'R!d4CpIlfTBP*6`U6f24BhWQd'j&?#@`]p_m*VRud82V>1QB5dqWk=,IiNLM+[>b<%gl*G]\nALVDWItBFLKa>&17=E6g]AUltMJGOOBk,:ft1Ekd)%ZML:D'l.7mrSW;=U3rA?Q74A4q;mt'CHoQ2e)n7:iesFTlD`HT`6C6u>kVF[_T(n[U%DO9fO\Oi+29/%rX(0Wn>AML.=3R;[bc>r-_Gd,NA]9X'c'q_OlMH`0&([#s/B=IeQ(4+F%t8h>uR;jQZg78rI,msb#CpYUIMoHaEr:nQp'T^!H'$X@f$7Id'i]C!%((]s*7j,Vg,Yj8I(NYsW"WtXsi^AI>4e.aJSGi4-M&q@qI=e5D5)5r<=8dfB['TFcW'LgJhqW,b^2qVMjW-ms:a$0Ltj$SP03UaWPU-]7sdbPBX]#NsI6\c.KrkJUHr8Sn!3;MX!@oT\[7N5?UkCNmq2N"ZJk*e$'8H3IRjH2sPjEKI+B46K]%m;`Y7A=CQ"E(d3Q9g--`Q020j57WMm;FYlpu8Z,UZfXQ'=ZV'MqBJaoA8rLpYH`p`(h#!fRNquh`'A5;`#PZA4'U!P_q=QMV`L->uA?!SpP&qYr0O^7;UgnT7(mY^PH(XIq&sPpu#-1[F\`sr-tPr)#HtO(5ei"r![GRl)%>KMdQB+q@e5/3pWkG1\]6rMPBF=[pBLhS$8e_:Dq>m3S'#@`p@44QrGjm_8SdHg\El*EnH[MlcGn2bNf"GMd'ZIW<*r^$hfQ)Yl3iBQ0;hHAJ<&TVb6,pf*%hgb\)e&t:9nM5R`$gY`=3!r_oIJ(HUdkA?"ZC:eV6+=!F)M@n;PclE!ZDRnkp?iTuS9.mbcD!f,p%EiK-Ie_l!o+-?G6WPsblI:eOg*d;8HKh9SQ3Rg8&8uEqiJ-%D]YPA@U?Gt`nsB"KT3;-F5p?<3[b>KFk!m`0&[c:lZF5t'_R.U7,H6us"U5JYI-IJoG3d^2hR`C2>>rd0p=LTrro5+#.%L52kF[gPbr4<-rZ4+BB`&lmkb5('`m550hgG%?XQ8T?O3[ab-'LQNVW4S@?[d9$1BnIL[AOfVFlp_/rc**,722S-N>dS=MLkDP%mF)tF+k?0B\0Cmd62XPn,NA?.URGZKgj8#o#`J@f.+FhUVR_'U1i78Mk6U3m'G$Prqbq8+AYkAoG$<%(/g$KhljmX.3rO"l-1)7lY.V*e%'P_/mZ%&Si.I9VmCY;d?`55-lRT=[b>IHXgCuLJp07/GMp8f78`^WrP/@K0->GsJ\lS>b:GcKRA/n$cTG-.-T8!k#NG[Qc]8G'Dde@`7U[!Je4p6;6r@,aUS;F)nJdpfj#!n3<0J^]\uk0d++7*eE)8F+V;l.b,0*K&%(V;AEe3A;5DkIB4aPLE([]n^B454b^sU$`Vk9QGUaZ)k^](XF>0\OBlD^]$+/bWL9&[.dh0*!:p?pc6QiAS,OdOGA'h,*(UW27sDnYhWF5;[bgSmU'M[1j(LDSm-q2NX2VFn10X[#01+>Y`E5Dp8FfrLYqO3"?PN@atoe\FIm+D)[XgQ_0C*XQ_'Q$,N7+$)%4h%gXd=JTMP=e<1(QJ5YehtP[ZDn2L[:q`NM8kfkD^R>[Vacr^XJGjL&4CX1h]]$72rY`5q,Zq(=]92g8.H/b6hL"jd#SqF3b(5Hr*p$^-AB)l2BKT=_*XiSN'4jOLqjpZsS(MP;h%0:Xpr'^a\dF4qXDo^^sr+(dCZabTESMWMcAGFBpP'/XGD?@&a;[(4dY?ZO77e)kP*mFnru]=Au3pu-o?VD7dA7ibT3R&>Y4.(]9?X-`e@8]j6@V/-jj/lk[rMk]l$P%ImD@t[#>gf"o(5nuf8fLfWRPBM^)6\\#)fk6p?XX&e$/TZU\<[cde,JBs8.>ensn?t$.VFskV\DrUd$L&G*.>g#uVh7mA-nVAp;7,\tU.*LsC=,o+8WtLOeD@-tW,dh:DS,;EFDb)8T'g@sbphfuAEq[DX00$KN'5`@&K>mM&u1[jZf3AO"-<'"56W=7E:?)PKn+qC;`usQ;p3b%D2&>COCoXeog>aa0o^2-=*KG'LgJ:s2'uG9/RPTO#Z-TW%_VpJAMYI7n*%GbCr-hYZPK`DJIOMISo7cFhD>Z1@1\YEkbd=@_oace)R.uHgWm*MFn@>2)Gjc?-7VbZX3Z"'+Q>md2('taC,9.hZN[\1d;B_o7=r9$9t^\mZU6WK#>oLCBV(b)l6;,6JuTk\qt98V;fIZBjHmXZA^0"GkHDSmgA'ZUiIr'T/#96:DnPV[o^ZAhqU`Uq5?uMZaIudX%RSU'nV^/)b4P&R1PPqp[[C^%kjNup]:/c5I7-4/Eu?lP=:@o6PlC6s0;jtT$2,$.4Ajbn+bq%Xe58`4!K8F!`L7W4j4@`2br:]mc8t9m<0D,C>r6T9r:8&*hL"_`9U"fUdCT>SZ,%35U1jDZq8lE]P#WPdHLt[)/JdCs')W/6O/@/%(.^GNG'LgFAI%O\ffqkpD-_GcA2Vn9!^H]DJ0T)_Hp27=lB%d2l]_h-/4aQ`KN1pdL1/JKYPSR6k-otq^PYF'h,Usm[gi7s^`K,.hU\=!'.p\D^-10Eo>@j("Y.Enu6%]B\GO2/m?Fn&f96BLN/NZ6W?!]7-kg1[E>gT-+g]*a]^)>[Ep>hH9kq^\/Du[+?o[[5bXf8u>1^:#F#/'Usd;[8\\(&nk,:QnTHJa/F70d;?Heihr%2goH)GdiBcHbGb7B'Ca`o6ILI,%u3WUIC\T'>[H)f;t0HgeY7C;0Al>M152isS)ck>+/'UtC4L?@2&rhG1QC>'%qGMk2Pi4i"#4(5ei"'W1%oUaIrf1/5[`oXp,t7F;cE4>C/[Z,IIj,\*1"2%VJfI`kbo@>4W=gi:@T277Xq3WK$K@lHXOpu>l!::GZb79`Aq;0:OIa0I8,jHA3HrC'S*lI;fdF%$W%&YO1/XG;ND=72t#nTH9gU/Z@r3FB\)#rdOb3(LN#unHb_5mBp#C:M(>NW3G-)lda50VG3QT3\>_kU*rX?ag:rD@ip-rp8tA^Cu4EB&Q>Q#.2t]'9q%;A]<.Lu:u1uCkd7m],Kq2eGL&GHUgp/k$t`7!rU_WZMkX1P;<.-i&ZK6WNkp#"NOG_74t:-AST]mQE2qK_6\g*ah)G5W`cN4kW?+3KjD:M:t8?A$r&p]C3J'mOsemK>WEQ>CZVE]63G*^QEK[2:nq:dRmBHaSFE>2.A%OuiOBMfJ7>lSZ"(gjbLq4-XbR<&P#Z0LMGC5NL@U/+EQ8mlt$WkSE9JpkFa2nb"UUK$;?mFl1sM7O"I94q`O$REA]iP+PeQLk[LK)e_',"Kg\dAd(G:2YX#Gke&p>IRa_60hgb!t`ti"U4`9&b`>;m/aX*:Tlhl7p[J>1dpu$c8c91^BdnW!,Ycr''^.!fjTjj`E/P$SPQ*^GA^cJc.jhoBbBt:0!O#@Rme]#38oN,??foBd%Qe2ElhdK/[j/,9/Z5r)b<@o>*(.).qeaWQ*UiTZTnBH%hU"k.gOh:CNoEu8%Z6($_%*>JWV0IVR*cg]mB?tm'4T7\mI!66r@-L-qZ"&qko^c$T,VT'.680\F$`Zm_AdN2jS/t$d(*kg2!nJHgeYQff]6*e+3SQd#>SVI6O$EVgo&RoPSSIlbfjB4(A[VA2J^6R\I+"f^?[r#s;]>JuZd5A.R58JVX&h+s^B1c_FobcC"]=ogQX79%p=nJSs8@5m-"p&=I08ANhgMaGN#b!grb;s.r,>W9CP_l-)fJu,jcsJKEQ4iA?M``H:W@ptW5=&aqqjL(]^qkU0"U,,9;7solddkqpYL6Ml3nOcUp0@Y`ui(0S9Nh8VeGX6T7&W/ESc!(h/^[j/Xm,]AiY'dM%_8VQLimQcdbs,[FJ=Dd%Nh%k'klaB6ERn1&>kSWM_Xh_C@V2Um%MTZ*Q9`OX#lG+rYb+q<'8G+g'_I?$G,tfOKu%))J-=]crLEIKf$4DNA`,pccIfieu,Fo?=8<]'@O!h^klcD;)>t!sY9:c8eb(m$Bpn-W-*De>OcVIJWRQ/[T6@-76;#m^qXra.R]Wn-qL%kg6]sm(N/MFk)=GjfZ5`R]:f6n]+)ecC?odO@'LLn"q*TCqf`-;lpPh^R(MIXBDmHdD,o(r+LT@JesHI"bK9J]jod7*)VAX?]reQ6*pltTr0Q#dadnA,@)k'm3p=&5C.F9`h.;#XV4r:8%Yk/o3XI,/qs4nHlRq'W8HW^P5RDR^ij:4rR0PNnIB'X6N]V^[`>@'-(hc$/PSTKJMT4"bSTWNJe>^ooRr0^5ZI#Q.)u/p?&!-7u2VW&sY$JXM5Q%am_X4hihR..NmsO:[X/rU!g#:(fVk"UbdDE+r_]hO0)`R1T5Pe6A*,r[oWPY-C^);pNE93[p7:-5;CoVna[]'mB1c8k'XSiqEiH0g]SONo*HIg$bgDVoj5bu=?6i.DQSq<"10SpP@72:dSHIf9,>$Lb\&?AtYF>Agu!Sp2Gc`cq:tB:KPK%R0[G.P;;iMC;()ara']hgYH^2r8f/W):>*c#6!I()i22#6+8D:LbLZ.5E)O9RG`P(RAno6=hFSXgd/uFLVtDPJn>F]OT!BT7$3$mh%D]C*8_btCQ0/'V-sg7f74a(bqcW`:*#q^HUAak*g(Cb%!)LkFHhRGiOe[2o>=HIt-7`EJ5^D:ISS?gp7@,XuC\!kbq="7;%LP=Ytr;:7=#=C^W6bjc?\TD(K89i37l$R0`(h%]C0F4Wd>97(Bb[G5ce'!&Q"*cN"ohZp2961+kXCrm"q0d%;Y;7UHshB]3n-WYn;jc&Q(ij-n'rV$hsVNh2AU7Ao8Khi-dAQcQ@AUm+LRG3G8'"ZbLS84H-!MTn(Y>?1*`c&N[7Q/SArVE?8b^9!G&J$pHm[VG']'?:1<`gN7.T0L#bbg7')'*@H-'h**0"0DAB:Ns2(:$ibHfg`/:-SL7=T294p!m-i^MfYNr5PjT=Dnc$Z^@7=^5,kJArusU3@uW@?N>7soHJN_q7@ibJ^V69i!'cMm8cpP+MIo7R(*mtUraR&_A$`Op,OL;7r:.gCWa+q1V-5Uk(`mnffWg`'qsCk"bUk#R^@6^^/r2gRdn`1KK?8]nR_nM$3qPi^f!fWFj`i/76HOG>Agtt$6qgT4C*uhMiu-bBr]WW4"[$nRet^OrY6GsYJ'XeVaheRA9p+%dB0n7HLoB?O!TWhE9aF#7S0[VG!26S(T\a:Y-lhaX]i-d@Z)gu3pNXkT6t\+TKt[+YXACakB74ts8;I'R@C8N+%*c@J&idgUo,qlcE^ca8ft43'/jdAn]$1OYJ0i_,318X]TNKd"iJh,&iX[]ZraG;PuYFd$_lj3n%BM`0c8bqpYF;dU_-chfO0>R+C`cm6\cM(^A@,qSND&@p>*Z;>TbU?o-oP,(bd)tn%8&&q$JS1AOi=.*2*2N-_E50d\MET>(/;WXDs)?D"2Iee0@@$S/6[a'3p_s4#jSWig)`gMOF]?](QADgq;I)#U:Q`/:>RRr?$/VN!EYaX*;/FONqrU)R1Up>dj:jH;)uZrgaj(!]&Dr!9*\[8SLAe>ZC:=_TFKk#2uMJ,fJBrq"H#TAlsh0"^J5Sea`ARr?#$SmHBP"U25l`kTG)9;LG7i.DP@<*aK#?QnuJ'OH">Fk&*E[/>1AdRu7<(Okki#NNg`903\`'J2:,1=B;@/PB6NC85IYNBGq&CKJ^(DX-#oX]r8p$L,([;DrGsL=)bdB,1FDkqrqVee"?V=dt7PPc)2udp"*QK?/aIFeY>TnWi5@6lgYDsjgC^S!V;@#8co\p.ps/Aqp0"g\jX0&g6^+^#E,"kru8Y*ba(fdFFm%/Rlq;$8P'j#YBR:gj?mN$F2FQh)M;57W^4Z5CMGT_s!i%`4:73m!N]Z[MN_rLLnW/0q,7i8PFAIHOIJW$j`(6le^Mina!c1%hd<(1\c^m;GbXpE&l-u\2W`'Ht:H@O$e:urdBP3*SS/Oo-j(][He]CS2"^(T_u?FBt!cmHZ)W:SYBf6U$nsj%N.$t`!*2"MAD^k);AetKbg]G(662bZt\".(0dm4c't"BJ#T0CY.CVWG;[t`s.(X>0&'T5[4=7%H"QR(_:aE7S2g&AS>Vs)Wi">B'q$.@FRnM7h7@`eJ(j_uY%,M4c2Uh+q=)94/#j'kTA.>8GsW4A!K!P8\^K74AX?[(Q3okY`jd0meADMC[9m$f;BY"i(P"RE14@r)G1e#gi6)R;e)BEA!jd&PHC2M\3M4TmAe&L0b5q-JF827JJEo7SMa!tn$OF!\9pfs>=8kg6"pP9t&]=a&J0.r)R"D(WYjl-lQNZn]JbJg#:5m'G$dI\1ktbr4=P_s4O(S;m_VHKh9dEW,sN@O_nUFE+"+"47M+'Le5LV_P4?e#1O7/$BrC0"L&+auO*2hL5.S29iJQ-sFcFc0m'LIL80qKG2e_;E""!7a]OHs1I(!U/*rF<5kC!;Q!9\3]Qqa/^DKh4##o%GSMY'/WH4kRV4Dhe3Bb(Ro#lN6jb3H*PkL_e#-l#P/(AZ1B0(2g*>\P#9.skI-!f%H#0H+DN1qi'HIK_=0-%lp;lfN847>S.dA'4P5WZp2&L;;,mC#+F]^tX1&!(:XEIP;#I8s;a7:W:/elljchV,/?^]+3/+*ZL[9q!nqR:HE^&;-^!qU0lp"7EbdY&sGVG"#+@G]OTg='KOL@uL!Ih)j0/8'r0>B/dP`:(\p(;VP)B/_.LZo5'1Z5npH&\kd4.CpM/0:H\0cY[PGD9s1hJ3Yf2`%TU,B1qQQIP>=@[*TYU<+,r0#,o9p9EN5,o3i*dV`es,f`uadCTS!_HYLXR[93JKE'h(3.m[X573:tQbe)cE)2/770l)3]?82"QGeg$&IQnY4VlddXk[(,(L)r>o,X]YP8pYJ!HXVOGRG(D^S\)2]8rDD4PA&i?a\#6#>?QttV[TQ&Lm;sFpi.7A9^:@1?:@\/VH(P9dMUI#IN1qOeNi]1qRVT)%$S3[L-`+3Mo?TWcWh"M)\M[AX4&'1'&nAlt=4br)dS0pQJ,T&/.TGKS3K6]N"7-l7AhS#.d72g)\6-/*/XeG+8doqg*Mb^6J7nJu2_PHC0f4b"Hb,GZ7F`CtHh?N!E90k2?um&OWtd3Ne]C>/b,Up\p?^IRn\ln>nrr'FfKfp.a^W-`aGbH@D)bD%us2Rr=E:19=`m6%QqtpXbr.K6TDnJ\Je_G(Ph60)r86A/:S4(*KWi,d.a;W&o]ZT%G[S,7F%+V>(U[N))1DT4FodsPdXT,g?4(@"s3KI"pYUK#hL"^N(bm4(0D1o.$mWfR+!3<7r:A6MH)&c^8&,#rgBFL3Z+ujd?!u6b=eeHGMPaBmmW0s(6DbNfcK-TS[,DN[r%P":11a)J/UAqJ3^P[oZ"(gdG=7m(oinZrWZIY='[rpRMq*c',`5L^["$5g/jPiR"XnH'!"DI5V9EZRPduP6!hXr@5@T2fLIQr3>H?$4[t(Kk:2oJgFtMfJ:+(Y="O5CX0-/`-Vo3F..>,`5L^["$5'4hSB5mJEp*fHaL+Q!6b3F..>,`5L^["$6Rgie8%ZY+LKfWeAQ:m`'p[3IbEQ?%N+[_"6<:d#[IMt"Sbg`Ujj)J%Vb!/+J:7="Rq!d5U-;:B4*2%h#!Qpob5Q_Wf.,`5L^["$6R>]kTn55D!GP9uc:\nQI/fl5>-(S*I$>/&9:`uGca4Q(_lem*:@F3Zf/Tna\8jcro-39#`BN5,,CGMecB@k)8RU>s7Q>@s:7Q(6;/qt986CtPrs*dAf>*g:,K<"u1cHj`d5F9*;A-q]oVr[Do0eHISNCB&q$q=lfp\&OkT'l`I666?.o!/QQ+r`LhVUWDXGlBCIKGMRCcbXn-6g40/$ZYCqH%N[_l5A_iH[!D9*kpr`7Y?q$=ZWGm]kH;GbWY@nt)12fgk&^VBO=3_he,Ce;-$Fk6hg`C\j2S3)[9C15KZ".]T76WNW`ed=g87T6-_>QlP>*rl`rcMSaD*p8kbD!qcp7oeZ?W)lp#]J/18bN,J4*8WSG#aH/$TJPFk0\mZZ"a8`@kM9_$0AWjd0>GT%5u\VB@m-_M$"+/R,Y'2f;lHFo;%)n`iR_D,e^C\K,$daDl;9GF&:RN`0$Ztjo4fU[:bVM+V\GuR*UV]4llr.%S'V.*s`F90OS/jKN=!!!#A!<<*J8,rD2J,]9$"q2>&GjsY4R&*KjlDgm;ZH+6]HQhR_,E=aXU8$Xss7_$+e,4^jiJ7=XmGG\Yj,ZDgFQh(4_f#\=Hg\H-07Wf@3TloRmBtQc#P$i85Lra4X096`jH2qb]Bli0cT_6K/$F?i_$@aSqWiN_\)2Wr(>tHZ?E&,=kFR#Q?6(tBgq6pN?\Pk1%mBP]SMb'+T)IrTY?l:p2=[B1Fk0]DqXf((aX:`GRT8>dN>OD0WiN:[#qs!adV#.s-K\?*+_ETNi4t7']'0(`cbK52Hb]C=RsN:(9V4NI[bG]ch7ImM&^NV+bqVUcp@o"/@XDTJ,A!XMX*cCL]k<-&k`qgO-0l(]J'^-;l35kAsm5iIG]>5SUrl7rqbqTRP\/YPuVG?Qnbeqi`@D-?#6%bX,S#TC>F$a9e3s!,)aCNVoQt6^O-1[g8BqS*hR/Hhl'DIoO+GR2YudHca#V#^%Yj"/mY2655M-NS&U*U7,ECimCAZWGl7*P>ISL@(,FE#lDUJXc'K)oM.X_-\\%D"49=F]e[op%L!sT1Tc_Sid80ZB'm+=%!?$"7JCL8Ok!6RTbU8OQ*g5nlU?$4[t&XT@hRhgLW\`T?(mFk!S]UIAulD^[*AZW5`3r'eAhgG#i`.uDD2=3*"a'/DPPS-Dp/$62,8l=uGF3aUFUQ8=3`uffd]6E_rUb,cWLrZnsI`<7<`3c"N[b:0/_kS;BAD:grSYBZprV')&+tBb/p=bKF2nn7*)rf>'3rf-@58RUId:`sAY3.iY;H]9O(LMR['j"Z1V3bMgXP1.t_[\arS_J(t]p?X,0O[:A'b)^?A_J8>STRt,Fn!3PB6B5!rqM^mUOcEGrHo231NI9DA*L$*%q5W1A*`!b]-n!d5a%l*NAo]r:`cCS(h(EW`Gm-BkE1p>cCA%\Ch)rpB$?Y4j2_2ldnff1M_DfSg*dm45HIc3EK=ISnO6,/G3mj'Ie]V62bihEi#PH,F,jgl\#ANke5DSUW?p]^F3d!DRl4PgZ,Q8Q+bbi1!6)d(il$[.plAKd_Q<7(Rr4+H78X$bP+&+YLn#)2STiq9l"Pn_*EHKljl++40=B;-fa'KcY%[k7rM0;A>Aq48N]WP3EliE"?^irjZ4'`P2!O>0^E/(@>B\b<[i#(@_AN.;^%^A^VbYJPA)+S6gMaiTG3!D^jIC;:aWfJm#ns'&O@'Mgo?KF-g(_B_n'4#`>d-8A"q?I\IJ;R,ZKPQ@(t(oDc5&(Qq.H4;7Qupb^'qtqO#_^glX/]&=R5U$kg6$nFG1H1W9F`&_1Mt_Kh)@"d`)M(,rH\c3b6#\NCIGM5Bc\P,+.n0;jL_Q7*X)Q9;a$b3kaTE&90R_qTRP[&#jHJW#CTb4FA]pBR_Vb@d\(NCTb,UXC%m&pIm'tO>']QHDn%JI1=n5IT&k2]jlPF\=3pEI"QXZ00Ie[\XGj;9+Sp^+NK(;[-3lO3+G?7i,fm*Gmo?ZSM`:f&)5Q:26--kT;YJ6)5]DhZmflnP!sZ^($SJr^@)D[LYk6@:VoNq_6=n\BgXOn$=c9!S!$ns?d>KWg-pJ:1d\TSF63$G05A[[N2N^o;o:Q%^rc]')i.2,2#&N22rGB%"pJqsM(7qXj#,1lYJBkbMo=@K@[=IfB0+q:.LlYf!2I\n"E!'Ktije)G'ES:CM'?]RGNpg/=7'i0lQo#MH1Tig\:-R*3a[?tC6`))?hO_nn0Qr[F.[1qW[nZZH>ic0X6>3Zo^m+.n"M[6uUa,aSI`>'UlV[oU>F0ucJrUeS-IeUIQ+5?UF(LDo7Hfg`/7VqGF[;-P$:,q3cW3GZtg[;cLhN>#dl,4qa-':YYGOF8$J,dU2Ba8!UeMKj.Ym=L3c>0Vs2LP;hBI`Q20#.>Tq&P1^:eDEB0k*O]p,6dAbc<7!7H9?ZfWer,oQ7Fa2N),pBW/0^,K7\-.<-]<]^e[\QXcN'U.4SJm^qq&?]t1\imV%WmBm>ELC>&`mH%#'2iDm^rr2Z,O7MKNF1VdR-ia78R\FI(-<"`.jH2r1a]`J^'k>i$&c$2;.%5`5"4>:&A2dfBnthHZfPB-qouPM6V9Y!I*@Bf4B*Q&GhDKm`8"0A00\[nk7[IR#ds`IIpC<=3NH^$8ESiJ83lLES,4;pBr?#![B<_O\KsC%n\c+$l)'qfRT6lrp=n'1d<%ciHIHP)&Xh+s47Bhg\:p_#8`FY[X'OVj9@D-#Bd`Jj(LR+Y#pQ2JgFm.0qqFbh9G4"!@CY#T*RABQ'Vb`r;]]m4^d%WseX097KQ6f+X'5Y/6Fp7!r^ADgED'pAHIe_mlptu,NG8R^T+9.uhqa*[9g2gFiMSTipNb4>WcSN?W,M_F3?092b1-e:]p8b5_R$_h;QpTCd@)YkUuo--:dbUb`!1EAi-jcroej%-6d:B"RL[j&AX?]NdhG7BU&LmT?Aamt[b)cgOeNAO;I,`A>'ug2!H/,%3%`^juTC%3$)+QEFOobGhRW)od74b!5adUF>#?b:P7-S:WeLq!`kr7ilqdp0#_l.Ysf!!+]iUR7l1@LE5q5qP>U/0<)$*MOo:nl1k[1h/ud5?@;:^l"NEtXdl_QV0V[pn^h7@`er0X$.q8Y`!0reeD1s&88Pk+7UpYKYo:FXI`XNm2s%WQmheQ:dN9)So:Y/%<_*h2Q[NI2>!USO4PeV_Qfko_m,9HN`(cMDUi(?q"*4aZnHDl%PaSEsA;'La*nr:+S5Bt&?d@^%#Mb!HIfPTE>0NXDD+nk$P^8i/CWfGebAEE>n'Zhge0JWE%p\:=PX`uK.o3`nF2)b[XdRQ,:rrZ.VWlD]AL,IF_q-OF`++EunPXj<-SFc?hd%Nf7lD37Al"[nQ[0iWV!!&E$73bo?43.$G?[qh+G8D?IR\FK3`FFh$BYc]iF[jaq(#O<"SQfp871=9?MmU+D7N9>-n_$pfC&+0Kei7O#['\jTqHC_sSQB0HoiT]&CHf4Ae#%!:[O'3ErA9Y-?(:Z7Dgmm6S^^1#U)-Un18SI*hTrjuH;VE.?@0ZOSiqF$q]j3(HgFTakKN&9=.rM+"TT[CQHL$YQqpR9o>MMQ4T+]dqsCk"UIL4e+AACkIHJbA;0g+q=0,u4C5SaXIemd>a->3(18Kh[-M]'Y[QpYWC?JsH1)-cPk5>,6s/sE`-%!s$pJb+9W+>%[Dn]r9W`>kZF5O"jlOcQaX"2gQRdLKfm'=f8q^uBuN#A-ADVVaJXBhCF\X$rbn'n=8oC&&AU.jQ&MH,Jj>jY;rBnprLDZ\;uU2].P2_K(scT_5Be3E/iK*oc1g1mZ:O0'"BG49uSa3D&/fs6&'p'"AXo[#r[e_+T-*KRD6iehu.kFHf4e6-FTFW*2VS.:B/E>9*`'EE[-s.:^.8Jd8ps8MmGX7j.o.Z)YO;rsIBBP#^:3MqdEr/Nl,(^l`BDYY],o?B3106X.J=FbLSb;tu`==l6T2IP74f!fST<"`oS7>hrO(?tZ[`R8U%,,Ait]Blgr71D0n$%Mj,hr<1R.P&'rZHK!'KG.,%8rc+3kU?8M?iDgaf&GV?&$D:@J`<-J,Dr?#Tq?f1l$S2lkH91+m^9]/SP"a5B:aD2%Qj$=/eM>2JlkIl/U2#ur7c/)NNKSW_@(#.r[O!nQ\'jd#7__UOZUq'cC)nD0dC#lg9k]^H1]?NN>b58XD.45gMXWJUPTX3jpOsKq;`rOm'4S\kPX%q>tR/G2JlXs)V:ge6:MXm!$Lk@8'uG(k*p;'R@aEVmsgDONZL>E5KWs'ci6D(rr)^qcFNmDT0@\o'k1nOh07b`,GpbTR]bln8[E-[VV*O2PC+((Tm5V;NB;7GORCP!=`jo(DV_m8qtTG]L13$ZS<#l1B^;e0:(*T,Vrt1khO8IZnVN8*r9$9hBXDL&-63>\N#O^Y=gM]P1h'Z(>T)\l]C1dVX]i-Tl:7M'm'+JJCLeqt=d=KsZ\pE!hhCfGefrqm-XD!T'B+8lD7<4u1Td`['MZ2u$S"P2N5@*J\>#iH01@e\U&Y1(Ic2]Dp:2/fi.3V!*]7]^d%NfO%BZqY._"2Rb:Bd/11\IfCTb2p@T;*jD:;8(FG=;:Ve8th3bP"+/.n(9Kh!552#gIiI7;U_Fmn0M``D<&bQt)/5p_He.<8C[JZd1fcR,m%Dc]->!<7lWnh(QP@njq+D?$&q3M%l:cb7rHUr:.g;mF&d6[Wt8no?TWcmAX?:l(qa9q;kTCM_DeXhnFMTjPl*D]_'WFOhi8X<4gb#DV$(A96O[iQudr-=JVdZ>,ll>k1NVDon]=SE7.@t]+;"VWu8*al-cE*`@b#rG/mW2?&pBXs0Bg#RuTjr2VbKC^I\3LqXd>q,$o/tjmlL+.PPSbUkKUkGgSqr4gd?('su7Mqs;i+,':mrE5N.44*pVe)&:_0J,S_?Z$!39A^rG/Bn=_Z_NnGIa_V]Lj!k$/A`=MdU1;3%M#humPo-/`a\ttu[I1WlS*i%VbZHmFM@kI4]'VS/KK`i@\,jbd->r>NX78X[a)-XSR_`55=&LAne]YIJ2?,T60GlcV_>uH1/KEDQ4Hk^K7UFOf@rU[VabWf!O?DecN%ird$0fc]5Gnbo",=q[cu?CtZFEn#Vk@30Q%:jN,S)h`Q7"p!m-iDs*QW)a`dRl#)?V3BUFaWDP6H%X2paN+RC0u\;3JZ]t.j'*=!+endstream +endobj +23 0 obj +<< +/Contents 58 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.ca594607cd75c90b63d24144fba93780 22 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +24 0 obj +<< +/Contents 59 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +25 0 obj +<< +/Contents 60 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +26 0 obj +<< +/Contents 61 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +27 0 obj +<< +/Contents 62 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +28 0 obj +<< +/Contents 63 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +29 0 obj +<< +/Contents 64 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +30 0 obj +<< +/Contents 65 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +31 0 obj +<< +/Contents 66 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 46 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +32 0 obj +<< +/Filter [ /FlateDecode ] /Length 690 +>> +stream +xmnP9OagZ !!H܁CJU 20,/Em{z{wfu8͐O˰c~65|}7q2-?-Oo'/&G.Mf'>u>7.y=17i|R>lحOy2> +stream +x |E8^sOfr;$@ $1@P0! B&Y.I@Ј ED'.. ~]"/"$ULDu??cO_U^#Lh)"(?oRRJy98 ƒ-נ4W+kgͽ{мp5gA1&F_(--Ch%x? +N#QUsJ>Sxse~9_[zO-Z /ýRS:"=I#BJg4V}AU\!$u Fw8sTsU#Ř_Y\H~]tY7R#FH2ZʞrGFO$G22T2# "#@N? +@(QDQ(ŠXQ?%(%d4T4 FCPt JCp4݊FQ@a:@X4ehAQ.C6T&B4)h**nߎ@ t'*Ah&*C娂1e0@ +ڃpW '5“qvK$lFqhFe\4i:G|./;h(_ϟKzJpAoW:!_TrÛчك>Qxhn[7h3|ފOvG +t=BxnڊO]_ +R--J*7 ՃO6\xX3w fKh \C Pį zԎN;,^GqE)A-{3#V@;,й| ރKt3" WUp@pLtB7OAFMpC҆ZW*zn?[_ 2Em=p%(\tv~mS$pXu~ߴ@~=*$hi?h@„1%c٤pI1<A _v~JzqRm+`:2אx KGIN].c E+yYO:?Ut+_GdQeq]sI;.qyqFš8y@MePrA23F ˅#/F|8ÖpPր04} BnSCu^zWX^`rب@Zct76ĆyѤ o_a~FF)D KQ"EY}HVl<.Z/Ϋv4d"XDkxI'N6F$9aʰaaN:3hHj;a8NbdDLP2d$24GFN[䑯dai;K>:Z6wLyj^~Kn=o Q#o}ސYkV\[ϜN|8i7Q}I ? +ŋrW}{ z^O8 zG]Z/$ x'9apa˷n2> !@G:#m6IǏ;ppnQ1^'{/:|h "8^c ')@(ad$]|}V߮^7" +"mؽCӃ!Ox +C%AԬCBk8maA~j6Qb|׏8Ԉ# )).8`r@#Lq8 7pT gG;S?(cpTu,|x>Z>K=;*u\R+JiVK6tz`:o&o'`WЋhk, 9sIIA\||R!~_5M-2~V~"+ `]dd* =@0ab-}~ \T .q :!嘕=͖fdp:+j}*$S+i18 7NxhcF#6fS~>;X;=o&MzOwd"$ pЕ[Q{۞pj$kϣSqOw{SʦL.+ yscQ)Sia[m#ܺ -om]uɹ^8{gmp߲%h:‹8{9͆WOzOLllm&`MHu(5:9LpSHhjң% >2w|dĉza 74nɡ$ibV5ȉ%ڝPh 7,`u @k'h sABRs~_?Zߠ:Gf)fSgw>~ZqtA`~8> 1@x<>-pZXqEQo6JVֈMQcq\>` ;!a)(#|9I)i>RsYy)Ex8^sG؝)նFжVanMڬ԰PJ{h:f4TG⡩"ÑfYH](Ԣɧܙ.3#ƪدQԔ_vLuL$ǧ>(ux}3S~T6j'^:4=5u}bPCx$ " A" %B.,<@hW-0겈f|d +0eY5sS.hJ"t"cCEMWlokݰQsuoC|s t켏`{ڝN9>x@\B_PG|Gu؟>ů9~q+76hCɀx^C%qQ&zF0hq>~=SƝz᫯<6gjq@m>p;tِosOz)|, X0>8FqN: {aT.#يV_֝zWT'K'/+P/c+rKCCh c[ϽD>0p9)b;,|1hGQLȳ'O*__0r@ + m&IǘPA#pϜ +(s5_ m7|v;j7[BI30L< 8Y)p)fE`ͭcc]zko^WOqNŃpjZ6j=~/ =.giva01'lXpƔt$i-sӇۄѩT*zS߹}_?c{~4؀ lu a}ܶXY!&~V"Pwzb)BX=uYdble>R&EBn!Py{4Ol j^.Z +;2ACYO7x$dt{vd^޳g|n܍2F;0WQѿd^ǡZW"rM&ŧijׯەĵ'}}q(`Ӌ ^F]87- /- +Uyp4{OLEɨuOQ·n}I/տ]6>HÎ=_r_b*{}v9y;o+ b@ĠkY2=6(Xx#BordNECuoxߦBg@`z[|t?('Cp.3晊p%n Jla!CO +5DT9VO~k 9љKm%1m!h+ٚ!:GukGLkuCLaj$Z;qoX{E+EjԎA@1M> (ב2ނt'LMS3^]?睟xpzŢ^Q(&ڲPT +-+Qh+GD&#jۃ}wXۍ#6FB}IxXP48P՜<ߣB.qtNq`;,'H_nmV9u2]aAڥ^8(Q2OtDŨV2]OL#Tn/8~C`p&nX\M B"L>ip!6b}*E( Yd?/@g@88"/w}|]颫J_<^x Ѯhp:ݾ.tmƨ~Ψ`<9sKx-H\|UGh6X{g4ۊ:fQx~pkڱ㡇vPw,_ׇe?~77ǭ[|+qonnhS"~P"h9gZ ˗7fɟM.,7vyߎV[`S >Scr! i'7C}<%Jt%"{ .|eh˰s^֏aaSU?قGz4* t{ϰ/ nC^}4]yd5`Y\r=.kAzK'OPGZE| mW0upQGIJ4P]g94C8 8hoA' Bs ds( UΥkWx*p䒺N]G8K L[x G R+Q8WUĮK{<1Eɋ!5ite2X^VGE^ᑣgoH4$Фx9`/ 􉦑H.^`Gg,oWE xDC 兊Vj)`LbNs3^iSb%QTUns3d>v˫rV% pCrP+HAdwePeoνQ:(4Ec\`иl{~q N*t(O:)vd$X-q|ԋhAҼޒ;*'`j1IT$EyM|y:{զHC~0}ཋxh.|ģO2\U>.yزo-V{k]/^٦쪹SnsZx1~xI-RU#R[zQd+`GsQll,T>ۈ,Zi#Ъ!+2cZ ޅ7iz@1҂A[8"YT4բH'="<7U=xw/*nni$2H8䎪huѧ\oWuݹ` + Ke,~ .,RZe}}nf3HO@B@ppꄨ |%ݬ|T\NS,c|'գu6{[wu}A+Juڝ/? r +Z!|@ +4=n'ho[ 0d5 GZu-%(,hK uo|ϗ_G%lh畳O7IM_ 3O9C}SzF}sƝ'Ǎ0Hol(1DzU2L)(X,PcĚ%>a ^0LH=f8pZ櫥Bҵ'Sݨ.U1L7VkEˤV粀:Oy#eɩcǺ| sMwrovqW:G2kO'{G|=w=C`e Fm16UwBk(ȒN!(ͥ !VmռNZʡ` >?`Bc2UO1jj 5`2 f$ɺ|R5C|]{4b0_Nq6ID8 %3dG$`dhH`~ |7QۡޚΧ{UG:3:Pk/"499t>r St1" {ERnncA$'X)N? ERB'-?iŏKh=6rEy^"٬MF36P#c?0j +@X cQi(8X%|r}8 +˗?j)?.Zk޸^AY`, GN;[V2/9Yx(lCQN۴?!&N[;rTpHt9%~|4\ ct1R^ pY8Fa*q]tV󡫫"BӰn}gj^6kp?pؼbJj^75d.4,Ts: ͐ a# 6m,.T6PDPy.g=w ~XxtٳFF 9~(,>)>/h+ݤ~\wxn΅N@|K]͋>~ׇY:",Cg̬U?7Oq>ث`Wt߂wE͙ q ̎R2/I$![_A0d]Z6~:|]w]iZ]ھφ\._j^GR| Dt{OXgK`Id0 iChXѦp4K9p|k;~!8K'O^"k:Pϩ~8yW,Oo;^ҢZ]z|=Ǔ1T!ͬȳ#HnI="Vy@&/b ~z3'6۔##;lkȏ!H`ʻjde}m4r$$&%+b]!PWKq"CCؕ!͡aJsʈbc/ņzz;y;(%ᵡaJmХaKnCAP݅>e.so:1誽ǻa% ++^E3Z'^|پdMbN}A + aZKGd7R`IS.yC%KCC ]T1[̃Ěd@>}ᇟG׃Þ].~E;|K: +Kգ--`|2 @\A MUaد&4Αh<-YiI/$4衠 JR=O|Xso\cwL,f'?ۿ''N|ҿ( ȌxX$+=CƯ8,Hkx#Hfb)):և_ɱoz9ycسٮ7sv!nƷv1XϘRa%/ +B(M*  ''9%4[2</_o/kpBjCC~r)DFQ( !A$%d7rc7v,gItOyT@خt0x~3~szY}w~u܎U^zsР}-X>xm~! ~x탊]"nFQ!^LC9:em9>918Yr;۝tJH`-J͋l"NR;EǦ$^K OS^E4Af` ۛ||[ȎأÖCbd+Jf<[yM!l~n"?+37{TŮ-'vnرcCUZ۶`ځ{{upu[o;'cːfBDW,C{rrA`zDXl6:e F.Yl ]8Y:Ҧl/;u5n붭/mj][+ʿ6 + ƥkaf,: XQVNZ`vX-kKwZq82d5 /gULX2,+~3!@6-Vbi9Lm'5:nD^ne4_<6z [G[7}u޽/az_crzA +yl#46tyccy-~ 8E^لyoxtPOf'b>ܓIpx]]DyO\ ~\ò6ŀ!, 9O'H\}O$ѝt|Wn ryhk0fsNaeaFۧޥ`6UޟyUʏNpJ`rn;RP2A`!zƋE{rYlg DTp1)JTI5?KKFԀE|P\Vd5D& fQ%<%^>K#*ykxzUtX0xdre zdYO&zUOMꉔ~{HY8]Į +`9d|;w0YΗkR^X ,M#(wT&"pz"A z8\ )H08t"%|!F袥X}n4!)q$wZ4F?Fc5G*".M( t$}C={|̦ǵv9td8r&o#s8 Z6 m0Ǽ6y$^toiE8nXQ%k33E?p\lɷUJJ6W[Jl{XV+ +Mͫ-Vffvv-m}hnY +fMFap99pVpB>s婐gYc@I!FGnA"X+O^k֋Yɱc[Π>1ed1 4)@5ZB; %$%|0SZbXjxԧX}7ݕ\Kvu]Do#(45(4@3 (vn޹h^|P,p-B4UDV~IEiI]iLnՐឪ +Bseo䷻xmftx+ZƥIv[h,w!h Gpr8(8ve[) Bfa +BlFob*mz\oFFx9sOjg9P3F +S%#,B³N8Ai8M6>~x~T_n{%k. ¥]??]뎣#9#x$ |֠"8|**a<=k! @#aPV`<>5Zk vD_)~#UE/uJ҃)H.[Kr+/p8ȸ{iߜo>o-Y~o ΰޱs1>wd9v:wt:c3MUlCE??0( `? + z'X +|.bNe\>,-ӣUGUvoޝwrp(&^]}x1Ɵx9z!BO횇akϵdnZB6vm@!yMyhkß\?uzFkIk5G\Z@\ZDnZB܃k\PϵU ⹶"=6$ FnTTY8Tᜂ +W32MUR4%lT*́ +aճ +8W@y]-1Q ay0M5КQ +}lWE-e*XRFPjNn~vA]%,^IINNUf.P2*J&(5eJ9JmUTWͫ(OuZX:olw,%{:]ZԨU̪WJ*q2=0K$F`=<:O* ƍ Ǵ)bܮS穴UTQW_QRSuUɠi2mhwJw 8@jP|=0DsHc2OU54KJ*ݍueY5:^wzWt4ȍC[›Цwku +u jc_G Wv35(\h?˻jx#j\$p3xskf8UwfQjӁ*<˞KC]԰md5*WPXkrMH`gʉТxGxdzy%T.gW{0ƬЃnzdpໞ7xO[pOa42e -<, +*ecd"pR,mtJcG0=~aJyZK潵AKYDf>c)*gRyƬ>qUCKhFMX +z4cwq3=r j{f\{q 3=$9=<=Be}|HLTnTOL4xae7ơL6Nʅ;:N)GwL<c\>YdKQv1<vO&@\EflL6 0˃k +{"<́s1L{z=,TBf;Eôl6pWyҿQX~Ds=xj+`)(d +s4`p·v?,xђ0$a4MbւB:Re#g OGZiyL{$zxA_=$F|F!{T6 ׫;c̸1їF`()?s5TF3~QQǰG&ݔ/ҹv#ee2N֓>ٌ^k05t"wG3doQ3=:xח +*) *4 {GYs=SF. W0[dҙ'uH߉'wkXϼnkGv?whcO9 'usCk!\weB\+cn7r{ygB/_;мXv zj%-fuzn7a{gZ.z{wksYo9ϵ;+q<ݝgo{bzv3ϣ#؟=7R-oPwf,kg ̄iK/a6|WMefCo1yzRՌ4LCyYO(ޣ}0tcU`V/e2W}]O}A7f^z|zo?7/SOUPoVaJwJ_WUW0$wu%&|ӺREO]IFo]gYW걷u_]Z&V]QͫUzq?$3n62U&*S\YefIU俣ʤ˪L2A@ϰո}#2ߩ)g#{kG=5}H;jG?_[;z(߭?ӻJϬPsV{U|~Ϩ4| Td6KD(mТ[fqJ\}E2b{~|#6%*c,Wֺ*ʕ:\%bgw QH{YTPލ'w- #W˥JC]iyҺwPd9nnu=4W]TUUXJkȂnY J[)YVCX5T)ehPUSY{n-4 :pXʕzwYu)'V46P|*瀐(DAl쏈gUֹ*j zfcCA!\6b2̭ DGX `=%'A[AW%#S+@кP9[K kcͯN*ƺu,w+q슲WF *sהWS:r!+W(д!Э5CJGwJ}U9 + >tk@/ꔹ4,,5[WWVSE+Qhi8NWWϪahl:Q -- G e1txxYTRsSWAWʬ-rG\E4]W^DtaBfX +$ +d@y2]ݍX= `1Jim-W9F;@rPJzXQӇ'Tz\i) ܃̐(!ֻPfbB*UPmX[ZvW, -SUPŊ9qJV^n2)/pJzA=I/+9FH ʔqy hQ[Xe)ʄ1 JI%{b~Nv&<3yLvX%*9 ha9Y0zܦgdd'Yم+Pҕѓs y2UdN" +S!sptIK?.}ev$׸8e)I27LOI䛦Lߓ2ɅEQHɎdov#ّ;;R~Rv$4;R*kCN|M|#8Q~D#ħoo{KD8%#LbuHbrWkYa껪YݓX[U?鷜Dߣi&:TrA&WR7mf\VF?KӅUr|F.\%J[%_#_dUY +$6rD>8I*8|?_A9v *y>5V8KN6H8TZ%Rɉ6P]%蘿UJF0yݗSk*yU%eR%/EU *9b#*xC%.<y~)¡䐋E49<*yF%drt4c'W.<*a'Uf<^NڡI{٦*yH< l)'n +VI&dcIب6iNmdz!7u SC-Ӆ^ -[Z`4y@%k$ +kU&dޟNV2d4Ãrj&+m>XnVd,SR,Q/~ŋɽdQSXMdJ1F2O&*iJꯒV%nԨdN8K%mIZ%U,TIJUR*)FJF2]%dJBU2U&S|))H%aI&a0ɟ8m}To y*ɝhrU2JrT2LPl0އdl+g"cUF2HR(.t[GX[dp0uB0䖡ᖫd0A 6Cd +%&2 d$'dI2z!JIB +/Z_Nۅ~$NbtMb BDHJ"Ua!@g($* BIUtf P9N:J*QUbZmĺj@CEP:'܊U,'L)2W&!$!* 0dz!(nx->`ES،my2_x0iendstream +endobj +34 0 obj +<< +/Ascent 759.7656 /CapHeight 759.7656 /Descent -240.2344 /Flags 4 /FontBBox [ -1020.508 -462.8906 1793.457 1232.422 ] /FontFile2 33 0 R + /FontName /AAAAAA+DejaVuSans /ItalicAngle 0 /MissingWidth 600.0977 /StemV 87 /Type /FontDescriptor +>> +endobj +35 0 obj +<< +/BaseFont /AAAAAA+DejaVuSans /FirstChar 0 /FontDescriptor 34 0 R /LastChar 127 /Name /F2+0 /Subtype /TrueType + /ToUnicode 32 0 R /Type /Font /Widths [ 600.0977 612.793 633.7891 731.9336 611.8164 629.8828 589.8438 600.0977 600.0977 600.0977 + 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 + 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 + 600.0977 600.0977 317.8711 400.8789 459.9609 837.8906 636.2305 950.1953 779.7852 274.9023 + 390.1367 390.1367 500 837.8906 317.8711 360.8398 317.8711 336.9141 636.2305 636.2305 + 636.2305 636.2305 636.2305 636.2305 636.2305 636.2305 636.2305 636.2305 336.9141 336.9141 + 837.8906 837.8906 837.8906 530.7617 1000 684.082 686.0352 698.2422 770.0195 631.8359 + 575.1953 774.9023 751.9531 294.9219 294.9219 655.7617 557.1289 862.793 748.0469 787.1094 + 603.0273 787.1094 694.8242 634.7656 610.8398 731.9336 684.082 988.7695 685.0586 610.8398 + 685.0586 390.1367 336.9141 390.1367 837.8906 500 500 612.793 634.7656 549.8047 + 634.7656 615.2344 352.0508 634.7656 633.7891 277.832 277.832 579.1016 277.832 974.1211 + 633.7891 611.8164 634.7656 634.7656 411.1328 520.9961 392.0898 633.7891 591.7969 817.8711 + 591.7969 591.7969 524.9023 636.2305 336.9141 636.2305 837.8906 600.0977 ] +>> +endobj +36 0 obj +<< +/Filter [ /FlateDecode ] /Length 688 +>> +stream +x}MkQb-IL PKF%2"߾GK)>E>5mqWyOnf].wj> +stream +x |EWuutI&$ !02$!pʑkBI&\[DA@CY"" jt=`t +jD^1i~gr 7MTwWz{' 2e SOYs?\ye5%ucၰoT~z{QEݜky_ o;T/hBH++=%} Ch?^H`:tLF]D!j]C&h`Y-f"KAsLJlc +&1i$@ǰEK%KCۛ#ڷg19y\X os@̇&m Mx)'M۵ `h&&X+i` ;.7\nZLnĴnj?z[o}|>&?̘\EmN pq-֬Z ӧ}8uJ7E[;ql*&,$BdN0ᐕ7f1BHK껰0Dђ +a361B|,}>&7M XX<7|t]9kyugU~5Θ;+U}rAUT}{ɳ&0U}͏7O@ˌFUc&fCمѰSdM +mo +ۚr&>h.D [?۴4a҃/xh}޻ 4xڴTs6 >TC*~5!,0ņ[鄴 z!d/؏;ztƶY릟>؀{av0^A@ީq6_[ݣM.|o~|3p/mᶡ6Q %X,uGJ{|D + b-Cן.w +4PaX5(D)=@~ їE`ޢåyp'hMi@(74EVHBd΁ӱp}iih{V|L$NS>ZQn(/ GKo"%8 +M#>}# +  3P cA^$G۴ڀ6b`s`(qG /:(}UMˣREAaN$shEX?N/h bزGJv`Ő@ jE큑sœ9P1ʟ;pi鐁3r&gKqѪnF=d%SƧYCr8gMK9)O ԨiPS07 *!On@ thMR8v |vݷܡ|1޾EBzڍ݋̲`QAt GFTM6wUx]-vǧ{ }?Sۧ[\oٲ[oF +*f0$ - D_ys/eWl++S8 o? +Exfگ{㸒FixK(,aD) x;K, QDLL--~쵙 uf0ԢQXm$qO`NWp2w!`6OX`3 \[qOmϏsa~=)pSJ/ ŧq-`J{h` O|OYDZhW{LoVa%,/N)7՛Ä^B]3Mp,}x!|};;,rEN@8d7K ]p;h-*XE*e7qWk˔E2oNn8['><~l-l+y/^ +f8@Rp.-*#t9d8,<I"0[Z}++ ÀXTNv4`"iqƏx[d='Cŋèk[A8,602ԐG%S/C}Xi(6-%L !\*7TɍiTiTU5Rw=إҝrq)p&c9E9?18g=|g%< ""8sďcf}> gN# 9~NVd{tX oڶ6mp,ng"t-vG' qQ⟓aGXaB:Zghmv""S +cxX`+b~W80\!w&q \D3N.hgƈG1j=$VI@qgiZ&ToL;]VOr3$Lvp +}ΆVGRO>*aV'OvڊykZ9^yx?ְ@4li0D@KQC +?ڰ".ty՘s[#XP|ѧ;'nLO;:Cj + +G0sNdiXX", +6:+"媺wcNL(iEƣɦ +SyixA48<-hj\czr:D ߌ>~Vhx-YvAc\MY̽],/.lbv͝E8#CC#CB]`%ŝ!Jp`(E8EědCD + '3{m?K \qx wCc.ª\ǁ+VwuȈs*j7i_w@d~Xz672ߵbk[uv3Lq%Ȍ ulTef䌨Yѳ1s#(otUkcFLF^jjj=j{vu{L4-?шWzb8E*Ͽ;;iwNioޣߊظ[}ǰ-0/lZ_W0lThL}P:_]gp1>Bin; Jef¡CXVýHr]A\5T|~?nm!v`eHJ$"u){݁uI_c|qfw.h<ўu6$#єlA**))U~-5tn:O +BC4]di"/r4xJyRk2yM zyz[;LOq^~t4/&8 ApFvj,X_Բ@V/q}A8K~#"E܈r$#HA=$}H\ +GbxǬe0b`򛛕Jes-tB>Yu[YJJD&'޲*#ilR gIl9PY )\`]R?k:. Q +4WQگtH;'j^mV- d&9~CĚqm)-< + ?}z%$$Q}]"!ٯf+c~@R87W*@(F\/ICH2A*T/9CjWveƭ\PƎ&]9u,P{@KI Bp)ѢU\|_- a$HH4˜CHlh t~\)io탵#8g͑b}Km[-\ z֨Ďlu#왦I6s5GٱR :۶e z(4Y:=wՏ>whohaJe/޹eexXχiYR0Y[kבĠOg_BI1#X >hw Ǒ `qA&dHqh7P\־@- }}_=џdnDVQ"6m5q@UK٬=6oi.nC3q挲vK5 J_[V۰e-!(jVNxsf4n6[m|[Vz=eN]E{8I ;X֘m1Iu˨ _Wxڰ?8)ul+yA/pxgy 9vpl=[X|Zfh7Aw逖` w;ip`;Gl$لl6^cw?_\d&e@V  O`.X"eqdn4% ۸ۅqJD;NsZ6N['?Ǻi#)G| X# u2'~1Vf#dŅ 7 U4ZOǑWvG$8&0&:iWrv#5aѷGSK__,' 31:S?{7g{U[qN~ָ i4"[+k.|1c[0oۆw1=PIx:>f3@66sی̃mMZ7MWio5t wphN~E܂%K4-^j 3{x4YM#eU8t\vhY wCݑ]U ͢^ v!_n U.[z aosQ-9 i"ד6rPsw{5,sqC-q떾tZ`L}u Bo=ರ3$y Y:hp}ݩOxg%n'"[^wь$[5@j{9yCXaBZg&߹+{}Hrwj=D΅Gfg1D$ 2(::ʥXNtq?|HIIKd6>{O\ 8$#%,EmQ -ÐԸ,d%x )Qd0[(ۣ+V<r ]ZrV ,:?"V^G1WLtBi0 + + XДΥWا=]| =y_tV/fϬ!SA"fhm0>t|.˳/yt _~_{oĕ<| nGݵgI-c-̻ai|D@ңxG=pϫ.^J2L*eܽFٷug9Q(` 8Q/܏$@A2)`|tx&.FZ_%iҫ a89hm_F7>a H߄sY}q^_Hi}q\H VFiC*\fEJTa `S +P\ ` D `co܋'$}~r/˔lIGx 7T"1 2rhiiOL-\1_*ņb\)66qu|P'FB+!j˴r^V1Lո"JO^-UwͿ#&ht-W8pnj3`<-ѵڿHvͧ +ψs~ؽUky|F1 س@A]k?8 nDhY%r&"yr!!j D +t/< 7r3۳2|L~NgssF$b&(\!*f:Oꥀ@%ŜōIY|+ZƭWH˔*nV\'Vgg%Wcam:wxFz]},~.|Epjx|oniNi{p^Ǚp0;'@nV<=`e&3з/wCVfuY& eAmVQOOo B2OP؏~Lb0%&-].E=\#w+8mPD@ Ctz ^jcWA C%ÚX29GUU|n5,5֚Zqv1c?d,7+6?my{[y.ӵYZCF|XݵC.:$=!Y>.;a4ˊ.&ZqfM& +Bn᷆ \aU`3& RnJHKO*,}@Z%'#_m"otۃⶎuPWV].X'BVQta6GQPc[gQ ~+iWp T] +.aG ΧҜfNO[Ie^(+ñ4W`_# \}T哦zMZ^së4>gܳ{ߺb +=HI벗UI9ަB>#EAo;5lJF *A-N7}kW3LrXq\¢*yFpj#zAz(:E98 wL좻 s^Iwtfʊ w{}⹣4>\3}NBXhƹA+M(4h`F? +:n0c(.Q@SW ފ~qKmx4RlCنa'(78>T +Gog0K}K`Kyo0;F|VD'tp ]w\/-:3| o1V +M 07p^*E3(-g ?#G),a?b34ڍw!_: mi2N KqƿtohC9#$hh;m$!ߔ~__4z,4v7jx=Yf#דaU|;*{Ľ^ 6\!jy>dw+9cvMF:jY*,Z[߱MJ@Q{v8P mȠ{>t8V; 4Bt;9/4|dDT;"DEF5Fa!@3m` d3.)`]58Ɛ}ks kC&2q7"rsg|m# 9>4p +_|w}m;~JH'q +1 +Ư6A*|m_[@\-(._[B3 k]C8_ۂ*|m +kۑ4c4 +yQZQ*Q#RQT;R衢Ч5^<ՠDj2Q5l**<1X=1Y`0\S )%0柛1 Zsad=ʠo a#JE*@c)UO^S[X_5QS ՑU D5,IͬV i੟)OR~0tZT2fv:GfyLnR*KjxԒzZU5VWޚZ' pY<NF1@.!jWn_KӉc ԧQAu3v^cVS3~lLJn#ϡ >k.̚' T2L ֝"? =RǶ0thS̓4#dATYv=T9c[שэ .hGϚo ̫(trb.(c>~UH{6 *Cu?aTgZ*gcc;|66wY|)ekz2V]cX6b ]JGt.wg劖R<ʾ|8z&}ݕ|w9Lu%*8]V|om~KCugQbyp㓘V)^~R4aE'Ơl6gt pV@Y5B3brdwXfSM!N@,F!)ipV9=9Dl)p5}QpehDP}>gMq"5kOrٌ~Y!Kj.GOdm9WȠSQ((ѫMdd43rNK6@(Z1.Й|=)=Yl`O?'tb֓~;9C埻>0 puߕ qs;v=kF睉|mL@£Yߚu]WKzZtݮ\ޟveDݳr9`CgVey33Yv:_cGg.a?s.,ꂥ%,[5\? XgYڍ̄Kpj_ +O˕2g󭥪i>[.Puˤޥ}tyU`N7 +WkAJz׿\AϪ˺Uy+UXZ]IA]IJJ]߬+)="\aPWRXW?SWR~^+)蟭+u=u5J]ֳcǫK\$תK +Y]ru?S]R~j7oWc?fU&ʤ\VeZ'L?2*OT[Ia< P2lung\H[##V;R~vU׎vSp#gÊ *>ݫ4fG*>?\ҭSu_BnUiP<, }2ڧQK= Ix .I]A7zՊzoY{ ?{I45dO}'?_\ՠ%垚yr(R੯j`U5z5HOځ,ITjIBS*`AZH+гSYm2&r[VU)޲OmcI#ŧԇBdԉފI[Ta`ʫҦFA1 \VTN1YPXmjdj|uVئOITk`%%=ւ^ԫ5zVy*J`$wkJ*h%Սz%ru@KzNTiSИ* ZR@?> DA*0cXIV/TBɩ'H*yx@M`C}r'R` G̑yEܢ| jAfaQIyj‚ F)YghԄi% "ffe, @rʺ$C͞LO-XT9?a|3aR~VfQ|ud692/[ H;>Q9㟄vbB.KT'dʥ cna"xc莚?1IpHTfSoÌR8E +:Q;1;Q,̝H%S8Х4` +/߇/C^t<8}A/5R}g"Z +կ&%,uti8N]/st[>odAUt5^= %0Vz,a h0( `ȂFp&jI\}aQvQ@gr::RU= o=e +o}tƾ!TQÀ{o$UQX/N?NyK +Ra0923v%,ʿ+\Iȕ]\I _ʕ_1WRr%JJJʏJϕnRw.A<'kK/]RtI.[7)RUIUS&ŗ2=s4YҠ$WҿdV{2zIj\aj^Ur8*}}.MGWd[{# Bv81Bmp6*cHp$p GQp cWʎ!̎,h@`G+%ph`36ᚙ]3È&lDC z5z e6RbG2#!z I "K`G""]ܗKWM#' +>ioG -!ߎ&ߴ5F.jy|k |E.hVEL# +iu~O6}|Fy?9wCPrjcps%FN_p m#o$L:a +"'lFJ4@7.&8rA±G?>I^ "F^yy3eKr /$/?KykZ4By^#iCm? ! Rv`9U8`'7 X~y&{Z#4 Ȯ4'md'|l#';kF&idFV^![4fF6[f7 l!F id5ນƒϐVu3:7V#k@;h$r_"`*o"+qw;|/k#+\,K#wj~K]#ȭE#M%7&MY$KrFhdFB,UX[IScFIC_BH7Q&6RF dX0.͵c$Bƴ9Ah "m$kEȲQ22%l#3E#[###j >, &dh9 rFAa I$@, "i&!-TU$HR 8DF.!qWNqEzEz"qvBl7hDE"@!I"ϸ708!l q¤q$T#!v \sHP9 ܮ[9Zl5X,pFLqeH1hDAԈmFqx/ އoY7~" E0/endstream +endobj +38 0 obj +<< +/Ascent 759.7656 /CapHeight 759.7656 /Descent -240.2344 /Flags 262148 /FontBBox [ -1069.336 -415.0391 1975.098 1175.293 ] /FontFile2 37 0 R + /FontName /AAAAAA+DejaVuSans-Bold /ItalicAngle 0 /MissingWidth 600.0977 /StemV 165 /Type /FontDescriptor +>> +endobj +39 0 obj +<< +/BaseFont /AAAAAA+DejaVuSans-Bold /FirstChar 0 /FontDescriptor 38 0 R /LastChar 127 /Name /F3+0 /Subtype /TrueType + /ToUnicode 36 0 R /Type /Font /Widths [ 600.0977 812.0117 711.9141 674.8047 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 + 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 + 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 600.0977 + 600.0977 600.0977 348.1445 456.0547 520.9961 837.8906 695.8008 1001.953 872.0703 306.1523 + 457.0312 457.0312 522.9492 837.8906 379.8828 415.0391 379.8828 365.2344 695.8008 695.8008 + 695.8008 695.8008 695.8008 695.8008 695.8008 695.8008 695.8008 695.8008 399.9023 399.9023 + 837.8906 837.8906 837.8906 580.0781 1000 773.9258 762.207 733.8867 830.0781 683.1055 + 683.1055 820.8008 836.9141 372.0703 372.0703 774.9023 637.207 995.1172 836.9141 850.0977 + 732.9102 850.0977 770.0195 720.2148 682.1289 812.0117 773.9258 1103.027 770.9961 724.1211 + 725.0977 457.0312 365.2344 457.0312 837.8906 500 500 674.8047 715.8203 592.7734 + 715.8203 678.2227 435.0586 715.8203 711.9141 342.7734 342.7734 665.0391 342.7734 1041.992 + 711.9141 687.0117 715.8203 715.8203 493.1641 595.2148 478.0273 711.9141 651.8555 923.8281 + 645.0195 651.8555 582.0312 711.9141 365.2344 711.9141 837.8906 600.0977 ] +>> +endobj +40 0 obj +<< +/Filter [ /FlateDecode ] /Length 696 +>> +stream +xuMoQ=b0sjBHj)IU#tT dE7FIKř=,ݹ~: t ]Muwoi~9&y5_> +stream +xݼ XW0|NzaivA" @]A¢QkԀcAM4ތ18$j2D;&7ff$ +S,NiT9y +FՈi1}3{FYuI!< +ޞeK:Zxǖ--QUsݾ_!$D( +{-nj)BpByspZTʐ Q9 c}x |3U ׅ>\j:NQ7-lV/Q9Eg0'XEA +@8 醣Stb3yE8 +[8ZT cZ2:Z w >Ӏa{K@Ǎai mk%# }&\"!v'(?\A_!@| qy]X1^LJ5ʵ-FK;jS67 k[/5YJ~ lC\'pnl?E=zo$<"pe@aepZע&+JD>Nƣ\9nlo7kIh^9u+Qp ZpE8Kb"94hfsݻӊy_a(~gQS)36sa,,!=p>3],ᐔ(yWπ+P1c 0V +k9\C{c AK!G} ķ ]b8/kCGE+!՚;N_O w'n0.Ad]Ϡs?uJF a + y|Zk%:*sP +Eq3JgX޾7]x]ݐlW*]KMɦXQ=M3G' +8qh,zBp&ML's}zκUӖO;grr{qAogJ`Jؘu~m˝w)WC_!iCj3-fyq0a!Hd6T@BKHXcLVjui .~>^&O7AsuѪUJ|Dw&=!IpK A !$_qrW ˢҕ]*wVH/n +YtKJNdtS*Ow'ۆw.w٠w"ĸd&+G@p/7aKˈ́#[66נ=/PF +H# #ͮ(bMzM}z}W=\ +ڭc!`д0E +S54dLL040-Upj~S׊6\~v썳Eӟ2E<Zԣ4mL_t=Hey(1R)y)d[t!&/_*rTUzdgϭ]k)**Cpj%U׿Әg!޽Jdq\jJ{.fS(l4 :h-59ΤuѺ\\Q\t T|¨B\ cUXP\P Vu,N " * M9tF=?ŘD1 +Tﵫ$0N0TbpSH+1$DgsT0n'MI\J3SWxdn}ikƮ,K=w'-+YQEuVvys׶OjreN5sn^&Ʌ=u3c| *}}cxY5?n4xDVme8漴kWH5px@zXaslT?pk8q0W` YubXh ptZ~7Obz8qh8qgC r4w]?.\f@=V{#@9#W B@уk_ZߋA18!1|#(b1u&T.BHURթ||ufZp 4;NIv;NNNNN yAxA|A 4q|;NDžqqqqqM/!؊, */1k-3 0sGkE!]ox֥ýGҫ90}u℁toWp:^S` , 4n%Nd&+іu7^1̲o߾8zƒ+7O|3.ڟhLw#c;M|:<-=.b`y_GH\" + |ዽDzA=\7'r雛[TZ鞃ضeǖfuW49#,l$a?oBGIվw{nX1rV<#QZ#^6] "%Cd +k(@ɋ:W}_ux,]##gghXf!qWp~ׯ~ y/ikEh5Wt( -.\ҩ@` BqU:@ᎆ1.]/|eMNIzU3wuWh^͝xΎ֍OZu…:K\FU@Sik vQ.-`ï=& +ІzS1_T@o2);Qz?t4I0!3.Zu+sgTڧcW/]~kw#aoX%=,J륆@Y|}.n- +؟GJP'xCGä R2 ֤Wc aWiHRr@^.ȹ&]Y@ɇQg9S/J*'byRp +D^NH^ƻT.x!Lv;hDnR +X&'~OBm|s +ϥC(@&'?*Dn$(>zqK!WKH_`SzБVX5P +h&< tEo +Է6i; +ޞ*f + +a3 "MMh` .Zݒn\׿V,x9|r̀CREEonbV,3CO;l+X0klqܬ̌ccN0z𮫗,YfɒխXk|no^^tX!֧ ~?j5 Y նޢEx5Q# S Sс@@YD;Q 1j HnQ9^;d|PA0gQ#jO㉖W)DCx#a U\zO7 57.!|УL#7P:pOwkB jlŌ^ƈ14}cڟ7]4ǵk>+ݒ~3Wlzt#W.M[mk/m|si6獢>/EA}tkQCQ c-ᨡ\xt{t +b9sqtsى~~R෤Ho[3<+plCPm@:T +ScHseGA!7M86C3wB3c>ž;x2z2!FzLZ i㴵i3ni~6(;?S@ZebȀ/di;޷9Y?w?bB#n22``C9 +q$G9? dY}'&_-/&PNPIvۯHORԃi[p&?VL +0ql |\gБv]׎㍉^ )6bgi!cq;[?]GD.ogKJoV3Nin(;ܸQVr<]P*](Y mPt@%n|6椻w>+lݺ{>k&{FUf7|;s^C^F`1RXKY +bȐ¤M᣼Ɩ7:Nrx5d2 R9F~-zgxsxbHXZ'"<XCaA OHĀ\;7Ĺrؠ3$}qF:Ց`Byj`WSpÃ+^=wo_޲U=Rn~z^F_y(7Zё7LwrK@`R)Ԗt& /?a/gKsdZ@ɮqؑFJou >u}5)Ԉ43L_G9r\rc+T?ҏ}4UѹiKǰ˕Ǝ[@YEW;/]4*쌍+ꖚcwa@{ q7QR  k `x E" ܾ$Ƚ|7d­&1"::xC.AThn`|"Җ5o=ՙg\ӞMJ߷rnAS +U4|CQ#|[\Bz5nmJbh5^ZHIiUp x@8!S9_UNq^DSjnkߙR)f;-,gZr2]I{|(A"hJaJ%h-/ўMIqArH^(\vv6~ t^,Xuae0z J26dXC5@/&)_vX>>XWƾoO)?Zrz|Kx^5{l ^}CͣGuosWVZ}*ҪSzt}{#qV}xKh3wY + H7{ZgvżǗ.~oo3 7G0{F1Vm =j>Jnڀ0j:?i5 -S,o:G_DZrD5WR>}gc'P<^拀}Z][x;1PEM25)_ȇLvr92+vg$݆uZZ֭@.pT8؀fJ>⥏?rS ||2Pcujy.UVnNU"3ȏPV]ʨq`;x89Tj}~ՕHw~lX_͟-Ƙ䗁y kUA>2 FX<,VU<H%.:;%Cdv<OF9YH>BY.^#.^;_TC.u=/ +i2otdk67LE-nV Нy0o$j'Fcd0WƪD"귛;7Cה@f_~sۆU뻮t7D>Q=U1]\?Ï}R+)X8e-rEiRD@nvE4"y;EfzY&̞e}_Y x;?;ܱ?YXA/S!mVFvtR$GE!MU+\A`W :nL 4TpGT\-}}1mm$Ho# }\*cV*aqNN*O5JNxɏ{8Ԗm&ە+|_=W,7_l0+wE۝SX)^ o)J3 gR w0)L"$o WnD ;ӥK$K4+hY rJ'%x)QheW5qKpJ7/[Qx)G0ab, Q:YBY%+d,6+v?&a3tc޷_fgqkT}ЮP#>=M #Q)g)ϞXܪ9޿x{`k?a^FW _Qm5nߓz2蔹b!WB_'''g`7iNcX1VUŪc5TTTTTTԀd5︙\Z^il3yyy,0yz!2h)"Lp{ݛ<%;gRs ҕeܚ7:/\8.5k^ɟ׫?k^{Ҟ8āϱ~jDZ bŜ`?gȝޡp<ҺG6]n"W>z_z;N0 07];)rb$d +`!2@#G;,{ly'n7FTΔ^4L|ӑ:>TX8 .ݺNS'Y2 r Qz(NC2 !8gu7[괟YH_^y8@TpNHSft埋A (d ݪ +("%֕$.I=j#=Ȍ͆X+zakcxw|mѤ9_U#dw E|P2&G[:3[PtSXhHHwbb٬qkUOh] W +O-Y\%,ȀO*ʩ7iPO٭C6ɵ03*f'z |6T{l_(ޕ6єDg8gClq&:.zgghVi^ThMܴ1MӐ_j妍ܭq6oz D؟!~Uh(sBQFjBHPf*UY)bL,m9WIJaʮY=(,WFUҩ9Ձ.BMƩ'gsBz4ߨWo=çv=a.;m\s뀗u2d$ +^As8}ZmR1Ҩ*6]1siB~G8W*fCRg@ a;?_].KK}0~aW]U)yIK2KF˚bruTZLFM:=_꒮wsAV)I7^B;F15Ӎ3}’Z,McdwyR=4(ZoPPC!8EMȢSb9LB=,8ṏU?w +IpEqǔm{HL9 _ +uՏP{P8gF'!Sl$fo3z&cdr&)VbeyPFD?Η}0<.K ȃGrkC#ZT>z`"HsXT{v{ɢU_-q=^,S9A'׽ !J؃ +4֟[:a¦dj>vGmGc[}w㓛}7m{N(sݢ9<'9H=/&Z|=:[ f!;lx㡣O;xy1^4<>L\6<59N\wf، rƦkkؔ1᧽K6YiBwwl䏛۶^ˏ^h/Fuȕ ֤Ca~zvsb߸9Q4w8Sg?]);DG㼬Dؤ556q=uxT!lοR(q kJ^[((,8L=wo8{Vԟ={~n~W*unM(w6c[s-STK4p]v5*ٜ7nMO{Q8բ ><n6| uzmQ[ X᭨n-0fFtFt}46&XقbVz7<Q9&&*+u#P(N7%*\2` +gBQ +@{C} "RE = n\xTZ"nS+**G(uve4Gtu&CS|hivuKˏ9uwFVv nv}fo|~/ԉ +n@K ,$ zby/@'c sć781crEʹ8Jd଎scV+}~gal:4ww9ą11cy7coc% +c J +cPnc*+DTP3GhhG#2 w<*%fQ:iD GvT: gQ ̏Q j`GvÚijaVWي PjJgo Fhbm]s}墊FȲps|llٜ^Xo/4gהEӪtV`_jE3Kf4*Jj%vsel. cZ85` +Kj̹5p&Nׂ%#%3/k 5脤ᐝpJl,Foɽ^+o +c)]3xLkPEcc]JL .mnm//Gr :Mzꝝ4-TS?YF ϶FQ<itp̮0f\]jA +J4AkvfwеRôd eְuۑw W2i)sp a1.J`VӐ:t':[]$;3=YhI0]kc 2XSO2j]qFU=9ԝPd=;򄞩Zإ9Qt6=~yH-fM ̓eL*OhtpJ~0mb<":ftz~`u/9@g KfYvåT;9'c[7эh E?P|jBmɾ)'Ì2O3T^)2a\4Ygc03 `/?{t0lV96 ]gf48$U:ෝ&sC%"ZWAȢ(cqAQ0NZʓU2[vz4{gdL)OmCd>T" uNl S*!X(5sC|h Yw{˟IPga%LF?c2|{s8F:^UWwx ;ïz\癆tͽQwaXƨ?wCM{L)!69)pg8fGk]/90jX1T2οn1ӛwG;Ө_j5?U ftAsZ rzNJF/Eq T:l85e}Q}̈́|]ˆsf + 8o,%]׃5΄13X2g +̎TLThlf gs;1g1OB4]Gq1-*, +dUֲ<$ 4B0'F9숞`^!gY6ѐeZ2$d&6͠㭈aAw*řdRz2zTvV,!e:ौ 923INNݙ tF_C>!]\Y0D*(l4ƑŸ mt~N;;Lbe2NمL=pFlFDoe:3TîJcNl!A*d 9>'٠ҝ8 |e̕3٬4&.d1u`>}98ݡ ӎ!r=\Lrp_Õ}W&ĵ2V4{h8?#ڡ'<+g9f fdN,b3 29mD#?ȥp P]iN+.(dT8IʈgYt̴XH]uT-GJeɴVv“jpsl "H~mK+dYetյPRY/K`Y +aɲFp&&8[_#;Bս]ſPr9x0)vW֘E _mVoư,x cXhchs|~5fYʘJpˣ*b>xb+jqyB@j?%O#2§S+ff.h%i>5(> R"WTl̳l%I"+IDHv<(q%VD~8ߺ9KJnon"7Pc&ǐw6\w'o'bDz^忙Dfn'l+|7_K͗|!KOnOɕvW\'{HcQ;C|I#|A_IK!R +(wQ J5 %rapޏœ%7ɹpN"g%rf%yC"K5"HDNJUx'q-Q[">6OQ> +endobj +43 0 obj +<< +/BaseFont /AAAAAA+DejaVuSansMono /FirstChar 0 /FontDescriptor 42 0 R /LastChar 127 /Name /F4+0 /Subtype /TrueType + /ToUnicode 40 0 R /Type /Font /Widths [ 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 + 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 602.0508 ] +>> +endobj +44 0 obj +<< +/PageMode /UseNone /Pages 46 0 R /Type /Catalog +>> +endobj +45 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260610191359+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260610191359+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +46 0 obj +<< +/Count 20 /Kids [ 4 0 R 5 0 R 6 0 R 7 0 R 10 0 R 13 0 R 14 0 R 16 0 R 17 0 R 19 0 R + 21 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R ] /Type /Pages +>> +endobj +47 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 969 +>> +stream +Gasam968Q9&AI=/m'/gW8?uRaerl?>PTdC<3XcfN@&Y\YfagkONh\u'5GQODF;[eFY1%*J$85*,KI+@rYk1eKq8iS=7c!S_A[&SZ-=R!U#&f_p*A:-1m88;d9%k_959c`seY2)RC7;^YOEon(6cj;FFHdB2*Y8F_"&e3K98VsA6`M9*Zb];35no4G>]Gic;%O]e4\n.'VMKen')%EV@[.mu':sk:p.2p`^JW.B$La0GfjSr[Ot<*GW!%Kfds5Vr*g_V#G'mV..,PTU@6(rC+Zld=m;?1=[<7P6%&*V37C9H1CQ/f6Qi.Z!lf\8m]9'&@laJeEY+&_I[^gLT1KVQ7+hT8]T8k8YPL90CX,GBWa_A3W.@R^0H=XppX^!d\Ga?%#2kLXl88NO#LV&Y=,I-Wn0n^EC7!Uc6'tT`:&XXP:BU,U-.L7\0IQp^7UQ[Se0%qa_<#Aia.]'\VB"=8o=:&"b8#ujI3INendstream +endobj +48 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 859 +>> +stream +GatUqD/\,^&BE]".IQ:=L`7^]*qg'Ne[eU0Kl!T,lXgX!T]-KS4q%mf0o2s.(UKk!QcLHk.pUi9Z$socVuh%7gKP!p82"kD06t$/HFh&4A-DJ2#Rp:sdsZq%LH"'6o1uirm#^pd#aMOR5b1n$NN8@5_e.,JH^V:ecrG+EE-8_c=NaV%DMR!san'_8H?Z-L%?/XX`7-V'Y#n.]Qdd8(I)u<9bc?h][>Xq&U\50-i(YflIEL'FfZg.*/efo-'7k/s.QV,[k"qb%%J;4j(ttTqNFE!>,,a%\H_:L#=6A)c7MW:!`2p03-,*o9\USn5qcQ;s/L(:lkB=.!u*b/%#uD_AdE5,-mblPn2@m^N$4`tI*:YRl!fh#a"[C0rjaQ-QZUW-N!7+h)A8FE9kf>cCrEG@DKo!&P[-f(^:ONGZ/i]]@6t&kQTG]]&26T]+H2pC]0_82o\l[%c0ftAp6>R7"o2Xr*qdG=#e>W4_Y^#)(V07S^rBm6";Z9]BQTNR%Fe.WnE7`jZ9RPFO%%UcFJ@jQu8JGChd#=XhADPa'rPM43Y+p!A:U@k,Q61fD"endstream +endobj +49 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2511 +>> +stream +Gatm=lZ:cN'*%C7U9!u\/o(n7]o]ZP=+q+?[=\P^0&F0[>tVm4@t^Wu8[^R-rUl*j8.MgL.;U8(O/Cet^E+fepn?u"[K3n,5jO.+2.3]iC(Uh#IHXBXrjj3foc2ck@TdR(p41dV%T!_[$[ddHlW=@rES(B2-)Td+%SSdjU@G8oD.:[W4h9RaU#9@J0_*A"%*#7gcM\jm);P&64r?1?j#Wi!B6^IC(=(l3,Q`J;_KiN62CqQ#PXj]I@.FGapJS_o#e&\'gNDjm,)dC8)47g#5,4R3,&X)F]1n,p)_RRL>(IUA`_f&C^$SugjJ2%RZ%7Ze<)j&>qr/Y*d+#KR@"2+[T9t^`,(.%XOBj"K\7r;@1fgYVnpj3$'f>+8IW^7=!+[uPkT4[9Bs,A'@:\#:K$\[de'`Y3')\3[!7a+J\sM)/+7/+X``V_i+qEV!^-Q_(?-Siji\@ho$n<$PZbmuBQg'=V?JH]=+"bM\IdqFl"#^K5MaWe2))[!f<4r=";U,d'ejb(o')$J[`4Eu_gl1F?<.e.L@T0"OGJO5j2!*6)28>ZI*Pj6=sGqlY@)L"&$=T6E_A@;h(.qdWG_[)Hbbo-C5`?@fHFBX2%[k,_c]i@b2K@ZQCn+S#j-D)Rm:)0\q53X=q2Jn(0cmR;<"\*p#n4a7A0OT6-L5VJ?d_9LUnu"UGK9co'qT%<8(WJ>!,u8EdGSB&E>O#Kn^Iu)qBGH(u5cNVZTF\;FAEc&?9(&;p?R"m1o?Z9@dacGt31%`0Q9`A!(gOUEhNutR\#DOl;R'mm.#h(&bqel8Xj8sMU/6c(bNWaZ0mhNlK@H^`GHk5M^gro#&]^Y(m&ru37AM72-Oa1A:\YV9"U&[<*">tQ[fn*rdZal08VTIUF9NEFo@rkpbL_/epa"TO7K8RSr%A:6`dKb$<]os`L^MoID$L`kg*:m%BLeB@&ZQinA<-A+GqZ)AiX2RD*QZl)$Fi^L[g!^ocd+YO-H3;8D)ME6n1U?[*D%]UhpO/mmJq-lRS[Q+qWI#XK.9bqZ1]Uf^p)@oceR%:\NYn-JOhSZfRg]]1&Z%77ZqE]/J'Yl_H$aI7spmeP.m)VcLiRDK#cO/CcSX8m4o<2k*0>lPd1,C>Q?GC_$tZBr/[Wo,PUu?jIf_J$qhF[3`Z_p)!']T5pW@&b1__JjX,TB/>i6bDf,@GCPX#Q@W@s45uREM.I?jsID_>js&UEqA8d\&ZNM%KVC!]2+Kd6bInhHGjTiUH1FcOgL>USg0Ai]rE1:$D"Rhn,)55I&,^lo"#-fG&*p;W+DT(?SSbY<`hj0l0JO9:c?GU@pu(O8"OX7>,c_9+BU)d\h4fg2JY07N^:9Xag$b1$i(s#3:'@+g];T#h2nr$&baA?OS81>6l+FM;pm3W_6XuXou"ED4ZEU9f.E2Tm0`g6@m1]aXI=4E6[r.qnq6/09V^EHF-Gbm`r%r'.m/F<#W?!3J^d3ORS5-&P!nS#!n_9.n8CEh+A]k`!_:(7V9Wu>_-N'6Yt:uoVbnm;F?Z^^NQk."O%C&ofhr]u,Tm2YH\8oQ7)iVWi9T6^"+?&"15#9Q$;nrtt[kE'Gq`W#s3;NKQ~>endstream +endobj +50 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1881 +>> +stream +Gb!SlD,]1K&H9tYfT09q*Qtnhd^coV:r459+=ZiGcFln@`(D4mjOAA:9Rm#Cr"^4a(Xd]A)_a`f=hE#JUXcLR)#-Jh^XFLEB`Phf!lTb"#/o)0#VKNs*.9iqD;mX3#J+ca#5(9[#!O/kb`D6>;QaN!3lT-'R%A3KNpT*9`"gP+#.Q]oMu%2-j&%"2QLa*69KA%f-:8QfP/@OuaM=V@M!KQqrR$<'CDk!e3/Q:Xb:nBI0=f;/-=Zca"SWJ?;>)k@TVeJ_c_95P@E_0[_/:gp&Rj6U]Fp#fM,(#6TmN"?%-i,8%D(LKpn/9*h;Kb88C4=3V1tn;Q=BuiL@.@E@J2$T\mZgiQDNc1GrQ&Rd66AC/9IqbCV[PR.&p)*TWIIMgU[9.>fp-.s#(:;Q`2T>.?F$FeaLu81[;[IS1eZljt2u)cR3BTcS?[,>F*F0gMNM8I=0YG2<2k[`%mp-/bO0;4KdgQZXmS/nLn2AT;8U_eC"DCBF;;jD%N.p:$h;;^866+I'`;`>\hP=bk@ok79pS^R-cA86gQXU!mShTD$'LB2Sn$`m_/aqL2o'Tbg^B?s7f8G07_U:rC$[#d/hPYUV6+TB.OnNSdjsWV8C$WZN2u.OP>Lg\-NN-e\kfCLdkk%-:r7)k`4cY^;?%A'/Tg"EXa`qpD,T'dG0)NJX$T?RM#DKka"RO'5=g1DB(?l1>XF1orYMn4skBT*oY]UaigH7%F*QNCPjN<3Y6iIci;4=I??A;pLdB7nZkIo#q%eup/Vs:npm-Q8)45oV0o4+q%*VU3,]$A$("!Q-P7hM>">]tktLL>!M?b7PoVn*J3M#n:JicrK6N5h3VcRdL>S5+*-u=OcJhWf=ES=DCRG"N*r06>(ZHXUG9#.A]I-U,qT]=CCrF.+ro/XbA)lQ=Gr!k'&g&-q6VTe;'g1PV>s,OJ@\GUN[fVA2$Gt>eba3ZV1?'f&TZuhH;HW]j&7.&bp)l$FW%l@!jS2:2CY(Wlllnj_l0T/k<,N*>nG1G@M)-#au"-FffH!b:iM71"iM$kq;!TYO_$<']kJrp/C/%!;Q<2EfflhR\qR5ph.NTeWeIU8Z&4:)\7M\+\9j^q-865L2Eo);:42e[]@ut_aemF:KC^Vu;C[`'30WDr'FebFalMtBo`T7'5*Sh,f>mtU$)`mP+RCL"MP_o:ZqS+`:Sendstream +endobj +51 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 572 +>> +stream +Gat%^>Ar:>&;B$9=3P/-11B[&Tl6p9X'R^,<^BI;.bim`',soSGCP+IjYiU.ZLtI5U\Aeq+Tn8Zh'g>.F7mkWtesHqH,CW>HsN+Vg*)9HtlFBpK+FK]$lWP]Og*YZThc/iI_5^VhV4U=%[d'$?UHSZ-j>A'(3<-V6Y7MTP2>NV%g^P^.@\_@U0CT$L4/C+XK%)fcEt8uSZ;A>XkBQFqN-76\c*o2RTb0IDNmi17Rs$&7->q#LGF]8t?0e%'^;]LWp4oZ+o`P*5/:2+m,Q&cSP`dJ,o&ii6Ul?a)ES"mP*#7S*934[AOAtJ!rgb7qk036r(_Jc$iq\(4gg+d2g@b,VHYM(f`hrF"40\TL$o>h_0b1>qAQmrd)*`dEG#+YEG-LfDVendstream +endobj +52 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 894 +>> +stream +Gat%`gN(as&;KZF'RRrq;097s],p/9;hh^tkQNoN]hV6A)'$7RT:V=3Zt[\`9kG#BZM+=mgKb3FoG-D)Ylm&1@!3_Z8B<7lRVBiVeP-ep[hL=:a)DEaa]@M;7)An]kK9UX=0>KE*E;82+Q0GB)M)"H9^=,26Yh0!!GI->u,IFACR\,P*61iQ0/?j[-ODl,4A&jE^/j6%9%p1d]=k^?gIiAkFU+aXh"m8u'j16Yo50+/l+mLee\OE4%c2Mu!6-H:X4%82Bt3jbq$bG=32Hq88#KGMZ6hILfXG0A&eB*(_*;H8U$=6MD@BRFQ;AP8;TWN^?sP1He):,gh4Fa%Ro3\:IX=6#)8do7gg!'(9%1JBVu\>?g=ggln72<88QT/!O\2Y9CVp:9RnWi#a"&'+."/tib?/*6-)c9$D\U/YCsKqhI^8+((6WI:;El9A,5_tefbc7Z?fL>iQ+FUojBdpk=iq&ULafMX)nF86YhRh4lrH8-%>K3cnOF6a)EgX#jgu:>dV)-n@7heG-]^s"3.JCqe9W%4n7s6M?>&_%VqYO90Jf=k6iZkTWLrVVn8\?!]!0E7]aNUb>qnA)mqN)0ePn.>JtFn<(i+p"4H(5u!chPRTd3l>IGnFS;#UfN=]8mOCH4(.`X[1LF5&7;FVkY`E7Xg`B&R77lk0.7*9KC(qQ=L)SBfD5VFU19Y\r[hE=Agrr:K$gRlq$6,/1$XFc7!9_p&1Jirtj!^^DL(!E'S`T`~>endstream +endobj +53 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1479 +>> +stream +Gatm;D,]1Y&H9tYfS8W!9r#$?9=?+TSO,lE0-hj_e$#=KFI!I0@\6D'j5Ias:U7bkB46r)A)l>"B:jT8f`Dh:Xm.c;!RA^3qe1Ol_fuNS6Q?qM^k_I-ieTR[5;55CN\`Lt+,F^lJH[5]66g8uj4M;h@ioNJoUUOhJ8pI&p5^O/M5rmiKm7VeGUu=Jq%g'd$SBAIT**pP>q*8qZ4^g0Rg(tD,G9>!HGf(q\"T5`[-8r(<@:#o.^ep'?G.VOeHQ;QlZs2Q+.j@$%4RVEoP\GX?Nm>5>9k=16rJK6-B!$E?77Ve+GiX!FkmTnNa/V(1NrHA72q4cS[jppBNTae>*V,_=VRJh'.dM,JKm6<3.a'GeRhaZ(QR-!T.b;7JA"GJ/eu2TXnObW1Wue0gGIdb!W_.1RQ9@WK2M-hGd=2;Q#K$BV-heP!V.'U1!QTqWLZP#*&eXNbWhKB:3g$JhTu@&\tY_=Y7:SeY$cd4f-uE=69/('[2jP;-@N5%3o3''8dL$$!WGJ\h#,!Y)Eq^E4uB%jtpVgKZQVrg)qW\,baf26Z2lB6)AL-5^A4IVgQU\2W!d@a@OWp3#lh@ZPA[.-6s+9@T7=P+S5C=S:[Ko9e:>?:KSWdG!2N_>Wmgn$WDUFa=sJF.1Ue=ReR9g_]@%ZRi2\CDScP=>Bb_Lr[nHg9q"I:;KiG42T=p9'&A#&#N1TK`Y03rCO"cj"=IY[4A."qaKf2V758R80,oG\Cl:KQ*%QF"5B*5R+11?K&Xl`m\$k[7+"Kg`AOmr6*uWW"1R?QT(-ccQ!+$7OL.,5a\OIGGFoS`/dm"G>iErRZE-aKB$#Ij+32q/3NFfk6XB?XpJS3,#IQ(2]fp$bS-@G1`5D0sV5&)Vh:U<1Te=X8*7".bGP^BLcB/kDT5jM(qR&j+.mh)8l?g]iTQG`dcO1b501q\lU[78M.B<\OR_1i^f+k@`%[h.BXQC^@[Ifq917Dui!u8KKlhnZ8QL2*>$i0sHl'pCrk('+IUU"5#<5330]r)s67qpTGmrb)eIc5VLJdFsI!BYKo?i~>endstream +endobj +54 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1201 +>> +stream +Gau`QgMYb8&:O:S%/T%^ep8uSEp:'CQC=[CU=Y:LTU+RlTY2Om!/1'#]64Qhb[UDeOiL)^hbR>@cr+59qU]@obi,ZV`EJQAX*q:?k69dO.qi#bNoVhoOGla0R&4uDBJXrCk6YqbBE?ap4"KmRMI*[SH5XbSRKn)]!)EPh.OYp]KCV)E[L>+%-dl=O'%<(9<$s^X^EM*Q?7mH`U;5Wi0Ab1/HbI%,O.!4.\NN((h+o2Vp.p(Ut$'P0R.USbsiDuF;KA$>$Lbq1-L.jRl+=(!^G_#);?,7pTBYP#I6qB^247UTK#F-l)<>.]A7RN;m4r;rE6ELo`a[thFP>#ta8[t`Rf4Hp:X^r0_hag7^kV7g\MtRCZ8oZ"u1oJ,0`BY!S"/YL6Pcb=nejeBarCL5C:YS@jE32ht2`e^*2po6GDeO6iD4SnX.A8F)V"\G*(jB@2MC1I2F_em;Cm-@!n6*XNg>n]ElLhTl[pgC*8Ad$29_um:_PJ&HNW`MCHbgahiJ_h1$7*U/b!m/R]HlGi\f$I%rk$SIFk"0Hh]U3[aE3COhq1BgA\%)u/[Gu=a*g7jVtt(RH`n>[fQ0uFlY6RRiT`^G\*AN+@oI?hU;i1\UAS;JDf>uhSQ[E.;VO:r:I?8Q?^lsKlO3L_C[Xb@3_"8bTn2MJWViW5P"pJC)ZF$QolFV7r/#KV!:8Ot+>&cU"8n)R1S*0mUJ`F+ua>r[5Oje#*D-`mR8\0]oJ0e"/nQT^r_f/'7@ZV,O9MKdL-MfD7&,Uumo59KWG^>28V%Y9FX)B((-JTY'1.RPFN0V.ShM;"$6E)5;YJ+a`+N>^Gpl="=si9Xf6+hRF~>endstream +endobj +55 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 816 +>> +stream +Gb!]nW(Gk!"_JDMLTP!dW"&5"#M=8Ddh]&9k"FF)7H5,W.rca%8e;\WLSWqcTrW7#iQi%V+f,]?iT%hM"fF_tQk!AP].BG!-bBe4>d6l!&sm6F>eD/OeUI7pPh:?%d9a(^8l]8_Ylhmm=s?+e59We%iHSEE0eZ#g*/+cn-=NnSL:6=+q?3\U/BK&G:DX!=KJCXe<9^[9h!hUNdIZQRkCQMh=DGY\2,t:9S&dP]1tph#j!]mtfZp^>mUH9PM5/AoFPeTOqj.JIaG!M,cbX.t)mibu;UYl+n5j7a1hU$Bs]C8$ln!=S>68Aj8C/LR:cd38I]X3?qF$rQ7bM08f1=+qGJIG=cVRE]OsMF]U'W?(%3Z'Qr4_2_G?pkD!AF@EC%*,[1bb'usJeL\:8'ZQM+LotC3`L+ap#Qg*g0a0n3&K1i%V,FZf\+eZIL:f5*/$tu'\(:<:be>?iDNtH-F88sF5J&Ll#,ZBnoVosB\MMhIW55S<6\<67'U/^iM?Zf=iRT@Ea,o^,G57.tEaj5ghpFttKYQ#2,GK\.&^nuRfI;KoGAq2`>gXg=)G%M%+7^RSRU>&!"Z/dN1r^+W"`U;FY6.dd[rX)8?grtXtqo@p^%G#JArZckr/8~>endstream +endobj +56 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 702 +>> +stream +Gasam9lnc;&A@7.lu3;c./LBj%42Md_kBad9J7AZCaXs>/k-/39`@+(a(\g@SWGKRX517s:Ys-BigVg?b7``=%+@3=`Z`WY8Ko>W"P<2-kD2Z@2)RXpN2X$I'L`+VH8WP^f&B4q'UgUm6\Nre6X1fZImkM).Y-6'352@"kC7(9Y#o;?n;0f%:$"/*R-YID$?h4-'6nlq@00Z"_O%:Z,cf.ceW4R83M6)@E\AU8%e3PtY>^&4N#3n:9-l-p_IpYt#N[c8q9Xt444-Y3Tt!C;!Y&*H_^,k/6iTE=7Qtpe_8/NnO.qAJTfM[V#bGRg?T$3$,4R0CiM!W77%kZ2XJ#]@[7pj13E)+hSXB?uga-O_$U1+\roqNY\%f\)-9/`RN@tG'P0N]gkl![j59)9ugu60""(4L"5CF>(oXXGdE-d9'F#Ur[q4C`//o=oT^F9*TS$59+EkCk\VJprb?ah!rYPN89[;S2;6['N;_T,Yq*,M;TY3\+XgeqU[23!r5N)2WTeRUM-=*8dmID^'31`&X/,g)r!;6ika'%m]6<:_rU0WTNa*i>!>g.=fE`?ZiuU3Y^TUEWZ5KIA[0`Jc.4RIEF9>6Q^?Y0j!Kc/t5a26+jf-n\>u;1W>9cQ"t80R4#RdK61n'rWt3~>endstream +endobj +57 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1160 +>> +stream +Gat%!?$"^Z'Rf.Ggt='`)_7*L-1dFU0XI<,8K5un+*Ju@CdHk116i#7R`U':.tN=E@+#+/N-%)ShK+^\),P]:pRTn9V^WT](bcHa$s5ar82&m`*W-b9J0bdB5_:,U@0.^M\A:GV#P][T_$N(-EB=1RL`]#N"DNjOr%AC3#q]h"&VnuL<2Pq,c(unYn&nlaPF8^RImWu@dLWe#?3qcf7'Ie_YCmit)@;Aq:d/B]*=N<9iBC&Q(R-1-@E8s#o7R`B'B,Ye`X([T[%VDW4DAp9[@%Yna5M-[Bd@.bKE\-)QuSbG^sC\m`=g0"-L7Q;`.g69$@:qB:G<*\m^j:<6?#/:`B"0?Rq+&o+qV2Q[+M`:S<.heqKR%MSq">c3(_G)/iD'+[=PnGnF>Z+dMlggWZsLJFP[_[nc&?BGD=_F,K\]biAfTLL*,lk_86KX7!KOoP[bX`N_lJ%D>7-SX-SgC1OgtmMd?!!nR6ffp=7oB@7Rf?2=Q84s.oqbNo+BCKP_0]Cbkj?]:AhI$LX`CE%)P"gZS^#(C_2B<6M>qbkcQ:>E`&V)?Q7=KWL>U?"N0]S__fbrBEmVV(=qBPH'lB4#HNEFI`hE,O_EPSH@['eZeHPA,rkYf8_U,.%-SV1bg!l^(RXSG3GKV9\Pf[&e(";Rb*P1gQk0"d<!mW,83H>T0i@g&8/e7473kBG#,D:.DT4(1WtO>+UIUj+9D0X?i6!qhlDj5L'E"a^J"D\SYY*6-&8MlP"W*'IW-Ji!k7*pRKPNGD_$EL-$],kl!IKl1qa[\]GE($SKM.ALb,?ZK%Fnh5aJrK:rHPlSVc#`DDgU30foa!qOtU%ge5?s,/*nendstream +endobj +58 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1534 +>> +stream +GatU2D,]IQ&H9tYfT5[i#YC?[Eo2Bm=)M\(&.d-W%NQi-6/^Cpm;O(`m_ki-l+oEM_aRn-C8%tZI_T4SXAY>*ZX4icKB.[(f7>&),7tUJCChiH<#R"KGWEZ$>;lsXiDbC^&PBu/U^(O\7S+<8^_mGC-@SKip@\uNH*P$)VduZ8/-6a8k+SldqnjJ\>g@6;R^AUWG'uE/IL_je40W^1'EI)i`0;K_('^.gVm(T=&"=O\TeaC.%LX:\M7*)#I!RI`TD"`?_p+g$NDDYKNq27T96gUb2rFET*]BH!QZGH:2C8_`1ZHj/kp(S2\VLSGbkU;n:U8D:['5PqXU%HCC67T15Y!iVWAtI2f;T;dK=rEBTgS[?%Hg=;@+/?K(JZ>:/G(dIG;9W:u'+nj^.[%6O'0?6>_t4RNB_i:PBCH-Omkf<`@=dEN0%Bu@%!0Z#@u3dY&SU8+a(o#g8.&.gg+=1?gHc&I!*\l`SQ=(4Z\>??ls3(WUeS\5%>G,\jOCKJuL0\;:&mBgn\7Toc1@l9RUCk#M86$[#ZPc0bUD[an=2>;UqkY=FH(Pns+Y>2kuaQ`e4$_5Jfbq'5/.`)UI"]hE0TYIsc]#8m]RO/]:$G5\aIEn`:->-nj#YXcC0Y.5O0F&CAK?MjKIJ46=h;R9YV.SRt=fk>@2Vo3&a!KTQl!aVdPL1>TpV2kmGan#sk9TEE=mQSkL,XW>`CR6QW;4m"d;7//B;5?`Is66a3NXs_O`/d.chb^Gs+L+n$/\qN0"9iZ[hL0,K&ScG%W"i&$hbU9G$'LTEI;OLr2;].Ds[]$O3RmBeIuq-;f)2B^Gjo>\I\'*$hWEn;Z~>endstream +endobj +59 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2316 +>> +stream +GauHMm8N%''E??bZ-uLU`O=iOo:baY#X*'G7nVRsVL:La8\"!nG,Z"#X'lr"0A9K0KlGPBo-,5rDAl=<=CV_$182iW(@RMN4[:(,gN4];f;nV@A!-'_NOS33"9]HBR:H3"9>ZnamulEgR+JcWHRQ*8\",#.asK8-]hGN%Ymdiu*5:dZ?&*4A5,6LrY+(+Gmi:np><(L1TI``4H6\d=C.W1KitW#quC/:&WHr7\;ji7CGHfMW/5c8/]Z*D[uI77!UgU`AM]*0>b!%U"uS5rVDnF_>1n"E`1"bO)=+4_Q;>1g0B^;E*^7`)(TVg\pB/nat..(Z?rMWRS-$9Os?4A9rEl*HF)=[,4I`3.$"9:Zsk:s2#j;8'S;7R=`p+4`r$V!b#Wl1)e$WPi!>/c[)/:p,BC`RUf[4A_OPb/7WM%#1P@a:7UWikLt"%/b`d)W=h!':&[f4GfgVSHe$r,A+&+XiskHo^`U:5J#:VM3-VKm-*8Na:WWN@b6ljl0%YET%c`n)1feZ%o5K/26K@rmR#P"'[Cq?s3\!m7UJK_Sbh-R2%$IS&>8;ku5Y[r"R7K8bnu=G,R:?rAl:4ViEpL9uAS4IClD3s'@@nd[OLn7i(Ve6fmKUV:@8U3MFdqNj_L&&<%cZC8WfoidaBD*?cT]-&]'n4/5]4m@_L0FrU#*"uVP*I!][1KZ&kD^MaQ#?X8'O44oRsL7^)Qf?I/]pE/_\5Mb8&*4#sC[uVL26oFHVcDGe:'JG:\VWTdgfdlRYb.,fMB\SU[I7$E;`pCl*&UZ'cD!NqlXt\>A/7QlJI!T.:AqMdFf`P"l&Xe!0XBHO[IcGkMqVpPgjn7\H1;:C@%Bj(\!\m]U(1DDr7T%$^gsd&3Ya;g%c5mo081uT8Filh"\btj3bXa(7[#?F,:TJ?n.Yag9lJ:$e=JV.r:We[_rMH\*Q&5'he[G\"d3"T3n)uD['h*Y4]/Lqa/`]kJfZds-*U`I`n&='[c?c<@-);.HXS/Gpg1&>"pmffT>n.*oDm:'=F`AgH.&YSXrgd!SliP*Hm7dqfL.Vu]LDr]5Bm=Rd-^i4=o@A\r(G<.3EVRRRdnG-EX7fDC3_6Y'"`IK2p:FlqlB"3pm$[sI(k#*[M@8Ka=du-0g;9]8W`gO=g6c0:ZQ?mFETD_R[pH:]%)Oq4+2ku:l_jg(1Zdiu`W,&"YcQp-c;bonp\LO2*/CHgqM29iX,4W!&0P'\tB8[Of&RF94&UrcL.>+<"m^YU8c`62*Tmqp<%@t-g/0Ji!Ykl@5_-LUZnWCKVP1aVWGYa`j.3F^UcmhtBB4Y!jP%28jcHDC\#QbNmAJBQ*&ptC`s1jIm]rT[a5)l,FglJ<:9VW>7O!;E'[j7H\O/s;"sWO-QLo]B'.cdR9uN\qJD]s"mRY.JQ!S%@C+22nKfE4k?\[PC[qOd>kV7LZL?SYdWiLs/r^,]]**0O[(@$M~>endstream +endobj +60 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1626 +>> +stream +Gb"/'=``=U&:W67f]eTh6jQ$Z4S$i:q+BZ:'jK./VX8V9&[E;G:d@o=3rSMQO;9F)U6nPJgN52787I-g(OLO3Oo`NDb9Joh\-'Vc&ZqrF>TsTTD\.-TC%+sglUGTmK7Z]6A8goB0Ku4j!Qun@cEUWGRcX8&8U7[*[k./Ha)6L/>AUHXph:@QUKaPq\!>)5F/po'9PgY(".15;:82YqXeNggHSCrRo7i'&9Ek45*(DSmlHX^$U7UA=0lBj*%68RWS6S5]_G$c1X>X-d0)K,Yh<^+Eja0(+Rg&go[ps!jZ7b64H]M6u0:WlEaWLUM!neqjt`E3r:(SJWU/@!c#WqMK@2-/FqI[Eg0]P9+uR=Trg[&,aC'e4^5to-k+>[a0WWA(m#OLOXg@'YoRbLEaIFMmbF"//MrY)^>(po=j,"ta)s5cl^Qh?#f/Pf^&pYEHQtVG@1KFfr7V)=<4i&=l>@6h%GVqTDmLQS3N1qt5Hcr^N]b0"/mm6k0[^TMFZM3*dqqF5nY&\gd(i955PPfopWP*ePWSq2`b5m&?39HVb)+LVa7SYS&M.JH,2MqGhLs%bBj;A[([C2QMCmYIqTRKFS)g?Z)^Hp^N6NV&Ce"P-endstream +endobj +61 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2125 +>> +stream +Gb!;e>>s9G'Ro4HSEU\]OgM1$GUaNY63n-,$#-:nT#G$jMWL,/Os!>os1N&Vfa-Kr(mo#)Jtu]>fsBl=c:sutn;!=EHP:qi&<&CPe:_c@eCJIB0;0-KIG*(d)S!]jh6oK+"J@gZ#:R[P*\O1P*8As`*"KdVFj"rF(W$JN1k-\,l&HAp.#Ig[1(nlPjaGY=d)h^>ZT&O:0%`;hdt)k1!u`08S81rW5($%7b_BBpPAr>9,%l1cLn>jg%,i/%?VL^EUq0?=Y=XEXO)b`[WC_ArkFA0_Y>4*1Np\p)O7lF_+HGo[2WuD_k6IQhBFe146%J*r^CKdVdrJ0%>hoP)@IU.Y>gngc($NA0bgS_ONU@$8Z-]L:.3G`?F`;C^"JqT-Au#4*Jn$K=ZN!k&q*%t:@e!GQ\`7]k;GA,tFjmm9'D7,ER6E#P9)f.$J5\X'Zm1u/@ij6/0.$V(GWQ"L25Ja*6`NiI,F#'8#6\m^;%Gru?oC?KfV>BU+VrRrEf!Pr30cpNb_gs&#)CPh]'Y5"2o_IKQd*+O-IJrdkXC>bKNQ,Fhqa;u/"-))&lbk$="]QnLh1A+3]_.aFt_1F>2;ZBja<62/E^)NZA*Gc:PE9FgVrPC3Q_79_U+6f$8(X]pFjWA>RWH&tbpFm]*9^4Fk5uV("3r<,@`T(Qc227_bV#g77=eB+rd>1AXEs@Yjn)HL+?FpE4$aT2/5-:[Y_Y9O06k;Vb&Y;M`pjil2[l5om;NII*1n]D_P]f]q\UjB8^^RaMl8SWTc`fmf))ogVT=Ndl_I)bF/e!H&$82(-&n<(0Ye6:b./+'F$+euJ2`*/7RtL'KGddJL,ko28ROtFhkaqgTaLK?HCmG;ff5&\,?tZg*6D))JBcZ@oS#YPBj%PQ$++1^A'X).=Uj,oFh1Kcp8ID^$c5YA5Y]$q\UKGjm-/*;:dAAD=%k;m-\i9/3D8lYVGgg$%i'=!A)USF+Or22`EQZtA,@0)ZoXIZ-d_C"TCU&f,r`&S+cYXfF>%A[]\cYqN%q3c",.fYXkEJ=]3<^cOBdf>F-1FE%'G#]8)5X56q6.C)[MA2QQM.>i]tWZ-7SC/aZAOqGgRMj@>/6Hhp[T<)&ZdpqeF<<:OZ]taUqU1@n+8l];"Qu=0`?aCIe38[DHMaG*];*GI.*h(9]n=2&h$XnXV-_S;TZgrDKRtW+8im!NuBi5jU&89V_QB%0\*0W0\CT2f)nLc.MBqj*''7)mR4_B0A69!=m8U\lo9]!PD.F+;u$$bkbI'@/Y_ucB8]?&a*?Nr,T=S7I*rNgf\r[@[0lu3h4GSm_%_+31;qh3;]^`>cPARMQ18f(fa)e&;bBh#Ah.48I'W"mCtTrpo5aV%#A&IXY1(Fke/Tn]1T7j";rR/DE9SWJun0qendstream +endobj +62 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2579 +>> +stream +Gau12bu`XZ&A[c4'fpO&MdsldLHWG9Aa**+9Bc)R(DA<,E9u'rFLQ\q^[K68j9S@?9V,TuJ]Tl-del5U8#Y^4(OZC#.>=&bHp.0cH=lDp_$rgEJ&M#/s+!0(:;7NL0mkWel=#RI0Wu!Z-g[t6G^+0h1[!]LQ^2<\.M"i#D-@)mJJC09="Ga5JkMp;X/77gu#e:[Za?`0F-,RB6(*hZ5=qOjH+]6+&WZ2hM2#hrNJ9%5RR*bh-d]%:Kh+1UQ3h[1YKe)m-g^ImG-I[HXq5dIY[&`>CCC]YH"tK`*Fc"0*Gh[Il8:Nm#-QSA*f+Ln%ZtGg%Q8!>Q(%#;(V?V[L2O^/EtanH+os=fU0PVo@O.^1`(`%0qq(4uTEZm?rXLg$nZ$N&UCoTC\F-$E#'BGgWjo%sTUq20#"+76$V?1krs61j\n\j.@Nqc:?Q9`bq2WPuZ+Qe-q=*Y8ioQ2B5faG4`IlCTf9ImiR`N-:kNV_?Q9A>dl=q,jKl"K@dT!.c*4dZe6pl-jR#G63kXCIE;4"i'MOAA^eR7UD=tka1A=R$T)=CnZkdm0&*m9co14H1Na&Ho7Q:qa2Rs)H4X-oqtB6d[YEE:2m=gDMn#LoY@!F+:*4Zl"krfJOoV2EJ#Y/[5`7]%6__%pB_RHM)4mdSTJGE?E*5#5O7Csl`8qncg94&Eo6T5?f]Z@-8>)AE?tk5r&-V4/j:+oB-^Tf[ME#.8\ulsVhukk7)#V9FfV6/Wp`_Vu_#;#RWd/"i'KL1PA14(grPhWdC(U"aLbgsq=!r"s(Gg.UeqZ:Ags9g51DrotjUJt6Fq'bc'jhk,rf]*_AZX,Kmd)Kb*1V7kkT/^^7)K\E0BDqVEqogI-Q-Tl.a;:?06HqQ1CB)eg'n$0!\&2bWe+)Y4S[srGogD;aDXh00kh[5.M%>E"^ZMfg1/+SYU)g%[.SVVINRE;CU*:Zkd&#E7R3ra_U/AAsK9$MO`Ul(Y4b^A[s,E`qtrYDh?2^P1VgnQs@/O6n"D-A=Q".ALNPo282p6LTk*VM0'h1!BNJVW(i,Ta7DG3$7gDHP[nD'%O+bXu+K\iWPDhZA?@]Kt$[F>#5-0lf_%G9='DFA.X;>#\Zah":82d,ii?$9M$F-J6(Hupj=GYtq3\\$LVO---_m<@p",rbf(\)LPBf\[o8HPJfOQV!WqQWYs4'uA9ZQ!sV+48C!:DRA0ejIJRB-7@m48+.+/lm(7d9VB[p:!JjpQt4OJi^&WRn$N>2,#cUp:@h]>al9!)()-)=P%B$8%WOcDf@8\JO@_.+AQb5S,+l4Q\fn]Cah-/V,(%3k5G[$%"gpA-hm5U'nFNRVcJTk(M4p!fOmT?0LPK?Dbi"LkRI#@m53V@>f66"#F(Ui!o4EhMS:U9d535c2PD`+O$cQ8f^9D>OH*;G]s8Ke@f.Y[.Nd@f9IX>KO>k[FS^_.^cVV`h,FDmEn0k498Pp\h.)kYfa:I)8_V#+VJnPAN8O).1e/_Hr;IcC>Shsc$l!h-]p'=CVEqps=5S_.3["Io/#g+0P?h1*I")??L4ES"$<\5@O6\#iQ&U7juW&k4^BW)^8<%4,mk:11#bW)]E$-m`Vn@g#D\>/cId.<2*qOV&ufC6`_;r%41H`)):o,tsTV;V=NaQ+0]]cj6ff[E:GFX$j(1NUSDpX3CI&Dr$32D7F^)RQ'4!4_W](>CeZlg4e(irUepD1X\20;^\fp8)$S[:;=n?gITSsro;IA-sXM%bdl*hdf/lj+B82F]oQiH_*.SCik?Fd0K^g>oUcT=mV6]ahC;'2C^/I*D!'M^Zg1EMULT]mb>`(,:]7j.*]I9,p'@Fu)qfgG%M*qGGh)pd]ihGki2kckk/$>BTRWYk=sRg0RhsW((9iGk!S[[R&H~>endstream +endobj +63 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2501 +>> +stream +Gb!;eqbQ6C')nH:U9l/9\@pO7qsBp#?6E[B>ojm'F3C[\MO_2?1cXkrgBIl#s*iL8-ZNN,6=s8r&VSg8XSV4_7lLPZr#t@oE!gP$6M$QE0d.M;Z#q#&;s8s_TD*Gs"Kp^9DVLcA"J@g\2@pG[4e+p?F_k!#YW2^4f.Gab>mR@3;,q8Jj&.)&$I+E$jPB7WfP;LHe^>U$UBZ?JqMoH`@fJ%)Q?a?1s=1%k9IZ@Xa:Whan?D_3;"q#&V%lJ_XUa;_!6Ca"]%'0XtSA]r%XYXEaOb!dd#4M$e$';>L;f.SXfGlMr2/0Mn/@um_:M3Cec4pRt>6d+bhghded]=9CMtOEc!4_@oW:u6^aaq?[E>Rh<"m`coM'*2U*@Zpm3j7,>M43!4C>7egs;O5QE9dh9Gap'bXSk-'L9ob\*1)"PuKE?o\'(u5XjWc\7Wr?U%1$q?pK`f^]N`d^AU1Oq+doBbZCR"0^n7B*l@,$(J6uJ/H:h,d<+Eb?`\\A2sXUO7/_^:Dko\7O8D>%#b)h#.Y=n_WC)r-Q(=\-MaZ*0:;X*@\Y,=%WYFnEqnP7Y6)0p8/S6/=_XM+[e"0)&*c:E,CfS:IpXW!$<3i@^!+BtPKi["mp'4bCelGo)#0RS^i.4=GIA(&1@(Y1%Eu:%V!Ar]j*KT(,s0r3DV3bV-P[A&U\%#;4_O=XJDQ4]Y.FsJ0`65DI7)YDAo+(R7:XJ7[Ek12?a]\n.&QX)aV?ElVr!p>`F^$!gc`<.^3"Wmg]UGNkO+Q:;T5ZuCP3rBnfSX.-9Nr*8ZXEWAf1/]u&elth:]LbZ'j_9*@NJ.=9V^K$%44#hH3a@N1g+20FBTY@"jk+lt<0(:H%/;n#KAr.]%uBhXF)c*a,sJ>D"@ouG+ChWHJ$!/m$3@Ytcil"LNJG2=pkm/V46U7'TF_EXGL)Ug-WZQVdS52K+L,8&.j47C^2Hk]/Si"&NWOA<Y3Xln1sHKciuC'g3HM!&0bA;5/`!6`:j0Pn_.nmd[WCdQ;C)_9Lo$fCd2)VJOpTj,FCa@_[eA@5O(;cNdQGh6c)NL-]*=dR7^+;0c/_ND1:4'.WHM,Sucu*f-5eK`2l@^Z"@%:\Uo>&G_VcNJi-3H2hD9E4t2NF=D9[.")C9T/4;%5V$gWH?!+Jc]C9t"(&7GCI%,>i.in&`_[brPpbqTF<^a:V\e$FaPTaW4iajbdqf>YoN9"/79>VH,Gp'-[!H^YI;[Q+eNBR$9-BpjM,`nTb)1#Voo=He3K$]YD)`,&6)M57Js5I;A1jB#'f>G&JfV8<5_mN!S6.%T)TSURdVEgfkTJJ4]t&Q]'])QZ-%!$s3s-q[i8F@p>q)7FP:08J(>)_:TbV9>dVnU=?8(cDuU\uO.NZnpAP::P$tH~>endstream +endobj +64 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2134 +>> +stream +Gb!SlD/\/u')q<+1$BulCTdFb1;FnQ`Gs=*Na5;%%^(!]-ugN77IDYKV-WuFs*h:I=dC?q<#Qhg/J?,=[6+!H]KA!V*k:jgZ_*EoTKe%RM$KU_UFCF2$XklB2ku#O#;#MqfM-mM@FpK:@$+)84A`?dg>oBsKKb=XFUET7JhR[E(mQAos1sCAMi?$483B"9>j)OF24l!"FXH[\O94BhG+F1+_)9=8#C>Pt3`(_SrZP:(bu!JA;3r\QVR[CjJ^G3k^,PgF+@Nra&hiU[5o:ft#[Xe[j_$X;qBX2J,i,WDd`>5*5/n#&mmZl7H*Q*u6=Aqk&oX2SKs8rCOB+"m8q#<+o`>=F3%n*fEK9'_bj>/NQ-AQJ3E.m!iWa[^O)R7A/.=J"XcP5$$<,O](3nZ&bcm'X0Lf/S$Q>4R?&S.,k]Gb\mJQ_^5+W6F_qmn]_:jnq:/_q0Z+0Mj*R-5.*h8@q1^D76]&aRD>aL/1bBsZ0dSOY3@YP5qU&sBWqF]U@cnO[CRg9U(Q!(pRN_2Z6.u10e1'`BB)EsUF,G9j\U([>%*/FL!dgk(1?`r]2Ra4Y9@ZBX_q.,N&\n$b'UP9GIbtQ&!&-.?d1R@j=J]$&9#n%@[$:.H6Io+S8QFp_:>SG1@,8i:B.\h*ci59`gbKUkH)U.):\`s2[p%+2g?3?3gmHqRmXAa;:'`b[s>2=kBu*:#(9Y3jnPCD\M;K7d^W*?*W@?l2C1js&e(MR,?T;6]L35TJM&5[^C;qIZ=TH7WnU%0#t#Chbc6J3kjq#NpF8_S'I;/A$X2)_T5;db`'1M;3ST>ZJ<:'HN`l?j\JGNA]NPGr,-S,h>H$17O#jXg62*O_l@"e9=_``p!@9]upLu9AP^81f'qXTjkV+DPUH4QD=;>YqOECO#f#)NQPV*7((MXs*n!ESrb5YEtL44$#E(oW?TKtaN>eak]?$AiA)XT0gs_/,+Fo)[Z?EGpD!?2`He]()fUb4FF$RN"[4E`^S;#0kt@(-Q^e9,S'!bR.&aYC&p.r'J"Hb`%lX_=QEJ6JGVrL5@Gh;p\9NA9'"FY&/5>>.\A?Zo!'G53&>jHbs%u$$:N#DU"lQBFR^KXks$?Ej^:\>M;?7j,BkF2s#'Pj!?.&"m.E;'b.mGjt'-sU+fR]Tob265T%0un,.FuXJE__bYW$`F1@I?fMlHP_2I13-e`aYp7LN#cC=EVo>ZG!7C:-;ZE.67?`j$Ms+T4-Tc#i?gmm,R'@F@`<$5uEJ]8.df/@]>K)V;79a3tgf(455fnjicmUdl^=,dZ"k0s$NHW\?^K%>[[*RdR^kK7mQV]"0?$ga7!!a\f5&3Qb^h9=W'VnfR')p&83r>K^bVsMIMFkKIrY&!ikjL3h4MRSl2n)ks(_G"#,XNnjS3jmpZ(tjT2rlp8MT>5>1pO$MX%Yn4I+/%18aI"1Q#1Uendstream +endobj +65 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1699 +>> +stream +GauaA?#uJp'Sc)T.s0J3%N#M/O3?pf]@0M.g;LT>^%&=/:.R(KJE,_JpBZ_:g;H:T_)n('5.n>rlJ^se`2:J*+56]g2h\hJOSN7J:du496Fk:]iY-UPR!kI7SAp*r&XW+9'/=K\#8\efY%R5NH>&'i=2j0BB!P/l'h!$t8f.@+_X502k-*Z_[Y;_`9,%&esgj1'u=1Ckp?MWJ>uPD";/$r!.FP4a!62rpoj3[VWu[:Nf/)j/l7))E]Y4V&8>@lkS<"Vu[N>3uX(HWqG9j3qMY>Io33[;\YCgr\P0$(ZN83lN4Pk?q,!9!C[6G(rH%:NlL_P@VJgf-Z=crg>)>_fg]aUA'^']-lI(/H_'+K0ctk>0RYd1#s>5OZ5:VAKgeP\67jJi!j.P"P@cXJdCY'M0EVn9qV\R*t#'6!q4>K!LpaUBG">U*pq'mnD4jJ#$bo51m^e=gH+58E[RD5LKWOl2bDu0P/l9NG82+-+.ANnTH,4X#="fSnBa_+%`ikpGX#:1i=oqk%R;>*M.F$9$>3F-7T:">eBPLo!q5L%Y2f>CC`k#W]1u-V&6#+(%0jH,#(lnmbSgMOjD6tiT`4!0$s-'!?R7c^qK+lhNfQ>0>1<#=3+EKXW8cTH2pNMDN.unlBFBHH-[U0!<.S?(kmEI6&k47,%3lWs:ZL#b`"WBsO,.bCK(ikO_4RG=H'UcUII((/*Eod7J"/3Y7@!51-J^^eoc]Ib:4p#g$\ChqH[:\5A"OL:EaLp$[OcJBnIq&F<\jdd7=PqZNCHTsAsF[o79MQP$="WfQo'X\2KFgp[eR$G]O:ns;R]O$-^jpT^U_$7$aQ?X]@p!BS>"DX>1S+a')3RBA=[bCtZ-2aAZlKYYD%-`!Jkc75lg9X8RR_-7Tol\RGs'lf(/Tm[!,C7d^qkJ*L68hb>4mR@X90p(3WM9&6N$-*'V7.mECP"?d"=Sou/2$'N)e.\bpg:1-tX1>=k=EpQALCPH.aT5k"tZoS^@\mhi^;^Dp-`]E?#W$=\K5WDH522^A[:,_R=,W$OY^,RCg=R?DcY6kg+W'l#1R$jf6Pq533`,T7U7KNdpT9IfBT*Z6n(Kj"flL+:[c2]/Pk9?^eB67mHe6P]endstream +endobj +66 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1285 +>> +stream +GauI8?#uJp'Sc)T/'__84-G^;+>1-e[aRu)R`*s=^$uXbgE[UU!D-mQI?/3';)TLc*d0;qIIr,9c_D#Ca:(3/@Cs;=#2mr=VI(/o%^RH85m>J]^usD3IR43r6Vdau,4^=&B]*;$"21/]9s!_PE#N,*$sZ\;KHc*&#(,E\H4\K>F;gVi5Q'#6;--@SA>t1H3[kh9?5+a6DUQ/j=\p`8L@jr8+63G$/JpJ+7YS*Q/4l+pAs-eAWH=E.4T,TN+',#0ds^]/-dA<[PeZt)m.Wf07j5*_V*MEo]+>6atESIJ#K7&*]3lA`eNS.a/C14V6_G>kK/_+.9=p)hS-]I*>3O=E]F(BdgNQ4ai0_S*s0;6lG\4lF3JlXPNW^)k4u\S)1]&uJH3V*`M*C+MArtGennA$0;1MG)*>lj)M.,F1C("\.``59+GfU$S)%>j,L[/?g+D'ZLt@*cPF0+O+6*uT6osnXgt*_qTa'gl/.A,-fI,P9,MgbcGmSO@4-?;Ot]!h>R#VuKUig3Q@rZoM9(i6lm+28$,]O/XMH[N6"7)fbClE#=Yrh)8V'=JKUq1.1ecOnbbAO_K+qNDiZjB&64k50";Ze9lA`PAr4Q(s9V5#eCJqO'k48>.+PX)-HmuW[/hSM*q$l@]L]m~>endstream +endobj +xref +0 67 +0000000000 65535 f +0000000061 00000 n +0000000131 00000 n +0000000238 00000 n +0000076403 00000 n +0000076671 00000 n +0000076876 00000 n +0000077081 00000 n +0000077286 00000 n +0000165263 00000 n +0000248161 00000 n +0000248478 00000 n +0000342557 00000 n +0000419566 00000 n +0000419885 00000 n +0000420091 00000 n +0000476351 00000 n +0000476621 00000 n +0000476827 00000 n +0000536878 00000 n +0000537148 00000 n +0000604693 00000 n +0000604963 00000 n +0000695740 00000 n +0000696010 00000 n +0000696216 00000 n +0000696422 00000 n +0000696628 00000 n +0000696834 00000 n +0000697040 00000 n +0000697246 00000 n +0000697452 00000 n +0000697658 00000 n +0000698424 00000 n +0000717810 00000 n +0000718069 00000 n +0000719407 00000 n +0000720171 00000 n +0000738663 00000 n +0000738933 00000 n +0000740287 00000 n +0000741059 00000 n +0000757590 00000 n +0000757852 00000 n +0000759221 00000 n +0000759291 00000 n +0000759572 00000 n +0000759766 00000 n +0000760826 00000 n +0000761776 00000 n +0000764379 00000 n +0000766352 00000 n +0000767015 00000 n +0000768000 00000 n +0000769571 00000 n +0000770864 00000 n +0000771771 00000 n +0000772564 00000 n +0000773816 00000 n +0000775442 00000 n +0000777850 00000 n +0000779568 00000 n +0000781785 00000 n +0000784456 00000 n +0000787049 00000 n +0000789275 00000 n +0000791066 00000 n +trailer +<< +/ID +[<5e820c534a34c155d1508d5eb0524486><5e820c534a34c155d1508d5eb0524486>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 45 0 R +/Root 44 0 R +/Size 67 +>> +startxref +792443 +%%EOF diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md deleted file mode 100644 index 98ef839..0000000 --- a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.md +++ /dev/null @@ -1,540 +0,0 @@ -# Printservice Standalone Java 25 v2.3 - -Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. - -## Funktionen - -- eigener HTTP-Server aus dem JDK -- Webfrontend unter `http://localhost:8080/` -- REST-API unter `http://localhost:8080/api` -- Drucker-Aliase für `WINDOWS_SPOOLER` und `RAW_TCP` -- Windows-/LocalSystem-Assistent für Dienstbetrieb -- HTML-Vorlagen mit Online-Editor -- HTML-Tabellen über `{{#each:items}} ... {{/each}}` -- HTML -> PDF -> Druck -- PDF als Vorlage mit Koordinatenfeldern (`PDF_TEMPLATE`) -- PDF-Tabellen aus JSON-Arrays -- ZPL/EPL/Text RAW-Druck -- DOCX-Vorlagen rendern und herunterladen -- DOCX -> PDF -> Druck optional über `DOCX4J_FO` ohne LibreOffice -- Barcode, QR-Code, DataMatrix und weitere ZXing-Formate -- optionale Authentifizierung: wenn deaktiviert, kann jeder per REST drucken -- Benutzer-/Tokenverwaltung im Webfrontend -- persistente Druckjob-Historie / Druckwarteschlange für Redruck -- Filterung der Druckhistorie nach User, Status, Drucker und Vorlage -- Admin-Vollansicht der Warteschlange mit `full=true` -- produktionsnahe Vorlagenstruktur unter `templates//...` - -## Zielplattform - -- Java 25 -- Maven 3.9 oder neuer empfohlen -- Windows, Linux oder macOS -- Windows-Dienstbetrieb über WinSW - -## Build - -```bash -mvn clean package -``` - -Ergebnis: - -```text -target/printservice-standalone.jar -``` - -## Start als Konsole - -Windows: - -```cmd -java -Dprintservice.config.dir=C:\printservice -jar target\printservice-standalone.jar --host=0.0.0.0 --port=8080 -``` - -Linux: - -```bash -java -Dprintservice.config.dir=/opt/printservice -jar target/printservice-standalone.jar --host=0.0.0.0 --port=8080 -``` - -Danach: - -```text -http://localhost:8080/ -http://localhost:8080/api/diagnostics/system -``` - -## Konfigurationsstruktur - -Empfohlen unter Windows: - -```text -C:\printservice -├── auth.json -├── printers.json -├── queue -│ └── print-jobs.json -├── templates -│ └── -│ ├── template.json -│ ├── document.* -│ ├── fields.json -│ ├── sample-data.json -│ └── print-request.json -├── spool -├── archive -├── preview -└── logs -``` - -Ohne `-Dprintservice.config.dir` nutzt die Anwendung: - -```text -%USERPROFILE%\.printservice -``` - -## Windows-Service mit WinSW - -```powershell -mvn clean package -.\scripts\install-service.ps1 -InstallDir C:\printservice-app -ConfigDir C:\printservice -Port 8080 -``` - -Danach `WinSW-x64.exe` als `C:\printservice-app\printservice.exe` ablegen und starten: - -```powershell -cd C:\printservice-app -.\printservice.exe install -.\printservice.exe start -.\printservice.exe status -``` - -## Authentifizierung - -Standardmäßig ist Auth deaktiviert. Dann kann jeder, der `/api/print` erreicht, drucken. Das ist für Tests praktisch, aber produktiv nur in geschlossenen Netzen sinnvoll. - -```json -{ - "enabled": false, - "protectPrint": true, - "protectRenderedDownload": true, - "protectPreview": false, - "protectAdmin": false, - "headerName": "X-Printservice-Token", - "tokens": [] -} -``` - -### Empfohlener Ablauf im Webfrontend - -1. Webfrontend öffnen. -2. Bereich **Authentifizierung, Benutzer und Token**. -3. Erst einen Admin-User anlegen, Scope `ALL`. -4. Token kopieren und sicher speichern. -5. Danach Auth aktivieren. -6. Optional `protectAdmin` aktivieren. -7. Für Maschinen/Clients eigene User mit Scope `PRINT` anlegen. - -Token werden serverseitig nur als SHA-256-Hash gespeichert. Das Klartext-Token wird nur einmal bei der Erstellung zurückgegeben. - -### REST: Benutzer/Token anlegen - -```bash -curl -X POST http://localhost:8080/api/auth/users \ - -H "Content-Type: application/json" \ - -d @src/main/resources/examples/rest-create-auth-user-request.json -``` - -Beispiel: - -```json -{ - "userName": "line01", - "displayName": "Linie 01", - "tokenName": "line01-print-token", - "enabled": true, - "scopes": ["PRINT", "PREVIEW"] -} -``` - -Antwort enthält das Token einmalig: - -```json -{ - "userName": "line01", - "tokenName": "line01-print-token", - "token": "NUR_EINMAL_SICHTBAR" -} -``` - -### REST: Auth einschalten - -```bash -curl -X PUT http://localhost:8080/api/auth/config \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: ADMIN_TOKEN" \ - -d @src/main/resources/examples/rest-update-auth-config-enabled-request.json -``` - -### REST: Drucken mit Token - -```bash -curl -X POST http://localhost:8080/api/print \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ - -d @src/main/resources/examples/rest-print-raw-tcp-zpl-request.json -``` - -Alternativ: - -```text -Authorization: Bearer YOUR_PRINT_TOKEN -``` - -## Druckwarteschlange / Druckhistorie / Redruck - -Jeder echte Druckjob wird unter `queue/print-jobs.json` gespeichert. Gespeichert werden u. a. Job-ID, Benutzer, Drucker, Vorlage, Render-Modus, Status und der Original-PrintRequest. Dadurch kann der Job später erneut gedruckt werden. - -### Eigene Jobs abrufen - -```bash -curl "http://localhost:8080/api/queue?limit=100" \ - -H "X-Printservice-Token: YOUR_PRINT_TOKEN" -``` - -Wenn Auth aktiv ist, sieht ein normaler Benutzer nur seine eigenen Jobs. - -### Vollständige Liste abrufen - -```bash -curl "http://localhost:8080/api/queue?full=true&limit=500" \ - -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" -``` - -`full=true` benötigt Scope `ADMIN` oder `ALL`. - -### Nach User/Status/Vorlage filtern - -```bash -curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ - -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" -``` - -### Einzelnen Job abrufen - -```bash -curl http://localhost:8080/api/queue/JOB_ID \ - -H "X-Printservice-Token: YOUR_PRINT_TOKEN" -``` - -### Redruck - -```bash -curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ - -d @src/main/resources/examples/rest-reprint-request.json -``` - -Beispiel: - -```json -{ - "copies": 1, - "printerAlias": "LABEL_LINE_01", - "dataOverride": { - "reprintReason": "Etikett beschädigt" - } -} -``` - -Ohne `printerAlias` und ohne `dataOverride` wird der Originaljob unverändert erneut gesendet. - -## Druckerarten - -### WINDOWS_SPOOLER - -Für PDF, HTML->PDF, PDF_TEMPLATE und normale Office-/A4-Drucker. - -```json -{ - "alias": "OFFICE_A4", - "type": "WINDOWS_SPOOLER", - "systemName": "HP_LaserJet_A4", - "description": "A4 Drucker über Windows Spooler" -} -``` - -### RAW_TCP - -Für schnelle Etikettendrucker mit ZPL/EPL/ESC-POS/PCL. - -```json -{ - "alias": "LABEL_LINE_01", - "type": "RAW_TCP", - "host": "192.168.10.50", - "port": 9100, - "language": "ZPL", - "description": "Zebra Etikettendrucker direkt per TCP" -} -``` - -## REST-Endpunkte - -```text -GET /api/diagnostics/system -GET /api/printers/diagnostics -GET /api/printers/scan -GET /api/printers -POST /api/printers -DELETE /api/printers/{alias} -GET /api/templates/storage -GET /api/templates -GET /api/templates/{name} -POST /api/templates -PUT /api/templates/{name} -DELETE /api/templates/{name} -GET /api/barcodes/formats -GET /api/auth/status -GET /api/auth/me -GET /api/auth/users -POST /api/auth/users -DELETE /api/auth/users/{idOrUserName} -GET /api/auth/config -PUT /api/auth/config -POST /api/auth/reload -POST /api/print/preview -POST /api/print/preview/html -POST /api/print/rendered -POST /api/print -GET /api/docx/converters -POST /api/docx/validate -GET /api/queue -GET /api/queue/{jobId} -POST /api/queue/{jobId}/reprint -``` - -## Render-Modi - -| Modus | Bedeutung | -|---|---| -| `AUTO` | Modus wird anhand des Vorlagentyps ermittelt | -| `RAW` | Text/ZPL/EPL direkt ausgeben | -| `PDF` | HTML nach PDF rendern | -| `PDF_TEMPLATE` | PDF-Vorlage mit Koordinatenfeldern befüllen | -| `DOCX` | DOCX befüllen und als DOCX bereitstellen | - -## Barcode-Platzhalter in HTML/ZPL - -```html - - - -``` - -ZPL direkt: - -```zpl -^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS -^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS -``` - -## HTML-Tabelle - -```html - - - {{#each:items}} - - - - - - - - {{/each}} - -
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}
-``` - -## PDF_TEMPLATE-Tabelle - -```json -{ - "name": "positionsTable", - "type": "TABLE", - "source": "items", - "page": 1, - "x": 18, - "y": 78, - "width": 174, - "height": 125, - "rowHeight": 13, - "headerHeight": 8, - "maxRows": 9, - "overflow": "CUT", - "fontSize": 7, - "border": true, - "columns": [ - { "title": "Pos.", "field": "pos", "width": 12, "align": "CENTER" }, - { "title": "Artikel", "field": "partNumber", "width": 29 }, - { "title": "Barcode", "type": "BARCODE", "barcodeType": "CODE_128", "field": "serialNumber", "width": 39 } - ] -} -``` - -## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO - -Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: - -```json -{ - "renderMode": "DOCX", - "docxConverter": "DOCX4J_FO" -} -``` - -Ablauf: - -```text -DOCX-Vorlage --> Platzhalter/Barcode/QR im DOCX füllen --> docx4j-export-fo wandelt DOCX nach XSL-FO --> Apache FOP erzeugt PDF --> PDFBox druckt das PDF -``` - -Vorteile: - -- keine LibreOffice-Installation notwendig -- läuft komplett in der Java-Anwendung -- gut für einfache DOCX-Vorlagen mit Text, einfachen Tabellen, Bildern und Kopf-/Fußzeilen -- geeignet als optionaler, serverinterner Konverter - -Grenzen: - -- Layouttreue ist nicht so hoch wie bei Word/LibreOffice -- komplexe Word-Layouts, Shapes, Textfelder, SmartArt, exakte Seitenumbrüche und komplizierte Tabellen müssen pro Vorlage geprüft werden -- für Produktionsdruck ist `PDF_TEMPLATE` oder `HTML -> PDF` weiterhin robuster und meist schneller - -### Konverterstatus abrufen - -```bash -curl http://localhost:8080/api/docx/converters -``` - -### DOCX4J_FO mit einer Vorlage validieren - -```bash -curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: YOUR_TOKEN" \ - -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json -``` - -Beispielrequest: - -```json -{ - "printerAlias": "OFFICE_A4", - "templateName": "serienbegleitschein_docx", - "renderMode": "DOCX", - "docxConverter": "DOCX4J_FO", - "includeRenderedBase64": true, - "data": { - "serialNumber": "SNR000001", - "partNumber": "A123456", - "workorderNumber": "WO-100200" - } -} -``` - -Die Validierung prüft technisch, ob DOCX -> PDF erfolgreich erzeugt werden kann. Die Layout-Qualität muss anschließend visuell anhand des erzeugten PDFs geprüft werden. - -### DOCX mit DOCX4J_FO drucken - -```bash -curl -X POST http://localhost:8080/api/print \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: YOUR_TOKEN" \ - -d @src/main/resources/examples/rest-print-docx4j-fo-request.json -``` - -```json -{ - "printerAlias": "OFFICE_A4", - "templateName": "serienbegleitschein_docx", - "renderMode": "DOCX", - "docxConverter": "DOCX4J_FO", - "copies": 1, - "pdfDpi": 300, - "data": { - "serialNumber": "SNR000001", - "partNumber": "A123456", - "workorderNumber": "WO-100200" - } -} -``` - -Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in der Druckfreigabe validieren. Für feste Formulare bleibt `PDF_TEMPLATE`; für dynamische Tabellen bleibt `HTML -> PDF`; für Etiketten bleibt `RAW_TCP/ZPL` die erste Wahl. - -## Produktionsempfehlungen - -- `RAW_TCP` für ZPL/EPL-Etikettendrucker verwenden. -- `PDF_TEMPLATE` für feste A4-Formulare verwenden. -- `HTML -> PDF` für flexible Tabellenformulare verwenden. -- Authentifizierung mindestens für `/api/print` aktivieren. -- Admin-Funktionen nach Initialeinrichtung schützen. -- Für Maschinen/Stationen separate Tokens mit eigenem User verwenden. -- `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. - - -## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 - -Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: - -```text -Markup im Dokument vor dem Root-Element muss ordnungsgemäß formatiert sein. -``` - -Der Service führt deshalb vor dem Rendern aus: - -```text -HTML-Vorlage + JSON-Daten -→ Platzhalter und Tabellenblöcke rendern -→ BOM/ungültige Steuerzeichen entfernen -→ HTML-Fragmente bei Bedarf in ... einbetten -→ Browser-HTML mit jsoup zu XHTML normalisieren -→ openhtmltopdf → PDF -→ Druck oder Download -``` - -Zusätzlich gibt es einen Validierungsendpunkt: - -```http -POST /api/html/validate -``` - -Beispiel: - -```bash -curl -X POST http://localhost:8080/api/html/validate \ - -H "Content-Type: application/json" \ - -H "X-Printservice-Token: YOUR_TOKEN" \ - -d @src/main/resources/examples/rest-validate-html-pdf-request.json -``` - -Eine erfolgreiche Antwort enthält unter anderem: - -```json -{ - "ok": true, - "templateName": "lieferschein_html_table", - "renderMode": "PDF", - "message": "HTML was rendered and normalized to XHTML successfully. It can be passed to openhtmltopdf." -} -``` - -Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf deleted file mode 100644 index eee42c8..0000000 Binary files a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION.pdf and /dev/null differ diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf deleted file mode 100644 index eee42c8..0000000 Binary files a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.2.pdf and /dev/null differ diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf deleted file mode 100644 index 6ac2f92..0000000 Binary files a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.pdf and /dev/null differ diff --git a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.5.md similarity index 83% rename from docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md rename to docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.5.md index 80a9e58..196e99a 100644 --- a/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.4.md +++ b/docs/PRINTSERVICE_STANDALONE_DOKUMENTATION_v2.5.md @@ -1,4 +1,4 @@ -# Printservice Standalone Java 25 v2.3 +# Printservice Standalone Java 25 v2.5 Eigenständiger Druckservice ohne GlassFish/Payara. Die Anwendung läuft als normale Java-Applikation oder über WinSW als Windows-Dienst und stellt ein Webfrontend plus REST-API bereit. @@ -387,7 +387,7 @@ ZPL direkt: ## DOCX -> PDF -> Druck ohne LibreOffice: DOCX4J_FO -Ab v2.3 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: +Ab v2.5 gibt es zusätzlich zum externen LibreOffice-Weg den Java-only-Konverter: ```json { @@ -491,7 +491,7 @@ Empfehlung: `DOCX4J_FO` als optionale Alternative einbauen, aber pro Vorlage in - `C:\printservice` regelmäßig sichern, besonders `templates`, `printers.json`, `auth.json` und `queue/print-jobs.json`. -## HTML→PDF: robuste XHTML-Normalisierung ab v2.3 +## HTML→PDF: robuste XHTML-Normalisierung ab v2.5 Der HTML→PDF-Druckpfad normalisiert HTML-Vorlagen jetzt vor dem PDF-Renderer automatisch zu XHTML. Hintergrund: `openhtmltopdf` ist deutlich strenger als ein Browser. Normales Browser-HTML wie `
`, ``, fehlende `` oder ein UTF-8-BOM vor `` kann sonst mit einem XML-Fehler abbrechen, zum Beispiel: @@ -540,7 +540,7 @@ Eine erfolgreiche Antwort enthält unter anderem: Wenn die Vorlage versehentlich JSON oder PDF-Inhalt enthält, gibt der Service nun eine verständlichere Fehlermeldung aus, statt nur den SAX/XML-Fehler des Renderers weiterzugeben. -## v2.4: Lieferschein-Demos und HTML->PDF Fehlerbehebung +## v2.5: Lieferschein-Demos und HTML->PDF Fehlerbehebung ### HTML->PDF Fehler "Markup im Dokument vor dem Root-Element" Der HTML->PDF Pfad normalisiert HTML jetzt vor dem openhtmltopdf Renderer. Dadurch werden typische Ursachen abgefangen: UTF-8 BOM, HTML-Fragmente ohne Root-Element, nicht XML-konforme Tags wie `
`, `


` oder `` ohne schließenden Slash. @@ -584,3 +584,87 @@ Barcode-/QR-Platzhalter in DOCX müssen alleine in einem Absatz stehen: ``` Für Druck ohne LibreOffice verwendet das Beispiel `docxConverter=DOCX4J_FO`. Jede DOCX-Vorlage sollte vor produktiver Nutzung validiert werden. + +## v2.5: Uebersichtlicher Windows-Assistent und Queue-Datenschutz + +### Windows-/Drucker-Assistent im Webfrontend +Der Bereich **A. Gefundene Windows-Spooler-/CUPS-Drucker** ist jetzt als breite, scrollbar lesbare Liste umgesetzt. Die Bereiche **B. RAW_TCP fuer ZPL/EPL** und **C. Windows-Kommandos** wurden in eigene Modal-Dialoge verschoben. Dadurch bleiben lange Windows-Druckernamen lesbar und der Anwender wird Schritt fuer Schritt gefuehrt: + +1. Diagnose laden. +2. Liste A pruefen und bei Bedarf einen Spooler-/CUPS-Drucker als `WINDOWS_SPOOLER` uebernehmen. +3. Fuer Zebra/Sato/CAB/Etikettendrucker den Button **B. RAW_TCP fuer ZPL/EPL** nutzen. +4. Fuer Windows-Serverinstallation den Button **C. Windows-Kommandos** oeffnen. + +### Druckwarteschlange leeren +Die Druckwarteschlange des Printservice ist eine eigene JSON-basierte Historie unter: + +```text +/queue/print-jobs.json +``` + +Sie ist nicht die Windows-Spooler-Warteschlange. Manuell komplett leeren: + +```bash +curl -X DELETE http://localhost:8080/api/queue \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +Nur Jobs aelter als X Tage loeschen: + +```bash +curl -X POST "http://localhost:8080/api/queue/cleanup?olderThanDays=30" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d "{}" +``` + +### Queue aus Datenschutzgruenden deaktivieren +Wenn keine Druckhistorie gespeichert werden soll, kann die Queue deaktiviert werden. Drucken funktioniert weiter, aber Jobs werden nicht gespeichert und Redruck ist nicht moeglich. + +```json +{ + "enabled": false, + "storeRequestsForReprint": false, + "autoCleanupEnabled": false, + "retentionDays": 0, + "maxStoredJobs": 0 +} +``` + +Speichern per REST: + +```bash +curl -X PUT http://localhost:8080/api/queue/settings \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-disable-queue-for-privacy-request.json +``` + +### Queue aktiv, aber ohne Originalrequest +Fuer eine reduzierte Historie kann die Queue aktiv bleiben, ohne den kompletten Druckrequest zu speichern. Dann bleiben Metadaten wie Zeit, User, Drucker, Vorlage und Status erhalten, aber kein Redruck aus der Historie. + +```json +{ + "enabled": true, + "storeRequestsForReprint": false, + "autoCleanupEnabled": true, + "retentionDays": 14, + "maxStoredJobs": 1000 +} +``` + +### Queue-Einstellungen abrufen + +```bash +curl -X GET http://localhost:8080/api/queue/settings \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" +``` + +### Queue-Einstellungen speichern + +```bash +curl -X PUT http://localhost:8080/api/queue/settings \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-queue-settings-request.json +``` diff --git a/pom.xml b/pom.xml index 62eabbe..4117a46 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.hehl printservice-standalone - 2.4.0 + 2.5.0 jar Printservice Standalone Java 25 diff --git a/src/main/java/de/hehl/printservice/model/AuthConfigUpdateRequest.java b/src/main/java/de/hehl/printservice/model/AuthConfigUpdateRequest.java new file mode 100644 index 0000000..7cbb813 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthConfigUpdateRequest.java @@ -0,0 +1,10 @@ +package de.hehl.printservice.model; + +public class AuthConfigUpdateRequest { + public Boolean enabled; + public Boolean protectPrint; + public Boolean protectRenderedDownload; + public Boolean protectPreview; + public Boolean protectAdmin; + public String headerName; +} diff --git a/src/main/java/de/hehl/printservice/model/AuthConfiguration.java b/src/main/java/de/hehl/printservice/model/AuthConfiguration.java new file mode 100644 index 0000000..8f7754d --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthConfiguration.java @@ -0,0 +1,14 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class AuthConfiguration { + public boolean enabled = false; + public boolean protectPrint = true; + public boolean protectRenderedDownload = true; + public boolean protectPreview = false; + public boolean protectAdmin = false; + public String headerName = "X-Printservice-Token"; + public List tokens = new ArrayList<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/AuthIdentity.java b/src/main/java/de/hehl/printservice/model/AuthIdentity.java new file mode 100644 index 0000000..9387f34 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthIdentity.java @@ -0,0 +1,25 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class AuthIdentity { + public boolean authenticated; + public boolean authEnabled; + public String userName = "anonymous"; + public String displayName = "Anonymous"; + public String tokenId; + public String tokenName; + public List scopes = new ArrayList<>(); + + public boolean hasScope(String scope) { + if (scope == null) return false; + String required = scope.trim().toUpperCase(java.util.Locale.ROOT); + for (String s : scopes) { + if (s == null) continue; + String v = s.trim().toUpperCase(java.util.Locale.ROOT); + if (v.equals(required) || v.equals("ALL")) return true; + } + return false; + } +} diff --git a/src/main/java/de/hehl/printservice/model/AuthStatus.java b/src/main/java/de/hehl/printservice/model/AuthStatus.java new file mode 100644 index 0000000..315c403 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthStatus.java @@ -0,0 +1,14 @@ +package de.hehl.printservice.model; + +public class AuthStatus { + public boolean enabled; + public boolean protectPrint; + public boolean protectRenderedDownload; + public boolean protectPreview; + public boolean protectAdmin; + public String headerName; + public int tokenCount; + public int enabledTokenCount; + public boolean openPrintWithoutToken; + public String message; +} diff --git a/src/main/java/de/hehl/printservice/model/AuthToken.java b/src/main/java/de/hehl/printservice/model/AuthToken.java new file mode 100644 index 0000000..ea17a7f --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthToken.java @@ -0,0 +1,21 @@ +package de.hehl.printservice.model; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + +public class AuthToken { + public String id; + public String name; + public String userName; + public String displayName; + /** SHA-256 hex of the token. Preferred for production. */ + public String sha256; + /** Optional clear text token for development only. Not written by the web UI. */ + public String token; + /** Scopes: PRINT, PREVIEW, ADMIN. Empty means all scopes. */ + public List scopes = new ArrayList<>(); + public boolean enabled = true; + public String createdAt = Instant.now().toString(); + public String lastUsedAt; +} diff --git a/src/main/java/de/hehl/printservice/model/AuthUserRequest.java b/src/main/java/de/hehl/printservice/model/AuthUserRequest.java new file mode 100644 index 0000000..a5203ea --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthUserRequest.java @@ -0,0 +1,14 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class AuthUserRequest { + public String userName; + public String displayName; + public String tokenName; + /** Optional token. If empty, the service generates a new token and returns it once. */ + public String token; + public boolean enabled = true; + public List scopes = new ArrayList<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/AuthUserResponse.java b/src/main/java/de/hehl/printservice/model/AuthUserResponse.java new file mode 100644 index 0000000..e3ff8c4 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/AuthUserResponse.java @@ -0,0 +1,16 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class AuthUserResponse { + public String id; + public String userName; + public String displayName; + public String tokenName; + public boolean enabled; + public List scopes = new ArrayList<>(); + /** Plain token is returned only once when created. Store it externally. */ + public String token; + public String createdAt; +} diff --git a/src/main/java/de/hehl/printservice/model/BarcodeFormatInfo.java b/src/main/java/de/hehl/printservice/model/BarcodeFormatInfo.java new file mode 100644 index 0000000..663f5d3 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/BarcodeFormatInfo.java @@ -0,0 +1,15 @@ +package de.hehl.printservice.model; + +public class BarcodeFormatInfo { + public String name; + public String type; + public String description; + + public BarcodeFormatInfo() {} + + public BarcodeFormatInfo(String name, String type, String description) { + this.name = name; + this.type = type; + this.description = description; + } +} diff --git a/src/main/java/de/hehl/printservice/model/CreateTemplateRequest.java b/src/main/java/de/hehl/printservice/model/CreateTemplateRequest.java new file mode 100644 index 0000000..520f2a5 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/CreateTemplateRequest.java @@ -0,0 +1,28 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class CreateTemplateRequest { + public String name; + public String documentName; + public String sourceFileName; + public String description; + public String content; + public String contentBase64; + public String contentType; + public String templateType; + public String encoding; + public String coordinateUnit; + public String coordinateOrigin; + public List pdfFields = new ArrayList<>(); + + /** Optional productive folder-storage fields. */ + public String documentFile; + public String fieldsFile; + public String sampleDataFile; + public String printRequestFile; + public Map sampleData; + public Map examplePrintRequest; +} diff --git a/src/main/java/de/hehl/printservice/model/ErrorResponse.java b/src/main/java/de/hehl/printservice/model/ErrorResponse.java new file mode 100644 index 0000000..c0c8f54 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/ErrorResponse.java @@ -0,0 +1,17 @@ +package de.hehl.printservice.model; + +import java.time.Instant; + +public class ErrorResponse { + public int status; + public String message; + public String timestamp = Instant.now().toString(); + + public ErrorResponse() { + } + + public ErrorResponse(int status, String message) { + this.status = status; + this.message = message; + } +} diff --git a/src/main/java/de/hehl/printservice/model/PdfTableColumn.java b/src/main/java/de/hehl/printservice/model/PdfTableColumn.java new file mode 100644 index 0000000..4c6d3d6 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PdfTableColumn.java @@ -0,0 +1,31 @@ +package de.hehl.printservice.model; + +public class PdfTableColumn { + /** Column header text. If empty, field is used. */ + public String title; + + /** Field name inside each row object. Dot notation is supported, e.g. row.material.partNumber. */ + public String field; + + /** TEXT, BARCODE, QR_CODE or DATA_MATRIX. */ + public String type = "TEXT"; + + /** Optional expression such as {{serialNumber}} or {{row.serialNumber}}. If empty, field is used. */ + public String value; + + /** Column width in the table unit. If empty, remaining space is distributed. */ + public Double width; + + /** Optional barcode height inside the row. */ + public Double height; + + /** Barcode format for BARCODE columns, e.g. CODE_128, CODE_39, EAN_13, PDF_417. */ + public String barcodeType; + + public Double fontSize; + public String fontName = "HELVETICA"; + public Boolean bold = false; + public String align = "LEFT"; + public String color; + public Boolean multiline = false; +} diff --git a/src/main/java/de/hehl/printservice/model/PdfTemplateField.java b/src/main/java/de/hehl/printservice/model/PdfTemplateField.java new file mode 100644 index 0000000..2a84282 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PdfTemplateField.java @@ -0,0 +1,59 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class PdfTemplateField { + /** Unique field name. If value is empty, data[name] is used. */ + public String name; + + /** TEXT, BARCODE, QR_CODE, DATA_MATRIX or TABLE. */ + public String type = "TEXT"; + + /** 1-based page number. */ + public Integer page = 1; + + /** Coordinates in the template coordinate unit. */ + public Double x = 0.0; + public Double y = 0.0; + public Double width; + public Double height; + + /** Optional per-field unit: pt, mm, cm or in. If empty, TemplateInfo.coordinateUnit is used. */ + public String unit; + + /** BOTTOM_LEFT or TOP_LEFT. If empty, TemplateInfo.coordinateOrigin is used. */ + public String origin; + + /** For TEXT fields: fixed text or a template expression such as {{serialNumber}}. */ + public String value; + + /** For barcode fields: CODE_128, CODE_39, EAN_13, QR_CODE, DATA_MATRIX, PDF_417, AZTEC, ... */ + public String barcodeType; + + public Double fontSize = 10.0; + public String fontName = "HELVETICA"; + public Boolean bold = false; + public String align = "LEFT"; + public String color = "#000000"; + public Double lineHeight; + public Boolean multiline = false; + + /** For TABLE fields: path to a JSON array in the print request data, e.g. items or serials. */ + public String source; + + /** For TABLE fields. */ + public Double rowHeight; + public Double headerHeight; + public Integer maxRows; + public String overflow = "CUT"; // CUT, SHRINK, NEW_PAGE, ERROR + public Boolean border = true; + public Boolean drawHeader = true; + public Boolean repeatHeader = true; + public Double padding; + public String headerBackground = "#EEEEEE"; + public String headerColor = "#000000"; + public String gridColor = "#000000"; + public List columns = new ArrayList<>(); + +} diff --git a/src/main/java/de/hehl/printservice/model/PrintJobRecord.java b/src/main/java/de/hehl/printservice/model/PrintJobRecord.java new file mode 100644 index 0000000..a27e90d --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintJobRecord.java @@ -0,0 +1,27 @@ +package de.hehl.printservice.model; + +import java.time.Instant; +import java.util.LinkedHashMap; +import java.util.Map; + +public class PrintJobRecord { + public String jobId; + public String status; // ACCEPTED, SUBMITTED, FAILED, PREVIEW, REPRINT + public String createdAt = Instant.now().toString(); + public String updatedAt = Instant.now().toString(); + public String userName = "anonymous"; + public String displayName = "Anonymous"; + public String tokenName; + public String printerAlias; + public String systemName; + public String templateName; + public String documentName; + public String renderMode; + public String contentType; + public Integer copies; + public Long renderedBytes; + public String message; + public String reprintOfJobId; + public PrintRequest request; + public Map metadata = new LinkedHashMap<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/PrintQueueMaintenanceResponse.java b/src/main/java/de/hehl/printservice/model/PrintQueueMaintenanceResponse.java new file mode 100644 index 0000000..2c8e8e4 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintQueueMaintenanceResponse.java @@ -0,0 +1,10 @@ +package de.hehl.printservice.model; + +public class PrintQueueMaintenanceResponse { + public boolean enabled; + public int before; + public int after; + public int removed; + public String message; + public PrintQueueSettings settings; +} diff --git a/src/main/java/de/hehl/printservice/model/PrintQueueResponse.java b/src/main/java/de/hehl/printservice/model/PrintQueueResponse.java new file mode 100644 index 0000000..ba51776 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintQueueResponse.java @@ -0,0 +1,19 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class PrintQueueResponse { + public boolean enabled; + public boolean storeRequestsForReprint; + public boolean autoCleanupEnabled; + public int retentionDays; + public int maxStoredJobs; + public int total; + public int returned; + public boolean filteredToCurrentUser; + public String currentUser; + public String queueFile; + public String message; + public List jobs = new ArrayList<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/PrintQueueSettings.java b/src/main/java/de/hehl/printservice/model/PrintQueueSettings.java new file mode 100644 index 0000000..eb47c61 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintQueueSettings.java @@ -0,0 +1,18 @@ +package de.hehl.printservice.model; + +public class PrintQueueSettings { + /** If false, print jobs are not persisted at all. Printing still works, but reprint/history are disabled. */ + public boolean enabled = true; + + /** If false, only metadata is stored; original requests are not persisted and reprint is not possible. */ + public boolean storeRequestsForReprint = true; + + /** If true, the queue is cleaned whenever settings are saved, jobs are listed, or new jobs are stored. */ + public boolean autoCleanupEnabled = false; + + /** Jobs older than this many days are removed when auto cleanup runs. 0 disables age based cleanup. */ + public int retentionDays = 30; + + /** Maximum jobs kept after cleanup. 0 means unlimited. Newest jobs are kept. */ + public int maxStoredJobs = 5000; +} diff --git a/src/main/java/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.java b/src/main/java/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.java new file mode 100644 index 0000000..6575195 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.java @@ -0,0 +1,9 @@ +package de.hehl.printservice.model; + +public class PrintQueueSettingsUpdateRequest { + public Boolean enabled; + public Boolean storeRequestsForReprint; + public Boolean autoCleanupEnabled; + public Integer retentionDays; + public Integer maxStoredJobs; +} diff --git a/src/main/java/de/hehl/printservice/model/PrintRequest.java b/src/main/java/de/hehl/printservice/model/PrintRequest.java new file mode 100644 index 0000000..5cea808 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintRequest.java @@ -0,0 +1,35 @@ +package de.hehl.printservice.model; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class PrintRequest { + public String printerAlias; + public String templateName; + public Map data = new LinkedHashMap<>(); + public Integer copies = 1; + public Boolean dryRun = false; + public String encoding = "UTF-8"; + + /** AUTO, RAW, PDF, DOCX or PDF_TEMPLATE. AUTO means ZPL/EPL/TEXT=RAW, HTML=PDF, DOCX=DOCX, PDF=PDF_TEMPLATE. */ + public String renderMode = "AUTO"; + + /** DPI used when a generated PDF is rasterized for the printer. 203 is fast for label printers, 300 for office printers. */ + public Integer pdfDpi = 203; + + /** Include rendered binary content as Base64 in JSON preview responses. Keep false for high volume. */ + public Boolean includeRenderedBase64 = false; + + /** + * Optional DOCX -> PDF converter for direct DOCX printing. + * Supported values: NONE, LIBREOFFICE, DOCX4J_FO. + * DOCX4J_FO is Java-only but must be validated per template because Word layout fidelity is limited. + */ + public String docxConverter = "NONE"; + + /** Optional client reference, e.g. MES transaction id, order id or workstation id. */ + public String clientReference; + + /** Internal field used when a request was started as reprint. */ + public String reprintOfJobId; +} diff --git a/src/main/java/de/hehl/printservice/model/PrintResponse.java b/src/main/java/de/hehl/printservice/model/PrintResponse.java new file mode 100644 index 0000000..d539467 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrintResponse.java @@ -0,0 +1,24 @@ +package de.hehl.printservice.model; + +import java.time.Instant; +import java.util.UUID; + +public class PrintResponse { + public boolean printed; + public String jobId = UUID.randomUUID().toString(); + public String printerAlias; + public String systemName; + public String templateName; + public String documentName; + public String contentType; + public String renderMode; + public Integer copies; + public String renderedContent; + public String renderedBase64; + public Long renderedBytes; + public String message; + public String status; + public String userName; + public String reprintOfJobId; + public String timestamp = Instant.now().toString(); +} diff --git a/src/main/java/de/hehl/printservice/model/PrinterInfo.java b/src/main/java/de/hehl/printservice/model/PrinterInfo.java new file mode 100644 index 0000000..6504e6e --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrinterInfo.java @@ -0,0 +1,20 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class PrinterInfo { + public String systemName; + public boolean defaultPrinter; + public String source = "JAVA_PRINT_SERVICE"; + public String osName = System.getProperty("os.name"); + public List supportedDocFlavors = new ArrayList<>(); + + public PrinterInfo() { + } + + public PrinterInfo(String systemName, boolean defaultPrinter) { + this.systemName = systemName; + this.defaultPrinter = defaultPrinter; + } +} diff --git a/src/main/java/de/hehl/printservice/model/PrinterMapping.java b/src/main/java/de/hehl/printservice/model/PrinterMapping.java new file mode 100644 index 0000000..90b50e7 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/PrinterMapping.java @@ -0,0 +1,38 @@ +package de.hehl.printservice.model; + +import java.time.Instant; + +public class PrinterMapping { + /** Alias used by REST clients. Keep stable even if the technical printer changes. */ + public String alias; + + /** WINDOWS_SPOOLER or RAW_TCP. WINDOWS_SPOOLER uses Java PrintService, RAW_TCP sends raw bytes to host:port. */ + public String type = "WINDOWS_SPOOLER"; + + /** Name from Windows Spooler / Linux CUPS for WINDOWS_SPOOLER mappings. */ + public String systemName; + + /** Target host/IP for RAW_TCP mappings, usually Zebra/Sato/CAB on port 9100. */ + public String host; + + /** Target port for RAW_TCP mappings. Default: 9100. */ + public Integer port = 9100; + + /** Optional hint such as ZPL, EPL, ESC_POS, PCL. */ + public String language; + + public boolean enabled = true; + public String description; + public String createdAt = Instant.now().toString(); + public String updatedAt = Instant.now().toString(); + + public PrinterMapping() { + } + + public PrinterMapping(String alias, String systemName, String description) { + this.alias = alias; + this.systemName = systemName; + this.description = description; + this.type = "WINDOWS_SPOOLER"; + } +} diff --git a/src/main/java/de/hehl/printservice/model/RegisterPrinterRequest.java b/src/main/java/de/hehl/printservice/model/RegisterPrinterRequest.java new file mode 100644 index 0000000..cbd34d5 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/RegisterPrinterRequest.java @@ -0,0 +1,13 @@ +package de.hehl.printservice.model; + +public class RegisterPrinterRequest { + public String alias; + /** WINDOWS_SPOOLER or RAW_TCP. Empty means WINDOWS_SPOOLER for backwards compatibility. */ + public String type; + public String systemName; + public String host; + public Integer port; + public String language; + public String description; + public Boolean enabled; +} diff --git a/src/main/java/de/hehl/printservice/model/RenderedDocument.java b/src/main/java/de/hehl/printservice/model/RenderedDocument.java new file mode 100644 index 0000000..5886dbb --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/RenderedDocument.java @@ -0,0 +1,18 @@ +package de.hehl.printservice.model; + +public class RenderedDocument { + public String contentType; + public String fileName; + public String renderMode; + public String text; + public byte[] bytes; + + public boolean isBinary() { + return bytes != null; + } + + public long size() { + if (bytes != null) return bytes.length; + return text == null ? 0 : text.length(); + } +} diff --git a/src/main/java/de/hehl/printservice/model/ReprintRequest.java b/src/main/java/de/hehl/printservice/model/ReprintRequest.java new file mode 100644 index 0000000..a1af6c2 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/ReprintRequest.java @@ -0,0 +1,10 @@ +package de.hehl.printservice.model; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class ReprintRequest { + public Integer copies; + public String printerAlias; + public Map dataOverride = new LinkedHashMap<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/SystemDiagnostics.java b/src/main/java/de/hehl/printservice/model/SystemDiagnostics.java new file mode 100644 index 0000000..4adeb18 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/SystemDiagnostics.java @@ -0,0 +1,24 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class SystemDiagnostics { + public String osName; + public String osVersion; + public String osArch; + public boolean windows; + public String javaVersion; + public String javaVendor; + public String javaUser; + public String userNameEnv; + public boolean likelyLocalSystem; + public String applicationHome; + public String workingDirectory; + public String configDir; + public int spoolerPrinterCount; + public String defaultPrinter; + public List spoolerPrinters = new ArrayList<>(); + public List recommendations = new ArrayList<>(); + public List supportedWindowsModes = new ArrayList<>(); +} diff --git a/src/main/java/de/hehl/printservice/model/TemplateInfo.java b/src/main/java/de/hehl/printservice/model/TemplateInfo.java new file mode 100644 index 0000000..7126bad --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/TemplateInfo.java @@ -0,0 +1,57 @@ +package de.hehl.printservice.model; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class TemplateInfo { + public String name; + public String documentName; + public String sourceFileName; + public String description; + + /** + * Runtime content for text based templates. In folder storage this is read + * from templates//document.* when the full template is requested. + */ + public String content; + + /** + * Runtime content for binary templates. In folder storage this is read + * from templates//document.pdf or document.docx when needed. + */ + public String contentBase64; + + public String contentType = "text/plain"; + public String templateType = "TEXT"; + + /** Folder based storage metadata. */ + public String storageMode = "FOLDER"; + public Integer storageVersion = 2; + public String templateDirectory; + public String documentFile = "document.txt"; + public String metadataFile = "template.json"; + public String fieldsFile = "fields.json"; + public String sampleDataFile = "sample-data.json"; + public String printRequestFile = "print-request.json"; + public Boolean hasDocumentFile = false; + public Boolean hasFieldsFile = false; + public Boolean hasSampleDataFile = false; + public Boolean hasPrintRequestFile = false; + + /** PDF coordinate template support. Coordinates are usually pt or mm. */ + public String coordinateUnit = "pt"; + public String coordinateOrigin = "BOTTOM_LEFT"; + public List pdfFields = new ArrayList<>(); + + /** Optional example data stored in sample-data.json. */ + public Map sampleData; + + public String encoding = "UTF-8"; + public Long sizeBytes = 0L; + public String updatedAt = Instant.now().toString(); + + public TemplateInfo() { + } +} diff --git a/src/main/java/de/hehl/printservice/model/WindowsPrinterCommandExamples.java b/src/main/java/de/hehl/printservice/model/WindowsPrinterCommandExamples.java new file mode 100644 index 0000000..614d792 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/WindowsPrinterCommandExamples.java @@ -0,0 +1,10 @@ +package de.hehl.printservice.model; + +public class WindowsPrinterCommandExamples { + public String localTcpPrinterPowerShell; + public String perMachineSharedPrinterCmd; + public String listPrintersPowerShell; + public String restartSpoolerCmd; + public String rawTcpAliasJson; + public String windowsSpoolerAliasJson; +} diff --git a/src/main/java/de/hehl/printservice/model/WindowsPrinterDiagnostics.java b/src/main/java/de/hehl/printservice/model/WindowsPrinterDiagnostics.java new file mode 100644 index 0000000..dfab915 --- /dev/null +++ b/src/main/java/de/hehl/printservice/model/WindowsPrinterDiagnostics.java @@ -0,0 +1,21 @@ +package de.hehl.printservice.model; + +import java.util.ArrayList; +import java.util.List; + +public class WindowsPrinterDiagnostics { + public String osName; + public boolean windows; + public String javaUser; + public String userNameEnv; + public String userDomainEnv; + public String computerNameEnv; + public boolean likelyLocalSystem; + public int discoveredPrinterCount; + public String defaultPrinter; + public List discoveredPrinters = new ArrayList<>(); + public List warnings = new ArrayList<>(); + public List recommendations = new ArrayList<>(); + public List availableModes = new ArrayList<>(); + public WindowsPrinterCommandExamples commands = new WindowsPrinterCommandExamples(); +} diff --git a/src/main/java/de/hehl/printservice/service/BarcodeExpression.java b/src/main/java/de/hehl/printservice/service/BarcodeExpression.java new file mode 100644 index 0000000..d15e962 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/BarcodeExpression.java @@ -0,0 +1,98 @@ +package de.hehl.printservice.service; + +import java.util.List; +import java.util.Map; + +public class BarcodeExpression { + public String format; + public String path; + public int width; + public int height; + + public static BarcodeExpression parse(String expression, String defaultFormat, int defaultWidth, int defaultHeight) { + BarcodeExpression result = new BarcodeExpression(); + result.format = defaultFormat; + result.width = defaultWidth; + result.height = defaultHeight; + + String expr = expression == null ? "" : expression.trim(); + if (expr.startsWith("barcode:")) { + String[] parts = expr.substring(8).trim().split(":"); + if (parts.length == 1) { + result.path = parts[0].trim(); + result.format = "CODE_128"; + } else { + result.format = emptyTo(parts[0].trim(), "CODE_128"); + result.path = parts.length > 1 ? parts[1].trim() : ""; + if (parts.length >= 3) { + int[] size = parseSize(parts[2].trim(), defaultWidth, defaultHeight); + result.width = size[0]; + result.height = size[1]; + } + } + return result; + } + if (expr.startsWith("qr:")) { + result.format = "QR_CODE"; + result.path = expr.substring(3).trim(); + result.width = defaultHeight; + result.height = defaultHeight; + return result; + } + if (expr.startsWith("qrcode:")) { + result.format = "QR_CODE"; + result.path = expr.substring(7).trim(); + result.width = defaultHeight; + result.height = defaultHeight; + return result; + } + result.path = expr; + return result; + } + + @SuppressWarnings("unchecked") + public String resolveValue(Map data) { + if (data == null || path == null) { + return ""; + } + String[] parts = path.split("\\."); + Object current = data; + for (String part : parts) { + if (current instanceof Map) { + current = ((Map) current).get(part); + } else if (current instanceof List && part.matches("\\d+")) { + List list = (List) current; + int index = Integer.parseInt(part); + current = index >= 0 && index < list.size() ? list.get(index) : null; + } else { + return ""; + } + if (current == null) { + return ""; + } + } + return String.valueOf(current); + } + + private static String emptyTo(String value, String fallback) { + return value == null || value.trim().isEmpty() ? fallback : value; + } + + private static int[] parseSize(String text, int defaultWidth, int defaultHeight) { + if (text == null || text.trim().isEmpty()) { + return new int[]{defaultWidth, defaultHeight}; + } + String normalized = text.toLowerCase().replace('×', 'x'); + String[] parts = normalized.split("x"); + if (parts.length != 2) { + return new int[]{defaultWidth, defaultHeight}; + } + try { + int width = Math.max(20, Math.min(4000, Integer.parseInt(parts[0].trim()))); + int height = Math.max(20, Math.min(4000, Integer.parseInt(parts[1].trim()))); + return new int[]{width, height}; + } catch (NumberFormatException e) { + return new int[]{defaultWidth, defaultHeight}; + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/BarcodeService.java b/src/main/java/de/hehl/printservice/service/BarcodeService.java new file mode 100644 index 0000000..742159e --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/BarcodeService.java @@ -0,0 +1,94 @@ +package de.hehl.printservice.service; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import de.hehl.printservice.model.BarcodeFormatInfo; + +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Locale; + +public class BarcodeService { + public String pngDataUri(String formatName, String value, int width, int height) { + byte[] bytes = pngBytes(formatName, value, width, height); + if (bytes.length == 0) { + return ""; + } + return "data:image/png;base64," + Base64.getEncoder().encodeToString(bytes); + } + + public byte[] pngBytes(String formatName, String value, int width, int height) { + if (value == null || value.trim().isEmpty()) { + return new byte[0]; + } + try { + BarcodeFormat format = BarcodeFormat.valueOf(normalizeFormat(formatName)); + int safeWidth = Math.max(20, Math.min(4000, width)); + int safeHeight = Math.max(20, Math.min(4000, height)); + BitMatrix matrix = new MultiFormatWriter().encode(value, format, safeWidth, safeHeight); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + MatrixToImageWriter.writeToStream(matrix, "PNG", out); + return out.toByteArray(); + } catch (Exception e) { + throw new IllegalArgumentException("Cannot generate barcode/QR code: " + e.getMessage(), e); + } + } + + public List supportedFormats() { + List list = new ArrayList<>(); + list.add(new BarcodeFormatInfo("CODE_128", "1D", "Sehr guter Standard für Seriennummern, IDs und interne Labels.")); + list.add(new BarcodeFormatInfo("CODE_39", "1D", "Einfacher Industriebarcode, weniger kompakt als Code 128.")); + list.add(new BarcodeFormatInfo("CODE_93", "1D", "Kompakter als Code 39, industrieller 1D-Code.")); + list.add(new BarcodeFormatInfo("EAN_13", "1D", "Handelsartikel, genau 13 Ziffern.")); + list.add(new BarcodeFormatInfo("EAN_8", "1D", "Handelsartikel, genau 8 Ziffern.")); + list.add(new BarcodeFormatInfo("UPC_A", "1D", "US-Handelsartikel, 12 Ziffern.")); + list.add(new BarcodeFormatInfo("UPC_E", "1D", "Kompakte UPC-Variante.")); + list.add(new BarcodeFormatInfo("ITF", "1D", "Interleaved 2 of 5, nur Ziffern, oft Logistik.")); + list.add(new BarcodeFormatInfo("CODABAR", "1D", "Älterer Code, z.B. Labor/Logistik.")); + list.add(new BarcodeFormatInfo("QR_CODE", "2D", "QR-Code, ideal für URL, JSON, lange IDs.")); + list.add(new BarcodeFormatInfo("DATA_MATRIX", "2D", "Sehr kompakt, gut für kleine Etiketten und Industrie.")); + list.add(new BarcodeFormatInfo("PDF_417", "2D", "Gestapelter 2D-Code für größere Datenmengen.")); + list.add(new BarcodeFormatInfo("AZTEC", "2D", "2D-Code, robust, keine Ruhezone zwingend nötig.")); + return list; + } + + public String normalizeFormat(String formatName) { + String value = formatName == null || formatName.trim().isEmpty() ? "QR_CODE" : formatName.trim(); + value = value.replace('-', '_').replace(' ', '_').toUpperCase(Locale.ROOT); + if ("QR".equals(value) || "QRCODE".equals(value)) { + return "QR_CODE"; + } + if ("CODE128".equals(value)) { + return "CODE_128"; + } + if ("CODE39".equals(value)) { + return "CODE_39"; + } + if ("CODE93".equals(value)) { + return "CODE_93"; + } + if ("DATAMATRIX".equals(value)) { + return "DATA_MATRIX"; + } + if ("PDF417".equals(value)) { + return "PDF_417"; + } + if ("EAN13".equals(value)) { + return "EAN_13"; + } + if ("EAN8".equals(value)) { + return "EAN_8"; + } + if ("UPCA".equals(value)) { + return "UPC_A"; + } + if ("UPCE".equals(value)) { + return "UPC_E"; + } + return value; + } +} diff --git a/src/main/java/de/hehl/printservice/service/ConfigPaths.java b/src/main/java/de/hehl/printservice/service/ConfigPaths.java new file mode 100644 index 0000000..105c788 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/ConfigPaths.java @@ -0,0 +1,64 @@ +package de.hehl.printservice.service; + +import java.nio.file.Path; +import java.nio.file.Paths; + +public final class ConfigPaths { + public static final String CONFIG_DIR_PROPERTY = "printservice.config.dir"; + + private ConfigPaths() { + } + + public static Path baseDir() { + String configured = System.getProperty(CONFIG_DIR_PROPERTY); + if (configured != null && !configured.trim().isEmpty()) { + return Paths.get(configured.trim()).toAbsolutePath().normalize(); + } + return Paths.get(System.getProperty("user.home"), ".printservice").toAbsolutePath().normalize(); + } + + public static Path printersFile() { + return baseDir().resolve("printers.json"); + } + + public static Path templatesDir() { + return baseDir().resolve("templates"); + } + + public static Path templateDir(String templateName) { + String safe = NameValidator.requireName(templateName, "templateName"); + return templatesDir().resolve(safe).normalize(); + } + + public static Path spoolDir() { + return baseDir().resolve("spool"); + } + + public static Path archiveDir() { + return baseDir().resolve("archive"); + } + + public static Path previewDir() { + return baseDir().resolve("preview"); + } + + public static Path logsDir() { + return baseDir().resolve("logs"); + } + + public static Path queueDir() { + return baseDir().resolve("queue"); + } + + public static Path printJobsFile() { + return queueDir().resolve("print-jobs.json"); + } + + public static Path queueSettingsFile() { + return queueDir().resolve("queue-settings.json"); + } + + public static Path authFile() { + return baseDir().resolve("auth.json"); + } +} diff --git a/src/main/java/de/hehl/printservice/service/Docx4jFoConverter.java b/src/main/java/de/hehl/printservice/service/Docx4jFoConverter.java new file mode 100644 index 0000000..605e8fc --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/Docx4jFoConverter.java @@ -0,0 +1,71 @@ +package de.hehl.printservice.service; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.Method; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * DOCX -> PDF converter using docx4j-export-fo via reflection. + * + * Reflection is used deliberately so the application can still start and report + * a clear diagnostic if docx4j-export-fo is removed from the runtime classpath. + */ +public class Docx4jFoConverter { + + public byte[] docxToPdf(byte[] docxBytes) { + if (docxBytes == null || docxBytes.length == 0) { + throw new IllegalArgumentException("DOCX bytes are required for DOCX4J_FO conversion"); + } + try (ByteArrayInputStream input = new ByteArrayInputStream(docxBytes); + ByteArrayOutputStream output = new ByteArrayOutputStream(Math.max(8192, docxBytes.length))) { + + Class packageClass = Class.forName("org.docx4j.openpackaging.packages.WordprocessingMLPackage"); + Method load = packageClass.getMethod("load", java.io.InputStream.class); + Object wordPackage = load.invoke(null, input); + + Class docx4jClass = Class.forName("org.docx4j.Docx4J"); + + // Preferred/simple API. It uses export-FO automatically when the FO module is on the classpath. + try { + Method toPdf = docx4jClass.getMethod("toPDF", packageClass, java.io.OutputStream.class); + toPdf.invoke(null, wordPackage, output); + return output.toByteArray(); + } catch (NoSuchMethodException noSimpleApi) { + // Fallback for API variants exposing Object signature. + Method toPdf = docx4jClass.getMethod("toPDF", Object.class, java.io.OutputStream.class); + toPdf.invoke(null, wordPackage, output); + return output.toByteArray(); + } + } catch (ClassNotFoundException e) { + throw new IllegalStateException("docx4j-export-fo is not available on the classpath. Check pom.xml/shaded jar dependencies.", e); + } catch (Exception e) { + Throwable cause = e.getCause() == null ? e : e.getCause(); + throw new IllegalStateException("DOCX4J_FO conversion failed: " + cause.getMessage(), cause); + } + } + + public Map status() { + Map out = new LinkedHashMap<>(); + out.put("converter", "DOCX4J_FO"); + out.put("available", isAvailable()); + out.put("externalInstallationRequired", false); + out.put("description", "DOCX -> XSL-FO -> PDF via docx4j-export-fo / Apache FOP. Good for simple DOCX templates; validate complex layouts."); + out.put("recommendedFor", java.util.List.of("simple DOCX", "server-only conversion", "no LibreOffice allowed")); + out.put("notRecommendedFor", java.util.List.of("complex Word layouts", "exact Word fidelity", "heavy shapes/text boxes/smart art", "critical page-break fidelity")); + return out; + } + + public boolean isAvailable() { + try { + Class.forName("org.docx4j.Docx4J"); + Class.forName("org.docx4j.openpackaging.packages.WordprocessingMLPackage"); + // The actual export-FO classes vary slightly across docx4j minor versions; + // availability of Docx4J plus the shaded Maven dependency is enough for startup diagnostics. + return true; + } catch (Throwable t) { + return false; + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/DocxTemplateRenderer.java b/src/main/java/de/hehl/printservice/service/DocxTemplateRenderer.java new file mode 100644 index 0000000..ddd104a --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/DocxTemplateRenderer.java @@ -0,0 +1,127 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.TemplateInfo; +import org.apache.poi.util.Units; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFFooter; +import org.apache.poi.xwpf.usermodel.XWPFHeader; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.util.Base64; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; + +public class DocxTemplateRenderer { + private final TemplateRenderer textRenderer = new TemplateRenderer(); + private final BarcodeService barcodeService = new BarcodeService(); + + public byte[] render(TemplateInfo template, Map data) { + if (template == null || template.contentBase64 == null || template.contentBase64.trim().isEmpty()) { + throw new IllegalArgumentException("DOCX template has no binary contentBase64"); + } + try { + byte[] input = Base64.getDecoder().decode(stripDataUri(template.contentBase64)); + try (XWPFDocument document = new XWPFDocument(new ByteArrayInputStream(input)); + ByteArrayOutputStream out = new ByteArrayOutputStream(input.length + 8192)) { + processParagraphs(document.getParagraphs(), data); + processTables(document.getTables(), data); + for (XWPFHeader header : document.getHeaderList()) { + processParagraphs(header.getParagraphs(), data); + processTables(header.getTables(), data); + } + for (XWPFFooter footer : document.getFooterList()) { + processParagraphs(footer.getParagraphs(), data); + processTables(footer.getTables(), data); + } + document.write(out); + return out.toByteArray(); + } + } catch (Exception e) { + throw new IllegalStateException("DOCX render failed: " + e.getMessage(), e); + } + } + + private void processTables(List tables, Map data) { + for (XWPFTable table : tables) { + for (XWPFTableRow row : table.getRows()) { + for (XWPFTableCell cell : row.getTableCells()) { + processParagraphs(cell.getParagraphs(), data); + processTables(cell.getTables(), data); + } + } + } + } + + private void processParagraphs(List paragraphs, Map data) { + for (XWPFParagraph paragraph : paragraphs) { + processParagraph(paragraph, data); + } + } + + private void processParagraph(XWPFParagraph paragraph, Map data) { + String text = paragraph.getText(); + if (text == null || !text.contains("{{")) { + return; + } + + Matcher matcher = TemplateRenderer.PLACEHOLDER.matcher(text.trim()); + if (matcher.matches() && isImageExpression(matcher.group(1))) { + removeRuns(paragraph); + insertBarcodeRun(paragraph, matcher.group(1).trim(), data); + return; + } + + String rendered = textRenderer.render(text, data); + replaceParagraphText(paragraph, rendered); + } + + private boolean isImageExpression(String expression) { + if (expression == null) { + return false; + } + String e = expression.trim().toLowerCase(); + return e.startsWith("barcode:") || e.startsWith("qr:") || e.startsWith("qrcode:"); + } + + private void insertBarcodeRun(XWPFParagraph paragraph, String expression, Map data) { + BarcodeExpression parsed = BarcodeExpression.parse(expression, "CODE_128", expression.startsWith("barcode:") ? 360 : 180, expression.startsWith("barcode:") ? 90 : 180); + byte[] image = barcodeService.pngBytes(parsed.format, parsed.resolveValue(data), parsed.width, parsed.height); + if (image.length == 0) { + return; + } + try { + XWPFRun run = paragraph.createRun(); + run.addPicture(new ByteArrayInputStream(image), XWPFDocument.PICTURE_TYPE_PNG, parsed.format.toLowerCase() + ".png", Units.toEMU(parsed.width * 0.75), Units.toEMU(parsed.height * 0.75)); + } catch (Exception e) { + throw new IllegalStateException("Cannot insert barcode into DOCX: " + e.getMessage(), e); + } + } + + private void replaceParagraphText(XWPFParagraph paragraph, String text) { + removeRuns(paragraph); + XWPFRun run = paragraph.createRun(); + run.setText(text == null ? "" : text, 0); + } + + private void removeRuns(XWPFParagraph paragraph) { + for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) { + paragraph.removeRun(i); + } + } + + private String stripDataUri(String value) { + String text = value == null ? "" : value.trim(); + int comma = text.indexOf(','); + if (text.startsWith("data:") && comma >= 0) { + return text.substring(comma + 1); + } + return text.replaceAll("\\s+", ""); + } +} diff --git a/src/main/java/de/hehl/printservice/service/HtmlDocumentNormalizer.java b/src/main/java/de/hehl/printservice/service/HtmlDocumentNormalizer.java new file mode 100644 index 0000000..a904be9 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/HtmlDocumentNormalizer.java @@ -0,0 +1,131 @@ +package de.hehl.printservice.service; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Entities; + +import java.nio.charset.StandardCharsets; +import java.util.Locale; + +/** + * Normalizes user-maintained HTML templates before they are passed to openhtmltopdf. + * + * openhtmltopdf internally uses an XML parser. A normal browser accepts incomplete HTML + * such as
, , missing / or a BOM before the document. The PDF renderer + * is stricter and expects well-formed XHTML. This class converts practical browser HTML + * into XHTML and turns common template mix-ups into clear validation messages. + */ +public class HtmlDocumentNormalizer { + public NormalizedHtml normalizeForPdf(String html, String baseUri) { + String input = html == null ? "" : html; + String cleaned = stripBomAndControlCharacters(input); + cleaned = stripMarkdownFence(cleaned); + + String trimmed = cleaned.stripLeading(); + validateNotWrongPayload(trimmed); + + if (trimmed.isEmpty()) { + cleaned = ""; + } else if (!trimmed.startsWith("<")) { + cleaned = "" + escapeText(cleaned) + ""; + } + + Document document = Jsoup.parse(cleaned, baseUri == null ? "" : baseUri); + document.outputSettings() + .syntax(Document.OutputSettings.Syntax.xml) + .escapeMode(Entities.EscapeMode.xhtml) + .charset(StandardCharsets.UTF_8) + .prettyPrint(false); + + if (document.selectFirst("meta[charset]") == null) { + document.head().prependElement("meta").attr("charset", "UTF-8"); + } + + String xhtml = document.html(); + return new NormalizedHtml(xhtml, preview(input), preview(xhtml)); + } + + public String diagnosticPreview(String html) { + return preview(html == null ? "" : html); + } + + private String stripBomAndControlCharacters(String value) { + String out = value; + if (!out.isEmpty() && out.charAt(0) == '\uFEFF') { + out = out.substring(1); + } + // Remove NUL characters that sometimes appear after faulty file uploads or encoding conversions. + out = out.replace("\u0000", ""); + return out; + } + + private String stripMarkdownFence(String value) { + String trimmed = value.strip(); + if (!trimmed.startsWith("```")) { + return value; + } + String[] lines = trimmed.split("\\R", -1); + if (lines.length < 3 || !lines[lines.length - 1].trim().equals("```")) { + return value; + } + StringBuilder out = new StringBuilder(); + for (int i = 1; i < lines.length - 1; i++) { + if (i > 1) out.append('\n'); + out.append(lines[i]); + } + return out.toString(); + } + + private void validateNotWrongPayload(String trimmed) { + if (trimmed.isEmpty()) { + return; + } + char first = trimmed.charAt(0); + if (first == '{' || first == '[') { + throw new IllegalArgumentException("HTML template content starts with JSON. Check the template: document.html must contain HTML, while print-request.json/sample-data.json must contain JSON."); + } + String lower = trimmed.length() > 100 ? trimmed.substring(0, 100).toLowerCase(Locale.ROOT) : trimmed.toLowerCase(Locale.ROOT); + if (lower.startsWith("%pdf")) { + throw new IllegalArgumentException("HTML template content starts with a PDF header. Use templateType=PDF_TEMPLATE/renderMode=PDF_TEMPLATE for PDF templates, not renderMode=PDF."); + } + } + + private String escapeText(String value) { + StringBuilder out = new StringBuilder(value.length()); + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '&': out.append("&"); break; + case '<': out.append("<"); break; + case '>': out.append(">"); break; + case '"': out.append("""); break; + case '\'': out.append("'"); break; + default: out.append(c); + } + } + return out.toString(); + } + + private String preview(String value) { + if (value == null) { + return ""; + } + String compact = value.replace("\r", "\\r").replace("\n", "\\n").replace("\t", "\\t"); + if (compact.length() > 240) { + compact = compact.substring(0, 240) + "..."; + } + return compact; + } + + public static class NormalizedHtml { + public final String xhtml; + public final String inputPreview; + public final String xhtmlPreview; + + public NormalizedHtml(String xhtml, String inputPreview, String xhtmlPreview) { + this.xhtml = xhtml; + this.inputPreview = inputPreview; + this.xhtmlPreview = xhtmlPreview; + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/JsonFiles.java b/src/main/java/de/hehl/printservice/service/JsonFiles.java new file mode 100644 index 0000000..846c149 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/JsonFiles.java @@ -0,0 +1,85 @@ +package de.hehl.printservice.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; + +public final class JsonFiles { + public static final ObjectMapper MAPPER = createMapper(); + + private JsonFiles() { + } + + private static ObjectMapper createMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.enable(SerializationFeature.INDENT_OUTPUT); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return mapper; + } + + public static T read(Path path, Type type, T defaultValue) { + if (!Files.exists(path)) { + return defaultValue; + } + try { + byte[] bytes = Files.readAllBytes(path); + if (bytes.length == 0) { + return defaultValue; + } + T value = MAPPER.readValue(bytes, MAPPER.getTypeFactory().constructType(type)); + return value == null ? defaultValue : value; + } catch (Exception e) { + throw new IllegalStateException("Cannot read JSON file " + path + ": " + e.getMessage(), e); + } + } + + public static void write(Path path, Object value) { + try { + Files.createDirectories(path.getParent()); + Path tmp = path.resolveSibling(path.getFileName().toString() + ".tmp"); + byte[] bytes = MAPPER.writeValueAsBytes(value); + Files.write(tmp, bytes); + Files.move(tmp, path, java.nio.file.StandardCopyOption.REPLACE_EXISTING, java.nio.file.StandardCopyOption.ATOMIC_MOVE); + } catch (IOException e) { + throw new IllegalStateException("Cannot write JSON file " + path + ": " + e.getMessage(), e); + } + } + + public static T fromJson(String json, Class type) { + try { + return MAPPER.readValue(json == null ? "{}" : json, type); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException("Invalid JSON: " + e.getOriginalMessage(), e); + } + } + + public static String toJson(Object value) { + try { + return MAPPER.writeValueAsString(value); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Cannot serialize JSON: " + e.getOriginalMessage(), e); + } + } + + public static byte[] toJsonBytes(Object value) { + try { + return MAPPER.writeValueAsBytes(value); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Cannot serialize JSON: " + e.getOriginalMessage(), e); + } + } + + public static String readUtf8(Path path) throws IOException { + return new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/de/hehl/printservice/service/LibreOfficeConverter.java b/src/main/java/de/hehl/printservice/service/LibreOfficeConverter.java new file mode 100644 index 0000000..ce94338 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/LibreOfficeConverter.java @@ -0,0 +1,70 @@ +package de.hehl.printservice.service; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.TimeUnit; + +public class LibreOfficeConverter { + public byte[] docxToPdf(byte[] docxBytes) { + String executable = System.getProperty("printservice.libreoffice.path", "soffice"); + long timeoutSeconds = Long.getLong("printservice.libreoffice.timeoutSeconds", 45L); + try { + Path tempDir = Files.createTempDirectory("printservice-docx-"); + Path input = tempDir.resolve("input.docx"); + Files.write(input, docxBytes); + + List command = new ArrayList<>(); + command.add(executable); + command.add("--headless"); + command.add("--nologo"); + command.add("--nofirststartwizard"); + command.add("--convert-to"); + command.add("pdf"); + command.add("--outdir"); + command.add(tempDir.toString()); + command.add(input.toString()); + + Process process = new ProcessBuilder(command).redirectErrorStream(true).start(); + boolean done = process.waitFor(timeoutSeconds, TimeUnit.SECONDS); + if (!done) { + process.destroyForcibly(); + throw new IllegalStateException("LibreOffice conversion timeout after " + Duration.ofSeconds(timeoutSeconds)); + } + if (process.exitValue() != 0) { + throw new IllegalStateException("LibreOffice conversion failed with exit code " + process.exitValue()); + } + + Path pdf = tempDir.resolve("input.pdf"); + if (!Files.exists(pdf)) { + // Some LibreOffice versions preserve a differently cased file name. + pdf = Files.list(tempDir) + .filter(p -> p.getFileName().toString().toLowerCase(Locale.ROOT).endsWith(".pdf")) + .findFirst() + .orElseThrow(() -> new IllegalStateException("LibreOffice did not create a PDF file")); + } + byte[] result = Files.readAllBytes(pdf); + cleanup(tempDir); + return result; + } catch (IOException | InterruptedException e) { + Thread.currentThread().interrupt(); + throw new IllegalStateException("DOCX to PDF conversion failed: " + e.getMessage(), e); + } + } + + private void cleanup(Path dir) { + try { + if (dir == null || !Files.exists(dir)) return; + Files.walk(dir) + .sorted((a, b) -> b.compareTo(a)) + .forEach(p -> { + try { Files.deleteIfExists(p); } catch (IOException ignore) {} + }); + } catch (IOException ignore) { + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/NameValidator.java b/src/main/java/de/hehl/printservice/service/NameValidator.java new file mode 100644 index 0000000..224c487 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/NameValidator.java @@ -0,0 +1,26 @@ +package de.hehl.printservice.service; + +public final class NameValidator { + private static final String NAME_PATTERN = "[A-Za-z0-9._-]{1,80}"; + + private NameValidator() { + } + + public static String requireName(String name, String fieldName) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException(fieldName + " is required"); + } + String normalized = name.trim(); + if (!normalized.matches(NAME_PATTERN)) { + throw new IllegalArgumentException(fieldName + " may only contain A-Z, a-z, 0-9, dot, underscore and dash, max 80 chars"); + } + return normalized; + } + + public static String requireNotBlank(String value, String fieldName) { + if (value == null || value.trim().isEmpty()) { + throw new IllegalArgumentException(fieldName + " is required"); + } + return value.trim(); + } +} diff --git a/src/main/java/de/hehl/printservice/service/PdfDocumentService.java b/src/main/java/de/hehl/printservice/service/PdfDocumentService.java new file mode 100644 index 0000000..66d661c --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PdfDocumentService.java @@ -0,0 +1,67 @@ +package de.hehl.printservice.service; + +import com.openhtmltopdf.pdfboxout.PdfRendererBuilder; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.printing.Orientation; +import org.apache.pdfbox.printing.PDFPageable; + +import javax.print.PrintService; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Copies; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.file.Path; + +public class PdfDocumentService { + private final HtmlDocumentNormalizer htmlNormalizer = new HtmlDocumentNormalizer(); + + public byte[] htmlToPdf(String html, Path baseDirectory) { + String baseUri = baseDirectory == null ? null : baseDirectory.toUri().toString(); + HtmlDocumentNormalizer.NormalizedHtml normalized; + try { + normalized = htmlNormalizer.normalizeForPdf(html, baseUri); + } catch (RuntimeException e) { + throw new IllegalStateException("HTML to PDF failed before rendering: " + e.getMessage() + + " | htmlPreview=" + htmlNormalizer.diagnosticPreview(html), e); + } + + try (ByteArrayOutputStream out = new ByteArrayOutputStream(Math.max(8192, normalized.xhtml.length() * 2))) { + PdfRendererBuilder builder = new PdfRendererBuilder(); + builder.useFastMode(); + builder.withHtmlContent(normalized.xhtml, baseUri); + builder.toStream(out); + builder.run(); + return out.toByteArray(); + } catch (Exception e) { + throw new IllegalStateException("HTML to PDF failed: " + e.getMessage() + + " | htmlPreview=" + normalized.inputPreview + + " | xhtmlPreview=" + normalized.xhtmlPreview, e); + } + } + + public void printPdf(byte[] pdfBytes, PrintService printService, int copies, int dpi) { + if (pdfBytes == null || pdfBytes.length == 0) { + throw new IllegalArgumentException("PDF content is empty"); + } + if (printService == null) { + throw new IllegalArgumentException("printService is required"); + } + int safeCopies = Math.max(1, Math.min(99, copies)); + int safeDpi = Math.max(0, Math.min(1200, dpi)); + try (PDDocument document = Loader.loadPDF(pdfBytes)) { + PrinterJob job = PrinterJob.getPrinterJob(); + job.setPrintService(printService); + job.setPageable(new PDFPageable(document, Orientation.AUTO, false, safeDpi)); + + PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); + attributes.add(new Copies(safeCopies)); + job.print(attributes); + } catch (IOException | PrinterException e) { + throw new IllegalStateException("PDF print failed: " + e.getMessage(), e); + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/PdfTemplateRenderer.java b/src/main/java/de/hehl/printservice/service/PdfTemplateRenderer.java new file mode 100644 index 0000000..1d5472c --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PdfTemplateRenderer.java @@ -0,0 +1,593 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.PdfTableColumn; +import de.hehl.printservice.model.PdfTemplateField; +import de.hehl.printservice.model.TemplateInfo; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.font.Standard14Fonts; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; + +import java.awt.Color; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +public class PdfTemplateRenderer { + private final TemplateRenderer templateRenderer = new TemplateRenderer(); + private final BarcodeService barcodeService = new BarcodeService(); + + public byte[] render(TemplateInfo template, Map data) { + if (template == null) { + throw new IllegalArgumentException("template is required"); + } + if (template.contentBase64 == null || template.contentBase64.trim().isEmpty()) { + throw new IllegalArgumentException("PDF template requires contentBase64"); + } + byte[] sourcePdf = Base64.getDecoder().decode(normalizeBase64(template.contentBase64)); + try (PDDocument document = Loader.loadPDF(sourcePdf); ByteArrayOutputStream out = new ByteArrayOutputStream(sourcePdf.length + 16384)) { + List fields = template.pdfFields == null ? new ArrayList<>() : template.pdfFields; + for (PdfTemplateField field : fields) { + if (field == null || field.name == null || field.name.trim().isEmpty()) { + continue; + } + int pageIndex = normalizePage(field.page) - 1; + if (pageIndex < 0 || pageIndex >= document.getNumberOfPages()) { + throw new IllegalArgumentException("PDF field " + field.name + " refers to missing page " + field.page); + } + PDPage page = document.getPage(pageIndex); + String type = normalizeType(field.type); + if ("TEXT".equals(type)) { + drawText(document, page, template, field, data); + } else if ("BARCODE".equals(type) || "QR_CODE".equals(type) || "DATA_MATRIX".equals(type)) { + drawBarcode(document, page, template, field, data, type); + } else if ("TABLE".equals(type)) { + drawTable(document, page, template, field, data); + } else { + throw new IllegalArgumentException("Unsupported PDF field type " + field.type + " for field " + field.name); + } + } + document.save(out); + return out.toByteArray(); + } catch (IOException e) { + throw new IllegalStateException("PDF template rendering failed: " + e.getMessage(), e); + } + } + + private void drawText(PDDocument document, PDPage page, TemplateInfo template, PdfTemplateField field, Map data) throws IOException { + PDFont font = font(field); + float fontSize = toFloat(field.fontSize, 10f); + float lineHeight = toFloat(field.lineHeight, Math.max(fontSize * 1.2f, fontSize + 2f)); + FieldBox box = box(page, template, field, fontSize, lineHeight); + String text = resolveValue(field, data); + if (text == null) { + text = ""; + } + List lines = Boolean.TRUE.equals(field.multiline) && field.width != null + ? wrap(text, font, fontSize, box.width) + : splitLines(text); + + try (PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { + stream.setNonStrokingColor(parseColor(field.color)); + stream.setFont(font, fontSize); + float y = box.y; + for (String line : lines) { + float x = alignedX(line, font, fontSize, box, field.align); + stream.beginText(); + stream.newLineAtOffset(x, y); + stream.showText(safePdfText(line)); + stream.endText(); + y -= lineHeight; + if (field.height != null && y < box.y - box.height) { + break; + } + } + } + } + + private void drawBarcode(PDDocument document, PDPage page, TemplateInfo template, PdfTemplateField field, Map data, String fieldType) throws IOException { + FieldBox box = box(page, template, field, 10f, 12f); + String value = resolveValue(field, data); + if (value == null || value.trim().isEmpty()) { + return; + } + String barcodeType = barcodeType(fieldType, field.barcodeType); + int pixelWidth = Math.max(20, Math.round(box.width * 4)); + int pixelHeight = Math.max(20, Math.round(box.height * 4)); + byte[] png = barcodeService.pngBytes(barcodeType, value, pixelWidth, pixelHeight); + if (png.length == 0) { + return; + } + PDImageXObject image = PDImageXObject.createFromByteArray(document, png, field.name + ".png"); + try (PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { + stream.drawImage(image, box.x, box.y, box.width, box.height); + } + } + + private void drawTable(PDDocument document, PDPage firstPage, TemplateInfo template, PdfTemplateField field, Map data) throws IOException { + List rows = tableRows(field, data); + if (rows.isEmpty()) { + return; + } + List columns = field.columns == null ? Collections.emptyList() : field.columns; + if (columns.isEmpty()) { + throw new IllegalArgumentException("PDF TABLE field " + field.name + " requires columns"); + } + + FieldBox box = box(firstPage, template, field, 8f, 10f); + String unit = firstNotBlank(field.unit, template.coordinateUnit, "pt"); + float defaultFontSize = toFloat(field.fontSize, 8f); + float rowHeight = convert(toFloat(field.rowHeight, 7.5f), unit); + float headerHeight = convert(toFloat(field.headerHeight, rowHeight), unit); + float padding = convert(toFloat(field.padding, 1.5f), unit); + boolean drawHeader = !Boolean.FALSE.equals(field.drawHeader); + boolean border = !Boolean.FALSE.equals(field.border); + boolean repeatHeader = !Boolean.FALSE.equals(field.repeatHeader); + String overflow = firstNotBlank(field.overflow, "CUT").toUpperCase(Locale.ROOT); + float availableForRows = Math.max(0f, box.height - (drawHeader ? headerHeight : 0f)); + int calculatedRowsPerPage = rowHeight <= 0f ? 1 : Math.max(1, (int) Math.floor(availableForRows / rowHeight)); + int rowsPerPage = field.maxRows == null || field.maxRows < 1 ? calculatedRowsPerPage : Math.min(field.maxRows, calculatedRowsPerPage); + if (rowsPerPage < 1) { + rowsPerPage = 1; + } + + float[] columnWidths = columnWidths(columns, box.width, unit); + if ("ERROR".equals(overflow) && rows.size() > rowsPerPage) { + throw new IllegalArgumentException("PDF TABLE field " + field.name + " has " + rows.size() + " rows but only " + rowsPerPage + " fit into the configured table area"); + } + if ("SHRINK".equals(overflow) && rows.size() > rowsPerPage) { + rowsPerPage = rows.size(); + rowHeight = Math.max(3.5f, availableForRows / Math.max(1, rows.size())); + defaultFontSize = Math.min(defaultFontSize, Math.max(3.0f, rowHeight - (2f * padding))); + } + + int rowIndex = 0; + PDPage page = firstPage; + boolean firstPageRendered = true; + while (rowIndex < rows.size()) { + if (rowIndex > 0) { + if (!"NEW_PAGE".equals(overflow)) { + break; + } + page = new PDPage(firstPage.getMediaBox()); + page.setResources(firstPage.getResources()); + document.addPage(page); + firstPageRendered = false; + } + FieldBox currentBox = firstPageRendered ? box : box(page, template, field, 8f, 10f); + int count = Math.min(rowsPerPage, rows.size() - rowIndex); + drawTablePage(document, page, field, data, rows, rowIndex, count, columns, columnWidths, currentBox, + defaultFontSize, rowHeight, headerHeight, padding, drawHeader && (rowIndex == 0 || repeatHeader), border); + rowIndex += count; + } + } + + private void drawTablePage(PDDocument document, + PDPage page, + PdfTemplateField field, + Map rootData, + List rows, + int startIndex, + int count, + List columns, + float[] columnWidths, + FieldBox box, + float defaultFontSize, + float rowHeight, + float headerHeight, + float padding, + boolean drawHeader, + boolean border) throws IOException { + float tableTop = box.y + box.height; + float y = tableTop; + try (PDPageContentStream stream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true)) { + stream.setStrokingColor(parseColor(field.gridColor)); + if (drawHeader) { + y -= headerHeight; + stream.setNonStrokingColor(parseColor(field.headerBackground)); + stream.addRect(box.x, y, tableWidth(columnWidths), headerHeight); + stream.fill(); + stream.setStrokingColor(parseColor(field.gridColor)); + drawRowBorder(stream, box.x, y, columnWidths, headerHeight, border); + float x = box.x; + for (int col = 0; col < columns.size(); col++) { + PdfTableColumn column = columns.get(col); + String title = firstNotBlank(column.title, column.field, ""); + drawCellText(stream, title, true, defaultFontSize, x + padding, y + padding, columnWidths[col] - 2f * padding, headerHeight - 2f * padding, firstNotBlank(column.align, "LEFT"), parseColor(field.headerColor)); + x += columnWidths[col]; + } + } + + for (int i = 0; i < count; i++) { + Object row = rows.get(startIndex + i); + Map scope = rowScope(rootData, row, startIndex + i); + y -= rowHeight; + drawRowBorder(stream, box.x, y, columnWidths, rowHeight, border); + float x = box.x; + for (int col = 0; col < columns.size(); col++) { + PdfTableColumn column = columns.get(col); + String type = normalizeType(column.type); + if ("BARCODE".equals(type) || "QR_CODE".equals(type) || "DATA_MATRIX".equals(type)) { + drawTableBarcode(document, stream, column, scope, x + padding, y + padding, columnWidths[col] - 2f * padding, rowHeight - 2f * padding, type, field.name + "_" + (startIndex + i) + "_" + col); + } else { + float fontSize = toFloat(column.fontSize, defaultFontSize); + String text = resolveColumnValue(column, scope); + drawCellText(stream, text, Boolean.TRUE.equals(column.bold), fontSize, x + padding, y + padding, columnWidths[col] - 2f * padding, rowHeight - 2f * padding, firstNotBlank(column.align, "LEFT"), parseColor(firstNotBlank(column.color, field.color, "#000000"))); + } + x += columnWidths[col]; + } + } + } + } + + private void drawRowBorder(PDPageContentStream stream, float x, float y, float[] columnWidths, float height, boolean border) throws IOException { + if (!border) { + return; + } + float tableWidth = tableWidth(columnWidths); + stream.addRect(x, y, tableWidth, height); + stream.stroke(); + float currentX = x; + for (int i = 0; i < columnWidths.length - 1; i++) { + currentX += columnWidths[i]; + stream.moveTo(currentX, y); + stream.lineTo(currentX, y + height); + stream.stroke(); + } + } + + private void drawCellText(PDPageContentStream stream, + String value, + boolean bold, + float fontSize, + float x, + float y, + float width, + float height, + String align, + Color color) throws IOException { + PDFont font = new PDType1Font(bold ? Standard14Fonts.FontName.HELVETICA_BOLD : Standard14Fonts.FontName.HELVETICA); + String text = value == null ? "" : value; + if (height <= 0f || width <= 0f) { + return; + } + List lines = wrap(text, font, fontSize, width); + float lineHeight = Math.max(fontSize * 1.15f, fontSize + 1f); + float baselineY = y + Math.max(fontSize, height - fontSize); + stream.setNonStrokingColor(color == null ? Color.BLACK : color); + stream.setFont(font, fontSize); + for (String line : lines) { + if (baselineY < y) { + break; + } + FieldBox cellBox = new FieldBox(); + cellBox.x = x; + cellBox.y = baselineY; + cellBox.width = width; + cellBox.height = height; + float tx = alignedX(line, font, fontSize, cellBox, align); + stream.beginText(); + stream.newLineAtOffset(tx, baselineY); + stream.showText(safePdfText(line)); + stream.endText(); + baselineY -= lineHeight; + } + } + + private void drawTableBarcode(PDDocument document, + PDPageContentStream stream, + PdfTableColumn column, + Map scope, + float x, + float y, + float width, + float height, + String fieldType, + String imageName) throws IOException { + String value = resolveColumnValue(column, scope); + if (value == null || value.trim().isEmpty() || width <= 0f || height <= 0f) { + return; + } + String barcodeType = barcodeType(fieldType, column.barcodeType); + float requestedHeight = column.height == null ? height : Math.min(height, Math.max(1f, column.height.floatValue())); + float drawY = y + Math.max(0f, (height - requestedHeight) / 2f); + int pixelWidth = Math.max(20, Math.round(width * 4)); + int pixelHeight = Math.max(20, Math.round(requestedHeight * 4)); + byte[] png = barcodeService.pngBytes(barcodeType, value, pixelWidth, pixelHeight); + if (png.length == 0) { + return; + } + PDImageXObject image = PDImageXObject.createFromByteArray(document, png, imageName + ".png"); + stream.drawImage(image, x, drawY, width, requestedHeight); + } + + private List tableRows(PdfTemplateField field, Map data) { + String source = firstNotBlank(field.source, field.name); + Object value = templateRenderer.findValue(data, source); + if (value instanceof List) { + return (List) value; + } + if (value instanceof Map) { + List one = new ArrayList<>(); + one.add(value); + return one; + } + if (value == null) { + return Collections.emptyList(); + } + throw new IllegalArgumentException("PDF TABLE field " + field.name + " source " + source + " must be a JSON array"); + } + + @SuppressWarnings("unchecked") + private Map rowScope(Map rootData, Object row, int zeroBasedIndex) { + Map scope = new LinkedHashMap<>(); + if (rootData != null) { + scope.putAll(rootData); + } + scope.put("row", row); + scope.put("rowIndex", zeroBasedIndex); + scope.put("rowNumber", zeroBasedIndex + 1); + if (row instanceof Map) { + scope.putAll((Map) row); + } + return scope; + } + + private String resolveColumnValue(PdfTableColumn column, Map scope) { + String value = column.value; + if (value != null && value.contains("{{")) { + return templateRenderer.render(value, scope); + } + String path = firstNotBlank(value, column.field); + if (path == null) { + return ""; + } + Object fromData = templateRenderer.findValue(scope, path); + return fromData == null ? path : String.valueOf(fromData); + } + + private float[] columnWidths(List columns, float tableWidth, String unit) { + float[] widths = new float[columns.size()]; + int missing = 0; + float specified = 0f; + for (int i = 0; i < columns.size(); i++) { + float w = convert(toFloat(columns.get(i).width, 0f), unit); + if (w > 0f) { + widths[i] = w; + specified += w; + } else { + missing++; + } + } + if (missing == columns.size()) { + float each = tableWidth / Math.max(1, columns.size()); + for (int i = 0; i < widths.length; i++) { + widths[i] = each; + } + return widths; + } + float remaining = Math.max(0f, tableWidth - specified); + float eachMissing = missing == 0 ? 0f : remaining / missing; + for (int i = 0; i < widths.length; i++) { + if (widths[i] <= 0f) { + widths[i] = eachMissing; + } + } + return widths; + } + + private float tableWidth(float[] columnWidths) { + float total = 0f; + for (float columnWidth : columnWidths) { + total += columnWidth; + } + return total; + } + + private String resolveValue(PdfTemplateField field, Map data) { + String value = field.value; + if (value == null || value.trim().isEmpty()) { + Object fromData = templateRenderer.findValue(data, field.name); + return fromData == null ? "" : String.valueOf(fromData); + } + if (value.contains("{{")) { + return templateRenderer.render(value, data); + } + Object fromData = templateRenderer.findValue(data, value); + return fromData == null ? value : String.valueOf(fromData); + } + + private FieldBox box(PDPage page, TemplateInfo template, PdfTemplateField field, float fontSize, float lineHeight) { + String unit = firstNotBlank(field.unit, template.coordinateUnit, "pt"); + float x = convert(toFloat(field.x, 0f), unit); + float y = convert(toFloat(field.y, 0f), unit); + float width = convert(toFloat(field.width, 0f), unit); + float height = convert(toFloat(field.height, 0f), unit); + String type = normalizeType(field.type); + if (width <= 0f) { + width = "TABLE".equals(type) ? 500f : 200f; + } + if (height <= 0f) { + height = "TABLE".equals(type) ? 150f : Math.max(lineHeight, fontSize + 2f); + } + String origin = firstNotBlank(field.origin, template.coordinateOrigin, "BOTTOM_LEFT").toUpperCase(Locale.ROOT); + PDRectangle media = page.getMediaBox(); + if ("TOP_LEFT".equals(origin)) { + // For images/boxes/tables y marks the top edge. For text, y marks the top edge of the text box and we write on the first baseline. + y = media.getHeight() - y - ("TEXT".equals(type) ? fontSize : height); + } + FieldBox box = new FieldBox(); + box.x = x; + box.y = y; + box.width = width; + box.height = height; + return box; + } + + private List wrap(String text, PDFont font, float fontSize, float maxWidth) throws IOException { + List result = new ArrayList<>(); + for (String paragraph : splitLines(text)) { + if (paragraph.isEmpty()) { + result.add(""); + continue; + } + StringBuilder line = new StringBuilder(); + for (String word : paragraph.split("\\s+")) { + String candidate = line.length() == 0 ? word : line + " " + word; + if (stringWidth(candidate, font, fontSize) <= maxWidth || line.length() == 0) { + line.setLength(0); + line.append(candidate); + } else { + result.add(line.toString()); + line.setLength(0); + line.append(word); + } + } + result.add(line.toString()); + } + return result; + } + + private List splitLines(String text) { + List result = new ArrayList<>(); + String[] lines = (text == null ? "" : text).replace("\r\n", "\n").replace('\r', '\n').split("\n", -1); + for (String line : lines) { + result.add(line); + } + return result; + } + + private float alignedX(String text, PDFont font, float fontSize, FieldBox box, String align) throws IOException { + String normalized = align == null ? "LEFT" : align.trim().toUpperCase(Locale.ROOT); + if ("RIGHT".equals(normalized)) { + return box.x + Math.max(0, box.width - stringWidth(text, font, fontSize)); + } + if ("CENTER".equals(normalized) || "CENTRE".equals(normalized)) { + return box.x + Math.max(0, (box.width - stringWidth(text, font, fontSize)) / 2f); + } + return box.x; + } + + private float stringWidth(String text, PDFont font, float fontSize) throws IOException { + return font.getStringWidth(safePdfText(text)) / 1000f * fontSize; + } + + private PDFont font(PdfTemplateField field) { + boolean bold = Boolean.TRUE.equals(field.bold) || "HELVETICA_BOLD".equalsIgnoreCase(field.fontName) || "BOLD".equalsIgnoreCase(field.fontName); + return new PDType1Font(bold ? Standard14Fonts.FontName.HELVETICA_BOLD : Standard14Fonts.FontName.HELVETICA); + } + + private Color parseColor(String text) { + if (text == null || text.trim().isEmpty()) { + return Color.BLACK; + } + String value = text.trim(); + try { + if (value.startsWith("#")) { + return new Color(Integer.parseInt(value.substring(1), 16)); + } + String[] parts = value.split(","); + if (parts.length == 3) { + return new Color(clampColor(parts[0]), clampColor(parts[1]), clampColor(parts[2])); + } + } catch (Exception ignored) { + return Color.BLACK; + } + return Color.BLACK; + } + + private int clampColor(String value) { + return Math.max(0, Math.min(255, Integer.parseInt(value.trim()))); + } + + private String safePdfText(String text) { + if (text == null) { + return ""; + } + // Standard 14 fonts support WinAnsi. Replace control characters to keep the renderer robust. + return text.replaceAll("[\\p{Cntrl}&&[^\\t]]", " "); + } + + private float convert(float value, String unit) { + String normalized = unit == null ? "pt" : unit.trim().toLowerCase(Locale.ROOT); + if ("mm".equals(normalized)) return value * 72f / 25.4f; + if ("cm".equals(normalized)) return value * 72f / 2.54f; + if ("in".equals(normalized) || "inch".equals(normalized)) return value * 72f; + return value; + } + + private int normalizePage(Integer page) { + return page == null || page < 1 ? 1 : page; + } + + private String normalizeType(String type) { + String normalized = type == null || type.trim().isEmpty() ? "TEXT" : type.trim().replace('-', '_').toUpperCase(Locale.ROOT); + if ("QR".equals(normalized) || "QRCODE".equals(normalized)) { + return "QR_CODE"; + } + if ("DATAMATRIX".equals(normalized)) { + return "DATA_MATRIX"; + } + return normalized; + } + + private String barcodeType(String fieldType, String configured) { + String barcodeType = firstNotBlank(configured, "QR_CODE".equals(fieldType) ? "QR_CODE" : null); + if ("BARCODE".equals(fieldType) && (barcodeType == null || barcodeType.trim().isEmpty())) { + barcodeType = "CODE_128"; + } + if ("DATA_MATRIX".equals(fieldType)) { + barcodeType = "DATA_MATRIX"; + } + if ("QR_CODE".equals(fieldType)) { + barcodeType = "QR_CODE"; + } + return barcodeType; + } + + private float toFloat(Double value, float fallback) { + if (value == null || value.isNaN() || value.isInfinite()) { + return fallback; + } + return value.floatValue(); + } + + private String firstNotBlank(String... values) { + if (values == null) { + return null; + } + for (String value : values) { + if (value != null && !value.trim().isEmpty()) { + return value.trim(); + } + } + return null; + } + + private String normalizeBase64(String value) { + String text = value == null ? "" : value.trim(); + int comma = text.indexOf(','); + if (text.startsWith("data:") && comma >= 0) { + text = text.substring(comma + 1); + } + return text.replaceAll("\\s+", ""); + } + + private static class FieldBox { + float x; + float y; + float width; + float height; + } +} diff --git a/src/main/java/de/hehl/printservice/service/PrintJobService.java b/src/main/java/de/hehl/printservice/service/PrintJobService.java new file mode 100644 index 0000000..3effbde --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PrintJobService.java @@ -0,0 +1,398 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.AuthIdentity; +import de.hehl.printservice.model.PrintJobRecord; +import de.hehl.printservice.model.PrintRequest; +import de.hehl.printservice.model.PrintResponse; +import de.hehl.printservice.model.PrinterMapping; +import de.hehl.printservice.model.RenderedDocument; +import de.hehl.printservice.model.ReprintRequest; +import de.hehl.printservice.model.TemplateInfo; + +import javax.print.Doc; +import javax.print.DocFlavor; +import javax.print.DocPrintJob; +import javax.print.PrintException; +import javax.print.PrintService; +import javax.print.SimpleDoc; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Copies; +import java.io.ByteArrayInputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.time.Duration; +import java.util.Base64; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Locale; +import java.util.UUID; + +public class PrintJobService { + private final PrinterRegistry printerRegistry = new PrinterRegistry(); + private final TemplateService templateService = new TemplateService(); + private final TemplateRenderer renderer = new TemplateRenderer(); + private final PdfDocumentService pdfService = new PdfDocumentService(); + private final DocxTemplateRenderer docxRenderer = new DocxTemplateRenderer(); + private final PdfTemplateRenderer pdfTemplateRenderer = new PdfTemplateRenderer(); + private final LibreOfficeConverter libreOfficeConverter = new LibreOfficeConverter(); + private final Docx4jFoConverter docx4jFoConverter = new Docx4jFoConverter(); + private final RawTcpPrinterClient rawTcpPrinterClient = new RawTcpPrinterClient(); + private final PrintQueueService queueService = new PrintQueueService(); + private final HtmlDocumentNormalizer htmlNormalizer = new HtmlDocumentNormalizer(); + + public PrintResponse preview(PrintRequest request) { + return preview(request, null); + } + + public PrintResponse preview(PrintRequest request, AuthIdentity identity) { + if (request == null) throw new IllegalArgumentException("request is required"); + TemplateInfo template = templateService.get(request.templateName); + RenderedDocument rendered = renderDocument(template, request, false); + + PrintResponse response = baseResponse(request, template, rendered); + response.printed = false; + response.status = "PREVIEW"; + response.userName = userName(identity); + response.message = "Preview generated"; + if (rendered.text != null) response.renderedContent = rendered.text; + if (Boolean.TRUE.equals(request.includeRenderedBase64) && rendered.bytes != null) { + response.renderedBase64 = Base64.getEncoder().encodeToString(rendered.bytes); + } + return response; + } + + public RenderedDocument renderForDownload(PrintRequest request) { + if (request == null) throw new IllegalArgumentException("request is required"); + TemplateInfo template = templateService.get(request.templateName); + return renderDocument(template, request, true); + } + + + public Map validateHtmlForPdf(PrintRequest request) { + if (request == null) throw new IllegalArgumentException("request is required"); + TemplateInfo template = templateService.get(request.templateName); + String mode = resolveRenderMode(template, request.renderMode); + if (!"PDF".equals(mode)) { + throw new IllegalArgumentException("HTML validation is only available for HTML->PDF templates. Current resolved renderMode=" + mode); + } + String renderedText = renderer.render(template.content, request.data); + HtmlDocumentNormalizer.NormalizedHtml normalized = htmlNormalizer.normalizeForPdf(renderedText, ConfigPaths.templateDir(template.name).toUri().toString()); + Map out = new LinkedHashMap<>(); + out.put("ok", true); + out.put("templateName", template.name); + out.put("renderMode", mode); + out.put("inputLength", renderedText == null ? 0 : renderedText.length()); + out.put("xhtmlLength", normalized.xhtml.length()); + out.put("htmlPreview", normalized.inputPreview); + out.put("xhtmlPreview", normalized.xhtmlPreview); + out.put("message", "HTML was rendered and normalized to XHTML successfully. It can be passed to openhtmltopdf."); + return out; + } + + public PrintResponse print(PrintRequest request) { + return print(request, null); + } + + public PrintResponse print(PrintRequest request, AuthIdentity identity) { + if (request == null) throw new IllegalArgumentException("request is required"); + if (Boolean.TRUE.equals(request.dryRun)) return preview(request, identity); + + boolean queueEnabled = queueService.isEnabled(); + String jobId = UUID.randomUUID().toString(); + PrintJobRecord record = queueService.newAcceptedRecord(jobId, identity); + if (queueService.storeRequestsForReprint()) { + record.request = request; + } + record.printerAlias = request.printerAlias; + record.templateName = request.templateName; + record.copies = normalizeCopies(request.copies); + record.reprintOfJobId = request.reprintOfJobId; + record.message = queueEnabled ? "Print job accepted" : "Print queue disabled; job will not be stored"; + if (queueEnabled) queueService.save(record); + + try { + PrintResponse response = doPrint(request); + response.jobId = queueEnabled ? jobId : null; + response.userName = record.userName; + response.status = "SUBMITTED"; + response.reprintOfJobId = request.reprintOfJobId; + if (!queueEnabled) { + response.message = response.message + " (queue disabled; no history/reprint entry stored)"; + return response; + } + + record.status = "SUBMITTED"; + record.updatedAt = Instant.now().toString(); + record.systemName = response.systemName; + record.documentName = response.documentName; + record.renderMode = response.renderMode; + record.contentType = response.contentType; + record.renderedBytes = response.renderedBytes; + record.message = response.message; + queueService.save(record); + return response; + } catch (RuntimeException e) { + if (queueEnabled) { + record.status = "FAILED"; + record.updatedAt = Instant.now().toString(); + record.message = e.getMessage(); + queueService.save(record); + } + throw e; + } + } + + public PrintResponse reprint(String jobId, ReprintRequest reprintRequest, AuthIdentity identity) { + PrintJobRecord original = queueService.get(jobId); + queueService.assertCanSee(original, identity); + if (original.request == null) throw new IllegalArgumentException("Original print request was not stored and cannot be reprinted: " + jobId); + PrintRequest request = cloneRequest(original.request); + request.reprintOfJobId = jobId; + if (reprintRequest != null) { + if (reprintRequest.copies != null) request.copies = reprintRequest.copies; + if (reprintRequest.printerAlias != null && !reprintRequest.printerAlias.isBlank()) request.printerAlias = reprintRequest.printerAlias; + if (reprintRequest.dataOverride != null && !reprintRequest.dataOverride.isEmpty()) request.data.putAll(reprintRequest.dataOverride); + } + return print(request, identity); + } + + private PrintResponse doPrint(PrintRequest request) { + PrinterMapping mapping = printerRegistry.getEnabledMapping(request.printerAlias); + TemplateInfo template = templateService.get(request.templateName); + RenderedDocument rendered = renderDocument(template, request, true); + int copies = normalizeCopies(request.copies); + String effectiveEncoding = request.encoding == null || request.encoding.trim().isEmpty() ? template.encoding : request.encoding; + + if (PrinterRegistry.TYPE_RAW_TCP.equals(PrinterRegistry.normalizeType(mapping.type))) { + if (!"RAW".equals(rendered.renderMode)) { + throw new IllegalArgumentException("RAW_TCP printers can only print RAW templates such as ZPL, EPL, ESC/POS or plain text. Use WINDOWS_SPOOLER for PDF/HTML/PDF_TEMPLATE."); + } + rawTcpPrinterClient.print(mapping, rendered.text, charset(effectiveEncoding), copies); + } else { + PrintService printService = printerRegistry.getSystemPrinterByName(mapping.systemName); + if ("PDF".equals(rendered.renderMode) || "PDF_TEMPLATE".equals(rendered.renderMode)) { + pdfService.printPdf(rendered.bytes, printService, copies, normalizeDpi(request.pdfDpi)); + } else if ("RAW".equals(rendered.renderMode)) { + printRaw(printService, rendered.text, charset(effectiveEncoding), copies); + } else if ("DOCX".equals(rendered.renderMode)) { + String converter = normalizeDocxConverter(request.docxConverter); + if ("LIBREOFFICE".equals(converter)) { + byte[] pdf = libreOfficeConverter.docxToPdf(rendered.bytes); + pdfService.printPdf(pdf, printService, copies, normalizeDpi(request.pdfDpi)); + rendered.renderMode = "PDF"; + rendered.contentType = "application/pdf"; + rendered.bytes = pdf; + rendered.fileName = fileBaseName(template) + ".pdf"; + } else if ("DOCX4J_FO".equals(converter)) { + byte[] pdf = docx4jFoConverter.docxToPdf(rendered.bytes); + pdfService.printPdf(pdf, printService, copies, normalizeDpi(request.pdfDpi)); + rendered.renderMode = "PDF"; + rendered.contentType = "application/pdf"; + rendered.bytes = pdf; + rendered.fileName = fileBaseName(template) + ".pdf"; + } else { + throw new IllegalArgumentException("DOCX templates can be rendered and downloaded. For direct printing configure docxConverter=DOCX4J_FO or LIBREOFFICE, or use HTML/PDF_TEMPLATE for faster production printing."); + } + } else { + throw new IllegalArgumentException("Unsupported render mode: " + rendered.renderMode); + } + } + + PrintResponse response = baseResponse(request, template, rendered); + response.printed = true; + response.printerAlias = mapping.alias; + response.systemName = PrinterRegistry.TYPE_RAW_TCP.equals(PrinterRegistry.normalizeType(mapping.type)) ? mapping.host + ":" + (mapping.port == null ? 9100 : mapping.port) : mapping.systemName; + response.message = "Print job submitted"; + if (rendered.text != null && rendered.text.length() < 200_000) response.renderedContent = rendered.text; + if (Boolean.TRUE.equals(request.includeRenderedBase64) && rendered.bytes != null) { + response.renderedBase64 = Base64.getEncoder().encodeToString(rendered.bytes); + } + return response; + } + + private RenderedDocument renderDocument(TemplateInfo template, PrintRequest request, boolean binaryPreferred) { + String mode = resolveRenderMode(template, request.renderMode); + RenderedDocument out = new RenderedDocument(); + out.renderMode = mode; + out.fileName = fileBaseName(template); + + if ("PDF_TEMPLATE".equals(mode)) { + out.contentType = "application/pdf"; + out.bytes = pdfTemplateRenderer.render(template, request.data); + out.fileName += ".pdf"; + return out; + } + + if ("DOCX".equals(mode)) { + out.contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + out.bytes = docxRenderer.render(template, request.data); + out.fileName += ".docx"; + return out; + } + + String renderedText = renderer.render(template.content, request.data); + if ("PDF".equals(mode)) { + out.contentType = "application/pdf"; + out.bytes = pdfService.htmlToPdf(renderedText, ConfigPaths.templateDir(template.name)); + out.text = binaryPreferred ? null : renderedText; + out.fileName += ".pdf"; + return out; + } + + out.contentType = template.contentType == null ? "text/plain" : template.contentType; + out.text = renderedText; + out.fileName += extensionForTemplate(template); + return out; + } + + private String resolveRenderMode(TemplateInfo template, String requested) { + String mode = requested == null || requested.trim().isEmpty() ? "AUTO" : requested.trim().toUpperCase(Locale.ROOT); + String templateType = template.templateType == null ? "TEXT" : template.templateType.toUpperCase(Locale.ROOT); + if (!"AUTO".equals(mode)) { + if ("RAW".equals(mode) || "PDF".equals(mode) || "DOCX".equals(mode) || "PDF_TEMPLATE".equals(mode)) return mode; + throw new IllegalArgumentException("renderMode must be AUTO, RAW, PDF, DOCX or PDF_TEMPLATE"); + } + if ("HTML".equals(templateType)) return "PDF"; + if ("DOCX".equals(templateType)) return "DOCX"; + if ("PDF".equals(templateType) || "PDF_TEMPLATE".equals(templateType)) return "PDF_TEMPLATE"; + return "RAW"; + } + + private PrintResponse baseResponse(PrintRequest request, TemplateInfo template, RenderedDocument rendered) { + PrintResponse response = new PrintResponse(); + response.printerAlias = request.printerAlias; + response.templateName = template.name; + response.documentName = template.documentName; + response.contentType = rendered.contentType; + response.renderMode = rendered.renderMode; + response.copies = normalizeCopies(request.copies); + response.renderedBytes = rendered.size(); + return response; + } + + private void printRaw(PrintService printService, String rendered, Charset charset, int copies) { + DocFlavor flavor = chooseFlavor(printService); + Object payload = toPayload(rendered, charset, flavor); + Doc doc = new SimpleDoc(payload, flavor, null); + PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); + attributes.add(new Copies(copies)); + try { + DocPrintJob job = printService.createPrintJob(); + job.print(doc, attributes); + } catch (PrintException e) { + throw new IllegalStateException("Raw print job failed: " + e.getMessage(), e); + } + } + + private PrintRequest cloneRequest(PrintRequest src) { + PrintRequest out = JsonFiles.fromJson(JsonFiles.toJson(src), PrintRequest.class); + out.includeRenderedBase64 = false; + out.dryRun = false; + return out; + } + + + public Map docxConverterStatus() { + Map out = new LinkedHashMap<>(); + out.put("defaultRecommendation", "Use DOCX4J_FO only after validating the specific template. Prefer PDF_TEMPLATE or HTML->PDF for production speed and repeatability."); + out.put("docx4jFo", docx4jFoConverter.status()); + Map libre = new LinkedHashMap<>(); + libre.put("converter", "LIBREOFFICE"); + libre.put("available", true); + libre.put("externalInstallationRequired", true); + libre.put("description", "DOCX -> PDF using an installed LibreOffice/soffice executable. Usually higher fidelity, but requires external installation and process management."); + out.put("libreOffice", libre); + return out; + } + + public Map validateDocxConverter(PrintRequest request, String converterName) { + if (request == null) throw new IllegalArgumentException("request is required"); + long start = System.nanoTime(); + TemplateInfo template = templateService.get(request.templateName); + RenderedDocument rendered = renderDocument(template, request, true); + if (!"DOCX".equals(rendered.renderMode)) { + throw new IllegalArgumentException("Template does not render to DOCX. Use a DOCX template for DOCX converter validation."); + } + String converter = normalizeDocxConverter(converterName == null || converterName.isBlank() ? request.docxConverter : converterName); + byte[] pdf; + if ("DOCX4J_FO".equals(converter)) { + pdf = docx4jFoConverter.docxToPdf(rendered.bytes); + } else if ("LIBREOFFICE".equals(converter)) { + pdf = libreOfficeConverter.docxToPdf(rendered.bytes); + } else { + throw new IllegalArgumentException("docxConverter must be DOCX4J_FO or LIBREOFFICE for validation"); + } + long elapsedMs = Duration.ofNanos(System.nanoTime() - start).toMillis(); + Map out = new LinkedHashMap<>(); + out.put("templateName", template.name); + out.put("converter", converter); + out.put("success", pdf != null && pdf.length > 0); + out.put("pdfBytes", pdf == null ? 0 : pdf.length); + out.put("elapsedMs", elapsedMs); + out.put("note", "Technically successful conversion only. Open/print the generated PDF preview to validate visual layout fidelity."); + if (Boolean.TRUE.equals(request.includeRenderedBase64)) { + out.put("pdfBase64", Base64.getEncoder().encodeToString(pdf)); + } + return out; + } + + private int normalizeCopies(Integer copies) { + int value = copies == null ? 1 : copies; + if (value < 1 || value > 99) throw new IllegalArgumentException("copies must be between 1 and 99"); + return value; + } + + private int normalizeDpi(Integer dpi) { + if (dpi == null) return 203; + if (dpi < 0 || dpi > 1200) throw new IllegalArgumentException("pdfDpi must be between 0 and 1200"); + return dpi; + } + + private Charset charset(String encoding) { + try { + return Charset.forName(encoding == null ? StandardCharsets.UTF_8.name() : encoding.trim()); + } catch (Exception e) { + throw new IllegalArgumentException("Unsupported encoding: " + encoding); + } + } + + private DocFlavor chooseFlavor(PrintService printService) { + if (printService.isDocFlavorSupported(DocFlavor.BYTE_ARRAY.AUTOSENSE)) return DocFlavor.BYTE_ARRAY.AUTOSENSE; + if (printService.isDocFlavorSupported(DocFlavor.INPUT_STREAM.AUTOSENSE)) return DocFlavor.INPUT_STREAM.AUTOSENSE; + if (printService.isDocFlavorSupported(DocFlavor.STRING.TEXT_PLAIN)) return DocFlavor.STRING.TEXT_PLAIN; + throw new IllegalArgumentException("Printer does not support raw bytes or text/plain: " + printService.getName()); + } + + private Object toPayload(String rendered, Charset charset, DocFlavor flavor) { + if (DocFlavor.STRING.TEXT_PLAIN.equals(flavor)) return rendered; + byte[] bytes = rendered == null ? new byte[0] : rendered.getBytes(charset); + if (DocFlavor.INPUT_STREAM.AUTOSENSE.equals(flavor)) return new ByteArrayInputStream(bytes); + return bytes; + } + + private String extensionForTemplate(TemplateInfo template) { + String t = template.templateType == null ? "" : template.templateType.toUpperCase(Locale.ROOT); + if ("ZPL".equals(t)) return ".zpl"; + if ("EPL".equals(t)) return ".epl"; + if ("XML".equals(t)) return ".xml"; + if ("HTML".equals(t)) return ".html"; + return ".txt"; + } + + private String fileBaseName(TemplateInfo template) { + String base = template.documentName == null || template.documentName.trim().isEmpty() ? template.name : template.documentName; + if (base == null || base.trim().isEmpty()) base = "printdocument"; + return base.replaceAll("[^A-Za-z0-9._-]", "_").replaceAll("\\.[A-Za-z0-9]{1,12}$", ""); + } + + private String normalizeDocxConverter(String value) { + String converter = value == null || value.trim().isEmpty() ? "NONE" : value.trim().toUpperCase(Locale.ROOT); + if ("DOCX4J".equals(converter) || "DOCX4J-FO".equals(converter)) return "DOCX4J_FO"; + return converter; + } + + private String nullToEmpty(String value) { return value == null ? "" : value; } + private String userName(AuthIdentity identity) { return identity == null || identity.userName == null ? "anonymous" : identity.userName; } +} diff --git a/src/main/java/de/hehl/printservice/service/PrintQueueService.java b/src/main/java/de/hehl/printservice/service/PrintQueueService.java new file mode 100644 index 0000000..7c79ba0 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PrintQueueService.java @@ -0,0 +1,285 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.AuthIdentity; +import de.hehl.printservice.model.PrintJobRecord; +import de.hehl.printservice.model.PrintQueueMaintenanceResponse; +import de.hehl.printservice.model.PrintQueueResponse; +import de.hehl.printservice.model.PrintQueueSettings; +import de.hehl.printservice.model.PrintQueueSettingsUpdateRequest; + +import java.lang.reflect.Type; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +public class PrintQueueService { + private static final Type LIST_TYPE = new com.fasterxml.jackson.core.type.TypeReference>() { }.getType(); + + public synchronized boolean isEnabled() { + return settings().enabled; + } + + public synchronized boolean storeRequestsForReprint() { + PrintQueueSettings s = settings(); + return s.enabled && s.storeRequestsForReprint; + } + + public synchronized PrintQueueSettings settings() { + PrintQueueSettings s = JsonFiles.read(ConfigPaths.queueSettingsFile(), PrintQueueSettings.class, new PrintQueueSettings()); + normalize(s); + return s; + } + + public synchronized PrintQueueSettings updateSettings(PrintQueueSettingsUpdateRequest request) { + PrintQueueSettings s = settings(); + if (request != null) { + if (request.enabled != null) s.enabled = request.enabled; + if (request.storeRequestsForReprint != null) s.storeRequestsForReprint = request.storeRequestsForReprint; + if (request.autoCleanupEnabled != null) s.autoCleanupEnabled = request.autoCleanupEnabled; + if (request.retentionDays != null) s.retentionDays = request.retentionDays; + if (request.maxStoredJobs != null) s.maxStoredJobs = request.maxStoredJobs; + } + normalize(s); + JsonFiles.write(ConfigPaths.queueSettingsFile(), s); + if (s.autoCleanupEnabled) cleanupInternal(s, s.retentionDays, false); + return s; + } + + public synchronized void save(PrintJobRecord record) { + PrintQueueSettings s = settings(); + if (!s.enabled) return; + List jobs = readAllInternal(); + boolean updated = false; + for (int i = 0; i < jobs.size(); i++) { + if (jobs.get(i) != null && record.jobId != null && record.jobId.equals(jobs.get(i).jobId)) { + jobs.set(i, record); + updated = true; + break; + } + } + if (!updated) jobs.add(record); + jobs = applyLimits(jobs, s); + JsonFiles.write(ConfigPaths.printJobsFile(), jobs); + } + + public synchronized List readAll() { + PrintQueueSettings s = settings(); + if (s.autoCleanupEnabled) cleanupInternal(s, s.retentionDays, false); + return readAllInternal(); + } + + private List readAllInternal() { + return JsonFiles.read(ConfigPaths.printJobsFile(), LIST_TYPE, new ArrayList<>()); + } + + public synchronized PrintJobRecord get(String jobId) { + if (!settings().enabled) throw new IllegalStateException("Print queue is disabled. No print jobs are stored for reprint/history."); + if (jobId == null || jobId.isBlank()) throw new IllegalArgumentException("jobId is required"); + for (PrintJobRecord job : readAll()) { + if (job != null && jobId.equals(job.jobId)) return job; + } + throw new IllegalArgumentException("Print job not found: " + jobId); + } + + public synchronized PrintQueueResponse list(Map query, AuthIdentity identity) { + AuthIdentity effective = identity == null ? anonymous() : identity; + PrintQueueSettings s = settings(); + List all = s.enabled ? readAll() : new ArrayList<>(); + String user = string(query, "user"); + String status = string(query, "status"); + String printerAlias = string(query, "printerAlias"); + String templateName = string(query, "templateName"); + String full = string(query, "full"); + boolean includeRequest = booleanValue(query, "includeRequest", false); + int limit = intValue(query, "limit", 100); + if (limit < 1) limit = 1; + if (limit > 1000) limit = 1000; + + boolean admin = isAdmin(effective); + boolean fullList = admin && booleanValue(full, false); + boolean filteredToCurrentUser = false; + if (!admin) { + user = effective.userName; + filteredToCurrentUser = true; + } else if (user == null || user.isBlank()) { + if (!fullList) { + user = effective.userName; + filteredToCurrentUser = true; + } + } + + List filtered = new ArrayList<>(); + for (PrintJobRecord job : all) { + if (job == null) continue; + if (user != null && !user.isBlank() && !equalsIgnoreCase(user, job.userName)) continue; + if (status != null && !status.isBlank() && !equalsIgnoreCase(status, job.status)) continue; + if (printerAlias != null && !printerAlias.isBlank() && !equalsIgnoreCase(printerAlias, job.printerAlias)) continue; + if (templateName != null && !templateName.isBlank() && !equalsIgnoreCase(templateName, job.templateName)) continue; + filtered.add(copyForList(job, includeRequest)); + } + filtered.sort(Comparator.comparing((PrintJobRecord j) -> nullToEmpty(j.createdAt)).reversed()); + int total = filtered.size(); + if (filtered.size() > limit) filtered = new ArrayList<>(filtered.subList(0, limit)); + + PrintQueueResponse response = new PrintQueueResponse(); + response.enabled = s.enabled; + response.storeRequestsForReprint = s.storeRequestsForReprint; + response.autoCleanupEnabled = s.autoCleanupEnabled; + response.retentionDays = s.retentionDays; + response.maxStoredJobs = s.maxStoredJobs; + response.total = total; + response.returned = filtered.size(); + response.filteredToCurrentUser = filteredToCurrentUser; + response.currentUser = effective.userName; + response.queueFile = ConfigPaths.printJobsFile().toString(); + response.message = s.enabled + ? (s.storeRequestsForReprint ? "Queue enabled. Reprint is possible for stored jobs." : "Queue enabled, but original print requests are not stored. Reprint is disabled for new jobs.") + : "Queue disabled. Print jobs are not stored for history/reprint."; + response.jobs = filtered; + return response; + } + + public synchronized PrintQueueMaintenanceResponse clearAll() { + PrintQueueSettings s = settings(); + int before = readAllInternal().size(); + JsonFiles.write(ConfigPaths.printJobsFile(), new ArrayList()); + return maintenanceResponse(s, before, 0, "Print queue/history cleared."); + } + + public synchronized PrintQueueMaintenanceResponse cleanupOlderThanDays(int olderThanDays) { + PrintQueueSettings s = settings(); + if (olderThanDays < 0) olderThanDays = 0; + return cleanupInternal(s, olderThanDays, true); + } + + public void assertCanSee(PrintJobRecord job, AuthIdentity identity) { + AuthIdentity effective = identity == null ? anonymous() : identity; + if (isAdmin(effective)) return; + if (!equalsIgnoreCase(effective.userName, job.userName)) { + throw new SecurityException("Access denied. Users can only access their own print jobs unless they have ADMIN scope."); + } + } + + public boolean isAdmin(AuthIdentity identity) { + return identity != null && (identity.hasScope("ADMIN") || identity.hasScope("ALL")); + } + + public PrintJobRecord newAcceptedRecord(String jobId, AuthIdentity identity) { + AuthIdentity effective = identity == null ? anonymous() : identity; + PrintJobRecord record = new PrintJobRecord(); + record.jobId = jobId; + record.status = "ACCEPTED"; + record.createdAt = Instant.now().toString(); + record.updatedAt = record.createdAt; + record.userName = effective.userName == null ? "anonymous" : effective.userName; + record.displayName = effective.displayName == null ? record.userName : effective.displayName; + record.tokenName = effective.tokenName; + return record; + } + + private PrintQueueMaintenanceResponse cleanupInternal(PrintQueueSettings s, int olderThanDays, boolean force) { + int before; + int after; + List jobs = readAllInternal(); + before = jobs.size(); + if (!s.enabled && !force) return maintenanceResponse(s, before, before, "Queue disabled; cleanup not required."); + if (olderThanDays <= 0) { + jobs = applyMaxStoredJobs(jobs, s.maxStoredJobs); + } else { + Instant threshold = Instant.now().minus(olderThanDays, ChronoUnit.DAYS); + List kept = new ArrayList<>(); + for (PrintJobRecord job : jobs) { + if (job == null) continue; + Instant created = parseInstant(job.createdAt); + if (created == null || !created.isBefore(threshold)) kept.add(job); + } + jobs = applyMaxStoredJobs(kept, s.maxStoredJobs); + } + after = jobs.size(); + if (after != before || force) JsonFiles.write(ConfigPaths.printJobsFile(), jobs); + String msg = olderThanDays > 0 + ? "Removed print jobs older than " + olderThanDays + " days." + : "Applied queue maximum size retention."; + return maintenanceResponse(s, before, after, msg); + } + + private List applyLimits(List jobs, PrintQueueSettings s) { + List out = jobs == null ? new ArrayList<>() : new ArrayList<>(jobs); + if (s.autoCleanupEnabled && s.retentionDays > 0) { + Instant threshold = Instant.now().minus(s.retentionDays, ChronoUnit.DAYS); + out.removeIf(j -> j != null && parseInstant(j.createdAt) != null && parseInstant(j.createdAt).isBefore(threshold)); + } + return applyMaxStoredJobs(out, s.maxStoredJobs); + } + + private List applyMaxStoredJobs(List jobs, int maxStoredJobs) { + if (jobs == null) return new ArrayList<>(); + if (maxStoredJobs <= 0 || jobs.size() <= maxStoredJobs) return jobs; + jobs.sort(Comparator.comparing((PrintJobRecord j) -> nullToEmpty(j.createdAt)).reversed()); + return new ArrayList<>(jobs.subList(0, maxStoredJobs)); + } + + private PrintQueueMaintenanceResponse maintenanceResponse(PrintQueueSettings s, int before, int after, String message) { + PrintQueueMaintenanceResponse response = new PrintQueueMaintenanceResponse(); + response.enabled = s.enabled; + response.settings = s; + response.before = before; + response.after = after; + response.removed = Math.max(0, before - after); + response.message = message; + return response; + } + + private PrintJobRecord copyForList(PrintJobRecord job, boolean includeRequest) { + if (includeRequest) return job; + PrintJobRecord copy = new PrintJobRecord(); + copy.jobId = job.jobId; + copy.status = job.status; + copy.createdAt = job.createdAt; + copy.updatedAt = job.updatedAt; + copy.userName = job.userName; + copy.displayName = job.displayName; + copy.tokenName = job.tokenName; + copy.printerAlias = job.printerAlias; + copy.systemName = job.systemName; + copy.templateName = job.templateName; + copy.documentName = job.documentName; + copy.renderMode = job.renderMode; + copy.contentType = job.contentType; + copy.copies = job.copies; + copy.renderedBytes = job.renderedBytes; + copy.message = job.message; + copy.reprintOfJobId = job.reprintOfJobId; + copy.metadata = job.metadata; + return copy; + } + + private void normalize(PrintQueueSettings s) { + if (s.retentionDays < 0) s.retentionDays = 0; + if (s.retentionDays > 3650) s.retentionDays = 3650; + if (s.maxStoredJobs < 0) s.maxStoredJobs = 0; + if (s.maxStoredJobs > 1_000_000) s.maxStoredJobs = 1_000_000; + if (!s.enabled) s.storeRequestsForReprint = false; + } + + private Instant parseInstant(String value) { + try { return value == null || value.isBlank() ? null : Instant.parse(value); } catch (Exception e) { return null; } + } + + private String string(Map query, String key) { return query == null ? null : query.get(key); } + private boolean booleanValue(Map query, String key, boolean def) { return booleanValue(string(query, key), def); } + private boolean booleanValue(String value, boolean def) { + if (value == null || value.isBlank()) return def; + return value.equalsIgnoreCase("true") || value.equals("1") || value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("ja"); + } + private int intValue(Map query, String key, int def) { + try { return Integer.parseInt(string(query, key)); } catch (Exception e) { return def; } + } + private boolean equalsIgnoreCase(String a, String b) { return a != null && b != null && a.trim().equalsIgnoreCase(b.trim()); } + private String nullToEmpty(String value) { return value == null ? "" : value; } + private AuthIdentity anonymous() { AuthIdentity i = new AuthIdentity(); i.userName = "anonymous"; i.displayName = "Anonymous"; return i; } +} diff --git a/src/main/java/de/hehl/printservice/service/PrinterDiagnosticsService.java b/src/main/java/de/hehl/printservice/service/PrinterDiagnosticsService.java new file mode 100644 index 0000000..d85bf7d --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PrinterDiagnosticsService.java @@ -0,0 +1,95 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.WindowsPrinterCommandExamples; +import de.hehl.printservice.model.WindowsPrinterDiagnostics; + +import javax.print.PrintService; +import javax.print.PrintServiceLookup; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Locale; + +public class PrinterDiagnosticsService { + public WindowsPrinterDiagnostics windowsDiagnostics() { + WindowsPrinterDiagnostics out = new WindowsPrinterDiagnostics(); + out.osName = System.getProperty("os.name", ""); + out.windows = out.osName.toLowerCase(Locale.ROOT).contains("win"); + out.javaUser = System.getProperty("user.name", ""); + out.userNameEnv = getenv("USERNAME"); + out.userDomainEnv = getenv("USERDOMAIN"); + out.computerNameEnv = getenv("COMPUTERNAME"); + out.likelyLocalSystem = isLikelyLocalSystem(out.javaUser, out.userNameEnv); + + PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); + PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); + out.defaultPrinter = defaultService == null ? null : defaultService.getName(); + out.discoveredPrinterCount = services.length; + Arrays.stream(services) + .map(PrintService::getName) + .sorted(Comparator.comparing(String::toLowerCase)) + .forEach(out.discoveredPrinters::add); + + out.availableModes.add("WINDOWS_SPOOLER"); + out.availableModes.add("RAW_TCP"); + out.availableModes.add("PDF_TEMPLATE"); + out.availableModes.add("HTML_TO_PDF"); + out.availableModes.add("ZPL_EPL_RAW"); + + if (!out.windows) { + out.recommendations.add("Dieses System ist kein Windows-System. Nutze CUPS/Systemdrucker oder RAW_TCP fuer Etikettendrucker."); + } else { + if (out.likelyLocalSystem) { + out.warnings.add("Die Printservice-JVM laeuft wahrscheinlich als LocalSystem. Benutzergebundene Drucker werden meistens nicht gefunden."); + out.recommendations.add("Installiere Produktionsdrucker lokal/serverweit per TCP/IP-Port oder verbinde Printserver-Drucker maschinenweit mit printui /ga."); + out.recommendations.add("Fuer ZPL/EPL-Etikettendrucker ist RAW_TCP meist am schnellsten und umgeht den Windows-Spooler komplett."); + } + if (out.discoveredPrinterCount == 0) { + out.warnings.add("Java PrintService findet aktuell keine Drucker im Dienstkontext."); + out.recommendations.add("Pruefe Print Spooler, lokal installierte Drucker und Zugriffsrechte des Dienstkontos bzw. Computerkontos."); + } + if (out.discoveredPrinterCount > 0) { + out.recommendations.add("Gefundene Spooler-Drucker koennen direkt als WINDOWS_SPOOLER-Alias registriert werden."); + } + } + out.commands = commandExamples(); + return out; + } + + private WindowsPrinterCommandExamples commandExamples() { + WindowsPrinterCommandExamples c = new WindowsPrinterCommandExamples(); + c.localTcpPrinterPowerShell = "Add-PrinterPort -Name \"IP_192.168.10.50\" -PrinterHostAddress \"192.168.10.50\"\n" + + "Add-Printer -Name \"Zebra_Line_01\" -DriverName \"Generic / Text Only\" -PortName \"IP_192.168.10.50\"\n" + + "Get-Printer"; + c.perMachineSharedPrinterCmd = "rundll32 printui.dll,PrintUIEntry /ga /n \"\\\\PRINTSERVER01\\Zebra_Line_01\"\n" + + "net stop spooler\n" + + "net start spooler"; + c.listPrintersPowerShell = "Get-Printer | Select-Object Name,DriverName,PortName,Shared,PrinterStatus"; + c.restartSpoolerCmd = "net stop spooler\nnet start spooler"; + c.rawTcpAliasJson = "{\n" + + " \"alias\": \"LABEL_LINE_01\",\n" + + " \"type\": \"RAW_TCP\",\n" + + " \"host\": \"192.168.10.50\",\n" + + " \"port\": 9100,\n" + + " \"language\": \"ZPL\",\n" + + " \"description\": \"Zebra Etikettendrucker direkt per TCP\"\n" + + "}"; + c.windowsSpoolerAliasJson = "{\n" + + " \"alias\": \"OFFICE_A4\",\n" + + " \"type\": \"WINDOWS_SPOOLER\",\n" + + " \"systemName\": \"HP_LaserJet_A4\",\n" + + " \"description\": \"A4 Drucker ueber Windows Spooler\"\n" + + "}"; + return c; + } + + private boolean isLikelyLocalSystem(String javaUser, String userNameEnv) { + String a = javaUser == null ? "" : javaUser.trim().toLowerCase(Locale.ROOT); + String b = userNameEnv == null ? "" : userNameEnv.trim().toLowerCase(Locale.ROOT); + return "system".equals(a) || "localsystem".equals(a) || "system".equals(b); + } + + private String getenv(String key) { + String value = System.getenv(key); + return value == null ? "" : value; + } +} diff --git a/src/main/java/de/hehl/printservice/service/PrinterRegistry.java b/src/main/java/de/hehl/printservice/service/PrinterRegistry.java new file mode 100644 index 0000000..f5f2802 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/PrinterRegistry.java @@ -0,0 +1,173 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.PrinterInfo; +import de.hehl.printservice.model.PrinterMapping; +import de.hehl.printservice.model.RegisterPrinterRequest; + +import javax.print.DocFlavor; +import javax.print.PrintService; +import javax.print.PrintServiceLookup; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +public class PrinterRegistry { + public static final String TYPE_WINDOWS_SPOOLER = "WINDOWS_SPOOLER"; + public static final String TYPE_RAW_TCP = "RAW_TCP"; + private static final Object LOCK = new Object(); + + public List scanPrinters() { + PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); + PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService(); + String defaultName = defaultService == null ? null : defaultService.getName(); + + List result = new ArrayList<>(); + for (PrintService service : services) { + PrinterInfo info = new PrinterInfo(service.getName(), service.getName().equals(defaultName)); + DocFlavor[] flavors = service.getSupportedDocFlavors(); + for (int i = 0; i < Math.min(flavors.length, 20); i++) { + info.supportedDocFlavors.add(flavors[i].toString()); + } + result.add(info); + } + result.sort(Comparator.comparing(p -> p.systemName == null ? "" : p.systemName.toLowerCase(Locale.ROOT))); + return result; + } + + public List listMappings() { + synchronized (LOCK) { + return loadMappings(); + } + } + + public PrinterMapping upsert(RegisterPrinterRequest request) { + if (request == null) { + throw new IllegalArgumentException("request is required"); + } + String alias = NameValidator.requireName(request.alias, "alias"); + String type = normalizeType(request.type); + + if (TYPE_WINDOWS_SPOOLER.equals(type)) { + request.systemName = NameValidator.requireNotBlank(request.systemName, "systemName"); + ensureSystemPrinterExists(request.systemName); + } else if (TYPE_RAW_TCP.equals(type)) { + request.host = NameValidator.requireNotBlank(request.host, "host"); + request.port = normalizePort(request.port); + } else { + throw new IllegalArgumentException("Unsupported printer type: " + type); + } + + synchronized (LOCK) { + List mappings = loadMappings(); + PrinterMapping found = null; + for (PrinterMapping mapping : mappings) { + if (alias.equals(mapping.alias)) { + found = mapping; + break; + } + } + if (found == null) { + found = new PrinterMapping(); + found.alias = alias; + mappings.add(found); + } + found.type = type; + found.systemName = TYPE_WINDOWS_SPOOLER.equals(type) ? request.systemName : null; + found.host = TYPE_RAW_TCP.equals(type) ? request.host : null; + found.port = TYPE_RAW_TCP.equals(type) ? request.port : null; + found.language = normalizeText(request.language); + found.description = request.description; + if (request.enabled != null) { + found.enabled = request.enabled; + } + found.updatedAt = Instant.now().toString(); + saveMappings(mappings); + return found; + } + } + + public void delete(String alias) { + String normalizedAlias = NameValidator.requireName(alias, "alias"); + synchronized (LOCK) { + List mappings = loadMappings(); + boolean removed = mappings.removeIf(m -> normalizedAlias.equals(m.alias)); + if (!removed) { + throw new IllegalArgumentException("Printer alias not found: " + normalizedAlias); + } + saveMappings(mappings); + } + } + + public PrinterMapping getEnabledMapping(String alias) { + String normalizedAlias = NameValidator.requireName(alias, "printerAlias"); + synchronized (LOCK) { + for (PrinterMapping mapping : loadMappings()) { + if (normalizedAlias.equals(mapping.alias)) { + if (!mapping.enabled) { + throw new IllegalArgumentException("Printer alias is disabled: " + normalizedAlias); + } + mapping.type = normalizeType(mapping.type); + return mapping; + } + } + } + throw new IllegalArgumentException("Printer alias not found: " + normalizedAlias); + } + + public PrintService getSystemPrinterByName(String systemName) { + Optional service = Arrays.stream(PrintServiceLookup.lookupPrintServices(null, null)) + .filter(p -> p.getName().equals(systemName)) + .findFirst(); + return service.orElseThrow(() -> new IllegalArgumentException("System printer not found: " + systemName)); + } + + public static String normalizeType(String type) { + String normalized = type == null || type.trim().isEmpty() ? TYPE_WINDOWS_SPOOLER : type.trim().toUpperCase(Locale.ROOT); + if ("SPOOLER".equals(normalized) || "SYSTEM".equals(normalized)) { + return TYPE_WINDOWS_SPOOLER; + } + return normalized; + } + + private void ensureSystemPrinterExists(String systemName) { + getSystemPrinterByName(systemName); + } + + private Integer normalizePort(Integer port) { + int value = port == null ? 9100 : port; + if (value < 1 || value > 65535) { + throw new IllegalArgumentException("port must be between 1 and 65535"); + } + return value; + } + + private String normalizeText(String value) { + return value == null || value.trim().isEmpty() ? null : value.trim(); + } + + private List loadMappings() { + PrinterMapping[] array = JsonFiles.read(ConfigPaths.printersFile(), PrinterMapping[].class, new PrinterMapping[0]); + Map unique = new LinkedHashMap<>(); + for (PrinterMapping mapping : array) { + if (mapping != null && mapping.alias != null) { + mapping.type = normalizeType(mapping.type); + unique.put(mapping.alias, mapping); + } + } + return unique.values().stream() + .sorted(Comparator.comparing(m -> m.alias == null ? "" : m.alias.toLowerCase(Locale.ROOT))) + .collect(Collectors.toCollection(ArrayList::new)); + } + + private void saveMappings(List mappings) { + mappings.sort(Comparator.comparing(m -> m.alias == null ? "" : m.alias.toLowerCase(Locale.ROOT))); + JsonFiles.write(ConfigPaths.printersFile(), mappings); + } +} diff --git a/src/main/java/de/hehl/printservice/service/RawTcpPrinterClient.java b/src/main/java/de/hehl/printservice/service/RawTcpPrinterClient.java new file mode 100644 index 0000000..9f544bf --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/RawTcpPrinterClient.java @@ -0,0 +1,38 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.PrinterMapping; + +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.charset.Charset; + +public class RawTcpPrinterClient { + public void print(PrinterMapping mapping, String rendered, Charset charset, int copies) { + if (mapping == null) { + throw new IllegalArgumentException("printer mapping is required"); + } + String host = NameValidator.requireNotBlank(mapping.host, "host"); + int port = mapping.port == null ? 9100 : mapping.port; + if (port < 1 || port > 65535) { + throw new IllegalArgumentException("RAW_TCP port must be between 1 and 65535"); + } + byte[] bytes = (rendered == null ? "" : rendered).getBytes(charset); + for (int i = 0; i < copies; i++) { + sendOnce(host, port, bytes); + } + } + + private void sendOnce(String host, int port, byte[] bytes) { + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress(host, port), 5000); + socket.setSoTimeout(15000); + try (OutputStream out = socket.getOutputStream()) { + out.write(bytes); + out.flush(); + } + } catch (Exception e) { + throw new IllegalStateException("RAW_TCP print failed to " + host + ":" + port + " - " + e.getMessage(), e); + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/RawTcpPrinterService.java b/src/main/java/de/hehl/printservice/service/RawTcpPrinterService.java new file mode 100644 index 0000000..3ee5f84 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/RawTcpPrinterService.java @@ -0,0 +1,39 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.PrinterMapping; + +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.charset.Charset; + +public class RawTcpPrinterService { + public void print(PrinterMapping mapping, String text, Charset charset, int copies) { + if (mapping == null) { + throw new IllegalArgumentException("RAW_TCP printer mapping is required"); + } + if (text == null) { + text = ""; + } + int safeCopies = Math.max(1, copies); + byte[] bytes = text.getBytes(charset); + for (int i = 0; i < safeCopies; i++) { + sendOnce(mapping.host, mapping.port == null ? 9100 : mapping.port, bytes); + } + } + + private void sendOnce(String host, int port, byte[] bytes) { + if (host == null || host.trim().isEmpty()) { + throw new IllegalArgumentException("RAW_TCP host is required"); + } + try (Socket socket = new Socket()) { + socket.connect(new InetSocketAddress(host.trim(), port), 5000); + socket.setSoTimeout(15000); + OutputStream out = socket.getOutputStream(); + out.write(bytes); + out.flush(); + } catch (Exception e) { + throw new IllegalStateException("RAW_TCP print failed for " + host + ":" + port + ": " + e.getMessage(), e); + } + } +} diff --git a/src/main/java/de/hehl/printservice/service/TemplateRenderer.java b/src/main/java/de/hehl/printservice/service/TemplateRenderer.java new file mode 100644 index 0000000..ce56428 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/TemplateRenderer.java @@ -0,0 +1,183 @@ +package de.hehl.printservice.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Lightweight template renderer for text, ZPL/EPL and HTML templates. + * + * Supported placeholders: + * {{serialNumber}} + * {{text:customer.name}} HTML-escaped text + * {{raw:htmlSnippet}} unescaped content + * {{barcode:CODE_128:serialNumber:360x90}} + * {{qr:serialNumber}} + * + * Supported HTML/text repeating blocks: + * {{#each:items}} + * {{text:pos}}{{text:partNumber}} + * {{/each}} + * + * Inside an each block, the current row is merged into the root context. + * The row is also available as {{row.field}}, plus {{index}} and {{lineNumber}}. + */ +public class TemplateRenderer { + public static final Pattern PLACEHOLDER = Pattern.compile("\\{\\{\\s*([^{}]+?)\\s*}}") ; + private static final Pattern EACH_BLOCK = Pattern.compile("\\{\\{\\s*#each\\s*:\\s*([A-Za-z0-9_.-]+)\\s*}}(.*?)\\{\\{\\s*/each\\s*}}", Pattern.DOTALL); + + private final BarcodeService barcodeService = new BarcodeService(); + + public String render(String template, Map data) { + if (template == null) { + return ""; + } + String withLoops = renderEachBlocks(template, data); + return renderPlaceholders(withLoops, data); + } + + private String renderPlaceholders(String template, Map data) { + Matcher matcher = PLACEHOLDER.matcher(template); + StringBuffer result = new StringBuffer(); + while (matcher.find()) { + String expression = matcher.group(1).trim(); + String replacement = resolveExpression(expression, data); + matcher.appendReplacement(result, Matcher.quoteReplacement(replacement == null ? "" : replacement)); + } + matcher.appendTail(result); + return result.toString(); + } + + private String renderEachBlocks(String template, Map rootData) { + String current = template; + boolean replaced; + int safety = 0; + do { + replaced = false; + Matcher matcher = EACH_BLOCK.matcher(current); + StringBuffer result = new StringBuffer(); + while (matcher.find()) { + replaced = true; + String sourcePath = matcher.group(1).trim(); + String block = matcher.group(2); + String replacement = renderEachBlock(sourcePath, block, rootData); + matcher.appendReplacement(result, Matcher.quoteReplacement(replacement)); + } + matcher.appendTail(result); + current = result.toString(); + safety++; + } while (replaced && safety < 20); + return current; + } + + @SuppressWarnings("unchecked") + private String renderEachBlock(String sourcePath, String block, Map rootData) { + Object value = findValue(rootData, sourcePath); + if (!(value instanceof List)) { + return ""; + } + List rows = (List) value; + StringBuilder out = new StringBuilder(); + for (int i = 0; i < rows.size(); i++) { + Object row = rows.get(i); + Map local = new HashMap<>(); + if (rootData != null) { + local.putAll(rootData); + } + local.put("row", row); + local.put("index", i); + local.put("lineNumber", i + 1); + if (row instanceof Map) { + local.putAll((Map) row); + } else { + local.put("value", row); + } + // Support simple nested loops by processing inner #each blocks with the local row context first. + String nested = renderEachBlocks(block, local); + out.append(renderPlaceholders(nested, local)); + } + return out.toString(); + } + + public String resolveExpression(String expression, Map data) { + if (expression == null || expression.trim().isEmpty()) { + return ""; + } + + if (expression.startsWith("raw:")) { + return stringify(findValue(data, expression.substring(4).trim())); + } + + if (expression.startsWith("text:")) { + return escapeHtml(stringify(findValue(data, expression.substring(5).trim()))); + } + + if (expression.startsWith("qr:") || expression.startsWith("qrcode:")) { + return generateImage(expression, data, 180, 180); + } + + if (expression.startsWith("barcode:")) { + return generateImage(expression, data, 360, 90); + } + + return stringify(findValue(data, expression)); + } + + private String generateImage(String expression, Map data, int defaultWidth, int defaultHeight) { + BarcodeExpression parsed = BarcodeExpression.parse(expression, "CODE_128", defaultWidth, defaultHeight); + return barcodeService.pngDataUri(parsed.format, parsed.resolveValue(data), parsed.width, parsed.height); + } + + @SuppressWarnings("unchecked") + public Object findValue(Map data, String path) { + if (data == null || path == null) { + return null; + } + String trimmed = path.trim(); + if (trimmed.isEmpty()) { + return null; + } + String[] parts = trimmed.split("\\."); + Object current = data; + for (String part : parts) { + if (current instanceof Map) { + current = ((Map) current).get(part); + } else if (current instanceof List && part.matches("\\d+")) { + List list = (List) current; + int index = Integer.parseInt(part); + current = index >= 0 && index < list.size() ? list.get(index) : null; + } else { + return null; + } + if (current == null) { + return null; + } + } + return current; + } + + private String stringify(Object value) { + return value == null ? "" : String.valueOf(value); + } + + public String escapeHtml(String value) { + if (value == null) { + return ""; + } + StringBuilder out = new StringBuilder(value.length()); + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + switch (c) { + case '&': out.append("&"); break; + case '<': out.append("<"); break; + case '>': out.append(">"); break; + case '"': out.append("""); break; + case '\'': out.append("'"); break; + default: out.append(c); + } + } + return out.toString(); + } +} diff --git a/src/main/java/de/hehl/printservice/service/TemplateService.java b/src/main/java/de/hehl/printservice/service/TemplateService.java new file mode 100644 index 0000000..5a5ae77 --- /dev/null +++ b/src/main/java/de/hehl/printservice/service/TemplateService.java @@ -0,0 +1,480 @@ +package de.hehl.printservice.service; + +import de.hehl.printservice.model.CreateTemplateRequest; +import de.hehl.printservice.model.PdfTemplateField; +import de.hehl.printservice.model.TemplateInfo; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Stream; + +public class TemplateService { + private static final Object LOCK = new Object(); + private static final String METADATA_FILE = "template.json"; + private static final String FIELDS_FILE = "fields.json"; + private static final String SAMPLE_DATA_FILE = "sample-data.json"; + private static final String PRINT_REQUEST_FILE = "print-request.json"; + + public List list() { + synchronized (LOCK) { + try { + Files.createDirectories(ConfigPaths.templatesDir()); + List result = new ArrayList<>(); + + try (Stream stream = Files.list(ConfigPaths.templatesDir())) { + stream.filter(Files::isDirectory) + .filter(p -> Files.exists(p.resolve(METADATA_FILE))) + .forEach(p -> result.add(withoutHeavyContent(readFolderTemplate(p, false)))); + } + + result.sort(Comparator.comparing(t -> t.name == null ? "" : t.name.toLowerCase(Locale.ROOT))); + return result; + } catch (IOException e) { + throw new IllegalStateException("Cannot list templates: " + e.getMessage(), e); + } + } + } + + public TemplateInfo get(String name) { + String normalizedName = NameValidator.requireName(name, "templateName"); + synchronized (LOCK) { + Path folder = ConfigPaths.templateDir(normalizedName); + Path metadata = folder.resolve(METADATA_FILE); + if (Files.exists(metadata)) { + return readFolderTemplate(folder, true); + } + throw new IllegalArgumentException("Template not found: " + normalizedName); + } + } + + public TemplateInfo save(CreateTemplateRequest request) { + if (request == null) { + throw new IllegalArgumentException("template request is required"); + } + String requestedName = firstNotBlank(request.name, request.documentName, baseName(request.sourceFileName)); + String name = NameValidator.requireName(sanitizeName(requestedName), "name"); + + TemplateInfo info = new TemplateInfo(); + info.name = name; + info.documentName = firstNotBlank(request.documentName, name); + info.sourceFileName = request.sourceFileName; + info.description = request.description; + info.contentType = firstNotBlank(request.contentType, inferContentType(request.sourceFileName), "text/plain"); + info.templateType = firstNotBlank(request.templateType, inferTemplateType(info.contentType, request.sourceFileName), "TEXT").toUpperCase(Locale.ROOT); + if ("PDF".equals(info.templateType) && request.pdfFields != null && !request.pdfFields.isEmpty()) { + info.templateType = "PDF_TEMPLATE"; + } + info.coordinateUnit = firstNotBlank(request.coordinateUnit, "pt"); + info.coordinateOrigin = firstNotBlank(request.coordinateOrigin, "BOTTOM_LEFT").toUpperCase(Locale.ROOT); + info.pdfFields = request.pdfFields == null ? new ArrayList<>() : request.pdfFields; + info.encoding = firstNotBlank(request.encoding, StandardCharsets.UTF_8.name()); + info.storageMode = "FOLDER"; + info.storageVersion = 2; + info.metadataFile = METADATA_FILE; + info.fieldsFile = firstNotBlank(request.fieldsFile, FIELDS_FILE); + info.sampleDataFile = firstNotBlank(request.sampleDataFile, SAMPLE_DATA_FILE); + info.printRequestFile = firstNotBlank(request.printRequestFile, PRINT_REQUEST_FILE); + info.updatedAt = Instant.now().toString(); + + validateEncoding(info.encoding); + info.documentFile = safeDocumentFileName(firstNotBlank(request.documentFile, defaultDocumentFileName(info))); + info.templateDirectory = "templates/" + info.name; + + synchronized (LOCK) { + try { + Path dir = ConfigPaths.templateDir(name); + Files.createDirectories(dir); + + writeDocumentFile(dir.resolve(info.documentFile), info, request); + info.hasDocumentFile = true; + info.sizeBytes = Files.size(dir.resolve(info.documentFile)); + + writeFieldsFileIfNeeded(dir.resolve(info.fieldsFile), info); + info.hasFieldsFile = Files.exists(dir.resolve(info.fieldsFile)); + + if (request.sampleData != null) { + JsonFiles.write(dir.resolve(info.sampleDataFile), request.sampleData); + } + info.hasSampleDataFile = Files.exists(dir.resolve(info.sampleDataFile)); + + if (request.examplePrintRequest != null) { + JsonFiles.write(dir.resolve(info.printRequestFile), request.examplePrintRequest); + } + info.hasPrintRequestFile = Files.exists(dir.resolve(info.printRequestFile)); + + JsonFiles.write(dir.resolve(METADATA_FILE), metadataOnly(info)); + return readFolderTemplate(dir, true); + } catch (IOException e) { + throw new IllegalStateException("Cannot save template " + name + ": " + e.getMessage(), e); + } + } + } + + public void delete(String name) { + String normalizedName = NameValidator.requireName(name, "templateName"); + synchronized (LOCK) { + Path folder = ConfigPaths.templateDir(normalizedName); + try { + if (Files.exists(folder)) { + deleteRecursive(folder); + return; + } + throw new IllegalArgumentException("Template not found: " + normalizedName); + } catch (IOException e) { + throw new IllegalStateException("Cannot delete template " + normalizedName + ": " + e.getMessage(), e); + } + } + } + + public Map storageOverview() { + synchronized (LOCK) { + Map out = new LinkedHashMap<>(); + out.put("configDir", ConfigPaths.baseDir().toString()); + out.put("templatesDir", ConfigPaths.templatesDir().toString()); + out.put("printersFile", ConfigPaths.printersFile().toString()); + out.put("folderLayout", "templates//{template.json,document.*,fields.json,sample-data.json,print-request.json}"); + out.put("storageVersion", 2); + out.put("legacySingleJsonSupported", false); + out.put("migrationRequired", false); + out.put("recommendedWindowsPath", "C:\\printservice"); + return out; + } + } + + public boolean isBinaryTemplate(TemplateInfo info) { + if (info == null) { + return false; + } + String type = info.templateType == null ? "" : info.templateType.toUpperCase(Locale.ROOT); + String contentType = info.contentType == null ? "" : info.contentType.toLowerCase(Locale.ROOT); + String file = firstNotBlank(info.sourceFileName, info.documentFile, "").toLowerCase(Locale.ROOT); + return "DOCX".equals(type) || contentType.contains("wordprocessingml") || file.endsWith(".docx") + || "PDF".equals(type) || "PDF_TEMPLATE".equals(type) || contentType.contains("pdf") || file.endsWith(".pdf"); + } + + private TemplateInfo readFolderTemplate(Path dir, boolean loadDocument) { + TemplateInfo info = JsonFiles.read(dir.resolve(METADATA_FILE), TemplateInfo.class, null); + if (info == null) { + throw new IllegalStateException("Template metadata is empty: " + dir.resolve(METADATA_FILE)); + } + normalizeInfo(info); + info.storageMode = "FOLDER"; + info.storageVersion = info.storageVersion == null ? 2 : info.storageVersion; + info.templateDirectory = "templates/" + info.name; + info.metadataFile = METADATA_FILE; + info.documentFile = firstNotBlank(info.documentFile, defaultDocumentFileName(info)); + info.fieldsFile = firstNotBlank(info.fieldsFile, FIELDS_FILE); + info.sampleDataFile = firstNotBlank(info.sampleDataFile, SAMPLE_DATA_FILE); + info.printRequestFile = firstNotBlank(info.printRequestFile, PRINT_REQUEST_FILE); + + Path document = dir.resolve(info.documentFile); + Path fields = dir.resolve(info.fieldsFile); + Path sample = dir.resolve(info.sampleDataFile); + Path request = dir.resolve(info.printRequestFile); + info.hasDocumentFile = Files.exists(document); + info.hasFieldsFile = Files.exists(fields); + info.hasSampleDataFile = Files.exists(sample); + info.hasPrintRequestFile = Files.exists(request); + + if (Files.exists(fields)) { + FieldDocument fieldDocument = JsonFiles.read(fields, FieldDocument.class, null); + if (fieldDocument != null) { + info.coordinateUnit = firstNotBlank(fieldDocument.coordinateUnit, info.coordinateUnit, "pt"); + info.coordinateOrigin = firstNotBlank(fieldDocument.coordinateOrigin, info.coordinateOrigin, "BOTTOM_LEFT").toUpperCase(Locale.ROOT); + info.pdfFields = fieldDocument.pdfFields == null ? new ArrayList<>() : fieldDocument.pdfFields; + } + } + if (Files.exists(sample)) { + info.sampleData = JsonFiles.read(sample, Map.class, null); + } + try { + info.sizeBytes = Files.exists(document) ? Files.size(document) : 0L; + if (loadDocument && Files.exists(document)) { + if (isBinaryTemplate(info)) { + info.contentBase64 = Base64.getEncoder().encodeToString(Files.readAllBytes(document)); + info.content = null; + } else { + info.content = new String(Files.readAllBytes(document), Charset.forName(info.encoding)); + info.contentBase64 = null; + } + } + } catch (IOException e) { + throw new IllegalStateException("Cannot read template document " + document + ": " + e.getMessage(), e); + } + return info; + } + + private void normalizeInfo(TemplateInfo info) { + if (info.documentName == null || info.documentName.trim().isEmpty()) { + info.documentName = info.name; + } + if (info.contentType == null || info.contentType.trim().isEmpty()) { + info.contentType = firstNotBlank(inferContentType(firstNotBlank(info.sourceFileName, info.documentFile)), "text/plain"); + } + if (info.templateType == null || info.templateType.trim().isEmpty()) { + info.templateType = inferTemplateType(info.contentType, firstNotBlank(info.sourceFileName, info.documentFile)); + } + info.templateType = info.templateType.toUpperCase(Locale.ROOT); + if (info.encoding == null || info.encoding.trim().isEmpty()) { + info.encoding = StandardCharsets.UTF_8.name(); + } + if (info.coordinateUnit == null || info.coordinateUnit.trim().isEmpty()) { + info.coordinateUnit = "pt"; + } + if (info.coordinateOrigin == null || info.coordinateOrigin.trim().isEmpty()) { + info.coordinateOrigin = "BOTTOM_LEFT"; + } + info.coordinateOrigin = info.coordinateOrigin.toUpperCase(Locale.ROOT); + if (info.pdfFields == null) { + info.pdfFields = new ArrayList<>(); + } + if (info.updatedAt == null || info.updatedAt.trim().isEmpty()) { + info.updatedAt = Instant.now().toString(); + } + } + + private TemplateInfo withoutHeavyContent(TemplateInfo source) { + TemplateInfo copy = metadataOnly(source); + copy.pdfFields = source.pdfFields; + copy.sampleData = null; + return copy; + } + + private TemplateInfo metadataOnly(TemplateInfo source) { + TemplateInfo copy = new TemplateInfo(); + copy.name = source.name; + copy.documentName = source.documentName; + copy.sourceFileName = source.sourceFileName; + copy.description = source.description; + copy.contentType = source.contentType; + copy.templateType = source.templateType; + copy.encoding = source.encoding; + copy.coordinateUnit = source.coordinateUnit; + copy.coordinateOrigin = source.coordinateOrigin; + copy.pdfFields = null; + copy.sampleData = null; + copy.sizeBytes = source.sizeBytes; + copy.updatedAt = source.updatedAt; + copy.storageMode = firstNotBlank(source.storageMode, "FOLDER"); + copy.storageVersion = source.storageVersion == null ? 2 : source.storageVersion; + copy.templateDirectory = source.templateDirectory; + copy.documentFile = source.documentFile; + copy.metadataFile = firstNotBlank(source.metadataFile, METADATA_FILE); + copy.fieldsFile = source.fieldsFile; + copy.sampleDataFile = source.sampleDataFile; + copy.printRequestFile = source.printRequestFile; + copy.hasDocumentFile = source.hasDocumentFile; + copy.hasFieldsFile = source.hasFieldsFile; + copy.hasSampleDataFile = source.hasSampleDataFile; + copy.hasPrintRequestFile = source.hasPrintRequestFile; + copy.content = null; + copy.contentBase64 = null; + return copy; + } + + private void writeDocumentFile(Path file, TemplateInfo info, CreateTemplateRequest request) throws IOException { + Files.createDirectories(file.getParent()); + if (isBinaryTemplate(info)) { + String base64 = normalizeBase64(request.contentBase64); + if (base64 == null || base64.isEmpty()) { + throw new IllegalArgumentException("contentBase64 is required for binary template type " + info.templateType); + } + Files.write(file, Base64.getDecoder().decode(base64)); + } else { + if (request.content == null) { + throw new IllegalArgumentException("content is required"); + } + Files.write(file, request.content.getBytes(Charset.forName(info.encoding))); + } + } + + private void writeFieldsFileIfNeeded(Path file, TemplateInfo info) { + if (!"PDF_TEMPLATE".equalsIgnoreCase(info.templateType) && (info.pdfFields == null || info.pdfFields.isEmpty())) { + try { + Files.deleteIfExists(file); + } catch (IOException ignored) { + // Existing field file is harmless. It will be overwritten when fields are provided again. + } + return; + } + FieldDocument doc = new FieldDocument(); + doc.coordinateUnit = info.coordinateUnit; + doc.coordinateOrigin = info.coordinateOrigin; + doc.pdfFields = info.pdfFields == null ? new ArrayList<>() : info.pdfFields; + JsonFiles.write(file, doc); + } + + private void validateEncoding(String encoding) { + try { + Charset.forName(encoding); + } catch (Exception e) { + throw new IllegalArgumentException("Unsupported encoding: " + encoding); + } + } + + private String firstNotBlank(String... values) { + if (values == null) { + return null; + } + for (String value : values) { + if (value != null && !value.trim().isEmpty()) { + return value.trim(); + } + } + return null; + } + + private String sanitizeName(String value) { + if (value == null) { + return null; + } + String sanitized = value.trim().replaceAll("\\.[A-Za-z0-9]{1,12}$", ""); + sanitized = sanitized.replaceAll("[^A-Za-z0-9._-]", "_"); + return sanitized; + } + + private String safeDocumentFileName(String value) { + String file = baseName(firstNotBlank(value, "document.txt")); + file = file.replaceAll("[^A-Za-z0-9._-]", "_"); + if (file.trim().isEmpty() || file.equals(".") || file.equals("..")) { + return "document.txt"; + } + return file; + } + + private String baseName(String fileName) { + if (fileName == null || fileName.trim().isEmpty()) { + return null; + } + String normalized = fileName.replace('\\', '/'); + int slash = normalized.lastIndexOf('/'); + return slash >= 0 ? normalized.substring(slash + 1) : normalized; + } + + private String defaultDocumentFileName(TemplateInfo info) { + String ext = extensionForTemplate(info); + return "document" + ext; + } + + private String extensionForTemplate(TemplateInfo info) { + String type = info == null || info.templateType == null ? "" : info.templateType.toUpperCase(Locale.ROOT); + String source = info == null ? null : info.sourceFileName; + String sourceBase = baseName(source); + if (sourceBase != null && sourceBase.contains(".")) { + String lower = sourceBase.toLowerCase(Locale.ROOT); + if (lower.endsWith(".html") || lower.endsWith(".htm") || lower.endsWith(".tpl") || lower.endsWith(".zpl") + || lower.endsWith(".epl") || lower.endsWith(".txt") || lower.endsWith(".xml") || lower.endsWith(".docx") || lower.endsWith(".pdf")) { + return lower.substring(lower.lastIndexOf('.')); + } + } + if ("HTML".equals(type)) { + return ".html"; + } + if ("DOCX".equals(type)) { + return ".docx"; + } + if ("PDF".equals(type) || "PDF_TEMPLATE".equals(type)) { + return ".pdf"; + } + if ("ZPL".equals(type)) { + return ".zpl"; + } + if ("EPL".equals(type)) { + return ".epl"; + } + if ("XML".equals(type)) { + return ".xml"; + } + return ".txt"; + } + + private String inferContentType(String sourceFileName) { + if (sourceFileName == null) { + return null; + } + String lower = sourceFileName.toLowerCase(Locale.ROOT); + if (lower.endsWith(".html") || lower.endsWith(".htm") || lower.endsWith(".html.tpl")) { + return "text/html"; + } + if (lower.endsWith(".docx")) { + return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + } + if (lower.endsWith(".pdf")) { + return "application/pdf"; + } + if (lower.endsWith(".zpl") || lower.endsWith(".epl") || lower.endsWith(".txt") || lower.endsWith(".tpl")) { + return "text/plain"; + } + if (lower.endsWith(".xml")) { + return "application/xml"; + } + if (lower.endsWith(".json")) { + return "application/json"; + } + return null; + } + + private String inferTemplateType(String contentType, String sourceFileName) { + String file = sourceFileName == null ? "" : sourceFileName.toLowerCase(Locale.ROOT); + String type = contentType == null ? "" : contentType.toLowerCase(Locale.ROOT); + if (type.contains("wordprocessingml") || file.endsWith(".docx")) { + return "DOCX"; + } + if (type.contains("pdf") || file.endsWith(".pdf")) { + return "PDF"; + } + if (type.contains("html") || file.endsWith(".html") || file.endsWith(".htm") || file.endsWith(".html.tpl")) { + return "HTML"; + } + if (file.endsWith(".zpl")) { + return "ZPL"; + } + if (file.endsWith(".epl")) { + return "EPL"; + } + if (type.contains("xml") || file.endsWith(".xml")) { + return "XML"; + } + return "TEXT"; + } + + private String normalizeBase64(String value) { + if (value == null) { + return null; + } + String text = value.trim(); + int comma = text.indexOf(','); + if (text.startsWith("data:") && comma >= 0) { + text = text.substring(comma + 1); + } + return text.replaceAll("\\s+", ""); + } + + private void deleteRecursive(Path path) throws IOException { + if (!Files.exists(path)) { + return; + } + try (Stream walk = Files.walk(path)) { + for (Path p : (Iterable) walk.sorted(Comparator.reverseOrder())::iterator) { + Files.deleteIfExists(p); + } + } + } + + public static class FieldDocument { + public String coordinateUnit; + public String coordinateOrigin; + public List pdfFields = new ArrayList<>(); + } +} diff --git a/src/main/java/de/hehl/printservice/standalone/ApiHandler.java b/src/main/java/de/hehl/printservice/standalone/ApiHandler.java new file mode 100644 index 0000000..687ea79 --- /dev/null +++ b/src/main/java/de/hehl/printservice/standalone/ApiHandler.java @@ -0,0 +1,325 @@ +package de.hehl.printservice.standalone; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import de.hehl.printservice.model.AuthConfigUpdateRequest; +import de.hehl.printservice.model.AuthIdentity; +import de.hehl.printservice.model.AuthUserRequest; +import de.hehl.printservice.model.CreateTemplateRequest; +import de.hehl.printservice.model.PrintJobRecord; +import de.hehl.printservice.model.PrintRequest; +import de.hehl.printservice.model.PrintQueueSettingsUpdateRequest; +import de.hehl.printservice.model.RenderedDocument; +import de.hehl.printservice.model.RegisterPrinterRequest; +import de.hehl.printservice.model.ReprintRequest; +import de.hehl.printservice.model.SystemDiagnostics; +import de.hehl.printservice.service.BarcodeService; +import de.hehl.printservice.service.ConfigPaths; +import de.hehl.printservice.service.JsonFiles; +import de.hehl.printservice.service.PrintJobService; +import de.hehl.printservice.service.PrintQueueService; +import de.hehl.printservice.service.PrinterDiagnosticsService; +import de.hehl.printservice.service.PrinterRegistry; +import de.hehl.printservice.service.TemplateService; + +import javax.print.PrintService; +import javax.print.PrintServiceLookup; +import java.io.IOException; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +public class ApiHandler implements HttpHandler { + private final PrinterRegistry printerRegistry = new PrinterRegistry(); + private final TemplateService templateService = new TemplateService(); + private final PrintJobService printJobService = new PrintJobService(); + private final PrintQueueService printQueueService = new PrintQueueService(); + private final BarcodeService barcodeService = new BarcodeService(); + private final PrinterDiagnosticsService printerDiagnosticsService = new PrinterDiagnosticsService(); + private final AuthService authService; + + public ApiHandler(AuthService authService) { + this.authService = authService; + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + if ("OPTIONS".equalsIgnoreCase(exchange.getRequestMethod())) { + HttpUtil.noContent(exchange); + return; + } + String method = exchange.getRequestMethod().toUpperCase(Locale.ROOT); + String path = exchange.getRequestURI().getPath(); + route(exchange, method, path); + } catch (Throwable t) { + HttpUtil.error(exchange, t); + } + } + + private void route(HttpExchange exchange, String method, String path) throws IOException { + if (path.equals("/api") || path.equals("/api/")) { + HttpUtil.json(exchange, 200, java.util.Map.of("name", "Printservice Standalone", "version", "2.5.0")); + return; + } + + // Authentication and user/token administration. If auth is disabled, these endpoints are open so the first admin token can be created from the web UI. + if (path.equals("/api/auth/status") && method.equals("GET")) { + HttpUtil.json(exchange, 200, authService.status()); + return; + } + if (path.equals("/api/auth/config") && method.equals("GET")) { + authService.require(exchange, AuthService.Scope.ADMIN); + HttpUtil.json(exchange, 200, authService.status()); + return; + } + if (path.equals("/api/auth/config") && method.equals("PUT")) { + authService.require(exchange, AuthService.Scope.ADMIN); + AuthConfigUpdateRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), AuthConfigUpdateRequest.class); + HttpUtil.json(exchange, 200, authService.updateConfig(request)); + return; + } + if (path.equals("/api/auth/users") && method.equals("GET")) { + authService.require(exchange, AuthService.Scope.ADMIN); + HttpUtil.json(exchange, 200, authService.listUsers()); + return; + } + if (path.equals("/api/auth/users") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.ADMIN); + AuthUserRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), AuthUserRequest.class); + HttpUtil.json(exchange, 200, authService.createUser(request)); + return; + } + if (path.startsWith("/api/auth/users/") && method.equals("DELETE")) { + authService.require(exchange, AuthService.Scope.ADMIN); + authService.deleteUserToken(HttpUtil.pathAfter(path, "/api/auth/users")); + HttpUtil.noContent(exchange); + return; + } + if (path.equals("/api/auth/reload") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.ADMIN); + authService.reload(); + HttpUtil.json(exchange, 200, authService.status()); + return; + } + if (path.equals("/api/auth/me") && method.equals("GET")) { + HttpUtil.json(exchange, 200, authService.identify(exchange, AuthService.Scope.PRINT)); + return; + } + + if (path.equals("/api/diagnostics/system") && method.equals("GET")) { + HttpUtil.json(exchange, 200, systemDiagnostics()); + return; + } + + if (path.equals("/api/barcodes/formats") && method.equals("GET")) { + HttpUtil.json(exchange, 200, barcodeService.supportedFormats()); + return; + } + + + if (path.equals("/api/html/validate") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.PREVIEW); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + HttpUtil.json(exchange, 200, printJobService.validateHtmlForPdf(request)); + return; + } + + if (path.equals("/api/docx/converters") && method.equals("GET")) { + HttpUtil.json(exchange, 200, printJobService.docxConverterStatus()); + return; + } + if (path.equals("/api/docx/validate") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.PREVIEW); + Map query = HttpUtil.query(exchange); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + HttpUtil.json(exchange, 200, printJobService.validateDocxConverter(request, query.get("converter"))); + return; + } + + if (path.equals("/api/printers/scan") && method.equals("GET")) { + HttpUtil.json(exchange, 200, printerRegistry.scanPrinters()); + return; + } + if (path.equals("/api/printers/diagnostics") && method.equals("GET")) { + HttpUtil.json(exchange, 200, printerDiagnosticsService.windowsDiagnostics()); + return; + } + if (path.equals("/api/printers") && method.equals("GET")) { + HttpUtil.json(exchange, 200, printerRegistry.listMappings()); + return; + } + if (path.equals("/api/printers") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.ADMIN); + RegisterPrinterRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), RegisterPrinterRequest.class); + HttpUtil.json(exchange, 200, printerRegistry.upsert(request)); + return; + } + if (path.startsWith("/api/printers/") && method.equals("DELETE")) { + authService.require(exchange, AuthService.Scope.ADMIN); + String alias = HttpUtil.pathAfter(path, "/api/printers"); + printerRegistry.delete(alias); + HttpUtil.noContent(exchange); + return; + } + + if (path.equals("/api/templates/storage") && method.equals("GET")) { + HttpUtil.json(exchange, 200, templateService.storageOverview()); + return; + } + if (path.equals("/api/templates") && method.equals("GET")) { + HttpUtil.json(exchange, 200, templateService.list()); + return; + } + if (path.equals("/api/templates") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.ADMIN); + CreateTemplateRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), CreateTemplateRequest.class); + HttpUtil.json(exchange, 200, templateService.save(request)); + return; + } + if (path.startsWith("/api/templates/") && method.equals("GET")) { + String name = HttpUtil.pathAfter(path, "/api/templates"); + HttpUtil.json(exchange, 200, templateService.get(name)); + return; + } + if (path.startsWith("/api/templates/") && method.equals("PUT")) { + authService.require(exchange, AuthService.Scope.ADMIN); + String name = HttpUtil.pathAfter(path, "/api/templates"); + CreateTemplateRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), CreateTemplateRequest.class); + request.name = name; + HttpUtil.json(exchange, 200, templateService.save(request)); + return; + } + if (path.startsWith("/api/templates/") && method.equals("DELETE")) { + authService.require(exchange, AuthService.Scope.ADMIN); + String name = HttpUtil.pathAfter(path, "/api/templates"); + templateService.delete(name); + HttpUtil.noContent(exchange); + return; + } + + // Persistent print queue / print history for reprint. + if (path.equals("/api/queue/settings") && method.equals("GET")) { + authService.require(exchange, AuthService.Scope.ADMIN); + HttpUtil.json(exchange, 200, printQueueService.settings()); + return; + } + if (path.equals("/api/queue/settings") && method.equals("PUT")) { + authService.require(exchange, AuthService.Scope.ADMIN); + PrintQueueSettingsUpdateRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintQueueSettingsUpdateRequest.class); + HttpUtil.json(exchange, 200, printQueueService.updateSettings(request)); + return; + } + if (path.equals("/api/queue") && method.equals("DELETE")) { + authService.require(exchange, AuthService.Scope.ADMIN); + HttpUtil.json(exchange, 200, printQueueService.clearAll()); + return; + } + if (path.equals("/api/queue/cleanup") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.ADMIN); + Map query = HttpUtil.query(exchange); + int days = parseInt(query.get("olderThanDays"), printQueueService.settings().retentionDays); + HttpUtil.json(exchange, 200, printQueueService.cleanupOlderThanDays(days)); + return; + } + if (path.equals("/api/queue") && method.equals("GET")) { + Map query = HttpUtil.query(exchange); + boolean full = "true".equalsIgnoreCase(query.get("full")) || "1".equals(query.get("full")); + AuthIdentity identity = authService.require(exchange, full ? AuthService.Scope.ADMIN : AuthService.Scope.PRINT); + HttpUtil.json(exchange, 200, printQueueService.list(query, identity)); + return; + } + if (path.startsWith("/api/queue/") && path.endsWith("/reprint") && method.equals("POST")) { + AuthIdentity identity = authService.require(exchange, AuthService.Scope.PRINT); + String jobId = path.substring("/api/queue/".length(), path.length() - "/reprint".length()); + ReprintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), ReprintRequest.class); + HttpUtil.json(exchange, 200, printJobService.reprint(HttpUtil.decode(jobId), request, identity)); + return; + } + if (path.startsWith("/api/queue/") && method.equals("GET")) { + AuthIdentity identity = authService.require(exchange, AuthService.Scope.PRINT); + String jobId = HttpUtil.pathAfter(path, "/api/queue"); + PrintJobRecord job = printQueueService.get(jobId); + printQueueService.assertCanSee(job, identity); + HttpUtil.json(exchange, 200, job); + return; + } + + if (path.equals("/api/print/preview") && method.equals("POST")) { + AuthIdentity identity = authService.require(exchange, AuthService.Scope.PREVIEW); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + HttpUtil.json(exchange, 200, printJobService.preview(request, identity)); + return; + } + if (path.equals("/api/print/preview/html") && method.equals("POST")) { + AuthIdentity identity = authService.require(exchange, AuthService.Scope.PREVIEW); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + String html = printJobService.preview(request, identity).renderedContent; + HttpUtil.text(exchange, 200, "text/html; charset=utf-8", html == null ? "" : html); + return; + } + if (path.equals("/api/print/rendered") && method.equals("POST")) { + authService.require(exchange, AuthService.Scope.PRINT); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + RenderedDocument rendered = printJobService.renderForDownload(request); + String fileName = rendered.fileName == null ? "printdocument" : rendered.fileName.replace("\"", ""); + exchange.getResponseHeaders().set("Content-Disposition", "attachment; filename=\"" + fileName + "\""); + if (rendered.bytes != null) { + HttpUtil.bytes(exchange, 200, rendered.contentType, rendered.bytes); + } else { + HttpUtil.text(exchange, 200, rendered.contentType, rendered.text); + } + return; + } + if (path.equals("/api/print") && method.equals("POST")) { + AuthIdentity identity = authService.require(exchange, AuthService.Scope.PRINT); + PrintRequest request = JsonFiles.fromJson(HttpUtil.body(exchange), PrintRequest.class); + HttpUtil.json(exchange, 200, printJobService.print(request, identity)); + return; + } + + throw new IllegalArgumentException("Endpoint not found: " + method + " " + path); + } + + private SystemDiagnostics systemDiagnostics() { + SystemDiagnostics out = new SystemDiagnostics(); + out.osName = System.getProperty("os.name"); + out.osVersion = System.getProperty("os.version"); + out.osArch = System.getProperty("os.arch"); + out.windows = out.osName != null && out.osName.toLowerCase(Locale.ROOT).contains("win"); + out.javaVersion = System.getProperty("java.version"); + out.javaVendor = System.getProperty("java.vendor"); + out.javaUser = System.getProperty("user.name"); + out.userNameEnv = System.getenv("USERNAME"); + out.likelyLocalSystem = isLocalSystem(out.javaUser) || isLocalSystem(out.userNameEnv); + out.applicationHome = System.getProperty("user.dir"); + out.workingDirectory = System.getProperty("user.dir"); + out.configDir = ConfigPaths.baseDir().toString(); + + List printers = printerRegistry.scanPrinters(); + out.spoolerPrinterCount = printers.size(); + for (de.hehl.printservice.model.PrinterInfo p : printers) out.spoolerPrinters.add(p.systemName); + PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService(); + out.defaultPrinter = defaultPrinter == null ? null : defaultPrinter.getName(); + + out.supportedWindowsModes.add("WINDOWS_SPOOLER_LOCAL_TCPIP"); + out.supportedWindowsModes.add("WINDOWS_SPOOLER_MACHINE_CONNECTION"); + out.supportedWindowsModes.add("RAW_TCP_DIRECT"); + out.supportedWindowsModes.add("PDF_TEMPLATE_OR_HTML_PDF_TO_SPOOLER"); + out.recommendations.add("Standalone-Modus: kein GlassFish/Payara erforderlich. Konfigurationspfad: " + out.configDir); + out.recommendations.add("Druckjobs fuer Reprint werden gespeichert unter: " + ConfigPaths.printJobsFile()); + out.recommendations.add("Queue-/Datenschutz-Einstellungen: " + ConfigPaths.queueSettingsFile()); + if (out.windows && out.likelyLocalSystem) out.recommendations.add("Die JVM läuft wahrscheinlich als LocalSystem. Nutze serverweit installierte Drucker oder RAW_TCP."); + return out; + } + + private int parseInt(String value, int defaultValue) { + try { return Integer.parseInt(value); } catch (Exception e) { return defaultValue; } + } + + private boolean isLocalSystem(String value) { + if (value == null) return false; + String v = value.trim().toUpperCase(Locale.ROOT); + return "SYSTEM".equals(v) || "LOCALSYSTEM".equals(v) || "NT AUTHORITY\\SYSTEM".equals(v); + } +} diff --git a/src/main/java/de/hehl/printservice/standalone/AuthService.java b/src/main/java/de/hehl/printservice/standalone/AuthService.java new file mode 100644 index 0000000..f1f7ec9 --- /dev/null +++ b/src/main/java/de/hehl/printservice/standalone/AuthService.java @@ -0,0 +1,321 @@ +package de.hehl.printservice.standalone; + +import com.sun.net.httpserver.HttpExchange; +import de.hehl.printservice.model.AuthConfigUpdateRequest; +import de.hehl.printservice.model.AuthConfiguration; +import de.hehl.printservice.model.AuthIdentity; +import de.hehl.printservice.model.AuthStatus; +import de.hehl.printservice.model.AuthToken; +import de.hehl.printservice.model.AuthUserRequest; +import de.hehl.printservice.model.AuthUserResponse; +import de.hehl.printservice.service.ConfigPaths; +import de.hehl.printservice.service.JsonFiles; +import de.hehl.printservice.service.NameValidator; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +public class AuthService { + public enum Scope { PRINT, PREVIEW, ADMIN } + + private final Path authFile; + private final SecureRandom random = new SecureRandom(); + private volatile AuthConfiguration configuration; + + public AuthService() { + this.authFile = ConfigPaths.authFile(); + ensureDefaultFile(); + reload(); + } + + public synchronized void reload() { + this.configuration = JsonFiles.read(authFile, AuthConfiguration.class, new AuthConfiguration()); + normalizeConfiguration(this.configuration); + } + + public synchronized AuthStatus status() { + AuthConfiguration c = configuration; + AuthStatus status = new AuthStatus(); + status.enabled = c.enabled; + status.protectPrint = c.protectPrint; + status.protectRenderedDownload = c.protectRenderedDownload; + status.protectPreview = c.protectPreview; + status.protectAdmin = c.protectAdmin; + status.headerName = c.headerName; + status.tokenCount = c.tokens == null ? 0 : c.tokens.size(); + status.enabledTokenCount = 0; + if (c.tokens != null) { + for (AuthToken token : c.tokens) { + if (token != null && token.enabled) status.enabledTokenCount++; + } + } + status.openPrintWithoutToken = !c.enabled || !c.protectPrint; + status.message = status.openPrintWithoutToken + ? "Print REST API is open. Everyone who can reach /api/print can print." + : "Print REST API requires token header " + c.headerName + " or Authorization: Bearer ."; + return status; + } + + public synchronized AuthStatus updateConfig(AuthConfigUpdateRequest request) { + AuthConfiguration c = configuration; + if (request.enabled != null) c.enabled = request.enabled; + if (request.protectPrint != null) c.protectPrint = request.protectPrint; + if (request.protectRenderedDownload != null) c.protectRenderedDownload = request.protectRenderedDownload; + if (request.protectPreview != null) c.protectPreview = request.protectPreview; + if (request.protectAdmin != null) c.protectAdmin = request.protectAdmin; + if (request.headerName != null && !request.headerName.isBlank()) c.headerName = request.headerName.trim(); + normalizeConfiguration(c); + save(c); + return status(); + } + + public AuthIdentity require(HttpExchange exchange, Scope scope) { + AuthConfiguration c = configuration; + AuthIdentity anonymous = anonymousIdentity(c.enabled); + if (!needsAuth(c, scope)) { + return anonymous; + } + AuthIdentity identity = identify(exchange, scope); + if (!identity.authenticated) { + throw new SecurityException("Authentication required for " + scope + ". Send header " + c.headerName + " or Authorization: Bearer ."); + } + return identity; + } + + public AuthIdentity identify(HttpExchange exchange, Scope requiredScope) { + AuthConfiguration c = configuration; + if (!c.enabled) { + return anonymousIdentity(false); + } + String token = firstHeader(exchange, c.headerName); + if (token == null || token.isBlank()) { + token = bearerToken(firstHeader(exchange, "Authorization")); + } + AuthIdentity identity = identityForToken(token, requiredScope, true); + return identity == null ? anonymousIdentity(true) : identity; + } + + public synchronized List listUsers() { + List out = new ArrayList<>(); + AuthConfiguration c = configuration; + if (c.tokens == null) return out; + for (AuthToken token : c.tokens) { + if (token == null) continue; + AuthUserResponse r = new AuthUserResponse(); + r.id = token.id; + r.userName = token.userName; + r.displayName = token.displayName; + r.tokenName = token.name; + r.enabled = token.enabled; + r.scopes = token.scopes == null ? new ArrayList<>() : new ArrayList<>(token.scopes); + r.createdAt = token.createdAt; + out.add(r); + } + return out; + } + + public synchronized AuthUserResponse createUser(AuthUserRequest request) { + if (request == null) throw new IllegalArgumentException("request is required"); + String userName = NameValidator.requireName(request.userName, "userName"); + String plainToken = request.token == null || request.token.isBlank() ? generateToken() : request.token.trim(); + + AuthToken token = new AuthToken(); + token.id = UUID.randomUUID().toString(); + token.userName = userName; + token.displayName = request.displayName == null || request.displayName.isBlank() ? userName : request.displayName.trim(); + token.name = request.tokenName == null || request.tokenName.isBlank() ? userName + "-print-token" : request.tokenName.trim(); + token.sha256 = sha256(plainToken); + token.token = null; + token.enabled = request.enabled; + token.scopes = normalizeScopes(request.scopes); + token.createdAt = Instant.now().toString(); + + AuthConfiguration c = configuration; + normalizeConfiguration(c); + c.tokens.add(token); + save(c); + + AuthUserResponse response = new AuthUserResponse(); + response.id = token.id; + response.userName = token.userName; + response.displayName = token.displayName; + response.tokenName = token.name; + response.enabled = token.enabled; + response.scopes = new ArrayList<>(token.scopes); + response.createdAt = token.createdAt; + response.token = plainToken; + return response; + } + + public synchronized void deleteUserToken(String idOrUserName) { + if (idOrUserName == null || idOrUserName.isBlank()) throw new IllegalArgumentException("idOrUserName is required"); + String value = idOrUserName.trim(); + AuthConfiguration c = configuration; + normalizeConfiguration(c); + boolean removed = c.tokens.removeIf(t -> t != null && (value.equals(t.id) || value.equalsIgnoreCase(nullToEmpty(t.userName)))); + if (!removed) throw new IllegalArgumentException("Auth user/token not found: " + value); + save(c); + } + + private AuthIdentity identityForToken(String provided, Scope requiredScope, boolean updateLastUsed) { + if (provided == null || provided.isBlank()) { + return null; + } + AuthConfiguration c = configuration; + if (c.tokens == null) return null; + String providedHash = sha256(provided.trim()); + AuthToken matched = null; + for (AuthToken token : c.tokens) { + if (token == null || !token.enabled) continue; + boolean matchesHash = token.sha256 != null && constantTimeEquals(token.sha256.trim().toLowerCase(Locale.ROOT), providedHash); + boolean matchesPlain = token.token != null && constantTimeEquals(token.token, provided.trim()); + if ((matchesHash || matchesPlain) && hasScope(token, requiredScope)) { + matched = token; + break; + } + } + if (matched == null) return null; + if (updateLastUsed) { + synchronized (this) { + matched.lastUsedAt = Instant.now().toString(); + save(c); + } + } + AuthIdentity identity = new AuthIdentity(); + identity.authenticated = true; + identity.authEnabled = c.enabled; + identity.userName = matched.userName == null || matched.userName.isBlank() ? matched.name : matched.userName; + identity.displayName = matched.displayName == null || matched.displayName.isBlank() ? identity.userName : matched.displayName; + identity.tokenId = matched.id; + identity.tokenName = matched.name; + identity.scopes = matched.scopes == null ? new ArrayList<>() : new ArrayList<>(matched.scopes); + return identity; + } + + private boolean needsAuth(AuthConfiguration c, Scope scope) { + if (!c.enabled) return false; + return switch (scope) { + case PRINT -> c.protectPrint; + case PREVIEW -> c.protectPreview; + case ADMIN -> c.protectAdmin; + }; + } + + private boolean hasScope(AuthToken token, Scope required) { + if (token.scopes == null || token.scopes.isEmpty()) return true; + String req = required.name(); + return token.scopes.stream() + .filter(s -> s != null) + .map(s -> s.trim().toUpperCase(Locale.ROOT)) + .anyMatch(s -> s.equals(req) || s.equals("ALL")); + } + + private void normalizeConfiguration(AuthConfiguration c) { + if (c.headerName == null || c.headerName.isBlank()) c.headerName = "X-Printservice-Token"; + if (c.tokens == null) c.tokens = new ArrayList<>(); + for (AuthToken token : c.tokens) { + if (token == null) continue; + if (token.id == null || token.id.isBlank()) token.id = UUID.randomUUID().toString(); + if (token.userName == null || token.userName.isBlank()) token.userName = token.name == null ? "user" : token.name; + if (token.displayName == null || token.displayName.isBlank()) token.displayName = token.userName; + if (token.scopes == null) token.scopes = new ArrayList<>(); + } + } + + private List normalizeScopes(List scopes) { + List out = new ArrayList<>(); + if (scopes == null || scopes.isEmpty()) { + out.add("PRINT"); + return out; + } + for (String s : scopes) { + if (s == null || s.isBlank()) continue; + String v = s.trim().toUpperCase(Locale.ROOT); + if (v.equals("ALL") || v.equals("PRINT") || v.equals("PREVIEW") || v.equals("ADMIN")) out.add(v); + } + if (out.isEmpty()) out.add("PRINT"); + return out; + } + + private AuthIdentity anonymousIdentity(boolean authEnabled) { + AuthIdentity identity = new AuthIdentity(); + identity.authenticated = false; + identity.authEnabled = authEnabled; + identity.userName = "anonymous"; + identity.displayName = "Anonymous"; + return identity; + } + + private void save(AuthConfiguration c) { + JsonFiles.write(authFile, c); + this.configuration = c; + } + + private String firstHeader(HttpExchange exchange, String name) { + if (name == null) return null; + return exchange.getRequestHeaders().getFirst(name); + } + + private String bearerToken(String header) { + if (header == null) return null; + String prefix = "Bearer "; + return header.regionMatches(true, 0, prefix, 0, prefix.length()) ? header.substring(prefix.length()).trim() : null; + } + + private void ensureDefaultFile() { + try { + Files.createDirectories(authFile.getParent()); + if (!Files.exists(authFile)) { + AuthConfiguration config = new AuthConfiguration(); + config.enabled = false; + config.protectPrint = true; + config.protectAdmin = false; + config.protectPreview = false; + config.protectRenderedDownload = true; + JsonFiles.write(authFile, config); + } + } catch (Exception e) { + throw new IllegalStateException("Cannot initialize auth.json: " + e.getMessage(), e); + } + } + + private String generateToken() { + byte[] bytes = new byte[32]; + random.nextBytes(bytes); + return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); + } + + public static String sha256(String value) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest((value == null ? "" : value).getBytes(StandardCharsets.UTF_8)); + StringBuilder out = new StringBuilder(hash.length * 2); + for (byte b : hash) out.append(String.format("%02x", b)); + return out.toString(); + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("SHA-256 not available", e); + } + } + + private boolean constantTimeEquals(String a, String b) { + if (a == null || b == null) return false; + byte[] aa = a.getBytes(StandardCharsets.UTF_8); + byte[] bb = b.getBytes(StandardCharsets.UTF_8); + if (aa.length != bb.length) return false; + int diff = 0; + for (int i = 0; i < aa.length; i++) diff |= aa[i] ^ bb[i]; + return diff == 0; + } + + private String nullToEmpty(String value) { return value == null ? "" : value; } +} diff --git a/src/main/java/de/hehl/printservice/standalone/HttpUtil.java b/src/main/java/de/hehl/printservice/standalone/HttpUtil.java new file mode 100644 index 0000000..bac71ac --- /dev/null +++ b/src/main/java/de/hehl/printservice/standalone/HttpUtil.java @@ -0,0 +1,122 @@ +package de.hehl.printservice.standalone; + +import com.sun.net.httpserver.Headers; +import com.sun.net.httpserver.HttpExchange; +import de.hehl.printservice.model.ErrorResponse; +import de.hehl.printservice.service.JsonFiles; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; + +final class HttpUtil { + private HttpUtil() { + } + + static String body(HttpExchange exchange) throws IOException { + try (InputStream in = exchange.getRequestBody()) { + return new String(readAll(in), StandardCharsets.UTF_8); + } + } + + static byte[] readAll(InputStream in) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[8192]; + int len; + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + return out.toByteArray(); + } + + static void json(HttpExchange exchange, int status, Object value) throws IOException { + byte[] payload = JsonFiles.toJsonBytes(value); + send(exchange, status, "application/json; charset=utf-8", payload); + } + + static void text(HttpExchange exchange, int status, String contentType, String value) throws IOException { + send(exchange, status, contentType == null ? "text/plain; charset=utf-8" : contentType, (value == null ? "" : value).getBytes(StandardCharsets.UTF_8)); + } + + static void bytes(HttpExchange exchange, int status, String contentType, byte[] bytes) throws IOException { + send(exchange, status, contentType == null ? "application/octet-stream" : contentType, bytes == null ? new byte[0] : bytes); + } + + static void noContent(HttpExchange exchange) throws IOException { + addCommonHeaders(exchange.getResponseHeaders()); + exchange.sendResponseHeaders(204, -1); + exchange.close(); + } + + static void send(HttpExchange exchange, int status, String contentType, byte[] payload) throws IOException { + Headers headers = exchange.getResponseHeaders(); + addCommonHeaders(headers); + headers.set("Content-Type", contentType == null ? "application/octet-stream" : contentType); + exchange.sendResponseHeaders(status, payload.length); + try (OutputStream out = exchange.getResponseBody()) { + out.write(payload); + } + } + + static void error(HttpExchange exchange, Throwable t) throws IOException { + int status = t instanceof IllegalArgumentException ? 400 : t instanceof SecurityException ? 401 : 500; + String message = rootMessage(t); + json(exchange, status, new ErrorResponse(status, message)); + } + + static String rootMessage(Throwable throwable) { + Throwable current = throwable; + while (current.getCause() != null && current.getCause() != current) { + current = current.getCause(); + } + String message = current.getMessage(); + if (message == null || message.isBlank()) { + message = throwable.getClass().getSimpleName(); + } + return message; + } + + static void addCommonHeaders(Headers headers) { + headers.set("Access-Control-Allow-Origin", "*"); + headers.set("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, x-printservice-token"); + headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); + headers.set("Cache-Control", "no-store"); + } + + static String pathAfter(String requestPath, String prefix) { + if (requestPath == null || !requestPath.startsWith(prefix)) { + return ""; + } + String out = requestPath.substring(prefix.length()); + if (out.startsWith("/")) { + out = out.substring(1); + } + return decode(out); + } + + static String decode(String value) { + return URLDecoder.decode(value == null ? "" : value, StandardCharsets.UTF_8); + } + + static Map query(HttpExchange exchange) { + Map result = new LinkedHashMap<>(); + String raw = exchange.getRequestURI().getRawQuery(); + if (raw == null || raw.isBlank()) { + return result; + } + for (String part : raw.split("&")) { + int idx = part.indexOf('='); + if (idx < 0) { + result.put(decode(part), ""); + } else { + result.put(decode(part.substring(0, idx)), decode(part.substring(idx + 1))); + } + } + return result; + } +} diff --git a/src/main/java/de/hehl/printservice/standalone/PrintServiceApplication.java b/src/main/java/de/hehl/printservice/standalone/PrintServiceApplication.java new file mode 100644 index 0000000..f99cb4f --- /dev/null +++ b/src/main/java/de/hehl/printservice/standalone/PrintServiceApplication.java @@ -0,0 +1,99 @@ +package de.hehl.printservice.standalone; + +import com.sun.net.httpserver.HttpServer; +import de.hehl.printservice.service.ConfigPaths; + +import java.net.InetSocketAddress; +import java.nio.file.Files; +import java.time.Instant; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.Executors; + +public class PrintServiceApplication { + public static void main(String[] args) throws Exception { + Map arguments = parseArgs(args); + if (arguments.containsKey("hash-token")) { + System.out.println(AuthService.sha256(arguments.get("hash-token"))); + return; + } + String configDir = firstNonBlank(arguments.get("configDir"), arguments.get("config-dir"), System.getenv("PRINTSERVICE_CONFIG_DIR")); + if (configDir != null) { + System.setProperty(ConfigPaths.CONFIG_DIR_PROPERTY, configDir); + } + int port = Integer.parseInt(firstNonBlank(arguments.get("port"), System.getenv("PRINTSERVICE_PORT"), "8080")); + String host = firstNonBlank(arguments.get("host"), System.getenv("PRINTSERVICE_HOST"), "0.0.0.0"); + int threads = Integer.parseInt(firstNonBlank(arguments.get("threads"), System.getenv("PRINTSERVICE_THREADS"), "50")); + + initializeDirectories(); + AuthService authService = new AuthService(); + + HttpServer server = HttpServer.create(new InetSocketAddress(host, port), 0); + server.createContext("/api", new ApiHandler(authService)); + server.createContext("/", new StaticWebHandler()); + server.setExecutor(Executors.newFixedThreadPool(threads)); + + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + System.out.println("[printservice] shutdown requested at " + Instant.now()); + server.stop(3); + }, "printservice-shutdown")); + + server.start(); + System.out.println("[printservice] standalone started"); + System.out.println("[printservice] url : http://" + displayHost(host) + ":" + port + "/"); + System.out.println("[printservice] api : http://" + displayHost(host) + ":" + port + "/api"); + System.out.println("[printservice] config dir : " + ConfigPaths.baseDir()); + System.out.println("[printservice] auth file : " + ConfigPaths.authFile()); + System.out.println("[printservice] queue file : " + ConfigPaths.printJobsFile()); + System.out.println("[printservice] queue cfg : " + ConfigPaths.queueSettingsFile()); + } + + private static void initializeDirectories() throws Exception { + Files.createDirectories(ConfigPaths.baseDir()); + Files.createDirectories(ConfigPaths.templatesDir()); + Files.createDirectories(ConfigPaths.spoolDir()); + Files.createDirectories(ConfigPaths.archiveDir()); + Files.createDirectories(ConfigPaths.previewDir()); + Files.createDirectories(ConfigPaths.logsDir()); + Files.createDirectories(ConfigPaths.queueDir()); + } + + private static Map parseArgs(String[] args) { + Map map = new LinkedHashMap<>(); + if (args == null) { + return map; + } + for (String arg : args) { + if (arg == null || arg.isBlank()) { + continue; + } + String normalized = arg.startsWith("--") ? arg.substring(2) : arg; + int idx = normalized.indexOf('='); + if (idx < 0) { + map.put(normalized, "true"); + } else { + map.put(normalized.substring(0, idx), normalized.substring(idx + 1)); + } + } + return map; + } + + private static String firstNonBlank(String... values) { + if (values == null) { + return null; + } + for (String value : values) { + if (value != null && !value.isBlank()) { + return value.trim(); + } + } + return null; + } + + private static String displayHost(String host) { + if (host == null || host.equals("0.0.0.0") || host.equals("::")) { + return "localhost"; + } + return host; + } +} diff --git a/src/main/java/de/hehl/printservice/standalone/StaticWebHandler.java b/src/main/java/de/hehl/printservice/standalone/StaticWebHandler.java new file mode 100644 index 0000000..dd40947 --- /dev/null +++ b/src/main/java/de/hehl/printservice/standalone/StaticWebHandler.java @@ -0,0 +1,73 @@ +package de.hehl.printservice.standalone; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +public class StaticWebHandler implements HttpHandler { + private static final Map CONTENT_TYPES = new HashMap<>(); + + static { + CONTENT_TYPES.put(".html", "text/html; charset=utf-8"); + CONTENT_TYPES.put(".css", "text/css; charset=utf-8"); + CONTENT_TYPES.put(".js", "application/javascript; charset=utf-8"); + CONTENT_TYPES.put(".json", "application/json; charset=utf-8"); + CONTENT_TYPES.put(".png", "image/png"); + CONTENT_TYPES.put(".jpg", "image/jpeg"); + CONTENT_TYPES.put(".jpeg", "image/jpeg"); + CONTENT_TYPES.put(".svg", "image/svg+xml; charset=utf-8"); + CONTENT_TYPES.put(".ico", "image/x-icon"); + CONTENT_TYPES.put(".pdf", "application/pdf"); + } + + @Override + public void handle(HttpExchange exchange) throws IOException { + try { + if ("OPTIONS".equalsIgnoreCase(exchange.getRequestMethod())) { + HttpUtil.noContent(exchange); + return; + } + String path = URLDecoder.decode(exchange.getRequestURI().getPath(), StandardCharsets.UTF_8); + if (path == null || path.equals("/") || path.isBlank()) { + path = "/index.html"; + } + if (path.contains("..")) { + HttpUtil.text(exchange, 400, "text/plain; charset=utf-8", "Invalid path"); + return; + } + String resource = "web" + path; + try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource)) { + if (in == null) { + // SPA fallback: load index.html for unknown non-API routes. + try (InputStream index = Thread.currentThread().getContextClassLoader().getResourceAsStream("web/index.html")) { + if (index == null) { + HttpUtil.text(exchange, 404, "text/plain; charset=utf-8", "Not found"); + } else { + HttpUtil.bytes(exchange, 200, "text/html; charset=utf-8", HttpUtil.readAll(index)); + } + } + return; + } + HttpUtil.bytes(exchange, 200, contentType(path), HttpUtil.readAll(in)); + } + } catch (Throwable t) { + HttpUtil.error(exchange, t); + } + } + + private String contentType(String path) { + String lower = path == null ? "" : path.toLowerCase(); + for (Map.Entry entry : CONTENT_TYPES.entrySet()) { + if (lower.endsWith(entry.getKey())) { + return entry.getValue(); + } + } + return "application/octet-stream"; + } +} diff --git a/src/main/resources/examples/rest-cleanup-queue-older-than-days.curl.txt b/src/main/resources/examples/rest-cleanup-queue-older-than-days.curl.txt new file mode 100644 index 0000000..88967ee --- /dev/null +++ b/src/main/resources/examples/rest-cleanup-queue-older-than-days.curl.txt @@ -0,0 +1,4 @@ +curl -X POST "http://localhost:8080/api/queue/cleanup?olderThanDays=30" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d "{}" diff --git a/src/main/resources/examples/rest-clear-queue.curl.txt b/src/main/resources/examples/rest-clear-queue.curl.txt new file mode 100644 index 0000000..aed19ad --- /dev/null +++ b/src/main/resources/examples/rest-clear-queue.curl.txt @@ -0,0 +1,2 @@ +curl -X DELETE http://localhost:8080/api/queue \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/src/main/resources/examples/rest-disable-queue-for-privacy-request.json b/src/main/resources/examples/rest-disable-queue-for-privacy-request.json new file mode 100644 index 0000000..16f7117 --- /dev/null +++ b/src/main/resources/examples/rest-disable-queue-for-privacy-request.json @@ -0,0 +1,7 @@ +{ + "enabled": false, + "storeRequestsForReprint": false, + "autoCleanupEnabled": false, + "retentionDays": 0, + "maxStoredJobs": 0 +} diff --git a/src/main/resources/examples/rest-get-queue-settings.curl.txt b/src/main/resources/examples/rest-get-queue-settings.curl.txt new file mode 100644 index 0000000..7f97126 --- /dev/null +++ b/src/main/resources/examples/rest-get-queue-settings.curl.txt @@ -0,0 +1,2 @@ +curl -X GET http://localhost:8080/api/queue/settings \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/src/main/resources/examples/rest-update-queue-settings-request.json b/src/main/resources/examples/rest-update-queue-settings-request.json new file mode 100644 index 0000000..a578078 --- /dev/null +++ b/src/main/resources/examples/rest-update-queue-settings-request.json @@ -0,0 +1,7 @@ +{ + "enabled": true, + "storeRequestsForReprint": true, + "autoCleanupEnabled": true, + "retentionDays": 30, + "maxStoredJobs": 5000 +} diff --git a/src/main/resources/examples/rest-update-queue-settings.curl.txt b/src/main/resources/examples/rest-update-queue-settings.curl.txt new file mode 100644 index 0000000..abadcc0 --- /dev/null +++ b/src/main/resources/examples/rest-update-queue-settings.curl.txt @@ -0,0 +1,4 @@ +curl -X PUT http://localhost:8080/api/queue/settings \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-queue-settings-request.json diff --git a/src/main/resources/web/index.html b/src/main/resources/web/index.html index 5a25e5a..31dac87 100644 --- a/src/main/resources/web/index.html +++ b/src/main/resources/web/index.html @@ -36,6 +36,14 @@ .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-top: 12px; } .card { border: 1px solid #e2e8f0; border-radius: 10px; padding: 12px; background: #ffffff; } .codebox { white-space: pre-wrap; background: #111827; color: #f9fafb; border-radius: 8px; padding: 10px; font-family: Consolas, monospace; font-size: 12px; min-height: 60px; } + .actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 10px; } + .modal-backdrop { display:none; position:fixed; inset:0; background:rgba(15,23,42,.62); z-index:1000; padding:24px; overflow:auto; } + .modal-backdrop.open { display:block; } + .modal { background:white; max-width:980px; margin:30px auto; border-radius:14px; box-shadow:0 24px 60px rgba(0,0,0,.25); padding:20px; } + .modal header { background:transparent; color:#17202a; padding:0; display:flex; justify-content:space-between; gap:12px; align-items:center; } + .modal header h2 { margin:0; } + .close { background:#6b7280; } + .wide-table { display:block; overflow:auto; max-height:420px; border:1px solid #e5e7eb; border-radius:10px; } @media (max-width: 900px) { .two, .three { grid-template-columns: 1fr; } } @@ -97,34 +105,44 @@

1. Windows-/Server-Drucker-Assistent

- Der Assistent erkennt, ob der Service unter Windows und wahrscheinlich unter LocalSystem laeuft. Danach zeigt er die passenden Wege: gefundene Spooler-Drucker nutzen, lokale TCP/IP-Drucker serverweit installieren, Printserver-Drucker maschinenweit verbinden oder ZPL/EPL direkt per RAW_TCP drucken. + Der Assistent erkennt, ob der Service unter Windows und wahrscheinlich unter LocalSystem laeuft. Die gefundene Druckerliste bleibt hier im Vordergrund. RAW_TCP und Windows-Kommandos sind in separate Dialoge ausgelagert, damit die Liste gut lesbar bleibt. +
+
+ + + +
- -
Noch keine Diagnose geladen.
-
-
-

A. Gefundene Windows-Spooler-/CUPS-Drucker

-
Geeignet fuer PDF, HTML->PDF, PDF_TEMPLATE und auch RAW-Druck ueber installierte Treiber.
-
SystemnameStandardAktion
-
-
-

B. RAW_TCP fuer ZPL/EPL

-
Schnellster Weg fuer Etikettendrucker. Umgeht den Windows-Spooler und funktioniert auch bei LocalSystem.
- - - - -
-
-

C. Windows-Kommandos

-
Diese Hinweise werden vom Server geliefert und passen zum Dienstkontext.
-
Noch nicht geladen.
-
Noch nicht geladen.
-
+

A. Gefundene Windows-Spooler-/CUPS-Drucker

+
Geeignet fuer PDF, HTML->PDF, PDF_TEMPLATE und auch RAW-Druck ueber installierte Treiber. Die Liste ist absichtlich breit und scrollbar, damit lange Windows-Druckernamen lesbar bleiben.
+
+
SystemnameStandardAktion
+ + + +

2. Eindeutigen Druckernamen zuweisen

@@ -246,10 +264,28 @@
-

5. Druckwarteschlange / Druckhistorie und Redruck

+

5. Druckwarteschlange / Druckhistorie, Datenschutz und Redruck

- Der Printservice speichert jeden gesendeten Druckjob unter queue/print-jobs.json. Damit kann ein Benutzer seine eigenen Jobs erneut drucken. Ein Admin kann mit full=true die volle Liste abrufen und filtern. + Die Queue ist eine eigene persistente Druckhistorie unter queue/print-jobs.json. Sie ist nicht die Windows-Spooler-Warteschlange. Aus Datenschutzgruenden kann sie vollstaendig deaktiviert werden. Wird der Originalrequest nicht gespeichert, bleiben nur Metadaten erhalten und Redruck ist fuer neue Jobs nicht moeglich.
+

Queue-Einstellungen

+
+

Aus = keine Job-Historie, kein Redruck, weniger personenbezogene Daten.
+

Aus = nur Metadaten, keine JSON-Druckdaten.
+
+
+
+
+
+
+
+
Noch nicht geladen.
+

Queue leeren / bereinigen

+
+ + +
+

Queue abrufen und Redruck

@@ -261,8 +297,8 @@

-
ZeitStatusUserDruckerVorlageKopienJob-ID
-

Job-Details

Noch kein Job ausgewählt.
+
ZeitStatusUserDruckerVorlageKopienJob-ID
+

Job-Details

Noch kein Job ausgewaehlt.
@@ -270,6 +306,9 @@ const appBase = window.location.pathname.endsWith('/') ? window.location.pathname : window.location.pathname.replace(/\/[^\/]*$/, '/'); const api = appBase.replace(/\/$/, '') + '/api'; function setStatus(text, isError = false) { const box = document.getElementById('status'); box.textContent = text; box.style.borderLeftColor = isError ? '#dc2626' : '#2563eb'; box.style.background = isError ? '#fef2f2' : '#eff6ff'; } +function openModal(id) { const el = document.getElementById(id); if (el) el.classList.add('open'); } +function closeModal(id) { const el = document.getElementById(id); if (el) el.classList.remove('open'); } +document.addEventListener('keydown', e => { if (e.key === 'Escape') document.querySelectorAll('.modal-backdrop.open').forEach(m => m.classList.remove('open')); }); function authHeaders(extra = {}) { const token = localStorage.getItem('printservice.token') || valOrEmpty('apiToken'); const headers = { ...(extra || {}) }; if (token) headers['X-Printservice-Token'] = token; return headers; } async function request(path, options = {}) { const baseHeaders = { 'Content-Type': 'application/json', ...(options.headers || {}) }; const response = await fetch(api + path, { headers: authHeaders(baseHeaders), ...options }); if (!response.ok) { let message = response.status + ' ' + response.statusText; try { const err = await response.json(); message = err.message || message; } catch (ignore) {} throw new Error(message); } if (response.status === 204) return null; const contentType = response.headers.get('content-type') || ''; if (contentType.includes('application/json')) return response.json(); return response.text(); } function saveToken() { localStorage.setItem('printservice.token', val('apiToken')); setStatus('Token lokal im Browser gespeichert.'); } @@ -376,7 +415,11 @@ function htmlFromDesigner(html) { } function sourceToDesigner() { document.getElementById('htmlDesigner').innerHTML = htmlForDesigner(val('templateContent')); } function designerToSource() { document.getElementById('templateContent').value = htmlFromDesigner(document.getElementById('htmlDesigner').innerHTML); } -async function loadQueue() { try { const params = new URLSearchParams(); if (val('queueUser')) params.set('user', val('queueUser')); if (val('queueStatus')) params.set('status', val('queueStatus')); if (val('queuePrinterAlias')) params.set('printerAlias', val('queuePrinterAlias')); if (val('queueTemplateName')) params.set('templateName', val('queueTemplateName')); if (val('queueLimit')) params.set('limit', val('queueLimit')); if (document.getElementById('queueFull').checked) params.set('full','true'); if (document.getElementById('queueIncludeRequest').checked) params.set('includeRequest','true'); const q = await request('/queue?' + params.toString(), { headers: {} }); const body = document.getElementById('queueBody'); body.innerHTML = ''; (q.jobs || []).forEach(job => { const tr = document.createElement('tr'); tr.innerHTML = `${escapeHtml(job.createdAt || '')}${escapeHtml(job.status || '')}${escapeHtml(job.userName || '')}${escapeHtml(job.printerAlias || '')}
${escapeHtml(job.systemName || '')}${escapeHtml(job.templateName || '')}${escapeHtml(String(job.copies || ''))}${escapeHtml(job.jobId || '')}`; const td = document.createElement('td'); const details = document.createElement('button'); details.textContent = 'Details'; details.onclick = () => showQueueJob(job.jobId); const reprint = document.createElement('button'); reprint.textContent = 'Redruck'; reprint.className = 'success'; reprint.onclick = () => reprintJob(job.jobId); td.appendChild(details); td.appendChild(reprint); tr.appendChild(td); body.appendChild(tr); }); document.getElementById('queueDetails').textContent = JSON.stringify(q, null, 2); setStatus('Druckwarteschlange geladen: ' + q.returned + ' von ' + q.total); } catch(e) { setStatus(e.message, true); } } +async function loadQueueSettings() { try { const s = await request('/queue/settings'); document.getElementById('queueEnabled').checked = !!s.enabled; document.getElementById('queueStoreRequests').checked = !!s.storeRequestsForReprint; document.getElementById('queueAutoCleanup').checked = !!s.autoCleanupEnabled; document.getElementById('queueRetentionDays').value = s.retentionDays ?? 30; document.getElementById('queueMaxStoredJobs').value = s.maxStoredJobs ?? 5000; document.getElementById('queueSettingsInfo').textContent = JSON.stringify(s, null, 2); setStatus('Queue-Einstellungen geladen.'); } catch(e) { document.getElementById('queueSettingsInfo').textContent = e.message; } } +async function saveQueueSettings() { try { const payload = { enabled: document.getElementById('queueEnabled').checked, storeRequestsForReprint: document.getElementById('queueStoreRequests').checked, autoCleanupEnabled: document.getElementById('queueAutoCleanup').checked, retentionDays: Number(val('queueRetentionDays') || 0), maxStoredJobs: Number(val('queueMaxStoredJobs') || 0) }; const s = await request('/queue/settings', { method:'PUT', body: JSON.stringify(payload) }); document.getElementById('queueSettingsInfo').textContent = JSON.stringify(s, null, 2); setStatus(s.enabled ? 'Queue-Einstellungen gespeichert.' : 'Queue deaktiviert: neue Druckjobs werden nicht gespeichert.'); await loadQueue(); } catch(e) { setStatus(e.message, true); } } +async function clearQueue() { try { if (!confirm('Druckwarteschlange wirklich komplett leeren? Redruck der gelöschten Jobs ist danach nicht mehr möglich.')) return; const result = await request('/queue', { method:'DELETE' }); document.getElementById('queueDetails').textContent = JSON.stringify(result, null, 2); setStatus('Queue geleert: ' + result.removed + ' Jobs entfernt.'); await loadQueue(); } catch(e) { setStatus(e.message, true); } } +async function cleanupQueueOlderThanDays() { try { const days = Number(val('queueRetentionDays') || 0); if (!confirm('Jobs älter als ' + days + ' Tage löschen?')) return; const result = await request('/queue/cleanup?olderThanDays=' + encodeURIComponent(days), { method:'POST', body:'{}' }); document.getElementById('queueDetails').textContent = JSON.stringify(result, null, 2); setStatus('Queue bereinigt: ' + result.removed + ' Jobs entfernt.'); await loadQueue(); } catch(e) { setStatus(e.message, true); } } +async function loadQueue() { try { const params = new URLSearchParams(); if (val('queueUser')) params.set('user', val('queueUser')); if (val('queueStatus')) params.set('status', val('queueStatus')); if (val('queuePrinterAlias')) params.set('printerAlias', val('queuePrinterAlias')); if (val('queueTemplateName')) params.set('templateName', val('queueTemplateName')); if (val('queueLimit')) params.set('limit', val('queueLimit')); if (document.getElementById('queueFull').checked) params.set('full','true'); if (document.getElementById('queueIncludeRequest').checked) params.set('includeRequest','true'); const q = await request('/queue?' + params.toString(), { headers: {} }); const body = document.getElementById('queueBody'); body.innerHTML = ''; (q.jobs || []).forEach(job => { const tr = document.createElement('tr'); tr.innerHTML = `${escapeHtml(job.createdAt || '')}${escapeHtml(job.status || '')}${escapeHtml(job.userName || '')}${escapeHtml(job.printerAlias || '')}
${escapeHtml(job.systemName || '')}${escapeHtml(job.templateName || '')}${escapeHtml(String(job.copies || ''))}${escapeHtml(job.jobId || '')}`; const td = document.createElement('td'); const details = document.createElement('button'); details.textContent = 'Details'; details.onclick = () => showQueueJob(job.jobId); td.appendChild(details); const reprint = document.createElement('button'); reprint.textContent = q.storeRequestsForReprint ? 'Redruck' : 'Redruck aus'; reprint.className = q.storeRequestsForReprint ? 'success' : 'secondary'; reprint.disabled = !q.storeRequestsForReprint; reprint.onclick = () => reprintJob(job.jobId); td.appendChild(reprint); tr.appendChild(td); body.appendChild(tr); }); document.getElementById('queueDetails').textContent = JSON.stringify(q, null, 2); setStatus((q.message || 'Druckwarteschlange geladen') + ' - ' + q.returned + ' von ' + q.total); } catch(e) { setStatus(e.message, true); } } async function showQueueJob(jobId) { try { const job = await request('/queue/' + encodeURIComponent(jobId)); document.getElementById('queueDetails').textContent = JSON.stringify(job, null, 2); } catch(e) { setStatus(e.message, true); } } async function reprintJob(jobId) { try { const payload = {}; const c = prompt('Kopien für Redruck leer lassen = Original verwenden:', ''); if (c && c.trim()) payload.copies = Number(c); const result = await request('/queue/' + encodeURIComponent(jobId) + '/reprint', { method:'POST', body: JSON.stringify(payload) }); document.getElementById('printResult').textContent = JSON.stringify(result, null, 2); setStatus('Redruck gesendet: ' + result.jobId + ' aus Original ' + jobId); await loadQueue(); } catch(e) { setStatus(e.message, true); } } async function loadBarcodeFormats() { try { const list = await request('/barcodes/formats'); document.getElementById('barcodeFormats').innerHTML = list.map(f => `${escapeHtml(f.name)} · ${escapeHtml(f.type)} ${escapeHtml(f.description)}`).join('
'); } catch(e) { setStatus(e.message, true); } } @@ -393,7 +436,7 @@ function val(id) { return document.getElementById(id).value; } function valOrEmpty(id) { const el = document.getElementById(id); return el ? el.value : ''; } document.getElementById('apiToken').value = localStorage.getItem('printservice.token') || ''; loadAuthStatus(); -insertHtmlSample(); togglePrinterTypeFields(); loadPrinterDiagnostics(); loadPrinterAliases(); loadTemplates(); loadBarcodeFormats(); loadQueue(); +insertHtmlSample(); togglePrinterTypeFields(); loadPrinterDiagnostics(); loadPrinterAliases(); loadTemplates(); loadBarcodeFormats(); loadQueueSettings(); loadQueue(); diff --git a/target/classes/de/hehl/printservice/model/AuthConfigUpdateRequest.class b/target/classes/de/hehl/printservice/model/AuthConfigUpdateRequest.class new file mode 100644 index 0000000..27e3900 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthConfigUpdateRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthConfiguration.class b/target/classes/de/hehl/printservice/model/AuthConfiguration.class new file mode 100644 index 0000000..0239d1b Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthConfiguration.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthIdentity.class b/target/classes/de/hehl/printservice/model/AuthIdentity.class new file mode 100644 index 0000000..b377ae4 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthIdentity.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthStatus.class b/target/classes/de/hehl/printservice/model/AuthStatus.class new file mode 100644 index 0000000..3781da5 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthStatus.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthToken.class b/target/classes/de/hehl/printservice/model/AuthToken.class new file mode 100644 index 0000000..279a9be Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthToken.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthUserRequest.class b/target/classes/de/hehl/printservice/model/AuthUserRequest.class new file mode 100644 index 0000000..ea30731 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthUserRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/AuthUserResponse.class b/target/classes/de/hehl/printservice/model/AuthUserResponse.class new file mode 100644 index 0000000..7016fc2 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/AuthUserResponse.class differ diff --git a/target/classes/de/hehl/printservice/model/BarcodeFormatInfo.class b/target/classes/de/hehl/printservice/model/BarcodeFormatInfo.class new file mode 100644 index 0000000..504da8a Binary files /dev/null and b/target/classes/de/hehl/printservice/model/BarcodeFormatInfo.class differ diff --git a/target/classes/de/hehl/printservice/model/CreateTemplateRequest.class b/target/classes/de/hehl/printservice/model/CreateTemplateRequest.class new file mode 100644 index 0000000..3cf8155 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/CreateTemplateRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/ErrorResponse.class b/target/classes/de/hehl/printservice/model/ErrorResponse.class new file mode 100644 index 0000000..25e9dae Binary files /dev/null and b/target/classes/de/hehl/printservice/model/ErrorResponse.class differ diff --git a/target/classes/de/hehl/printservice/model/PdfTableColumn.class b/target/classes/de/hehl/printservice/model/PdfTableColumn.class new file mode 100644 index 0000000..f24755c Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PdfTableColumn.class differ diff --git a/target/classes/de/hehl/printservice/model/PdfTemplateField.class b/target/classes/de/hehl/printservice/model/PdfTemplateField.class new file mode 100644 index 0000000..9f7328b Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PdfTemplateField.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintJobRecord.class b/target/classes/de/hehl/printservice/model/PrintJobRecord.class new file mode 100644 index 0000000..5d0d4a8 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintJobRecord.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintQueueMaintenanceResponse.class b/target/classes/de/hehl/printservice/model/PrintQueueMaintenanceResponse.class new file mode 100644 index 0000000..173af3d Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintQueueMaintenanceResponse.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintQueueResponse.class b/target/classes/de/hehl/printservice/model/PrintQueueResponse.class new file mode 100644 index 0000000..268ba24 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintQueueResponse.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintQueueSettings.class b/target/classes/de/hehl/printservice/model/PrintQueueSettings.class new file mode 100644 index 0000000..9b60f3d Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintQueueSettings.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.class b/target/classes/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.class new file mode 100644 index 0000000..c82dec3 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintRequest.class b/target/classes/de/hehl/printservice/model/PrintRequest.class new file mode 100644 index 0000000..cb4101f Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/PrintResponse.class b/target/classes/de/hehl/printservice/model/PrintResponse.class new file mode 100644 index 0000000..5f34b28 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrintResponse.class differ diff --git a/target/classes/de/hehl/printservice/model/PrinterInfo.class b/target/classes/de/hehl/printservice/model/PrinterInfo.class new file mode 100644 index 0000000..ec6f6ea Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrinterInfo.class differ diff --git a/target/classes/de/hehl/printservice/model/PrinterMapping.class b/target/classes/de/hehl/printservice/model/PrinterMapping.class new file mode 100644 index 0000000..eaa5215 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/PrinterMapping.class differ diff --git a/target/classes/de/hehl/printservice/model/RegisterPrinterRequest.class b/target/classes/de/hehl/printservice/model/RegisterPrinterRequest.class new file mode 100644 index 0000000..9951bd7 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/RegisterPrinterRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/RenderedDocument.class b/target/classes/de/hehl/printservice/model/RenderedDocument.class new file mode 100644 index 0000000..340ef6a Binary files /dev/null and b/target/classes/de/hehl/printservice/model/RenderedDocument.class differ diff --git a/target/classes/de/hehl/printservice/model/ReprintRequest.class b/target/classes/de/hehl/printservice/model/ReprintRequest.class new file mode 100644 index 0000000..7178686 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/ReprintRequest.class differ diff --git a/target/classes/de/hehl/printservice/model/SystemDiagnostics.class b/target/classes/de/hehl/printservice/model/SystemDiagnostics.class new file mode 100644 index 0000000..69488df Binary files /dev/null and b/target/classes/de/hehl/printservice/model/SystemDiagnostics.class differ diff --git a/target/classes/de/hehl/printservice/model/TemplateInfo.class b/target/classes/de/hehl/printservice/model/TemplateInfo.class new file mode 100644 index 0000000..2c906ba Binary files /dev/null and b/target/classes/de/hehl/printservice/model/TemplateInfo.class differ diff --git a/target/classes/de/hehl/printservice/model/WindowsPrinterCommandExamples.class b/target/classes/de/hehl/printservice/model/WindowsPrinterCommandExamples.class new file mode 100644 index 0000000..715d615 Binary files /dev/null and b/target/classes/de/hehl/printservice/model/WindowsPrinterCommandExamples.class differ diff --git a/target/classes/de/hehl/printservice/model/WindowsPrinterDiagnostics.class b/target/classes/de/hehl/printservice/model/WindowsPrinterDiagnostics.class new file mode 100644 index 0000000..ae8203d Binary files /dev/null and b/target/classes/de/hehl/printservice/model/WindowsPrinterDiagnostics.class differ diff --git a/target/classes/de/hehl/printservice/service/BarcodeExpression.class b/target/classes/de/hehl/printservice/service/BarcodeExpression.class new file mode 100644 index 0000000..453bd31 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/BarcodeExpression.class differ diff --git a/target/classes/de/hehl/printservice/service/BarcodeService.class b/target/classes/de/hehl/printservice/service/BarcodeService.class new file mode 100644 index 0000000..fe52141 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/BarcodeService.class differ diff --git a/target/classes/de/hehl/printservice/service/ConfigPaths.class b/target/classes/de/hehl/printservice/service/ConfigPaths.class new file mode 100644 index 0000000..8eaaeae Binary files /dev/null and b/target/classes/de/hehl/printservice/service/ConfigPaths.class differ diff --git a/target/classes/de/hehl/printservice/service/Docx4jFoConverter.class b/target/classes/de/hehl/printservice/service/Docx4jFoConverter.class new file mode 100644 index 0000000..cbcfe3a Binary files /dev/null and b/target/classes/de/hehl/printservice/service/Docx4jFoConverter.class differ diff --git a/target/classes/de/hehl/printservice/service/DocxTemplateRenderer.class b/target/classes/de/hehl/printservice/service/DocxTemplateRenderer.class new file mode 100644 index 0000000..cb49242 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/DocxTemplateRenderer.class differ diff --git a/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer$NormalizedHtml.class b/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer$NormalizedHtml.class new file mode 100644 index 0000000..88bab3e Binary files /dev/null and b/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer$NormalizedHtml.class differ diff --git a/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer.class b/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer.class new file mode 100644 index 0000000..5aa750d Binary files /dev/null and b/target/classes/de/hehl/printservice/service/HtmlDocumentNormalizer.class differ diff --git a/target/classes/de/hehl/printservice/service/JsonFiles.class b/target/classes/de/hehl/printservice/service/JsonFiles.class new file mode 100644 index 0000000..2b9d7ca Binary files /dev/null and b/target/classes/de/hehl/printservice/service/JsonFiles.class differ diff --git a/target/classes/de/hehl/printservice/service/LibreOfficeConverter.class b/target/classes/de/hehl/printservice/service/LibreOfficeConverter.class new file mode 100644 index 0000000..7f1b9cc Binary files /dev/null and b/target/classes/de/hehl/printservice/service/LibreOfficeConverter.class differ diff --git a/target/classes/de/hehl/printservice/service/NameValidator.class b/target/classes/de/hehl/printservice/service/NameValidator.class new file mode 100644 index 0000000..ef69bec Binary files /dev/null and b/target/classes/de/hehl/printservice/service/NameValidator.class differ diff --git a/target/classes/de/hehl/printservice/service/PdfDocumentService.class b/target/classes/de/hehl/printservice/service/PdfDocumentService.class new file mode 100644 index 0000000..f6308dc Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PdfDocumentService.class differ diff --git a/target/classes/de/hehl/printservice/service/PdfTemplateRenderer$FieldBox.class b/target/classes/de/hehl/printservice/service/PdfTemplateRenderer$FieldBox.class new file mode 100644 index 0000000..5cfa417 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PdfTemplateRenderer$FieldBox.class differ diff --git a/target/classes/de/hehl/printservice/service/PdfTemplateRenderer.class b/target/classes/de/hehl/printservice/service/PdfTemplateRenderer.class new file mode 100644 index 0000000..df54aa1 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PdfTemplateRenderer.class differ diff --git a/target/classes/de/hehl/printservice/service/PrintJobService.class b/target/classes/de/hehl/printservice/service/PrintJobService.class new file mode 100644 index 0000000..cd04b6d Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PrintJobService.class differ diff --git a/target/classes/de/hehl/printservice/service/PrintQueueService$1.class b/target/classes/de/hehl/printservice/service/PrintQueueService$1.class new file mode 100644 index 0000000..ca0741b Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PrintQueueService$1.class differ diff --git a/target/classes/de/hehl/printservice/service/PrintQueueService.class b/target/classes/de/hehl/printservice/service/PrintQueueService.class new file mode 100644 index 0000000..ef80599 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PrintQueueService.class differ diff --git a/target/classes/de/hehl/printservice/service/PrinterDiagnosticsService.class b/target/classes/de/hehl/printservice/service/PrinterDiagnosticsService.class new file mode 100644 index 0000000..bd5b570 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PrinterDiagnosticsService.class differ diff --git a/target/classes/de/hehl/printservice/service/PrinterRegistry.class b/target/classes/de/hehl/printservice/service/PrinterRegistry.class new file mode 100644 index 0000000..ab90cd1 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/PrinterRegistry.class differ diff --git a/target/classes/de/hehl/printservice/service/RawTcpPrinterClient.class b/target/classes/de/hehl/printservice/service/RawTcpPrinterClient.class new file mode 100644 index 0000000..6debcc5 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/RawTcpPrinterClient.class differ diff --git a/target/classes/de/hehl/printservice/service/RawTcpPrinterService.class b/target/classes/de/hehl/printservice/service/RawTcpPrinterService.class new file mode 100644 index 0000000..06c92b0 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/RawTcpPrinterService.class differ diff --git a/target/classes/de/hehl/printservice/service/TemplateRenderer.class b/target/classes/de/hehl/printservice/service/TemplateRenderer.class new file mode 100644 index 0000000..d6f08ed Binary files /dev/null and b/target/classes/de/hehl/printservice/service/TemplateRenderer.class differ diff --git a/target/classes/de/hehl/printservice/service/TemplateService$FieldDocument.class b/target/classes/de/hehl/printservice/service/TemplateService$FieldDocument.class new file mode 100644 index 0000000..d309621 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/TemplateService$FieldDocument.class differ diff --git a/target/classes/de/hehl/printservice/service/TemplateService.class b/target/classes/de/hehl/printservice/service/TemplateService.class new file mode 100644 index 0000000..3cfafa0 Binary files /dev/null and b/target/classes/de/hehl/printservice/service/TemplateService.class differ diff --git a/target/classes/de/hehl/printservice/standalone/ApiHandler.class b/target/classes/de/hehl/printservice/standalone/ApiHandler.class new file mode 100644 index 0000000..0244920 Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/ApiHandler.class differ diff --git a/target/classes/de/hehl/printservice/standalone/AuthService$Scope.class b/target/classes/de/hehl/printservice/standalone/AuthService$Scope.class new file mode 100644 index 0000000..72c2165 Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/AuthService$Scope.class differ diff --git a/target/classes/de/hehl/printservice/standalone/AuthService.class b/target/classes/de/hehl/printservice/standalone/AuthService.class new file mode 100644 index 0000000..8f6e598 Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/AuthService.class differ diff --git a/target/classes/de/hehl/printservice/standalone/HttpUtil.class b/target/classes/de/hehl/printservice/standalone/HttpUtil.class new file mode 100644 index 0000000..d0062d5 Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/HttpUtil.class differ diff --git a/target/classes/de/hehl/printservice/standalone/PrintServiceApplication.class b/target/classes/de/hehl/printservice/standalone/PrintServiceApplication.class new file mode 100644 index 0000000..ec06520 Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/PrintServiceApplication.class differ diff --git a/target/classes/de/hehl/printservice/standalone/StaticWebHandler.class b/target/classes/de/hehl/printservice/standalone/StaticWebHandler.class new file mode 100644 index 0000000..12fdcce Binary files /dev/null and b/target/classes/de/hehl/printservice/standalone/StaticWebHandler.class differ diff --git a/target/classes/examples/lieferschein_docx_rendered_example.docx b/target/classes/examples/lieferschein_docx_rendered_example.docx new file mode 100644 index 0000000..8f48d90 Binary files /dev/null and b/target/classes/examples/lieferschein_docx_rendered_example.docx differ diff --git a/target/classes/examples/lieferschein_docx_rendered_example.pdf b/target/classes/examples/lieferschein_docx_rendered_example.pdf new file mode 100644 index 0000000..ad3b5db Binary files /dev/null and b/target/classes/examples/lieferschein_docx_rendered_example.pdf differ diff --git a/target/classes/examples/lieferschein_docx_template.docx b/target/classes/examples/lieferschein_docx_template.docx new file mode 100644 index 0000000..81f2b25 Binary files /dev/null and b/target/classes/examples/lieferschein_docx_template.docx differ diff --git a/target/classes/examples/lieferschein_html_table.html.tpl b/target/classes/examples/lieferschein_html_table.html.tpl new file mode 100644 index 0000000..8ee8148 --- /dev/null +++ b/target/classes/examples/lieferschein_html_table.html.tpl @@ -0,0 +1,58 @@ + + + + + Lieferschein HTML Tabelle + + + +
+
+

Lieferschein

+
Nr.: {{text:deliveryNumber}}
+
Datum: {{text:deliveryDate}}
+
+ QR +
+ +
Kunde: {{text:customer.name}}
+ + + + + + + + + + + + + + {{#each:items}} + + + + + + + + + {{/each}} + +
Pos.ArtikelBezeichnungMengeSeriennummerBarcode
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}{{text:serialNumber}}Barcode
+ + diff --git a/target/classes/examples/lieferschein_html_table_rendered_example.pdf b/target/classes/examples/lieferschein_html_table_rendered_example.pdf new file mode 100644 index 0000000..ff055d6 --- /dev/null +++ b/target/classes/examples/lieferschein_html_table_rendered_example.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20260608180457+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260608180457+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1266 +>> +stream +Gb"/'9lo&I&A@C2i2C8-gKe4WeQ^h)m^,a;`&dUTfW_L1Uo1RVSa!?HK%(TJ#u[04g)5_lBa?i6?!nKG#a.NbW;XE4PWGG8mscNM>"rlL0sI*OWje2>+!Xr3fn'SI=aA>dOhH^;DJZqS]9+eoMH#=36DtWQ9W3*2UDP*l';U+uUW/YLFIS`^lh`N@^Jg?"C@XufoeGIA8%Ee'@J#9f4kn\%j4'N6?,5gDdSD`LhnTc)]lq80k?)"rSS?UA$k]K+bhfEkO5G>Vc)[2K0E=/T,BjUnF^Et$Q\4/>T4b-#(Y+kEQh)h'<3KAM'4;(o&1MB>ph3C2&:*[(UUL1K5'7q/,dJ7i=]rI0L=M\%@+___9iAI(HJr-+gb!+k*LpYs"`9b^jagb#6(8(Hlr&gmH[:GF'1Y:Dn*>7I\(?L\&g3%XE%CBTI@'Zu)q$uFIQ7@-C8Ru5k>de9rS\k#A(c7I@XW-sT5O?u6kW(7;&bV7eC:7j,I1u2pM833XZI_bL0D)XpV.[0q/]FU^8,A,VYbFXSP=ag$BI`SU#];D59[1%kO*j[.;1==)o:bUZ].#hKCja)Sl%"T_7$]:C/M)iMEd=cUrF:5Zid&=440B-`.9l2WGF',!p9cU@V^'%.#X*ZU?I]D^lGqgOn!rAJh@sOK!)$42D\1ZABLPFjNsHJRsk\6m4DF.2L_dZuBE&pBASTaVhDa\BO3TH8Cf^49inX4tJW[%D7*_&$tDtSj$+L2tJ8YAuHl"=D*@d04h!pLPXjHRiATHk[@j/i5Eb7$u9Gu)Bq,s1F_3T=:"Pl!sd`T-n-lK`N9:^_4&BKSBEBKXdt53=OTP^KGcV'mlo-;'gQm7njH&t+s)F<\&8/H^PHY`(:Jg-,>8-^bNsNU2k'H>%9]_Z?b5DbA5,o)1TNM\K_-DuYendstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000872 00000 n +0000000931 00000 n +trailer +<< +/ID +[<03ba57a25334291279fbbf61957007c7><03ba57a25334291279fbbf61957007c7>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +2288 +%%EOF diff --git a/target/classes/examples/lieferschein_pdf_fields.json b/target/classes/examples/lieferschein_pdf_fields.json new file mode 100644 index 0000000..1b4a393 --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_fields.json @@ -0,0 +1,128 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 35, + "y": 52, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 35, + "y": 60, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 35, + "y": 68, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 35, + "y": 76, + "width": 70, + "height": 6, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "customer", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 35, + "y": 84, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 25, + "y": 94, + "width": 90, + "height": 18 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 155, + "y": 38, + "width": 32, + "height": 32 + }, + { + "name": "item1Pos", + "type": "TEXT", + "value": "{{items.0.pos}}", + "page": 1, + "x": 22, + "y": 142, + "width": 15, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Material", + "type": "TEXT", + "value": "{{items.0.material}}", + "page": 1, + "x": 40, + "y": 142, + "width": 55, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Description", + "type": "TEXT", + "value": "{{items.0.description}}", + "page": 1, + "x": 100, + "y": 142, + "width": 60, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Quantity", + "type": "TEXT", + "value": "{{items.0.quantity}}", + "page": 1, + "x": 165, + "y": 142, + "width": 20, + "height": 5, + "fontSize": 9, + "align": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/lieferschein_pdf_simple_fields.json b/target/classes/examples/lieferschein_pdf_simple_fields.json new file mode 100644 index 0000000..99733c0 --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_simple_fields.json @@ -0,0 +1,128 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 55, + "y": 30, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 145, + "y": 30, + "width": 47, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 45, + "y": 50, + "width": 147, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerAddress", + "type": "TEXT", + "value": "{{customer.address}}", + "page": 1, + "x": 45, + "y": 63, + "width": 147, + "height": 8, + "fontSize": 9 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 55, + "y": 87, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 55, + "y": 101, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 145, + "y": 101, + "width": 47, + "height": 8, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 55, + "y": 115, + "width": 70, + "height": 8, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 18, + "y": 135, + "width": 100, + "height": 25 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 145, + "y": 125, + "width": 35, + "height": 35 + }, + { + "name": "note", + "type": "TEXT", + "value": "{{note}}", + "page": 1, + "x": 18, + "y": 205, + "width": 174, + "height": 18, + "fontSize": 9, + "multiline": true + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/lieferschein_pdf_simple_rendered_example.pdf b/target/classes/examples/lieferschein_pdf_simple_rendered_example.pdf new file mode 100644 index 0000000..ddef77d --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_simple_rendered_example.pdf @@ -0,0 +1,80 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194637+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194637+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Lieferschein PDF_TEMPLATE Demo - gerendert) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 1 /Kids [ 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1941 +>> +stream +Gatn)gMRrh&;KZH'YJ77R-".j]=9j8Xck)lJ6Xp"Tu==5`7h(=#mL1tSR%(>bAsOR*$8`Eq9ZVPSf.R49/RHQ>Ioa8it#)GMGV%flY'E]9oM^e1X%89(VIt2Z:jsO1+'Q#NBE(n?@u&_/goQ(+bg"D.kS#T=V)QYL8T)VtooL4Pd%!\9=nEet9$4_&/U2\h^U[:%YR95=7[lcop8B:i0C\pco(sNUG'37=V'"JppKGBS(K#OkZ$PRj==_[)K@mZfNE;n5?9hpK047E.3$WP3_80#h:pW#u3/$KbfR]]gL1k.OE5O">TT5<$e6,g;?lc0N=bo&/"Z99#W%%WoF-K&6dC-kE%5hT75eo.Z,3,m4&?ndn$!8&AFr$s9J;&8j_]GV5Dd`h;S_(0O,1f+BgS+uU^JGRHIUO9(r.6NV>43oq6:k"L&LCk@>?fa!-mXpX'U!/(9>d;+lp-G[0V'*.3t*TZb5C3HT_Wu6W?C(>QP+d,5]T!03n]:b[F!8#\HWCatlFb_n+-;.KhHO-8lY49t$)[NUK^)Z_Jk<$p\`k[d,[[]&mjPs];-NCQr8"jFg.."YA1Z;-I-H*=)*>%M;K@-r.ALhbfYgV#)ACA/'Z$S9U,Vnd>.GNom#ZneYTOMV9AKHXd_\\"D4db#Nlb[ROcmJA^D.k?4%o&XLo;t;#),#!`o-;6T_>>_@HTG&gVBo,)bC8*s04J?:Nig('t&OYXf>0MS(^&TLeELp]a/t(53sdrB`paT^ikOXKkp!Sje7XB.rrh>GnA2?P'#q^b<>r.1VphHX)R-PAQ+=ga;5u>#*Bi?3DfAJ7mHtV`<0UJR>p\&[4mo^Knm?O4Tu):;9;l@%gWU=XB,a=e!aTO!p<,4eXosO2."cF4]4W]C+.+]omm*d/`YPih8c#r=Hrkj/5YT1eQe:qhS2NPB73FRZ!eXgIROhD\P*jbH@s7*:n`7E`ZHZOK+e*qZDLHfD:-!Pu9\*<6o[[Qa4bJ-*(qL?ujAp)]k2YdkU&"G3~>endstream +endobj +xref +0 10 +0000000000 65535 f +0000000061 00000 n +0000000112 00000 n +0000000219 00000 n +0000000331 00000 n +0000000440 00000 n +0000000643 00000 n +0000000711 00000 n +0000001006 00000 n +0000001065 00000 n +trailer +<< +/ID +[<756205e546b68225b6eb780b6d82060b><756205e546b68225b6eb780b6d82060b>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 7 0 R +/Root 6 0 R +/Size 10 +>> +startxref +3097 +%%EOF diff --git a/target/classes/examples/lieferschein_pdf_simple_template.pdf b/target/classes/examples/lieferschein_pdf_simple_template.pdf new file mode 100644 index 0000000..2e05dca --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_simple_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260609194637+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260609194637+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (Lieferschein PDF_TEMPLATE Demo) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 997 +>> +stream +Gau1-gN(as&;KZF'RL,p?$&88;Gpo"/Vi='/fBjhJn]$;fkIA5l+80%[ZcH3daBD/.$<\"I9QSQM$&ZShL87@JGfUW^#d$5,W"?c'dQ:gOGo:EjosLVR#bF-!5TS1kQS5XGHj"q-DV5]X[2!$LEqXf7iBQ"<0JDg(!e'!$-A*#f)YShI"q(8E7-`,?@d5[[Up9Ae+i=>jP]g^dHfin`fugo#DZk.VHK&4<6T#1V6D\u?1U(%2r\d2.Q3s-8)lGeTTqj;f0'N:dSJ^W\?YdHP?.gF[Gm7hmsPId1BGBe[6c=1]r<$MoeO9f0FS`ecoWOX_;V\edX;2YRhVreq0EsXWpZ'aa-!]?_&Gu@:0Cl!b?5k6q0blS;/n*JAY#C?U0-RRN>9#V%l]0^<6XfBA/q]c/&<#/)&7W?B[@(+cj7BYa$)r.l*As3<]&t('+KT*FUZkVk=fZq;IP4mlQ4G++1Df[pC%;UGfHKAGF7fg\CIa*=AR#G6`X=!-]chLf+MCq9kf`\;n2b0beI)d^>;+dXYbdCKj!rrN&R-#6m8(J6>"1_3ZUTE_&NnYs%LXj7BLu+YniU715>7taqJAi16c*K0O>s0b]h!hAQ>)E$s9>$@us^RWgt>L',QbpD<,fmmco;"m`hf75TPd):@5,g/F'Cao0jNlA*p/_5Wc0;V*NAgNgZ/"c"%?5QA57@gMb?K_sOqPqeMT8F]Mj54M/a[OPDosc&oMolnX?6D2B_Xmr\*8r!rC)7XI^.bc%NJhIf8O@34D[lb!XaFA<*K.Fdu&pendstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000875 00000 n +0000000934 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +2021 +%%EOF diff --git a/target/classes/examples/lieferschein_pdf_table_fields.json b/target/classes/examples/lieferschein_pdf_table_fields.json new file mode 100644 index 0000000..cc3b5f7 --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_table_fields.json @@ -0,0 +1,111 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/lieferschein_pdf_table_fields_newpage.json b/target/classes/examples/lieferschein_pdf_table_fields_newpage.json new file mode 100644 index 0000000..d0ee3e9 --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_table_fields_newpage.json @@ -0,0 +1,111 @@ +{ + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "NEW_PAGE", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/lieferschein_pdf_table_rendered_example.pdf b/target/classes/examples/lieferschein_pdf_table_rendered_example.pdf new file mode 100644 index 0000000..b3d2a6f --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_table_rendered_example.pdf @@ -0,0 +1,85 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 290 /Length 3456 /Subtype /Image + /Type /XObject /Width 290 +>> +stream +Gb"0M5n_rq&4=k#s3f$?S%+1cZ>6UJ\VkrKR3URe1H7UpSOJYmi"#C0#?/)kEn3%4-(1M*ab+g<9CUVWWT"ESN$=DrepmP1W1+O9h?0com0CsI:9e(OY'ohCZotJ;0q)lA<'u%nL`cKaX?fB1U*ab*l[=I?o6G^X.V<:a\_3i&YNG\GGcYR*'WcsGjI2^l0AY.SpbZ+$L1]'#;iQF?iNL?d&2.lPrCr;TbAfEO)]kbjYe(BC.o?9+)VL$j]fr)(a?fmbnbY7]40saYc)nsNPgR+Do?"7K=`\r44B=9NNe[riF5)jFS1='cHAu^'7R=3rHBVaFmEOO9lIF",FHU$W+NO+W$msCXJhtnksD4GJ8Ic'amqqb,ZDrYZ/p\UO0h=lB@I2cf<^#/QHl+Zmjmb9_Ukl&6Y8b]ojEo4mi7dp(7:V-#nPl!Aa2L<.,H.%-0Vqeb$[aFu#c]ddD5NTV=Z]3i1MmMs8!,h^GJ/`tUi5T+.\FGmdDZ"'r)h/a``a8q[nWs8or+0j:I6#Fd4-Qj>AN#fGU"lT/Y79A.V>-KYAlGZCb)I>8g@2dQMQ]T_2O-n.go-@=%Gr,$pmP/o;lLJRN>hWHn@_\VY=W:`PtIb*W0+7mh]&EeRT*ltW>*L7)Yr+V]hsZj8S'fF8tk%=Ofo5O)l<=u<+](.'ZuCRq:b>O;2VPKAN#fGU"lT/Y79A.V>-KYAlGZCb)I>8RT0'"Pa]9;Q*U3J8ln3j)l7.b9;QGgO4';Smma;0gJTJic_GUDj1A0'p9mrCk4:!,q=nilR_:;;V.OX=V//>VdZom^7]G(q;CS*]UNGVX]2<>:[T(E3o-do?phl=b]e,MTq)h8N5/%u4AoC>=Cd(XpBA^86=^N+(2u@3*j6Kj1b.Q<]^,BS@p'KktR(:m/HQ->c%Z^=h99H<-gsYB@=XNL?8aZa]JtX@Qo/lY^&K1H52CDr^.dOik>fh7bdZDYD?7G;FU>V/#oT)`-Mgjt$4)21DfiRIN-*'muu!^Y$QMGaeF8^/U)!Ch%'>c$T\%Wl?^#0f,D5^4J"l;nA7_T]2Sa2b>AbM[Qhtc-MpO^,#IC#os^2rg+h])Atd!)X22O2s>0(;*)D_cI#CgF-tsPOH6.k1$KCei5)Rsg]Ce(BqKRJWT3eP(rshY-',mb?CE9T;d'p>r+!f[WZT:#>U*V!d!ieP(rshY-',mb?CE9T;d'p>r+!f[WZT:#>U*V!d!ieP(rshY-',mb?CE9YOS)Ub],rpQ^0?:6BGdCJ#PF=%LT5m-AeOFJE2Ag.8nDC,TX1Y>_59rL2/(l4m4'.JnF^,2MJ7PVuFCOIAnsfBX.87_bh-Oa;`2Cs'IuVarcC25Q;^/#6cUp@UI8]$[]1D5:J]24LnTf.#.-ISFN$oa7\OP^U5?O`'f,8fOa28Bn$ulZJ),UL-sR8A2lcZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\W*pZ^/XQjnW\>Ehmn`Q5/("bS+2_h,N$%kZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\W*pZ^/XQjnW\>Ehmn`Q5/("bS+2_h,N$%kZTc*&n!ij3H6_=XNO(g_<:?=HP^4S3\[4(7Z]aT98fOa2:hFG%S'4L)o-eIO?9t!UNGgR&WQq9GOa71BQ8ZJ!XJ@n1l9%ZXWE2o.C#b],8uhJ>[c,EBmlO]/Z]1C92JVS.ou6dOCh)VfE$IBbslgR*8(UW0H7?`_St2J/Q8W3NDQ([El`NLArfC@!GC`VRepA*1=])S8UiYs'tuR!ESE`i`3HXO#*KAtIbUZ)c@jlSGl,RHHJClmh\IqTNbck.-KFI48*jmcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$OLc8s;'-mcur9ft@#9I$GQLzzzzzzzzzzzz!;QHo'r)09~>endstream +endobj +5 0 obj +<< +/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << +/FormXob.8de85583b9e7bfa26ef5e1750cf0a554 4 0 R +>> +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/PageMode /UseNone /Pages 8 0 R /Type /Catalog +>> +endobj +7 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608163430+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608163430+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (untitled) /Trapped /False +>> +endobj +8 0 obj +<< +/Count 1 /Kids [ 5 0 R ] /Type /Pages +>> +endobj +9 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2534 +>> +stream +Gat%gbB"U]&r5rP.ra:RehGqkhlKB=')_JttF^7=Y/X/l.mB5,ucc`qMS[i2`A!NhsZ5p#jec.6Mj#/BP\ngUrSBoVs'.="6Oggnhn)D5\lcnublT:LURcJn&GI`QSo32ls\SlT^l@,mR]m&INIIZ'GbdRHr?N.W`lrSba8SYAdE7mjPWthL)O,d\uM#"Xje]j%*.eOA-"K,GqVa=N6Q1iT96JW&fWg>&YT1)R_l5Xi2U0lMV3N1KhV6\doA*@GOKoU'-B]qjPbM'O9kYI](ip"EScll$AS3BEop-]Apd<3seAQlQqka0P$c/S`WC;5'7N*qp61g/GRZBs-(qo/nB3D#RMR/bcMp"0[_;lF4nlK+nt"k4L%Z!L!:;]Nfkq;q?:A=B+VWplAlX_=KWDa\b,b3Z+WLO$Gdgohfgf?_Iotn-gID,X7Q!J:7cT'1N!=j4N0JXnO7nL2VML.E(r,JpFH+b4NZq9N,\\:dUf8AV[3sI^c)G9V<"ogPWLhk-K%PHqCC!S`S!1/qCCb-0fLS47!FlEB`^"?:nke6MCSX]C6^.-c?u335:b61?c:t(&#I-Q!PHh_h6Bc,k@;MgXdEhscFQUuJ$,uRJ;2H-GV6,It)bR;P9g0jO^Ku7)K7t)Gf2U`i4Z2%RE5Tl@N-u;!-8t@@q*BO+CZ$r80k6g;>c4de_EjfU4-A@+uA4I2*:!7LaCg1P,>_dKqbt@+I7E`@G/+$f#s_<`E7H<8V?VGNrrLq-W,$\"CRdrce8k=g!'M_*=>*=CjuSmdE,(R$F/->&@QfqK!H19Cb-;3Yj=CVC1L3X/'*+j)_dTVjZH0D9e$mO4)sm/J?Ag&YkHF!Jlm1:KIorNT^3p(9:9;dZ=:#V^"q%e,E7?:[sd#oW,t0\(uN+\D?$0rY!ht?@=u=0Qj$;]q,-fAu)nWbg-EIkm(gUZ)8W)Qm(6n>c*3IV^UOY&6ldM@\'l,7>rf.KFJ"ebAm`jLh4NXi:IJV7Qi7`Ju'!9:J&.#MS!FG>]Ps&LiMfboMU'L_PLXO[<09,D[pl"L1CU+I8'\KIq3IZ),!`YUi9U><4YR)^M6r>+*p:cE\hbLd.n7YbQAGmQNPY/McPtYTBjbNH8TW4G)Q$.1#bbejFgR[@)t=%8MsAT-4Sj)d3LZF8MsLu-KRTMgU"Y!!f/0HCh`Q-Cj?/Xn$P1&(?4XmoSl\3+HPF>;>6nW;miZHB/eQ#k?Jakul7`KJ*eZg1pMUV/I0X/\C`k;'HHrie0gSnW'7d3jJZtu#K:qQL#[:O95cYP@/>(`(bP`!&jbH89H[#MnTr\dff\r15?[\"0eCXEYK.LS#NW8I#O(-]s/XDendstream +endobj +xref +0 10 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000003968 00000 n +0000004234 00000 n +0000004302 00000 n +0000004563 00000 n +0000004622 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (opensource) + +/Info 7 0 R +/Root 6 0 R +/Size 10 +>> +startxref +7247 +%%EOF diff --git a/target/classes/examples/lieferschein_pdf_table_template.pdf b/target/classes/examples/lieferschein_pdf_table_template.pdf new file mode 100644 index 0000000..45bb8b2 --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_table_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608163430+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608163430+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (PDF Tabellenvorlage Lieferschein) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 672 +>> +stream +Gat%`9lJ`N&;KZL'm"2lAF#fb1_PR3JK@.Y1pM?m&HY(F/$D7Y1sNf(fFT_c.'5%G@C5L8ccj[:6H"q$hU;IDPJH@q"Gr5a5\cu9)*fjcB]9Z6@F?s("&X&cJI+nHhB^F_WDAlCI(r8^;Gc)LaqqM)ul$^5e>UMZ?=Tuq?c(K:2V`\g!(G-79$\Q_k!2HqedgG4+pmT`YMM%*^@@b;::;nO_.Qb[Br@PsddG/SrPht/2@j_tbD\T\@C(iZ.;_uP'EmgCdg0mU!p5@([DjrGSo'&!K6+[4?:,hKRaVftF*9]Q9&c)Do:>n_m4?@=)]NlVnn?$C<$^>>XMu1[G7Yuh>;c_&-#!Wu$.*nmNgSJ_tkeQYioH@JV9@l&eF-]jbY&q8S_im&e<*b>-KMuTWjuWa?\-p!,[_qoN=m"a)FWbTsr+MA@7b)aHe#9"Fb./SsLYrMO[&s[ZU9AaW9;oJ!J7g?1?<1%Bh/ZYq=j_ocp&;1i]K.i9r4UH^Y9To7b4lP$;S^6n&iD;q~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000877 00000 n +0000000936 00000 n +trailer +<< +/ID +[<721e7688792119f7e9da1c836b6aa329><721e7688792119f7e9da1c836b6aa329>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1698 +%%EOF diff --git a/target/classes/examples/lieferschein_pdf_template.pdf b/target/classes/examples/lieferschein_pdf_template.pdf new file mode 100644 index 0000000..ef235ee --- /dev/null +++ b/target/classes/examples/lieferschein_pdf_template.pdf @@ -0,0 +1,74 @@ +%PDF-1.4 +% ReportLab Generated PDF document (opensource) +1 0 obj +<< +/F1 2 0 R /F2 3 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +5 0 obj +<< +/PageMode /UseNone /Pages 7 0 R /Type /Catalog +>> +endobj +6 0 obj +<< +/Author (anonymous) /CreationDate (D:20260608150433+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260608150433+00'00') /Producer (ReportLab PDF Library - \(opensource\)) + /Subject (unspecified) /Title (PDF-Koordinatenvorlage Lieferschein) /Trapped /False +>> +endobj +7 0 obj +<< +/Count 1 /Kids [ 4 0 R ] /Type /Pages +>> +endobj +8 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 914 +>> +stream +Gat=i92?K]&:j6F'm"1'(m!S:80L-\[QM"[L]VS5dX=O?NN3!T:7P&2"Ge1XPdO!@R;X.<6/_CQo`%_hS7Z_&6pLe+"AgfVf`dmY".h?P^CChS%Ot;,C%TD0+#J!bU_."B@8:kI0u2$Vfb8mR@8A"%SNW-GkF2%&(EUCrA=RI$^M%FY$#2!;0h:?s(Hi?B!kh']Tb`#gPnVW8MTMA,=D?oW>:V33O+W:2(W82O(OE[+dt_2C9]k`%E=O'2A&j1+MA,`\%Y=;k]]paimJ8q5AfcoC>)`PFar"KN/q!qb'A[^j@D)(bj5iLX$!Ja-=pbK4UQWB:&9rpVEmM<'[pKH'-iYD"iZk3]pE,7)T9T@sg,94kJf7iaZ*UZVin3NjmY-^Pc6)oT[3f4I@Qn5(XoNjXQA&fEcTEW"tmM-#0.Isp^4&cob:FRFkp]T\d*J$?['D)Q>MiE$kA5u-`"KG!9N+QUAHc)>V^q#F(oR82/((f&:%-,@W30[c]!SN6jEFh)#=)RZ9NOqfWr'Ho&H^N4V&%uZ,8QK/@:jWXPZbq)c?+T$G0GB#gj%cK8*bq'CEd;ZWcRlie;.!f+tDDn*A9h8jNYc"AdpH&f_"%YoX>l~>endstream +endobj +xref +0 9 +0000000000 65535 f +0000000061 00000 n +0000000102 00000 n +0000000209 00000 n +0000000321 00000 n +0000000524 00000 n +0000000592 00000 n +0000000880 00000 n +0000000939 00000 n +trailer +<< +/ID +[<3c3495ea3f083feb5cec8e62223c0531><3c3495ea3f083feb5cec8e62223c0531>] +% ReportLab generated PDF document -- digest (opensource) + +/Info 6 0 R +/Root 5 0 R +/Size 9 +>> +startxref +1943 +%%EOF diff --git a/target/classes/examples/rest-cleanup-queue-older-than-days.curl.txt b/target/classes/examples/rest-cleanup-queue-older-than-days.curl.txt new file mode 100644 index 0000000..88967ee --- /dev/null +++ b/target/classes/examples/rest-cleanup-queue-older-than-days.curl.txt @@ -0,0 +1,4 @@ +curl -X POST "http://localhost:8080/api/queue/cleanup?olderThanDays=30" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d "{}" diff --git a/target/classes/examples/rest-clear-queue.curl.txt b/target/classes/examples/rest-clear-queue.curl.txt new file mode 100644 index 0000000..aed19ad --- /dev/null +++ b/target/classes/examples/rest-clear-queue.curl.txt @@ -0,0 +1,2 @@ +curl -X DELETE http://localhost:8080/api/queue \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/target/classes/examples/rest-create-admin-user-request.json b/target/classes/examples/rest-create-admin-user-request.json new file mode 100644 index 0000000..796de4b --- /dev/null +++ b/target/classes/examples/rest-create-admin-user-request.json @@ -0,0 +1,7 @@ +{ + "userName": "admin", + "displayName": "Administrator", + "tokenName": "admin-token", + "enabled": true, + "scopes": ["ALL"] +} diff --git a/target/classes/examples/rest-create-auth-user-request.json b/target/classes/examples/rest-create-auth-user-request.json new file mode 100644 index 0000000..ac930ff --- /dev/null +++ b/target/classes/examples/rest-create-auth-user-request.json @@ -0,0 +1,7 @@ +{ + "userName": "line01", + "displayName": "Linie 01", + "tokenName": "line01-print-token", + "enabled": true, + "scopes": ["PRINT", "PREVIEW"] +} diff --git a/target/classes/examples/rest-create-docx-lieferschein-template-request.json b/target/classes/examples/rest-create-docx-lieferschein-template-request.json new file mode 100644 index 0000000..c114e95 --- /dev/null +++ b/target/classes/examples/rest-create-docx-lieferschein-template-request.json @@ -0,0 +1,46 @@ +{ + "name": "lieferschein_docx", + "documentName": "Lieferschein DOCX Vorlage", + "templateType": "DOCX", + "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "sourceFileName": "lieferschein_docx_template.docx", + "documentFile": "document.docx", + "sampleData": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + }, + "examplePrintRequest": { + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } + }, + "contentBase64": "UEsDBBQAAAAIABKeyVwzwTgFnwEAAEoHAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbLWVTU/bQBCG7/0Vli8+IHtDDxWq4nAocCyRGkSvm/U4Wdgv7UwC+ffMOolV0VCHBi6RnJn3fR5/yePLZ2uyNUTU3tXFeTUqMnDKN9ot6uJudlNeFBmSdI003kFdbACLy8mX8WwTADMOO6zzJVH4LgSqJViJlQ/geNL6aCXxYVyIINWjXID4Ohp9E8o7AkclpY58Mr6CVq4MZdfP/Hcnkj8EWOTZj+1iYtW5tqmgG4iDmQgGX2VkCEYrSTwXa9e8Mit3VhUnux1c6oBnvPAGIU3eBuxyt3w1o24gm8pIP6XlLaFWSN7+tkZoAjuNPuB59e+2A7q+bbWCxquV5UjVl6Y+iKShdz/kwLkOLJhyMhvSRWmgKcP72MpHeD98f59S+kjik4+N6HVPPd3UxlwFiPxiWFP1Eyu1G/RomTyTc/Mfpz4k0lcfIeEJ4umP3QGFVDzIdys7h8iRjzfoqwclEIh4Dz/eYd88rEAbA58h0PUeib/XtLxuW1B0jInFMmWrv7KDNOIvAmx/T3/yuppB5BPMf33aXf6jfC8iuk/h5AVQSwMEFAAAAAgAEp7JXHkmS0D4AAAA3gIAAAsAAABfcmVscy8ucmVsc62SzUoDMRCA7z5FyCWnbrZVRKTZXkToTaQ+wJjM7qZufkim2r69UURdWBbBHufv42Nm1pujG9grpmyDV2JZ1YKh18FY3ynxtLtf3AiWCbyBIXhU4oRZbJqL9SMOQGUm9zZmViA+K94TxVsps+7RQa5CRF8qbUgOqISpkxH0C3QoV3V9LdNvBm9GTLY1iqetueRsd4r4P7Z0SGCAQOqQcBFTmU5kMRc4pA5JcRP0Q0nnz46qkLmcFrr6u1BoW6vxLuiDQ09TXngk9AbNvBLEOGe0PKfRuONH5i0kI81Xes5mdd6DUX9wzx7sMLGX71q1j9h9CMnRWzbvUEsDBBQAAAAIABKeyVyIhgtTaQEAANECAAARAAAAZG9jUHJvcHMvY29yZS54bWydkstOwzAQRfd8RdRNVonzEAhFSSoB6opKSBSB2Ln2NDVNbMueNs3f46RtWqArdh7fO8fzcD7dN7W3A2OFkoUfh5HvgWSKC1kV/ttiFtz7nkUqOa2VhMLvwPrT8iZnOmPKwItRGgwKsJ4DSZsxXUzWiDojxLI1NNSGziGduFKmoehCUxFN2YZWQJIouiMNIOUUKemBgR6JkyOSsxGpt6YeAJwRqKEBiZbEYUzOXgTT2KsJg3LhbAR2Gq5aT+Lo3lsxGtu2Ddt0sLr6Y/Ixf34dWg2E7EfFYFLmnGUosAYyHO12+QUMDwEzQFGZUne4VjLgiu1zcnHfz3YDXasMt4cMDpYZodHtqKxAgqEI3Ft23m/EpbHH1NTi3C1zJYA/dGS4M7AT/bbLOCeXYX6c3aEOx3c9Z4cJnZT39PFpMZuUSRSnQZwESbpI0iy+zaLos3//R/4Z2Bwr+DfxBBjqZw5eKdN3Q/78wvIbUEsDBBQAAAAIABKeyVz029sX6wEAAGwEAAAQAAAAZG9jUHJvcHMvYXBwLnhtbJ1Uy27bMBC8+ysEXXSKaQdBURiSgtZB0UPdGrCSnLfUyiJKkQS5MeJ+ffmIFTmGL/WJO7M7+7TK+9dBZge0TmhVFcv5oshQcd0Kta+Kx+bbzecicwSqBakVVsURXXFfz8qt1QYtCXSZV1Cuynsis2LM8R4HcHNPK8902g5A3rR7prtOcHzQ/GVARex2sfjE8JVQtdjemFEwT4qrA/2vaKt5qM89NUfj9epZlpUNDkYCYf0zBMt5q2ko2YhGF00gGzFgvfDMaARqC3t09bJk6RGgZ21bFzzTI0DrHixw8tMM+MQK5BdjpOBAftD1RnCrne4o2wAXirTrsyBTsqlXiPKN7ZC/WEHHoDk1A/1DKIzJ0iOVamFvwfQRn1iB3HGQuPazqTuQDkv2DgT6O0LY/BZEKtpDB1odkJO2mRN/scpv8+w3OAyTrfIDWAGK8uT75p2wE5RAaRzZuhEkfc7RPkWxy7CrSuIurCE9rsYnJJYd+2IfGytjKe5X5+dD11pdTluNFZ81GhF2JeGFfrkB5W8nBZRrPRhQR3Za4h/3aBr9EC7xbTHn4Pl1PQvqdwY4frizCR6X7Qls/cmMyx6BuGzfl5U+zVffJDuHnBdVe2xPkZfE20k/pU9HvbybL/wvHvAJm/nzG//V9ewfUEsDBBQAAAAIABKeyVxlqoTfSwQAAAEXAAARAAAAd29yZC9kb2N1bWVudC54bWzNWFtz2jgUft9f4fELT8Q2sCx4Cp0Emm6mNybpXt52ZFnYWmTJlWQI6fS/75GvpEsSAg1lmLGQjs93Pn2Sz5H96vVtwqwlkYoKPmp5Z27LIhyLkPJo1Prj82V70LKURjxETHAyaq2Jar0e//Jq5YcCZwnh2gIErvxVikd2rHXqO47CMUmQOksolkKJuT7DInHEfE4xcVZChk7H9dz8XyoFJkpBuAniS6TsEi4Ru6ElCFd/O647gD7lNcb/GYmUcDDOhUyQhq6MwEMusrQNmCnSNKCM6rXB6tcwy5GdSe6XGO2ah/HxgYC/TFh1s3js3oJo2VQecheShcu0lDyn50jCgLDgKqZpo9u+aGCMK5BHJ7wx2VXq9Q5b9KlEK2gawF3oh4VTwgrmjyN67g4rYiBqj10o3I9ZMdncfKv9pNkUNzpM27dSZGmDRg9Du+KLGgsSwXOwyjXanJo6jMxNjFJ4gBLsX0VcSBQwYASKW2ZH2mPIToEI16ZNzUXml1neBI65qjtr5S8RG9m9ng0jTm3X4/eUzCEhAi/KjUEX5vya3sfU4+mnyd/tqczwYikkQxGx2taUJMJKqLZm8IDexYhpIrcj6YCVTRk8YDd6zUhF7rOZ2VtJQ9spzX+BSa9TmC7KtLChB/vVLcz/4sqPkbmuXd4LsQDDnEqlJ4JlCR/Znl2NXItV2WWosbvVQG7Oe1z8fgF1oO79WfRy1zyo2zt3Sy03J2Tom78RtABfMO4Nu92C4NZh556nLqBwcS2BcaNEeIvs72FVHOYzZEDszdT8KtwSYOvGeGgbtD/Ksy0L6DSsdue2lYMef/0aEkahEq8/ZklA5LdvDwd0ak1+ijJTpLPkaHJANHLCYrzLeEheXAycKS0SIs84Sk5ZjfNQQoY+oh4ozCOesiQyIFQrlM21RNGLKwOFcgG1ksiTTyPnUtMFYTxLYCFfXJcUSX3yknwgPHr5h+dLhriGt5wTFuKGSEr4kbaGgmCI7bw5isNJDuPUYGkBrFKE4XwKgQMC7wvAo9OrDkXlLXXYAEl40Sb+5NP0zT9eZ+Bv8vC7ffd26G6l81RIr/9QyC/Sf3Ky99W5ILACi4xvS1zf68jFA5V6hwWfCUXNyyw5xkH5RA/FnV6/v+VQvN/wvkfoBvYZT3G+fgefkPcMXdaRnxT9gtwRimO+/RE5BoMnisYemXxzD20J6P2oiR5YrH9QsJAoLGlqss8Roj2j+DaFRhGsZxIiSEXDa8gq7uWkP+xe2tXQTJpBt+/2u5Nq8Aac8tFur+/1868icwEpWl6bF1vCMWn4kznKmLYt6VNIX/IqHBYbMY1u7oqJed7QfBJd+bEpMIPuoLrhAzLEtEhH9uDXPA1KGsUQ2XM7eTcQGs7qtdV8m2iMMUFwVh3ZvxXdgmDdjTKdd8u8jQVTVlHxSHFPPhwKbPKcwaaczKjGwLFbF8FCvPxv8VXIaT5ej/8DUEsDBBQAAAAIABKeyVwhCUpUQAEAAEsFAAAcAAAAd29yZC9fcmVscy9kb2N1bWVudC54bWwucmVsc62UMU/DMBCFd35FlCUTcVugLahpF0DqCkWwus45sYh9kX0F+u9xaZUGtVgMHu+d7r1P55Nniy/dJB9gnUJTZMN8kCVgBJbKVEX2snq8nGaJI25K3qCBItuCyxbzi9kTNJz8jKtV6xJvYlyR1kTtHWNO1KC5y7EF4zsSrebkS1uxlot3XgEbDQZjZvse6fyXZ7Isi9Quy6s0WW1b+I83SqkE3KPYaDB0JoI52jbgvCO3FVCR7uvc+6TsfPz1H/FaCYsOJeUC9SF5lzg5m/iqqH6QEgSdhPdaIY6bqGsAIv++fZaDEkIYx0T4hPXzCUVPDIFMYoJINLTi6waOGJ0UgpjGhCA/2wP4KffiMMQwjMkgNo5Qv/m0jiPPjypTBDpIM4pJYzZ6DdZfwpGmk0IQt3FvAwls/zB2dbcE9usPnH8DUEsDBBQAAAAIABKeyVw1Hik8ii8AAF5VBQAPAAAAd29yZC9zdHlsZXMueG1s7V1dk+JGsn2/v6KjX/zkbZCEAMfObgCSdhxhe72ese8zTTPT7NDQF2iP7V9/JSFAH1VSVVZKqpKyO8KeFlAp5Vedk1Rl/f2ff7xs735fH46b/e7dN8O/Db65W+9W+6fN7vO7b379GHw7+ebueFrunpbb/W797ps/18dv/vmP//n71++Opz+36+Nd+Pnd8buX1bv759Pp9buHh+Pqef2yPP5t/7rehS9+2h9elqfwz8Pnh5fl4cvb67er/cvr8rR53Gw3pz8frMHAvU+GOYiMsv/0abNae/vV28t6d4o//3BYb8MR97vj8+b1eBntq8hoX/eHp9fDfrU+HsNnftmex3tZbnbXYYZOYaCXzeqwP+4/nf4WPkxyR/FQ4ceHg/hfL9v7u5fVd99/3u0Py8ft+t19OND9P0LNPe1X3vrT8m17OkZ/Hn4+JH8mf8X/C/a70/Hu63fL42qz+RhKDQd42YRjvZ/tjpv78JX18niaHTfL9It+ci16/Tl6I/OTq+MpdXm+edrcP0RCj3+FL/6+3L67t6zLlcUxf2273H2+XFvvvv31Q/pmUpcew3Hf3S8P336YRR98SJ7tIf/Er/m/YsGvy9UmlrP8dFqHfhGaJRp0uwm98N4au5c/fnmLVLt8O+0TIa+JkPSwDwWlh+4SOs+Hsw+Hr64//bBffVk/fTiFL7y7j2WFF3/9/ufDZn8I/fTd/XSaXPywftm83zw9rXfv7oeXN+6eN0/r/31e7349rp9u1/8TxL6WjLjav+1O59uPb+L45P+xWr9Gnhu+ultGNvkp+sA2evcxJSf++NvmdjfnCzmp8cX/u4gcJvZiSXleL6MYvxtWCpriCLKY40oNYasP4agPMVIfwlUfYqw+xER9iCl8iNN+dXa+9MftacUnCl5U+YmC01R+ouAjlZ8ouETlJwoeUPmJgsErP1Gwb+UnCuYs/cRqGf9d+MxI2Ac+bk7bdWUCGiqmuiTt3/28PCw/H5avz3fR3FqQUjLCh7fHk9itDtVu9cPpsN99rhRjWWpi/JfX5+Vxc6wWpKj6jxHwufvXYfNUKWrEmWf4g/+8Xa7Wz/vt0/pw93H9x0n28z/t7z6cUUa1XdXU8MPm8/Pp7sNznDQrhbkcpVeN/8PmeKoenPMoVYML2dDl+CV/8B/XT5u3l4tqBNCIayuKsKpFOEARkQFEHmGkMr7A/bvA8SMbi9z/WGV8gfufqIxvV48vnWm8kLeKhddYOnYX++3+8OltK5wextIRfBUh9gjSQXwdXyhJjKUjOJM+72arVcjcRPxUIY9KSFFIqBJSlDOrhCzlFCshSy3XSgiSTrq/rH/fHC/4Vsq8xxTWrLwxm6MBUWzxn7f9qRqYWoos/vvdab07ru/EpNmKsDEz30nYWG3ikxCkNgNKCFKbCiUEwedEcSHqk6OELLVZUkKQ2nQpIQhn3hTAXwjzpoAUhHlTQAravCkgC23erJ2jSAhSIysSgnCSt4AgnORdO4+REKSevKuF4CVvAVk4yVtAEE7yFhCEk7wFyC1C8haQgpC8BaSgJW8BWWjJW0AWTvIWEISTvAUE4SRvAUE4yVtAEE7yrrUaJS4EL3kLyMJJ3gKCcJK3gCCc5O00krwFpCAkbwEpaMlbQBZa8haQhZO8BQThJG8BQTjJW0AQTvIWEISTvAUEqSfvaiF4yVtAFk7yFhCEk7wFBOEk71EjyVtACkLyFpCClrwFZKElbwFZOMlbQBBO8hYQhJO8BQThJG8BQTjJW0CQevKuFoKXvAVk4SRvAUE4yVtAEE7ydhtJ3gJSEJK3gBS05C0gCy15C8jCSd4CgnCSt4AgnOQtIAgneQsIwkneAoLUk3e1ELzkLSALJ3kLCMJJ3gKCpHNDtM52u74TXp46RFrVIL4eVnV97/kBf1l/Wh/Wu5XASgpFgZcnlJCouLZ4vt9/uRNb2G1zHERY1OZxu9nHy2z+LIw9LluW/O/F3fv1dbldbsV7QfzD18x2oWjYePNb+MbTn6/heK/p1T5P5+XmyaLh+I3fP1239UQfjm7iLtlAlVyO7zWRGv/7cAxDLXnPYBAs3KkdnN/F3CD27n522Jx3DcXbvi5/x59IbesaJM9z2YkV317FA10fIVLZ+lB4hOfz5VjU4zK04b93rKfbbnZfLtfPIy2el8nHbha4vGOa7DzIegdDNb47nMwT1SR7x07Lx2Py/8v7opQV3mP45+v++O7ecSdJHkq95xBhretbprZ7UdZlvMKetNhVkx1pzvUP7o40jrJXoRqWq+T2Vm/H0/4ldrS8B6WUljfB+aW7m0Jzdki2QFxXpcUbIDhWqbIIT/2y3hTs9yeGN306X5bxpvNI5E1S3pRSWt4E55dUvSlIGbJ+b0rS+ZCZnc5bC6pcarf+4ySSuCIxpc4mk80TJ/uyXr/+FMp/uPzxQ2j640PWTx7Xn/aHUAPOJPaOq9vEb9u/nSJ3+eH37VVQ2mEqNhYv/1uysTh6kbuxOPPJ28bi6PJtY/Hj+b+L8xOtIjx5uUvbHQXT2DXjj8ZYM/T3GGTeLkdwOprxg8KMNrlcSW1UnqjOcqG+La4nWZieZAl4EiNr1edcyT7rKucaGuFcTjAZzj2ec+VdyWW4kovgSjbXlWxMV7INdSWrG66k6CQO10kcTCdxBJzkRtq09RlbV5/ZnP/bhgeNuB40wvSgUTc8yNHHgzJeYjl2cP42QgAPjQMEv3G5fuNi+o3bDb8Z6eM3JbmmeS8ac71ojOlF4254kWuEFzmD6DfvRadQFzcf+riJOhrNMVxownWhCaYLTbrhQmN9XEiBcw0YnEu5SB3qc8r1pSmmL0274UsTfXwJMR1hOVqmpMr5eodZE827IKcTEcd9hmLuw7/vU9R9p+Se4+48pd9L3cVvqarhVjv46XGbFNMft9/vIv/+mtS7z3f69Mfy/vLGxXq7/XF5fvf+lf/W7frT6fzqcDBhvP64P532L/zPxwV6/gAP2Zt5uD4EX9+7t5fH9SH5UpH7NWDchKOo7nNzDkVNyybLn/aXDkiMG7q8VO6eUrlLg2/QrtX7/BO/v3xRgPE1WvxVRPm0IPkNb/sVsBYr9ZIGtkoNbCEZ2OqagRurlkua0y41p41kTrt35oRC7PPqnrw9zlcxsHU8UhmwHg4Ac8/r/OmQwQXxW6Omz8lSpb8iHHx3nqSib1ljtZ+VJqLKy/iFOc4eiMxykaxdhGXflttk5tUGk2fcajgOJ4KCLqI7t7iTwFUltxJaxF0OVxe5TQ7XNzE6UI8s3PxyczSmM6smllRE8H1Yz7RimsXZieratzVv3usLGOnqMlhpxoKg5ZBPnP+x2Ra/eE9e1CNBqHzrVXCW4aiANRwG1nBwc0HGijx/Uc0IWb/ju4meSUFjK7PjP6LUt058eaPmGvVVpYKitWwHENSbuPwRFS+ipfiD6qlf9qHn+6c/43bI+eeNXjg3Sq561LTLXoZDWV45mw29iVdeEhhamYVr6pGdeQKuUlRD+6r2Ch3xFAI1c3Gd2u2RqleqsZ6gfEkatqmvyDhZ1Vhn/Sf7hCV6w3IGfomgJm8oLjW7PVX1YjPWI5SvKqsx8K9z3W2GGDJqDkPkmkP2uUu0ieUj/LpDhY8gK4g/hTJnTsB8qeIt6WnTPq9seF7uPkfHVN0na+txp9HoGYu5NWnBXuOz25YbTAelkKGRZy9mkvjZq5NIfc8+HEwaevj523a7Zvv9XfJas2q4UsHwH99f35rjgnXpgRMG5xcbjwa2KqxmVMGJikQVTQcHWxV23ar4Kf6ek62J5DUd9DBqRg+c6Di/WG90WFPXnnoCqnCbUQUnOhJV1BodwqoY162KRTjeZvdWLDrGuri+2qwueGC7CKxqmU8vT82JlcvLjUeLmFpqKdOk1cKJm6tamo4cMbXEcAxdLz8uV4c9s371Er1S5FHXD6AQVYY2GBuAIwVEdx3v7R2NE9bFe8NwePlqg/uO8eXrEN47LHvgVLxjwtiFnHmH7Ywq7tQJZ9ckP56fuuLrhag3yNthcybVSeOBy5WEiF4BGtYCvBLunnWFvP/Er6LU+m4+KkXd077VpjrZgXc+2iWvtPPVqvQj8jVZPFJZjFpSG6cTBZZ8JzGIf9jLRVHd7vZkTO2pelvKBHylGaGozB7EvK4u63kcpPU8Djc4k8jJrqXU8yu3x/N/G9lcKGnFUakVR0hWHHXBivVvzZK0nVtqOxfJdm4XbNf0JjtJS45LLTlGsuS445bE3+gmacZJqRknSGacdMGM7Ww2k7TntNSeUyR7TrtgTw03fLEJ0iI57z5v1VVyHUqSGAuLRkz7qe4cvJV1BHfcXB0jC0PhEThk7AEZQvaA3JbtnQ57xval5LJchDHYlQWgpGllQR/r2pE0/2DXF5QfTWoNPYNEQsMoaUnKLjdkz5nFKDukxZVVH+y69hQ4qHsK2Bt7rQmjPju14x698T7H81/Voa0HwyzYrNRNVCfTjENWeIdU8DeqzsxC5u2am0DyPZZV88gQuWo3GUySZR5Vcz6IUeV9jKunQm9o5YQrtQVAM3e69Y/m+NPtDap6siF6Ooa5fxsCNIZmFoPRwOFo5rI+M5e51d2Kr69iR25lhamCFFX1sTf7ICo16inO3nSY6jaurEYbWY0stYC3XP57cWlYnldBupk5SwfZ7egSJKSe9iXF5iPTNC4R6GZxU0p0JTqToKiT6JX4uAKmStKNLzhPP6r8XgWjpYFcZ4z5/vC0Ppy/i447Y1SgzUEKbd62mSZ9M0CfFcW57E9fOm6APrzZhZZYv1f7+G+wjz8U1G9ym5JiIMWnDCUnljCWoqROVIKGk1uJn3HC6XBZ0yX49eblYmb76sN1nHR0xkzll/3X+XL39GHz11U/w2t8xu8Ih+e/AyPCJxxnrfgWV3zju8SgJgbGzVQ/H64f+rQ5HE+hce+Zrngh3dleWgC/ZJWGkhs7u8AqubKq1RPSU8Bus63NPXIp/yoql8tz13/LXX/I6OPhoqWHtCE5Zt0uyards2ocrOFd3VfYQNRDkIZ6DNP+8Lf14bxyscL8TGPh6zW07/N1wl1t18tDHt6Ef37abGOiF/1erR7EF7OzZHTtXHuxg6ssKfW83x/+6r16oNDs21lSzimFaJcD2tgHnmiO1QA9xsxEawJfm0FSt0gZkBCbdnO7gDegze4Csgi1kWUJuRkDTTzbC3w/B03yc2afsRuqghTRG2sLHAO9sXfCaY7epo7t2g7vu6IOoTeBL8UgCbxyWEJvOs7xAt6ANscLyCL0RpYl9GYMOPGDEJ7cZsc0OMle7St6Q1WQInpj7dRnoDf2hn3N0dvYnVr2gp2A7C6ht+l8Ph9NeQ8KTuCVwxJ603GOF/AGtDleQBahN7IsoTdzwInr+96ICU7szNXeojdMBSmit+IZ20z0xj5wW3P0Ngqc6XjGTkC3klwH0Ntk4Dozi/eg4AReOSyhNx3neAFvQJvjBWQReiPLEnozBpx4gTfxJ0xw4mSu9hW9oSpIEb2NxNDbyET0Zg8nznTOTkA38NwB9ObMZ4uFy3tQcAKvHJbQm45zvIA34K2OqpZF6I0sS+jNHHBi+bMgu4CrOGf2Gr1hKkgRvbli6M01Eb35trsYcGpvt7zUAfQWjKeuw8m0LjyBVw5L6E3HOV7AG9DmeAFZhN7IsoTejAEngec7Xn5DZX7O7DN6Q1WQNHrjHPwY6YN7/KMITKs84Rq/r47uqEpqZ7++zUBKG/xQg5HGgV+OpATxT17Tj8vVl8+H/VuYKRm0JJMuhRNXzqbprfKyKdwMUPW0f3u8ubpLYQ4J8x6DM5oxtHAlKbxINmvaZiAIW9EzJT5nUblhCmFa1b4HejdNAfk8tWLpIrbNWTXbSqDP6JYCXijgCeXSHKKHS9WLdsl2SLZTQb28XjNp1AtvNMNEvYv5wHWdvqJeyX4RejebAXk9tbDpIurNWTXbgqHPqJcCXijgCfXSHKKHS9WLesl2SLZTQb28Hj1p1Atv0EOoV7XPht5NekBeT61/uoh6c1bNtq7oM+qlgBcKeEK9NIfo4VL1ol6yHZLtVFAvr7dRGvXCGxsR6lXtT6J3cyOQ11PLpC6i3pxVsy0/+ox6KeCFAp5QL80herhUvaiXbIdkOxXUy+sJlUa98IZQhHpV+7ro3RQKtq6HWk11EPXmrJptldJn1EsBLxTwhHppDtHDpWpe10u2w7GdCurl9dJKo154Iy1Cvar9cPRupgXyemrR1UXUm7NqtsVMn1EvBbxQwBPqpTlED5eqF/WS7ZBsJ416/3XYPHHQbvwSFOReVjgTyKUGJSJj5nr+oY76G+qoBMTlAOUh2O9Ox2iQ42qz+Rip9N39y/K/+8P7WWieaJR1iDFmx80y/aKfXItef47eyPzk6nhKXZ5vnjaJIhVRrJkRPdQ5pHltPNvuStUMrTIyCqjvXl+CgMUYtXFZIE3V5v67P/FoFHKqHJd6SrZtM4n66mIQ/V7HTXfCTV9rpsM5eYQJ1E1bP7PIz7rpZ6i1uop+q9Fb1PutUvGO+q1BRgUV8YTHlYxR6g9LJQyTo5tbzNMlvNVqGXW23qSSHjUbpnDIzg+6FseouEfB12QwUEttrWwnUYTxbC/w/evI2aMB0lc1LfeRb7RK9TT2ufpKf+RzmvhcHUVAXvv5dBEQ3n6eioAFm1P7WYFRQUVA4XElo5Ta5VPRw+To5hYBdQlvtapHnZ3IqQhIZy9QOGTnB12LaFQEpOBrMhjohBGtbCdRkPEDz/bY3TOzVzUtApJvtEr1NPa5+oqA5HOa+FwdRUDeaTzpIiD8NB4qAhZsTt34BUYFFQGFx5WMUjo9iIoeJkc3twioS3irVT3qPJiFioCKRUAd44HCgYqAGt5/PyYjzYJP2yIg2U7SdjIFGdf3vdF15OzBkemrmhYByTdapXoa+1x9RUDyOU18ro4iIO9wwnQREH44IRUBCzanw4kERgUVAYXHlYxSOkyRih4mRze3CKhLeKtVPeo8p46KgIpFQB3jgcKBioAa3n8/JiPNgk/bIiDZTtJ2EgUZL/Am/uQ6cvYc7fRVTYuA5ButUj2Nfa6+IiD5nCY+V0cRkHdWc7oICD+rmYqAxS3gdFZj9aiwnoCi48pu2qezpanoYXB083sCahLeik3Qajy2l4qAqj0BNYwHCgcqAmp4//2YjDQLPm2LgGQ7SdvJFGQsfxZkO7HdBk5f1bQISL7RKtXT2Odq7AlIPqeHz9VRBHQFioCXw4+pCIhQBKSjqwVGBRUBhceVjFKho7apCNjxooe50c0tAuoS3mpVD6HwpCJgO0VAHeOBwoGKgBrefz8mI82CT9siINlO0nYSBZnA8x1vcB05XZBxM1c1LQKSb7RK9TT2ufqKgORzmvgcRhHwx/XT5u3lw/PyKbzD4tHA55fvktcVzgW+7L2m8t+t5DuIfvPWzh4Nfk4B8wBcW5eWASq1S0uBVN6lhcDWD0qKoYqfXIUjzXcSpV8MFMQ/edU/LldfPh/2byGMuq93oQTFY6PxyCtuJNfB+GoQ/+Tw1fm+ZIFUM0W/hhbhkXvr697KtTfEMhh0qKoqiHAALwbRLzOA09eaoeQNJa0mnlmYEtbhyXBSkixPqCYnl0UKxFIQWcp4PhssuIdVYk0cECmQqQMiBzB5QMSA2Iq8IOIrXeErFJntRGZdECB3LHD2wOg+MxdydAMcnRhM42e/68ZhNDvxXksWUzx4ncdi4MevE4spZMNFMJ6POY12LbQpBCIFdNIZQA7k6DOAGNgR7tKCiMV0hcVQZLYTmfUVMjPnGmZPvOwziyFHN8DRicXoe2ByQwlMsyN7tWQxxZNjeSwGfn4ssZhCNpzbi8WE0ynQRptCIFIgUwhEDmAKgYgBsRh5QcRiusJiKDLbicy6QEDuYKbskV19ZjHk6AY4OrEYfU98bIrF6HXmoJYspnj0HY/FwA/AIxZTyIbTYDKbc2o6DtoUApECOnASIAdyAiVADIjFyAsiFtMVFkOR2U5k1gUCcidLZM8c6TOLIUc3wNGJxeh7ZFVTK8r0OjRJSxZTPLuHx2LgJ/gQiymur50sBp7DzoYjtCkEIgW0KBkgB7IoGSAGti9GWhCxmK6wGIrMdiKztn0x2dbY2abpfWYx5OgGODqxGH3P3GiKxeh16oOWLKZ4+ACPxcCPICAWU+w4N50Pxpxs6KJNIRApoG5/ADmQ9n8AMbBjDKQFEYvpCouhyGwnMusCAbnentmur31mMeToBjg6sRh9m4Y3lcD0alutFYup3NUP38zv9Je0cE8rutw+8LCj1NMTWDYKLAt4RBoaXJOCkpvkJuhcpqF2tnk3yThG6l014ccOmz4XVWfTF4MKD5k1FdVXhXXOZMjR2patmHbpimKljmvSTxPeJPotyQrpVyIAuo4+g85BdLvf3TqCS0on3nQGXsgp7utVcawZnKBd2+RStAG2pd4Am9gmsU1im11LSTKLrcxrQkx8E8v4xDeNMxl6vBLjrEW1xDmJc3YbZBDn1E/3ypyz+otN9XblxDmJcxLn7FpKkpisDWwZTZwTy/jEOY0zGXq8EuesRbXEOYlzdhtkEOfUT/fKnLOyubyl3lyeOCdxTuKcXUtJEpO1gQ2+iXNiGZ84p3EmQ49X4py1qJY4J3HOboMM4pz66V6Zc1YeBWCpHwVAnJM4J3HOrqUkicnawHbsxDmxjE+c0ziToccrcc5aVEuckzhnt0EGcU79dK/MOSsPbrDUD24gzkmckzhn11KSzCYm85rnE+fEMj5xTuNMhh6vxDlrUS1xTuKc3QYZxDn1070y56w8ZsNSP2aDOCdxTuKcXUtJMrTDvKMOiHOiGZ84p3Emw45X4py1qJY4J3HOboMM4pz66V6ec/6wOfKb1UYvKjSoHTVDLlkOletAnjhUugV52pU0Y6Y8j6p4KNghWNWa6iCLTYx/CPa70zHyu+Nqs/kYPf+7+5flf/eH97MwCiOJ6xAizY6bZfpFP7kWvf4cvZH5ydXxlLo83zxtlNFsTfYF5vQ026tGj8PAmY491n1YOMldt6gx50C23usc7bS5xSD6zcHQ8x2mr9V21lwbNwrEHFWN8s/YQ71LPoEQXBCS67SbPFSq1S4suCuHJSBiOBARsnC3oUibsdNnOGKg3tEgiWd7ge8zq5q6gRLUW1WDJdxeyllYAm+kTLAEF5bkmjFmYtGCh3jlsARLDIclQhbuNixpM3b6DEsM1DsaLPGDcLZnbyrNXm0flqDeqhos4bbbzMISeK9NgiW4sCTXrysTizY8xCuHJVhiOCwRsnC3YUmbsdNnWGKg3vFgiev73og519u6wRLMW1WDJdyObFlYAm/HRrAEF5bkWrpkYtGBh3jlsARLDIclQhbuNixpM3b6DEsM1DvelziBN/Hzy5sv96gXLEG9VTVYwm3ak4Ul8I49BEuQ15Zkd/1nYnEED/HKYQmWGA5LhCzcbVjSZuz0GZYYqHc8WGL5syC7NON2j5rBEsxbVYMl3L4OWVgCb+pAsAQXluQ2hmZi0YWHeOWwBEsMhyVCFu42LGkzdvoMSwzUOxosCTzf8fKbWy73qBcsQb1VGCwpX+oKX+HqNopCWphO+gB9KjfypffL67s3MLcHn3ZGV6Gz418XXVlJtB7/Whyz15TglHSfBctBMb3xLZbSuA8bNEhFO8dqevSvqbezVT3+ztYckuVM1XsaQCuqvZbpqaPubnj7qrb34UtWE7qmnlS3JxVuhO3Ux7LbqjCZGK8FMjChXgiWei8EomQdoGQCm5nlZ722dkiDwE6/e0UYRM1kzW88bKqTnEnGPdEzjeiZgO1M1XzjBE16quqoyxtO0drvS6I5SatfQUTTQDSt4gsz9d4wRNM6QNMEmjvIz31tdYwAgZ5+984xiKbJmt946FQnTZOMe6JpGtE0AduZqvnGaZr0VNVRlzecprXfp0lzmla/goimgWhaea8sS71XFtG0DtA0gWY38nNfWx10QKCn373EDKJpsuY3HjrVSdMk455omkY0TcB2pmq+cZomPVV11OVNp2mt963TnabVriCiaSCaVt470FLvHUg0rQM0TaD5l/zc11ZHMRDo6XdvRYNomqz5jYdOddI0ybgnmqYRTROwnamab5ymSU9VHXV5w2la+308Nadp9SuIaBqIppX3UrXUe6kSTesATRNohghY8N9Sh0XYTo9e95o1iKbJmt946FTr3jS5uCeaphFNE7CdqZpvfm+a7FTVUZc3naa13tdYd5pWu4KIpoFoWnlvaUu9tzTRtA7QNIHmsPJzX1sdZ0Ggp9+9tw2iabLmNx461UnTJOOeaJpGNE3AdqZqvnGaJj1VddTlDadp7fd515ym1a8gomnCNO1fh80Tt8Nj9KJCY8dxM6zMJI7jDKJfNnG7XDy7/TwAl/ukZYC+qJKWAqkCSwvJ5bB6xfxWrxhD2Z5snlXp+ytMLh/PTw06KkdgKDgrGmJ6izlnC2EAQWEPmwyiX0EPG7d48A7ijQKhQFXT5zMkUG/6TNigEPDj+Wyw4LaQxEIHECkQfACRA0AIEDEgjAAXJIkS5AX1BCeotZ7sMFKAeQxhBaaXzcbzwBP3sjbRAuqtquEFbvfRLF6Adx8lvFDsZRaM52POJnmLGfagjmkAKaBunwA5kGZ6ADEgvAAXJIkX5AX1BC+o9UDrMF6AeQzhBc7eoNl45gp7WZt4AfVW1fACtw1eFi/A2+ARXiiE/dxeLCac3Zo2M+wheAEiBYIXIHIAeAEiBoQX4IIk8YK8oL7gBaVmPB3GCzCPIbzA/rbL87zZQtjL2sQLqLeqhhe4/ZiyeAHej4nwQrEJXzCZzTk0wWGGPajVH0AKqE0tQA6kCyRADAgvwAVJ4gV5QT3BC2pdITqMF2AeQ3iB6WXzYD7krJZkeVmbeAH1VtXwArcxSBYvwBuDEF4ofg05WQw8hx32I2bYg9YvAKSA1i8A5EDWLwDEwNYvgAXJrl+QFtQXvKC0PbnDeAHmMYQX2IsCRt7IZ3/rxfKyVtcvYN6qGl7g7lDP4gX4DnXCC8X9btP5YMwJe5cZ9qBddQApoB3hADmQDZcAMSC8ABckiRfkBfUEL6jtk+swXoB5DOEFtpfNF7MZexJmeVmbeAH1VmF4oXydI3x546QZeEANbOoENBUPBUEvlUNCoErloABcUjkmCIQIjiqJOKqdrw/wovFtl0opADZj+G70K/iMw6n01FaBgfCeWBAxWRiZqccNdlqxoXqvHuONwALGV43fX6yRu0J2KaT0+Ec0pdvSZurMhuyMekuRiVsLMgGOCnaMuvXdfsMdIJ0T2u5uqW93J37XAX7nBJPhnLvPFsjwBAYFteepHhbSj6d6VFgDHtFxZTvuVI3bE67Xwtb5NtieF1gBe0Ee8T3ie8T3tDEC8T0Uu3hzf8RZUaQb42u/rYY651NFKeBxwQ5Sv9ZNZ34VX+ipNy4h5tcB5rcYjAYOJ0ItKPMTGBTUSKV6WEjflOpRYW1SRMeV7YpSNW5PmF8LTVBaYH7BxPd8T/gpifkZAG6J+XXRCMT8cOxieXNvLp7WW2R+7TdIUmd+qigFPC68NFC71k1nfuUtqCz1FlTE/DrA/Kbz+XzE2ctuQ5mfwKCgFhfVw0I6WlSPCmtgITqubL+KqnH7wvyab2fVBvMbhdyPXeFkPSUxPxPALTG/DhqBmB+KXaIeAh671MVM6y0yv/Zb3akzP1WUAh4Xvgi4dq2bzvzKmwla6s0Eifl1gPlNBq6T2m2aiVAHyvwEBoUwP4FhAcxPYFQQ8xMeV5L5VY7bE+bXQmPCNpif5QcBu8LJekpifgaAW2J+XTQCMT8c5jfyAp8N7JlpvUXm137TUnXmp4pSwOOCHaR+rZvO/MrbwlrqbWGJ+XWA+Tnz2WLhsiN0BGV+AoOC9vlVDwvZ51c9Kmyfn+i4svv8qsbtC/NrvsVsO/v83GAq/JTE/AwAt8T8umgEYn4odvFmvh/Y4mm9zX1+rbefRtjnp4hSwOPC9/nVrnXTmV95g29LvcE3Mb8OML9gPHUdToS6UOYnMCio4Xj1sJD+4tWjwtqJi44r2z28atyeML8WmoW38Z2fHzicEjjrKYn5GQBuifl10QjE/HDs4vlTj13qYqb1Fplf+wcJqDM/VZQCHhfuILVr3VTmV76/D76tb9oM0TOKNmWNm7h3zrog6iQ2MIg+iQ0NoVBiI8MSlMzYsklKZOye0KkWDkfY5MDQphweiVpLkYCYGPKWY0jM81AjokwwsMjB73QEoHNqPV1f1Y1ouiPXr65FtOr7tbloiR+phlVDzBs5/+nrA1X1EVzr6VhkQTR1VTWlu6DL9IlH1Ym0OtKGPKt1Bo8ytlawCNHDgRU9odN6bPXTeqjERwmCSnwdL/G1ciaOLkjf/KCnIh/ClJ47eSIbA1Tm09f7TZnyeuP8VOgztdCHngP19QIq9aEam4p9pk4/qm6k2Wlm5Futs/nulftQfVyt4Fd+SJutfkgbFfwoRVDBr+MFv1aOQtMF75sf9FTwQ5jUcwcOZWOACn76er8pU15vnJ8KfqYW/NBzoL5eQAU/VGNTwc/U6Ue5A5Neh1iSb7XO5rtX8EP1cbWCX8XeXfWzOangRymCCn5dL/i1cQKmLnjf/KCngh/CpJ47Zy4bA1Tw09f7TZnyeuP8VPAzteCHngP19QIq+KEamwp+pk4/ynVjvc4uJt9qnc13r+CH6uNqBb/yI5lt9SOZqeBHKYIKfh0v+LVy8LEueN/8oKeCH0qXjszxotkYoIKfvt5vypTXG+engp+pBT/0HKivF1DBD9XYVPAzdfpRdSPNjqwn32qdzXev4Ifq42oFv5FYwe9yMjoV/Kjgp2GKoIIf4/Wun3evC943P+ip4IfRxix7qnQ2Bqjgp6/3mzLl9cb5qeBnasEPPQfq6wVU8EM1NhX8TJ1+lHv4jbyRz64bs7gDFfw66FtdL/ih+rhawc8VK/i5VPCjgp++KYIKfozXGyz4BZ7vcL7BYB13TgU/vYKeCn4Ik3ownroOm/+4VPDT2PtNmfJ64/xU8DO14IeeA/X1Air4oRqbCn6mTj/KbjRfzDgLRVncgQp+HfStrhf8UH1cpuDnLQ9fftgcT4UqX/TCXfwKsLA3HjRT2EtmY+WZvMHaYAcLPIP4J+fA50OmlSs5aJDrerEsJQ4xc2LTkEvQDLIVBuiUqKpLAePpAXVL9J6+9uF5+bQGQZQM5a0nDNiaxDWoluaYy5sjTT1ReaCqgs0PDoA1oNxQPTq6qUoAFeq3KiGIO/l+fchH3pfv1i+hTRCcIDjGGbkEwgmEdxGEW44duOxFBgTD24DhtjsKpuxtXgTEWwiQBuzRHyjelDJ7AcZxlakAx4tHVhfgOPi4aoLjfYLjwifYERwnON5FOO5almPZnAAgON7CeQqO7dqOuEEIjhtvj/7A8aaU2Qs4jqtMBThePFCyAMfBh0kSHO8THBc+X4bgOMHxLsJxx3eHFrvJvs3K6QTHazbI2J1atsgxLgTHu2KP/sDxppTZCziOq0wFOF487qkAx8FHPREc7xMcF+7+TnCc4HgX4bgd2MMR+xtPh5XTCY7XbJBR4EzHM3GDEBw33h79geNNKbMXcBxXmQpwvHgYQwGOgw9iIDjeJzgu3JuV4DjB8S7CcWswmrhjTgAQHG9h7fhw4kzn4gYhOG68PfoDx5tSZi/gOK4yFeB4sVVyAY6D2yQTHO8THBfunEZwnOB4F+H4dOyMB7wAIDjePBz3bXcxYNe8mAYhOG68PfoDx5tSZi/gOK4yZeB4HL+f3uKBwwRQQOOX1+8ub4Bi8QsyaQGL5wBJkrLSiKQlFK7U/T23VzJ5qtRmybL0zhu0QlXlqBU8aMlUDx6ztBkqSuNvTjNUpbEfCn7RSa7mu9EvkyKkr50btw6nptE3lZhtt/t41kfPdmH164UQOGa7eeWiCYARKh8+1EDvtOlUWtesEx6aUW99gEt9MrhczOi15cZ4AOMyzm0w3bYt1J+koTSI5IlXbOIfwWnQBZ7/UEKgJFYeR7+CNwqoK+3WEa7gOrcggBeS9LUGSQqEi9vRMk+81BtbEgMzgYHlOlJmBlXgYALDAliYwKjEw3TmYV5gBez9rcTEiIl1lIlZC2cxZnfqIC6mysVyys1NCZfL9bKxBgxMfEwna6AxsvlksfBF7rV9TjYbzwPPF75VYmXyrKzY2JTHyuD9TYmVmcDKBAaFsDJZFIo2KrEyjVlZMPE9n9cFt5jZiZURK+sAKxuPrYXFXgPD7J9IrEwiveaUmwusy+V6WVkDBiZWppM10FiZP5pP5uyNhqwJsU1W5gWz8Yy9CJt1q8TK5FlZsb8tj5XB29wSK0NmZbneVZkJyIGyslx/2sygNiv1og0LYGUCoxIr05mVjUJexq63ZRsKdo6VCcQusbKOsrKRPx7Z7PMBmW00iZVJpNeccnNTwuVyvaysAQMTK9PJGmiszHN9ey7SYbd9VrbwPG8mfqvlrEydwRRbAvMYDLwzMDEYZAYjgN/lGYwAtIIwGFnEhjYqMRidGYzlBwG7NpVd8tA5BiPL6InBdIfBOAt77vK6puNAqv4ymJxyc1PC5XK9DKYBAxOD0ckaaAxmsVgMPPb5ZqwJsU0GMw/mQ49NDFm3St8rybOyYmdoHiuDN4gmVobMynJd3zITkAtlZbnOzplBR6zUizYsZA9W9ajEyjRmZb4XuAF7Esq24uwcKxOIXWJlHWVl1tidjdkVWWYDWmJlEuk1p9zclHC5XPMerPoNTKxMJ2vg7cFyPc9nb0pmTYit7sEaeSOfTXZZt0qsTJ6VFRuE81gZvE84sTJkVibASeRZmQBchLAyWRSKNiqxMo1ZWeAHjs+eMLPfoHWOlclWKYiVdYeVzd2RO2BDL2YfYmJlEuk1p9zclHC5XC8ra8DAxMp0sgYaKwvmnjNnd8ZgTYhtsrJgvphxzkln3SqxMhFWFp3IxKdi8atQ+nXZ2U30q9MHNDXe9LvWiaf0+CarFfQ29e2ZzZ5OmFt6F4uasXLuhjKIp7Dr/Ho3isiZq/zqWNeEkLAgMosoAtEYdKj+nG2zGES/gpnKxj/YRmYBU/gjeqN22Y1CMUF1A+P0WY7w7sUEEvoBEprvSEswgWACwQSCCdIW9Wwv4HQE0A0oeHN/FAzFb7VOqFDSVTMNFeAtNQkq9AIqtNAmkaACQQWCCgQV5A94DUKwwP5KgpWr2oQKgeXNvbn4rdYJFUpavaWhArzPG0GFfkCF5nt39Q0qhBHjTyT2fdYOFXI3lIEKha3JBBUIKugCFVzf90bCuapNqODPgqHHZmDMW60TKpT0VEpDBXhDJYIK/YAKzTfJ6RtUGPvThSPR5K52qJC7oQxUKPRhJKhAUEETqOAF3oSzU46Vq1qFCiMv4OynYN5qnVChpNFHGirAu3wQVOgFVGihc0PfoEJgje0B+5QS5gr52qFC7obKN3EQVCCooAtUsCKyLpyrWl2rMPP9wBa/1TqhQsnu8zRUgG89J6jQC6jQwnbivkEF25l4M3bdlNnipHaokLuhDFQodOEhqEBQQROoEHi+w2k1yspVra5V8Pwpp4Er81bRocK/DpsnPkSIX4UiA5uQQVlTmvq6pzzkRXUTkqjsHQIBkrLJTXxFYvwjeNeATehyU7xcoOj5xPU35BB+1Jw6eY+aQKa5/MRTe28KfR4VrfHDZBD9CvofoJcCGhhAvFEoFKjeDBm9S30zJGEDwgZ1YgO17ULtoYP5ZLHw2U1qOosP6n9mjRCC7Y6CqYhjdgEjNPCwaChhNp6HZFzYC9vECai3qogUSvZCppECfC8kIQVCCnUiBbXdQu0hBX80n8zHwvfdCaRQ/zNrhBSmju3abFjE3LpqNFJo4GHxjo0OZuMZe4E1ywvbRAqot6qIFEq2QqaRAnwrJCEFQgp1IgW1zULtIYX6j7nXDynU/8waIYWxO7VskYftAlJo4GHxjmf1PG8m7oVtIgXUW1VECiU7IdNIAb4TkpACIYVakYLSXqH2kEL9x0nrhxTqf2aNkMIocKZj9m4UZo8Lo5FCAw+Ld2Rg7aej63mQuyJSKNkImUYK8I2QhBQIKdSJFNS2CrWHFOo/4lQ/pFD/M2uEFOzhxJmyvxZjbkYxGik08LB46xRqP7FXz8OFFZFCyT7INFKA74MkpEBIoU6koLZTqD2kUP+xe/ohhfqfWSOk4NvuQqbDhdFIoYGHRTzwsu5TJPU88PKGFC7/Ov7j/wFQSwMEFAAAAAgAEp7JXGB5gtM5NQAAc68GABoAAAB3b3JkL3N0eWxlc1dpdGhFZmZlY3RzLnhtbO19XZejRrLt+/kVterFT56WACHJy33OEgLGXsvj8Zn2+D6rq9Rdmq6S6koqt+1ff0CfgBLIj0jIhO1+mClAGZC5M3PHDoj4/n/+eHm++3253a026/ffDP82+OZuuX7YPK7Wn99/8+9f428n39zt9ov14+J5s16+/+bP5e6b//nv//r+63e7/Z/Py91d8vv17ruvrw/v75/2+9fv3r3bPTwtXxa7v72sHrab3ebT/m8Pm5d3m0+fVg/Ld18328d3zmA4OPy/1+3mYbnbJcbmi/Xvi939qbmXDV9rL4uH8/91BoNJ8vdqfWnj9o42r8t1cvLTZvuy2Cd/bj8nv9h+eXv9NmnzdbFffVw9r/Z/pm35l2Z+f3//tl1/d2rj28t9pL/5LrmB735/eT5fvKm69nijp/85/2LLc5PHn4Sbh7eX5Xp/uL132+VzcsOb9e5p9XrtN9nWkpNP50YqHzjzsF9fh57aoIfbxdfkf64N8tz+4/FHL8/HO69ucTjgGJG0icsveG4hb/N8J1nwfZXrmmznflbr279vN2+v19ZWaq39uP5yaStZBkTaOo1R9tF2ajfz4Wnxmkygl4fvfvy83mwXH5+TO0p6/C5F5P1//9fdXbI8PW4ewuWnxdvzfpceORzb/rI9HTseOh88/3X8O96s97u7r98tdg+r1a/J/SWtv6wSQz/M1rvVfXJmudjtZ7vVInsyOh1Lzz+lFzJ/+bDbZw4Hq8fV/buc9d1fyVW/L57f3zvOzan5rvTk82L9+Xxyuf723x+y95k59DEx+f5+sf32w+zawvfvMt1w+iPXUYmBV1bfvRb6bve6eFgdbmTxab9M1rZk+FOrz6sUNM7YP//xr7d0zBZv+03+Ll6zd5E3mR4pDOrhuffJIvbhuBclFyw//bR5+LJ8/LBPTry/P1hPDv77x1+2q802Wdzf30+np4Mfli+rH1aPj8v1+/vh+cL10+px+f+elut/75aP1+P/Gx/m/6nFh83ben98oEsHPe8eoz8elq/popxcsl6kw/xz+qvn9Ce7jLFDG2+r6y0dDxRMHw7+/7Pd4bmjykw9LRfprn03rLU2JbTmMBsXb8clascjamdE1I5P1M6YqJ0JUTtTxXb2m4cjUrNtuFOen91Aju9nNwjj+9kNoPh+doMfvp/dwIXvZzfo4PvZDRj4fnYz9vU/e1gc/r754UgMNb+u9s/L2vVtSLGcnvaZu18W28Xn7eL16S7lBTem6pr58PZxz3fTQ4Kb/rDfblL2W2PLcQhsRS+vT4vdaldvjWI4fk1Z3t3ft6vHWnujkv2txsIvz4uH5dPm+XG5vft1+cdeqpGfN3cfjhyofsAJeuWn1een/V3Chx95LPolA8Fl5KfVbl9voeShuCxwDa5fAt0aC/9YPq7eXs49xcGRfJfCjlNvx1Oxkw4Kz8OMlI1wPImvYiQdfJ4nGSsb4XiSibIRt96I3CoVLrZf+ObiWG62zzfPm+2nt2fuVWUsN+cvdvgeRm7aX4xwrS1juTmfW4TvZg8PiUPKA2XV1VjAlOqyLGCKZn0WMEizUAsYJFixBazJLd3/Wv6+2p0Jt/i47zK8t/YW3ZIOEWIy//u22deTZIdCuvhxvV+ud8s7PpMuBXvN7aQCg0+wpQpYI9hbBawRbLIC1hR3W35LRNuugEGC/VfAGsFGLGCNcEfm4H1UOzKHKaodmcMU7Y7MYZB2R27GhxKwRuBMCVgj3AI4rBFuAc34WQLWiLaAekvEWwCHQcItgMMa4RbAYY1wC+Dwyqm2AA5TVFsAhynaLYDDIO0WwGGQcAvgsEa4BXBYI9wCOKwRbgEc1gi3AP2aG78l4i2AwyDhFsBhjXAL4LBGuAV4zW0BHKaotgAOU7RbAIdB2i2AwyDhFsBhjXAL4LBGuAVwWCPcAjisEW4BHNaItoB6S8RbAIdBwi2AwxrhFsBhjXALGDW3BXCYotoCOEzRbgEcBmm3AA6DhFsAhzXCLYDDGuEWwGGNcAvgsEa4BXBYI9oC6i0RbwEcBgm3AA5rhFsAhzXCLcBvbgvgMEW1BXCYot0COAzSbgEcBgm3AA5rhFsAhzXCLYDDGuEWwGGNcAvgsEa0BdRbIt4COAwSbgEc1gi3AA5rcqtJ+g728/KO+4XlIeVbJvyvSZO8AH581H8tPy23y/UDx+stFFbPzypgluIN9GCz+XLH90mAW4IcMXurj8+rzeGlqD9vDIxr32D/5/zuh+XlncrC9xOMG0k/eMt+3nY4dvruOrl8/+dr0upr9jWtx+M3C6d3yw8X/vh4+Qjtcnvp/dydvhU8nbve++kurge2u2SKnq4eDOK5P3Xj6w0ejNTf2eVeTj0wZN/N9Ru2q/2Pi2Ss/rkuveH18o996cnn1frL+eTZ9Pxpsc1cch2I84VTue44nM58EZn89WW5fP05ub93hWM/rdbLXfbg9cPJj8tPm23Sfd7kgM7Td5SXNe5w9eZtn35E+dPvz5c7udxC7iPK3Net35d927r4T8W3renJ0m9bc7+8ftuaHs5/25qOY+6Pee7xH9L94Pwsrj+KpwcEH9o77BXv7xeHTeJ6ON0Y0zkZ54xkPp+dFE5kPp6dZHvr1EMKYHaqwexoBLMjBOb8+mcAyE+fB3OCfNghkHvxZBiEZSAvgbRfDmmfFtJuNaRdjZB2+wRpp2+QpoGnVw1PTyM8PSF4XklpZyDr2g3ZVe4PM+A8qobzSCOcR32Hs2c+nHOwdDw3PorTHOx4HNMC1a8Gqq8RqH7fgToyH6jca2urIB5Xg3isEcTjvoPY7xCIvUH6rwjifdKNVwj/ukrzRAXECJ5UI3iiEcGTviN4bD6C1YWGQeFERmgY0EJ5Wg3lqUYoT/sO5Yn5UNa6GGtF/UMCrsVDMg4VgZlTjqnLp/aHDFPM+VCSjaoKvENx8FY/0T5NwVTxNIcUTfWxprvDddXzTnbi7T8+56Cb/P3jOp15X0/BvuOTPP6xyA11ctl8+fz8j0U+m+V+81r90+PKsvy0P142HEyqLvy42e83Lxwtbg9v9tQ0mY5V8b5Px3jguX57+bjcnmKRpXHDQ26WkrE8Jm6hHkaZreTnzTnnVtmtns/zzhe1BfwmC+phtE85UL3LH7c5UDPrsMDi8vC2S3B1iBEXRzAX8mR2zg/niOtdYTcs7LbMpapyex1yb601nWvObmR1CFMQM049ZhxyzDg9xkz7EUFBhLj1CHHJEeICIdUIUXTLjq9TMQf1eEqDP3ZouNYZG2bf81PboF+DxzzTu1Czw+/THPOnd8r+Sr2ku+OWnr6UcxjOY7/zztd3eXssfuAOeBnCCRTr1LF5WzyfeI3xblwOxsNxsj3edFz6RE7d1njpuLwifnKRtxcs3uycl584pQvmyNG2YF4BXj6x6FbK4jytmUrWrJMdBRF7Hb7kjWYi5nJWw2p8brt+QabzmBJvtFBJYvXMeO/r2JWZi81d8WhfM2ABdzgqgafjlcLT8bStcTnYVIKWbqVjTIMamFqz2HUGP+zlLdWOrhlGmXApZCHlX+luIeB6ZCvV6iAnpppf+vHLoLBB1fIymb4KNo9/HhLSM7spPXvMV8/fQ9k5dG69PhjC89plvi9ns2E4Cfl1sqHDeo+dZn3KPWd1T9ItUJeh4+7Y8g5UgU7JG+rXJxZ5R531gBzvoTcDn4sbdfp+oiGhNd8PdZ1ND7Aa4Uw/wkpeGL8+tMgr46wn5HgtvK0FikEdrrvpsFyiG+qT6PK9Vjc09Hisken48Nhgv5azlHJyokRJ6MGaZSbu8eW6p8X6c1rI9fB3A0wl7ZWSreZURKThLnMdP54OuLps7LTWZSVr56HLRJbNprtsOJi01mfB2/PzsmJy3p0uMKv3bnWO5MiPl9+XCx3NdGfV3D1eYdwUrulRp+UerZrapx41bYbX9KjbWo/+fHhlpaJDTxdY1Z2jlruzasofr2h+yjtT352WE52aHvVb7tGqKX/q0canvFqPjlvr0XnS9Gr9VhIFOXTp5RKzurTKdWTS9YZ407m7qub9+RrjZr5QpzakzmY7tWrqXzrVtMkv1KkHyt9Ar/5j8bDdlIveL+npEgni8lMdglFNX+4XH3e5dTQ5cP5x2oHpM75udsm2P85sU5VXDofZcHP1peNsyLryUscdeLyXTrJDXnmp6414H8tLeFN+W7n2nUhUN80l9rZdHQWxQ7TteiSvD11cAn2v+VcIcnlUMkF9uIQ4AHGdR5J63A3gTR4M9lpyrPPH7PLjKf71mPslikPDtQuQo5JpKj8Q3PHiweE/9ocyusB/7Y3yUaDDfHFQa/q9O92cy1DC7Onze7ke+Xu5XvUCkznL+hDEmtcyPub+MCKziCA6RvXoGJGjY9QPdDSa40Bw3P36cffJx93vx7gbk/dCEBPjekyMyTExBiaaSyMhCIhJPSAm5ICY9AMQhmVlEETGtB4ZU3JkTPuBDHuTHLAd7vnikPmajZaH00kip5vxsu+oBhd6snZcZVSxD70ZWKxyMpRXkWH5R8VDxY+Kr98C7Lebsq/xT+dkVwmGM5+NUqiJKCUdr9gblwoAzP64nCXsEZUvJbn0DsUF4lQvoEKYO1cU0CbQZW+hVqdzW/r01NP46Sk7ZZAzKY/9TN1DhY5DdpLjX8qrmeGSyQ1I6rFKx4Fyk4QbnRTrnTFDk/u47HlZvZAWq7zQrafDFmT6yWByeruyjuqpygRFtFf38k1ZG8JtS+V7UquBfa2bU4Xs61V0fe7S9fku2WyfE+pf3qHzwWjglXRo/pPqt8J+SArwmt6+LWZE2N3auSr5UFR+Lq9nnNK6ThV5SDJlnwhHxm1vZMq6WDWVyz/n53pTzH7MFqQq7UhGMi9Rf7ydLJq36S6n2X7lejfpkvHw2qfpkbRoXUmXpqcPRe3KezSbJrGq30YCQWr6/HOHhuTTKQab7eNyW3gX6pBOscbNGWTcnHzimyNBPiZbVGuE1+WqaeacplGtldU6GdrlD0Tt/KbSzil9ZGHsvu9lfszbqX+ot3sqx1n2nmem1LD6AuAL+HWaFoD8xsb9gsv54E0CnsyOVrbAHBzxf22+Bov144fVX5fOHRaXmMOFidnaC3UsWZOSCcXx2g/HIqTUer9mcQ4Nv2wvrXxabXf7BEb3mQ7ITJLCNDmLYfns2XxzpjBrivOmQAlvSeG74jQ7PFsOnA+F5vYPN2DVCtebrXe9er45rw3QBbyU3kBhJy2/5LeSSw7AKnbt8eAveeyd0FYFwOcF8Af8tYe/wwKYPNA9ASzEUN+40Y8JAxj+ttzu70lQXAe0loBwXDKeLizw4Xm52Ba5fPLnp9XzQeBJ/12QHR8O5tlZeuwoIbtxYceVwNthEH7YbP/CIOgfBBXf5dvZScGu92HujpdWlePuhjMjma+98+4MZ6BZev8VCGTDpYFLQwpZbaRS7A4so5Vwa4DBtjEI16bXrDp0wziKCqy6yNXg3Fg8DATuTWl+E4Z7U5HmpBvuzdRzfdcre9ujv+4N51sw0rsw71s2cG/g3lBDVhu1FLsDy6gl3BtgsG0Mwr3pNa+O4oRZX1lZllfnj8K9sXQYCNyb0kyDDPemIuFgN9ybsT913Dl7N3B77N5MgyAYTcv6Rd294Wwf7g3cG3LIaqOWYndgGbWEewMMto1BuDf95tV+FIUjJq92c0fh3lg6DATujSfg3mQzj3bSvRnF3nQ8Y+8G16BO/9ybycD3Zk5Zv6i7N5ztw72Be0MOWW3UUuwOLKOWcG+AwbYxCPem17w6jMNJNGHyai93FO6NpcNA4N6MBNybbDbTTro37nDiTQP2bnB1UPvn3njBbD73y/pF3b3hbB/uDdwbcshqo5Zid2AZtYR7Awy2jUG4N/3m1U40i/Ofd9xyNbg3Fg8DgXvjC7g32QpRnXRvItefD0qiN9dNon/uTTye+l7JLlksIiuzC3O2D/cG7g05ZLVRS7E7sIxawr0BBtvGINybXvPqOIy8sJiwq8jV4N5YPAxS7s1Pq92+yqc5nFf3Y7Jp1oxJ+G63l8Gfj7k8s7zBuZ5vpzQSSffVNbqVHuLDf8VR/rh4+PJ5u3lLtp17Nofg3IK4l/MC2rJpMJW3z547DY+bt4/X6e6rrSV610HdK6HWtRBuhiFuRmMpxoF9TdgndngACFsAIe168WSsTq+jTFcNXyx7WePJpMUnniGpqmUnHjJhwydr0icr4C2fvRNeWRNemXyWaB05oBvOMk296MI7s9I7wxwwdA607aUBGC0DQ9Vbq0zAnfXWKLJvl3tr82Dg+9kUEfDW6HNji08/QzJvy049JPaGt9akt1bAWz4ZKby1Jrw1+aTXOlJaN5w0m3rRhbdmpbeGOWDoHGjbWwMwWgaGqrdWmU88661RJBOHt5a9rPFU3+LTz5BE4rJTD3nK4a016a0V8JbPrQpvrQlvTT6Ht44M3Q3nAKdedOGtWemtYQ4YOgfa9tYAjJaBoeqtVaZHz3prFLnR4a1lL2s8c7n49DMkL7rs1EPadXhrTXprBbzlU8XCW2vCW5NPSa4j4XjDKc2pF114a1Z6a5gDhs6Btr01AKNlYKh6a5XZ3rPeGkWqd3hr2csaT8Qu8SKyGWneZacessjDW2v0u7U83vKZb+GtNeGtyWdY15E/veEM7dSLLrw1K701zAFD50Db3hqA0TIwVL21yuT1WW+NInM9vLXsZY3nlReffoZkrZedekiKD2+tSW+tgLd8Il94a014a/IJ43Wkg2844Tz1ogtvzUpvDXPA0DnQtrcGYLQMDClv7e/b1WOVl3Y4r+6cZROTwDlDOv6W0/EfGi9U59DT/G8amodLaZ5LuY036/0ubXv3sFr9mg7e+/uXxX822x9mCRDSxpcJXZztVovsyeh0LD3/lF7I/OXDbp85HKweV8Uhadxh6lJ+6KHZCaJZixVHKaH2k1RboTX0beKiygXmrUaVxY7pRKrx2PHI2PrtW0Ho9SEUj+keIO6EwkjzQfrvYilbQCx7zNiinMBdu1SmQZ5iAbAdABvAJt/CpZV8nupO6XWU1Z0g7WcvQ3UnQ6o7sbxvXQYElw7Up8otfJD5bff17SkwUir1m1NhRKts2E4BHAj+LU5hFFDDDIb0D+kfdMDGtaRTIQAAQzMwxBTT0A3jKLrYytetzR7tTjAACNRCcxrlMFaAvM3AAEBuP8h1hwgqS4pmQwQUJUURIshehpKihpQUZfnpugwILh4oippb+BAisF0TsKeqXWmIwJyydloFxnaqLiJE0OIURtVezGCECBAiAB2wcS3pVIgAwNAMDDH1NIpDN2QXdMkf7U6IAAjUQnMa5TBWgLzNEAFAbj/IdYcIKuvYZ0MEFHXsESLIXoY69obUsWf56boMCC4enAYQIkCIwA5NwJ5SyqUhAnNqKWsVGNsp9Y0QQYtTmC9EYM8UxgxuYQYjRGDxI4MO2LuWdCpEAGBoBoageupHUTi62Mqqp27uaHdCBECgFprTKIexAuRthggAcvtBrjtE4PGGCLL6PUIExoQI+Iu9y8xwkdZl5rdI+xKzW6R5qRCBuAHBxYPTAEIECBHYoQlwzxjdK1btmlUaIhAzoXPZ0iow8q9tCBF0ZArzhQjsmcKYwS3MYIQILH5k0AF715JOhQgADM3AEFNPwzicRJOLrax66uWOdidEAARqoTmNchgrQN5miAAgtx/kukMEI94QwQghAhNDBF4wm89LalaPCn6CRCoxgdalEokJtC+TRkygeblaBMIGRLOU8RlAiAAhAjs0Ae4Zo3vFql2zymsRCJnQuWxpFRj51zaECDoyhTlrEVgzhTGDW5jBCBFY/MigA/auJZ0KEQAYmoEhqJ460SzOJ2S/msoe7U6IAAjUQnMa5TBWgLzVWgQAufUg1x0i8HlDBD5CBCaGCOLx1PdK0OUX/ATxGS7Susz8FmlfYnaLNC8VIhA3ILh4cBpAiAAhAjs0Ae4Zo3vFql2zSkMEYiZ0LltaBUb+tQ0hgo5MYb4QgT1TGDO4hRmMEIHFjww6YO9a0qkQAYChGRhi6mkcRl44uNjKqqd+7mh3QgRAoBaa0yiHsQLkbYYIAHL7QU4dIvjH8nH19vLhafGY3PyQHR84XnN3uujuIoErBAeylQwQHKD5fmCQ/iviar/8I1N+/biWBXHBYZCIBsobkwoNypuTiRPKW5P79kDKHsIA5oUBKjzvw4HDgJ/BER/+Kw77x8XDl8/bzVvCh/OW23uzT3I6NLy0NL64NL28SMqHhUsIqPPg8F+BOh/vX5kjGxUSMFWUx4zs/IzUKci3IonTG5VULbmXufkg/cdc5rLHjBXBTNgqWulDQo2lncmt5sSfXvbjdObPr/zBqzfSqx8Hs8G8pHKlBr9eyZzMVq9kUGKrV7In5d3LWoR/D/++Ef9efko0vsi0sMw0v9AYQ968eDIMro+QDZHB02/G08fc7M3chMffuscfumEcRSULXvYofH7zehFef9rDjpjXn/1ID16/MV7/PB4H45JiVE7lBiW16SuZk9nylQxKbPhK9qS8flmL8Prh9Tfi9ctPicYXmRaWmeYXGmPo23wwGnhsr99RZ2rw+jm8fszN3sxNeP2te/1RnHisTsmClz0Kr9+8XoTXn/awK+b1Zz12eP3GeP2BO59PSupLuJUblNSmr2ROZstXMiix4SvZk/L6ZS3C64fX34jXLz8lGl9kWlhmml9ojKFv0yAIRlfnKEvfXHWmBq+fw+vH3OzN3ITX377X70dROCpZ8LJH4fWb14vw+tMe9sS8/qxLDq/fGK9/Gk9mQYks7VVuUFKbvpI5mS1fyaDEhq9kT8rrl7UIrx9efyNev/yUaHyRaWGZaX6hMYa+FSoa50tpw+tvwuvH3OzN3ITX37rXH8bhJJqULHjZo/D6zetFeP3HMkJCXv+l6hC8fpO8/vFkPgg99gY1qtygpDZ9JXNSH/WpGJT5pE/Fntx3/ZIW4fXD62/E65efEo0vMi0sM80vNMbQt0KRwnx1THj9TXj9mJu9mZvw+tv3+q2veW3CtmF/UWWLvf6S0r1lXj9FAV94/dnLaAr4ToPBuGSD8is3KKlNX8mcVH0OFYMy5TpU7MkVAZa0CK8fXn8jXr/8lGh8kWlhmWl+oTGGvhXqDuULXsHrb8Lrx9zszdyE19+6129/GUsjtg3r6yRa6PXzZfGjSN6X9eLh5As5+cOyDSlPV2p3Us524EHCgyT1ILnxe0M+WUsoAcILAKpZrVEDrRGI5yB8++PWfCmAlIO75VecI0hLF5wW3BUTF0nWSAFXjS5+HQBUHWJ6P86S3n+n+zucpP8q1uvsmdQLXKa/aU22MP651svUwaABGGi0XuFz/bU4VpVMtH2eABQooEBNHROqcOlQVriEXJa9DHIZ5DLIZf1c4cUYYI9KCUIwsxemEMwgmNm5/HUAUp2QcPSONEQzc8QliGb1AAOZhmgGFBglmnG+WkZZIBaiWfYyiGYQzSCa9XOFF2OAParECdHMXphCNINoZufy1wFIdULC0TvSEM3MEZcgmtUDDGQaohlQYJRoxldf2aGsrwzRLHsZRDOIZhDN+rnCizHAHhWyhWhmL0whmkE0s3P56wCkOiHh6B1piGbmiEsQzeoBBjIN0QwoMEo04ytP7lCWJ4dolr0MohlEM4hm/VzhxRhgj+pAQzSzF6YQzSCa2bn8dQBSnZBw9I40RDNzxCWIZvUAA5mGaAYUGCWajcREs0u9XohmEM0gmjGgCdEMK7weZtujMuoQzeyFKUQziGZ2Ln8dgFQnJBy9Iw3RzBxxCaJZPcBApiGaAQVGiWa+mGh2KXcN0QyiGUQzBjQhmmGF16RGjKe+x/Yl/ALMIZqJ4hSiGRlMIZpBNLNy+esApDoh4egdaYhm5ohLEM3qAQYyDdEMKGhXNPtptaspmZleQVImM/taWjvqWB6yOfAXqlqfwJ8ra50Dvc1aWxnaOfqAYzIptQ5drkyXKy7d23iz3u/SObF7WK1+Tbv0/f3L4j+b7Q+zZHFJb2mZMP/ZbrXInoxOx9LzT+mFzF8+7PaZw8HqcdWKn6gNZsQbLUNhUnKxhrE3HYesZ3Aa3oMVe9mqUVQUX/LbQ0PuOUBADAJJH1ogq3n6r+C3HR8pe+zX1Xr//t6NzXdEtT2QAp/lKgV/5LWUdeBBcAsXmkZwC3U4T31wU4hTesHibB8kFyS3EaCB5ioyHO5+tmwkQXUBhEbobuiGcRQxA162El6Nj6ROeasLueYpL0UVV1DewoWmUd5CFa3csuIQUF7O9kF5QXkbARooryLT4e5ny0YSlBdAaITyRnHCENnZxPJH7aG8Gh9JnfJWl2HLU16KGmygvIULTaO8hRoYuWXFJaC8nO2D8oLyNgI0UF5FpsPdz5aNJCgvgNAM5fWjKBwx+aFrK+XV90jqlLe6iEqe8lJUUAHlLVxoGuUtZLDOLSseAeXlbB+UF5S3EaCB8ioyHe5+tmwkQXkBhGZebIjDSVT8/vL8UHZSXo2PpE55q1Og5ykvRf5zUN7ChaZR3kL+ydyyMiKgvJztg/KC8jYCNFBeRabD3c+WjSQoL4DQDOV1olmcf8X1+lCWUl59j6ROeasTmOYpL0X2UlDewoWmUd5C9qjcsuITUF7O9kF5QXkbARooryLT4e5ny0YSlBdAaITyxmHkhcXkBueHspPyanwkecrL8dkaxddqvmEMtz1+AHatkP0sm2rQmsxqOUqMtG1tuQS7v87d7xRfzNn9Nd+xTjZI5lWSaDqeGjxvAWpqTmH9eeAZrkqDbFFkwMQQY20a6XZS/xsyz2tHjR5W/RhzhkfZyJDrTu+HaV465MjRf9vrtuREJFFIMQil2ekpVQ7tE3kncfviAJJSyxR0GP7MmQ5l5kwIMxBmSLJ2irMcQ3KCypJqpByFQMOJ0FKBRiy5oRWUsusSjdiQQaSBSKMFWP0YdbNlGpXUtJjqpYMOoYbxuqw12Xw7LdW0MAwQazgg1JJYw/PyDGXOZ4g1EGtI8k2Lcx1DslnLkmsky4ZYw4nQUrFGLC2vFbSy62KN2JBBrIFYowVY/Rh1s8UalaTqmOqlgw6xhpHB0po89J0Wa1oYBog1HBBqSazhqFbgUFYrgFgDsYakUoI41zGkDoMsuUaZB4g1nAgtFWvEEspbQSu7LtaIDRnEGog1WoDVj1E3W6xRKQeCqV466BBrGCqBNRVUui3WND8MEGs4INSSWMNRZ8ehrLMDsQZiDUmNH3GuY0gFIVlyjQJFEGs4EVoq1oiVQrGCVnZdrBEbMog1EGu0AKsfo262WKNSyApTvXTQIdYwvr+xpvZXp8WaFoYBYg0HhFoSazgqxDmUFeIg1kCsIalOJ/HJtxm172TJNUrrQazhRGh5zhqhIl5W0MquizViQwaxBmKNFmD1Y9TNFmtUSjBiqpcOOsQahkpgTdXKbos1zQ8DxBoOCLUk1nDUNnUoa5tCrIFYQ1JXVZzrGFK1VZZcoygsxBpOhJaKNWLlJ62glV0Xa8SGDGINxBotwOrHqJst1qgUD8ZULx10iDWMXrem3nKnxZoWhgFiDQeEGhRr/r5dPVZXgUqvICn+NG5dm+mcouEN0n9sVed88Dh3gzgHMKlgjrwxqZdT5M3JxBblrRVW8obs/daEvT6qPQ/5tUdzXcXCqi6tNn0s9Nx8x1aVlHQJWaO6RI0h+eyS2XhFfPxmhq1xo5I+DvfkmgzSf5yTa9yet9D+AymwQK6aoEc2SFkTFLQwexkJLRwHs8G8tFQUOTFUMidDDZUMSpBDJXtS9JDAoiBBlLUIiqi/nhNIYgY/ZCRRYY6BJhpJE2fjIA75J5gNRFHjI6lTxeqKZHmqSFGRDFQxexlNHa94HIxLch861YugVF0MFXNSlb5UDMqUalGxJ0UVCSwKUkVZi6CK+qtJgCpm8ENGFRXmGKiikVQxjGfjmc89wWygihofSZ0qVtdDyVNFinoooIrZy0ioYuDO55OSzEtu9SIoQxWVzMlQRSWDElRRyZ4UVSSwKEgVZS2CKurPZQ2qmMEPGVVUmGOgikZSxXkYhrM59wSzgSpqfCR1qlidjT1PFSmysYMqZi+jKTgXT2ZBib/sVS+CUgVcVMxJlaRTMShTU0jFnhRVJLAoSBVlLYIq6s+kCaqYwQ8ZVVSYY6CKRlLFIA6GJR/UsCaYDVRR4yOpU8XqXLB5qkiRCxZUMXsZzbuKk/kg9NiL4Kh6EZR6V1HFnNS7iioGZd5VVLEn966iukXRdxUlLYIq6s/jBaqYwQ/du4rycwxU0UiqOBuFo4j9hgdrgtlAFTU+kjpVrM5El6eKFJnoQBWzl9Hkb5sGg3HJIuhXL4JS+VBUzElleFMxKJOiR8WeFFUksChIFWUtgirqzyICqpjBDxlVVJhjoIpGUsU4mM9mbF7FmmA2UEWNjyRPFTk+Z6H4imXSOjNEjmJjOS5HH5yaFie0/G3LsFf+1iWoKn/jUrxUtHlBEsrVPBhnB3LtSC1qcoxR5AXR5B9nbw2n6uRBjT032IXipNtRW0BuFm4kUVbAmaKLYRbQGkjc3F+k8LiFFxAUN8Zrrv7iKYCnffDMD//xcgFXHUvIdVYNy0oC7hPsn5UUXNEAASAbHz9LUior6DL8mekcysx0EGog1JQn1I0nw6A0e5SqVCPSulRyZYH2ZbIpCzQvlz5Z2IBovmQ+AxBtOpH9zkjZJoydmP2xBoQbCDf6PCoIN0JA67HvDeEG4JGvFB1Eo5I3zG2VbuzJP0oq3nCTcXn5hp/vqwOzhVHsjYTD84oNZcZYSDiQcMrzmA5GA69kUXEKjEEi1a1A61KZbQXal0lkK9C8XN5aYQOiaWr5DEDC6URWWhMlnHgShVHI3V+QcCDhXIbecMccEg6QAgmn7+BxwiAM+PmABRKOPXnBSSUcbjIuL+Hw830CbbH5UeyNhMORyd2hzOQOCQcSTnnSyCAIRiUp9NwCY5DIKyrQulQaUYH2ZbKGCjQvlyRU2IBoTlA+A5BwOpEt3kgJZxRPSt5aYvUXJBxIOJehN9wxh4QDpEDC6Tl40iyPITtEweQDFkg49tTrIJVwuMm4vITDz/cJvutrfhR7I+FwVFhxKCusQMKBhFPq408GvpdJBZVbVLwCYxCXcERal5FwRNqXkHBEmpeScMQNCEo4nAYg4XSiiouREo4TxTE7GMTqL0g4kHAuQ2+4Yw4JB0iBhNNz8ESjMI7YnjKTD1gg4dhTR4tUwuEm4/ISDj/fVwdmC6PYGwmHo/KZQ1n5DBIOJJzyZCnBbD732YvKqMAYJHLhCLQulQtHoH2ZXDgCzcvlwhE2IJoLh88AJJxOVFczUcKJwtiPp9z9BQkHEs5l6A13zCHhACmQcHoOnnAWRbHLzwcskHDsqW9JmwuHl4zLSzj8fJ8gF07zo9gbCYejIqlDWZEUEg4knPI6meOp75UsKn6BMUiUUhVoXapyqkD7MoVSBZqXq4sqbEC0DCqfAUg4nah6aqKEE0exVxKlZPUXJBxIOJehN9wxh4QDpEDC6Tt4wmgaskMUTD5ggYRjT91pUgmHm4zLSzj8fJ8AmM2PYuclHI4cOBSpb6aZ0+0oNt3TOfLoOc08JnxktQ5BC1J6h6ANGc1D0ITcUitlRHSx5TcC/aMrNbhXZVx5xUmjBVGj3eUnmadNLGm1i5rjkZnRva5Jehc6Vlh1IlhwDLMz1gSprXMzlhDnbU9ZOiuYsYbMWArR0tYp28R0qgA64cJggvKle1/pKUgFZFVt8OqINqsToZIibI/5f+fJBD2AJ4P0H6ezbaAOD1Qbjmq9Zgyn2dpml0KA4fSO6JAj0HB+R/T6siIiDog4IOKAiEO3Ig6hG8YlqdgRcwA7Q8zBQGpVqNudn7OIOiDq0F2XCnMWcYcWJlR/4g7695aewhSRB0switgDKIV2CM/GQRzyu92IPgDXiD6YMb/U4w+OQPzhUsQZ8QfEHxB/oDSC+IMB8YcoDt2Q/SEdq6g84g/gZ4g/tEyu5oPRwGP73w4/j6rSiDBnEX/AnLVnziL+gPiDDThF/AHxB9MxivgDKIX+3NjxbDxjl+9kud2IPwDXiD+YMb/U4w88iZbO8QdkXEL8AfGHO8Qfuhp/8KMozFddOC/U+dIhiD+AnyH+YAS5mgZBMGJnhSVIAIv4A+IPmLN2zVnEHxB/sAGniD8g/mA6RhF/AKXQH0ILw3DGLlzEcrsRfwCuEX8wY36pxx88gfhDNjiA+APiD4g/IP7QpfhDGIeTaMJcqD3GQo34A/gZ4g8tk6vJwPdKin95/DyqSiPCnEX8AXPWnjmL+APiDzbgFPEHxB9MxyjiD6AU2iEcxMEwHHC73Yg/ANeIP5gxv9TjDyOB+MMI8QfEHxB/QPyhq/EHJ5rF+ZR454U6/1UE4g/gZ4g/GEGuvGA2n7M/Lh3x86gqjQhzFvEHzFl75iziD4g/2IBTxB8QfzAdo4g/gFLor/8wCkcRO4TGcrsRfwCuEX8wY36pxx98gfiDj/gD4g+IPyD+0NH4QxxGXkmgOM/wEX8AP0P8wQhyFY+nvsf2v31+HlWlEWHOIv6AOWvPnEX8AfEHG3CK+APiD6ZjFPEHUAr9EA7ms5JPeFhuN+IPwDXiD2bML9H4Q7jYfvlptduzgw7p2bvDaeU4w3iQOd1OnCFPluRoV450GRa7gHicm2WDw3+FWbZf/rHPDaZmlbglks46X7WZDDXtJqaS9HpsqLmRBcBoIDKEIyYGHGsds4oxzx778LR4XNKQWpbwZcj0rx1FbWizDwoBARQY2lILag3hMPZyUaBAgj4Fp4FVAcOoX7DAMGoYRlm/+PRS3rDGPz6/kHd1LeAow1G2xFH24skwYFeshqsMVxmusixwrN2HHc+NffZ7l3CWGePYaWfZ9UfxlJ0EBO5yz9zlNrAAh7lLAwmX2Z6BVHSaHU6n2YHTDKfZNqd5PhgNPLbT7GSHE04znGY4zX3YiX3H8Ry3ZEWA09wvp3nqub7r8YMBTnN3neY2sACnuUsDCafZnoFUdJpdTqf5UssdTjOcZluc5mkQBKMpc9652eGE0wynGU5zH3ZiL/KHDrvCscvaieE0d9hpHvtTx53zgwFOc3ed5jawAKe5SwMJp9megVR0mj1Opznr0cJphtNshdPMU1AXTjOcZjjNfdmJ3dgdjtjvfHmsnRhOc4ed5lHsTcczfjDAae6u09wGFuA0d2kg4TTbM5CKTnNJofMbp5mgyDmcZjjNDX/TzFEFDk4znGY4zX3ZiZ3BaOKPS1YEOM39cprd4cSbBvxggNPcXae5DSzAae7SQMJptmcgFZ3mkuqcN04zQWVOOM1wmpt1mnlKl8BphtMMp7kvO/F07I0HZSsCnOZ+Oc2R688H7FgGEwxwmrvrNLeBBTjNXRpIOM32DKSo03xYBz+9HUwlCynbZz5fdHe+St1jzqbfNs5jLvDn015xU5DIVF+ZBU7xktSFtFmnTijkzWJM3HzzZa1zdDFz0lO3XsEJ1RuvrKRHUo71drkiN3JaYwqggirDWtj99B/T784eO9YKHE4h1NAvRvawgMIUPIKlfAbSSDWiVbLlhGRteMujxSdZQbXKbQw2N52qjyxLeCkOrWFDZwbfV9/hzwcZo5kzaUztHQq8MbQdwM3UjcWaQmn82vbhP05e5ftEDyQuewh8KJr+43wgCqV+vUwpL/f85XJx8i4w/618bfxWFEWR6spiRXGEssAYVJLChT1TSQr1vnKtU+gkIu1LKCUizUMr6ZlWEsZOzE4nBrWEb1ZDLYFaYp9a4sy9+Zid0Rd6iWkOLN8OWRjSwj5/PtyiYtIG5qCZyEGunU/OWgCIbtUkmMznEc8z2aObzMZBHEbcjwTlxAzlpKS8XJlyQlFlDspJ4cKeKScircsoJyLtSygnIs1DOemXchJPojAqq2d4uwlCOYFyAuVEDG9mKifjsTN32O8NM2shQTm5nDZVOSkMaWG9OR9uUTlpA3NQTuQg18r20gZAdCsn0SiYBOwERCyGZYNyEsaz8Yz9eSjrkaCcmKGclNQYLFNOKEoNQjkpXGicclIoM5AjDV5ueZdRTgqV/3Ktu4XWZZQTkfYllBOR5qGc9Ew5GcWTiB0+yNfFgXIirJxwL0r2UFsoJ11RTkbReOQW37euKIgF5eRy2lTlpDCkhX3+fLhF5aQNzEE5kYNcOwUHWgCIbuUk9CM34Kk8aI9yMg/DcMb/SCLKCY1GUFJSsUwjoKisCI2gcKFxGoGIGyyuEYgoEDIagUj7EhqBSPPQCHqmEThRHLOF8vy7lNAIhDUC7kXJHhIHjaArGoE3dwO/rHivJjoOjeD80Fo0gsKQFvb58+EWNYI2MAeNQA5yrWwvbQBEt0Ywn88HYTGbRznDskEjCOJgGLKlHNYj4e0KM96uKKmrWaacUJTXhHJSuNA45aRQWiNHGvzc8i6V0SNf7TLX+qjQulRGD4H2ZTJ6CDQP5aRfykkUxn7M3tfztaCgnAgrJ9yLkj3UFspJV5QTZ+zPxuwIGbMIHJSTy2lTlZPCkBb2+fPhNjN6tIA5KCdykGsno0cLANGe0cMPw4idM43FsGxQTmajcBSxBS7WI0E5MUM5KSmuWqacUNRYhXJSuNA45UREHBBXTkR0GRnlRKR9CeVEpHkoJ/1STuIo9iI2V8m/iQLlRFg54V6U7KG2UE66opwE/sgfsAk9sxIglJPLaVOVk8KQFvb58+EWlZM2MAflRA5yrWwvbQBEt3ISB6EXsHOhshiWDcpJHMxnM7ZywnokKCdtKSc/rXb7GrnkcIm6RJJNnAqJhFYigctqSalTY9hElbs6dAzxQKaRO3PZmz0zfdd8bp53WXiGHOW+SaJXfADtvmbpUPPWkbZBMOBxKnlFJlK3gt6oJFWFz1H5Tvgg/ce5nbhUJSt1fjV++I/3gVz+B1JhoZyFDNNLKasYgpYWLgQt7WNVORBTEFMQUxBTXUZBTDUQ09AN45KUkbZS0zCIRvGQ/5GaJad1taKy5JSiUBTIaeFCkNM+Fu4BOQU5BTkFOdVlFORUAzmN4oSesl8BYG0oNpDT2AmDMOB/pGbJaV05jiw5pajFAXJauBDktI+1EUBORUYyWReiiUDOKBPJaeEZcuT0JnMbyCnIqZJRkFMd5NSPonDEvaHYQE6jWTwM2QIO85GaJad1eeCz5JQiCTzIaeFCkNM+JuUGORUZyXE0nXsCRU9MJKeFZ8iR05vSQyCnIKdKRkFOdYT143BSkkmHtaFYQU5HYVySRID5SM2S07pUu1lySpFnF+S0cCHIaR/znoKcirkZY3cwY44k88tnE8lp4Rmq8w+AnIKcKhkFOdVBTp1UaOTeUGwgp+EsimKX/5GaJad12Qyz5JQilSHIaeFCkNM+ppYDORUZSdebhDN2PI2Z0NhEclp4hhw5vUkrDnIKcqpkFORUR/LJMPJKSp2xNhQbyGnySNOSgnTMR2qAnP59u3qsIaWHS9S5qAsumr+QkIuyJpru3M4nDCLtcv28l8zR0QAzlqE7/B8vHf7jfGyKTIjULFI8mZ/1XWha0l7uniqMVVlPnSh/QMAWDMs1a3BP6U66Ohmk/zhnCUV+Ut1EUdsDqdBEzqRO6aWUSZ3AGwsXgjf2hTdKJ9CwnTkGk/k8YmfRBnc0uBOtZY+uP4qnPDMN/LGVvtLNIGfjIA75sy/ZwCE1PhIBi6zLvpRlkRTZl8AiCxeCRfaFRUpnurCdRUajYBKMuR8cLNKQTrSWRU4913fZjJuZravPLLKNvtLNIsN4Np6xvx5lzRUbWKTGRyJgkXVpkrIskiJNElhk4UKwyL6wSOmUFLazyNCP3ID9YivrwcEiDelEa1nk2J86Lk9fgUW20le6WeQ8DMMZ/1yxgUVqfCQCFlmXzyjLIinyGYFFFi4Ei+wNi5TNHWE7i5zP54OSV79ZDw4WaUgnWssiR7E3HbNTDDCTs/aZRbbRV7pZZBAHw5LPZ1hzxQYWqfGRCFhkXeKhLIukSDwEFlm4ECyyLyxSOsmD7Swy8MOwJJsc68HBIg3pRGtZpDuceFP2uyPMXAB9ZpFt9JX29yJH4Shil3hgzRUbWKTGRyJgkXUZgrIskiJDEFhk4UKwyL6wSOlsDLazyDgIvYD96hXrwcEiDelEa1lk5PpzkXSnfWaRbfSVbhYZB/PZjE25WHPFBhap8ZEyLPLyf5Od/P8AUEsDBBQAAAAIABKeyVyjP0ZfvwMAAOcJAAARAAAAd29yZC9zZXR0aW5ncy54bWy1Vt1y2jgUvt+nYLjhZgm2cUzjKekksN5NJmwzdfoAsn0AbfQ3kgyhT98j24rJlmaY7ewV8vnOv75zxMdPL5wNdqANlWI+Ci+C0QBEKSsqNvPR16ds/GE0MJaIijApYD46gBl9uv7t4z41YC1qmQF6ECbl5Xy4tValk4kpt8CJuZAKBIJrqTmx+Kk3E070c63GpeSKWFpQRu1hEgVBMuzcyPmw1iLtXIw5LbU0cm2dSSrXa1pC9+Mt9DlxW5OlLGsOwjYRJxoY5iCF2VJlvDf+X70huPVOdu8VsePM6+3D4Ixy91JXrxbnpOcMlJYlGIMXxJlPkIo+cPyDo9fYFxi7K7FxheZh0Jz6zA07J5EWeqCFJvpwnAUv07uNkJoUDOZDzGZ4jYz6JiUf7NMdQecFGJtRO5w4AIuR69wSCwgbBYw5eg5LBgSd7dONJhyZ5SWNTQVrUjP7RIrcSuXdzqKghcst0aS0oHNFSvS2kMJqybxeJf+WdoEs1djE1sKQHTxq2FHYP9LS1hpaRw2V3ak2kP3xQA6ytkdI3o4JOhaEY7FvqL+SFbgCak3Pv4+hTxLb9k4giVOtaQVPrsm5PTDIsMacfoMbUd3XxlL02AzAL2TwXgIgXOTPSIung4IMiOuZ+Z+CNReWMapWVGup70SFk/mrwSbH14srsjL+8EVK61WD4DaezaYdsRzaI8E0TsLkJJIEyXRxCgkvg1l8ewqJrpLp1fIUMo2S7OpkBjc34fLDSZufZ724DZIkPoVki+RqmnW96TrCU7f7HrU/OZoNeGuxILzQlAxWbjtOnEahn2+p8HgBuC/gGMnrwoPjcQsYThjLcFw9ELTyihq1hHVzZiuiN73fTkOflOJquH/1VSJPQP+pZa1adK+JaunjVcI47iypsA+Ue7mpi9xbCdxwR1Atqs873fSpb88+tUi/ZgwfSMPdRhfE+GvuiAfE2BtDyXz4DxnfP3Z0Zzp3rIUVUaplfLEJ50NGN1sbOjOLXxW+q81HsYk6LGqwqMWaD1K6YlG7O/SyyMuO9KZeNu1lsZfFvezSyy57WeJliZNtcfw1ruxnnEN/dPK1ZEzuofqrx38QdcvcTfdNbaVfyd0GNu1m3hIFy3bfIx9lK+geADPYpfBisc0VPicDo2jFyQteahDNnPNOmzV7+42uw5yyeuuhIpb4/fDGuJmJf+Xi3qGSIn/zAy/65+WiLYtRg4tM4UtkpfbY7w0Wxlh0eYejh6dGHsVBEgVJ+Aq3Qe442cBS0V5xGgTdgPq/aNffAVBLAwQUAAAACAASnslc6FrlUwABAAC2AQAAFAAAAHdvcmQvd2ViU2V0dGluZ3MueG1sjdDBasMwDADQe77C5JJT42SMMUKSMhgdu5RBtg9wHCUxtS1juc369zNZNhi79CYh6SGp3n8azS7gSaFtsjIvMgZW4qDs1GQf74fdY8YoCDsIjRaa7AqU7dukXqoF+g5CiI3EImKpMrJJ5xBcxTnJGYygHB3YWBzRGxFi6iduhD+d3U6icSKoXmkVrvyuKB7SjfG3KDiOSsIzyrMBG9Z57kFHES3NytGPttyiLegH51ECUbzH6G/PCGV/mfL+H2SU9Eg4hjwes220UnG8LNbI6JQZWb1OFr3oNTRphNI2YSx+UGiNy9vxhW/5gEcMnbjAE3VxDQ0HpSEWa/7n223yBVBLAwQUAAAACAASnslc+zmgc2MCAAD7CgAAEgAAAHdvcmQvZm9udFRhYmxlLnhtbN2WwW7aMBzG732KKJecSmyTtRQRKsaGtMsOG3sAExywFtuR7UC50vvOO2yPMO2wSbv0bZB67SvMJAGCCBl0Q0gDITn/z/li//T9HVq3dyyyJkQqKrjvwBpwLMIDMaR85Dsf+r3LhmMpjfkQR4IT35kR5dy2L1rTZii4Vpa5nasmC3x7rHXcdF0VjAnDqiZiwo0YCsmwNpdy5DIsPybxZSBYjDUd0IjqmYsAuLJzG3mIiwhDGpBXIkgY4Tq935UkMo6CqzGN1cpteojbVMhhLEVAlDJbZlHmxzDlaxvo7RgxGkihRKhrZjP5ilIrczsE6YhFtsWC5psRFxIPIuLbxshuX1hWzs6aNjlmpv5+xgYiSqVUjDEXikCjT3Dk26DkY7vr2cEYS0X0ejYqaCFmNJqtJJxoURBjqoPxSptgSZerLOiKjoyaqAHYrMHOKtC34XYF7cypb1eC1KexXYGFOemDW27GpgxTnzKirLdkar0TDPP9vJD5XoE6eAE880Nm5FXwAqfg9drsCHV6vQ2vrqlcNzy4w+umild6CTOfY3l1MRuYRVZxWvLJOC15ofNwAqjIyVtWvHXlwFxlnG6exenp4dvTww/r8fOnxy9f/1EXNvbTkml4NyoXui8T0p/FZA/DkN6RYXVjwg1A0ADXZY0J/wQQPbcxuziiJmlVQeuljYjSyJ0naLAsaJ1uSdAOaMi/Ctpi/nMx/7W4v1/Mv58+bkwMifzP8iYSSYmsyhsweTuQ3Wnylj+2XuBUYHDkwZbzPpZTx6yw4m8FAi/Nse/lfYnOdfyXvibrp3pNrkaqffEbUEsDBBQAAAAIABKeyVyUQSK4xgYAALsqAAAVAAAAd29yZC90aGVtZS90aGVtZTEueG1s7VpNb9s2GL73VxC65NT623WKukXs2O3Wpg0St0OPtERbbChRIOkkvg3tccCAYd2wwwrstsOwrUAL7NL9mm4dtg7oXxgp2YooUXLmxU3aJQfHIvk8fL9fUvDV64ceAfuIcUz99lrlUnkNIN+mDvbH7bV7g/7F1hrgAvoOJNRH7bUp4mvXr124Cq8IF3kISLjPr8C25QoRXCmVuC2HIb9EA+TLuRFlHhTykY1LDoMHktYjpWq53Cx5EPsW8KGH2tbd0QjbCAwUpXXtAgBz/h6RH77gaiwctQnbtcOdk0grmg9XOHuV+VP4zKe8SxjYh6Rtyf0dejBAh8ICBHIhJ9pWOfyzSjFHSSORFEQsokzQ9cM/nS5BEEpY1enYeBjzVfr19cubaWmqmjQF8F6v1+1V0rsn4dC2pUUr+RT1fqvSSUmQAsU0BZJ0y41y3UiTlaaWT7Pe6XQa6yaaWoamnk/TKjfrG1UTTT1D0yiwTWej222aaBoZmmY+Tf/yerNupGkmaFyC/b18EhW16UDTIBIwouRmMUtLsrRS0a+j1EicdnEijqgvFmSiBx9S1pfrtN0JFNgHYhqgEbQlrgsJHjJ8JEG4CsHEktSczfPnlFiA2wwHom19HEBZYo7Wvn3549uXz8GrRy9ePfrl1ePHrx79XAS/Cf1xEv7m+y/+fvop+Ov5d2+efLUAyJPA33/67Ldfv1yAEEnE66+f/fHi2etvPv/zhydFuA0Gh0ncAHuIgzvoAOxQTypftCUasiWhAxfiJHTDH3PoQwUugvWEq8HuTCGBRYAO0h1wn8liW4i4MXmoKbXrsolIx5aGuOV6GmKLUtKhrNgAt5QYSdtN/PECudgkCdiBcL9QrG4qhHqTQOYaLtyk6yJNlW0iowqOkY8EUHN0D6Ei/AOMNf9sYZtRTkcCPMCgA3GxIQd4KMzom9iTjp4Wyi5DSrPo1n3QoaRww020r0NkukJSuAkimhduwImAXrFW0CNJyG0o3EJFdqfM1hzHhQymMSIU9BzEeSH4LptqKt2StXFBZG2RqadDmMB7hZDbkNIkZJPudV3oBcV6Yd9Ngj7iezJTINimolg+quewepaOhf7iiLqPkViyQt3DY9ccjGpmwgpzFVG9hkzJCKLEdqohZnqb6nfYP1a/82S7S9tslf1OtpHX3z79wDrdhrRhYbKn+9tCQLqrdSlz8IfR1DbhxN9GMoHPe9p5TzvvaWeopy2sSqvvZHrXiu5/87vd0XXPW3TbG2FCdsWUoNtcb4Bcmsbpy9mj0Wg85IsvooErv2ralIxYiRwzGA4CRsUnWLi7LgykTBUrtcOYa7LEoyCgXN6fLX0qX6j0uuj9FJaWDhc19PdHOh8UW9SJ1tXK5oWhovN9U+KWlLy5KtTU1ielRu3yaalRiRhPSI9K45h65PjtX+kRjaTCTJ365JlPlkgpTbMaaSezEhLkqDBNBfk8nM9yjFdynB4RutBBx1mXsH6ldrajqDCpl9D3tKKtvCjawoJvqN2K1jcWdOKDg7a13qg2LGDDoG2N5B1HfvUCuR9XrRGSsd+2bMHS0WrsBcf3kW77dXOipwOtbFqWa/acrhPSBoyLTcjdiDhclbYu8Q2mqjbqyiWrtVVp1VrUWpX3VYvoyRDhaDRCtjBGeWIqtXU0Yyq7dCIQ23WdAzAkE7YDpXXqUTo6mMsDWXX+wGSBqc8yVS/w5gKWfu9vqHPhQkgCF84KTiu/3kR02YyI5U97waDy0XDKRquyXe0d2i6nspzb7vRtN6sdyEc1J2MIW15OGASqOLQtyoRLZbsLXGz3mbzTmFSUVgCymCkDAEL98D9D+6nGOZcn4s9sS+RVTOzgMWBYNmHhMoS2xcze/27XStV4oAgL2GyTTIXM2kJZKDCYZ4j2ERmoYt5UbrKAO29O2bqr4XMCNjWs19bhuP+/vRLW3+WpUFOhfpKH4HrRVSpxEFs/LW1P4syfUKR6TLdVGwVF7r8e5gMoXKA+5HkKM5sgK6O+Oq8P6I7MOxBfVYCsJhdbs9IeDw6ljVpZrdTeaov37yJqUMboorP5liIRazn332ysnYQiK4i1hiHUDPl9vEhTY6Z+EV5OvcTLSDWQ+WWYOgENH0oJN9EITkji52I8kEOJnsSDbVZKPA+pM9VHCI96WXKMZw5pxN9BI4CdQ0MipKJh9tOp7OVk50iy2NAxa2051hmH4UAZM1eXY45ZdJnlqSpmDt8kL2AnBpkjjmQoJAwenUViL4a2X7lPl7TRAp+WV+bTJWPwhHwqDpfwaezF8PyfyV6l46FgsDv/4ZksCXKPOP2vXfgHUEsDBBQAAAAIABKeyVyegDrXpwAAAAYBAAATAAAAY3VzdG9tWG1sL2l0ZW0xLnhtbK2MsQrCMBQA935FyZLJpjqIFNNSECcRoQquSfraBpK8kqRi/96Iv+B4d3DH5m1N/gIfNDpOt0VJc3AKe+1GTh/38+ZA8xCF64VBB5yuEGhTZ0dZdbh4BSFPAxcqyckU41wxFtQEVoQCZ3CpDeitiAn9yHAYtIITqsWCi2xXlnsmtTQaRy/maSW/2X9WHRhQEfourgY4Ye2tLZ7dJYWvuAqbZHKE1dkHUEsDBBQAAAAIABKeyVw+yuXVvQAAACcBAAAeAAAAY3VzdG9tWG1sL19yZWxzL2l0ZW0xLnhtbC5yZWxzjc+xasMwEAbgvU8htGiqZWcooVj2EgLZQnAhq5DPtoilE7pLSN6+olMDGTLeHf/3c21/D6u4QSaP0aimqpWA6HD0cTbqZ9h/bpUgtnG0K0Yw6gGk+u6jPcFquWRo8YlEQSIZuTCnb63JLRAsVZgglsuEOVguY551su5iZ9Cbuv7S+b8huydTHEYj82FspBgeCd6xcZq8gx26a4DILyq0uxJjOIf1mLE0isHmGdhIzxD+Vk1VTKm7Vj/91/0CUEsDBBQAAAAIABKeyVy1u0xN4QAAAGIBAAAYAAAAY3VzdG9tWG1sL2l0ZW1Qcm9wczEueG1snZCxboMwFEV3vsLy4skxoARoFIhIAClr1UpdHXiAJWwj20SNqv57TTo1Y8d3rnTu1TscP+WEbmCs0Con0SYkCFSrO6GGnLy/NTQjyDquOj5pBTm5gyXHIjh0dt9xx63TBi4OJPIe5ZnN8ejcvGfMtiNIbjd6BuXDXhvJnT/NwHTfixYq3S4SlGNxGCasXbxLfsgJI+8WXnmpcvxVN3GaZVFC63PS0DLZ7uhLmFY0beJdWZ9PUbUtv3ERILRO+u18hd6u5Imt3sWI/w68iusk9GD4PN4xezSyp8oH+POWIvgBUEsDBBQAAAAIABKeyVyQ0IeJawMAAIkVAAASAAAAd29yZC9udW1iZXJpbmcueG1szVjdbuI4GL3fp0CRRly1iZM0BDS0okBWXY1GI7XzACYYsOqfyDEw3O5L7WPNK6ydP6iKM0wSdsuNE3/fOf58TvwF+Pzwg5LeDokUczbug1un30Ms5kvM1uP+95foJuz3UgnZEhLO0Lh/QGn/4f6Pz/sR29IFEiqvpyhYOton8djaSJmMbDuNN4jC9JbiWPCUr+RtzKnNVyscI3vPxdJ2HeBkV4ngMUpTxTOFbAdTq6Cj/DI2CuPy0nWcUN1jVnG8r4gniKngigsKpboVa4UQr9vkRnEmUOIFJlgeNFdQ0ezG1lawUcFxU9WhMSNVwGhHSZnM63LzQouhRIhLiswhMx5vKWIyK88WiKiCOUs3ODnq1pRNBTclSe2GTza7T4DfzvSZgHs1HAkvKX+ZgyjJK69nBM4FjmiKCnFJCW/XLCs5ffj2zaQ5FXfdTts/Bd8mRzbcju2JvVZcqhP8Dlfh0enW0nbFPG9gog4QjUdPa8YFXBBVkVK8p59I6161J7hIpYCx/LqlvTd3T8ux5WQpLMVLFdtBMrai7DOYWraO0C2R+AvaIfJySFCZoxcmKJvO0yRNSBmcesCZT303j5CdDmA1lIupJipkmQzyLNVCI1pNLlGMKSQVwQv6UcU+gdtq/q+4nCVoJfPp5JvIClL7LMYyR61hqeuEK8VB6Dg63z5mYqYl0ERFWN1tIFvr/m95QZme8dvZ8tl4oucvxQYmsWeNxZ77Tjh0XP9Di+37tWLrcPdiuyax543Fjh6BGwy9SUdiJ8/yQKqVv+BUl66+SXjX9MIJa73Q4e698ExeRI298ELfB8FdV13G5IV7RS8Gbp0VOtq9E77BiRA0dgIMwGTqTVq0oMWWECTPKv3z73/+/w60H4liiDiTqVY1jbH6FvF8oAtOMuhEafpmAjOpn7EVVIoWZKKFcXcm49zm7cybT6LZfNqNce9P0GMWPd/NOvK1XTf7CL4GJl+95q1xBuZRNOvoQJp8Pd8Zu/G1VWf8CK4OTK6GjV2dOZPAfcz72BVfeFd83x19Oueqjnb/vgtNRgwbG+EOBwFQXlz3eF3xdLXy4T86XSwzk53+bnrjbLmvsKBjZ2CuGRbUwDwz7K4G9u7H9hHm18DuzLBBDSwww7wa2MAMc2tgoRkGamBDM8w5hdkn/6He/wtQSwMEFAAAAAgAEp7JXJD24BSwAQAAZAUAABAAAAB3b3JkL2Zvb3RlcjEueG1spZRNT+MwEIbv+yusXHJqk64QQhEpBypWXACJXWmvruM0XmyPNXYSKsR/Z5I2TQUSG+jF3+/jd+yxL6+ejWaNRK/A5vFinsZMWgGFsps8/vP7ZnYRMx+4LbgGK/N4K318tfxx2WZlQEZi6zOTR1UILksSLyppuJ+Dk5bmSkDDA3Vxk0BZKiFXIGojbUh+pul5QpNVNEDEFIrh+FS7mQDjeFBrpVXY9qwDBj5gjBIIHsowJ9neB4HE0CT5BfWVPTCaPKrRZnvA7ADo9s1ImTVGD4vhs7W7HfbVoMDvHhdKTUGD9ZVyfqB96vXIZ7tIJzhtAYtRcTbtLDsROVykfetoyymBdhKHIKT3lHNGD5kxXkdLefcVHyR/58N9L5LR1gp5S9UInBJZsRMNIf2H+DH9v+TwmtuG+xG3OQ33C6F2I02dRru1TyPLn8Z6rLijp2REdruxgHytKTsoVVl3y9GSPibXFw/YV49hqyVrs4brPLoBCBKjpJv5J4ZRQQ9sN5ocdH0Rlg+obPASG3LEVvfXf9lKGmAz9vJSSK3o39ze1WYt8fW1E4cegTtQX9InuXwDUEsDBBQAAAAIABKeyVyiyNZnvQUAAIQgAAAXAAAAZG9jUHJvcHMvdGh1bWJuYWlsLmpwZWftVmtwE1UUPrt7NyltzRAoLRQHwrsywKQtQisCNmnappQ2pC2vcYZJk00TmiZhd9OWTp2R+gD1hzx8/7EUVHSccVDRgjpSRUBHBxALFBjGImrxNTwUXwPx3N2kCVCEkV/O7N3Z/b6c891zzzl7526ix6Jfw9DyEnsJMAwDZXhB9LS+y261rnA4q0rsFTZ0AOi3ucLhAGsCaAzKorPUYlq6bLlJ3wssjII0yIY0l1sKFzkcFYCDauG6cekIMBQPTx/c/68jzSNIbgAmBXnII7kbkbcA8AF3WJQBdGfQXtAsh5Hr70SeIWKCyM2U16u8mPI6lS9VNDVOK3Kai8Htc3mQtyGfVpdkr0/iag7KyCgVgoLod5toLxxiyOsPCEnp3sR9i6MxEImvNwbvdKmhegFiDq3dJ5Y5Y7zD7bJVI5+IfH9YtlD7ZOQ/RRpqi5BPBWCHecWSWlXP3tvqq1mCPBO5xy/ba2L21mBdZZU6l+1sCC1wxjT73ZIVewbjkZ/yCfYKNR8OPEKxjfYL+RhfpCwWnyuXmqpt8TitPmulGocTV7rKHcizka8TQ84qNWeuUwiUOtX43N6w7IjlwPUHA5UVakxiECSlRsUu+2rK1LlklowvUZ1Llnv9JfaYvi0cUPYi5ka2ihFnbUxz0CXaStU45IIQrI3F5Ed6XMW0tzOQz4PFjAsECEEdPt0QhMtgAieUggUxDCJ6vOCHAFoE9Apo8TN3QAPaBtc5FI3KE4p6ZXY/nY2rDK5RVzgb04RIFjGTfLznkAoylxSQQjCR+eQ+Mo8Uo7WQzBmY60han651diDOKohgVKpbDJb12ZGcxHrt4gq/+8CT566aHbouZyGeT3IHQMIOxJXTk+vf1/b+yESMHtJ1/+H0fW1QdbP+8mf4fr4Hn738yYSCP8GfxKsXijC3gJJRI95+JQ8pKYPkGrrxlsGFzz7UhZJ0V63oDa7PTnhoJ4S1lZcqoX1awmo+av7Z3GPebN5q/vGaLg/aJW4Tt4P7gNvJ7eI+BxO3m+vmPuT2cm9w7yW9qxvvj4F3r9Qbr5Z6Buu1AAGDxTDaMMFQbBhrmGSoSMQzZBlyDWWGKegZPfDektdLrsUPy/AZ7+rga6m6WvT6oVmpQFI6HITV1+z/2GwyhuQS+zW7toDu5bhCZ9MV64rApJuqK9Tl6sopj+enm4K+Qnzartp17htUICSpkuucruw6ulfp7CbFJ4EgCy0yPWitofBq0V/vk015ZvNsUxF+qgSTPeieMc3kCgRMiksyiYIkiE2CZwbQ76B6RF90Kt83JvNAwiYvBJj7C55ZBxO25RGA1yWArJkJWw6eiSNeBOia5Y6ITbEzn2G+AJC8+Xnqr3QLnk2notGLeF7pNwJc3hCN/t0ZjV7egvFPAuwORPtAtrX4vQALF9JTH1KAMNnA09l4z2NGD/ASJgcPcMpZgLV+IDF7ZWztsthvFdkONq5gnujg4pxVpNETYKX/Hm5r0CC3G4OJ7gZjCospcowRWCPDGZnoHhiLufKqIP5hZViO8Dp9ypDUNBTsGAosw3Es4XieYGnMA+gHYuSHjcst0g1f5NKPX5WRt2bD5pQJlu3dI5yHzk3MrxPbh6RmZo0clT1p8pScu6bOvHvW7ILCe6zFtpLSMnt5dU3t4iX4et0ewVvv86+U5EhTc8vq1ocefuTRtesee3zjpqeefubZ555/oXPL1pdefmXbq6+9+dbbO955t2vnro8+3vPJ3n37P/3sy8Nf9Rw5eqz3eN/pb858+933/Wd/OH/h4q+/Xfr9jz//onUxwA2UPmhd2ASGJYQjeloXwzZTgZHw43J1w4oW6V2rho/PW5OSYdmweXv3kAn5znMj6sRDqZkTZ/ZNOk9LUyq7tcLa/1NlA4Ul6joO6RxuOCNnhPlw5UoOdLAPpoIGGmiggQYaaKCBBhpooIEGGmiggQYaaKCBBv8ziPbCP1BLAQIUAxQAAAAIABKeyVwzwTgFnwEAAEoHAAATAAAAAAAAAAAAAACAAQAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAhQDFAAAAAgAEp7JXHkmS0D4AAAA3gIAAAsAAAAAAAAAAAAAAIAB0AEAAF9yZWxzLy5yZWxzUEsBAhQDFAAAAAgAEp7JXIiGC1NpAQAA0QIAABEAAAAAAAAAAAAAAIAB8QIAAGRvY1Byb3BzL2NvcmUueG1sUEsBAhQDFAAAAAgAEp7JXPTb2xfrAQAAbAQAABAAAAAAAAAAAAAAAIABiQQAAGRvY1Byb3BzL2FwcC54bWxQSwECFAMUAAAACAASnslcZaqE30sEAAABFwAAEQAAAAAAAAAAAAAAgAGiBgAAd29yZC9kb2N1bWVudC54bWxQSwECFAMUAAAACAASnslcIQlKVEABAABLBQAAHAAAAAAAAAAAAAAAgAEcCwAAd29yZC9fcmVscy9kb2N1bWVudC54bWwucmVsc1BLAQIUAxQAAAAIABKeyVw1Hik8ii8AAF5VBQAPAAAAAAAAAAAAAACAAZYMAAB3b3JkL3N0eWxlcy54bWxQSwECFAMUAAAACAASnslcYHmC0zk1AABzrwYAGgAAAAAAAAAAAAAAgAFNPAAAd29yZC9zdHlsZXNXaXRoRWZmZWN0cy54bWxQSwECFAMUAAAACAASnslcoz9GX78DAADnCQAAEQAAAAAAAAAAAAAAgAG+cQAAd29yZC9zZXR0aW5ncy54bWxQSwECFAMUAAAACAASnslc6FrlUwABAAC2AQAAFAAAAAAAAAAAAAAAgAGsdQAAd29yZC93ZWJTZXR0aW5ncy54bWxQSwECFAMUAAAACAASnslc+zmgc2MCAAD7CgAAEgAAAAAAAAAAAAAAgAHedgAAd29yZC9mb250VGFibGUueG1sUEsBAhQDFAAAAAgAEp7JXJRBIrjGBgAAuyoAABUAAAAAAAAAAAAAAIABcXkAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFBLAQIUAxQAAAAIABKeyVyegDrXpwAAAAYBAAATAAAAAAAAAAAAAACAAWqAAABjdXN0b21YbWwvaXRlbTEueG1sUEsBAhQDFAAAAAgAEp7JXD7K5dW9AAAAJwEAAB4AAAAAAAAAAAAAAIABQoEAAGN1c3RvbVhtbC9fcmVscy9pdGVtMS54bWwucmVsc1BLAQIUAxQAAAAIABKeyVy1u0xN4QAAAGIBAAAYAAAAAAAAAAAAAACAATuCAABjdXN0b21YbWwvaXRlbVByb3BzMS54bWxQSwECFAMUAAAACAASnslckNCHiWsDAACJFQAAEgAAAAAAAAAAAAAAgAFSgwAAd29yZC9udW1iZXJpbmcueG1sUEsBAhQDFAAAAAgAEp7JXJD24BSwAQAAZAUAABAAAAAAAAAAAAAAAIAB7YYAAHdvcmQvZm9vdGVyMS54bWxQSwECFAMUAAAACAASnslcosjWZ70FAACEIAAAFwAAAAAAAAAAAAAAgAHLiAAAZG9jUHJvcHMvdGh1bWJuYWlsLmpwZWdQSwUGAAAAABIAEgCfBAAAvY4AAAAA" +} \ No newline at end of file diff --git a/target/classes/examples/rest-create-html-table-template-request.json b/target/classes/examples/rest-create-html-table-template-request.json new file mode 100644 index 0000000..428ecf9 --- /dev/null +++ b/target/classes/examples/rest-create-html-table-template-request.json @@ -0,0 +1,10 @@ +{ + "name": "lieferschein_html_table", + "documentName": "lieferschein_html_table", + "sourceFileName": "lieferschein_html_table.html.tpl", + "description": "HTML-Lieferschein mit dynamischer Tabelle, Barcode je Zeile und QR-Code im Kopf", + "contentType": "text/html", + "templateType": "HTML", + "encoding": "UTF-8", + "content": "\n\n\n \n Lieferschein HTML Tabelle\n \n\n\n
\n
\n

Lieferschein

\n
Nr.: {{text:deliveryNumber}}
\n
Datum: {{text:deliveryDate}}
\n
\n \"QR\"\n
\n\n
Kunde: {{text:customer.name}}
\n\n \n \n \n \n \n \n \n \n \n \n \n \n {{#each:items}}\n \n \n \n \n \n \n \n \n {{/each}}\n \n
Pos.ArtikelBezeichnungMengeSeriennummerBarcode
{{text:pos}}{{text:partNumber}}{{text:description}}{{text:quantity}}{{text:serialNumber}}\"Barcode\"
\n\n\n" +} \ No newline at end of file diff --git a/target/classes/examples/rest-create-pdf-simple-lieferschein-template-request.json b/target/classes/examples/rest-create-pdf-simple-lieferschein-template-request.json new file mode 100644 index 0000000..cd9dd5f --- /dev/null +++ b/target/classes/examples/rest-create-pdf-simple-lieferschein-template-request.json @@ -0,0 +1,169 @@ +{ + "name": "lieferschein_pdf_simple", + "documentName": "Lieferschein PDF einfach", + "templateType": "PDF_TEMPLATE", + "contentType": "application/pdf", + "sourceFileName": "lieferschein_pdf_simple_template.pdf", + "documentFile": "document.pdf", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 55, + "y": 30, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 145, + "y": 30, + "width": 47, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 45, + "y": 50, + "width": 147, + "height": 8, + "fontSize": 10 + }, + { + "name": "customerAddress", + "type": "TEXT", + "value": "{{customer.address}}", + "page": 1, + "x": 45, + "y": 63, + "width": 147, + "height": 8, + "fontSize": 9 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 55, + "y": 87, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 55, + "y": 101, + "width": 55, + "height": 8, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 145, + "y": 101, + "width": 47, + "height": 8, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 55, + "y": 115, + "width": 70, + "height": 8, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 18, + "y": 135, + "width": 100, + "height": 25 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 145, + "y": 125, + "width": 35, + "height": 35 + }, + { + "name": "note", + "type": "TEXT", + "value": "{{note}}", + "page": 1, + "x": 18, + "y": 205, + "width": 174, + "height": 18, + "fontSize": 9, + "multiline": true + } + ], + "sampleData": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + }, + "examplePrintRequest": { + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_simple", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + } + }, + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA5MTk0NjM3KzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA5MTk0NjM3KzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKExpZWZlcnNjaGVpbiBQREZfVEVNUExBVEUgRGVtbykgL1RyYXBwZWQgL0ZhbHNlCj4+CmVuZG9iago3IDAgb2JqCjw8Ci9Db3VudCAxIC9LaWRzIFsgNCAwIFIgXSAvVHlwZSAvUGFnZXMKPj4KZW5kb2JqCjggMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggOTk3Cj4+CnN0cmVhbQpHYXUxLWdOKGFzJjtLWkYnUkwscD8kJjg4O0dwbyIvVmk9Jy9mQmpoSm5dJDtma0lBNWwrODAlW1pjSDNkYUJELy4kPFwiSTlRU1FNJCZaU2hMODdASkdmVVdeI2QkNSxXIj9jJ2RROmdPR286RWpvc0xWUiNiRi0hNVRTMWtRUzVYR0hqInEtRFY1XVhbMiEkTEVxWGY3aUJRIjwwSkRnKCFlJyEkLUEqI2YpWVNoSSJxKDhFNy1gLD9AZDVbW1VwOUFlK2k9PmpQXWdeZEhmaW5gZnVnbyNEWmsuVkhLJjQ8NlQjMVY2RFx1PzFVKCUyclxkMi5RM3MtOClsR2VUVHFqO2YwJ046ZFNKXldcP1lkSFA/LmdGW0dtN2htc1BJZDFCR0JlWzZjPTFdcjwkTW9lTzlmMEZTYGVjb1dPWF87VlxlZFg7MllSaFZyZXEwRXNYV3BaJ2FhLSFdP18mR3VAOjBDbCFiPzVrNnEwYmxTOy9uKkpBWSNDP1UwLVJSTj45I1YlbF0wXjw2WGZCQS9xXWMvJjwjLykmN1c/QltAKCtjajdCWWEkKXIubCpBczM8XSZ0KCcrS1QqRlVaa1ZrPWZacTtJUDRtbFE0RysrMURmW3BDJTtVR2ZIS0FHRjdmZ1xDSWEqPUFSI0c2YFg9IS1dY2hMZitNQ3E5a2ZgXDtuMmIwYmVJKWRePjsrZFhZYmRDS2ohcnJOJlItIzZtOChKNj4iMV8zWlVURV8mTm5ZcyVMWGo3Qkx1K1luaVU3MTU+N3RhcUpBaTE2YypLME8+czBiXWghaEFRPilFJHM5PiRAdXNeUldndD5MJyxRYnBEPCxmbW1jbzsibWBoZjc1VFBkKTpANSxnL0YnQ2FvMGpObEEqcC9fNVdjMDtWKk5BZ05nWi8iYyIlPzVRQTU3QGdNYj9LX3NPcVBxZU1UOEZdTWo1NE0vYVtPUERvc2Mmb01vbG5YPzZEMkJfWG1yXCo4ciFyQyk3WElePFUoKlZcQVExNCpuU1ZiRD04dSd0Z1trZ1w4ZGpec1socFRETlhyakRpU11qWksvM15QbW5rcGhxdEI5JSZaWzwwZ0UjQEk6RUdHLDUhMnRManAuTGVPLkl1Vyw2Im0sb2staW5oSz1RcFVZMDY5XCVeMDw9RklXcHBScSZuVjIqN1UzMjs/Uj84OzJDVUZMbnRXYVY+LmJjJU5KaElmOE9AMzREW2xiIVhhRkE8KksuRmR1JnA8dF1FVmM1czAjK25dYmhSJWJiLiRoOkNjNyRJWk1camhMSW9eK11vLVJYaTdaMlRhM1hETTxiP3FGJn4+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwNjEgMDAwMDAgbiAKMDAwMDAwMDEwMiAwMDAwMCBuIAowMDAwMDAwMjA5IDAwMDAwIG4gCjAwMDAwMDAzMjEgMDAwMDAgbiAKMDAwMDAwMDUyNCAwMDAwMCBuIAowMDAwMDAwNTkyIDAwMDAwIG4gCjAwMDAwMDA4NzUgMDAwMDAgbiAKMDAwMDAwMDkzNCAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9JRCAKWzxhYzA4MzlmM2UwZTNjNGMzYWNhOGRmNGVjM2E0OWNkMj48YWMwODM5ZjNlMGUzYzRjM2FjYThkZjRlYzNhNDljZDI+XQolIFJlcG9ydExhYiBnZW5lcmF0ZWQgUERGIGRvY3VtZW50IC0tIGRpZ2VzdCAob3BlbnNvdXJjZSkKCi9JbmZvIDYgMCBSCi9Sb290IDUgMCBSCi9TaXplIDkKPj4Kc3RhcnR4cmVmCjIwMjEKJSVFT0YK" +} \ No newline at end of file diff --git a/target/classes/examples/rest-create-pdf-template-request.json b/target/classes/examples/rest-create-pdf-template-request.json new file mode 100644 index 0000000..937f4e5 --- /dev/null +++ b/target/classes/examples/rest-create-pdf-template-request.json @@ -0,0 +1,136 @@ +{ + "name": "lieferschein_pdf", + "documentName": "lieferschein_pdf", + "sourceFileName": "lieferschein_pdf_template.pdf", + "description": "Beispiel: PDF als Vorlage plus Koordinatenfelder für Text, Barcode und QR-Code.", + "contentType": "application/pdf", + "templateType": "PDF", + "encoding": "UTF-8", + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA4MTUwNDMzKzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA4MTUwNDMzKzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKFBERi1Lb29yZGluYXRlbnZvcmxhZ2UgTGllZmVyc2NoZWluKSAvVHJhcHBlZCAvRmFsc2UKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0NvdW50IDEgL0tpZHMgWyA0IDAgUiBdIC9UeXBlIC9QYWdlcwo+PgplbmRvYmoKOCAwIG9iago8PAovRmlsdGVyIFsgL0FTQ0lJODVEZWNvZGUgL0ZsYXRlRGVjb2RlIF0gL0xlbmd0aCA5MTQKPj4Kc3RyZWFtCkdhdD1pOTI/S10mOmo2RidtIjEnKG0hUzo4MEwtXFtRTSJbTF1WUzVkWD1PP05OMyFUOjdQJjIiR2UxWFBkTyFAUjtYLjw2L19DUW9gJV9oUzdaXyY2cExlKyJBZ2ZWZmBkbVkiLmg/UF5DQ2hTJU90OyxDJVREMCsjSiFiVV8uIkJAODprSTB1MiRWZmI4bVJAOEEiJVNOVy1Ha0YyJSYoRVVDckE9UkkkPGwxYm00QTgoWCpaZFtUXyhqYCpAXThfNFpqOnJoJ1JrZickKm8zL2ZFMGJTQiRUMGErJ0xDWmcqUm8uQj5eTSVGWSQjMiE7MGg6P3MoSGk/QiFraCddVGJgI2dQblZXOE1UTUEsPUQ/b1c+OlYzM08rVzoyKFc4Mk8oT0VbK2R0XzJDOV1rYCVFPU8nMkEmajErTUEsYFwlWT07a11dcGFpbUo4cTVBZmNvQz4pYFBGYXIiS04vcSFxYidBW15qQEQpKGJqNWlMWCQhSmEtPXBiSzRVUVdCOiY5cnBWRW1NPCdbcEtIJy1pWUQiaVo8TDdwckcrLCcxblY9XVcoW1o1ajlAL0RXK2Fjb1k3NTZiUGBkVXEwRD03XTs+azNdcEUsNylUOVRAc2csOTRrPFgkL3MoP0MkVGYjLzg0VTVhTWlLOztUJDkmWEBkZGMvWjNjaU9eWT1zMlhBb2RIXHA+SmY3aWFaKlVaVmluM05qbVktXlBjNilvVFszZjRJQFFuNShYb05qWFFBJmZFY1RFVyJ0bU0tIzAuPFVaUDA7azhrKWMnVllVc2o1V1kzST9Qbz1FV20nbFRlYi5BOG9aOzQ7SnJCU3RlbGM4dVQ6J1VYYjwzVSMsWjtUSDRVVEdrV3AsUVVMRltWMW04RDAoKixQUyhNLXFWJ2hAZ2hnVzRHPUIkRWI1RWlnSk9ZK3RxPklzcF40JmNvYjpGUkZrcF1UXGQqSiQ/WydEKVE+TWlFJGtBNXUtYCJLRyE5TitRVUFIYyk+Vl5xI0Yob1I4Mi8oKGYmOiUtLEBXMzBbY10hU042akU8bjctLzciOVpzMHJuNnMuUj5GaCkjPSlSWjlOT3FmV3InSG8mSF5ONFYmJXVaLDhRSy9AOmpXWFBaYnEpYz8rVCRHMEdCI2dqJWNLOCpicSdDRWQ7WldjUmxpZTsuIWYrdEREbipBOWg4ak5ZYyJBZHBIJmZfIiVZb1g+bH4+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwNjEgMDAwMDAgbiAKMDAwMDAwMDEwMiAwMDAwMCBuIAowMDAwMDAwMjA5IDAwMDAwIG4gCjAwMDAwMDAzMjEgMDAwMDAgbiAKMDAwMDAwMDUyNCAwMDAwMCBuIAowMDAwMDAwNTkyIDAwMDAwIG4gCjAwMDAwMDA4ODAgMDAwMDAgbiAKMDAwMDAwMDkzOSAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9JRCAKWzwzYzM0OTVlYTNmMDgzZmViNWNlYzhlNjIyMjNjMDUzMT48M2MzNDk1ZWEzZjA4M2ZlYjVjZWM4ZTYyMjIzYzA1MzE+XQolIFJlcG9ydExhYiBnZW5lcmF0ZWQgUERGIGRvY3VtZW50IC0tIGRpZ2VzdCAob3BlbnNvdXJjZSkKCi9JbmZvIDYgMCBSCi9Sb290IDUgMCBSCi9TaXplIDkKPj4Kc3RhcnR4cmVmCjE5NDMKJSVFT0YK", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "pdfFields": [ + { + "name": "serialNumber", + "type": "TEXT", + "value": "{{serialNumber}}", + "page": 1, + "x": 35, + "y": 52, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "partNumber", + "type": "TEXT", + "value": "{{partNumber}}", + "page": 1, + "x": 35, + "y": 60, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "workorderNumber", + "type": "TEXT", + "value": "{{workorderNumber}}", + "page": 1, + "x": 35, + "y": 68, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "quantity", + "type": "TEXT", + "value": "{{quantity}}", + "page": 1, + "x": 35, + "y": 76, + "width": 70, + "height": 6, + "fontSize": 10, + "align": "RIGHT" + }, + { + "name": "customer", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 35, + "y": 84, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "serialBarcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "value": "{{serialNumber}}", + "page": 1, + "x": 25, + "y": 94, + "width": 90, + "height": 18 + }, + { + "name": "serialQr", + "type": "QR_CODE", + "value": "{{serialNumber}}", + "page": 1, + "x": 155, + "y": 38, + "width": 32, + "height": 32 + }, + { + "name": "item1Pos", + "type": "TEXT", + "value": "{{items.0.pos}}", + "page": 1, + "x": 22, + "y": 142, + "width": 15, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Material", + "type": "TEXT", + "value": "{{items.0.material}}", + "page": 1, + "x": 40, + "y": 142, + "width": 55, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Description", + "type": "TEXT", + "value": "{{items.0.description}}", + "page": 1, + "x": 100, + "y": 142, + "width": 60, + "height": 5, + "fontSize": 9 + }, + { + "name": "item1Quantity", + "type": "TEXT", + "value": "{{items.0.quantity}}", + "page": 1, + "x": 165, + "y": 142, + "width": 20, + "height": 5, + "fontSize": 9, + "align": "RIGHT" + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/rest-create-pdf-template-table-request.json b/target/classes/examples/rest-create-pdf-template-table-request.json new file mode 100644 index 0000000..a86d5d1 --- /dev/null +++ b/target/classes/examples/rest-create-pdf-template-table-request.json @@ -0,0 +1,118 @@ +{ + "name": "lieferschein_pdf_table", + "documentName": "lieferschein_pdf_table", + "sourceFileName": "lieferschein_pdf_table_template.pdf", + "description": "PDF_TEMPLATE Beispiel mit dynamischer Tabelle, Barcode-Spalte und QR-Code", + "contentType": "application/pdf", + "templateType": "PDF", + "coordinateUnit": "mm", + "coordinateOrigin": "TOP_LEFT", + "contentBase64": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgKG9wZW5zb3VyY2UpCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA3IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgNyAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjYgMCBvYmoKPDwKL0F1dGhvciAoYW5vbnltb3VzKSAvQ3JlYXRpb25EYXRlIChEOjIwMjYwNjA4MTYzNDMwKzAwJzAwJykgL0NyZWF0b3IgKGFub255bW91cykgL0tleXdvcmRzICgpIC9Nb2REYXRlIChEOjIwMjYwNjA4MTYzNDMwKzAwJzAwJykgL1Byb2R1Y2VyIChSZXBvcnRMYWIgUERGIExpYnJhcnkgLSBcKG9wZW5zb3VyY2VcKSkgCiAgL1N1YmplY3QgKHVuc3BlY2lmaWVkKSAvVGl0bGUgKFBERiBUYWJlbGxlbnZvcmxhZ2UgTGllZmVyc2NoZWluKSAvVHJhcHBlZCAvRmFsc2UKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0NvdW50IDEgL0tpZHMgWyA0IDAgUiBdIC9UeXBlIC9QYWdlcwo+PgplbmRvYmoKOCAwIG9iago8PAovRmlsdGVyIFsgL0FTQ0lJODVEZWNvZGUgL0ZsYXRlRGVjb2RlIF0gL0xlbmd0aCA2NzIKPj4Kc3RyZWFtCkdhdCVgOWxKYE4mO0taTCdtIjJsQUYjZmIxX1BSM0pLQC5ZMXBNP20mSFkoRi8kRDdZMXNOZihmRlRfYy4nNSVHQEM1TDhjY2pbOjZIInEkaFU7SURQSkhAcSJHcjVhNVxjdTkpKmZqY0JdOTxHZjVbJWwqb18zUUBBSl1VPVRmTzJfSFNONiQxTUFiZD5aNkBGP3MoIiZYJmNKSStuSGhCXkZfV0RBbENJKHI4XjtHYylMYXFxTSl1bCReNWU+VU1aPz1UdXE/YyhLOjJWYFxnIShHLTc5JFxRX2shMkhxZWRnRzQrcG1UYFlNTSUqXkBAYjs6OjtuT18uUWJbQnJAUHNkZEcvU3JQaHQvMkBqX3RiRFxUXEBDKGlaLjtfdVAnRW1nQ2RnMG1VIXA1QChbRGpyR1NvJyYhSzYrWzQ/OixoS1JhVmZ0Rio5XVE5JmMpRG86Pm5fbTQ/QD0pXU5sVm5uPyRDPCRePj5YTXUxW0c3WXVoPjs8LzZQOHBcMC4kK0AhaCc9YilxMFRoPSlsLyZUKXIyP2AsL1FCc0duISJNWUgucj1LSXFWLDtidVUuJEYoRXVKIV4/LldbLCNTNFhqRydLNSIjXltLYFlpXDFfbVBRcE1kMWNpT14jY21nJjQ6bi4yKEE+Y18mLSMhV3UkLipubU5nU0pfdGtlUVlpb0hASlY5QGwmZUYtXWpiWSZxOFNfaW0mZTwqYj4tS011VFdqdVdhP1wtcCEsW19xb049bSJhKUZXYlRzcitNQUA3YilhSGUjOSJGYi4vU3NMWXJNT1smc1taVTlBYVc5O29KIUo3Zz8xPzwxJUJoL1pZcT1qX29jcCY7MWldSy5pOXI0VUheWTlUbzdiNGxQJDtTXjZuJmlEO3F+PmVuZHN0cmVhbQplbmRvYmoKeHJlZgowIDkKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDYxIDAwMDAwIG4gCjAwMDAwMDAxMDIgMDAwMDAgbiAKMDAwMDAwMDIwOSAwMDAwMCBuIAowMDAwMDAwMzIxIDAwMDAwIG4gCjAwMDAwMDA1MjQgMDAwMDAgbiAKMDAwMDAwMDU5MiAwMDAwMCBuIAowMDAwMDAwODc3IDAwMDAwIG4gCjAwMDAwMDA5MzYgMDAwMDAgbiAKdHJhaWxlcgo8PAovSUQgCls8NzIxZTc2ODg3OTIxMTlmN2U5ZGExYzgzNmI2YWEzMjk+PDcyMWU3Njg4NzkyMTE5ZjdlOWRhMWM4MzZiNmFhMzI5Pl0KJSBSZXBvcnRMYWIgZ2VuZXJhdGVkIFBERiBkb2N1bWVudCAtLSBkaWdlc3QgKG9wZW5zb3VyY2UpCgovSW5mbyA2IDAgUgovUm9vdCA1IDAgUgovU2l6ZSA5Cj4+CnN0YXJ0eHJlZgoxNjk4CiUlRU9GCg==", + "pdfFields": [ + { + "name": "deliveryNumber", + "type": "TEXT", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 38, + "y": 35, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "customerName", + "type": "TEXT", + "value": "{{customer.name}}", + "page": 1, + "x": 38, + "y": 43, + "width": 90, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryDate", + "type": "TEXT", + "value": "{{deliveryDate}}", + "page": 1, + "x": 38, + "y": 51, + "width": 70, + "height": 6, + "fontSize": 10 + }, + { + "name": "deliveryQr", + "type": "QR_CODE", + "value": "{{deliveryNumber}}", + "page": 1, + "x": 162, + "y": 25, + "width": 28, + "height": 28 + }, + { + "name": "positionsTable", + "type": "TABLE", + "source": "items", + "page": 1, + "x": 18, + "y": 78, + "width": 174, + "height": 125, + "rowHeight": 13, + "headerHeight": 8, + "maxRows": 9, + "overflow": "CUT", + "fontSize": 7, + "border": true, + "drawHeader": true, + "repeatHeader": true, + "padding": 1.5, + "headerBackground": "#EEEEEE", + "headerColor": "#000000", + "gridColor": "#000000", + "columns": [ + { + "title": "Pos.", + "field": "pos", + "width": 12, + "align": "CENTER" + }, + { + "title": "Artikel", + "field": "partNumber", + "width": 29, + "align": "LEFT" + }, + { + "title": "Bezeichnung", + "field": "description", + "width": 47, + "align": "LEFT", + "multiline": true + }, + { + "title": "Menge", + "field": "quantity", + "width": 16, + "align": "RIGHT" + }, + { + "title": "SNR", + "field": "serialNumber", + "width": 31, + "align": "LEFT" + }, + { + "title": "Barcode", + "type": "BARCODE", + "barcodeType": "CODE_128", + "field": "serialNumber", + "width": 39 + } + ] + } + ] +} \ No newline at end of file diff --git a/target/classes/examples/rest-create-raw-tcp-printer-request.json b/target/classes/examples/rest-create-raw-tcp-printer-request.json new file mode 100644 index 0000000..16f9b3c --- /dev/null +++ b/target/classes/examples/rest-create-raw-tcp-printer-request.json @@ -0,0 +1,8 @@ +{ + "alias": "LABEL_LINE_01", + "type": "RAW_TCP", + "host": "192.168.10.50", + "port": 9100, + "language": "ZPL", + "description": "Zebra Etikettendrucker direkt per TCP" +} diff --git a/target/classes/examples/rest-create-windows-spooler-printer-request.json b/target/classes/examples/rest-create-windows-spooler-printer-request.json new file mode 100644 index 0000000..f0564e7 --- /dev/null +++ b/target/classes/examples/rest-create-windows-spooler-printer-request.json @@ -0,0 +1,6 @@ +{ + "alias": "OFFICE_A4", + "type": "WINDOWS_SPOOLER", + "systemName": "HP_LaserJet_A4", + "description": "A4 Drucker ueber Windows Spooler" +} diff --git a/target/classes/examples/rest-diagnostics-system-response-example.json b/target/classes/examples/rest-diagnostics-system-response-example.json new file mode 100644 index 0000000..fa6e2dc --- /dev/null +++ b/target/classes/examples/rest-diagnostics-system-response-example.json @@ -0,0 +1,12 @@ +{ + "osName": "Windows Server 2022", + "windows": true, + "javaUser": "SYSTEM", + "likelyLocalSystem": true, + "spoolerPrinterCount": 0, + "recommendations": [ + "GlassFish läuft wahrscheinlich als LocalSystem. Benutzergebundene Drucker werden meistens nicht gefunden.", + "Für PDF/HTML/PDF_TEMPLATE: Drucker lokal/serverweit installieren oder maschinenweite Printserver-Verbindung verwenden.", + "Für ZPL/EPL: RAW_TCP-Alias verwenden und direkt an IP:9100 senden." + ] +} diff --git a/target/classes/examples/rest-disable-queue-for-privacy-request.json b/target/classes/examples/rest-disable-queue-for-privacy-request.json new file mode 100644 index 0000000..16f7117 --- /dev/null +++ b/target/classes/examples/rest-disable-queue-for-privacy-request.json @@ -0,0 +1,7 @@ +{ + "enabled": false, + "storeRequestsForReprint": false, + "autoCleanupEnabled": false, + "retentionDays": 0, + "maxStoredJobs": 0 +} diff --git a/target/classes/examples/rest-docx-converters.curl.txt b/target/classes/examples/rest-docx-converters.curl.txt new file mode 100644 index 0000000..ec7d478 --- /dev/null +++ b/target/classes/examples/rest-docx-converters.curl.txt @@ -0,0 +1 @@ +curl http://localhost:8080/api/docx/converters diff --git a/target/classes/examples/rest-get-queue-settings.curl.txt b/target/classes/examples/rest-get-queue-settings.curl.txt new file mode 100644 index 0000000..7f97126 --- /dev/null +++ b/target/classes/examples/rest-get-queue-settings.curl.txt @@ -0,0 +1,2 @@ +curl -X GET http://localhost:8080/api/queue/settings \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/target/classes/examples/rest-list-queue-filter-user.curl.txt b/target/classes/examples/rest-list-queue-filter-user.curl.txt new file mode 100644 index 0000000..4aff599 --- /dev/null +++ b/target/classes/examples/rest-list-queue-filter-user.curl.txt @@ -0,0 +1,2 @@ +curl "http://localhost:8080/api/queue?full=true&user=line01&status=SUBMITTED&templateName=serial_label_zpl" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/target/classes/examples/rest-list-queue-full-admin.curl.txt b/target/classes/examples/rest-list-queue-full-admin.curl.txt new file mode 100644 index 0000000..141d1a1 --- /dev/null +++ b/target/classes/examples/rest-list-queue-full-admin.curl.txt @@ -0,0 +1,2 @@ +curl "http://localhost:8080/api/queue?full=true&limit=500&includeRequest=false" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" diff --git a/target/classes/examples/rest-list-queue-own.curl.txt b/target/classes/examples/rest-list-queue-own.curl.txt new file mode 100644 index 0000000..5ae1fa2 --- /dev/null +++ b/target/classes/examples/rest-list-queue-own.curl.txt @@ -0,0 +1,2 @@ +curl http://localhost:8080/api/queue?limit=100 \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" diff --git a/target/classes/examples/rest-print-docx-lieferschein-request.json b/target/classes/examples/rest-print-docx-lieferschein-request.json new file mode 100644 index 0000000..dc7ee28 --- /dev/null +++ b/target/classes/examples/rest-print-docx-lieferschein-request.json @@ -0,0 +1,23 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/target/classes/examples/rest-print-docx4j-fo-request.json b/target/classes/examples/rest-print-docx4j-fo-request.json new file mode 100644 index 0000000..24efdad --- /dev/null +++ b/target/classes/examples/rest-print-docx4j-fo-request.json @@ -0,0 +1,16 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/target/classes/examples/rest-print-html-table-request.json b/target/classes/examples/rest-print-html-table-request.json new file mode 100644 index 0000000..ed9db73 --- /dev/null +++ b/target/classes/examples/rest-print-html-table-request.json @@ -0,0 +1,37 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "copies": 1, + "pdfDpi": 300, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtung", + "quantity": "20", + "serialNumber": "SNR000003" + } + ] + } +} diff --git a/target/classes/examples/rest-print-pdf-simple-lieferschein-request.json b/target/classes/examples/rest-print-pdf-simple-lieferschein-request.json new file mode 100644 index 0000000..f807b0e --- /dev/null +++ b/target/classes/examples/rest-print-pdf-simple-lieferschein-request.json @@ -0,0 +1,21 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_simple", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen." + } +} \ No newline at end of file diff --git a/target/classes/examples/rest-print-pdf-template-request.json b/target/classes/examples/rest-print-pdf-template-request.json new file mode 100644 index 0000000..95c9cc0 --- /dev/null +++ b/target/classes/examples/rest-print-pdf-template-request.json @@ -0,0 +1,24 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "quantity": "120", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "10", + "material": "A123456", + "description": "Baugruppe rechts", + "quantity": "120" + } + ] + } +} \ No newline at end of file diff --git a/target/classes/examples/rest-print-pdf-template-table-request.json b/target/classes/examples/rest-print-pdf-template-table-request.json new file mode 100644 index 0000000..712c55c --- /dev/null +++ b/target/classes/examples/rest-print-pdf-template-table-request.json @@ -0,0 +1,52 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "lieferschein_pdf_table", + "renderMode": "PDF_TEMPLATE", + "copies": 1, + "pdfDpi": 300, + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + }, + { + "pos": "2", + "partNumber": "B987654", + "description": "Elektronikmodul", + "quantity": "5", + "serialNumber": "SNR000002" + }, + { + "pos": "3", + "partNumber": "C555111", + "description": "Dichtungssatz EPDM", + "quantity": "20", + "serialNumber": "SNR000003" + }, + { + "pos": "4", + "partNumber": "D444222", + "description": "Sensorleitung vorkonfektioniert", + "quantity": "7", + "serialNumber": "SNR000004" + }, + { + "pos": "5", + "partNumber": "E777888", + "description": "Befestigungsclip", + "quantity": "30", + "serialNumber": "SNR000005" + } + ] + } +} \ No newline at end of file diff --git a/target/classes/examples/rest-print-raw-tcp-zpl-request.json b/target/classes/examples/rest-print-raw-tcp-zpl-request.json new file mode 100644 index 0000000..7dac6e6 --- /dev/null +++ b/target/classes/examples/rest-print-raw-tcp-zpl-request.json @@ -0,0 +1,12 @@ +{ + "printerAlias": "LABEL_LINE_01", + "templateName": "serial_label_zpl", + "renderMode": "RAW", + "copies": 1, + "encoding": "UTF-8", + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200" + } +} diff --git a/target/classes/examples/rest-queue-response-example.json b/target/classes/examples/rest-queue-response-example.json new file mode 100644 index 0000000..0261a36 --- /dev/null +++ b/target/classes/examples/rest-queue-response-example.json @@ -0,0 +1,25 @@ +{ + "total": 1, + "returned": 1, + "filteredToCurrentUser": true, + "currentUser": "line01", + "jobs": [ + { + "jobId": "31b5a0e2-6c99-4098-9c6c-8aa80d7e2231", + "status": "SUBMITTED", + "createdAt": "2026-06-09T07:12:15Z", + "updatedAt": "2026-06-09T07:12:16Z", + "userName": "line01", + "displayName": "Linie 01", + "printerAlias": "LABEL_LINE_01", + "systemName": "192.168.10.50:9100", + "templateName": "serial_label_zpl", + "documentName": "Serienetikett ZPL", + "renderMode": "RAW", + "contentType": "text/plain", + "copies": 1, + "renderedBytes": 164, + "message": "Print job submitted" + } + ] +} diff --git a/target/classes/examples/rest-reprint-request.json b/target/classes/examples/rest-reprint-request.json new file mode 100644 index 0000000..3a8ca6a --- /dev/null +++ b/target/classes/examples/rest-reprint-request.json @@ -0,0 +1,7 @@ +{ + "copies": 1, + "printerAlias": "LABEL_LINE_01", + "dataOverride": { + "reprintReason": "Etikett beschädigt" + } +} diff --git a/target/classes/examples/rest-reprint.curl.txt b/target/classes/examples/rest-reprint.curl.txt new file mode 100644 index 0000000..22e9bdc --- /dev/null +++ b/target/classes/examples/rest-reprint.curl.txt @@ -0,0 +1,4 @@ +curl -X POST http://localhost:8080/api/queue/JOB_ID/reprint \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_PRINT_TOKEN" \ + -d @rest-reprint-request.json diff --git a/target/classes/examples/rest-update-auth-config-enabled-request.json b/target/classes/examples/rest-update-auth-config-enabled-request.json new file mode 100644 index 0000000..6e96f00 --- /dev/null +++ b/target/classes/examples/rest-update-auth-config-enabled-request.json @@ -0,0 +1,8 @@ +{ + "enabled": true, + "protectPrint": true, + "protectRenderedDownload": true, + "protectPreview": false, + "protectAdmin": true, + "headerName": "X-Printservice-Token" +} diff --git a/target/classes/examples/rest-update-queue-settings-request.json b/target/classes/examples/rest-update-queue-settings-request.json new file mode 100644 index 0000000..a578078 --- /dev/null +++ b/target/classes/examples/rest-update-queue-settings-request.json @@ -0,0 +1,7 @@ +{ + "enabled": true, + "storeRequestsForReprint": true, + "autoCleanupEnabled": true, + "retentionDays": 30, + "maxStoredJobs": 5000 +} diff --git a/target/classes/examples/rest-update-queue-settings.curl.txt b/target/classes/examples/rest-update-queue-settings.curl.txt new file mode 100644 index 0000000..abadcc0 --- /dev/null +++ b/target/classes/examples/rest-update-queue-settings.curl.txt @@ -0,0 +1,4 @@ +curl -X PUT http://localhost:8080/api/queue/settings \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_ADMIN_TOKEN" \ + -d @src/main/resources/examples/rest-update-queue-settings-request.json diff --git a/target/classes/examples/rest-validate-docx-lieferschein-request.json b/target/classes/examples/rest-validate-docx-lieferschein-request.json new file mode 100644 index 0000000..312141a --- /dev/null +++ b/target/classes/examples/rest-validate-docx-lieferschein-request.json @@ -0,0 +1,20 @@ +{ + "templateName": "lieferschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": false, + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "09.06.2026", + "customer": { + "name": "Muster GmbH", + "address": "Musterstraße 1, 12345 Musterstadt" + }, + "workorderNumber": "WO-100200", + "partNumber": "A123456", + "quantity": "120", + "serialNumber": "SNR000001", + "note": "Lieferung frei Rampe. Bitte Ware bei Annahme prüfen.", + "description": "Lieferschein Demo-Artikel" + } +} \ No newline at end of file diff --git a/target/classes/examples/rest-validate-docx4j-fo-request.json b/target/classes/examples/rest-validate-docx4j-fo-request.json new file mode 100644 index 0000000..a7bbf39 --- /dev/null +++ b/target/classes/examples/rest-validate-docx4j-fo-request.json @@ -0,0 +1,15 @@ +{ + "printerAlias": "OFFICE_A4", + "templateName": "serienbegleitschein_docx", + "renderMode": "DOCX", + "docxConverter": "DOCX4J_FO", + "includeRenderedBase64": true, + "data": { + "serialNumber": "SNR000001", + "partNumber": "A123456", + "workorderNumber": "WO-100200", + "customer": { + "name": "Muster GmbH" + } + } +} diff --git a/target/classes/examples/rest-validate-docx4j-fo.curl.txt b/target/classes/examples/rest-validate-docx4j-fo.curl.txt new file mode 100644 index 0000000..9d422d1 --- /dev/null +++ b/target/classes/examples/rest-validate-docx4j-fo.curl.txt @@ -0,0 +1,4 @@ +curl -X POST "http://localhost:8080/api/docx/validate?converter=DOCX4J_FO" \ + -H "Content-Type: application/json" \ + -H "X-Printservice-Token: YOUR_TOKEN" \ + -d @src/main/resources/examples/rest-validate-docx4j-fo-request.json diff --git a/target/classes/examples/rest-validate-html-pdf-request.json b/target/classes/examples/rest-validate-html-pdf-request.json new file mode 100644 index 0000000..690675b --- /dev/null +++ b/target/classes/examples/rest-validate-html-pdf-request.json @@ -0,0 +1,20 @@ +{ + "templateName": "lieferschein_html_table", + "renderMode": "PDF", + "data": { + "deliveryNumber": "LS-2026-0001", + "deliveryDate": "08.06.2026", + "customer": { + "name": "Muster GmbH" + }, + "items": [ + { + "pos": "1", + "partNumber": "A123456", + "description": "Gehäuse Oberteil", + "quantity": "10", + "serialNumber": "SNR000001" + } + ] + } +} diff --git a/target/classes/examples/serial_label.zpl.tpl b/target/classes/examples/serial_label.zpl.tpl new file mode 100644 index 0000000..8a38351 --- /dev/null +++ b/target/classes/examples/serial_label.zpl.tpl @@ -0,0 +1,7 @@ +^XA +^CF0,35 +^FO40,40^FDSerial: {{serialNumber}}^FS +^FO40,90^FDPart: {{partNumber}}^FS +^FO40,140^FDOrder: {{workorderNumber}}^FS +^FO40,200^BCN,100,Y,N,N^FD{{serialNumber}}^FS +^XZ diff --git a/target/classes/examples/serial_label_zpl_barcode_qr.zpl.tpl b/target/classes/examples/serial_label_zpl_barcode_qr.zpl.tpl new file mode 100644 index 0000000..dfa28ea --- /dev/null +++ b/target/classes/examples/serial_label_zpl_barcode_qr.zpl.tpl @@ -0,0 +1,7 @@ +^XA +^CF0,35 +^FO40,40^FDSerial: {{serialNumber}}^FS +^FO40,90^FDPart: {{partNumber}}^FS +^FO40,145^BCN,80,Y,N,N^FD{{serialNumber}}^FS +^FO40,260^BQN,2,6^FDLA,{{serialNumber}}^FS +^XZ diff --git a/target/classes/examples/serienbegleitschein.docx b/target/classes/examples/serienbegleitschein.docx new file mode 100644 index 0000000..cb30cd4 Binary files /dev/null and b/target/classes/examples/serienbegleitschein.docx differ diff --git a/target/classes/examples/warenanhaenger.html.tpl b/target/classes/examples/warenanhaenger.html.tpl new file mode 100644 index 0000000..34aca70 --- /dev/null +++ b/target/classes/examples/warenanhaenger.html.tpl @@ -0,0 +1,12 @@ + + +Warenanhänger + +

Warenanhänger

+

Serial: {{text:serialNumber}}

+

Part: {{text:partNumber}}

+

Order: {{text:workorderNumber}}

+
Barcode
+
QR
+ + diff --git a/target/classes/examples/warenanhaenger_pdf.html.tpl b/target/classes/examples/warenanhaenger_pdf.html.tpl new file mode 100644 index 0000000..337fb3d --- /dev/null +++ b/target/classes/examples/warenanhaenger_pdf.html.tpl @@ -0,0 +1,23 @@ + + + + + + + +
+

Warenanhänger

+

Serial: {{text:serialNumber}}

+

Part: {{text:partNumber}}

+

Order: {{text:workorderNumber}}

+ Barcode +
+ QR +
+ + diff --git a/target/classes/web/index.html b/target/classes/web/index.html new file mode 100644 index 0000000..31dac87 --- /dev/null +++ b/target/classes/web/index.html @@ -0,0 +1,442 @@ + + + + + + Printservice Standalone + + + +
+

Printservice Standalone

+
Eigenständige Java-25-Applikation · REST Druckservice · Drucker-Aliase · HTML→PDF mit Tabellen · PDF-Koordinatenvorlagen · DOCX-Vorlagen · ZPL/EPL-Rohdruck · Barcode · QR-Code · Ordnerbasierte Vorlagenspeicherung
+
+
+

Status

Bereit.
+
+

Authentifizierung, Benutzer und Token

+
+ Authentifizierung ist optional. Wenn sie deaktiviert ist, kann jeder, der den REST-Endpunkt erreicht, drucken. Wenn sie aktiviert wird, kann der Benutzer im Webfrontend angelegt werden und erhält ein Token. Das Token wird als Header X-Printservice-Token oder Authorization: Bearer ... gesendet. +
+
+
+

Token im Browser nutzen

+ + + +
Noch nicht geladen.
+
+
+

Auth einschalten / ausschalten

+
+
+
+
+ + +
Empfehlung: zuerst Admin-Benutzer anlegen, Token speichern, dann Auth aktivieren.
+
+
+

Benutzer / Token anlegen

+ + + + + + +
+
+

Benutzerliste

+
UserNameTokenScopesAktiv
+

Neues Token - nur einmal sichtbar

+
Noch kein Token erzeugt.
+
+ +
+

Speicherstruktur

+
+ Vorlagen werden produktionsnah als Ordner gespeichert: templates/<templateName>/template.json, document.*, fields.json, sample-data.json und print-request.json. Dadurch bleiben PDF/DOCX/HTML-Dateien auffindbar, sicherbar und separat versionierbar. +
+ +
Noch nicht geladen.
+
+ +
+

1. Windows-/Server-Drucker-Assistent

+
+ Der Assistent erkennt, ob der Service unter Windows und wahrscheinlich unter LocalSystem laeuft. Die gefundene Druckerliste bleibt hier im Vordergrund. RAW_TCP und Windows-Kommandos sind in separate Dialoge ausgelagert, damit die Liste gut lesbar bleibt. +
+
+ + + + +
+
Noch keine Diagnose geladen.
+

A. Gefundene Windows-Spooler-/CUPS-Drucker

+
Geeignet fuer PDF, HTML->PDF, PDF_TEMPLATE und auch RAW-Druck ueber installierte Treiber. Die Liste ist absichtlich breit und scrollbar, damit lange Windows-Druckernamen lesbar bleiben.
+
+
SystemnameStandardAktion
+
+
+ + + + + +
+

2. Eindeutigen Druckernamen zuweisen

+
+
+
+
+
+
+ + +
AliasTypZielAktiv
+
+ +
+

3. Dokumentenvorlage einchecken oder online erstellen

+
+ Schnellster Druckpfad: ZPL/EPL direkt als Rohdaten oder PDF_TEMPLATE für fertige PDF-Vorlagen mit Koordinatenfeldern. HTML→PDF bleibt für Webvorlagen nutzbar und unterstützt Tabellen mit JSON-Wiederholungsblöcken wie {{#each:items}}. + PDF-Koordinatenfelder nutzen x/y/width/height in pt oder mm; Text, Barcode und QR werden direkt ins PDF gestempelt. +
+
+
+ + + + + + + + + +
+
+ + + +
+
+
+
+
+
+
+ +
+
+ + + + + + + + +
+
+ +
+ + +
Der Designer ist für HTML-Vorlagen gedacht. DOCX bitte in Word oder LibreOffice bearbeiten und erneut einchecken.
+
+
+

Eingecheckte Vorlagen

+
NameDokumentTypSpeicherGrößeGeändert
+

Barcode-Arten

Noch nicht geladen.
+
+ +
+

4. JSON übergeben, Vorschau erzeugen und drucken

+
+
+ + +
+
+
+
+
+ + + + + + + + + +
+
+

Antwort / gerenderter Inhalt

Noch kein Druckjob.
+

HTML-Vorschau

+
+
+
+ +
+

5. Druckwarteschlange / Druckhistorie, Datenschutz und Redruck

+
+ Die Queue ist eine eigene persistente Druckhistorie unter queue/print-jobs.json. Sie ist nicht die Windows-Spooler-Warteschlange. Aus Datenschutzgruenden kann sie vollstaendig deaktiviert werden. Wird der Originalrequest nicht gespeichert, bleiben nur Metadaten erhalten und Redruck ist fuer neue Jobs nicht moeglich. +
+

Queue-Einstellungen

+
+

Aus = keine Job-Historie, kein Redruck, weniger personenbezogene Daten.
+

Aus = nur Metadaten, keine JSON-Druckdaten.
+
+
+
+
+
+
+
+
Noch nicht geladen.
+

Queue leeren / bereinigen

+
+ + +
+

Queue abrufen und Redruck

+
+
+
+
+
+
+
+
+

+
+ +
ZeitStatusUserDruckerVorlageKopienJob-ID
+

Job-Details

Noch kein Job ausgewaehlt.
+
+ +
+ + + diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..407f244 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Wed Jun 10 21:05:16 CEST 2026 +artifactId=printservice-standalone +groupId=de.hehl +version=2.5.0 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..30c80f3 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,57 @@ +de/hehl/printservice/service/PrinterDiagnosticsService.class +de/hehl/printservice/standalone/HttpUtil.class +de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.class +de/hehl/printservice/model/CreateTemplateRequest.class +de/hehl/printservice/model/SystemDiagnostics.class +de/hehl/printservice/service/PrintQueueService$1.class +de/hehl/printservice/model/PrintQueueMaintenanceResponse.class +de/hehl/printservice/service/JsonFiles.class +de/hehl/printservice/model/AuthConfiguration.class +de/hehl/printservice/service/RawTcpPrinterService.class +de/hehl/printservice/model/ErrorResponse.class +de/hehl/printservice/service/HtmlDocumentNormalizer$NormalizedHtml.class +de/hehl/printservice/service/BarcodeService.class +de/hehl/printservice/service/ConfigPaths.class +de/hehl/printservice/model/RenderedDocument.class +de/hehl/printservice/standalone/StaticWebHandler.class +de/hehl/printservice/service/Docx4jFoConverter.class +de/hehl/printservice/model/AuthIdentity.class +de/hehl/printservice/model/PrinterMapping.class +de/hehl/printservice/model/AuthConfigUpdateRequest.class +de/hehl/printservice/service/RawTcpPrinterClient.class +de/hehl/printservice/model/AuthToken.class +de/hehl/printservice/model/PdfTableColumn.class +de/hehl/printservice/service/TemplateService$FieldDocument.class +de/hehl/printservice/model/TemplateInfo.class +de/hehl/printservice/standalone/AuthService.class +de/hehl/printservice/model/ReprintRequest.class +de/hehl/printservice/model/WindowsPrinterCommandExamples.class +de/hehl/printservice/service/PrintJobService.class +de/hehl/printservice/service/DocxTemplateRenderer.class +de/hehl/printservice/model/AuthUserResponse.class +de/hehl/printservice/model/PrintQueueSettings.class +de/hehl/printservice/standalone/AuthService$Scope.class +de/hehl/printservice/model/WindowsPrinterDiagnostics.class +de/hehl/printservice/service/TemplateService.class +de/hehl/printservice/standalone/PrintServiceApplication.class +de/hehl/printservice/model/BarcodeFormatInfo.class +de/hehl/printservice/model/PrintQueueResponse.class +de/hehl/printservice/service/PdfDocumentService.class +de/hehl/printservice/service/BarcodeExpression.class +de/hehl/printservice/model/PrintResponse.class +de/hehl/printservice/service/PdfTemplateRenderer.class +de/hehl/printservice/model/PrintJobRecord.class +de/hehl/printservice/service/NameValidator.class +de/hehl/printservice/service/PrintQueueService.class +de/hehl/printservice/service/LibreOfficeConverter.class +de/hehl/printservice/model/AuthStatus.class +de/hehl/printservice/service/TemplateRenderer.class +de/hehl/printservice/model/RegisterPrinterRequest.class +de/hehl/printservice/service/PdfTemplateRenderer$FieldBox.class +de/hehl/printservice/model/AuthUserRequest.class +de/hehl/printservice/service/HtmlDocumentNormalizer.class +de/hehl/printservice/model/PdfTemplateField.class +de/hehl/printservice/model/PrinterInfo.class +de/hehl/printservice/service/PrinterRegistry.class +de/hehl/printservice/standalone/ApiHandler.class +de/hehl/printservice/model/PrintRequest.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..cf49184 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,52 @@ +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthConfigUpdateRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthConfiguration.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthIdentity.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthStatus.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthToken.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthUserRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/AuthUserResponse.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/BarcodeFormatInfo.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/CreateTemplateRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/ErrorResponse.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PdfTableColumn.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PdfTemplateField.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintJobRecord.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintQueueMaintenanceResponse.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintQueueResponse.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintQueueSettings.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintQueueSettingsUpdateRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrintResponse.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrinterInfo.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/PrinterMapping.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/RegisterPrinterRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/RenderedDocument.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/ReprintRequest.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/SystemDiagnostics.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/TemplateInfo.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/WindowsPrinterCommandExamples.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/model/WindowsPrinterDiagnostics.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/BarcodeExpression.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/BarcodeService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/ConfigPaths.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/Docx4jFoConverter.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/DocxTemplateRenderer.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/HtmlDocumentNormalizer.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/JsonFiles.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/LibreOfficeConverter.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/NameValidator.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PdfDocumentService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PdfTemplateRenderer.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PrintJobService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PrintQueueService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PrinterDiagnosticsService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/PrinterRegistry.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/RawTcpPrinterClient.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/RawTcpPrinterService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/TemplateRenderer.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/service/TemplateService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/standalone/ApiHandler.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/standalone/AuthService.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/standalone/HttpUtil.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/standalone/PrintServiceApplication.java +/home/chris/DevJava/printservice-standalone-java25-v2.4/src/main/java/de/hehl/printservice/standalone/StaticWebHandler.java diff --git a/target/original-printservice-standalone.jar b/target/original-printservice-standalone.jar new file mode 100644 index 0000000..7aaa49c Binary files /dev/null and b/target/original-printservice-standalone.jar differ diff --git a/target/printservice-standalone.jar b/target/printservice-standalone.jar new file mode 100644 index 0000000..a60da14 Binary files /dev/null and b/target/printservice-standalone.jar differ