diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 27683df0e..a20542b9c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -84,6 +84,8 @@ repos: args: - --plugin=@prettier/plugin-xml files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ + # For ebill_postfinance don't format the message template files + exclude: /messages/.*\.xml$|/components/wsdl/.*\.xml$|/tests/examples/.*\.xml$ - repo: https://github.com/pre-commit/mirrors-eslint rev: v8.24.0 hooks: diff --git a/ebill_postfinance/README.rst b/ebill_postfinance/README.rst new file mode 100644 index 000000000..d644904e9 --- /dev/null +++ b/ebill_postfinance/README.rst @@ -0,0 +1,130 @@ +================= +eBill Postfinance +================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:8fe54c201370aabd37f966becd9bc102925267307e434f56a4c558a943f058ed + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--switzerland-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-switzerland/tree/16.0/ebill_postfinance + :alt: OCA/l10n-switzerland +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-switzerland-16-0/l10n-switzerland-16-0-ebill_postfinance + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-switzerland&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module implements the exchange of electronic invoices with the Postfinance web service. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module needs the Python library `ebilling_postfiance` which can be installed from Pypi. +More information can be found at ``_. + +Configuration +============= + +Create a service +================ + +First you need to be registred on 'Postfinance eBill service ' +To create a service go to `Accounting - Configuration - Payments - Postfinance eBill Service` + +Configure a customer and create his contract +============================================ + +The contracts specific to Postfinance e-billing are located in `Accounting - Customers - eBill Postfinance Contract` +Create a contract for a customer with his PayerId and make sure that the contract is active by being in `Open` state with valid start/end dates. + +Set `Customer Invoice Transmission Method` on the customer to Postfinance. + +Usage +===== + +To use this module, you need to: + +#. Configure the service, customers and contracts as described in the CONFIGURATION section. +#. Create an invoice for a customer with an open Postfinance contract. +#. Validate the invoice, and click the Send eBill button. + +Known issues / Roadmap +====================== + +ToDo + +* Add option to import the contract subscription (csv) +* Add the download of this csv from web service, but what is the endpoint ? + + +Nice to have + +* Add a link to the failed job in the chatter message. +* Add an action on partner to create a ebilling contract. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Thierry Ducrest + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-TDu| image:: https://github.com/TDu.png?size=40px + :target: https://github.com/TDu + :alt: TDu + +Current `maintainer `__: + +|maintainer-TDu| + +This module is part of the `OCA/l10n-switzerland `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/ebill_postfinance/__init__.py b/ebill_postfinance/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/ebill_postfinance/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/ebill_postfinance/__manifest__.py b/ebill_postfinance/__manifest__.py new file mode 100644 index 000000000..dfc1fcbcb --- /dev/null +++ b/ebill_postfinance/__manifest__.py @@ -0,0 +1,35 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "eBill Postfinance", + "summary": """Postfinance eBill integration""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Camptocamp,Odoo Community Association (OCA)", + "maintainers": ["TDu"], + "website": "https://github.com/OCA/l10n-switzerland", + "depends": [ + "account", + "account_invoice_export", + "base_ebill_payment_contract", + "l10n_ch", + "sale", + ], + "external_dependencies": { + "python": [ + "zeep", + "ebilling_postfinance", + ] + }, + "data": [ + "data/ir_cron.xml", + "data/transmit.method.xml", + "data/mail_activity_type.xml", + "security/ir.model.access.csv", + "views/ebill_payment_contract.xml", + "views/message_template.xml", + "views/ebill_postfinance_service.xml", + "views/ebill_postfinance_invoice_message.xml", + ], +} diff --git a/ebill_postfinance/data/ir_cron.xml b/ebill_postfinance/data/ir_cron.xml new file mode 100644 index 000000000..f8c11d528 --- /dev/null +++ b/ebill_postfinance/data/ir_cron.xml @@ -0,0 +1,14 @@ + + + + eBill Postfinance - Check invoices state on server + 1 + hours + -1 + + + + code + model.cron_update_invoices() + + diff --git a/ebill_postfinance/data/mail_activity_type.xml b/ebill_postfinance/data/mail_activity_type.xml new file mode 100644 index 000000000..399b38052 --- /dev/null +++ b/ebill_postfinance/data/mail_activity_type.xml @@ -0,0 +1,10 @@ + + + + eBill Postfinance Error + fa-warning + 0 + 99 + warning + + diff --git a/ebill_postfinance/data/transmit.method.xml b/ebill_postfinance/data/transmit.method.xml new file mode 100644 index 000000000..0fecfd649 --- /dev/null +++ b/ebill_postfinance/data/transmit.method.xml @@ -0,0 +1,10 @@ + + + + Postfinance + postfinance + + + + + diff --git a/ebill_postfinance/i18n/ebill_postfinance.pot b/ebill_postfinance/i18n/ebill_postfinance.pot new file mode 100644 index 000000000..951b66103 --- /dev/null +++ b/ebill_postfinance/i18n/ebill_postfinance.pot @@ -0,0 +1,527 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ebill_postfinance +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/ebill_payment_contract.py:0 +#, python-format +msgid "A Postfinance service is required for a Postfinance contract." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__active +msgid "Active" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.postfinance_service_search_view +msgid "All" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__partner_bank_id +msgid "Bank account" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__postfinance_billerid +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__biller_id +msgid "Biller ID" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__payment_type__credit +msgid "CREDIT" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_postfinance_invoice_message_form_view +msgid "Check payload validity" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__ebill_payment_contract_ids +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.postfinance_service_form_view +msgid "Contracts" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__create_uid +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__create_uid +msgid "Created by" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__create_date +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__create_date +msgid "Created on" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_service__file_type_to_use__eai_xml +msgid "Custom XML (SAPiDoc)" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__payment_type__dd +msgid "DD" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__deleted +msgid "Deleted" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_account_move__display_name +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__display_name +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__display_name +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__display_name +#: model:ir.model.fields,field_description:ebill_postfinance.field_sale_order__display_name +msgid "Display Name" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__done +msgid "Done" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__draft +msgid "Draft" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__payment_type__esr +msgid "ESR" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__ebill_payment_contract_id +msgid "Ebill Payment Contract" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,help:ebill_postfinance.field_ebill_postfinance_service__use_file_type_xml_paynet +msgid "Enable use of legacy SIX/Paynet invoice format." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__error +msgid "Error" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__server_reason_code +msgid "Error code" +msgstr "" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/account_move.py:0 +#, python-format +msgid "Error generating postfinance eBill" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__server_reason_text +msgid "Error text" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_service__file_type_to_use__struct_pdf +msgid "Factur X" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__file_type_used +msgid "File Type Used" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__operation_timeout +msgid "HTTP Timeout" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__payment_type__iban +msgid "IBAN" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_account_move__id +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__id +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__id +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__id +#: model:ir.model.fields,field_description:ebill_postfinance.field_sale_order__id +msgid "ID" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_payment_contract__payment_type__isr +msgid "ISR" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_postfinance_invoice_message_search_view +msgid "In Error" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__incomplete +msgid "Incomplete" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__invalid +msgid "Invalid" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__invoice_id +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_postfinance_invoice_message_search_view +msgid "Invoice" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__file_type_to_use +msgid "Invoice Format" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__invoice_message_ids +msgid "Invoice Messages" +msgstr "" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/account_move.py:0 +#, python-format +msgid "Invoice accepted by the Postfinance system" +msgstr "" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/ebill_postfinance_invoice_message.py:0 +#, python-format +msgid "Invoice paid through eBilling" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_payment_contract_form_view +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.postfinance_service_form_view +msgid "Invoices" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.actions.act_window,name:ebill_postfinance.invoices_sent_to_service +#: model:ir.actions.act_window,name:ebill_postfinance.invoices_sent_to_service_4_contract +msgid "Invoices Sent to Postfinance" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__is_postfinance_contract +msgid "Is Postfinance Contract" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__is_postfinance_method_on_partner +msgid "Is Postfinance Method On Partner" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model,name:ebill_postfinance.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_account_move____last_update +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract____last_update +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message____last_update +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service____last_update +#: model:ir.model.fields,field_description:ebill_postfinance.field_sale_order____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__write_uid +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__write_date +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__name +msgid "Name" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__payment_type__other +msgid "OTHER" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__open +msgid "Open" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__attachment_id +msgid "PDF" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__paid +msgid "Paid" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__password +msgid "Password" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__payload_size +msgid "Payload Size (MB)" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__payload +msgid "Payload sent" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__payment_type +msgid "Payment Type" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__payment_type +msgid "Payment method" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,help:ebill_postfinance.field_ebill_payment_contract__payment_type +msgid "" +"Payment type to use for the invoices sent, PDF will be generated and " +"attached accordingly." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__ebill_account_number +msgid "Paynet Id" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_payment_contract_form_view +msgid "Postfinance" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_sale_order__postfinance_ebill_client_order_ref +msgid "Postfinance Ebill Client Order Ref" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.ui.menu,name:ebill_postfinance.postfinance_service_config_menu +msgid "Postfinance eBill Service" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model,name:ebill_postfinance.model_ebill_postfinance_service +msgid "Postfinance eBill service configuration" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model,name:ebill_postfinance.model_ebill_postfinance_invoice_message +msgid "Postfinance message send to service" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.actions.act_window,name:ebill_postfinance.postfinance_service_act_window +msgid "Postinance eBill Service" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__processing +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__processing +msgid "Processing" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_payment_contract__payment_type__qr +msgid "QR" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__ref +msgid "Reference No." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__reject +msgid "Reject" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__rejected +msgid "Rejected" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_postfinance_invoice_message_form_view +msgid "Resend" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__response +msgid "Response" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model,name:ebill_postfinance.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.postfinance_service_form_view +msgid "Search Invoices" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__state__sent +msgid "Sent" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__server_state +msgid "Server State" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_payment_contract__postfinance_service_id +msgid "Service" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__service_id +msgid "Service used" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_payment_contract_form_view +msgid "Set invoicing method" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_payment_contract_form_view +msgid "Sets the invoice transmit method on the customer" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__state +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.ebill_postfinance_invoice_message_search_view +msgid "State" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__submitted_on +msgid "Submitted on" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.actions.act_window,name:ebill_postfinance.contract_for_service +msgid "Subscription" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,help:ebill_postfinance.field_ebill_postfinance_service__use_test_service +msgid "Target the test service" +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.postfinance_service_form_view +msgid "Test connection" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__use_test_service +msgid "Testing" +msgstr "" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/ebill_payment_contract.py:0 +#, python-format +msgid "The Postfinacnce Account ID is required for a Postfinance contract." +msgstr "" + +#. module: ebill_postfinance +#: model_terms:ir.ui.view,arch_db:ebill_postfinance.rejected_invoice +msgid "The Postfinance system rejected the eBill that was send." +msgstr "" + +#. module: ebill_postfinance +#: code:addons/ebill_postfinance/models/ebill_postfinance_invoice_message.py:0 +#, python-format +msgid "The payload is valid." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,help:ebill_postfinance.field_ebill_postfinance_service__operation_timeout +msgid "Timeout for each HTTP (GET, POST) request in seconds." +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_invoice_message__transaction_id +msgid "Transaction Id" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_invoice_message__server_state__unsigned +msgid "Unsigned" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__use_file_type_xml_paynet +msgid "Use Paynet/SIX format" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields,field_description:ebill_postfinance.field_ebill_postfinance_service__username +msgid "Username" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model.fields.selection,name:ebill_postfinance.selection__ebill_postfinance_service__file_type_to_use__xml +msgid "XML Yellow Bill" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.model,name:ebill_postfinance.model_ebill_payment_contract +msgid "eBill Payment Contract" +msgstr "" + +#. module: ebill_postfinance +#: model:ir.actions.server,name:ebill_postfinance.cron_search_invoices_ir_actions_server +#: model:ir.cron,cron_name:ebill_postfinance.cron_search_invoices +#: model:ir.cron,name:ebill_postfinance.cron_search_invoices +msgid "eBill Postfinance - Check invoices state on server" +msgstr "" + +#. module: ebill_postfinance +#: model:mail.activity.type,name:ebill_postfinance.mail_activity_ebill_postfinance_error +msgid "eBill Postfinance Error" +msgstr "" diff --git a/ebill_postfinance/messages/invoice-2003A.jinja b/ebill_postfinance/messages/invoice-2003A.jinja new file mode 100644 index 000000000..7f9873da0 --- /dev/null +++ b/ebill_postfinance/messages/invoice-2003A.jinja @@ -0,0 +1,238 @@ + + + + + + {{ client_pid }} + + + 41010106799303734 + + {{ transaction_id }} + + +
+ + + + + + {{ invoice.name }} + {{ format_date() }} + + + + {{ format_date(invoice.date_invoice) }} + + + {{ format_date(invoice.date_invoice) }} + + + + + {{ invoice.name }} + {{ format_date(invoice.date_invoice) }} + + + {% for order in invoice_lines.sale_line_ids.mapped('order_id') if order.postfinance_ebill_client_order_ref %} + {%- if loop.index0 < 5 %} + + + {{ order.postfinance_ebill_client_order_ref }} + {{ format_date(order.date_order) }} + + + {%- endif %} + {% endfor %} + {% for picking in invoice_lines.sale_line_ids.move_ids.mapped('picking_id')[:9] %} + {%- if picking.state != 'cancel' %} + + + {{ picking.name }} + {%- if picking.date_done %} + {{ format_date(picking.date_done) }} + {%- endif %} + + + {%- endif %} + {% endfor %} + {% for ref in invoice.get_postfinance_other_reference() %} + + + {{ ref.no|truncate(35, True, "") }} + + + {% endfor %} + + + {#- Doc says vat number or business identitfiaction number #} + {%- if invoice.company_id.vat %} + {{ invoice.company_id.vat }} + {%- endif %} + {%- if invoice.payment_reference %} + {{ invoice.payment_reference }} + {%- endif %} + + {{ client_pid }} + + + + {{ biller.name }} + + + {{ (biller.street or '')|truncate(35, True, "") }} + {%- if biller.street2 %} + {{ biller.street2|truncate(5, True, "") }} + {% endif %} + + {{ biller.city or ''}} + {{ biller.zip or '' }} + {{ biller.country_id.code or 'CH' }} + + + {%- if payment_type in ['isr', 'esp'] %} + {{ bank_account }} + {{ bank.bank_id.clearing }} + {%- elif payment_type == 'qr' %} + {{ bank_account }} + {{ bank_account[4:9] if bank_account else ''}} + {%- endif %} + + + + + {{ ebill_account_number }} + + + + {%- if customer.name != customer.commercial_company_name and customer.commercial_company_name %} + {{ customer.commercial_company_name|truncate(35, True, '') }} + {%- endif %} + {{ (customer.name or "")|truncate(35, True, "") }} + + + {{ (customer.street or "")|truncate(35, True, "") }} + {%- if customer.street2 %} + {{ customer.street2|truncate(35, True, "") }} + {%- endif %} + + {{ customer.city or ""}} + {{ customer.zip or ""}} + {{ customer.country_id.code or 'CH' }} + + + {%- if delivery %} + + + + {%- if delivery.name != delivery.commercial_company_name and delivery.commercial_company_name %} + {{ delivery.commercial_company_name|truncate(35, True, '') }} + {%- endif %} + {{ (delivery.name or "")|truncate(35, True, "") }} + + + {{ (delivery.street or "")|truncate(35, True, "") }} + {%- if delivery.street2 %} + {{ delivery.street2|truncate(35, True, "") }} + {%- endif %} + + {{ delivery.city or '' }} + {{ delivery.zip or '' }} + {{ delivery.country_id.code or 'CH' }} + + + {%- endif %} +
+ {% for line in invoice_lines %} + + {%- if line.product_id %} + + {{ line.product_id.default_code or ''}} + {{ line.product_id.default_code or ''}} + + {%- endif %} + + 1011 + {{ (line.product_id.name or line.name or "")[:35] }} + {%- if (line.product_id.name or line.name or "")|length > 35 %} + {{ (line.product_id.name or line.name)[35:]|truncate(34, True) }} + {%- endif %} + + {% for order in invoice_lines.sale_line_ids.mapped('order_id') %} + {%- if order.postfinance_ebill_client_order_ref %} + + + {{ order.postfinance_ebill_client_order_ref }} + {{ format_date(order.date_order) }} + + + {%- endif %} + {% endfor %} + {{ line.quantity }} + {{ line.price_subtotal|round(2) }} + {{ line.price_subtotal|round(2) }} + {{ line.price_total|round(2) }} + + {{ line.price_subtotal|round(2) }} + + {% for tax in line.tax_ids %} + {%- if loop.index == 1 %} + + {{ tax.amount}} + {{ tax._compute_amount(line.price_subtotal, line.price_unit)|round(2) }} + + {%- endif %} + {% else %} + + 0 + + {% endfor %} + + {% endfor %} + + + {{ invoice.amount_total|round(2) }} + + + {{ invoice.amount_tax|round(2) }} + + + {{ invoice.amount_untaxed|round(2) }} + + {% if amount_by_group %} + {% for taxgroup in amount_by_group %} + + + {{ taxgroup[2]|round(2) }} + + {%- if taxgroup[0] %} + {{ taxgroup[0] }} + {%- else %} + 0 + {%- endif %} + {{ taxgroup[1]|round(2) }} + + {% endfor %} + {%- else %} + + + {{ invoice.amount_untaxed|round(2) }} + + 0 + 0 + + {% endif -%} + + + + {{ date_due }} + + + {% include discount_template ignore missing %} + + + {{- pdf_data | safe -}} + + +
+
diff --git a/ebill_postfinance/messages/invoice-yellowbill.jinja b/ebill_postfinance/messages/invoice-yellowbill.jinja new file mode 100644 index 000000000..ae08e647c --- /dev/null +++ b/ebill_postfinance/messages/invoice-yellowbill.jinja @@ -0,0 +1,227 @@ + + +
+ {{ invoice.company_id.name }} + IPECeBILLServer + CreateybInvoice + 1 + 2.0 + 0 + Odoo + 14.0 +
+ + {% set ref = namespace(position = 0) %} + + {{ message.service_id.biller_id }} + {{ ebill_account_number }} + {{ format_date(invoice.date_invoice) }} + {{ transaction_id }} + PDFAppendix + + + +
+ {{ 'BILL' if invoice.move_type == 'out_invoice' else 'CREDITADVICE' }} + {{ invoice.name }} + {{ format_date(invoice.date_invoice) }} + + VAT + +
+ {{ biller.name }} + {{ (biller.street or "")|truncate(50, True, "") }} + {%- if biller.street2 %} + {{ (biller.street2)|truncate(50, True, "") }} + {%- endif %} + {{ biller.zip or "" }} + {{ biller.city or "" }} + {{ biller.country_id.code or 'CH' }} + {%- if biller.email %} + {{ biller.email }} + {%- endif %} + {%- if biller.phone %} + {{ biller.phone }} + {%- endif %} + {%- if biller.mobile %} + {{ biller.mobile }} + {%- endif %} +
+ {%- if invoice.company_id.vat %} + {{ invoice.company_id.vat|replace("-", "")|replace(".", "") }} + {%- endif %} +
+
+ + + {{ customer.id }} +
+ {{ (customer.commercial_company_name or customer.name)|truncate(50, True, "") }} + {{ (customer.street or "")|truncate(50, True, "") }} + {%- if customer.street2 %} + {{ (customer.street2)|truncate(50, True, "") }} + {%- endif %} + {{ customer.zip or "" }} + {{ customer.city or "" }} + {{ customer.country_id.code or 'CH' }} + {%- if customer.email %} + {{ customer.email }} + {%- endif %} + {%- if customer.phone %} + {{ customer.phone }} + {%- endif %} + {%- if customer.mobile %} + {{ customer.mobile }} + {%- endif %} +
+ {# {%- if invoice.company_id.vat %} #} + {# {{ invoice.company_id.vat|replace("-", "")|replace(".", "") }} #} + {# {%- endif %} #} +
+
+ {%- if False %} + {# So is this where the invoice is sent and not who it is for ? #} + +
+
+
+ {%- endif %} + {%- if delivery %} + +
+ {{ (delivery.commercial_company_name or delivery.name)|truncate(50, True, "") }} + {{ delivery.zip or "" }} + {{ delivery.city or "" }} + {{ delivery.country_id.code or 'CH' }} + {%- if delivery.email %} + {{ delivery.email }} + {%- endif %} + {%- if delivery.phone %} + {{ delivery.phone }} + {%- endif %} + {%- if delivery.mobile %} + {{ delivery.mobile }} + {%- endif %} +
+
+ {%- endif %} + + {# Not sure what is this ? #} + {{ format_date(invoice.date_invoice) }} + {{ format_date(invoice.date_invoice) }} + + {{ invoice.currency_id.name }} + + + {%- if saleorder|length == 1 %} + {% if saleorder.postfinance_ebill_client_order_ref %} + {% set ref.position = ref.position + 1 %} + + {{ ref.position }} + OrderReference + {{ saleorder.postfinance_ebill_client_order_ref }} + + {%- endif %} + {{ format_date(saleorder.date_order) }} + {%- endif %} + + + {{ (customer.lang or "en")|truncate(2, True, "") }} + + {{ date_due }} + {{ payment_type|upper }} + Yes + {% if payment_type == 'iban' %} + + {%- if bank.bank_id.bic %} + {{ bank.bank_id.bic }} + {%- endif %} + {{ bank.bank_id.name[:50] }} + {{ bank_account }} + {%- if invoice.payment_reference %} + {{ invoice.payment_reference }} + {%- endif %} + + {%- endif %} + +
+ + {% for line in invoice_lines %} + + {# discount, shipping and rounding go here too #} + NORMAL + {{ loop.index }} + {{ (line.product_id.name or line.name or "")[:255] }} + {%- if line.product_id %} + {{ line.product_id.default_code or ''}} + {%- endif %} + {{ line.quantity or 0 }} + {{ line.product_uom_id.name or "PCE"}} + 1 + {% for tax in line.tax_ids %} + {%- if loop.index == 1 %} + + + {{ tax.amount|round(2)|replace(",", ".") }} + {{ tax._compute_amount(line.price_subtotal, line.price_unit)|round(2) }} + {{ line.price_subtotal|round(6) }} + {{ line.price_total|round(6) }} + + {{ tax._compute_amount(line.price_subtotal, line.price_unit)|round(2) }} + + {%- endif %} + {% endfor %} + {{ line.price_total|round(6) }} + {{ line.price_subtotal|round(6) }} + + {% for order in line.sale_line_ids.mapped('order_id') %} + {% set ref.position = ref.position + 1 %} + + {{ ref.position }} + OrderNumberBySupplier + {{ order.name }} + + {%- if order.postfinance_ebill_client_order_ref %} + {% set ref.position = ref.position + 1 %} + + {{ ref.position }} + OrderNumberByBuyer + {{ order.postfinance_ebill_client_order_ref }} + + {%- endif %} + {% endfor %} + + {% include invoice_line_stock_template ignore missing %} + + + {% endfor %} + + + {% if amount_by_group %} + + {% for taxgroup in amount_by_group %} + + {{ taxgroup[0]|replace(",", ".") or "0" }} + {{ taxgroup[1]|round(2)|round(6) * amount_sign }} + {{ taxgroup[2]|round(6) * amount_sign }} + {{ (taxgroup[2]|round(6) + taxgroup[1]|round(6)) * amount_sign }} + + {% endfor %} + {{ invoice.amount_tax|round(6) }} + + {% endif -%} + {# #} + {# #} + {# #} + {# #} + {{ invoice.amount_untaxed * amount_sign }} + {{ invoice.amount_total * amount_sign }} + {# #} + {{ invoice.amount_total * amount_sign }} + +
+ + {{- pdf_data | safe -}} + + +
diff --git a/ebill_postfinance/messages/ybInvoice_V2.0.4.xsd b/ebill_postfinance/messages/ybInvoice_V2.0.4.xsd new file mode 100644 index 000000000..1ef840eb9 --- /dev/null +++ b/ebill_postfinance/messages/ybInvoice_V2.0.4.xsd @@ -0,0 +1,1395 @@ + + + + + + + + + complextype delivery + + + + + N [17], modulo-checked sender ID, assigned by yellowbill (e.g.: "41100000000002256") + + + + + + + + + + ReceiverID + + + + N [17], modulo-checked receiver ID + + + + + + + + + + + + + + + + + + + AN [15], Number of bill run, if more than one bill run per period. Length is maximum 15 characters. + + + + + + + + Date [yyyy-mm-dd] must be equal to DocumentDate in node bill. + + + + + AN [50] unique transaction identification assigned by sender. This ID is being used in the PDF- and XML-bill filename. Length is maximum 50 characters. + + + + + + + + + + [PDF;PDFSystem;PDFAppendix] type of bill detail, usualy PDF = PDF-Format; PDFSystem = PDF generated by yellowbil; PDFAppendix = PDF delivered by sender embedded in Appendix node + + + + + + + + + + + + deprecated + + + + + + + + + + + + complextype ybinvoice + + + + + node delivery info + + + + + node bill + + + + + node appendix data + + + + + + + complextype BillHeader + + + + + [BILL; CREDITADVICE; REMINDER] type of document + + + + + + + + + + + + + [partial, final] subtype of document + + + + + + + + + + + + AN [70] document identification by sender (e.g. bill no. 527-45-678-78) + + + + + + + + + + additional document reference defined by sender. + + + + + [yyyy-mm-dd] Date of document. Must be equal to DeliveryDate in node DeliveryInfo + + + + + Identification and information about sender + + + + + + EBPP network identification + + + + + Flag to show, if biller has to declare VAT information or not. + + + + + + + + + + + + + + + Identification and information about receiver + + + + + + EBPP network identification + + + + + + + + + Indications of receiver party + + + + + Information about delivery + + + + + This value is mandatory, if there is no entry in lineitem of node billlineitem + + + + + AN [3] currency code ISO 4217; Permitted: CHF, EUR, AUD, CAD, DKK, GBP, JPY, NOK, SEK, USD + + + + + + + + + + + + + + + + + + + + + order- and account references + + + + + enumerated references has to use a ReferenceType according to manual e-bill + + + + + [de, fr, it, en] Standard 2-letter language code ISO 639 (e.g.: German=de, French=fr, Italian=it, English=en) + + + + + + + + + + + + + payment information + + + + + + [yyyy-mm-dd] Due date for payment (e.g.:"2004-07-25") + + + + + [ESR;DD;CREDIT;OTHER;IBAN] method of payment + + + + + + + + + + + + + + [Yes;No] case-sensitive. Indication wether amount is changeable upon payment or not (default:"Yes") + + + + + + + + + + + Orange inpayment slip (ESR) + + + + + + N [2]-[6]-[1] or [9] Orange inpayment slip (ESR) customer number of sender (e.g. "01-123456-1" or "011234561"). First two positions must be "01" for CHF or "03" for EUR + + + + + + + + + + N [27] Reference number of orange inpayment slip (ESR) + + + + + + + + + + + + + International payment instruction + + + + + + AN [11] bank identifier code + + + + + + + + + + AN [50] name of the bank + + + + + + + + + + AN [34] internatinoal bank account number + + + + + + + + + + AN [50] name of the creditor + + + + + + + + + + AN [140] reference + + + + + + + + + + [BEN;OUR;SHA] case-sensitive. Indication by whom the bank charges has to be paid. + + + + + + + + + + + + + + + node instalments + + + + + + + + + + + + + AN [255] bill header freetext + + + + + + + + + + complextype Network + + + + + AN [30] network identification + + + + + + + + AN [30] unique network identification. If sender = BillerID; if receiver = EBPP network ID (eBill-account-ID) + + + + + + + + + + complextype Address + + + + + AN [50] companyname, must correspond to Tax register entry. Mandatory for VAT validity. + + + + + + + + AN [70] Name of company division + + + + + + + + AN [10] Mr. / Mrs. / Title + + + + + + + + AN [50] familyname + + + + + + + + AN [50] givenname + + + + + + + + AN [50] Address 1. Address1 or POBox has to be filled out. + + + + + + + + AN [50] Address 2 + + + + + + + + AN [50] PoBox, Address1 or POBox has to be filled out. + + + + + + + + AN [10] Postal code + + + + + + + + AN [50] city + + + + + + + + A [2] ISO Standard 3166-1 (CH, DE, etc.) + + + + + + + + + + AN [255] e-mail + + + + + + + + AN [70] contact information + + + + + + + + AN [70] contact information + + + + + + + + + + complextype Party + + + + + AN [50] senders or receivers customer identification + + + + + + + + + AN [50] VAT number of sender or receiver. Mandatory for sender if attribute TaxLiability is VAT. + + + + + + + + additional reference, e.g. delivery number + + + + + + + complextype AchievementDate + + + + + [yyyy-mm-dd] Startdate of achievement range + + + + + [yyyy-mm-dd] enddate of achievement range. End date can be equal, but not earlier to start date + + + + + + + complextype LineItem + + + + + [NORMAL, LINEITEMALLOWANCEANDCHARGE, GLOBALALLOWANCEANDCHARGE, SHIPPINGANDHANDLING, ROUNDING] type of lineitem + + + + + + + + + + + + + + AN [70] position of lineitem + + + + + + + + AN [50] description of product group as title + + + + + + + + AN [50] description of product subgroup as title + + + + + + + + This value is mandatory, if there is no entry in node AchievementDate of node billheader + + + + + AN [255] description of product or service + + + + + + + + AN [70] product-, article or achievementnumber, assigned by sender + + + + + + + + N [18] European/International Article Number + + + + + + + + + + N [13].[6] quantity + + + + + + + + AN[20] +must be agreed with the billRecipient + + + + + + + + + + + N [17].[2] quantity delivered per price (default = 1) + + + + + + + + N [17].[6] price incl. VAT per price unit + + + + + N [17].[6] price excl. VAT per price unit + + + + + tax detail per line item + + + + + N [17].[6] sum of BaseAmountInclusiveTax values (node TaxDetail) + + + + + + + + N [17].[6] sum of all BaseAmountExclusiveTax values (node TaxDetail) + + + + + + + + order- and account references + + + + + enumerated references + + + + + additional Lineitem reference defined by sender. + + + + + informations about allowance and charges, only allowed if LineItemType is "GLOBALALLOWANCEANDCHARGE" oder "LINEITEMALLOWANCEANDCHARGE" + + + + + + N [17].[6] indication as amount + + + + + + + + N [2].[2] indication in % + + + + + + + + Qualifiers the kind of allowance or charge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AN [255] free text per line item + + + + + + + + + + complextype TaxDetail + + + + + N [2].[2] percantage of tax rate (e.g. 7.60) + + + + + + + + N [17].[6] effective tax amount per tax rate + + + + + + + + N [17].[6] baseamount exclusive tax per tax rate + + + + + + + + N [17].[6] baseamount inclusive tax per tax rate + + + + + + + + + + complextype Tax + + + + + taxdetails per tax rate + + + + + N [17].[2] sum of tax amounts + + + + + + + + + + complextype Tax + + + + + taxdetails per tax rate + + + + + N [17].[6] sum of tax amounts + + + + + + + + + + complextype Summary + + + + + + Discount on payment (Skonto) + + + + + + + N [2] number of days when discount rate is allowed + + + + + + + + [yyyy-mm-dd] + + + + + + N [2].[2] Discount rate in % (Skontosatz in %) + + + + + + + + + + + N [17].[2] overall total amount excl. tax + + + + + + + + N [17].[2] overall total amount incl. tax. Must correspond to TotalAmount in PaymentData + + + + + + + + N [17].[6] amount of rounding + + + + + + + + bill summary freetext + + + + + N [17].[2] total of prepaid amount + + + + + + + + N [17].[2] total amount incl. tax with subtraction of prepaid amount. + + + + + + + + + + complextype Bill + + + + + node bill header + + + + + + + + + + node bill line items + + + + + + detail information per position + + + + + + + + node bill summary + + + + + + + systemnode + + + + + + node envelope header + + + + + node envelope body + + + + + + + + + complextype AccountAssignment + + + + + order reference has to use "OrderReference" as ReferenceType + + + + + AN [20] order position number + + + + + + + + [yyyy-mm-dd] date of based order + + + + + AN [70] article, achievement or product number, assigned by receiver + + + + + + + + AN [70] description of cost type + + + + + + + + AN [70] description of account type + + + + + + + + AN [70] account number + + + + + + + + AN [70] name or identification of company division + + + + + + + + AN[70] name or identification of the building + + + + + + + + AN[70] name or identification of the machine + + + + + + + + AN [70] name or identification of the job + + + + + + + + AN [70] name or identification of the project + + + + + + + + + + complextype Header + + + + + AN [70] sender companyname (e.g.: "Muster AG") + + + + + + + + AN targetsystemname (value: "IPECeBILLServer") + + + + + + + + + + AN usecasename (value: "CreateybInvoice") + + + + + + + + + + + N IPEC systemID (value: "1") + + + + + + + + + + N ybInvoice-version (value: "2.0") + + + + + + + + + + + N IPEC systemID (value: "0") + + + + + + + + + + + + + + + + + + + + + + + + + + complextype Reference + + + + + AN [50] position (number) of reference + + + + + + + + AN [50] type of reference + + + + + + + + AN [70] value of reference + + + + + + + + + + complextype Reference + + + + + AN [50] position (number) of reference + + + + + + + + AN [50] type of reference + + + + + + + + + + + + + + + + + + + + + AN [70] value of reference + + + + + + + + + + complextype Appendix + + + + + Any attachment as Base64 String. In case of BillDetailsType= PDFAppendix, the PDF bill detail has to be placed here with MimeType=x-application/pdfappendix. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Einzelrate, die der Rechnungsempfänger zur Zahlung freigeben kann. Die maximale Anzahl der Raten pro Ratengruppe ist auf 99 eingeschränkt. + + + + + + + complextype Instalment + + + + + + + + + + + + N [17].[2] amount of instalment inclusive tax + + + + + + + + [yyyy-mm-dd] Due date for payment (e.g.:"2004-07-25") + + + + + + N [27] Reference number of orange inpayment slip (ESR) + + + + + + + + + + + + AN [140] reference + + + + + + + + + + + diff --git a/ebill_postfinance/models/__init__.py b/ebill_postfinance/models/__init__.py new file mode 100644 index 000000000..ab63cba5e --- /dev/null +++ b/ebill_postfinance/models/__init__.py @@ -0,0 +1,5 @@ +from . import account_move +from . import ebill_payment_contract +from . import ebill_postfinance_invoice_message +from . import ebill_postfinance_service +from . import sale_order diff --git a/ebill_postfinance/models/account_move.py b/ebill_postfinance/models/account_move.py new file mode 100644 index 000000000..2b96cd6f6 --- /dev/null +++ b/ebill_postfinance/models/account_move.py @@ -0,0 +1,140 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import base64 +import logging + +import odoo +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.tools.pdf import merge_pdf + +_logger = logging.getLogger(__name__) + + +class AccountMove(models.Model): + + _inherit = "account.move" + + @api.onchange("transmit_method_id") + def _onchange_transmit_method(self): + if self.move_type not in ("out_invoice", "out_refund"): + return + postfinance_method = self.env.ref( + "ebill_postfinance.postfinance_transmit_method" + ) + if self.transmit_method_id == postfinance_method: + contract = self.partner_id.get_active_contract(self.transmit_method_id) + if contract: + self.partner_bank_id = contract.postfinance_service_id.partner_bank_id + + def _export_invoice(self): + """Export invoice with the help of account_invoice_export module.""" + postfinance_method = self.env.ref( + "ebill_postfinance.postfinance_transmit_method" + ) + if self.transmit_method_id != postfinance_method: + return super()._export_invoice() + message = self.create_postfinance_ebill() + if not message: + raise UserError(_("Error generating postfinance eBill")) + message.send_to_postfinance() + self.invoice_exported = True + return "Postfinance invoice generated and in state {}".format(message.state) + + def create_postfinance_ebill(self): + """Generate the message record for an invoice.""" + self.ensure_one() + contract = self.partner_id.get_active_contract(self.transmit_method_id) + if not contract: + return + # Generate PDf to be send + pdf_data = [] + # When test are run, pdf are not generated, so use an empty pdf + pdf = b"" + report_names = ["account.report_invoice"] + payment_type = "" + if self.move_type == "out_invoice": + payment_type = "iban" + if contract.payment_type == "qr": + report_names.append("l10n_ch.qr_report_main") + elif self.move_type == "out_refund": + payment_type = "credit" + for report_name in report_names: + # r = self.env["ir.actions.report"]._get_report_from_name(report_name) + pdf_content, _ = self.env["ir.actions.report"]._render( + report_name, [self.id] + ) + # pdf_content, _ = r._render([self.id]) + pdf_data.append(pdf_content) + if not odoo.tools.config["test_enable"]: + if len(pdf_data) > 1: + pdf = merge_pdf(pdf_data) + elif len(pdf_data) == 1: + pdf = pdf_data[0] + message = self.env["ebill.postfinance.invoice.message"].create( + { + "service_id": contract.postfinance_service_id.id, + "invoice_id": self.id, + "ebill_account_number": contract.postfinance_billerid, + "payment_type": payment_type, + "ebill_payment_contract_id": contract.id, + } + ) + attachment = self.env["ir.attachment"].create( + { + "name": "postfinance ebill", + "type": "binary", + "datas": base64.b64encode(pdf).decode("ascii"), + "res_model": "ebill.postfinance.invoice.message", + "res_id": message.id, + "mimetype": "application/x-pdf", + } + ) + message.attachment_id = attachment.id + return message + + def postfinance_invoice_line_ids(self): + """Filter invoice line to be included in XML message. + + Invoicing line that are UX based (notes, sections) are removed. + + """ + self.ensure_one() + return self.invoice_line_ids.filtered(lambda r: r.display_type == "product") + + def get_postfinance_other_reference(self): + """Allows glue module to insert in the
+ + Add to the list ref, object strucutred like this: + + {'type': other reference allowed types, + 'no': the content of desired + } + """ + self.ensure_one() + return [] + + def log_invoice_accepted_by_system(self): + """ """ + self.activity_feedback( + ["ebill_postfinance.mail_activity_dws_error"], + feedback="It worked on a later try", + ) + self.message_post(body=_("Invoice accepted by the Postfinance system")) + self.invoice_export_confirmed = True + + def log_invoice_refused_by_system(self): + """ """ + activity_type = "ebill_postfinance.mail_activity_dws_error" + activity = self.activity_reschedule( + [activity_type], date_deadline=fields.Date.today() + ) + values = {} + if not activity: + message = self.env.ref("ebill_postfinance.rejected_invoice")._render( + values=values + ) + activity = self.activity_schedule( + activity_type, summary="Invoice rejected by Postfinance", note=message + ) diff --git a/ebill_postfinance/models/ebill_payment_contract.py b/ebill_postfinance/models/ebill_payment_contract.py new file mode 100644 index 000000000..70b96ea59 --- /dev/null +++ b/ebill_postfinance/models/ebill_payment_contract.py @@ -0,0 +1,73 @@ +# Copyright 2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class EbillPaymentContract(models.Model): + _inherit = "ebill.payment.contract" + + postfinance_billerid = fields.Char( + string="Contract ID", size=20, help="The PayerID of the customer" + ) + is_postfinance_contract = fields.Boolean( + compute="_compute_is_postfinance_contract", store=False + ) + postfinance_service_id = fields.Many2one( + comodel_name="ebill.postfinance.service", + string="Service", + ondelete="restrict", + ) + is_postfinance_method_on_partner = fields.Boolean( + compute="_compute_is_postfinance_method_on_partner" + ) + payment_type = fields.Selection( + selection=[("qr", "QR"), ("isr", "ISR")], + string="Payment method", + default="qr", + help="Payment type to use for the invoices sent," + " PDF will be generated and attached accordingly.", + ) + + @api.depends("transmit_method_id") + def _compute_is_postfinance_contract(self): + transmit_method = self.env.ref("ebill_postfinance.postfinance_transmit_method") + for record in self: + record.is_postfinance_contract = ( + record.transmit_method_id == transmit_method + ) + + @api.depends("transmit_method_id", "partner_id", "postfinance_service_id") + def _compute_is_postfinance_method_on_partner(self): + transmit_method = self.env.ref("ebill_postfinance.postfinance_transmit_method") + for record in self: + record.is_postfinance_method_on_partner = ( + record.partner_id.customer_invoice_transmit_method_id == transmit_method + ) + + def set_postfinance_method_on_partner(self): + transmit_method = self.env.ref("ebill_postfinance.postfinance_transmit_method") + for record in self: + if record.partner_id: + record.partner_id.customer_invoice_transmit_method_id = transmit_method + + @api.constrains("transmit_method_id", "postfinance_billerid") + def _check_postfinance_biller_id(self): + for contract in self: + if not contract.is_postfinance_contract: + continue + if not contract.postfinance_billerid: + raise ValidationError( + _( + "The Postfinacnce Account ID is required for a Postfinance contract." + ) + ) + + @api.constrains("transmit_method_id", "postfinance_service_id") + def _check_postfinance_service_id(self): + for contract in self: + if contract.is_postfinance_contract and not contract.postfinance_service_id: + raise ValidationError( + _("A Postfinance service is required for a Postfinance contract.") + ) diff --git a/ebill_postfinance/models/ebill_postfinance_invoice_message.py b/ebill_postfinance/models/ebill_postfinance_invoice_message.py new file mode 100644 index 000000000..6129aae79 --- /dev/null +++ b/ebill_postfinance/models/ebill_postfinance_invoice_message.py @@ -0,0 +1,404 @@ +# Copyright 2019-2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +import os +from datetime import datetime + +import pytz +from jinja2 import Environment, FileSystemLoader +from lxml import etree + +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.modules.module import get_module_root + +from odoo.addons.base.models.res_bank import sanitize_account_number + +_logger = logging.getLogger(__name__) + +MODULE_PATH = get_module_root(os.path.dirname(__file__)) +INVOICE_TEMPLATE_2003 = "invoice-2003A.jinja" +INVOICE_TEMPLATE_YB = "invoice-yellowbill.jinja" +TEMPLATE_DIR = [MODULE_PATH + "/messages"] +XML_SCHEMA_YB = MODULE_PATH + "/messages/ybInvoice_V2.0.4.xsd" + +DOCUMENT_TYPE = {"out_invoice": "EFD", "out_refund": "EGS"} + + +class EbillPostfinanceInvoiceMessage(models.Model): + _name = "ebill.postfinance.invoice.message" + _description = "Postfinance message send to service" + + service_id = fields.Many2one( + comodel_name="ebill.postfinance.service", + string="Service used", + required=True, + ondelete="restrict", + readonly=True, + ) + ebill_payment_contract_id = fields.Many2one(comodel_name="ebill.payment.contract") + invoice_id = fields.Many2one(comodel_name="account.move", ondelete="restrict") + transaction_id = fields.Char() + file_type_used = fields.Char() + submitted_on = fields.Datetime(string="Submitted on") + attachment_id = fields.Many2one("ir.attachment", "PDF") + state = fields.Selection( + selection=[ + ("draft", "Draft"), + ("sent", "Sent"), + ("error", "Error"), + ("processing", "Processing"), + ("reject", "Reject"), + ("done", "Done"), + ], + default="draft", + ) + server_state = fields.Selection( + selection=[ + ("invalid", "Invalid"), + ("processing", "Processing"), + ("unsigned", "Unsigned"), + ("open", "Open"), + ("paid", "Paid"), + # Not encountered states + ("rejected", "Rejected"), + ("incomplete", "Incomplete"), + ("deleted", "Deleted"), + ], + ) + server_reason_code = fields.Integer(string="Error code") + server_reason_text = fields.Char(string="Error text") + + # Set with invoice_id.number but also with returned data from server ? + ref = fields.Char("Reference No.", size=35) + ebill_account_number = fields.Char("Payer Id", size=20) + payload = fields.Text("Payload sent") + payload_size = fields.Float("Payload Size (MB)", digits=(6, 3), readonly=True) + response = fields.Text() + payment_type = fields.Selection( + selection=[ + ("iban", "IBAN"), + ("credit", "CREDIT"), + ("other", "OTHER"), + ("dd", "DD"), + ("esr", "ESR"), + ], + default="iban", + readonly=True, + ) + + @api.model + def _get_payload_size(self, payload): + size_in_bytes = len(payload) + if size_in_bytes > 0: + size_in_bytes = size_in_bytes / 1000000 + return size_in_bytes + + def set_transaction_id(self): + self.ensure_one() + self.transaction_id = "-".join( + [ + fields.Datetime.now().strftime("%y%m%d%H%M%S"), + self.invoice_id.name.replace("/", "").replace("_", ""), + ] + ) + + def update_message_from_server_data(self, data): + """Update the invoice message with data received from the server. + + Keyword arguments: + data -- Structure from the api + Example: + { + 'BillerId': '41101000001021209', + 'TransactionId': 'INV_2022_03_0001_2022_03_26_08_31_xml', + 'eBillAccountId': '123412341234', + 'Amount': Decimal('0'), + 'State': 'Invalid', + 'PaymentType': None, + 'ESRReferenceNbr': None, + 'DeliveryDate': datetime.datetime(2022, 3, 26, 0, 0), + 'PaymentDueDate': None, + 'ReasonCode': '16', + 'ReasonText': 'some good reason' + } + """ + self.ensure_one() + self.server_state = data.State.lower() + self.server_reason_code = data.ReasonCode + self.server_reason_text = data.ReasonText + if self.server_state in ["invalid"]: + self.state = "error" + elif self.server_state == "processing": + self.state = "processing" + elif self.server_state == "paid": + self.set_as_paid(data) + + def set_as_paid(self, data): + for record in self: + if record.state != "done": + record.state = "done" + record.invoice_id.message_post(body=_("Invoice paid through eBilling")) + + @api.model + def _remove_pdf_data_from_payload(self, data): + """Minimize payload size to be kept. + + Remove the node containing the pdf data from the xml. + + """ + start_node = "" + end_node = "" + start = data.find(start_node) + if start < 0: + return data + end = data.find(end_node, start) + return data[0:start] + data[end + len(end_node) :] + + def send_to_postfinance(self): + # TODO: Could sent multiple with one call + for message in self: + message.file_type_used = message.service_id.file_type_to_use + message.set_transaction_id() + payload = message._generate_payload() + data = payload.encode("utf-8") + message.payload = self._remove_pdf_data_from_payload(payload) + message.payload_size = self._get_payload_size(payload) + try: + # TODO: Handle file type from service configuation + res = message.service_id.upload_file( + message.transaction_id, message.file_type_used, data + ) + response = res[0] + if response.ProcessingState == "OK": + message.state = "sent" + submit_date_utc = response.SubmitDate.astimezone(pytz.utc) + message.submitted_on = submit_date_utc.replace(tzinfo=None) + message.response = response + else: + message.state = "error" + message.server_reason_code = "NOK" + message.server_reason_text = "Could not be sent to sftp" + except Exception as ex: + message.response = "Exception sending to Postfinance" + message.state = "error" + raise ex + + @staticmethod + def format_date(date_string=None): + """Format a date in the Jinja template.""" + if not date_string: + date_string = datetime.now() + return date_string.strftime("%Y%m%d") + + @staticmethod + def format_date_yb(date_string=None): + """Format a date in the Jinja template.""" + if not date_string: + date_string = datetime.now() + return date_string.strftime("%Y-%m-%d") + + def _get_payload_params(self): + bank_account = "" + if self.payment_type == "iban": + bank_account = sanitize_account_number( + self.invoice_id.partner_bank_id.l10n_ch_qr_iban + or self.invoice_id.partner_bank_id.acc_number + ) + else: + bank_account = self.invoice_id.partner_bank_id.l10n_ch_isr_subscription_chf + if bank_account: + account_parts = bank_account.split("-") + bank_account = ( + account_parts[0] + account_parts[1].rjust(6, "0") + account_parts[2] + ) + else: + bank_account = "" + + params = { + "client_pid": self.service_id.biller_id, + "invoice": self.invoice_id, + "invoice_lines": self.invoice_id.postfinance_invoice_line_ids(), + "biller": self.invoice_id.company_id, + "customer": self.invoice_id.partner_id, + "delivery": self.invoice_id.partner_shipping_id, + "pdf_data": self.attachment_id.datas.decode("ascii"), + "bank": self.invoice_id.partner_bank_id, + "bank_account": bank_account, + "transaction_id": self.transaction_id, + "payment_type": self.payment_type, + "document_type": DOCUMENT_TYPE[self.invoice_id.move_type], + "format_date": self.format_date, + "ebill_account_number": self.ebill_account_number, + "discount_template": "", + "discount": {}, + } + amount_by_group = [] + # Get the percentage of the tax from the name of the group + # Could be improve by searching in the account_tax linked to the group + for taxgroup in self.invoice_id.amount_by_group: + rate = taxgroup[0].split()[-1:][0][:-1] + amount_by_group.append( + ( + rate or "0", + taxgroup[1], + taxgroup[2], + ) + ) + params["amount_by_group"] = amount_by_group + # Get the invoice due date + date_due = None + if self.invoice_id.invoice_payment_term_id: + terms = self.invoice_id.invoice_payment_term_id.compute( + self.invoice_id.amount_total + ) + if terms: + # Returns all payment and their date like [('2020-12-07', 430.37), ...] + # Get the last payment date in the format "202021207" + date_due = terms[-1][0].replace("-", "") + if not date_due: + date_due = self.format_date( + self.invoice_id.invoice_date_due or self.invoice_id.invoice_date + ) + params["date_due"] = date_due + return params + + def _get_payload_params_yb(self): + bank_account = "" + if self.payment_type == "iban": + bank_account = sanitize_account_number( + self.invoice_id.partner_bank_id.l10n_ch_qr_iban + or self.invoice_id.partner_bank_id.acc_number + ) + else: + bank_account = self.invoice_id.partner_bank_id.l10n_ch_isr_subscription_chf + if bank_account: + account_parts = bank_account.split("-") + bank_account = ( + account_parts[0] + account_parts[1].rjust(6, "0") + account_parts[2] + ) + else: + bank_account = "" + + delivery = ( + self.invoice_id.partner_shipping_id + if self.invoice_id.partner_shipping_id != self.invoice_id.partner_id + else False + ) + orders = self.invoice_id.line_ids.sale_line_ids.mapped("order_id") + params = { + "invoice": self.invoice_id, + "saleorder": orders, + "message": self, + "client_pid": self.service_id.biller_id, + "invoice_lines": self.invoice_id.postfinance_invoice_line_ids(), + "biller": self.invoice_id.company_id, + "customer": self.invoice_id.partner_id, + "delivery": delivery, + "pdf_data": self.attachment_id.datas.decode("ascii"), + "bank": self.invoice_id.partner_bank_id, + "bank_account": bank_account, + "transaction_id": self.transaction_id, + "payment_type": self.payment_type, + "amount_sign": -1 if self.payment_type == "credit" else 1, + "document_type": DOCUMENT_TYPE[self.invoice_id.move_type], + "format_date": self.format_date_yb, + "ebill_account_number": self.ebill_account_number, + "discount_template": "", + "discount": {}, + "invoice_line_stock_template": "", + } + amount_by_group = [] + # Get the percentage of the tax from the name of the group + # Could be improve by searching in the account_tax linked to the group + for __, tax_group in self.invoice_id.tax_totals["groups_by_subtotal"].items(): + for taxgroup in tax_group: + rate = taxgroup["tax_group_name"].split()[-1:][0][:-1] + amount_by_group.append( + ( + rate or "0", + taxgroup["tax_group_amount"], + taxgroup["tax_group_base_amount"], + ) + ) + params["amount_by_group"] = amount_by_group + # Get the invoice due date + date_due = None + if self.invoice_id.invoice_payment_term_id: + terms = self.invoice_id.invoice_payment_term_id.compute( + self.invoice_id.amount_total + ) + if terms: + # Get the last payment date + date_due = terms[-1][0] + if not date_due: + date_due = self.format_date_yb( + self.invoice_id.invoice_date_due or self.invoice_id.invoice_date + ) + params["date_due"] = date_due + return params + + def _get_jinja_env(self, template_dir): + jinja_env = Environment( + loader=FileSystemLoader(template_dir), + autoescape=True, + ) + # Force the truncate filter to be exact + jinja_env.policies["truncate.leeway"] = 0 + return jinja_env + + def _get_template(self, jinja_env): + return jinja_env.get_template(INVOICE_TEMPLATE_2003) + + def _get_template_yb(self, jinja_env): + return jinja_env.get_template(INVOICE_TEMPLATE_YB) + + def _generate_payload(self): + self.ensure_one() + assert self.state in ("draft", "error") + if self.service_id.file_type_to_use == "XML": + if self.service_id.use_file_type_xml_paynet: + return self._generate_payload_paynet() + else: + return self._generate_payload_yb() + return + + def _generate_payload_paynet(self): + """Generates the xml in the paynet format.""" + params = self._get_payload_params() + jinja_env = self._get_jinja_env(TEMPLATE_DIR) + jinja_template = self._get_template(jinja_env) + return jinja_template.render(params) + + def _generate_payload_yb(self): + """Generates the xml in the yellowbill format.""" + params = self._get_payload_params_yb() + jinja_env = self._get_jinja_env(TEMPLATE_DIR) + jinja_template = self._get_template_yb(jinja_env) + return jinja_template.render(params) + + def validate_xml_payload(self): + """Check the validity of yellowbill xml.""" + schema = etree.XMLSchema(file=XML_SCHEMA_YB) + parser = etree.XMLParser(schema=schema) + try: + etree.fromstring(self.payload.encode("utf-8"), parser) + except etree.XMLSyntaxError as ex: + raise UserError(ex.error_log) from ex + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": _("The payload is valid."), + "sticky": False, + }, + } + + def update_invoice_status(self): + """Update the export status in the chatter.""" + for message in self: + if message.state == "done": + message.invoice_id.log_invoice_accepted_by_system() + elif message.state in ["reject", "error"]: + message.invoice_id.log_invoice_refused_by_system() diff --git a/ebill_postfinance/models/ebill_postfinance_service.py b/ebill_postfinance/models/ebill_postfinance_service.py new file mode 100644 index 000000000..de048f72b --- /dev/null +++ b/ebill_postfinance/models/ebill_postfinance_service.py @@ -0,0 +1,154 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging +import logging.config + +from ebilling_postfinance import ebilling_postfinance + +from odoo import api, fields, models +from odoo.exceptions import UserError + +_logger = logging.getLogger(__name__) + + +class EbillPostfinanceService(models.Model): + _name = "ebill.postfinance.service" + _description = "Postfinance eBill service configuration" + + name = fields.Char(required=True) + username = fields.Char() + password = fields.Char() + biller_id = fields.Char(string="Biller ID", size=17, required=True) + use_test_service = fields.Boolean(string="Testing", help="Target the test service") + partner_bank_id = fields.Many2one( + comodel_name="res.partner.bank", string="Bank account", ondelete="restrict" + ) + invoice_message_ids = fields.One2many( + comodel_name="ebill.postfinance.invoice.message", + inverse_name="service_id", + string="Invoice Messages", + readonly=True, + ) + ebill_payment_contract_ids = fields.One2many( + comodel_name="ebill.payment.contract", + inverse_name="postfinance_service_id", + string="Contracts", + readonly=True, + ) + active = fields.Boolean(default=True) + file_type_to_use = fields.Selection( + string="Invoice Format", + default="XML", + required=True, + selection=[ + ("XML", "XML Yellow Bill"), + ("EAI.XML", "Custom XML (SAPiDoc)"), + # ("eai.edi", "Custom EDIFACT"), + ("struct.pdf", "Factur X"), + ], + ) + use_file_type_xml_paynet = fields.Boolean( + string="Use Paynet/SIX format", + help="Enable use of legacy SIX/Paynet invoice format.", + ) + operation_timeout = fields.Integer( + string="HTTP Timeout", + default="600", + help="Timeout for each HTTP (GET, POST) request in seconds.", + ) + + def _get_service(self): + return ebilling_postfinance.WebService( + self.use_test_service, + self.username, + self.password, + self.biller_id, + self.operation_timeout, + ) + + def test_ping(self): + """Test the service from the UI.""" + self.ensure_one() + msg = ["Test connection to service"] + res = self.ping_service() + if res: + msg.append("Success pinging service \n Receive :{}".format(res)) + else: + msg.append(" - Failed pinging service") + raise UserError("\n".join(msg)) + + def ping_service(self, test_error=False, test_exception=False): + """Ping the service, uses the authentication. + + test_error: will create an unhandled error in the repsonse + test_exception: will create a FaultException + + """ + service = self._get_service() + return service.ping() + + def search_invoice(self, transaction_id=None): + """Get invoice status from the server. + + transaction_id: + """ + service = self._get_service() + res = service.search_invoices(transaction_id) + if res.InvoiceCount == 0: + _logger.info("Search invoice returned no invoice") + return res + if res.InvoiceCount < res.TotalInvoiceCount: + # TODO handle the case where there is more to download ? + _logger.info("Search invoice has more to download") + for message in res.InvoiceList.SearchInvoice: + _logger.info(f"Found record for message {message}") + record = self.invoice_message_ids.search( + [("transaction_id", "=", message.TransactionId)], + limit=1, + order="create_date desc", + ) + if record: + record.update_message_from_server_data(message) + else: + _logger.warning(f"Could not find record for message {message}") + return res + + def upload_file(self, transaction_id, file_type, data): + service = self._get_service() + res = service.upload_files(transaction_id, file_type, data) + return res + + def get_invoice_list(self, archive_data=False): + service = self._get_service() + res = service.get_invoice_list(archive_data) + return res + + def get_process_protocol_list(self, archive_data=False): + # Is this the processing result of an invoice ? + service = self._get_service() + res = service.get_process_protocol_list(archive_data) + return res + + def get_ebill_recipient_subscription_status(self, recipient_id): + service = self._get_service() + res = service.get_ebill_recipient_subscription_status(recipient_id) + return res + + def get_registration_protocol_list(self, archive_data=False): + service = self._get_service() + res = service.get_registration_protocol_list(archive_data) + for registration_protocol in res or {}: + self.get_registration_protocol(registration_protocol.CreateDate) + return res + + def get_registration_protocol(self, create_date, archive_data=False): + service = self._get_service() + res = service.get_registration_protocol(create_date, archive_data) + return res + + @api.model + def cron_update_invoices(self): + services = self.search([]) + for service in services: + service.search_invoice() diff --git a/ebill_postfinance/models/sale_order.py b/ebill_postfinance/models/sale_order.py new file mode 100644 index 000000000..4e537d1fc --- /dev/null +++ b/ebill_postfinance/models/sale_order.py @@ -0,0 +1,19 @@ +# Copyright 2021 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + + _inherit = "sale.order" + + postfinance_ebill_client_order_ref = fields.Char( + compute="_compute_postfinance_ebill_client_order_ref" + ) + + @api.depends("client_order_ref") + def _compute_postfinance_ebill_client_order_ref(self): + """Compute the customer reference order to allow for glue module.""" + for order in self: + order.postfinance_ebill_client_order_ref = order.client_order_ref diff --git a/ebill_postfinance/readme/CONFIGURE.rst b/ebill_postfinance/readme/CONFIGURE.rst new file mode 100644 index 000000000..69c4aff94 --- /dev/null +++ b/ebill_postfinance/readme/CONFIGURE.rst @@ -0,0 +1,13 @@ +Create a service +================ + +First you need to be registred on 'Postfinance eBill service ' +To create a service go to `Accounting - Configuration - Payments - Postfinance eBill Service` + +Configure a customer and create his contract +============================================ + +The contracts specific to Postfinance e-billing are located in `Accounting - Customers - eBill Postfinance Contract` +Create a contract for a customer with his PayerId and make sure that the contract is active by being in `Open` state with valid start/end dates. + +Set `Customer Invoice Transmission Method` on the customer to Postfinance. diff --git a/ebill_postfinance/readme/CONTRIBUTORS.rst b/ebill_postfinance/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0dd376fae --- /dev/null +++ b/ebill_postfinance/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Thierry Ducrest diff --git a/ebill_postfinance/readme/DESCRIPTION.rst b/ebill_postfinance/readme/DESCRIPTION.rst new file mode 100644 index 000000000..23359b87f --- /dev/null +++ b/ebill_postfinance/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module implements the exchange of electronic invoices with the Postfinance web service. diff --git a/ebill_postfinance/readme/INSTALL.rst b/ebill_postfinance/readme/INSTALL.rst new file mode 100644 index 000000000..2116848ca --- /dev/null +++ b/ebill_postfinance/readme/INSTALL.rst @@ -0,0 +1,2 @@ +This module needs the Python library `ebilling_postfiance` which can be installed from Pypi. +More information can be found at ``_. diff --git a/ebill_postfinance/readme/ROADMAP.rst b/ebill_postfinance/readme/ROADMAP.rst new file mode 100644 index 000000000..869ba4dd4 --- /dev/null +++ b/ebill_postfinance/readme/ROADMAP.rst @@ -0,0 +1,10 @@ +ToDo + +* Add option to import the contract subscription (csv) +* Add the download of this csv from web service, but what is the endpoint ? + + +Nice to have + +* Add a link to the failed job in the chatter message. +* Add an action on partner to create a ebilling contract. diff --git a/ebill_postfinance/readme/USAGE.rst b/ebill_postfinance/readme/USAGE.rst new file mode 100644 index 000000000..3418a105f --- /dev/null +++ b/ebill_postfinance/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +#. Configure the service, customers and contracts as described in the CONFIGURATION section. +#. Create an invoice for a customer with an open Postfinance contract. +#. Validate the invoice, and click the Send eBill button. diff --git a/ebill_postfinance/security/ir.model.access.csv b/ebill_postfinance/security/ir.model.access.csv new file mode 100644 index 000000000..8e235cfc3 --- /dev/null +++ b/ebill_postfinance/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_ebill_postfinance_service_user,access.ebill.postfinance.service.user,model_ebill_postfinance_service,base.group_user,1,0,0,0 +access_ebill_postfinance_service_manager,access.postfinance.service.manager,model_ebill_postfinance_service,account.group_account_manager,1,1,1,1 +access_ebill_postfinance_invoice_message_user,access.ebill.postfinance.invoice.message.user,model_ebill_postfinance_invoice_message,base.group_user,1,0,0,0 +access_ebill_postfinance_invoice_message_manager,access.ebill.postfinance.invoice.message.manager,model_ebill_postfinance_invoice_message,account.group_account_manager,1,1,1,1 diff --git a/ebill_postfinance/static/description/icon.png b/ebill_postfinance/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/ebill_postfinance/static/description/icon.png differ diff --git a/ebill_postfinance/static/description/index.html b/ebill_postfinance/static/description/index.html new file mode 100644 index 000000000..b70067dd2 --- /dev/null +++ b/ebill_postfinance/static/description/index.html @@ -0,0 +1,470 @@ + + + + + + +eBill Postfinance + + + +
+

eBill Postfinance

+ + +

Beta License: AGPL-3 OCA/l10n-switzerland Translate me on Weblate Try me on Runboat

+

This module implements the exchange of electronic invoices with the Postfinance web service.

+

Table of contents

+ +
+

Installation

+

This module needs the Python library ebilling_postfiance which can be installed from Pypi. +More information can be found at repositoryhttps://github.com/camptocamp/ebilling-postfinance.

+
+ +
+

Create a service

+

First you need to be registred on ‘Postfinance eBill service <https://www.postfinance.ch/en/business/products/accounts-receivable-solutions/e-bill-invoice-issuer.html>’ +To create a service go to Accounting - Configuration - Payments - Postfinance eBill Service

+
+
+

Configure a customer and create his contract

+

The contracts specific to Postfinance e-billing are located in Accounting - Customers - eBill Postfinance Contract +Create a contract for a customer with his PayerId and make sure that the contract is active by being in Open state with valid start/end dates.

+

Set Customer Invoice Transmission Method on the customer to Postfinance.

+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Configure the service, customers and contracts as described in the CONFIGURATION section.
  2. +
  3. Create an invoice for a customer with an open Postfinance contract.
  4. +
  5. Validate the invoice, and click the Send eBill button.
  6. +
+
+
+

Known issues / Roadmap

+

ToDo

+
    +
  • Add option to import the contract subscription (csv)
  • +
  • Add the download of this csv from web service, but what is the endpoint ?
  • +
+

Nice to have

+
    +
  • Add a link to the failed job in the chatter message.
  • +
  • Add an action on partner to create a ebilling contract.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

TDu

+

This module is part of the OCA/l10n-switzerland project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/ebill_postfinance/tests/__init__.py b/ebill_postfinance/tests/__init__.py new file mode 100644 index 000000000..6b1397c97 --- /dev/null +++ b/ebill_postfinance/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_ebill_postfinance +from . import test_ebill_postfinance_message_yb +from . import test_ebill_postfinance_message_yb_creditnote diff --git a/ebill_postfinance/tests/common.py b/ebill_postfinance/tests/common.py new file mode 100644 index 000000000..6496d442e --- /dev/null +++ b/ebill_postfinance/tests/common.py @@ -0,0 +1,194 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +import logging +import os +from os.path import dirname, join + +from vcr import VCR +from xmlunittest import XmlTestMixin + +from odoo.tests.common import TransactionCase + +_logger = logging.getLogger(__name__) + + +class CommonCase(TransactionCase, XmlTestMixin): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.service = cls.env["ebill.postfinance.service"].create( + { + "name": "Postfinance Test Service", + "use_test_service": True, + "biller_id": os.getenv("BILLER_ID", "41101000001021209"), + "username": os.getenv("POSTFINANCE_USER", "user"), + "password": os.getenv("POSTFINANCE_PWD", "pwd"), + } + ) + cls.country = cls.env.ref("base.ch") + cls.company = cls.env.ref("l10n_ch.demo_company_ch") + cls.env.user.company_id = cls.company + cls.company.vat = "CHE-012.345.678" + cls.company.name = "Camptocamp SA" + cls.company.street = "StreetOne" + cls.company.street2 = "" + cls.company.zip = "1015" + cls.company.city = "Lausanne" + cls.company.partner_id.country_id = cls.country + cls.company.email = "info@camptocamp.com" + cls.company.phone = "" + cls.bank = cls.env.ref("base.res_bank_1") + cls.bank.bic = 777 + cls.tax7 = cls.env.ref("l10n_ch.{}_vat_77".format(cls.company.id)) + cls.partner_bank = cls.env["res.partner.bank"].create( + { + "bank_id": cls.bank.id, + "acc_number": "CH04 8914 4618 6435 6132 2", + "acc_holder_name": "AccountHolderName", + "partner_id": cls.company.partner_id.id, + "l10n_ch_qr_iban": "CH2130808001234567827", + } + ) + cls.terms = cls.env.ref("account.account_payment_term_15days") + cls.state = cls.env["res.country.state"].create( + {"code": "RR", "name": "Fribourg", "country_id": cls.country.id} + ) + cls.customer = cls.env["res.partner"].create( + { + "name": "Test RAD Customer XML", + "customer_rank": 1, + "is_company": True, + "street": "Teststrasse 100", + "street2": "This is a very long street name that should be snapped", + "city": "Fribourg", + "zip": "1700", + "country_id": cls.country.id, + "state_id": cls.state.id, + } + ) + cls.customer_delivery = cls.env["res.partner"].create( + { + "name": "The Shed in the yard", + "street": "Teststrasse 102", + "city": "Fribourg", + "zip": "1700", + "parent_id": cls.customer.id, + "type": "delivery", + } + ) + cls.contract = cls.env["ebill.payment.contract"].create( + { + "partner_id": cls.customer.id, + "postfinance_billerid": "41010198248040391", + "state": "open", + "postfinance_service_id": cls.service.id, + } + ) + cls.account = cls.env["account.account"].search( + [("account_type", "=", "asset_receivable")], + limit=1, + ) + cls.product = cls.env["product.product"].create( + {"name": "Product Q & A", "list_price": 100.00, "default_code": "370003021"} + ) + cls.product_long_name = cls.env["product.product"].create( + { + "name": "Product With a Very Long Name That Need To Be Truncated", + "list_price": 0.00, + "default_code": "370003022", + } + ) + cls.product.product_tmpl_id.invoice_policy = "order" + cls.product_long_name.product_tmpl_id.invoice_policy = "order" + cls.sale = cls.env["sale.order"].create( + { + "name": "Order123", + "partner_id": cls.customer.id, + "partner_shipping_id": cls.customer_delivery.id, + "client_order_ref": "CustomerRef", + "order_line": [ + ( + 0, + 0, + { + "product_id": cls.product.id, + "name": cls.product.name, + "product_uom_qty": 4.0, + "price_unit": 123.0, + "tax_id": [(4, cls.tax7.id, 0)], + }, + ), + ( + 0, + 0, + { + "product_id": cls.product_long_name.id, + "name": cls.product_long_name.name, + "product_uom_qty": 1.0, + "price_unit": 0.0, + "tax_id": [(4, cls.tax7.id, 0)], + }, + ), + ], + } + ) + cls.sale.action_confirm() + cls.sale.date_order = "2019-06-01" + # Generate the invoice from the sale order + cls.invoice = cls.sale._create_invoices() + # And add some more lines on the invoice + # One UX line and one not linked to a product and without VAT + cls.invoice.update( + { + "line_ids": [ + (0, 0, {"name": "A little note", "display_type": "line_note"}), + ( + 0, + 0, + { + "name": "Phone support", + "quantity": 4.0, + "price_unit": 0, + # Force not tax on this line, for testing purpose + "tax_ids": [(5, 0, 0)], + }, + ), + ], + } + ) + cls.invoice.payment_reference = "210000000003139471430009017" + cls.invoice.partner_bank_id = cls.partner_bank.id + + @staticmethod + def compare_xml_line_by_line(content, expected): + """This a quick way to check the diff line by line to ease debugging""" + generated_line = [i.strip() for i in content.split(b"\n") if len(i.strip())] + expected_line = [i.strip() for i in expected.split(b"\n") if len(i.strip())] + number_of_lines = len(expected_line) + for i in range(number_of_lines): + if generated_line[i].strip() != expected_line[i].strip(): + return "Diff at {}/{} || Expected {} || Generated {}".format( + i, + number_of_lines, + expected_line[i], + generated_line[i], + ) + + +def get_recorder(base_path=None, **kw): + base_path = base_path or dirname(__file__) + defaults = dict( + record_mode="once", + cassette_library_dir=join(base_path, "fixtures/cassettes"), + path_transformer=VCR.ensure_suffix(".yaml"), + match_on=["method", "path", "query"], + filter_headers=["Authorization"], + decode_compressed_response=True, + ) + defaults.update(kw) + return VCR(**defaults) + + +recorder = get_recorder() diff --git a/ebill_postfinance/tests/examples/credit_note_yb.xml b/ebill_postfinance/tests/examples/credit_note_yb.xml new file mode 100644 index 000000000..336e65450 --- /dev/null +++ b/ebill_postfinance/tests/examples/credit_note_yb.xml @@ -0,0 +1,176 @@ + + +
+ Camptocamp SA + IPECeBILLServer + CreateybInvoice + 1 + 2.0 + 0 + Odoo + 14.0 +
+ + + 41101000001021209 + 41010198248040391 + 2019-06-21 + $TRANSACTION_ID + PDFAppendix + + + +
+ CREDITADVICE + INV_TEST_01 + 2019-06-21 + + VAT + +
+ Camptocamp SA + StreetOne + 1015 + Lausanne + CH + info@camptocamp.com +
+ CHE012345678 +
+
+ + + $CUSTOMER_ID +
+ Test RAD Customer XML + Teststrasse 100 + This is a very long street name that should be sna + 1700 + Fribourg + CH +
+ +
+
+ +
+ Test RAD Customer XML + 1700 + Fribourg + CH + +
+
+ + 2019-06-21 + 2019-06-21 + + CHF + + + 1 + OrderReference + CustomerRef + + 2019-06-01 + + en + + 2019-07-01 + CREDIT + Yes + + +
+ + + NORMAL + 1 + Product Q & A + 370003021 + 4.0 + Units + 1 + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 529.88 + 492.0 + + 2 + OrderNumberBySupplier + Order123 + + + 3 + OrderNumberByBuyer + CustomerRef + + + + NORMAL + 2 + Product With a Very Long Name That Need To Be Truncated + 370003022 + 1.0 + Units + 1 + + + 7.7 + 0.0 + 0.0 + 0.0 + + 0.0 + + 0.0 + 0.0 + + 4 + OrderNumberBySupplier + Order123 + + + 5 + OrderNumberByBuyer + CustomerRef + + + + NORMAL + 3 + Phone support + 4.0 + PCE + 1 + 0.0 + 0.0 + + + + + + 7.7 + -37.88 + -492.0 + -529.88 + + 37.88 + + -492.0 + -529.88 + + -529.88 + +
+ + + +
diff --git a/ebill_postfinance/tests/examples/invoice_qr_yb.xml b/ebill_postfinance/tests/examples/invoice_qr_yb.xml new file mode 100644 index 000000000..1cecb7257 --- /dev/null +++ b/ebill_postfinance/tests/examples/invoice_qr_yb.xml @@ -0,0 +1,182 @@ + + +
+ Camptocamp SA + IPECeBILLServer + CreateybInvoice + 1 + 2.0 + 0 + Odoo + 14.0 +
+ + + 41101000001021209 + 41010198248040391 + 2019-06-21 + $TRANSACTION_ID + PDFAppendix + + + +
+ BILL + INV_TEST_01 + 2019-06-21 + + VAT + +
+ Camptocamp SA + StreetOne + 1015 + Lausanne + CH + info@camptocamp.com +
+ CHE012345678 +
+
+ + + $CUSTOMER_ID +
+ Test RAD Customer XML + Teststrasse 100 + This is a very long street name that should be sna + 1700 + Fribourg + CH +
+ +
+
+ +
+ Test RAD Customer XML + 1700 + Fribourg + CH + +
+
+ + 2019-06-21 + 2019-06-21 + + CHF + + + 1 + OrderReference + CustomerRef + + 2019-06-01 + + en + + 2019-07-01 + IBAN + Yes + + 777 + Reserve + CH2130808001234567827 + 210000000003139471430009017 + + + +
+ + + NORMAL + 1 + Product Q & A + 370003021 + 4.0 + Units + 1 + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 529.88 + 492.0 + + 2 + OrderNumberBySupplier + Order123 + + + 3 + OrderNumberByBuyer + CustomerRef + + + + NORMAL + 2 + Product With a Very Long Name That Need To Be Truncated + 370003022 + 1.0 + Units + 1 + + + 7.7 + 0.0 + 0.0 + 0.0 + + 0.0 + + 0.0 + 0.0 + + 4 + OrderNumberBySupplier + Order123 + + + 5 + OrderNumberByBuyer + CustomerRef + + + + NORMAL + 3 + Phone support + 4.0 + PCE + 1 + 0.0 + 0.0 + + + + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 492.0 + 529.88 + + 529.88 + +
+ + + +
diff --git a/ebill_postfinance/tests/examples/yellowbill_qr_iban.xml b/ebill_postfinance/tests/examples/yellowbill_qr_iban.xml new file mode 100644 index 000000000..4ca2ed819 --- /dev/null +++ b/ebill_postfinance/tests/examples/yellowbill_qr_iban.xml @@ -0,0 +1,178 @@ + + +
+ Camptocamp SA + IPECeBILLServer + CreateybInvoice + 1 + 2.0 + 0 + Odoo + 14.0 +
+ + + 41101000001021209 + 41010198248040391 + 2019-06-21 + $TRANSACTION_ID + PDFAppendix + + + +
+ BILL + INV_TEST_01 + 2019-06-21 + + VAT + +
+ Camptocamp SA + StreetOne + 1015 + Lausanne + CH + info@camptocamp.com +
+ CHE012345678 +
+
+ + + $CUSTOMER_ID +
+ Test RAD Customer XML + Teststrasse 100 + This is a very long street name that should be sna + 1700 + Fribourg + CH +
+ +
+
+ +
+ Test RAD Customer XML + 1700 + Fribourg + CH + +
+
+ + 2019-06-21 + 2019-06-21 + + CHF + + + + + + + + + + + + + + en + + 2019-07-01 + IBAN + Yes + + CH2130808001234567827 + + + + +
+ + + NORMAL + 1 + Product Q & A + 4.0 + Units + 370003021 + 1 + 492.0 + 529.88 + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 492.0 + 529.88 + + + NORMAL + 2 + Product With a Very Long Name That Need To Be Truncated + 1.0 + Units + 370003022 + 1 + 0.0 + 0.0 + + + 7.7 + 0.0 + 0.0 + 0.0 + + 0.0 + + 0.0 + 0.0 + + + NORMAL + 3 + Phone support + 4.0 + PCE + 1 + 0.0 + 0.0 + 0.0 + 0.0 + + + + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 492.0 + 529.88 + + + +
+ + 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MS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iCiAgICAgICAgICAgIHhtbG5zOnBkZng9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmeC8xLjMvIj4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMjAtMDYtMjRUMDk6MjI6MjArMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMC0wNi0yNFQwOToyMjoxOSswMjowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjAtMDYtMjRUMDk6MjI6MjArMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWNyb2JhdCBQREZNYWtlciAyMCBmw7xyIFdvcmQ8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+dXVpZDpjNGUwYThiZi05NTI1LTQ3ZjAtYjE3Ni1mMDQxNTVjY2RlNzI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnV1aWQ6MWRmYjc1M2YtYTUwYi00OTA2LTgzZTgtYTJiMjhkZGI3OWM3PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+MzwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06c3ViamVjdD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgICAgPGRjOmRlc2NyaXB0aW9uPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzpkZXNjcmlwdGlvbj4KICAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPlJlaWNobXV0aCBNaWNoYWVsLCBJMzY0PC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgICA8cGRmOlByb2R1Y2VyPkFkb2JlIFBERiBMaWJyYXJ5IDIwLjYuNjY8L3BkZjpQcm9kdWNlcj4KICAgICAgICAgPHBkZjpLZXl3b3Jkcy8+CiAgICAgICAgIDxwZGZ4OlNvdXJjZU1vZGlmaWVkPkQ6MjAyMDA2MjMwNzEyMzQ8L3BkZng6U291cmNlTW9kaWZpZWQ+CiAgICAgICAgIDxwZGZ4OkNvbXBhbnk+UE9TVCBDSCBBRzwvcGRmeDpDb21wYW55PgogICAgICAgICA8cGRmeDpDb21tZW50cy8+CiAgICAgICAgIDxwZGZ4OkxvZ29NYXJrZT5GPC9wZGZ4OkxvZ29NYXJrZT4KICAgICAgICAgPHBkZng6TG9nb1NwcmFjaGUvPgogICAgICAgICA8cGRmeDpMb2dvQWN0dWFsPkZYUkcxTlg1VF8yMDE3PC9wZGZ4OkxvZ29BY3R1YWw+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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wNDcvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNiA5MS4xNjM2MTYsIDIwMTgvMTAvMjktMTY6NTg6NDkgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIgogICAgICAgICAgICB4bWxuczpwZGZ4PSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZngvMS4zLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDIwLTA2LTI0VDA5OjMzOjA0KzAyOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMjAtMDYtMjRUMDk6MzM6MDMrMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDIwLTA2LTI0VDA5OjMzOjA0KzAyOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFjcm9iYXQgUERGTWFrZXIgMjAgZsO8ciBXb3JkPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6MjhkNTUyNmYtY2RlOS00ODdkLWEyM2QtNTRhZDgyY2UyYzc1PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOmZmYmI0ZGZhLWEyYWMtNDgyYy1iZmY3LThjODFhMjg2NzdlMDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPjI8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOnN1YmplY3Q+CiAgICAgICAgIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxkYzp0aXRsZT4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCIvPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDxkYzpkZXNjcmlwdGlvbj4KICAgICAgICAgICAgPHJkZjpBbHQ+CiAgICAgICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCIvPgogICAgICAgICAgICA8L3JkZjpBbHQ+CiAgICAgICAgIDwvZGM6ZGVzY3JpcHRpb24+CiAgICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaT5SZWljaG11dGggTWljaGFlbCwgSTM2NDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BZG9iZSBQREYgTGlicmFyeSAyMC42LjY2PC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDxwZGY6S2V5d29yZHMvPgogICAgICAgICA8cGRmeDpTb3VyY2VNb2RpZmllZD5EOjIwMjAwNjI0MDczMjQyPC9wZGZ4OlNvdXJjZU1vZGlmaWVkPgogICAgICAgICA8cGRmeDpDb21wYW55PlBPU1QgQ0ggQUc8L3BkZng6Q29tcGFueT4KICAgICAgICAgPHBkZng6Q29tbWVudHMvPgogICAgICAgICA8cGRmeDpMb2dvTWFya2U+UDwvcGRmeDpMb2dvTWFya2U+CiAgICAgICAgIDxwZGZ4OkxvZ29TcHJhY2hlPkQ8L3BkZng6TG9nb1NwcmFjaGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMyAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNS9MZW5ndGggNTAvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeMjRSMFCwsdF3zi/NK1Ew1PfOTCmONjQDCgbF6odUFqTqBySmpxbb2QEEGADnMAvcDQplbmRzdHJlYW0NZW5kb2JqDTQgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDIzMy9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN5szk1Lw0AQBuC/MrduUJp1N0SUUggNfmCDwRY8bzZTs7bJlHGD5L97cKoiHry9M7zMMxcWNCwWaTHGjlg9YfBdLxkqCQ4P53Bv8yxJV9T3OMQ39RWPbphU/bjZwuoOilvZMboYaChdRFVeG220zk2mr6zV9kybmdazn5YohWdqXIS6vKncHhmMht0HwzNxm6QPOL1LOFFreqHK8R5V/T1sjux8J0SSVtT+p2W/Ws3Ujh6Fa6nBEwbr0LDjSbx5Ps/zJN3QyB7lVNgFbP/eurQmM1IYm1f0UX7ZhnhAlSyXnwIMAC3ZXAYNCmVuZHN0cmVhbQ1lbmRvYmoNNSAwIG9iag08PC9EZWNvZGVQYXJtczw8L0NvbHVtbnMgNC9QcmVkaWN0b3IgMTI+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvSURbPDYzNTE5RkQzM0ZEMDZDNDk4MUI5MUEzRjk5QjNGRENCPjw4QzQ2OTA2MjlGODVGNzQwQTA2ODg5RkRFQkYzNUJGNj5dL0luZm8gMTMgMCBSL0xlbmd0aCA0OS9Sb290IDE1IDAgUi9TaXplIDE0L1R5cGUvWFJlZi9XWzEgMiAxXT4+c3RyZWFtDQpo3mJiAAImxoRHDEwMTFVAQkAGSDD2gQg3oETPViCLgYERB8H0G0gwMgAEGADS9gUjDQplbmRzdHJlYW0NZW5kb2JqDXN0YXJ0eHJlZg0KMTE2DQolJUVPRg0K + + +
diff --git a/ebill_postfinance/tests/fixtures/cassettes/test_ping_service.yaml b/ebill_postfinance/tests/fixtures/cassettes/test_ping_service.yaml new file mode 100644 index 000000000..6beed7590 --- /dev/null +++ b/ebill_postfinance/tests/fixtures/cassettes/test_ping_service.yaml @@ -0,0 +1,1057 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd0 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Thu, 28 Apr 2022 08:07:23 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Set-Cookie: + - ittrksessid=f987ef88.5ddb26a77620d;HttpOnly;Secure; path=/; domain=.postfinance.ch; + SameSite=None; Secure; HttpOnly + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmpLOwk0afa9fSTFW995MwAACAM + X-Xss-Protection: + - 1; mode=block + content-length: + - '9632' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=f987ef88.5ddb26a77620d + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd2 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Thu, 28 Apr 2022 08:07:23 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmpLPDXqfedFMKlAc9KKIwAABRA + X-Xss-Protection: + - 1; mode=block + content-length: + - '10710' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=f987ef88.5ddb26a77620d + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd3 + response: + body: + string: 12356795012 + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Thu, 28 Apr 2022 08:07:24 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmpLPLh5lqesNG__KmPS1QAABwc + X-Xss-Protection: + - 1; mode=block + content-length: + - '3068' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=f987ef88.5ddb26a77620d + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd1 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Thu, 28 Apr 2022 08:07:24 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmpLPQk0afa9fSTFW995NAAACAQ + X-Xss-Protection: + - 1; mode=block + content-length: + - '2273' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=f987ef88.5ddb26a77620d + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd4 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Thu, 28 Apr 2022 08:07:25 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmpLPUjLVddjjTR3jj3aywAABhg + X-Xss-Protection: + - 1; mode=block + content-length: + - '534' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd0 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 29 Apr 2022 08:02:35 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Set-Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a;HttpOnly;Secure; path=/; domain=.postfinance.ch; + SameSite=None; Secure; HttpOnly + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnH-W-KPXfyRJfGf9QgAABgs + X-Xss-Protection: + - 1; mode=block + content-length: + - '9632' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd2 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 29 Apr 2022 08:02:36 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnEfRF6duesQ9A1fmKgAABwg + X-Xss-Protection: + - 1; mode=block + content-length: + - '10710' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd3 + response: + body: + string: 12356795012 + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 29 Apr 2022 08:02:36 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnXpSAfll-abirzswkwAACAs + X-Xss-Protection: + - 1; mode=block + content-length: + - '3068' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd1 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 29 Apr 2022 08:02:37 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnUfRF6duesQ9A1fmKwAABwk + X-Xss-Protection: + - 1; mode=block + content-length: + - '2273' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd4 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 29 Apr 2022 08:02:37 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnnpSAfll-abirzswlAAACA8 + X-Xss-Protection: + - 1; mode=block + content-length: + - '534' + status: + code: 200 + message: OK +- request: + body: "\nhttp://ch.swisspost.ebill.b2bservice/B2BService/ExecutePingurn:uuid:e1116f5e-22a4-443c-9c56-3475d3fb0d1chttps://ebill-ki.postfinance.ch/B2BService/B2BService.svcyb1021209\xA3cAmp\xA333995541101000001021209falsefalse" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1139' + Content-Type: + - application/soap+xml; charset=utf-8; action="http://ch.swisspost.ebill.b2bservice/B2BService/ExecutePing" + Cookie: + - ittrksessid=c3834b28.5ddc6772b3d0a + SOAPAction: + - '"http://ch.swisspost.ebill.b2bservice/B2BService/ExecutePing"' + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: POST + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc + response: + body: + string: http://ch.swisspost.ebill.b2bservice/B2BService/ExecutePingResponse00000000-0000-0000-0000-000000000000urn:uuid:e1116f5e-22a4-443c-9c56-3475d3fb0d1c2022-04-29T08:02:38.998Z2022-04-29T08:07:38.998Z41101000001021209 + headers: + Connection: + - close + Content-Length: + - '1031' + Content-Type: + - application/soap+xml; charset=utf-8 + Date: + - Fri, 29 Apr 2022 08:02:38 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - YmubnkfRF6duesQ9A1fmLAAABwI + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/ebill_postfinance/tests/fixtures/cassettes/test_search_invoices.yaml b/ebill_postfinance/tests/fixtures/cassettes/test_search_invoices.yaml new file mode 100644 index 000000000..a5c987a0f --- /dev/null +++ b/ebill_postfinance/tests/fixtures/cassettes/test_search_invoices.yaml @@ -0,0 +1,564 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd0 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 05:57:53 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Set-Cookie: + - ittrksessid=b8278c09.5dede5af62f48;HttpOnly;Secure; path=/; domain=.postfinance.ch; + SameSite=None; Secure; HttpOnly + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zYS25lnOenWMr5onEaAAABwg + X-Xss-Protection: + - 1; mode=block + content-length: + - '9632' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=b8278c09.5dede5af62f48 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd2 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 05:57:53 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zYusdGrL3swMNpDRV7AAACBg + X-Xss-Protection: + - 1; mode=block + content-length: + - '10710' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=b8278c09.5dede5af62f48 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd3 + response: + body: + string: 12356795012 + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 05:57:54 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zYhFe1qhLp6voSVLKEwAACRU + X-Xss-Protection: + - 1; mode=block + content-length: + - '3068' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=b8278c09.5dede5af62f48 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd1 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 05:57:54 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zY-sdGrL3swMNpDRV7QAACAw + X-Xss-Protection: + - 1; mode=block + content-length: + - '2273' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=b8278c09.5dede5af62f48 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd4 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 05:57:55 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zYy25lnOenWMr5onEaQAABxY + X-Xss-Protection: + - 1; mode=block + content-length: + - '534' + status: + code: 200 + message: OK +- request: + body: "\nhttp://ch.swisspost.ebill.b2bservice/B2BService/SearchInvoicesurn:uuid:702a1145-d198-4922-bce3-fd1101657330https://ebill-ki.postfinance.ch/B2BService/B2BService.svcyb1021209\xA3cAmp\xA333995541101000001021209test-transaction-123" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1174' + Content-Type: + - application/soap+xml; charset=utf-8; action="http://ch.swisspost.ebill.b2bservice/B2BService/SearchInvoices" + Cookie: + - ittrksessid=b8278c09.5dede5af62f48 + SOAPAction: + - '"http://ch.swisspost.ebill.b2bservice/B2BService/SearchInvoices"' + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: POST + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc + response: + body: + string: http://ch.swisspost.ebill.b2bservice/B2BService/SearchInvoicesResponse00000000-0000-0000-0000-000000000000urn:uuid:702a1145-d198-4922-bce3-fd11016573302022-05-13T05:57:56.570Z2022-05-13T06:02:56.570Z1141101000001021209test-transaction-12341100000259278521340Invalid2022-05-13T07:32:04.3809TransactionID in + file name (test-transaction-123) and XML (QR-IBAN) not equal + headers: + Connection: + - close + Content-Length: + - '1737' + Content-Type: + - application/soap+xml; charset=utf-8 + Date: + - Fri, 13 May 2022 05:57:55 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3zZBFe1qhLp6voSVLKFAAACRM + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/ebill_postfinance/tests/fixtures/cassettes/test_upload_file.yaml b/ebill_postfinance/tests/fixtures/cassettes/test_upload_file.yaml new file mode 100644 index 000000000..c6bf47038 --- /dev/null +++ b/ebill_postfinance/tests/fixtures/cassettes/test_upload_file.yaml @@ -0,0 +1,561 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd0 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 04:51:22 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Set-Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49;HttpOnly;Secure; path=/; domain=.postfinance.ch; + SameSite=None; Secure; HttpOnly + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jyusdGrL3swMNpDRS2gAACAc + X-Xss-Protection: + - 1; mode=block + content-length: + - '9632' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd2 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 04:51:22 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jyusdGrL3swMNpDRS2wAACBc + X-Xss-Protection: + - 1; mode=block + content-length: + - '10710' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd3 + response: + body: + string: 12356795012 + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 04:51:23 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jy-sdGrL3swMNpDRS3AAACBY + X-Xss-Protection: + - 1; mode=block + content-length: + - '3068' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd1 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 04:51:23 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jzC25lnOenWMr5onCkgAABxY + X-Xss-Protection: + - 1; mode=block + content-length: + - '2273' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49 + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: GET + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc?xsd=xsd4 + response: + body: + string: + headers: + Connection: + - close + Content-Type: + - text/xml; charset=UTF-8 + Date: + - Fri, 13 May 2022 04:51:24 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jzC25lnOenWMr5onCkwAABww + X-Xss-Protection: + - 1; mode=block + content-length: + - '534' + status: + code: 200 + message: OK +- request: + body: "\nhttp://ch.swisspost.ebill.b2bservice/B2BService/UploadFilesReporturn:uuid:52e2cd23-f8a2-46ae-9545-283b1bb87a97https://ebill-ki.postfinance.ch/B2BService/B2BService.svcyb1021209\xA3cAmp\xA3339955XMLtest-transaction-123PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPEVudmVsb3BlIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHR5cGU9InN0cmluZyIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249ImZpbGU6Ly9mczA4L2JpbGxpbmckLzA0JTIwRG9rdW1lbnRhdGlvbmVuLzEwJTIwVGVjaG5pc2NoZSUyMFNjaGVtYXMvMDYlMjB5ZWxsb3diaWxsJTIwSW52b2ljZSUyMDIuMC4xLzAxJTIwQmlsbGVyJTIwSW5wdXQvMDElMjBYU0QtU2NoZW1lL3liSW52b2ljZV9WMi4wLjEueHNkIj4KCTxIZWFkZXI+CgkJPEZyb20+VGVzdCBCaWxsZXIgUEZ2PC9Gcm9tPgoJCTxUbz5JUEVDZUJJTExTZXJ2ZXI8L1RvPgoJCTxVc2VDYXNlPkNyZWF0ZXliSW52b2ljZTwvVXNlQ2FzZT4KCQk8U2Vzc2lvbklEPjE8L1Nlc3Npb25JRD4KCQk8VmVyc2lvbj4yLjA8L1ZlcnNpb24+CgkJPFN0YXR1cz4wPC9TdGF0dXM+CgkJPFNvZnR3YXJlTmFtZT5UZXN0PC9Tb2Z0d2FyZU5hbWU+CgkJPFNvZnR3YXJlVmVyc2lvbj4xLjA8L1NvZnR3YXJlVmVyc2lvbj4KCTwvSGVhZGVyPgoJPEJvZHk+CgkJPERlbGl2ZXJ5SW5mbz4KCQkJPEJpbGxlcklEPjQxMTAxMDAwMDAwMjE1MTM5PC9CaWxsZXJJRD4KCQkJPGVCaWxsQWNjb3VudElEPjQxMTAwMDAwMjU5Mjc4NTIxPC9lQmlsbEFjY291bnRJRD4KCQkJPERlbGl2ZXJ5RGF0ZT4yMDIwLTA3LTAxPC9EZWxpdmVyeURhdGU+CgkJCTxUcmFuc2FjdGlvbklEPlFSLUlCQU48L1RyYW5zYWN0aW9uSUQ+CgkJCTxCaWxsRGV0YWlsc1R5cGU+UERGQXBwZW5kaXg8L0JpbGxEZXRhaWxzVHlwZT4KCQkJPFVSTEJpbGxEZXRhaWxzLz4KCQk8L0RlbGl2ZXJ5SW5mbz4KCQk8QmlsbD4KCQkJPEhlYWRlcj4KCQkJCTxEb2N1bWVudFR5cGU+QklMTDwvRG9jdW1lbnRUeXBlPgoJCQkJPERvY3VtZW50SUQ+NTE1MjwvRG9jdW1lbnRJRD4KCQkJCTxEb2N1bWVudERhdGU+MjAyMC0wNy0wMTwvRG9jdW1lbnREYXRlPgoJCQkJPFNlbmRlclBhcnR5PgoJCQkJCTxUYXhMaWFiaWxpdHk+VkFUPC9UYXhMaWFiaWxpdHk+CgkJCQkJPFBhcnR5VHlwZT4KCQkJCQkJPEN1c3RvbWVySUQ+MTAwMjwvQ3VzdG9tZXJJRD4KCQkJCQkJPEFkZHJlc3M+CgkJCQkJCQk8Q29tcGFueU5hbWU+VGVzdCBCaWxsZXI8L0NvbXBhbnlOYW1lPgoJCQkJCQkJPENvbXBhbnlEaXZpc2lvbj5WZXJrYXVmPC9Db21wYW55RGl2aXNpb24+CgkJCQkJCQk8QWRkcmVzczE+VGVzdHN0cmFzc2UgOTk8L0FkZHJlc3MxPgoJCQkJCQkJPEFkZHJlc3MyPkdlYsOkdWRlIEM8L0FkZHJlc3MyPgoJCQkJCQkJPFpJUD45OTk5PC9aSVA+CgkJCQkJCQk8Q2l0eT5PcnRzY2hhZnQ8L0NpdHk+CgkJCQkJCQk8Q291bnRyeT5DSDwvQ291bnRyeT4KCQkJCQkJCTxFbWFpbD5lLWJpbGwuaGVscEBwb3N0ZmluYW5jZS5jaDwvRW1haWw+CgkJCQkJCQk8Q29udGFjdDE+MDgwMDExMTEwMTwvQ29udGFjdDE+CgkJCQkJCTwvQWRkcmVzcz4KCQkJCQkJPFRheElEPkNIRTExMTIyMjMzMzwvVGF4SUQ+CgkJCQkJCTxBZGRpdGlvbmFsUmVmZXJlbmNlPgoJCQkJCQkJPFJlZmVyZW5jZVBvc2l0aW9uPjE8L1JlZmVyZW5jZVBvc2l0aW9uPgoJCQkJCQkJPFJlZmVyZW5jZVR5cGU+R0xOPC9SZWZlcmVuY2VUeXBlPgoJCQkJCQkJPFJlZmVyZW5jZVZhbHVlPjc2MDA4MDgwMDAwMDA8L1JlZmVyZW5jZVZhbHVlPgoJCQkJCQk8L0FkZGl0aW9uYWxSZWZlcmVuY2U+CgkJCQkJPC9QYXJ0eVR5cGU+CgkJCQk8L1NlbmRlclBhcnR5PgoJCQkJPFJlY2VpdmVyUGFydHk+CgkJCQkJPFBhcnR5VHlwZT4KCQkJCQkJPEN1c3RvbWVySUQ+QUJDMjwvQ3VzdG9tZXJJRD4KCQkJCQkJPEFkZHJlc3M+CgkJCQkJCQk8Q29tcGFueU5hbWU+VGVzdCBGaXJtYTwvQ29tcGFueU5hbWU+CgkJCQkJCQk8Q29tcGFueURpdmlzaW9uPkVpbmthdWY8L0NvbXBhbnlEaXZpc2lvbj4KCQkJCQkJCTxQT0JveD4xMDAwPC9QT0JveD4KCQkJCQkJCTxaSVA+MzAwMDwvWklQPgoJCQkJCQkJPENpdHk+QmVybjwvQ2l0eT4KCQkJCQkJCTxDb3VudHJ5PkNIPC9Db3VudHJ5PgoJCQkJCQkJPENvbnRhY3QxPjAwMDAwMDAwMDA8L0NvbnRhY3QxPgoJCQkJCQk8L0FkZHJlc3M+CgkJCQkJCTxUYXhJRD5DSEUzMzMyMjIxMTE8L1RheElEPgoJCQkJCTwvUGFydHlUeXBlPgoJCQkJPC9SZWNlaXZlclBhcnR5PgoJCQkJPEludm9pY2VSZWNlaXZpbmdQYXJ0eT4KCQkJCQk8QWRkcmVzcz4KCQkJCQkJCTxDb21wYW55TmFtZT5UZXN0IEZpcm1hPC9Db21wYW55TmFtZT4KCQkJCQkJCTxDb21wYW55RGl2aXNpb24+QnVjaGhhbHR1bmc8L0NvbXBhbnlEaXZpc2lvbj4KCQkJCQkJCTxQT0JveD4xMDAwPC9QT0JveD4KCQkJCQkJCTxaSVA+MzAwMDwvWklQPgoJCQkJCQkJPENpdHk+QmVybjwvQ2l0eT4KCQkJCQkJCTxDb3VudHJ5PkNIPC9Db3VudHJ5PgoJCQkJCQkJPENvbnRhY3QxPjAwMDAwMDAwMDE8L0NvbnRhY3QxPgoJCQkJCTwvQWRkcmVzcz4KCQkJCTwvSW52b2ljZVJlY2VpdmluZ1BhcnR5PgoJCQkJPERlbGl2ZXJ5UGxhY2U+CgkJCQkJPEFkZHJlc3M+CgkJCQkJCTxaSVA+ODAwMDwvWklQPgoJCQkJCQk8Q2l0eT5aw7xyaWNoPC9DaXR5PgoJCQkJCQk8Q291bnRyeT5DSDwvQ291bnRyeT4KCQkJCQk8L0FkZHJlc3M+CgkJCQk8L0RlbGl2ZXJ5UGxhY2U+CgkJCQk8QWNoaWV2ZW1lbnREYXRlPgoJCQkJCTxTdGFydERhdGVBY2hpZXZlbWVudD4yMDIwLTA3LTAxPC9TdGFydERhdGVBY2hpZXZlbWVudD4KCQkJCQk8RW5kRGF0ZUFjaGlldmVtZW50PjIwMjAtMDctMDE8L0VuZERhdGVBY2hpZXZlbWVudD4KCQkJCTwvQWNoaWV2ZW1lbnREYXRlPgoJCQkJPEN1cnJlbmN5PkNIRjwvQ3VycmVuY3k+CgkJCQk8QWNjb3VudEFzc2lnbm1lbnQ+CgkJCQkJPE9yZGVyUmVmZXJlbmNlPgoJCQkJCQk8UmVmZXJlbmNlUG9zaXRpb24+MDAyMDwvUmVmZXJlbmNlUG9zaXRpb24+CgkJCQkJCTxSZWZlcmVuY2VUeXBlPk9yZGVyUmVmZXJlbmNlPC9SZWZlcmVuY2VUeXBlPgoJCQkJCQk8UmVmZXJlbmNlVmFsdWU+MTAwMDwvUmVmZXJlbmNlVmFsdWU+CgkJCQkJPC9PcmRlclJlZmVyZW5jZT4KCQkJCQk8UHJvamVjdE51bWJlcj5QUkNERTY8L1Byb2plY3ROdW1iZXI+CgkJCQk8L0FjY291bnRBc3NpZ25tZW50PgoJCQkJPEZpeGVkUmVmZXJlbmNlPgoJCQkJCTxSZWZlcmVuY2VQb3NpdGlvbj4wMDMwPC9SZWZlcmVuY2VQb3NpdGlvbj4KCQkJCQk8UmVmZXJlbmNlVHlwZT5Db250cmFjdE51bWJlcjwvUmVmZXJlbmNlVHlwZT4KCQkJCQk8UmVmZXJlbmNlVmFsdWU+Q05UMjAwPC9SZWZlcmVuY2VWYWx1ZT4KCQkJCTwvRml4ZWRSZWZlcmVuY2U+CgkJCQk8TGFuZ3VhZ2U+ZGU8L0xhbmd1YWdlPgoJCQkJPFBheW1lbnRJbmZvcm1hdGlvbj4KCQkJCQk8UGF5bWVudER1ZURhdGU+MjAyMC0wNy0zMDwvUGF5bWVudER1ZURhdGU+CgkJCQkJPFBheW1lbnRUeXBlPklCQU48L1BheW1lbnRUeXBlPgoJCQkJCTxmaXhBbW91bnQ+WWVzPC9maXhBbW91bnQ+CgkJCQkJPElCQU4+CgkJCQkJCTxJQkFOPkNINTEzMDAwMDAwMTI1MDA5MDM0MjwvSUJBTj4KCQkJCQkJPENyZWRpdG9yUmVmZXJlbmNlPjEyMzQ1Njc4OTExMTMxNTE3MTkyMTIzMjUyNzwvQ3JlZGl0b3JSZWZlcmVuY2U+CgkJCQkJPC9JQkFOPgoJCQkJPC9QYXltZW50SW5mb3JtYXRpb24+CgkJCQk8RnJlZVRleHQ+RGllcyBpc3QgZWluZSBNdXN0ZXJyZWNobnVuZyBtaXQgUVItSUJBTiBBbmdhYmVuPC9GcmVlVGV4dD4KCQkJPC9IZWFkZXI+CgkJCTxMaW5lSXRlbXM+CgkJCQk8TGluZUl0ZW0+CgkJCQkJPExpbmVJdGVtVHlwZT5OT1JNQUw8L0xpbmVJdGVtVHlwZT4KCQkJCQk8TGluZUl0ZW1JRD4xPC9MaW5lSXRlbUlEPgoJCQkJCTxQcm9kdWN0R3JvdXA+RWlzZW53YXJlbjwvUHJvZHVjdEdyb3VwPgoJCQkJCTxQcm9kdWN0U3ViR3JvdXA+U2NocmF1YmVuPC9Qcm9kdWN0U3ViR3JvdXA+CgkJCQkJPFByb2R1Y3REZXNjcmlwdGlvbj5LcmV1enNjaHJhdWJlbjwvUHJvZHVjdERlc2NyaXB0aW9uPgoJCQkJCTxRdWFudGl0eT41MDwvUXVhbnRpdHk+CgkJCQkJPFF1YW50aXR5RGVzY3JpcHRpb24+SDg3PC9RdWFudGl0eURlc2NyaXB0aW9uPgoJCQkJCTxQcmljZVVuaXQ+MTwvUHJpY2VVbml0PgoJCQkJCTxQcmljZUluY2x1c2l2ZVRheD4xMC44MDwvUHJpY2VJbmNsdXNpdmVUYXg+CgkJCQkJPFByaWNlRXhjbHVzaXZlVGF4PjEwLjAwPC9QcmljZUV4Y2x1c2l2ZVRheD4KCQkJCQk8VGF4PgoJCQkJCQk8VGF4RGV0YWlsPgoJCQkJCQkJPFJhdGU+ODwvUmF0ZT4KCQkJCQkJCTxBbW91bnQ+NDAuMDA8L0Ftb3VudD4KCQkJCQkJCTxCYXNlQW1vdW50RXhjbHVzaXZlVGF4PjUwMC4wMDwvQmFzZUFtb3VudEV4Y2x1c2l2ZVRheD4KCQkJCQkJCTxCYXNlQW1vdW50SW5jbHVzaXZlVGF4PjU0MC4wMDwvQmFzZUFtb3VudEluY2x1c2l2ZVRheD4KCQkJCQkJPC9UYXhEZXRhaWw+CgkJCQkJCTxUb3RhbFRheD40MC4wMDwvVG90YWxUYXg+CgkJCQkJPC9UYXg+CgkJCQkJPEFtb3VudEluY2x1c2l2ZVRheD41MDAuMDA8L0Ftb3VudEluY2x1c2l2ZVRheD4KCQkJCQk8QW1vdW50RXhjbHVzaXZlVGF4PjU0MC4wMDwvQW1vdW50RXhjbHVzaXZlVGF4PgoJCQkJPC9MaW5lSXRlbT4KCQkJPC9MaW5lSXRlbXM+CgkJCTxTdW1tYXJ5PgoJCQkJPFRheD4KCQkJCQk8VGF4RGV0YWlsPgoJCQkJCQk8UmF0ZT44PC9SYXRlPgoJCQkJCQk8QW1vdW50PjQwLjAwPC9BbW91bnQ+CgkJCQkJCTxCYXNlQW1vdW50RXhjbHVzaXZlVGF4PjUwMC4wMDwvQmFzZUFtb3VudEV4Y2x1c2l2ZVRheD4KCQkJCQkJPEJhc2VBbW91bnRJbmNsdXNpdmVUYXg+NTQwLjAwPC9CYXNlQW1vdW50SW5jbHVzaXZlVGF4PgoJCQkJCTwvVGF4RGV0YWlsPgoJCQkJCTxUb3RhbFRheD40MC4wMDwvVG90YWxUYXg+CgkJCQkJPC9UYXg+CgkJCQkJPERpc2NvdW50PgoJCQkJCQk8RGF5cz4xMDwvRGF5cz4KCQkJCQkJPFJhdGU+MjwvUmF0ZT4KCQkJCQk8L0Rpc2NvdW50PgoJCQkJPFRvdGFsQW1vdW50RXhjbHVzaXZlVGF4PjUwMC4wMDwvVG90YWxBbW91bnRFeGNsdXNpdmVUYXg+CgkJCQk8VG90YWxBbW91bnRJbmNsdXNpdmVUYXg+NTQwLjAwPC9Ub3RhbEFtb3VudEluY2x1c2l2ZVRheD4KCQkJCTxUb3RhbEFtb3VudFBhaWQ+MjAwLjAwPC9Ub3RhbEFtb3VudFBhaWQ+CgkJCQk8VG90YWxBbW91bnREdWU+MzQwLjAwPC9Ub3RhbEFtb3VudER1ZT4KCQkJPC9TdW1tYXJ5PgoJCTwvQmlsbD48QXBwZW5kaXg+CgkJCTxEb2N1bWVudCBNaW1lVHlwZT0ieC1hcHBsaWNhdGlvbi9wZGZhcHBlbmRpeCI+SlZCRVJpMHhMallOSmVMano5TU5Dak0wSURBZ2IySnFEVHc4TDB4cGJtVmhjbWw2WldRZ01TOU1JREkxTWpJNUwwOGdNell2UlNBeE9UUTFPUzlPSURFdlZDQXlORGt5TlM5SUlGc2dORFkzSURFMU9WMCtQZzFsYm1Sdlltb05JQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdEUW8wTkNBd0lHOWlhZzA4UEM5RVpXTnZaR1ZRWVhKdGN6dzhMME52YkhWdGJuTWdOQzlRY21Wa2FXTjBiM0lnTVRJK1BpOUdhV3gwWlhJdlJteGhkR1ZFWldOdlpHVXZTVVJiUEVSQk5UQXdRemxGUlRFME9VSkZOREk0TUVSRVF6ZzNOall6T0VZME5qRXdQanc0UXpVeE4wWkRORFV4TkRBd05UUTJPVEJGUmpBNVJFRkRORUpDTmpKRU9UNWRMMGx1WkdWNFd6TTBJREU1WFM5SmJtWnZJRE16SURBZ1VpOU1aVzVuZEdnZ05qUXZVSEpsZGlBeU5Ea3lOaTlTYjI5MElETTFJREFnVWk5VGFYcGxJRFV6TDFSNWNHVXZXRkpsWmk5WFd6RWdNaUF4WFQ0K2MzUnlaV0Z0RFFwbzNtSmlaQkJnWUdKZ1NnSVNqRk5BaERhSUd3d2tPQTRDQ1FaeklHR3hIaVQyQkNRckN5UzJlekF3TVRKc0JNa3lNT0ltL2pPdSt3VVFZQUI1dmdqOERRcGxibVJ6ZEhKbFlXME5aVzVrYjJKcURYTjBZWEowZUhKbFpnMEtNQTBLSlNWRlQwWU5DaUFnSUNBZ0lDQWdEUW8xTWlBd0lHOWlhZzA4UEM5RElEYzNMMFpwYkhSbGNpOUdiR0YwWlVSbFkyOWtaUzlKSURrNUwweGxibWQwYUNBM05TOVRJRE00UGo1emRISmxZVzBOQ21qZVltQmc0R0JnWUVwbkFBS1B2d3lvZ0JHSVdSZzRHcERGT0tDWWdjR2NnWS81Z3VMQlJ3ME1keDlJWGJCc1dnRFY0c01Nb1psMTRKcFlHQmdTR0NHaWpMRUFBUVlBUzRjSzlnMEtaVzVrYzNSeVpXRnREV1Z1Wkc5aWFnMHpOU0F3SUc5aWFnMDhQQzlNWVc1bktQNy9BRVFBUlFBdEFFTUFTQ2t2VFdGeWEwbHVabTg4UEM5TllYSnJaV1FnZEhKMVpUNCtMMDFsZEdGa1lYUmhJRElnTUNCU0wxQmhaMlZNWVhsdmRYUXZUMjVsUTI5c2RXMXVMMUJoWjJWeklETXlJREFnVWk5VGRISjFZM1JVY21WbFVtOXZkQ0EySURBZ1VpOVVlWEJsTDBOaGRHRnNiMmMrUGcxbGJtUnZZbW9OTXpZZ01DQnZZbW9OUER3dlEyOXVkR1Z1ZEhNZ016Z2dNQ0JTTDBOeWIzQkNiM2hiTUM0d0lEQXVNQ0ExT1RVdU5EUWdPRFF5TGpBMFhTOUhjbTkxY0NBMU1TQXdJRkl2VFdWa2FXRkNiM2hiTUM0d0lEQXVNQ0ExT1RVdU5EUWdPRFF5TGpBMFhTOVFZWEpsYm5RZ016SWdNQ0JTTDFKbGMyOTFjbU5sY3p3OEwwTnZiRzl5VTNCaFkyVThQQzlEVXpBZ05EVWdNQ0JTUGo0dlJYaDBSMU4wWVhSbFBEd3ZSMU13SURRMklEQWdVaTlIVXpFZ05EY2dNQ0JTTDBkVE1pQTBPQ0F3SUZJK1BpOUdiMjUwUER3dlZGUXdJRFV3SURBZ1VqNCtMMWhQWW1wbFkzUThQQzlKYlRBZ05ETWdNQ0JTUGo0K1BpOVNiM1JoZEdVZ01DOVRkSEoxWTNSUVlYSmxiblJ6SURBdlZHRmljeTlUTDFSNWNHVXZVR0ZuWlQ0K0RXVnVaRzlpYWcwek55QXdJRzlpYWcwOFBDOUdhV3gwWlhJdlJteGhkR1ZFWldOdlpHVXZSbWx5YzNRZ05EWXZUR1Z1WjNSb0lEVXdNQzlPSURjdlZIbHdaUzlQWW1wVGRHMCtQbk4wY21WaGJRMEthTjZrVTIxdjJqQVEvaXYzY2RQRXpuYnNoRWdWRWpCb2tVcEJEV3VuSVQ1NHdRTnJ3VUdKbWVEZjEzWUNkTkw0c3NueXkvbTVlKzQ1WDhJRkVPQXhzQlI0QXBRSjRGMWdqQUpQSVNJUkNBTENUd3Bwd21HSkU3TldSN1hHTCtxM3p0WHovUUFvUktuamVGN2QzV0Yva3NGUFdkUUtCMU44S3F1ZExIRFlCL0taNEd6ZUlyUDVGQ2htZmJEVlFXRTJsZlV2NTJvVUxrNTdoYU9qdmMrc3RBcHpHZUxLZlJQWDY5M21wLy9JVC8rTHZ6SGZKZmdyWTUwcll5RmxDUTdsL2tIcHpkWkNuS2J1QVJ1a3d3VEJjU0UzTlVRTXg2V3hnMEY1WEhhb1lBRURTZ2p4OGFzQWp1Vk9GNmNQNCtwZzlVWlZ3QVU4ZXM2UERhb0x4WUFUMzQ5dzhTUjNDdWVqbDRmdnMwL25tRTRJQ0hCbUsyWHo3YmxVZi9YYVNPU0U0TVRLUXVkOXN5a1VFTXlzMnIxQXpKdDM5SzYraEVydmJWbmh0N1l5UVVrb2V5QnI1VjF1NUI2WnZGeHJzOEZYYmZxbTFoZDdyS3ZhRHJleU9qL0dOWWYvSW4xWmo3TDFvSXhoZHZoaHZaeUY2M1hRdFNpL0d1M0lGSEFhM0M5cVhhNjEzZFpMbG5TQjNCd2U5Vk9JT05oK1A1K3ZIdThqNGpocFZ6K0ZheGJuL0hMdmg3ZTdYYTgrWVN4NEJHWkMybk5NNldYOWN6UzRqdzg2bkJWRlVhdUtPYTZneCsxZGQzdFcycWoxZnBITEdiVklvOG12N1Z5RlBnMno2NStNbVh0R2FlcTlySlRKVDczZW13QURBQlVCSktzTkNtVnVaSE4wY21WaGJRMWxibVJ2WW1vTk16Z2dNQ0J2WW1vTlBEd3ZSbWxzZEdWeUwwWnNZWFJsUkdWamIyUmxMMHhsYm1kMGFDQXhPVEUwUGo1emRISmxZVzBOQ2tpSmxGZmJiaHczRW4zdnIrRGo5QUxUdzF1VDdFVVF3TGJzWEJCakhYaXdXVUR3ZzNZMGxoUm9OTGFzU2FMOStqMm5paHpkckVpMllGWTFXZGZEWXBHemVITjJzcnRjbSsrK1c3eDk5ZE9Cc2ViNzcxOGV2RExkNTg0T1BvMHAyWWhKYStiOFREWW5iK3hnK1M4bjVaejN6cXcya0MvbXBQdHNuTWc3NDFKeWcvYzVtTG1mVWhoU0dJUElZWFhUalpnTjVyd0wwN1RuNk9tOE8rMCtkci9pejVrZjhQOTNXUHJaZElzZjNsdHo4dVdaWWRITlRTRGVqdVBUZ2N4RG1mWnNEY1hXZ041TFFKKzc2TXRRUnBOekhzSmtYSnlHNHBPSmZnam1jdDM5Wmk0WXAzdDJuUE03K04wSzJObkFnSjJaQit2eVZ3S09odU5vL3VqbXZnaDNYcmtJbmRFVWM0M3ZETXA1MkhHSjNOZ1laMlhKUlNWd0tYbTcwSmhpb2dpRzNKakpqRkdXWEdXU0NZN0tSU2xpdUwxNzN3Q0FqL0VlQUM2VmlRQjRBbURqUFFDUW9zdHdWU3BGMUdTUTJkeU5TbEFCSFpsb0hQd1poclpDYUhOdkpoZ0lHQ1h3eVFBano0RnByVG95M3FKZ1FKS1paRndKYkY1aFMwYWhIcFdlZGhFZU1tT3lwQ0doS0V3b2htcUIraVlpdU5IRXduSFZqWjUwcEVHaW1IUUtPaENBdmxwYmRWQ0NRMnoxU0pvQ1o5TW80aW5UUWtLRXFrVUNYMWtZUDNFUldWQVNFVElrUnhOcWNOV1ZTR2Nib2FnT0NUcG5kWnJWelVRRUV4Smh2QWsydWRtcE1HSHNCMGNCQWJhRTRxUjR6eEc3c09wSWFUWndRSTZRc2d5cFNONDRPb0pDa1RBaGkvMlpSbzdRWkFZZXJqZ05XNU5tV0ZMTk1DdVRNVDNKeVAwQ1pTV3ppalV6N0xvWEp4c3dTUXl4dk1jOWwrc1JkeGFybm5XTC91T0VadTY3czVLajQ1RmdxSTVIZ3Q5SlNTRWU5R0tObkNUT2dPRTZTOURWRGFRK3Y2MmdLY1JYYTNNdEhCZWtoaEJuWkgzQzBwZ3FMU3Jqb205TXEzaVgzSjRMdFNocHFISUlyWllsZXEra3ZCRnpNdWxTWTNLdWNGQk9BZGxVamdWaDlUUmxQVldyS3MrWnFVcG9uOFNLYkRKWHFJc2NjeFJLSGFzenFhaEU5VU9kWFBPZW5KR29KODlLY1ZPUzJyVldhd1JOVzcrWkNGdTRDVEpyTlFtdkcwUUdmVWdvUENGRGFRWlJGTFJ3dkhYQ3VWcGhiZ29VUkNTMTB0Z0o5bHhPRFVMUDh5dUh4WWVvTm5tOFdBOWVMY0UyYTB5OHMvZENJc2orK3BCckVucjZmWlFpRnlKdEpySWh0WkZIaG5NUW9DWHNPdjU0dldBc3VrWUVEVE1jWlpTalNRWW56M3M1Mmo1WVBlRStqUG85c1ZKOXBKNlliOENOZTJaVTRMUWJWWVkxNGpYYm1qL2RUOW8xaElGNjhEaHdUTExVSElzRUhyaEl4akZDQ2I0SUpFN2tFS0dFTEVlaTJzUjBxdlhBYnM5NjBIc2FUVXd3OU1WVktJdldSOGxTRHlWcFBaUldCcE52VE5hMCtLNkF1Nm51M2I2UitGTHp5N3FMbmtVckFlYldKbkJ2Tlc3TXJSNkNsRDV2RDFjYnE1Tm1EMEp0K2NTWFJCbDgwS2lEZHFPZzVSRUNiM1JPQjErN1hhZzFGYnpHRjd4dkxkMXAzUVk5RVNROFdhU0lKRmdKTExpc2ZTcDRBWUtPaFl6YXB3SXJaeFEvY2pOeW5iRnJMbGhIUS9IYzJzQkxSZ1JIMlo4d1NrTUx2SjFFTU1vdEViakpTWWtWL2FLYlRvYjMzMlNpakU0V2tSc25kUXZDR0Z0cVVadTd3QkNFVEJVVnBzYlNaUVMxb3FrbjM5Sy9hc1NjQnNhOEpBUDJpSThSQkU1alkzVU9LZ0RYY3hWNCtMQWNKeFVXNVZWOXJMeCtpeGZ2cjkzTFpiZDRjWGwxOXZGb2RjVVg4WXVycTZQVjZmcllIQzZXMjAvbXcrTGx5KzFmNWpCTlF5Z1orVTV4QUJpRk4xNGFMRS91aDhYNzNYK3Zyait0emVMSDlkSHgrdElzbHZMMTd1ams3T0xvNm14NzBSN1llQ2w2dmhRWHl5V2ZQTXVQdUpNR2l6cVJKNUN3MlE0bzZ6eWxJUlYwc2VXbW01bCsrYnVHdTNpM2Y3UzdaaE93aGlFQzcrWEJJNkwrbHFnYjJNb2ZGUTFOZFBtUFJ5VGkzdGhnVVR6TGxUem9VQnZMUDQzWTkwNUNPWno5dTNkbG1NenNyUGQreUdiMnBYZndibWE3b3g2S3MvTTYzWmIvMXdjN1JEUFQxYXZlQTRHYlZXQzQvVmpuVEkvbkxpZWIwT2xhZFBielovMVlCa3hjL0VHYllMWnRadFhQUnp6Y1oxWGhlSDNIbWJwdUxsdUFRNStwWXZvUHk1OEJJVEsyVFBicjhJelB4em85aVhYK0t0Ym9BZyt3WHZhalphd05pUmE3Wm5SZG9kM3VKRk1LM044VTArTWRxL0I0Q1BaQjZLWUM4Nm5adTR2WCtzNUdOaTltUjIwZzlzazB3YTI1N2xPaW4rMXV1SWVqaTBNdS9QMjJQSDRFaHZJM01NeXJlZ1A3R0dEOHF3WjA4U0N5K3dXemo2L2hjcmMwelZHRnRlR3diYWxkUEFEeW9xNDg4UEd1Mmpqb0EyTjRVMHZTZk9sajR2RTQzVmJOWFhON3JKdXg2ZWNUSVdzSEl2RW41NzZDVHgvekovQVNJTncxeEZpWlA4M2g3SDN2QSszditrTE5EUnlFcEI1NE1jMHVyelhFaGU3UVE3RGh5T0drVzRXNTFkejI3dkZwV2J4UVk0OUFsd1FReVc5WEE1Y3pDbzJMMnltcEN3WGtQMndveGN6ZXNtWVI3eTkxV3g5VWxCOGlydGkvcWFpcFZkUThvQzFrZDZ0OEh1bTI5c25ENnZZZGViNkhEb3kvNll5MUd4ek9YdmY4MFRyNzYwZ3A5MEdRK0FSR01qcnY1MW5ibEpmOC85blBhMFcrNmtYeVIwd0lSRzl1OXJ0dGQ5M3RFS1Vkd3BwOVZ1ZHkvdWtVdzUzdVZydlBJN0x4K1ozUWZVUFhkT2tiWXNoUDJIMk55Ly9OMmNudWNuMmpzKzgybi9IMjlRT2VoZEZsM0hESWFCb20vbktzOUhMZC9XWXVJSVpiM2ZGV2R5T3ZjVnprZk1WUU5VNFRmMXlvdnJVQnYzNVdtMjd4MDhhYWcrM05FK1QvQWd3QXQxN2ZzZzBLWlc1a2MzUnlaV0Z0RFdWdVpHOWlhZzB6T1NBd0lHOWlhZzA4UEM5TVpXNW5kR2dnTmo0K2MzUnlaV0Z0RFFyLy8vOEFBQUFOQ21WdVpITjBjbVZoYlExbGJtUnZZbW9OTkRBZ01DQnZZbW9OUER3dlJtbHNkR1Z5TDBac1lYUmxSR1ZqYjJSbEwweGxibWQwYUNBeE5ERTJPUzlNWlc1bmRHZ3hJREk1TURrd1BqNXpkSEpsWVcwTkNraUpkRllKZEZUbEZmN3VlNU5KWUVKSXlFSklnTHlaU1FKQzltU1NzQVVDMlNBc2dVU2NBUU1KU1NCQkFnRUNBZ0pHRnJYVGlpdHVwYTIyVXNWU0hkSGFZUkZpcVdGVFNsRmJGVWl3THFjOXA4ZkNzYlVJbVV5Lzl5YkQ0YWg5Yys2OCs5Ly9mM2Y3di92Zkh3SmdFRHFnb21wT2RXYk9BN3NxeDFOeWtWVFgwRnJmOXRhMkx6bVdpVUJJWE1QNmRpMnNUc2tGelBNNG43VzBiVmxyemtOcmwzSzhqV3VXTEZ1eGNla3pKL2FaZ2REUGdYbFhtcHZxRy84ZU9xY0dXUEFCMStjM1V4QTZRS1h1aFFNNVRtNXViZC93emJVUzZsK1lRUjJSSzFZMTFKODdjdlJsb0w0SVVBZTIxbTlvVS9lRXJRRWFLN2hlVzFuZjJsVFZ1V3M3eDgyQXBhSnQxZHAydnhjNXdDcVBQdCsycHFsdFJYaDJKOGZuNk05NUtMSmZIa0VJVElwYmNYSkZaZUF0aS9qTmRVQ3htRlExeEtRb3BnN2cxU3BvTTlEL3pKdytldzZtUUx1aEtGLzV6VGlwUG96ckd2QlRmVTc2bE1QUStOTWZCV0s4WTVnL2N0SU5zNXpXZmNGbFN2NG05MG9IL2dnVGZUQWpGR0VZZ0lHd0lKd1pqOEJnUkNJS1F4RE5yMk1SaDZHSXh6QWtJQkhETVFJamtVUXRWdGhnUnpKU2tJcFJHSTNiTUFaamtZWjBaQ0FUV2NobUpMbklnd1A1S0VBaHhtRThKbUFpSnFFSWt4bEJNYVppR2twUWlqS1Vvd0xUTVFPVm1JbFptSTA1cU1KY3pFTTFhbkE3NXVNT09PSENBaXpFbmFobERBL2pFVHlHSnhqMWM5aUxsL0FpOXVFM2VCbjc4UW84ZUJXdjRRRGV3T3Y0SGQ3RTczRVFYaHpDRVJ4R0o0N2hiZndCUzNBZjFtRTlObUlGZHVMWHVCZjNvQTNic1FuL3dhTjRIamV3RGYvRk5XekFEdlRDTDVCUStMQVpEMG9JZm91amNLTWRXOUdIeGZoR1ZHekJqMUF2OStISDJJVmZZQm5Xb0JVcnNSeDNvUmt0ZUVzRXg3RVczZWpCVXF6R1gvQlhOT0IrTEVJZG12QVFkdU1uZUJLUDQyazhnMmZ4Rkg2R240dUNQZmdWWHNBdjhRa2FzWW8xOENsMzdVTThnQzl3Q1JkZ1VndVpoVVptTVlRN2tFeGZqdUpQdFBBdlhFR3ZqSlVDbVM1YjVURWxVVG1obkZJdXFWdlZKOVI5NmhHMVU0dlJFclNSbWsxTDFiSzA4VnFKdHQ4YWJiVlpVNjBaTnNWbXRnMjJEYkhGMmhKc0kyMWpiUlcyT2x0VHl1bHIvaHVLMzIvZ0pvWFpQb1p6ak9NS3JzSW5HVEpPWnRKS3ZOSkZLeC9kWWlWYWk5ZUdhNXBoWmR3UFdJbWlsV0UzclRRYVZrUzM0dThoblNHZElIVUZNZC8zbnZHZkF2VHU4Ylg1YW4yemZPV1hGd1RtTGsrNDdPRC9zNWR6ZTc3c21kM1QwL051OS9WdVgvZFZvUHRyMHFYdTg5MnZkTy91ZnZ4Q1FaZ2E4aUVyb1pFZkxTZTlRRHBLT2lMeE1rWllYNnpJQS93L2dGc2U4Y2diNGpVNEw3NzN5RXNCK3Q1enM3NklpbllEYVhjVFN5ZUl0MDFFMm1ZaVpxdHNKK282aU1OdE9JbFR4TjRPSXZGKzd2QnBQRWc4bmNHN2VBOW5pZkE5T2lLSXErZTR3ODhURVRvdTluSVgvb3p6ZUI4ZjRMaFlaSnFFUzRrTWtsS0prRElaTE9VU1JRUkVTb1VNa1JteVRTb2xSbVpKck15V09Ka2pRNlZLb3JsejhUSlhoc2s4U1pCcVNaUWFHUzYzeXdpWkx5UGxEa2tTcDFqRkpSbytrUzNFa2swV2lsM3VsR1NwbFZSWkxDbXlTRVpKSFQ3Q3h6SmE2cG5CQnJsTmxrZ2owZGNrYWJKVTBtV1pYZ3RFU2JOa1NZdGt5bkxKbHJza1IxWklyclRpSFhSSnZyU0pRMVpKb2F3aGx0YktlR21YQ2JKT0pzcDZtU1IzUzVGc2tNbXlVYWJJSnF5VllybEhwc3BtZkliUEpVOVdFdVdydVpzWCttdmpFdXZrQzZQaUZobTFWOGNxYjJCOTZ6WG54MFVaeUhxTjRWazBrU2VPZytmVlFwNUNwVHlWSmh1ak51N2FZSDhHejhnK0pDdUhrS0Y4aFhCdWVWcWxGd09xbksrSjdISjV4Yi9UaXgwakR2S3NWQmN2U3ZkQzBqU3R0S1hFSTNVY0tHa1VqTEdTVTlPME1vK2FVamJQYVhkcGJzMDl2ZEd0bFduTjlZMGVVNHJ4NWtTVDI1V3BlVkR0Yk9GL2pkUHFtZUpLdk1rMnVWempxY2VrNnpFWmV0d3VhbGplcjJHNW9ZRUtmRndVa2xhcGVkVFVLdWRjcDZlakpORXpwY1NWYUxWcXBaN09LcWVuc3lUUjZuSnhsZm1tcDN4dmFZbnY5em1VUHB2SGtBa0xhS21tRHFwd3VkMkJrZDNxNlhTN0U5Mk1vMy9zRlh4WE1LVmZ3TUIxQldwS3FWYzZxb3lwRHJzMVVSZllyWFlyM1hLVjBOU0F0TXBxWnlrZHM3clMyWCtNVnFXY1pjMk1aRWRKeGNuRGZGbDQySmpHSG1iYnNmQ25jOGw4SjVFckRtR2ZzYkNYV0tDc0xyWnlLeXhzVFJhMkh3czMwOEkyWW1HcnNCQUdGcGFiaGFWazRjRnFZWU93c0JGWVdHb1dmRXo2QitsYlVtUXROUWFWS0t1OVNJNzBZdlJGdGd5VU9yMndaeVllWkp1TEtYTDFDNUoxUVRJaWlseUgyUnBOYkphbXNmcEhCM1h2ZXZrQk9ZMWNWbmFCSXpjMlUvTHlDNHJFa1pkcXQ1bERSeFZKYms1Y2JJdzVORUppaDBaWm80VFVYZWhRRXF6YWtQU2twSFJ6VHVpTWZFZjVzTlNVOEdOOWpYSzJEK3VtVFZzWFZaQm5UYkpHSjJlbjVZYVZUNjJZb0RuczFsU0hWMm54UGFYczhlVXdkenlHaUhhdzQ5VXdqNU80RVpuRTQ4WGlRVHcxRkhaRWhaMVA0Wm1oc0ZJVW50NEt6TFhCQ0ZVOUlGVVBpUEM5U0xkelkrMUw1czZ0cVlINFAvWC9XeHhLRjZjZlBVUVRLbFRHS2t3UXpoVmIyRkhCVXlwd0kvc25xWmNVVWxzY3l2WUl0akt3SWZNb3JLVUpmcUdjNDhST1d0NU4ya3RTYTZuaWRUTEhTZStUUGlOOVRRcTU2UnAwMTNCTDhoVmRvT2krWm1WSDU0cjlTbW5mMVZLbHk1ZEJZYWIvVy9FcGIvT09Na0hKUHNTTFI1emhiUjczdzR3dzdreGNwTDV4WWIzL1YzdUVMb2dJWkFKY1BCd0tQNHNnbDBZdUsxdUlsREphbXE4RHRyWllSWmQreWRLWmdpRHpqbjdaMHBsVGhJYkJsQkZjc3RwWWJBbEk4blZHbDh6bmJVdDArQldRS1NjcGV2SUtlZmVxSURsSnFyNytESzlpL1RxSDZZeStKSUZMRXJna0liRGtSZGFPc2NUQnE1aWhleStyeEpDOEdXUU84bDVtTU9XOG5obHI5SHVad1pTeW5BeW1JTWdjMHBsYTBGWStRd3NHYmRnNkVZeTFLeGpyeVdDczA0T3huZ3pHV2hpSU5aU2xHYzdwY0pabXVLN21COEk4SFF5ekt4Q21ucCtFWUg0UzZIVkNJT24vWTd4S1k2TzZydkM3YitiNXpZdzk0N0hId3hqd3hNdGd6T0lOdkF3bVRvaEpiTFlTRzBqTjBoS2EwQmhvSThCUnl2WW5LVXFCRURYOVZSQ29BdElTVktpaXBvb0FNLzVWZFEzNWdYOVEwaEtRVWltQnBqUUNxUkMyZXVoM3pubG5NQkJvc2U3d3ZYUHZ1KytjYzgveTNjTnFhMFpCV294MlFPUW1zYjI4YmpxWUtFdmZoZUZITVd4UjBUTisxcjJtbWxFSi9Ma2xiaDcvamEvaHYvVDRkR3U2TlNHeXZIaEpnbGMxVFNWcHVyV2xXVmFaVVYxMWRhUHJiVGRRbXFpdm56ZW5ycjQwRVF3WnUyRjBmZDB6cmVXVjBhaURmOUZvWlhscnVxSWlHczN6K2ZLaTBZb0srN2VtdktKNTdkYjBFMCsydGxhbGpFbFZ0YlkrK1VSNjY5cm1pdkxIVFZteXZuNXFjMjF0MDlUNityTHk4akk4TmRYV051TXBXWVprbkhybmhqbUxlRyt6djh5QWJ0Y2cybUZOSS80TVVxNFJLUmNjd21pQXNKc2N0SnhuYTNpMkJyUEZtQzFHbVFnaXZrdVJGaG1jVVkzVldGVGNObUMxTldRUS9XMVdLWjdnd2VsNG1FdnB3QnVmQVBXL20wVWxsRFFsSTdLb21nVFZsRVcwWTRsVjdlMUl1VWI1VklJTkNvRXlPRytkTGNKc3NlV0RMSWxWYlpCbDBKTjFkZ0ptWVI3ZXJSNlJpeFJjanNhZEI4N2lKc1BnRnE0eERGYWhTSFBPOUtFZWJNRFlSbldCWm5ZRDhKS1Z1TjV3bUwwSzhBWUdCOHBCa2ZyQXpST2FTUW1OU3k5QUwwaUErcXlMcURxRzZsa3Z1a0FmeGdhTWJSaTdNQnhhOFYwME5lOWxEMnhVOERuNkM0TXpBaHhjZDFKUVBDV0svRW56ZG9DQnhUWEYwY2gzOU5YN0RlLzczNGIzaVVINVVDVUI0cG5BVEFLbEpJRXJVMEswWHFxVy9rTlQ4UXRZZWhQRGxnM0tSYXFtc25TeFNNbENEeXhSVXpjcldLSTJyMUdidndDNHFUYWYxZW5maWZFamt6aDJiL3FsMEZaYjAxT1JsNVNqY2FSbm5KTzFKcTJaNm1YcFpMT3J1SHJpeEhIVmlWR1JTR0pLKzhLNWVkM0xsblYwMktabVFzZXM2bXA3MXF5WGx5NEsxTlpPR2o5eld0cU94WkxKaXFya1UyYUg0dzlIeXNvYUh4c1ZqNHd4NHpyS1RjM0U1VE1tMXhiWi9vYjYyU3VhVzR4SnpveTVnVlRWczNWang0UWpmcDlRbWdSK29tQ1NJU3RpMW9GZ1VTSmV0Z0ppMTJzRXFQcnNGNG1ES2hnQWJ3aUkvUlU4ZlFLSFNubHA4T1J5SnZpUXN5NXkxem1IRGZGLzZCd1dyOE1uZU5OdUFyUnBnMHArb2lESlV3TldlQWdQb3lsRyttV0h5SkFtc3FHOE5TTVMyU1dCSzRtTVNxOHFOTkF1R2FZY1laRndoNlhVcG9KRDdLQ0ExQnJtN2thWk9wWXFMQXFJc1paaGZBOWpDOFpPakwwWVJ6REl4cE1ZWnpIK2lYR0xOaWU5UDVOd0R1TDh3emovTUJwc0dGdy9iUGxwOWhyUFdod3dCV0xvdnhpa1RWTVJhRXc4MVZLSlcwdGx3a3hmc21wVlovWURNOS9PWGpXUno4MWZzcW4yZDk0eHA3T3IrYXlZTzRINSsyQnYzLy9Gbm9UVTVNRmdHLys3T1MvbWtkUHlyT0tjRisrbFYxaUE1WDZQWnNWU0xVMmdXZ3VJYlpranowbmNoUEh6TnVMR3RrTDJqRUcwMWdCZTkxTnR2NklOOXdvM1hGcUNHU3JSUHR6RGJLN3NQbzJLWGo1eHVxcFFDTkhHUVZuWlMwZlh6MVhUQXlFQkRnTERBbysyaUZqN1FNa3MrZHJmR1VCckRqd09MMGRlZkUzTHoyVUZTM1hxbHl3UjZrV25DNS9KNXhmamdWZGNJa0R2bkZkd1U0Q0Rsd3pWS05HamkxL0k0R1Jrand3bGlScHpTczk5aGdKRG9QOCtjbnMzcUlNa0NIb2NiOFNCY1pTVHA0TWMwNEZjdS9LNHF3TWFadU91eWN6UHNiNEVHRllhbUZGR05JZEF2elNuYStxK0RRcDJLVGltWUpxQ05RcjJxaStXNlo3VHRMS250WFlzMDZSZXh6WmJYRTY5MVl1VmluMlQvWit1OU5XQUp0ZFV1cW1qcG1GMzFiTW1QbnRlOXNDOHA2K2JIODRjN2hvY3hPZmE3bHkxMjhEeEs4M2IxSkpIQzQ5b29NcVBHakVheVIxZytsd0VSMVFPTVlsSXlRbXUxeXB0c1VSOW5pU1BKa2Y0UEU2Q3VMall3a3ljWFd3aHlaTFkzYzl1amdNVk1DdUlZbW1TVjBTcFpMNE9BUVZTRVMrem1IMG9BZWlpU0NFRnZsS3dYY0ZWZGRJeEJiTVViQmZnd0dzSmE3WDIrODNhM1Q4RUcvSjYxRmpQdlR0MDF4c0tUaWlZcStDSWduZjFPMTBQcUpEN01uMTFrMzU1cVg3NXovcmxYdjZ5a2U0bXRKTWFHWFc0RklRdDFQNm80OWt0VlJNbmo5OHhaKzZjMlR2SDFkV1crOHZyRzhZZCt2Yno1dm5sQjZ1bU5DYnRsNHRkeDE2MDZFZmJGajVuM0x5aTlxanIyaSsrY1BEbksxKzBuYnhDcVRjOStQa1c5Nm1ZK1NDRCswOUlJdUFVSUd2emF3WnlFWElRQ2l6eUxEckZBQ1VIYy9reXQ1Nkp4ME12V1NFU2hDZ1k2QTA5MDFqdVRNOW9LTzlXNEYwNEhOQU55aWFmZUcyWEZzUGNOZVNDZ284Rk9PQlFMa2lJS3kvc2tGYmlJRXZEOEhsWWJ4TmhMVDdlZEFiZ3BFNHY1ZWl6K0h1NWE0K256c2NBRjdVRzlEMWNuWTBLZGorZzRCb290MWtWUEtvYWRBSDBxZ2JiVk1GRENyNVNJTXJGbXVqaWd0Q1liTkpOL2hqaXcwMzF2SmRadE1EWTY5Yitaa3RubTVrUnNIc1diSHJKenRnclZ2eHNjT0dDZHRmVTdldDQwbGpjeE5FUHpBRE9QOS82TVJXeWZEbjk5WHlERzdEeWMvbnY5M3FkZy8rZEJzRzVHOFozcEJNLzdORHpTWkR2VmQwb1ZXUTZlTm1iY3Q2RkpNQTU3elpJUldpY0VxdU04MThSUnEvcHpWNDJ2dXl3U1diMzJabjJtKzNaZjdkRDkvblFmUTkwRDFwcnFja0VvYnRjYU82cWJISXFjekhKZjVTYUFSSUU3bFh6RWNxaGd4ZWw1cHR2WkcvZXZ0MHBXaDBYbnk1QlRqM05QajFONzNzKzNjOWZCMWhCb0orN2xnY3FHSWhMUXF5N1BjU016dFgyNXNyQ2RTd1JGaWhzVUhvc2t6MHZMdFkvK2pEOEpQQi9iVXArRGZNTDR0MFFXeCtFOWJaWTMxUlVXZFJVbE1KdmFrbW5lYUd6TTdzZkRzaCtaRnFHdTh3YzhvS2h1bUxlZ3c4UXp4bDh6dUd6Y2FLMEI2djdPbHZ5VVBicGtNQ1JPbkgzcS9IS25rNVRtdjJGblJuZTJwNkxYMThLMzRuNGE1aHNpNis3cVdqMU16V0pLQmYyd1B0YXZIcVVMdzhwT0tBZ3lvQmlLc0xXYzJIeTJNa2hnR1BDVGh5NHgxQ25GS295U2JpTmczdXZRWm54cEJ1VThmeFVtenVwYlY2UnFobTAzUDh3MmZPWVI0aG81VGtPa2p4VlBJK1puTU5VQ2d6RmNrZ2pCN1dMR3BGUHZySlhpMHMrZ1ZlWUUzdFZwdFdpWnNUclhEb0hGR2lmVlkzaDY1ZXFIcFlUZVlyckNRZHFWQVBWQTRVQ0hMZ3phdDNCc09VVzQwbnB6UjZTaXUraUk5akFBK0gzQUNXTGtDQXlJdndlaU1lUkhNMzI0cEhkYUpPbGp2VXF3QnNVSmZUNTAwekNJS1dLZlVqcjgzaVJFakh3d0VFRnY5Zktma1hCRUFQaGd4SHg5UjQ4SEtacVJUdGZBcml0ZDdWUDlDcDNYZ25hYlpFNDFpREFSN3B1cDY3cjFTdGZNOEF6UEowQjk3R1VJZTlrQnN2N0ZPZytCZGluUVBZWjFPbnpRbmxKblFKZXk5TnZLUkgrUk5kTjEzVjdBQTdUT28raVh0RjRQS2pnTXdWL1VIQkd3WUE2NTI4YWFDY1YvRXJCSlFWM0ZCeWxCRm5lVVlqVEM0TFNCM0VPUWNSakVQRVloQ09DNkp0SWdIN3VyMEZSOTVpQ055VlBDL0VjUW82RmNEVUpJYk5DeUt3UWVsOEkzVE1rNys3UnREMGhnSnA0Q1BxRnhDWHY1NXI0cDJ4RXJDbG1xSHFsZkNtRDM5N3YzekhXeWs0NyszajJsbzB5TnJ6WDdodnVzbjh3L0JZTmpySVdjT1I5NE1pRlZybXZtdzRycWxVbXFvVTh5bVU1eW9TV3M2bGIvWis3by9Rd0dMQUtzS2hVRm4wS05zdHozUW9PS0tnZ2tFdWpFa3FCa2hGWlUwYUNNa21Ta3FqZVZzcThsaW9IZkYwUHIxY1BMNWNHeDFYU3EyWG11SUpyMm5RdUtMZ2hwMGlVT0tUQUs2WVR0YzdlZ0hNNHlqWlp4ZUJheGVMNk5RQWVxL2JBYW5BOUw0NWlTby9qR21zZWVJbHVmN1RYSHdIT1lQQ2RheVBBZG5tZ2NQRkk4eTRxdi9MU0dHVmdZMVQvTWJMTlJvRHRHTGFRTDIrNmhvRDRZcXpHZUZMQVg2M0hMTzlpNW9FM0ZYeW9ZSXVDUFZhNWdLaWNHRHZEYy93RTlmY0o5ZmZ4dTNjV3o3c1hGVnhYTng5Vk55OSt3TjhUN3ZNM21jdWVkY0YyaTJIcGZ3bXY5dGlteml0K3YydGYyN0VUNHRpeFRSNTJFbTdpTkVtREV6dU84NkFFclJBYUhrMDdVVVpHQzBWSWpDQXhZR004V21tZGhqYWg5WTkyb2x1bm9rMUlnM1liazFadFBFSXlDVFlWeEdNcTBRWWRwRXdGZGFVOHBLMGFWUVpkRi9ZNzM3bkhNYTJxSmZxVVg4Njk5M3Y4enVQN25SQk9HakpjckVuRHNtWlloR2ZlRXBHdm8vSjFOTSt3aS8xWUNUODZwTjBRMG9ZRlhCWndWc0F4b2ZFWTAwaFRKREJGZ3FmNFBLZE1wWklXQjExTnRxTXhxWkxvYmh4SjY0V2FWY1BQOWVEbnVlZDd1cnQ3cHI2c2xpeis2YytXTERiVjBzZGYvZkhTeDgwZnVGYXUzTHAxYUpWcHJocmF1blhseXFsMzlneHZjTGsyRE8vNStacTFwcmwyRGVVdmFkd0preEkzcGhhUnBvbUpJb3Zwakl3aGJhSmFkaG5qMmx5a3phUWtnekJMRXBaUXpwVVVKR0dVREZHK21DSjRFdFZYZUNRbDZWamlkTFdjanFkeCtTcG0weElTTGNrS0p5cDJDaGlXcUZndk1iQlR3QjF4L2ZjRWRCTFlva01vNUpTNnY4dlVGd1djRXZBdFdlTnJBdGJ4WXBaZWJJZlV6WSsvZUoyN2VwMXdodHBTOGx1eTBXN01wR082Q3ltejk3WTlWRjhmandlRDV1N05DMzc5RjB2MXpWM3o3QUsxd1hLWHpLaXVucjNibkhOcVRUb3o5V2N0aEhydWY2eU9vN1oydTdLajJFK0lQZE1tVzB2UlN0QXBIbENaMFM2cWhPeXRSQU1TZ3FWQlcwTFFUTjJ3ZHJQRzd4V2QxMXNnTUIxWFRmc3VSNFljKzg0QVlOOFptRGdYWk1rNWFyVGdpeHpmeXAzNGgyS2lSYnZVaFlkVnpzTVJvd29PcjlRT2p3WXArS1dyN2NaNzdQb1Z1QlUwd1pjQWJsQVRRVHRjSnFxK1gwQ1hhSWpkNHV3ZGNuc01pQmE3TnczS0dMekd3SXVnQ1NOTXdxaFdZUzRCcjNIQ2UrSFlja3hWam5uTCtja0sxRCs5NUlDQWZtTTJUM2NBcEd2UUwrQ0lnRWtCaCtFaDU3Wm9rNWZiK0lqckFMWmg2Q08rTG84WEdPMFNUQjBTZEE3WVptUWxIck5TQ2JQNU1IYkw1ZUNXbXVpV20rdXpwRG1Ld1FJUHhlREJVVVNQQ1Y5M0JmeEVpSE1ZTE1MS1lWUy9NS3BmMkhnVnc4MDNTamxQdHczZyt4am0veUV1ejlmckFvNHllSUFVUzVOeVJCaWFGSVlXVG9OMkNZSU9LUVlkY3JBc0RwYmxMKzlwbG5KUm5ZV29sUGxmeXNrMEtxbzNhYy9TWlpRTGJQNDNBb3VkYkh5MGQvV2pyUThyMVI2Tnh4T0o2bmlzWGFsNWMxZFZOVFRVQnpKTHFpb3JZNUVaK0luRzR0V0p2bFJzUm9tNXNILzV1cTZoSnRzZXlOaWhZREJZRmc1Rlc3NzBWSHRLdVQwbGZaV1dwN1FrTm5OV1JTUVNMQ3NObGlWbVJ4T0p4dldwMldZMTh0eVBaTCtOR3V3MUxveFJ5d3JnWmczbHVQRWpxWGh0QlQydXVxSmY4Y2dySG5uRm8xL3g0QlUzdmZLczNKMVhCYndnNExpQUdsR1dob0MyQndDOXMwOERLUm9tMVFpem9HaDR5ZUJsMVdYbVZaYzFqdTdVenRaRm9DWXZ2YTJ1dmIzQS9QYWNPZi85cnE1dkhyenpqRW1sYlhJTUJvUXF6bzJEWWVjbTdmeUVLSVB2YUVDOUVmVjVDSExENEpLa08wTHUvL0RhWm9uMmx3U1VTbWN4VHl6N0JGelY0QXVQWTVIQktqQW9NaWd1aW03YUR4ZS9IMG5PZFJNZ2diMEk0S3YwQ3ExN1VoNWZrREwzUHNBZFhlYmEydXRzbGFsU0diVnMwZFNuQTlkdXpvZkNockxXM0hqQnpkUGdKbUQrZ1FneXFQWmJjSmdCMFV5MDhlSFZGV3g5SEE5ZXdZNzJTMGZYemRMS2k5UXlrVm9tTXRUazB2WTdaclJJVTB1OUhNbCthdTdjekkySFMrSTR3RlVNQ2lvWFdqRFhkQXRHalI5Zk91QUlxN3ZITWR0NW5PYzlqSDlpM01kdzB5UjdBUTVpakdHNHVBUzdrYUZ1MUNJeThCUmU4dk1paWZOdWlmTW5uRGoza2ViNFBidU1sdkZoR1IrVzhXRVpIeTFqWVJrZmx0R2RKQzNod3hJK0xPSFRHeTl5TnM1c0JhN29rQWp3WXFzSllBMy91R2JLRDZiOFlNclBUUG00WC9LQ1dUK1k5UnVIK0FsUjV3ZEJmaERrQjBGK3B1NGpTQnk5ODgwQ0JnVWNGL0NlZ0gwQ2FnbHdlSllVZERTZkMwWTNHZHdGQmo4Wi9KeHMydUFqZzQrajA0VnYvZXl0U2VrMlBkcHQrckp3c1kvWEdYUzl1SEJpRjUvNGcrbk9sTUNvYmk1Tm1xY0lTcmJJbU1DNGhmRUpobWIrbHdESE1FeStlNHIwUndoVW93Z2ZqZW9sQ2VHYWQxR1V1OEoyUU5rcWNPdkp0MDR0dlQyMTdPTGZCdFVtdFhqcXVxcWNPanoxUXpWMzZvL1llQkthNTdkbU1UUmpsN21XcHF0ajFWTkxXY0c1YlFqVEJoL3B6ZWxIZFZMT0hMQmFRSjhHSTBaZGtIYnNjMVJJMXZDaW5rVHhmVFlmSk0zajlOYUlrY0xmVkVvWHdKVE0yaU51YzhBOEFubTNwY2tIYVNPVWQwb1ZHYW9Ldk5SRmhpNzJVak5lcmRLck5xZEE1Z2tZeGpITVo2aDBLaXBuZmpsZ2hRYVlMMGdhVytrdE54dGQ1QnJMdUEyaC9oOE1LZ2xwdk5DcVgwZzVzOFBSTCtLZnZSZ0hNU2p0VW5pcExhKzhMNGowWFU2QVMxYUFMVjNTODAwSTZKYitaRUlhdXczR0xBWjdHVml3MkdnQWJZNktGd0VjYXdPc0RXSnRNSnlXTGNWcjdzSjJkVlMrQXJBZjR4Q0c3clYyUWRydXdkRHFZRC9BSWYwUENhQWgyZkZmUllTL0krb2x2L1V1MmZGMjJlaVl1TE5GTDY0S2RVQmV0TWRzcDhWcVRPWTYyTmFyc3AxMjBwc0Y5RVk4TVZ0OVBkVFUxR0xia1ZodDR1RmNiYzJNVXRQMG1OSFcxblMyYmxhbzFxeEpwRks1em5TeGEvdmd3b1dEaDAzbG1hdVU2UzRwcnFob2JvOUVvNUY0VGFLbS9PWFdtVE9WQ3BiRzBvM3pHaHFDWlphcmNwZHFlYVRPTkU5YzY0SFdNWnJ1MzFIN1RMOFJOM09qT0ZTWTc0RStnRUVNVGVjbUk2eGpPd3pIZXZnbWZGUE8vN0tBelJxTUdIR0Vkc2s0Tld3dy9rYmNlRjVBbjREVkdraG94eWh3WXdXaFhVcUdVbWtSWWtacHZrV0k2UlpCSWNOS2cxU2pLQnFMODI4VXB5aUVwUXVJNThQd2dCU2ZJd0x5cGV0REFmMXlsK1lFSEJYUUw3ZDZqb0ZsdkFGd2xLOEZxbWlPaHZsQXdLU0FGYUo4TDBuc25HRmdvZGlGVU94Q1BNVXRWcnd1NUZwNUFWVmJoS290RkpFanN0V2JBbjRsNEJNR0ZpTFNEZDN0dERramNvQURjb0RQbnNTbFQvSGduajhVTUNTYlB5MmJ2eXlidjRHTjM5V2JWOGxHa2JucFhNeERNWjBWR1J5TnFiMmR1YWZiTStuMjViMWRucmtMbnAvemlGb3cveHVwbW1CeHdLTkdLNVRxNlYwOU5LZFB4WHJEeWh4Y3VuSG5Zd1BLNjNLNTZaSnBRMnkrYi80RGJ1d3cveldLdkd6a1dyMUp5LzhSbzFITFFCMlFRVHgxYnJxTWpzTU00bkRHT1ArdDBYK1BRY2w3UDlXZmR4YUVYb1lpTFdORTg2SFhRb2FXZ2xoTWtDRlJVR1p0TXRoa29EdVJRcEZhMDZnT3hUcDhhdXY3S2UwZ0NrQUxEbkFqVEJ5M0xKZWl1SkNCaGFEd2cxdS90RTBCQ1pVQUs1T0RDUEV4akhNWTcySzQyZmNoL3Znc3dJUUUwcGhZenlDUUxrdnJ0QnhGWGsrNTM2aVVXOWdCWHhGd1hVcll2d1djTWVvRk9CWDFIZ01MNnpVZ1podTRidDQwbXZDa2laZXFBTkJDOVN6QUJGc3RZejF1bEIzNi90RlIxTXpUbldWZ1llMDIzWTV4NVgxRHd2WXBJYXBmaURvSmtpNEtVYWVFcUlVTUxGaUtVYVYxKzFsay9BSlVqR0NjeHJpRTRlWThMSmN6bFV1S1ZnaW9sRk02Qk53UzhDZGg0cTRRY0JuZ3B0dzQ1OFI2RXVlOUtHZStEakFwdEVTWkZwZnhsaHorb2h4K0hjQTI1c1pDOHJYQkFjUkV6dWtjK2RabzdPQVdVKzRUWldkdFRyWmtQdGt5WlpsdFhsOHdGSzl1YlU1VWgyWXByeThVcWs0MHQxYkhRMEdmVjIzc005TWJoenV5S3AzZWxLeU9oeHM5WnQvOStvWmtiU0ljaVlScjV3L1VKK3RyYTh2RDRWQnRJcG1jZXZmSlZjcGN2UGliMndjV3FVQ2d6SjZwK3FrM01CNkNoanFITzhObjFGSDNZS0JRNjd3OEwwTHB2b0FuQkx3Z1YraWdCbHk4SzdSUThvMXpzWTdwLytwSUhxVjArYk9sa2JJTDBqVk11UmN1eU00QUdRS2NuWFJEdVhVYVZ1Q2RnTDRSL2tkMnRjVkdkVjNSZSs2OEdEeTJaKzU0UEg3T2pEM1ladngyaHBreFk4eVF0Z0VjQWtZMTVTR0xKazFTRUkwUXNTaTRRYWthVlNwcHBTcEZxZ2p0WDZzVWFEK3EvaFFEdzBmelVTQWdWZUVEREtHMCtTbkdRbXJTai9Cc09uVHRmYzYyTHlUb3hHdjJmWnl6OTExNzc3VWJCM1NTVW1xS3JXMkFkU1cycStJdW9iN1VTYm9XL1cwckZuK3dINEJHZklBOUFpNEx1Q0VDKzVLQVJ3THVDbmkyM2xQUk51QXRuYUtrYmh3dFN5NkFpN05ZYzFnc1MzWURURXZ5UGhDbVhvVnNaYkJMd0FVTmlHc3hjQzJtSDVpV3k4Y2hEMDMrTkV2L2E1YjYzeXhxTXkybE04MTl4bWVOSVFZN2RCeDg3UDViT3FWY0lUQ2VVKzVYcy9lMjFtM1ZjaTdUSjY0RDNNSGl5NitMNHdjRnZDNnVIUkJ3UWNDY2dPc0NGdUp3VGZ5N0orNVRRQTZLK3hmazhweGNwamljd3JLZmlvVU9nYUxFb2c2bVdKR3hHa015dGFvMjNkTHlCWFc0TmJuMmhlVVpWVmovMGcvemVhVkdWcjc2eHRCQTVZT2U3b21PVEtaQnBkZXV5TmwyUHYvMXlyK2JrVEZqQjZaZkhGUDIyUHJ2cFNieUsxVjFWWTFGZVFENldXcVYvUmhFdkhZT1lROEFlSHYwTktCdTZiOGUwRCtGdjgzNEc3bWxjWUxHeWs4bEhjWUYxQW9ZZkNwQlFwUVBJVmMvYXlGRGl5dGpQR1R3dUF3cE1xUjBDclVnSVpMYzB5d2NJWVR0dy9nYlJzSkUyQm9LVS9ycGhBa3dJZitGOVFXV1oyYzBuY3Ztakp6TlVrVUttR29WODdlcWJDd2RTUi9hdmR0clYxZTNOQStHSTVHZ0Z4bzFIUEg3MWY3OUpmVlJ2aVBUMVpsSU9vN3krQXRWTmVGNHZLbTVzVGRmR2ViWWplTi8vNFFXYUZKcnlpQlprNjQ0ZitHS2ZjWnE0bW9Td1BuVUZhNGRadTROTTRBYURWTk11UHNmUVN5TVltMXhoYzJpR0ZpdXNBWElFSEJGcVpFTWpTNFpVRTJHYXExUlBiaTFtbXRMQUZ2Vm1RQjVyS01pcmc0TG1CRndVb01nTGdXdDk3Rk9ZTTFnZVlteEY5RXdybVBwaHZnVGtaMms0MDZKN0R3bXIxclFuNGNGbkJCd1RBT1NBL1hvV2ZUQ0tOcUVJWGtna283b3ZvS3ZGSStreDB0MkxKTVozdFd4VEpXODN1cUdsNzZaVHF1Uy9WbWwzTlBTQk42ditrN2xZelhZbm1pdEgxVDI2T2k2eXVmVUQvQnRyUGZzbXh5RVBlZFFOd0w0Ujh6Mmh6V05BbUgrTUQ0TUJFRjhzeUFkUDRBUEVMVGV3VHFDNVZuNEVGNktxdGNWZHo4Wi9EcnVYcE1xOXEzQklXSmJJQnRKdjFlaS8rekRXMjVWYkV1NGd2Tjhodk5zUElmakJRQzhQYnk3RDd2N1pIY2ZkdmRoZDU5cjk2L1F3Q2FEVGJ0anh5eEZDT0g0bjhQN2JJRHo5OUVIVjlzZmxwR09DWENTR2h1ZXZLVWJYQTFUTXNFOWhsRDZDb2xIcmp6TDhWWEtWbzVtSE5BR2gxc1A0M1lzZTZkdWg2czFYZDlCV1RhdDFJQlBCZFFTbUdLNnI1R1J3VmorSTVZUEJmeUdnYmpaUmw2MXVZTGNTNFplbDJFbEdWYTZESzFrYUhYUmYzRkVlenAyYkZnWnBnNUxCYVBoU2huYXFkZXl5RTBQWGltZUd4TjEzUUs2TG5tdWMyWldWTjFOcTFPRDkxSGp6SWd5cUJ2bVNZRFRXQmV4UEhwbUdkUThQd294Znh5TE0rUThUd09jZFZscHdubkx6Rmw1YVdBRk5MQ0NwRlJScGlJRGpsb2owcGhHOUFNbkFVNWoyZnJ5S29vcmk5b3E2VTZkK3BESGNhWlRXT2Zsa0F0K3pEN2owTUw1Nlo2czdKZVZvMlQxeHJkeDVIdFl0bjZ5SUU4V3BBb1U1UlZGYWYvbTdPY0Z6QWc0dGdqSWdiYUlXMTR1VkFYWHoyd3NubmVWZHBhYnBvckVJdlpwcjc4NkZJc2xjNWx1VkE0M0hyVURvYVdPMDl5ODNJblYxZFhWMXZydGFIZG1kRk4zUmsyME5NUWp6dEpnYi84cmxibG5maDBlR2QycWFpS1IydHFxcFY1dnFDcFczOTZmVENnMTBMK3g4bHVkZStvZnlMMlVtaW1qSWFXa0g2UzBWNjhRbU5MOTArYWVTbTJOY3RBRFBucFJFWkthanlYcVpycFZSUGtKMHBDT3RJcDJhUlh0cnVUNVN2ODBqV0RSa0NSRDBwVWFSclZ5cS9EaDFpUzNDdXBLRFF2aWN4NkY2aUVXZjkxM1VUdk14NjhSWHRmaWU5YnF5NGRGVHM4STJFMkEvQ2pTSUVwZ1VzQXVtbSttZURocUF2T2E5Q3Uya1BpaHl6a0dGbzhlQVdnc2M0SVpPY0hDVVk3S1hpY0U3SkpOM3hYTGFRSERzdnNOR2FvS3N1RjJCbEdpVkZZb3hTelNyT1BwQmovR1FaMWdLT1JFVzFxNnZwM3BLalczUHIrbDNRa3NLUkUzSmgzSHFRMEhnNnFRMzFvcHEveFlUMGJaeGVaVVczdGxUbVlVMnd0KzFGcEorOGRsTk1xd1pzaVBBRXl0Tk9CbEJ0QTRZYXBlUytqRGZ5Nk50VVJBYTJOakNiTUZVd3QvTzc3N0Y2aWtmRzBmQTZGSkhYM3pPaGNyakJCakV0aTQwZ0lTeUx6aU43L0xHRzAxd2d0WXRORFZHbVBUOVhFYm5qYnpxbDl6STRDbjRsZzJIWFVIQUYvK3ZSU2tzb0EvaXp3L0xtQ2IwSXVHazBlaTAzTWt6NmRZS2p1YU9oOEIzTURpaWVBQ3Z1MHNTd211T25IUjRuR2hSMXprZDF5R2swYlVxMFo1MnNYQ0hMcW0yU21oZDdvRThBbVdyVStWeEttU3JJSkkvTmpZenRhWGpzUDVVektyYmRPUldQRFpCMUNORDJIR2t1MUM0VHN5Z3MzS0FISlJBeDhJNjZBSE96cUdQRjlOUFNYRFlEMGpqaTF3K3BLQVBacmN6eHgvSGtkL3lNY3YwQ3dCb3VlRTRTdE02YXdMOE5TeHQ3ZDdZcUszdTd0M1lxSzc5NFZpOGREYnhlSGg0dHVIaXNVbmt5T3JsVm85TWprNXVrcXBWYU9UZXplTzIvYjR4cjF2Yk5wczI1czNJUjVqVC9yVmY4SDFWaXR2LzdFTUV1YzExL2VSU3RuSmZEYmdZd0ZyQklRSlRQR2xQS2RCSHF6TGNhVWs0WjlEL1V4ZTBZcWtUOU45SDBLMXlQSUVrVHJoWW5tR0RCbVhZWWdNUTY1aW1DTkR6Z3FUSVlQM0xtR2RNQVJVejJ4dncrTkRuQXNyRE5LODMwRzVvaGxVeFNLQlA4b0hlaUwxZ1F3aDlEa3pwODdLblBvNytkQ241RU5mQUpqVlZLWW1HNVVoMDRDMWVzajA4U0E2aThYMzdaQVBmZDdxMXBkM0EweGoyZnBwWXoxdjlhRC85K2pQUHdkd1gvL3d3TGNlcWNJRGVPK0F2dVVPd0FQOXc2VUtIa25ydjh2QWNqdC9HWTdmMU00VDIwSmdXMGdyMnROd2l1aDhIY3VqaFVoVXBJUUJWN1Z6NUlZQjN4TEhybW9YWEI3dUFqZ29IbDZsNHhPSWFUL29wVDM2dmpzQUQ4VG5lVGp6VUJ6NkJJQWZ1aXpna3JqNGR3WWRicG5CZ3lJSmkreHp1aXNvNkh0M2c2QmNhZS9DR0tsbWZBRW5uRWowZGJlME9rNGdxTkpPYTB0M1h5SVJkZ0sreWk5TFh0c2Zxb3FpY1N4Lzg3bkJGYms5MysreFMwODZPenNUS1NjYXJVdWxsblV1Ry90R0tocUxSUk9wemc2VjNsa1ZqVVFpMVZYcXhiSHAvUnMyMks5VnJodDlyMGFRVnczVzM4b0ljb05vakFidHdoRUdVTGhnYnR4b0M1NHlRcmpIOFBCUEV0N05ES3lucDRyRkpBbVNJZWd5eE1rUUY4VVF0T0xjRW9JOFZOaG11UHlyVVBvNHdDbWg5RFZoL0J3RGk2dWlNYzB6V0d5OTlmRllaOXF2WTkrcTBISkx0dE9XR215TXhobzdHaHBxYS95Qmt2cjV1cDVYKzFJcHBYeGY4NnVJazB5a085SmY4dnpUL3VRTDlScmlNMnlmcGc3bTZQaThLYlg0ckZUZGZid3JqWU5ud1lNbENGUVRTa3JUd0JuTGdTWE5vWE5RYUFxd0ZnWTRha1h0MkRqQXkxanMyQlcyU2dqcktVRDFyb2lac29LSVVXaXBrQ3pGOVp5V2Vmb3NaVlJwYlRwak5RK2NwVStDcmV0NVBpTzBORXlseThhand3djNEUTlRc0FQV0g1Q0ExSzB2a1hyVTA0bFhwSTd4ODZjQ2ZpMWQ5UzdxNjJNc1d5ZHpWRWFQcUR4cHN2RHhZbDRtcFI0bHBadDI2WGV0QTlpR3hlOWFoM1B5NVduSnd0dW96L2V3YkoyNmZVamRQbW00ZlNndDVzZHRxeCszOWNzTU1TUjljY2hRNWFwNGRWNEt6Z21BR1N6N0tWOS9KZUJuQXVaRlVNMkpldzhFNU1XOSt3SXVpWHMzTmFBcHNBdFRvSEh2cEhhYXFuRkdYLzR1L0R3Z3RaUmNNNFd0VDE3Y0p6cTRUd0xZSjdxa1g1enMxKythaDdjUHNkQ1c2K05VYXpxN0Z2N2xaTUJCVithaUZLc3owdzc5b3dya1Q3ZDNGWllYTnd5MElTZVdMUnVLbzR4RXFxcFVkdWo1K3ZULzJhL1dvRGl2TW56TzkrMTlGOWdGbG1XQmhHOVpDTmRBQ2dVa3hrQ2pTU0FKZ2NZbWs3U0prYkJMV0NVc2dVMEFNMlA3STgxMG5OSEdxWGFjdG1NNjBSa25Paloxb2pXWFRveU96VlJITGFNZEx6TVVtekZXNG1STUo1Zldhc3Y2dk9jQ0cwaisrYk44ODNDZWMvYmMzOHQ1MzJpWm8zWDFBOHR5WEc2dk56YzNGQ3BvcktqZy9rRFJKOW8zclhkc0t1WGhVTzNLb25DKzErZkw4UWZ6aTdkWXBVaVdXa004MSszM0YvbXpzN3dlcjhjWGpFYlhWaFdYQkNLRmE0V2Q1Y1BPMm95bjJUSys1Z0txVHVpbXJWYjRGSzZkQzVjKytXWFJjcFp4V0JPYlJwUUtpM0kxaUI0cUhCZGtqK2hhSUxvV29HdG9XcGJoS1RtMFpBb2Rja2d5Y3RKU2FYZkZEY3JVd21ScTRhV2g3WktVU0R6NkpiQXFMdXlMRWg2SFlMUkt3WlNPWjIxeW9VNlpQTmhCL0lqWi9GSmpFeUNUMm9aMmlnQ08zV09VVTR3WUJDWW8xcWZPWFZvajVTZ2VEZVNMeHlVa2hTamxIWWcyTnpXM0JwdDRiY3FmVTFGV2FQUG1COFBWaFNHZnh6UmpzZllVZjMzdWxXaGgyUGVnelc3UHpnNFZMbDhlNVRVdFJ3cSt6b1JzdGtJMlYvZ2NLK08zS0hKUlByQ2RNZ0daVlVaRXVoREJ5Y3VFbzZOc05PSVhid1c5SmRJemtoL01rMG5uQ0N2WHowdDVocnZMcFF2TnpiamhDRFZFN25QbG1YbXFlRUpzNkdvdVNUckpWaDM2V1hmSzhPUWRrUGQwRXJnQkw4ODlYWnZKZnFESktTMjFyNEE4cHpQVTh6b1JQS1FWcm5raEgxVXRLeFp5eEdMdEZrcTBXeWhSY3A3VlNjNDFiT29EdmJHdzNDN0oySzBqZitWenlTSFJMb1h5UElWdGZFdnY2WnplMC9mMWxta3JoM1Y0UDcrZFZrMWUwL3Y2b3lhWDlRYi9KRWlGSXhSdDFnOW9GT3JVR21oU1NpYkNsdVpBRTMrTDJ6OWxPSDArRVkvc3FhN203Y3RLT21wRnJPSnNuMWk5OXJGQUlOZWY0L1pTS3NzM3pQMjZxN291TjFCY1l1SEpMWkk2NXNhL005QXhKN2N1VUlxS0ptWC9UQnMxRjFwR1ZtVk1DNU0xdEdjZ1FtcmcrcEFDQ2M2WTBBS0duczVwc2tZb25aMDlnVFdPQStJZTl1b3JQYTNKRFUwNk5KbTZxK1dnMWxJSHFad2pReW1WRGk0MGNHcmdPcTR4R1pmdnM1djJSa2ZaVEVUS1NKR3JtdHdTUk9xdGs0WlMveXBOS2tsUERrYWlabE1lUHM0Mi9YRDlWNDF2ck9OemN4djVPWG1QTHZ6N01lN1JhN1JkUUc5VWNZL3lMampkMmwrMVAvMjhJQlJHaUl6blVickVnL0F3aUExWUd5VmNnSG53UEpabXpDSHUwNEU1N05NaTFsRzdiUmNub29nQmN6aWhYRFk4Z3paWUZNSUgydTkyNGIva1NPZTBjQlZPTWNDbEI3Z3d3SVVCTGowQWdzZWk3dmxGYWVQZWFTRXhyMXkwbEFqbThPaU5lL1RHUGRpNEJ4djN5TWs2NENuRXRlVm9jb01JMmNRSmtOT0Ewb1VzT2ZOZTNXOUt0M1JvOG9RZzdHNEJMMGpjUmcyMmpBWVBOWGd5SEpXTEdseFNKeUJONWlHZHNMTmpxRHdMcUFUTWxLdDFhbkpWazF1QzBNVjR0RHFkaytwSjJaSWJ2a1FwZHF0dWRZQVVVQ3V1azJHMFcyU2IxR3FxYk5PT2w0VGhKV0hTamV6SGorT0FzU2V2c2luVTJ1VE1pMVk2b3hkT2JwMDgwdm50MDF1UFBkM0ZzOSs5ZVBIZHVadlQwOHBtMDFYQ1pndU54dlBRbHBCOEYwNW91N3loU1pmUUxaaXRlQkN4VkJ0MjFxVmQwbm50S3Irb3lhT2FuTkprVnBQTGd0Q0pNRnJlUTZId0VEUTdXYUY0WDlxRXdVQXNVMklTRmUyZDErU0FKcnNXd2x1Ym5sOUZoRGR3bkRSZ3lBY2hKSjZ3RUE3Z3c5dm1heUJPYjR4UXdVMzAyTkM3NGdZSkE0WjhGb3UwMWhWcEpTclN0bGVrWFV4bXhxVHlvUVV0V3BKQ0tiWHl6emVvREFGcUpSNE01U3RyTkxsSmhCYTZwTWsvMVFWeXpGc2dML0RuMmlWOFU1TmprdGpaZDBET1VGOXF2YUovbmxJUkdLVVNBZlhNa3Y0NG9UL3E3VG83bjVkTmtNbFRVMEtUbjRyZld1SEJUUG1xSU5aRTRFbkpXanMzbTk3aXo2ejdUV0I1VGpCWUhJMDRFR1A2Sy9QenM3SitzbjQ3UC9YUks2M1ZDQ3k1cThVMFRGNjZySEdsWVpPNmFPSGZDOUJGTi9zek9WMG1kYkZISC90bm1pUTFHZEZPYkpWMnkweVR0K1ZQZGp3WGR2WWlZT0N3ZGhIaFVXSkhMb2tpSElOQ1JSSHRVYXVkZkJ4YW5RM2FXZEZVYjJpdkpkMFh1OStUNGFZR3QwenNaUFRJTUplSjJlMHlsa1FjMmNvanpaRWdqd1FSbERmTi9ZV1B6UDBXNWRGbS9reEx5OXh3aTd3SDRQSDB0cG5ydjlxYnMrWU9DNXV6MVB5TFg3NjJScGFYdjVZZVREdk1XZk1FcW5BT1RJMHkvcFYyc05mTldmeWF3QmpPN3ZyalI2a2p2NjFxQmJqZFdaWXdubWVONEVOQURSQXk2dGh1WXllckIyL2gzYXdhNVQ1ZWtMNkM5Z2JnQ05Db1FIMTNBQzNBYXFBZWVFRDJSeHZtVUdqQW1qdE1pMVZoclN6MDZVWFpCdlJTTzMrVmRSdS9aeDJvNzJRenJCdHJaaHY5YkMvYWU4MUp6UCs4K0wyWitsS0o4VHZCVndNZS9QWXcranJNbDVrYnBSUHdvVDJJOWRmVG5sRTJZUDFHY2VhWjlJY29WMkI4RithdVJya0s5U3FzbDBjYzZNSDZRUG9xMmdVM0gyS2IwVTZvb25GaVREZmJ6SjlFRk4zTjhsSGZpcm5jcGdjUno2dk1SUnl3c080S2NaWUNac2Y2MkF2clJOOHczUi91L0hHVUd3bFk2eHJxZE8rVk9Hc3o5Vk45Nlo2UFlCOWJhTzlDL2pQcHY1c3pyQU8vVjZGdnVUanJrK3c1OU9zSFBnMFVBM1NXWGVoN0cvZGR5ZGNMR1QxR2NxQTYydS93NDZ5RzZ0Z2YzV1VQK0NyTXVSdDFKMC9JL3JTdWtOVTlnTFVaeVUvSUxnTjB2elFublluVzEzSzdCNVlKdVdVQyt5RFozQXVRUVQzSlM4Z3FBMHZXVzVEVDNkZ3A5Skx1WldzbVNGWW90d3RkZ2p5RnZCSnNKVkFHZEp2cjJFYmdrMEF6OXVqRlBCdVZmcEhPVjZueFhSaVhvK2JQSXgxQVBVdnAwVFYxenozc2UrbEIvSjROdm9uMlNuSVRlZ3BkUWYxdDRML3FMUDhnUUI1ZWxIK2p2c0F0a2h0d1U4NmRua0haQ2F3RTJveUhXUzFncWJJVzgyN0h1blhHKzlDck5Jc1lOYkRIZjZmZk4vWkQvOTVnbjBHZlhlUUhqSk9RSitFNmJJU3dHbjVFN3JPSDlHR1IzTnNXb1hleC9KVjlkdHdGMkxTMDYvUTd3SHZxL0I5bDJuZ21oTTVvWk9vTWJGNUQyWDRtUEpsWW9sc0t5a2RJL3lDeG9HZWtYeGt3ZHNNZlBLajh3eUlvWDVHSkhzQ2haSWN6cGo4UVBxUjczbytzNGRtaUxPYzdSTi9OOHhoTTM4blVWZUZidWxrRnNFSDRtRXg4bHVXVHo5RllyTThheWhkSlB3UVl1ZERySDRsMXp3Qmw1UGRKbjhtM1F3MitlOS92ZDd6Y2VJRSsyNUI5WGNiM1ZPYm51T1M0NUx6a3V1UmU3djRDdnV2eTgxaStiYjV0MlkwNWpENy83Y0FJdnJuQVhONlhGbjlCSTJnVTlCYVdoTThXN1NqYVVWeGVQQ1MrRjVkOWJ2bHc2ZFhJOGNqeE1pdjZadm5KaWpkWFRLeVlxSHlwNm5iMXhNZmZ4OS8vKzZOWWlSOWxMeUc2RmVtRUNKRThzQlRtVEZEZWc1b1BLWjZLcUl4VEtrcWpsQ3lJbXVRMjhJdUtPOEQvb0xpVFBXdk1VakpqY3lNNjNXWitXWEhPYWx4VGloc3MyL1VmeFJINnUxMksyOEFiRlhlQTcxYmN5ZXZjeDNyN1JsTldjc0JLRGNhdFdHSi9JdFUzTkRScHhZZjdrN0Y0ekRyUTF6K1lHSTViby9HK1dOKytvYmlWUEpRYW9vWllYNnJQR2tpT1dpT2p5ZGloL3NUd2ZqSERJNU1qOFlHKy92Z1l0UjlPMEJTSk1hcy9PVEk1bXRnL21FTDFsTlc0YWxXVHRaS0tGbXRMWWppWndoaHI0NEY5blhYVytQaDQvWkJxcXU5UEhxaTNIaG9hc3NUUU1leGhMRDU2T0I2cnR4NFp4S1JqeVlIVWVOOW9uQmFncGJIZ1NIdzBOVW1IV1RSdDN6Q2RaTkpDbzdXUERpTTNIWS9WV1FlU3NjUkFnbGdzTWRZL2xCekRGbkdxMUdqZjhOaEFmSFFVMWZGRWFoREhGb3ZFSjBhd2pURnIvSC9zVjB0djAwQVFudklzYjRRUUFnSENKeEFrTFMwZzFCd0FSYlJRSktSVzRTR0VrTkJpYjVPbGlSM1dhd29IeEowL3daa1RYSkJRRHNBLzRTZndFK0NiMmJXVHRqektBWWtEdGV6WjljN09mTjgzWTlleHhqbWRScXJQUEZWM1hkTEo2R3BKR3BTbkd6TXpkVndiVTNLOUVEV1RERUJ1UGMrZDd1WFJEYWh0KzVsVmp0a3g1WmFuM0tvb1g3T0ZNMjF0bWExaWVJbnVLYnZNZWVjMWRPNCswcGFYWjIwUkwvZFVMbVZMbytiMU9qREgzU0kzVHpYcTJqV3hUcG1qNjlpc2FIZCtwcFNvMURhQXh3cVlOSW9ocllKOVhGaVRKeVoySmt2elVBa1hpczdZTWxBMktRUkJXNjFrSG1BenNVYWxGUVhlaFFiU3VXbW5aVEtvNkhUc2ZwVnJjZTd1L1AyRldobGw0aVpMdFBHYi82YUF0RWlLTERsOHcyVzBoS3VqRG1uWWhBeTFjVHFzZDNFOHh6MU5LY1h3U3pCS01POWhMWWEvd1gzZVkzRlZXRkgwQ0R1MHhDd1FvVnQ1OEJwSGpKQXJnMzlFZlZ3NVlvRkk3TlVld1hBYldmc1lMVWtlVFhubC94UytKUW9qOXhsWEgvNVdjSGNRdzYrK3dYbU9wbkNjeDJpaW1sM0U2S1prek9EcjgwVDROZE1EOW5tcVk3d2l4MlJBUC9TYWxGdzkySWlhb2swMGtqVVBPdVE0TFhBeWlrbmgwZ2xJYzFIYUliWVN6NUpCeWRvejdNdCtKN3I3eXZ3YXJjSmFXUlBlNHowanJKZVZHVldhVWRYRk81TktMK0VzN3lXQ0p3YXZURmdrZ3NBS1FpdDVjdmd6T2h0V1Y2UlBPcUhhUXlhYW5rbFdWaU1YUHl1ZVRqcUpNZmVyZWlyUjhYZE1XY21yNnlydHF6eE5EWnJCVVEvakJxbzhIRitRYWlYWTZ4VzVoUWk1SU9rSnRodWh0eTFpWjhMVFZiVXJxOXhhVmVYV0Q2cDhEVFBXZ1AyMGFPWnJxeXIxRXNuSWxWK3UrTTdqbnUvbnJxQ3oxZTVaaVJmRGwvZmtJMDliS3JpdUMwUFdtZXRWd01NSUd2KzhjdWZHNGx2V2tTdGpwVTdNNDA5N2F0aExiZUhsQkdYNUZLYnlGUHF1VldIK0dKbXMrQ2FDaFpYSkJNL3FaOEt0ZWRKTDNiSlFaWTdtTzhTL3JWWmtaYWdnVjVZOWxXUmRXNFV5bDM4RGFWR3BMWjZybWZsZVpGWng5Zjc0YzE2TE5FZDNvZUI5L0Y2cXJjTXlJWnI3TG1xSmtnVjRNYXVONy9zYm52ODdkK01WM3V5L29MKzl4LytTSC94OUlHZzl3SmZ4TnRwVUd4dmcwM2s3RHo3QzNNTjdwa0ZuNkFpTjF6N1NPT296T3QrQjdLUHpuZkJmb010Z2RGVG11OEQ4RHQ1L1UzUmM1cnZwRlQyQnp4VTZLZk05d0hNYTJBL1RYc3lKUCtPWDBQak5LdUFtZXJBcXdlWTFBTFlnd1dqQ3JXc1NiS05MU0hHS2p0RWhUakJBbnEyMHZRYkMwZHdMYzNoMmdGTHNwN0Y4UU8rQy9SenNGVHBBWTI1QUQ0TjlHZXpyWUQ4Rit5WFliOEdlWUZ1RS9VWFlYNFQ5Y3YrZ3hNK0MvUkxzUHJiWXZ4RHN5MkRmQnZzMTJCTnNpK0FuOGIxOUcrS2NsZmwzQVFZQVJpQ0d5QTBLWlc1a2MzUnlaV0Z0RFdWdVpHOWlhZzAwTVNBd0lHOWlhZzA4UEM5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlRHVnVaM1JvSURReE5ENCtjM1J5WldGdERRcElpVnlUeTJyRE1CQkY5LzRLTGR0RmNXSkxveFpNSUNRdFpORUhUZnNCanEya2hrWTJpclBJMzNldWIyaWhoa1RIYU9icVlJL3oxV2E5aWQxbzhyZlVOOXN3bW4wWDJ4Uk8vVGsxd2V6Q29Zdlp2REJ0MTR6WHUrbS9PZFpEbG12ejluSWF3M0VUOTMxV1ZTWi8xODNUbUM3bVp0bjJ1M0NiNWErcERhbUxCM1B6dWRyZW1ueDdIb2J2Y0F4eE5ET3pXSmcyN0RYb3VSNWU2bU13K2RSMnQybDF2eHN2ZDlyelYvRnhHWUlwcHZzNVpacStEYWVoYmtLcTR5RmsxVXl2aGFtZTlGcGtJYmIvOXUyMWJiZHZ2dXFVVlFXS1p6TmRsQi9KaitBbnNvWlVKV3RLMUpRbHVRUmJzZ1V2eVV0bE81OVlGMlhXVzlSYjFsdlVXMGQyWUNFTCtKNThEMTZSVitBMWVRMm1tNFdibzV1RG0rTlpEbWM1bnVWd2xtTytRNzVqdmtPKzBGUGdLZXdWOUFwN0JiMUNUNEduTUVlUUk4eVJLZWVCL0FDbXM4Qlo2Q3h3Rmo1YndiTVYrZ3Y4UGYwOS9IMUJMc0QwOGZEeDlQSHc4ZlR4OFBIMDhmRHg5UEh3OGZUeDhQRjhMN3BnR0s1dkhXT2gwMnQrWjY0NXA2VGpObzM0TkdlWXNDNkczNjlnNkFlalhmaGxQd0lNQVBPcnpXZ05DbVZ1WkhOMGNtVmhiUTFsYm1Sdlltb05ORElnTUNCdlltb05QRHd2UW1sMGMxQmxja052YlhCdmJtVnVkQ0E0TDBOdmJHOXlVM0JoWTJVdlJHVjJhV05sUjNKaGVTOUVaV052WkdWUVlYSnRjenc4TDBKcGRITlFaWEpEYjIxd2IyNWxiblFnT0M5RGIyeHZjbk1nTVM5RGIyeDFiVzV6SURJd01ENCtMMFpwYkhSbGNpOUdiR0YwWlVSbFkyOWtaUzlJWldsbmFIUWdNakF3TDB4bGJtZDBhQ0EyTkM5T1lXMWxMMWd2VTNWaWRIbHdaUzlKYldGblpTOVVlWEJsTDFoUFltcGxZM1F2VjJsa2RHZ2dNakF3UGo1emRISmxZVzBOQ2tpSjdNRXhBUUFBQU1LZy9xbm5aUXVnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQW13QURBQXF3ck5ZTkNtVnVaSE4wY21WaGJRMWxibVJ2WW1vTk5ETWdNQ0J2WW1vTlBEd3ZRbWwwYzFCbGNrTnZiWEJ2Ym1WdWRDQTRMME52Ykc5eVUzQmhZMlVnTkRVZ01DQlNMMFpwYkhSbGNpOUdiR0YwWlVSbFkyOWtaUzlJWldsbmFIUWdNakF3TDB4bGJtZDBhQ0ExTlRJdlRtRnRaUzlZTDFOTllYTnJJRFF5SURBZ1VpOVRkV0owZVhCbEwwbHRZV2RsTDFSNWNHVXZXRTlpYW1WamRDOVhhV1IwYUNBeU1EQStQbk4wY21WaGJRMEtTSW5zMVVGeTR6QVFRMUg3L3BmT25nWEFhRktLWE1uSEtpNjJtbmhjekx4ZWhCQkNDQ0dFRUVLTzh2NmNaVmd0eVB1V3VlSUwyd0FIRGh5N2p1SlV0VkkvN2VYNVlMTWZEaHc0Wmc1Vlk5bHkwalF2YlJ2Z3dJSGpSa2MreUV2elErREFnZU5iSEVYSlVYRWNPSEE4NFNpVStRdEZVS0oySHc0Y09LNTA1QlNpNDcrS0JqaHc0TmgxbkdTNUk5OXIzK1g1NE1CeFI3N0pvZjU1V0c0clR0V3dyWnZuTnFrNGNPQm9ISG5MTXJjYzVKOTJKQysxcHpodzRKZzU3R2FiUERkL0hJc2VFWERnd1BHQlVMUlN3L1kxY2ttMUlQL0VnUVBIalk0c0twWmFxc1hNQ1RodzRLZ2Q3YXEyUy9FdXk3NWNEUWNPSE9jT2RWR3h4ZmJMSTRXb0plREFnV1BteUZzMnUrVEhVUWNqQWc0Y09Hck1IRmhVVTNQV1Zyd2tEaHc0Tmh4cW43MzhlSDJ4TDl0dzRNQ3g2OGdOMUwyNW4vMmlvSjQ4R0E0Y09CcVIrdFoyVmo5dGU3czU3OE9CQThjOWpydytlemVWRjJKdzRNQWgyNnZOdGxVcmY0c1VkVE1WQnc0YzU0NjJaSjVyUnhTMWVEOGNPSEJjNUZBanRsOGVidXNXVDRJREI0NGp4K2h5MWNBdUxUb1hkK0RBZ1dQWDBjWjJ6bk9xbXQyaXZzQlI5V3ZuY1B4VHgvdHpsam4xMDY3S2QxajVpSUFEQjQ3RzBaNnFHdm1nVU9ZdExRWUhEaHlOSTI5UnhZc2E3VzMyY2h3NGNEem15Ri9rZnBzc0hEaHcvSjVqMld5dlZKdnpBdnRnT0hEZ3VNaFJLSE0vZTJxcDZyWmlEZ2NPSEJ1T25MWnpjVkRVemQvaXdJSGo2SDkyUWdnaGhCQkNDQ0YvT0Q4Q0RBRGpUamI4RFFwbGJtUnpkSEpsWVcwTlpXNWtiMkpxRFRFZ01DQnZZbW9OUER3dlJtbHNkR1Z5TDBac1lYUmxSR1ZqYjJSbEwwWnBjbk4wSURFNU15OU1aVzVuZEdnZ056RTJMMDRnTWpZdlZIbHdaUzlQWW1wVGRHMCtQbk4wY21WaGJRMEthTjdNVmR0TzIwQVVQSjl5SHNzRFdlL2E2MHVGSXVWZUJBUXJDU29Tb01vRWsxZ2t0bVVjbGZ4ODIxbHZnRmFxcUIvN2tKMmRjK2JNM21PZkhRNDRkRGxrNVlZY3NkSUJTNGU5MEdjcDJWY09TOFdSOGxpNkhQa0lvdWM0SVVzTjFNZ2k1RVNLSmNxa2l5UlNNa0F3UWlGSVkrQTdyQ1FjSE1VS1V0ZlRHQTBZSW84U3o1VVlGeGg0ckZDcVlhYmdwMDBkL0h6SFpRVS8zL1BaTlVOR2tsRWlBKzN4eVlrNHd3b2Nub2s0cWRLOFhsUnBpdFg4R1ppbUwvVlp1bWNwWnNVbXZVaEtyTlFvRnZzeUZmTzYyaTBiMmF3bzZtN1hXTjVnOFJDWXhUZmdXdkFzYUF1K2hjQkNhS0V4TnN0dXdMb282NktzaTdJdXlyb282NktzaTdJdXFuRzVFekUzV1RFWDgzUnBwemJkYlo5dkhITkdSdEdFZW5sZTFFbWRGYm1ZbDBrdWVsV2RQU2JMV3NTaW45MXZzbUpWSmVWNmI4Z29yNnU5R0t5VHFoYmpiTFdyVWpITUV1UzNiN1FxeWtGU3Z0SlIvZ0R6VkV4Tk04Yit2TFBUZkpQbDZYeWRZQThQNnN0ZGJXSjJHdGpYN0NrdGR2V0I3dTZmbDFWV3Z0RXlyWDRQTEhCRy9lTEZ6RjVjNVE5cDllYlU3ZjRmeDJHMjJsdzhjeUs5VGYzcHgwK2EwR2U2dmFVenVxSXBEV21FRm5SSU1WMmFUcDk2TktkVEdxQUZQVWQwZ3Q5SDVCczkwbzVTcXRCYkFKZTBwaHo5SHRydjREazlJSi9UcXVtak5HN0tGblJNRjgzNFYyZ1Ivb3J3REROaDBCZ0NneGMwQnM0eDNSNUdQRVZraGtLSVgxUFA5RVFKYlNockpsQ2IxSml1b1pxUWhQVTFhZWc3U0c3cDhRZ1B6OEVOUFR5K0ZidXZkOVZlQnZ1UThPVE9rM3oxYVRnNkhudzUrcXM4UGloVmE2WGJXdWxaNVdoNlBPbC9yTlN0bFg1clpkQmFHYlpXUnEyVjBta3ZiWDlLc3YweHlmYm5KTDMyVXQxZTZyZVhCaTJsUGZNSk1nSFVoUCs2L24zOG9kMG9wVHErWms4R0hjZGpOMmlZOWcyN0U1Y1lkbS8rSStOTnNreTMrRjZKL3FaWVByMlhlNTZEZ3BDRE1PaUUrR0pxWDNjOHJUaDBvbzd2Umg5Wi9CSmdBTlVSM2dJTkNtVnVaSE4wY21WaGJRMWxibVJ2WW1vTk1pQXdJRzlpYWcwOFBDOU1aVzVuZEdnZ05EQTROeTlUZFdKMGVYQmxMMWhOVEM5VWVYQmxMMDFsZEdGa1lYUmhQajV6ZEhKbFlXME5DancvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtDang0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTURFMklEa3hMakUyTXpZeE5pd2dNakF4T0M4eE1DOHlPUzB4TmpvMU9EbzBPU0FnSUNBZ0lDQWdJajRLSUNBZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0FnSUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cDRiWEJOVFQwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wyMXRMeUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02WkdNOUltaDBkSEE2THk5d2RYSnNMbTl5Wnk5a1l5OWxiR1Z0Wlc1MGN5OHhMakV2SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd1pHWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dSbUx6RXVNeThpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T25Ca1puZzlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2Y0dSbWVDOHhMak12SWo0S0lDQWdJQ0FnSUNBZ1BIaHRjRHBOYjJScFpubEVZWFJsUGpJd01qQXRNRFl0TWpSVU1EazZNakk2TWpBck1ESTZNREE4TDNodGNEcE5iMlJwWm5sRVlYUmxQZ29nSUNBZ0lDQWdJQ0E4ZUcxd09rTnlaV0YwWlVSaGRHVStNakF5TUMwd05pMHlORlF3T1RveU1qb3hPU3N3TWpvd01Ed3ZlRzF3T2tOeVpXRjBaVVJoZEdVK0NpQWdJQ0FnSUNBZ0lEeDRiWEE2VFdWMFlXUmhkR0ZFWVhSbFBqSXdNakF0TURZdE1qUlVNRGs2TWpJNk1qQXJNREk2TURBOEwzaHRjRHBOWlhSaFpHRjBZVVJoZEdVK0NpQWdJQ0FnSUNBZ0lEeDRiWEE2UTNKbFlYUnZjbFJ2YjJ3K1FXTnliMkpoZENCUVJFWk5ZV3RsY2lBeU1DQm13N3h5SUZkdmNtUThMM2h0Y0RwRGNtVmhkRzl5Vkc5dmJENEtJQ0FnSUNBZ0lDQWdQSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUStkWFZwWkRwak5HVXdZVGhpWmkwNU5USTFMVFEzWmpBdFlqRTNOaTFtTURReE5UVmpZMlJsTnpJOEwzaHRjRTFOT2tSdlkzVnRaVzUwU1VRK0NpQWdJQ0FnSUNBZ0lEeDRiWEJOVFRwSmJuTjBZVzVqWlVsRVBuVjFhV1E2TVdSbVlqYzFNMll0WVRVd1lpMDBPVEEyTFRnelpUZ3RZVEppTWpoa1pHSTNPV00zUEM5NGJYQk5UVHBKYm5OMFlXNWpaVWxFUGdvZ0lDQWdJQ0FnSUNBOGVHMXdUVTA2YzNWaWFtVmpkRDRLSUNBZ0lDQWdJQ0FnSUNBZ1BISmtaanBUWlhFK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4eVpHWTZiR2srTXp3dmNtUm1PbXhwUGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0prWmpwVFpYRStDaUFnSUNBZ0lDQWdJRHd2ZUcxd1RVMDZjM1ZpYW1WamRENEtJQ0FnSUNBZ0lDQWdQR1JqT21admNtMWhkRDVoY0hCc2FXTmhkR2x2Ymk5d1pHWThMMlJqT21admNtMWhkRDRLSUNBZ0lDQWdJQ0FnUEdSak9uUnBkR3hsUGdvZ0lDQWdJQ0FnSUNBZ0lDQThjbVJtT2tGc2RENEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BISmtaanBzYVNCNGJXdzZiR0Z1WnowaWVDMWtaV1poZFd4MElpOCtDaUFnSUNBZ0lDQWdJQ0FnSUR3dmNtUm1Pa0ZzZEQ0S0lDQWdJQ0FnSUNBZ1BDOWtZenAwYVhSc1pUNEtJQ0FnSUNBZ0lDQWdQR1JqT21SbGMyTnlhWEIwYVc5dVBnb2dJQ0FnSUNBZ0lDQWdJQ0E4Y21SbU9rRnNkRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSEprWmpwc2FTQjRiV3c2YkdGdVp6MGllQzFrWldaaGRXeDBJaTgrQ2lBZ0lDQWdJQ0FnSUNBZ0lEd3ZjbVJtT2tGc2RENEtJQ0FnSUNBZ0lDQWdQQzlrWXpwa1pYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ0lDQWdQR1JqT21OeVpXRjBiM0krQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHlaR1k2VTJWeFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGNtUm1PbXhwUGxKbGFXTm9iWFYwYUNCTmFXTm9ZV1ZzTENCSk16WTBQQzl5WkdZNmJHaytDaUFnSUNBZ0lDQWdJQ0FnSUR3dmNtUm1PbE5sY1Q0S0lDQWdJQ0FnSUNBZ1BDOWtZenBqY21WaGRHOXlQZ29nSUNBZ0lDQWdJQ0E4Y0dSbU9sQnliMlIxWTJWeVBrRmtiMkpsSUZCRVJpQk1hV0p5WVhKNUlESXdMall1TmpZOEwzQmtaanBRY205a2RXTmxjajRLSUNBZ0lDQWdJQ0FnUEhCa1pqcExaWGwzYjNKa2N5OCtDaUFnSUNBZ0lDQWdJRHh3WkdaNE9sTnZkWEpqWlUxdlpHbG1hV1ZrUGtRNk1qQXlNREEyTWpNd056RXlNelE4TDNCa1puZzZVMjkxY21ObFRXOWthV1pwWldRK0NpQWdJQ0FnSUNBZ0lEeHdaR1o0T2tOdmJYQmhibmsrVUU5VFZDQkRTQ0JCUnp3dmNHUm1lRHBEYjIxd1lXNTVQZ29nSUNBZ0lDQWdJQ0E4Y0dSbWVEcERiMjF0Wlc1MGN5OCtDaUFnSUNBZ0lDQWdJRHh3WkdaNE9reHZaMjlOWVhKclpUNUdQQzl3WkdaNE9reHZaMjlOWVhKclpUNEtJQ0FnSUNBZ0lDQWdQSEJrWm5nNlRHOW5iMU53Y21GamFHVXZQZ29nSUNBZ0lDQWdJQ0E4Y0dSbWVEcE1iMmR2UVdOMGRXRnNQa1pZVWtjeFRsZzFWRjh5TURFM1BDOXdaR1o0T2t4dloyOUJZM1IxWVd3K0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDancvZUhCaFkydGxkQ0JsYm1ROUluY2lQejROQ21WdVpITjBjbVZoYlExbGJtUnZZbW9OTXlBd0lHOWlhZzA4UEM5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlJtbHljM1FnTlM5TVpXNW5kR2dnTlRBdlRpQXhMMVI1Y0dVdlQySnFVM1J0UGo1emRISmxZVzBOQ21qZU1qWlNNRkN3c2RGM3ppL05LMUV3MVBmT1RDbU9OallEQ2diRjZvZFVGcVRxQnlTbXB4YmIyUUVFR0FEbnFndmdEUXBsYm1SemRISmxZVzBOWlc1a2IySnFEVFFnTUNCdlltb05QRHd2Um1sc2RHVnlMMFpzWVhSbFJHVmpiMlJsTDBacGNuTjBJRFV2VEdWdVozUm9JREkxTmk5T0lERXZWSGx3WlM5UFltcFRkRzArUG5OMGNtVmhiUTBLYU41c2tFOVBnMEFReGIvSzNycEVVNGFsMHRRMFRVZ0oxVmlVRkJKN004c3lsYlhBTnVNU3czZjM0TllhdlhoNzgrKzlYeVlNR2JEbDBvOEgyeGppTzlTcTZaeG1tUk1TMjJ0MkgwWXp6MSticnNQZXZ2TnZlWkw5eVBPbm9tVHJPeFp2WEk5UVdtMzZSRnJreWEwQUFSQ0pHU3lFQ0JaWElDWUFrNTh0bHhJck1wVzBMRS9TVEI2Um1BQjIrQ1QyYktqMi9BY2NQNXc0UjIzTnE0bVZIV1RMMC8xdUV6enViOG9YQWNIOE1zb2tIWkdubDZJNGtWUU51cXZNMVA5d0NQamx5TW5VZzBJSFVwc0t6eGhzcXl1U05EcVNhVFNOSXM4dnpFQUtuWlUrYUt6L3ZFS1lCeUowSHltRzZnMlZkWG1sdHEzTFhhMitCQmdBS3F0ajVBMEtaVzVrYzNSeVpXRnREV1Z1Wkc5aWFnMDFJREFnYjJKcURUdzhMMFJsWTI5a1pWQmhjbTF6UER3dlEyOXNkVzF1Y3lBMEwxQnlaV1JwWTNSdmNpQXhNajQrTDBacGJIUmxjaTlHYkdGMFpVUmxZMjlrWlM5SlJGczhSRUUxTURCRE9VVkZNVFE1UWtVME1qZ3dSRVJET0RjMk5qTTRSalEyTVRBK1BEaEROVEUzUmtNME5URTBNREExTkRZNU1FVkdNRGxFUVVNMFFrSTJNa1E1UGwwdlNXNW1ieUF6TXlBd0lGSXZUR1Z1WjNSb0lEUTVMMUp2YjNRZ016VWdNQ0JTTDFOcGVtVWdNelF2Vkhsd1pTOVlVbVZtTDFkYk1TQXlJREZkUGo1emRISmxZVzBOQ21qZVltSUFBaVpHSDJZR0pnWm1IU0FoNEFJa0dQdEFSQ3hRWXY1aUlJdUJnWEVBQ2FiblFJS1JBU0RBQU5uVEJFc05DbVZ1WkhOMGNtVmhiUTFsYm1Sdlltb05jM1JoY25SNGNtVm1EUW94TVRZTkNpVWxSVTlHRFFvPTwvRG9jdW1lbnQ+CjxEb2N1bWVudCBNaW1lVHlwZT0iYXBwbGljYXRpb24vcGRmIj5KVkJFUmkweExqWU5KZUxqejlNTkNqRTBJREFnYjJKcURUdzhMMHhwYm1WaGNtbDZaV1FnTVM5TUlETXdNRGMxTDA4Z01UWXZSU0F5TkRnd01pOU9JREV2VkNBeU9UYzNNUzlJSUZzZ05EVTNJREUxTTEwK1BnMWxibVJ2WW1vTklDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0RRb3lNU0F3SUc5aWFnMDhQQzlFWldOdlpHVlFZWEp0Y3p3OEwwTnZiSFZ0Ym5NZ05DOVFjbVZrYVdOMGIzSWdNVEkrUGk5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlNVUmJQRFl6TlRFNVJrUXpNMFpFTURaRE5EazRNVUk1TVVFelJqazVRak5HUkVOQ1BqdzRRelEyT1RBMk1qbEdPRFZHTnpRd1FUQTJPRGc1UmtSRlFrWXpOVUpHTmo1ZEwwbHVaR1Y0V3pFMElERXhYUzlKYm1adklERXpJREFnVWk5TVpXNW5kR2dnTlRRdlVISmxkaUF5T1RjM01pOVNiMjkwSURFMUlEQWdVaTlUYVhwbElESTFMMVI1Y0dVdldGSmxaaTlYV3pFZ01pQXhYVDQrYzNSeVpXRnREUXBvM21KaVpCQmdZR0pnQ2dJU0RGT0FCT00rRU1FQ0V1c0JFcEZXUUdMaE53WW1Sb1o1SUNVTWpFei9HYmYvQndnd0FJKzdCK0lOQ21WdVpITjBjbVZoYlExbGJtUnZZbW9OYzNSaGNuUjRjbVZtRFFvd0RRb2xKVVZQUmcwS0lDQWdJQ0FnSUNBTkNqSTBJREFnYjJKcURUdzhMME1nTnpNdlJtbHNkR1Z5TDBac1lYUmxSR1ZqYjJSbEwwa2dPVFV2VEdWdVozUm9JRFk1TDFNZ016ZytQbk4wY21WaGJRMEthTjVpWUdCZ1pXQmdpbVVBZ3RnM0RLaUFFWWhaR0RnYUJKREVXS0dZZ1dFZkF6OVFpUVJiYWZzQmtRTlE1UW1QSURSakZWd0RDd05ETVJ0VTFBMGd3QUNxVkFoVkRRcGxibVJ6ZEhKbFlXME5aVzVrYjJKcURURTFJREFnYjJKcURUdzhMMHhoYm1jby92OEFSQUJGQUMwQVF3QklLUzlOWVhKclNXNW1ienc4TDAxaGNtdGxaQ0IwY25WbFBqNHZUV1YwWVdSaGRHRWdNaUF3SUZJdlVHRm5aVXhoZVc5MWRDOVBibVZEYjJ4MWJXNHZVR0ZuWlhNZ01USWdNQ0JTTDFOMGNuVmpkRlJ5WldWU2IyOTBJRFlnTUNCU0wxUjVjR1V2UTJGMFlXeHZaejQrRFdWdVpHOWlhZzB4TmlBd0lHOWlhZzA4UEM5RGIyNTBaVzUwY3lBeE55QXdJRkl2UTNKdmNFSnZlRnN3TGpBZ01DNHdJRFU1TlM0ME5DQTROREl1TURSZEwwMWxaR2xoUW05NFd6QXVNQ0F3TGpBZ05UazFMalEwSURnME1pNHdORjB2VUdGeVpXNTBJREV5SURBZ1VpOVNaWE52ZFhKalpYTThQQzlHYjI1MFBEd3ZWRlF3SURJeklEQWdVajQrUGo0dlVtOTBZWFJsSURBdlUzUnlkV04wVUdGeVpXNTBjeUF3TDFSaFluTXZVeTlVZVhCbEwxQmhaMlUrUGcxbGJtUnZZbW9OTVRjZ01DQnZZbW9OUER3dlJtbHNkR1Z5TDBac1lYUmxSR1ZqYjJSbEwweGxibWQwYUNBeE9UQStQbk4wY21WaGJRMEtTSWxVajd0cXcxQU1obmM5eFQ4ZUZ5eExwNDZQaHhCSWJBOE5CRHBvS3gxQ0xxVWhGeE1DNmVOWGJpN1FTWi9nbHo2cGVNZDRYQ3lhdHhhQ3lXVFdOaURGRnlYaGlEU0tuQ3JvcTdLVTBNU3h4bmxEMnhlYUdZbW5Dak9Cd3JhVUM0dlVzQlVjdElKZG9TUFdpRng4OFEzdk95dFBpZzhkNkNOTXN6eHhRbGl2djdNOGxxd0lsNndleXJNL0haZjdCMlBaOTV1alp6OXQ3Z2NNdHNFVWZqTGJrU3E3K09iN3d5aktzZnhuREJpU25WRzM4RWQvQlJnQVhJZzEzZzBLWlc1a2MzUnlaV0Z0RFdWdVpHOWlhZzB4T0NBd0lHOWlhZzA4UEM5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlJtbHljM1FnTVRJdlRHVnVaM1JvSURNd01TOU9JREl2Vkhsd1pTOVBZbXBUZEcwK1BuTjBjbVZoYlEwS2FONmtVdEZxZ3pBVS9aVThib3lTYTZ6YVFoRzBuZHRnNjhOcXAxRDZrTm1nZ1JnbHByRCsvV0tzZHV5MUpIQ1RldzdubmhOQ0NBSkVYTE1CclZZNDZnb21OWEpnRG5oTjIxZkd5MHFqd1BIeGhnM1F6Q1VlVGdRdE8rUVNuRFJTeDNIemM1ajV2bWN4UkFEQUNod3RtdENhaTh0RHBEZ1ZqME9IQzBhUXN6U0RQMjFqUzJ1R3MzeWZiMTZlTE84anRmMmRWa3dYRmQ0MnFxYkN0ckxCMEJ3QXYya3FlQkhKVWpBRWVLZFovWVVXQzV4ZVdtYXB2V0hGVzkwb25GOXplTTR5REUzS21IYXNwL3dmK2l5TDVzUmxpVE11STlueDZaNXcxZWwxUmRXWStTYU9DTEZCM3VtVjRSRGo1dnl0ZXgrcE9qTnJLRzMya2hzeFpwN0gwaWViWnRaSlY5MkJCQXNFZHk3ZkQrNVU4RHgvcXVQWi9BK2JjYXdqOWdlZnZIc0F4ekQ4RldBQWgrMmYwdzBLWlc1a2MzUnlaV0Z0RFdWdVpHOWlhZzB4T1NBd0lHOWlhZzA4UEM5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlRHVnVaM1JvSURJeU56VTJMMHhsYm1kMGFERWdOVGd5TWprK1BuTjBjbVZoYlEwS1NJbDhsbmxjRkVjV3gzOXZlcnBtR0Via0ZFU2dld1o2akdqVXFNdXFTNHozdWtsVXNyb21hbFFJb29pZ3FFVFJSQ0VyUmtWRXZQQldRQVV2QkM5UXZPTjlJSmYzVElDTmllczZmdFFZUDVwMVlHWnJrSS9aL0dIcTgzbFY3NzE2VmRYMTdhNVhEUUxRQXFrUUVERjBXS2N1M2grT1NlTWVDNWZJNklTb3hCbmxBVmNBQ2dlOEk2Tm5Kc21GSitzeUFaK05BSnN5SVhGaVF2ZnRyZG9EQVRyQXRYaGkvT3dKb1ptRjE0RzJaWUIvZm14TTFIanJSeVBLZ2I2UmZMNndXTzd3N09vL2p0dlozQTZKVFVoS0hoRjdoS3Q5ZWZ6QVVmRlRvNk9vdkpzZnNOaWIyNUVKVWNtSnZrdGRpb0NLSkI0a1Q0bEtpTW5NckY3RmJTNmFGWWxUWnlRNVFzSG51bVZ5OWlkT2owbk0zZi9nSWJjSEF2cE9FSVJGbEFVUlduRzkySlh2b3MzclZxakNCSlduVmxTNU1yWEtXZFQxNk9nNGhlVFJmQllYTGhnK3VKK00zcEFkRFdLTi9SUHFxdWxGKzN1REhBNEhvRGFKUjUycndZZlhLamo1Y1RpY0g5Zklud3REczVPM0twVXo1dmVGZHdwcWtXbTBManBYZlF1M2x1NGVubDdlUHExOC9Wcjd0d2tJREpKa2d6RTRSREcxZmFkZGFQc083M2JzMVBtOUxsMjcvU25zejkxNzlQeEwrUHU5UHVqZHAyKy8vZ01HL25YUTN6Nzg2T1BCUTRaR2ZQTDNZY1AvTWVMVHowYU9HdjM1bUxIaklxUHdSZlQ0bUFrVFl5ZkZUWTVQbURJMWNkcjBHVWxmenB5VlBIdk9WMS9QblplUytzMC81NmN0K0hiaG9zWHBTektXWmk3TFdyNWk1YXJWMld2V3JsdVBqWnMyYjhuSnpkdTZiWHQrd1k2ZHUzWUxld3IzRmhYdjIzL2c0S0dTMHNOSHlvNGVPMzdpNUtuVE9IUDIzUGtMRnk5ZHZuSzEvRnBGSmFxcWE2N2Z1SGtMZCs2YUxkL1gxa0h0eGQ4QTllZGIxYUEvNXBGREphdEdxZ3FGWUdHb01FdElFZEtGRENGWHFCQmVxRnVvaDRxZHhCSGlPSEdobUM0dUV5K0lEOFhuTElBNU5DbmFnOXJqV2tkZ1hPRGt3RE9CbHdNZFFTbEJXNEorbG55a1FHbUFORmo2VkJvcGpaYkdTSE9sZzlKWnFVWXlTMCtrNTVKZGJpa2JaWlBjV2U0bTk1Ujd5ZjNsc1hLaVBGdE9rVmZKSitXbkJ0SGdaZkExR0EwbVEwZkRFTU53dzFoRG1tRzFZWWRSWldUR2xrWlBvNC9SM3lnWjJ4bmJHd2NabzR3eHdhcGc5MkNEQWtXbDZCVjN4VnZ4VXdLVUVLV0QwazBKVitLVlZDVk5XYVJrS0N1VlhHV1BzbDhwVTQ0cFo1V3JTb1Z5UjdsdkNqZjFOdlUxUlpxaVRSTk1rMDFUTzZSMDlDMHdGQ3dzMkZ0UVd1RFlIZk1MMlpqTjF4Wm1DN2Yxc3ZXeDliZWR0amthb2h1ZU4zN1ErS3p4ZVdPalBkaWVaRSt4TnpnYW5OOGQvK0p5VkZBWlZLTlVlNFVRSVVLWUk2UnhpcG5DVnFGU2VLbDJVMGVJNzRranhTaHhzYmhVWEM1V2lrOFpXSkFtUXB1akxkRmVEd1NuR0I5NE50QWVoS0RVb0p5Z1o1S2ZKRXVEcElobWl1T2tWS2xFT2kvZGxMNlhua2t2Wk1pZW5HS28zRVh1SVljM1VZeVRrempGTERtbm1XS3Jab3FERGNNTW96bkZyRGNVUFRqRjFzYWdab3FSeHZGTkZPVzNVSXg0UXpGTHlWRjJ2YUY0bVZPOHpTbjJmRU14eGhUSEtVWnlpcjRGeG9KRkJjVUZMM2QzNWhSaDg3SUYycnB6aXIxdC9Xd0RiVFVOWXh1ZU5ZWTNVWHhsbCsySjlwbjJWQ2RGeHoxK2ZwOXdxUWJFOTE4ZlIvc2taNjJ1NUZvb29MdWhxOUZWNjZwMEZVQkRaY09WL3orNGo4T0FKK29uZ3dGckNuQmZ6VnN2cTRlMXBiV0ZWVzkxdGVxc0xsYU5sVmxGcTJCVldmSFErYzVRdjZDcDVqbTFmdGFqdUNhOTlGRVA0TkZuOWVuMWM0RzZ1THJaOVdYVzhuc2Q2ak90YSt0MjFHWFhadGZtMVM0QmF2T2QwWFcrdGROcWVjYXM3VnpidTdacmJZaGxvR1dBSmR6U3d4Sm02V3JwYkdsbk1WcmFXTHd0Wkg1c3Rwb2ZtSDh5LytBY1pUNXZQbWsrWVM3bDJqbnpkbk9SZVlDNXI3bVBPY1JzTkJ2TVFUK3U0L1B4SERhSlo5Vko4WlBlaldrTWVNUnorc2Y4c0c3VWJOQ3MxNng3dlYvUCtmeHF1T3ZSanVmU2h4NDh3NHNRb3B1eVhGK2V3ZXljV1R6M0RSZnp4RDI4TFJINW5jRzZjUG44TjJKYTk2WTZXVnVzbTY2cjFQM3F5bk9qNnlpbnozVkVzNnpBSHhiWE10ZmJ2SDZoNTFsVXIzWjY5R3A5MDZ6NlZxOGo5RVBlTmxiZjNTbjZuczFXMkIrdjlMdVJicS9YYU5MMWIzbXlWNi9uMUE5NkU1bkJKZnVOZGFwRmlac2I0TmIwbkc1K1RiVi9jNmVBclVqREFtRXN2NzN1NDF0a1lnazJZU2Uyd1IzcEhQRjhyTVJUL0l5bFdJTkZSUHcrZm9MTjJJVmY4QXpQa1ljOXVJanpLTVFYaUVZV3h1TXlZbkFCbDNBTlYzQVY1ZmczSnFBS0ZhakVYa3pFWXl6SGRWU2pCckg0RDZ4WWpEaE13bVFrSUI1VGtJT3BtSVpFVE1jTWZJa2t6TVFzUEVBeTVtQTJ2c0pjZkkxUzVDSUY4L2hmd2pkNGlFYzRRdG0waGxRa2tKcEUyTkJBYTJrZHJhY05hSVNkR0dsSUN3ZHRwRTIwbWJaUUR1V1NDK25JbGZTVVIxdnhBaTlwRzIybmZDcWdIYlNUZHRGdTJrT0Z0SmVLcUpqMjBYNDZnRjl4ZzlKcENSMmtRMVJDcFhTWVdwQWJIYUV5YWtudTVFR2VxTWUveUl1ODZTZ2RJeDlxUlJsMG5FN1FTVHBGcCtrNzhpVS9GS0dZV3BNL25hR3oxSVlDS0pDQzZCeWR4My94Q2ovZ0hra2trNEdNZElFdTBpVzZURmZvS3BYVE5RcW1FRkxJUkJWVVNWVlVUVFYwSFdYVWx0NmhkaFNLSC9FVDNXRHBiQW5MWUV0WkpsdkdzdGh5dG9LdFpLdllhcGJOMXJDMVlnaGJ4OVlqbjIxZ0c5a210cGx0WVRrc2wrV3hyV3diMjg3eVdZRTZUajJaN1dBNzJTNjJtKzFoaFd3dksyTEZiQi9ienc2d2crcDRkUUk3eEVwWUtUdk1qckF5ZHBRZFk4ZlpDWGFTbldLbjJYZnNERHZMenJIejdBSzd5QzZ4eSt3S3U4cksyVFZXd1NyVkRlcEd0VjN0RUNHU3FCSUZVUzJLSWhNMW9sWjBFWFdpSzZ0aTFheUczV0EzMlMxMm05MWhkNW41ZnpUWDUzTlY1eEhIOFh2MnVjL3o3SjQ5NSs0NUVnS0pJb0ZBQlNRNkdBd0VZeEM5OTE3c0FBRUNkbXdjTXdHYlhtMUVGNzI0QUtaamJKT1pPSk5rRXNkMjNJMHhIU0ZBOU42RkVDVjNKcE0vWU4vOFh1eDh2dWFrS1RTblRKRTViYzZZczZiWW5EUG56UVZ6MFZ3eWw4MFZjOVZjTTlmTkRlZXdjOFE1Nmh4empqc25PTUVHTnJRSk50R1dzMG0ydksxZ2syMktyV1FyMnlvMjFhYlpxcmFhVGVkRUxzZEpMRnpFcC9rTW4rVmlQc2ZuK1FKZjVFdmVmZStCVitJOTlFcTlSMTZaOTloNzRqMzFudmtSMy9IQlZyYzFiSWJOdEZrMjI5YTB0V3lPenVEeVhNRk90elBzVER2THpyWno3Rnc3ejg2M0Mrdzc5bDI3ME9iYlJYYXhYV0tYMm1WMnVWMWhDeUtISTBWMlplU29YV1ZYMnpYeG43WXUvdHMyMkkxMmszM1B2bTgvc0IvYXpaRmprZU9SRTVGVGtTT1JRcnZGYnJVZjJXMTJ1OTFoZDlwZGRyZmRZL2ZhaiswKys0bjkxSDVtOTNNeXAzQkZyc1NWdVFxbmNocFg1V3FjenRXNUJtZHdKbWR4ZG5SWmREbTJqazdHTnBpSGJiRWR0bysrZ1Iyd0kzYkN6dGdGdTJJMzdJNDlzQ2Yyd3Q3WUIvdGlQK3lQQTNBZ0RzTEJPQVNINGpBY2ppT2lCVnlUYTNFTzUzSnRyc04xdVI1ZjVpdDhsYS94ZGE3UERiZ2g1dU1pWEl4TGNDa3V3K1c0QWd0d0phN0MxYmdHMStJNlhDK3Q1RVZwTFcxd0EyNlVQR21MbTN6bFIzMGRTUTNlY200NnQ1emJ6a25uam5QWHVlYzhjRXFjaDA2cDg4akpjY3FjeDg0VDU2bVRHOWRhQk9KMEJRVlIwR0RBQWdLQjY5UUdCZzk4aUlGQUFDRWtRQ0tVYytwQUVwUjM2anIxb0FJa1F3cFVoRXBRR2FwQUtxVEYxYmN3THBaMHA3N1RBS283RGFFR1pFQW1aRUUyMUlSYWtDUHR1QkUzNWhOOGtndjVCdC9rVzN3YnY0WmNxQTExb0M3VWcvclFBQnBDSTJnTXowRVQvQTkrQTVOaENyd0ZiOE5VbUFiVFlRYk1oRmt3RytiZ3R6QVg1dUYzK0QzK2dEL2lUL2d6SHNCZjhDRCtpb2Z3TUI3Qm8zZ01qK01KUEltRmVBcUw4RFNld2JOWWpPZndQRjdBaTNnSnIrQlZ2SWJYOFFiZXhGdDRHKy80cmZFdTNzUDcrQUJMOENHVzRpT1lEd3Qwb0VNc3c4YzZRU2ZpRTN5cXkra2tYVjVYd0djVUlZZEFKK3NVVWhRbFRZWXNJUkc1eE9UcGlycVNycXlyNkZTZFJqN0ZTQ2pRVlhVMW5hNnJVMGdKbEVqbEtJbktVd1ZLcGhTcVNKV29NbFdoVkVxanFsU04wcW02YnlpRE1pbUxzcWttMWFJY3l0VTFkQWJWcGpwVWwrcFJmV3BBRGFrUk5hYm5xQWsxcGVlcG1jN1VXZFNjV3RCdnFDVzlRSzNvUldwTmJTaVAybEk3dnNOM3FUMTE4SzJQUHZtdXo3NUhIYWtUZGFZdTFKVzZVWGZxUVQycEYvV21QdFNYK2xGL0d1RDdmc3dYUDVETzBrVzZTamZwTGozOE5uNmUzOVp2SnoybGwvU1dQdEpYK2tsL0dTQURaVkR3ZGpBMW1CWk1EMllFTTROWndXd2FTSU5vTUEyaG9UU01odE1JZW9sZXB0L1NTQnBGbytsM05JYkc4ajBhUjcrbjhUU0JYcUZYNlEvMEdyMU9FK2tOK2lPOUNmbXdDQmJERWxnS3kyQTVySUFDV01uM1lSV3Noald3RnRiQmV0Z0FHMkVUVGVJSFhNSVArWDMrZ0Qva3pkSWhHQjM3SXZidjJKZXhyMkpmY3lsYzQ2MjhoVC9pYmJ5ZGQvQk8zcVViU3JwVWx4cVNJWmx3UFJqRmorQ0daTUZOTlVQTlVuUFVQTFZBNWF2RmFya3FVR3ZVaG5pNWJGSGIxVTYxVysxVis5Uis5UmYxTi9WUDlhWDZSdjBnT1ZKWEdrb1RhUTYzMUFGMVNCMVRoZXFNT3E4dXErdnFwcm9OdCtFTzNJVjdjQjhlUUFrODFFMzE4N29aNytZOXZKZkwrREUvNGFmOHpJdklDMUFLajZBTUhzTVRlQXJQVkVRNUNwUlMwU0NpdE03V3VicTVicUZiNmxieCs5WTZUN2ZUSFhRbjNVMzNpcmZVSUpXbWgrbVg5V2c5VHIraVg5ZHZxaXc5V1UvVjAvVk1QVnZQMWZQanBiVlFMOUpMOURLOVFxL1VxL1ZhdlY3bDZJMzZQYjFaYjlPNzlNZjZzN2pvUHRkLzFmL1FYOFNiN0R2OWt6NmdhdXVEK29nK29ZdDBzYXF2TCtxcitxYStxMHQwbVg1bWxMR0dqWmpRSkpvSzZxcEpNVlZNbXFscXFwbDBVOE5rbW14VHkrU2FPcWFlYW13YW1FYW1xV2xtV3BwV3ByWEpVMmphbW5hbXZlbGdPcHBPcHJQcFlycWFicWE3NldGNm1sNm10K2xqK3BwK3ByOFpZQWFhUVVIVURPWjkvT24vOTFHdVl1WDlieDh6eEl3d0k4MFlNNWIzZStBWno0MUxMc0VyNzFYMFVyMTBMOVBMOW1wNXVWNDlyMUhjaFMyOFZsNmUxOEhyNHZYdytuZ0R2Q0hlQ0cra044WWI1NDJQRmNXS1l4ZGpWMlBYWTdkamQyUDNZNld4SitLSUVpMVdTSHdKSlVtMkJtTmtoK3lSVCtUUDhybjhYZjRsWDhtMzhyMzhHSXdQSmdTdkJoT0RTY0dmZ3Z4Z2FUZ3FIQnRPQ0Y4TEo0YVR3aW5odEhCdU9DK2NIeTRJM3duZkRSZUcrZUdpY0hHNEpGd2FMZ3VYaHl1Q0F2bFpEc2d2Y2xCK2xVTnlXSTdJVVRrbXgrV0VuSlJDT1NWRmNsck95RmtwbG5OeVhpN0lSYmtrbCtWS01JVlArY2wraWxQb25IS0tuTlBPR2Vjc1BYTWpydU9DcTl5b3ExM2pXaGRkY2wyWFhjLzEzWmdyYnVDR2JvS2I2SmFUd1RMRWJ5OURuV0xuWFBSQnRDVDZNRm9hZlJRdGsyRXlYRWJJUy9KZnFzczh2S2N6aStQbnZNdjljVzl1M3Q5VlN4SzF4QjRSSktyR1E3V1lVaVFpaVcwNkZKV1UyRk1NUnV4TDdDb2xSUzF0VWR1TVVSTUd0WVRhT21TeHRKYVp4MXFDV2pMUFZFMkwzNTF2T3ZQSFRNN3pQdmZKL2QzN3Z1Yzk3em1mZTc3dm1zRjJGYnVxWGMyT3NDUHRLTHU2L2JKZHc2NXAxN0pyMjlGMkhidXVYYyt1Ynpld0c5cU43Qmk3c1ZQa0ZEc2x6bG5ubkhQZXVlQjg0M3pyWEhRdU9aZkZYWEZQM0JmZk84ZnBDOW9sRmxqSCtSWGFUWHZvSzc1TmY2WjhPdWFjb0psMGhISmtkNWtzVTZGMFU1eUxkSndYOHhMbkpMYzBuZm1PN0NWN3l6NnlyMHlUUGNQZkN6OFVmamc4UGJ3Zy9FaDRoaDJ5Zllmb0NaYzY3QWh1NVVoSGlRSTFsUTQ0YUg2Y2dCTjB2TENpc09Ld2tyQ3pwb3ZwNmc1d0I1b1BnM09DYzRQcHdVWGVZTEhRdVVLcjZDRWRwVTJVeTYvVFVtN1B2K05sbk1zZjhnVGF5OWxPUmJlR1c5T3Q1ZFoybzkwNmJsMjNubHZmYmVBMmRCdTVNVzRYazI0eXpIdHVWN2VibStnMmRtUGRKbTZjR1dLR21rd3p6QXczSTh4SU04cHQ2alp6bTd2eGJvcWI2cWE1UGQxZWJvTGJ3dTN0SnJuZDNXUzNSL0I1OEFWek1CVDBQZkxZRTU3MGxLYzl5d3Q0RmJ5S251MWhDNTdyaFh2R0MzcWVWOGw3eWF2c1ZmR3FldFc4Q0MvU2kvS3FlK25CSERwTUJjRjV3Zm5CQmNHRjFqaHJ2RFZCbkhEMlFVOTk2Unh3RGpxSG5NTk9nWE5FbkJTbnhOZmlyK0swT0NNS1JaRW9GaVhpckRnbnpvdXI0cHE0TG02SW0rS1crRTdjRm5kRUtZanpHZ2lUQnRYWFM5YVN0V1cwckFQT0ROYnBPZ1BzU2RZOWRBcklNMEFQMUlOQW8yNDZVU2VCSDhmMGNYMENERG1qQzNVUmVEUldqOVBqUWFiUmVvek9rZzFsSXhrakc0TlFrM1cybmdJNnpRZWpjc0NvaFdEV05Ca3JtNEJVeTJTY2JDcWJ5ZVl5WGliSUZ2SVZrT2NIL1VUL0NBbzkwQS8xSTdBbkNQcFVLbDhUN0tscERRTi9obHNqNVBmeVBzWURzS1k5YU5QUnpOZHhab0Z1YWhicVptYVJibTRXNndTenhDelY4ZVlEczh6a2dtN1g5UTE5RThTS0FiY2FnbHV4dXBQVjNJb0h4K3FEWVhFZ1Z4dXJyZldhanRFeFpybFpZZkxNUjJhbFdXVldtNC9OR3JQV3JEUHJ6U2ZtVS9PWjJXQTJtazJ5cFh4Vi9sUCtJRHZMdDJRWDJWVjJjL3VZaVdhU3pKWlRURTFUMnlrMDBXYWFtVzVtbUpsbWxwbHQ1cGk1SnNmTTAvc3BFaU5LYjZaSTFZQ2dJUDFTakx2bDExQ21mN2Y4OS9LcnVBOUZ1ZmUvZzJnTC9aRXpvUTBQMDFFdW8zSWR0QTlWZFlxcTBhOXBEZFRjY3NvaGk5N0duZm1VQ3RPNHY1d2ovWHhxQnAwbk1RcnhiQi9vdmYxVWxTUDhlOUIrYytSNXZEV0hYS3BEN2FrSEZPTmlUdlRIVXorNnBtWlJLMHFFamh6RDAvMisvaEkvMTkrSTJ0a25UL2t2eUtFb0tOVEJWT2cvMHBmOHYxTWMzbGlCK3JyR3VSVjMweHRZWlRxZVhBdnR1VnIyVit3UDhYK0dCOUZRb0lXa0tJa0t1VURFWXZZTUt1VUl6cFlkTWNzR2Y2ZC9ERSs5VFAyaFoxZERtN1hremlKYTkvT1QvRUtxaWpVbVl0WlZ0QXRNMllPWUhLUXJIS2JML0kxK0dVVlNFK3FDL2VSVEVSZkkwSXNab2RjUk1ZMG94VkJyL0RLYUR0RkpLb0VHUENKRzZ6Q2RnTy9yNy8wTFZKbmlxUmU4M1l3MzcvQlRkSi9vUCtVSjFjbnZRT0dJeTdMeWFOTnhhTklvZE1MSjNCdjk3V2l4VHI1UEZiQmlQQ3lkTWhIdmxaajlLbnJ0UGVpamkrVUd0VjA5czJxRXJ2dmhPSkVHOURHdHBTTlF1aEZRcG1ONUpoVFhMZEZSREVCbmMxTXVWMXZWdWNBZzdQb2RHa21MYVRzOTVVcjhLMDdoMy9KUXp1WWNNR29WOUdzSjN4WHRSVTh4SE4zTFVKa2xENm9Pc0RRMVZzMUNWUzIwN29iNmhvNkZ6b2FlK2duK1hFcEJQc3lBOXl0b0hYYTJqNHFoaVM3VE5ickptaDBPaDlYbWFPN0ZrMkZUUWVEUGVBdHY1WHlzVXNJMytSNVV4Qk4rQnJWQVVBblZ5enQ5V0YzeHZwaUE3bXdOV0ZKT2t3ZmlKMWxOMWtFZHQ1UnQ1Vy9rYUhpVkl6K0E3WlkzVkpRcWhscE5nT1hwOWVnOXR1dWp1c3dLQzh5c1FCWE9QTi93b3ZHTHF5RUt6UXZsaFhhRjh2MGJWQVZuR0lVbzFLSzI4SDRRYkJqT093OFo5eWM2ejJHSVhSUTM1bmFjaU1nTTRHR2N4Uk1SeWRtOG1qZjk0dnNPUG9Bb1hlVEg4Tm1GVGluM3VTbjBSUWVSREh0SFpJZ3NkSmk1SWw5OEszNldBZlFXUmxhUmpWRzcvV1dHSENjbnlUeTVVNTVCVjNkVC9paWZ3M3hscTFxcWptcWdZbFZuTlVDTlYrdFVxU3JWL1VDODI1WnRqYlRtV251dGZ3UmVEYlFMOUFpa0JQcERxZTRKWEtnd3NQeWJoeS9mWCtoLy92ZzZlczQzNVc1YUlscW9TUEM0Q1BrOGdOSmxra0NtaWkwOFQwemhmRkZQVDdUYWlEYmNuY3BVQThUNmhGaVBmcktOVE9KdW5FYkRSUHgvWnJNcXEyMjR0RlZmMFVOMUFIc3J3c3dUclRDZUtoNWJZYlNMU2JUR21zZGxjeFVyVDlNVmVZMEQ2bFA2bTdLNUdqOFVtMlVQWk1GQjFVNzNwV2k1aG5iSUxKNUN1OFdiUlBhekNvdVF4OTE1RzdqUWt4UDRYOUluS2JvamkxckpXelNMaG90TCtJcE9vSG4wRWFlckliU0VXbkEybGRMbnFJb1lQUXBVcmNKZmkweTFRTHpFK1NUVVZ1eXVOZGRqcVN2VGJPNHZWMXVQeFdVYVQ4WEtwcXZ5RC9DK1dPeVFTYXBNcC9KUVZNQVVta3RaL2d5YXBQdXFjendFN1Y5dnFxK3VnMjdaTWtGRjR6b05WT2tIcHUxQmRlOEhCOXJMSk55SlFPWWtJaTk2Z1JDcllTdkJDWVVNeWtTTjl3SEZpaWpmNmluMjBoQWR6cUFPa1RvZFNxVzMvYzlwbFQrRVJ2bTVGQWNlNVBqWm1IRUwzYWFsdElYbmhDYlRHS3FKeXJuS2licVRLTmFkL0RpeFFGd1dhU0x2Lzg4WDBhN1BFWFFmdGdQL3ROTmYwZ0oxa2RMb2RYK1IvdzJ5dXhFSXU0cmVwYTcwSFhiNUNDdThKUXVvUmFpNytNTHZKTWRndjljb3hkL3MxMktiaHZvaktKa08wS2FBcGtHQldKenhUajZIL1U2bURKSHFqNU1ab1V6RVlTbWk4QWFpTlI3OG1hK3kxQ3oxRXkxQ3plZUJONStnYnJiOW0vRmlpWTBqcVZaMTkwelBwMjIzblk4LzdZVHExSTQzcE1mNUVFTDh3KzcxZUNaeHJNMzZ2OTFPTEhvOHR1T0U3SzRUMEVKQWlMbEVqdHBaS1JJU0l1SUNaeTdWaVNYRzFtcGxyU0lrRG1qRkJjUUJMUWNmUU1KU0lGa1VMUW5EcStxWnNRZkJpblpOMWZ2V2UvWHExYXN5bkJ3NCsvYVZ1OS8rMXUxYnErKzkrODdOYjk2NHZuSnRlV2xoM25sN2RtYjZyY3R2MkVPRFh4L283K3Z0T1gvdXEyZS9jdWIwcVpQZGFldkVsNCsvM3BWNmpSNHp5WmVPSHVrME90cmJXZzhmT25pZ3BWbHZhbXpRa29sNFRJMUdGRm5DS0oybE9ZK3dMbzhwWGZUaXhXNk8wendROHZzSUhpTkF5dFhMTU9JSk1WSXZhWVBrOG45STJxR2tYWlBFT2hsQUE5MXBrcVdFL1dhRWtoS2VtM0FBL21DRXVvVHRDdmhOQVQ4UWNBUEFwZ2tLSk51Mk1rSVk5a2lXNWQ1ZjhiUGVDRXdYSkJNWm1sbEtkS2RSa0VnQ21BU0l0ZExWQUxjT1lnRklyZG0rUUVLeEJuQ0tkZENSTEd1bkk5d0RKcWV5K1VVMlB1RmtSd3pUZEx2VERHY0tkSUVoT3N5YUxDR0NNc0lNaTJhWUtzeVE2M3cxYUowRTZXMy9ma2xIQzU2bExkTEYvRldIeVhtWDIyaTJ3TzRJYS8zZVR0c2VDcE8zWkp5MS9WeEQ5ck50MXdsSGZYK05zSjlOT1B1NUp1OWRGK1lBWFNtVjgvd2NtTDRQUVJ5YkltQk51dXM2RE44Rms0U3ZoSzhxWE44U3pYS0tkNE93T0IybUsvNE5EN2FtdzJkbzhvNzVxS1BEM2l6L0NYVmtpVC90VUpNTkdkVE5qM1FHQjVFL2VlZHh1MDNhNnpuZDZVQnZEZ01iTkRaVkFLMWhQN0JVNHdsSWlITm9iTElXV2N3OW9xT1FFSXdVQ0hqaVVGaFREKytXZXBCZjZBRXgrRndNV213UmR1UTZpMmM4WCsvamRLN1BJaW1kRXY4ekJCbEFkLzlhVDhsWEtOR1UvaG5pSU0rVFdxb0J2d296eTJJblR2QVVVVE93cCtEam9NRFBkYWZmTDBtVXJ1b0VCZ2dmR29mWTV0MitVeEIrMCtRYnZGNnkwUUlnckRqaGhEaEJDOFlqWkoreVhDWjVuTE5kNVJ5YTRaeGlsVk5UOXloazhnYkNVR1lPc1ZoWHJUWHBodzlrVi9vWVB2d0Y3S1dRUHpaRnh5Ym1ISkwxdlVwc3g2YnJzSkRmVStOVklIWWc0OGlHVklFa1F4WmNTTXFyTldHT09CcFRVdENpSXFrWFMyb01zbEpRTU1reDNic1k5bTdDTlA5UHBWTDVLZGNTdzU1YXhVM1daOVhqL1hWNG5YdWFMNFBEY0xtT1RjLzVmcUtPQjZrV0doeXRESkR4YU5veFNZYWhHVGlaS1dpbDhuWVAvN2tHc3lGa0dTNEErUmVTS21pZG9GR0JYZmg0ZG5hbmMxRG9mRDlIU2M3My9IeXBYRnlnUktmK3B2U3g5TEcvbXZXcWlWTXFiNjBiTEhmZmhWaXQ0TDd1Tk9VYzMxOE1rSndDTTdZUllBR2N6Nnk3N0MzTHBXekJvaVoxbG1BdFFSL1N6R2t2QTVDRWhnT0s3MDBFTnI0M05lZHM2Z2lSZTlQT0l3bExHVy9ZRFY0RG5yTkpFTElGVmVKVVR1UUk0UWdhd3hDYVIxSk15QnViTmtKRndWVUVRZUNGRWthQ0ZxdlNNQ3FVcEpDbWg0YTZoQ0VibnBXRmtoSnk3S3EwQXJSWVNDdUcwc2NyMGpIZzZKeXpoZURHUVlJWmZnRWcwNDZkT0cvMzJmMzJvRFFrUVVRNDZSRlF0a0MySDZQSGczZ0lHd0hNT1NuSUpWd00rbTFqVTh3MFdaRXNnaVNuRldzMDhKeUw3WnNJN0lVTG45bGJ3Y3ljODNnUXdmeWlCNGxoL3ZGS0MwN3NQME9pTVBFOGY5dHlOTWtmbTRJTTVNeEVqNUhZeHlaY2tXSEt2a0cvYS9MVnNWbDZ4d1FpWlFTcU5RZ0Y2RUtuNi9zRS9paEVwVERyaEQxbjRYUW56T1N5NGtKVjF1aUVuTmhETlZBVmVmVzRrOWVRbXJYdlY2M2RCbXNjOEt2bVdPRy9XZ1B2R2I3Q2U5R0UrOEhYRUEzdHd5MGRHdld2K25PUWp5WTd3ZzFYL0FDMHNkTVZNNEFuUHhHZVlIRTVGZUJOc016UEV1RkZEc29rdlJSSWx5MHhZakg2bDJoMkVTVDREeTdkYzdCWkpsbDB1UlRsaDRZbi92OFV3dnVFK0VVaUp2ZjEvaXFHSzFoNGZIMTJyUjVkcWFFNS9vTTNTdXBrV0NaZ0xlTEltdXlHd1c2NlZrMGt6OWZzdzludTR3ZThUeWhmNEQ4UHJwMExyRmpJZzR0dzM0d1dLQkF1QVlFNEMyRUUrVVh0ODVkVElROXFQTW9WUyt4ZHEyNUtxQWtZU2hSTXhKZkRpdVBFYzRrSE5RUlBRTEFOd2lJd2ttVjRQdEU4cnh2ajRYckdvZmpEa1BlblFCZnhiVE9ZQ3ZWc09iOUVlWEZsUE4vRDZITWZGZkFPVFRrTUdiNVBJWWZBeFZRT2hHSDZMaGJ0R3VVRHRGV0w1cGY0eTI2WlAreVd3aWNIdUN1aXcyY3pzdFIwUVVSS2lWaEM0T0NnTGZDdTRQTjM0N3huUVNTYS9SYWY5UHB3NE9laFZpbGRoVmtQNmhyUlNZNklyYzRiZ0VFUVJqbm13a1NoWUR6RkJVRmZ0QzcyamhYTXE2azlpbWp2V2FGd1RNd3FIaEZzdkNxaWlnYkFMWXRKclQzQTVJdkhrM1BpWG9DTjRzR0xwRVlodkRaa2xjRzE0UlJOVjY2TlVIK1VxeHJWRFF2VmdPSldMd0RJOXlDRjc0M3ZyNFJYV2N2WTVCVURBdHN0aWh5S3dCK1NrWXFHTnlTOEUxVkwwa1A3QUlvb096SktxTW9PUnUyeGFHUkhraitFZnduaitDRStpZG9zL1I4RHJ3WXU2ODhIM253MWdJWUExbDlDZCthMDJXdzJwNkREVUdSZkVubjdwUjFCLzBSRTJZWVNXSDRGdHR6SUZsaHFsSHgyMTNMZU9JSncrUVhTa0ladE5Jc1M1WmMxT0w2UEh0a0hLMVY0WXpZVzA3UVNCNkpLQlZDQjhsRkY1WE9VUkVraEZrMG1QNnJvUHE4U0phMUt4SHZFYUNLWkRPYzVYQUdRVmdHUzBZcUpSS0lDUktwQXZMSHFScFdpaHBSZnp1TEdKbDJha1VybHYyOVVnQmNiRFExUkRqeTNYVTJMenNRMTNrZEVmMG8vclYrTHJjUTkvWjc4UVA5MTVGZlJiZjJwbm94RlhEd3JqZXNyU2FZLzA1NDFQR3VNSzVyU29EVEs4TjlSUkZHMGhzWllWRlUxZ0dOUlRZVWRCVE4yazZaSk00aW8ya0ZnU2JMTWFZYzRUU2FLZGhDMDRrY2prZGpScUJ3dFNhdDJITVcwdjlod1NVdGJPSWt3VHRvdEdrRkxxanc1cm55aWZLcklEeFNzbERDMmsrUGF0dnFwSmovUXNNWnh2VW45UkpWK3FCWlZTZjFSMCs5K0Q1bnhmUDVXTy95Z3RlM3F1eDN0K3U0dWFoc2E2TmdkMmhuUWQ2R3RSVTVhMWcvMEoyc24yOFNJbTF0NmU1dDdlOWYwSjA4YW56eFppNFRqbWRONGpDV254dGhSZUZiQmhXRkRIZGxRbXVTWXVsVitpbEQ1UlE5OExyNTlhOTc2Z3M4SVl0R1NmTWJXYnNaaUNDc3hXQ2lXd0orelEwTmc5cFIxK294TDhWbE1aVk0rWU1wZHIwZFZXVHI3VzhuNTR5OWUvZlRuZjhCL2U1Zzcxbmsyc3ZWNURuLzRyeEZwRHY5NDh6c2ZyTU5adWxUK3M5S3BES0xqNkx4OGpPZXluWTQzeFA5TmQvbkhObkdlY2Z4OTcyZDg1enZmT2ZiZHhibmdFQnduc1NrSnNaTmdadWJMV2lnTThYT0xxNnAxRzlZeWZwUVd3dFlPdEdvRklTanRLbzEvbUtaTld0aXFWUzJiUkZZeWtwSkt6U1EwYVZNbjBGUW1EWlVSYWRDeWRaUm9pcUx4STNqUDg4YVhtTElxeWQzeitpNnYzM3UvbitmN1BKZXEwMktwTmkyVnltbmQwWjc2NWFrMXFaSldTdTNVZHFUNk8xN1hqclQ5MVBwWjdCMHQyanBhdmo2c3FsSmZDd1JlSFVadjFaMXNQVk0zMW5xdTduenJYNktYVzJzZXNlZ0M1TVJFTnNMaGVVNjZSc3NUM2dhTTRuYmNTUzlPWlhOQ2J2RWFZZlhpWXMzajZXL1g3RWkvRkh3MStNZmdMZTFXMnV6SjZsUXcyaE5adTNOaHhIbTZiWGNiMSthMjZ3WDlSL3FnWHRiRlFmMlVmbFBuOVRFL1lVYUtlakFVNHZyMDBmSy9oZzJEQlZOZXhEQ2tQajJJOE9wU0tBVEhwS1l4MkhXSHdmNjdvcTY3dkQzS25UenRMR1pKNCtsRlo3R2lmSzNQT1I1eFhabk1QUXRaMmFKMHVyemF0c1hZUW5xTjh2VHNGME11a3FwRUoyQUdHdEZnSHJWSUpFMERtcHNYSmtiTC8yYUx3c0JUOGRPRWdGVEQrQ3BzS0F1bTJNNUM4TEduNHJJVGJNRXd2anVNWDU4WTVaN3c5QmFQSkkxa1k3SWplU29wNXFCcEh0WjFyaTg1V3Y3cmJEQUd0c0MrL25ReHVSU3ZlOXFDUmRtTzNIaU9PNUdqT1J1K1pnUW50MmROeUFzVTdXYW5xYjJtc2l2dHdZb1h0T3V6bTJFVzJ4TWZTT2NsTGk0VkpFNktWSHhGaWxUK1Fhck1zNlFvNmJqOVVoQWZUbkx3NGFRZ1Boa2VwVDVKUncwa0E1OUVXcnJNbUo1SHZUUndBNDVUY0RCS0EybThVTG94NVYvTXorRHgyalZTZ0R4TUYyN0E4Q3BMZ1BsL0hvQXhwaUxrbzUxYjJrRllYbEZNTHpKUVAwTDRkRG9ZMU50RytZZEdkb0hXTFFyZnlXSmVkV3piall6eTdlL3VBcG1kUXJxelBWTklGMHlZUEdkbVlFYklzV1pKV3RTVTdNcDJkL2V3bjY1c1MzSlJreVMzZkpYTGRGcVdiVVdqRWN0ZWxPUWxXZWNnekhUaVRYeisyZmQybm5yLzBlK3M3bnJ1MGphYVdYbjBsZjBOUTg0TEYxNDdlbktqRWJDYjNuZnRiNTNiL1dUbjh6dTIvekxaY0todjFhOFByeis0UHFKcnNVU3o4c0pES3g0ZmNBWit1TmJiOHZVbCt5YnZIRjZ4akY1dWRZM1dkZTJyKzUvWXNPSjdVSlBJcXZKMS9nclVKSk0wY0xVc2oxOVdPRUZyMXJMYUk1cllGZWx5SCtPK3FXeU9mTVBkeGowcmJnMDhFK2wzeCtNZmlSZHJMOWRkcTcwV3VXbC9WbmV0WVNKZWpsdnhlRHFXdC9LeHRiRTk4V054ZVFtWDBKWll5N2t1YlMyM1Vsc1ZXZU0rcGhTMWJkbzE2VlByTnAzU0RScmxkZFVJUWVlc3lpWlJvcEFTVHE4Q0tjQzRneFJ3NW11ZGs2RmtyUHdmdjFLUlpqTUVtVE4vYXdodzlUTW41Ti9uSllxaFpzTzRZRkxEOU14Kzg0QXB4RDFFS2U0aFhHWVlNOGxrZVluSW1SS1NienJzR3RRc3VCV0FNM1hFSE1hZnMrd3gvUnBtanZtck8xTTB2eHYyd1EvNzRJZG53VDlURENka3d5K01CcnZMKzByeEF5Z2JWK1N5TE1UbGdyeEI1dVVGdUM2WjRTNHZ3QlhJREhlWldZNGN3NitXNnhaa056cHA2RHA4Wk5QcGRZajhUTG82Q2FEQ3dObVlTZWV2QXJtQWV4Ny9URVFib1FhZ0FlZmY4bEVBMWxPQVhxcnJSRkhyWVRpOFM1VkRCQWdHZWpQaFhBR0x3OEl1QkJmSURYY0RxRGJ3VEJtZFhWbmtsMSsyOWR3ckYxL2MrZEdoL2grM241NXAvTTJMTC8zcTdlL3YrOFdSbjc5eDU4MUJ5cisrcVpmVGI2L2l3aC8rNmZkL3VQVGhPU1J1TFZTT0JWQTVva0NjeFlpejQ4U05RbVV1aWFWQW43cVZmMDdjSGRpcTFrVFIwOWhXUStCdHhxakJ4V05MK0cvaTdjaDBURmdhWGw2MzFPME5yNHYxdXB2Q1Q5WnRkcmVFbjQ5dGNmZEorNkxUM0xSakVJdUdOTnZlYVBWYmV5emVja1BIakJNR1p4aEN2YXZJNUN4M0V0cWZjV2FvRkMyT1NXMVFTby9YdW9KcUEyR1RjMVRaUGxVcy9xOXZqcmFuZ2RFT28ySWFNb0xyMDdCMG9HSWFUaHBvU1dXSE5LckY0akE2M1p6TTRua0V6VFJPNDlhWWIvTm5pbGJHOERzNlE2LzRvekhMbFZkYk5CS3lsMGhsZlY1OHpCQVF2Q0ZkbEJ1ckVISVpRanBEeUdYd1dBd2tRS2luQ2lIZ0piME84YmtLbndGTzB3UDRHWU1LeUprQjY3dGF1QUV1V2NyUERPUlpuNElRMFJMelJqcXd0OTVySUdRajJVTU9rR05FN0tnRTQrUUNrZUJsd3JDUU1XMlhRYUN6NDJwNVF4RnFHV2FDcXRRenYxU1lYeGJTNGR6VFQ1WGEwMmFtdlRRQTBGRWI3WktZQnNsMEVqTWlMN1FRT2Jvd3lVeVRmK3JzNHMvZisrZTltelR5OFVXcTA3dlhsWGNQUC9QR3pDVnVVM0JaOGJXWDM2RkYrODFoR3FjOERkTFdlMysvZDh0b1BIVjJPejErNU9IdGJ5R0JSd21oZWZBODZQazVCUWs4emZtZEwrOEg4NzB3QkwxMWxWYjVibFdwbm8vRnFsandZK2l4MVlwR3ZCOUlmaUJETURmcFRGWE5uNmxxK21lcW12NFozd2pCbTJlTmh2Y0R5UTlrQ0twVzZsc2pxWXJGcWxpWWF6QjZpb0Z1WkdkRDRGamdSR0FvTUI2NEVwZ015Q1FRRCt3SkhBZ01WajZhQ0pRRFNqeEFDWlVGamc5SS9GaDV2REpEcXNqL2dCSkpsQVJGa3B0Rklnd0tKNFFoWVZ5WUVLUnhZVkxnaU5Bb1hJQ1JJS0IvWXNKQmNOdXowWEVGMXNFSUNpNUJpQ0N5d216dnhZSjdMS1VndU9zcENMS3d2dWJSamZnQ051OTRlL1A0RW9ZK2w1N3RwZUVQS2QwNzhPVnQ4WWlnaUJMeEtOcGQ3TStGQWxCWDI1V0o4bUJ3UjRlSGg0WFB6cCsvRXhXU2R5NFJTZzRCTHozSUN6MzRJQzI5MnBlejhRVUc1bTc5UDRwL1FkbXFXUi9RY2FRb01ybEU5Sk9lWlZsMnpuYk5uanVXenA2Ym10blphNDdhMlpBWUZ3ZkZLNkt3QVE2VEloOFg5NGdIeExJb3dOTXJITjlNU1dVbVBIdlJURmQya05CeE1nbXBRaG9obHlmZ1pkYVhqYUJzRFNnYlliSVJKaHRoc3BFYTFJejRta0ZRWmpaSTVzUWo2NFg3eFVQMXNEbEQvVkF5SEQyZzFXbWlNSjFRcEF3SWRHZ1lYMGhBRlBJcUlmd25VRXNzK2dtckpMVWlMOVZ5Ynh1anhqLzRUMnNuK2VsYUNjaVo5SnBVTGJ2Zm9EOHhMamdUVHRrUkdtc2llc1FLdTZKTUpVdFRORDJvMzlkTzZGVm1yL3V0aGVjVzlZVGo0UzQ0ckkxUVd6RldJN2diS2pia0pycXV5dlpGYldKM1lIUEIyZ2lWdlVIQStCYTI3UkFwMkpURGVOcGpyemFxbCtuT2xsVUt2K3A2QjNXSVpidXpRODZrdysxeFRqaER6cmdqT1BCcUZyWDhUc1B5YTRUbDF3S0xLVGs5Ykpxek9zMExaajhnbU1BRXcyc21Mb1J3VEI2aG90dTRGNGJsVE1JT3p3R3czamFtUzFVSnhScnEvRlNlOWRxbCt6TU42MGZlQUUzemhjSU5NMGV4YUR5ODM3TWtNNkRVS0xMQ1MwWVN1cTE2R2xMQzlaU2thVHFkT2dqaUU4Q2gzZ3RvaXFWUWlmOGYyOVVDMjlSMWh2OXpuNzdYMTc3SFRoemJjUUxPaXdDQkFBbVBPVW9iOHlydjhseEtJTjRvQlFvazZkaEMyNmt0SFF5SzJZQ09kbElLVmNjZ1JldEVrU0NRbGxEUkxaTjRiRHdtcWlwRGFrVXBLa0diS0J1cnNrcUQyZDcvSDl2QnNDWDYvUC9uM0hQUDYvL09mNytqZW52a3NjZGIxYlNtYnNpRzN6Y3hvNWc5Wlo3eHcraUQ0UFBFTzUrL3R1TGdBbTUyajJ5WjJmNmVNdXl0bzlNM3pLdlpsR2lYdGovWE52bk5TNG5UU09acHFEd3FrUzB1Q0xJVThlVkRYNEFXbkVlM1VYSnN1bzJ1Smk4b0huaDFNMmpOMEdZNkdyVW14N1BhT29kalBLL3oxaFZNQ0V6bmM3eHpDcVlIbXRWbVl4R1BlV01GaXdKdGFwdXhpcmQ1MndwV0JWNWtQa05UWGN2bEplb1NjN25WS3E5V1Y1dXRsdWt2VW5SUGtkT1pqM1I3UUxIOEhQV2FuNlZobERmbWw0ZUVVZzBKdXVtWUZkTktWUmNhVmVlWjJydml3aWNjOFpFbmg0SXFIUEh4RitLbXZHTDhXSjJCenZVd0NvakJDOTZIamZxNDZ5RVdvalpPa2lYb3U3TWtjMmU1NWM3YzR5YmpHUURMalpNQXI3aVVXb0pVUllKVVFtK0F1S0dCSlhKQmdhQlZGSWNlQ2cwWUFpdlRMMlQ3QlNzamsyRmNJVWtUa1JwaUR6RUpoVW5zMjZwWTdHRitrYks5Z3ltRDVPelU1cVZSWTdHNjJGaXByalFVRm1zQ2tUZTZuSjYwcW5VcWZpRTNsSXpjb0dUUEp5R1B3SmN2bEVaZWpxYWRkdWhuWno5bkJTL2Yzbms5ZWVmVThmajI0eWRlaXgrWDhsamw2eThrYnlRdTMvNHBHOEpjbHk1ZSt1VHN4UXU0cEhoeW5WS0NyUExDRU5ZbnN0QkdpNC9tai9FNVhHa0lId3RMUThNanJMTGlHbDlOOFpUaURlRTlZVWVkdnk0MDJ6ODcxT1JZYmpYN20wUHJIUzNXT3Q3bWJ3bjFoai9OdnhhNFZ2anBrSnY1TjRkOEdVNkZDOHFVS2w3bG02RFU4U2VVMlh3WjczZmVMazV5cDhlTmNyWklvL3hWNUhhQ08vZ1FvWUk1aEFvT0VxcW9NVmgreFdUY2pKb3J6TTJtRWhhMENndUttVDJwVzFFbmtjc01aTXIzdWltMEpxbGFpaXM2QTRKV0pwMFNtd0pyYm1SNXRWTHRnOHRQTmlWbGJrSFJZS08zQXFDWHNUM3NBRHZHN2pKbEtHdGc4MUdaMFNkQmZFWVlwK0VZcDdHWVlEUVROeDlHbVl3NEpKb1cwTURNb2tHWmwvakZna05uVEFxd1hDa3JsTUE4VG5scDRDWlBQS2hOMHdYNVFza29jd3ZDdG5nTjZnYTN4MDBxOVdTcjI0a3BSeXZxa1VjZmI5V3lLYWNxSW9RQkpSMlJkWHo1RWwySEtqMXlEbUhpaCtyZVhMdmp5dnJucjcrODdCZlZudCs4OE9QMzM5dlkzcFZjcDM3ODg0VUxkNlgydnB1OHYzTnVYZUsrZk9qeW1ZdDlGeTljeGJ4YW52cEdHcW51QXo5N2pqZ3pPUXhXS2prWU0yZU83OGp4OVJ4ZnkvRk4vSDZYRFJ0djBCa3VSMmR6RUZXYTVUS1pEQVhjcUxKTlpJbnN0SGtwbERMWC93bVhtUTVYS1liTFlpbmRNZDJZdmtMZm9HL1c5K2dLWUxvNG9CL1RlL1VydXFZVEcraXpvcWZaSUp4dnVpbVFPa2tFa1pmSUViZVE5RGNvbllpSVhPaHBtWHlVVHJqNlI5SjZDTENKWFdzZUVRVVl3RHZwTHd5L09WQXZickdKZWdxZXA3YVcvNG1VUWxZY2RNa1l2NXB1dXNnQ09sR2psWmt1bDhkdEdpS1Vwa2FocksycEdaTTUrQlgrOUlYV1V6YWgxak1KSTF2bXlhZnJoY1FMNTlhdmJCMjFiZHVKRHo3SXF4bys1T0N2K2VPck82Vm5kakc5TmJsN1YrS1g4MFlWa3Vhd1VYUDhVeGtHWEtxaXlKMEdWL2JncGU5dHZ4TVJNUjVVeWxoNWlpcTdKR25xa3FWUm44MmNtaUlabXFTNVRERHRBRzJqUFlZbzJ0RGc4U00vUXlkdEw3TkxneEd0Si9WRmRFRXdzc3p1VURvYys5eHYyNzFxcjlhclg3UU5PMW9RS1pUekRKK3JrRTlnZGM0dDdIV25ZNHozS2FWSmIzSXVkYi9GOXBwN25TZWxIdXVQemd2dVMvd3p1Yy80eFBVNTd6ZTkzaTVOek1OcGdkZGpCMXdZSUkyT3RKczhXd1BKQmFZcGFmVDFyaWNwWFpWVzFhSG9HazJUZFlkaE1FMHpWRVZHUXRrY2t6MnpiUmZIM1Rja2wxTzJ1S25aa20zeWMzRE9rSGdGR1BrQWhpeTV6cm1ZcThLUzh5MUxOZzFEbGlVTkQ3NWxnVG5meTd5elhLOWFwYWI5dEdhOEdqVjdXT2hrVkZ1Z2JjYnoyQ05OamJyRDhxdFM2WHpjK2xtZVY4NFFVV0lEZHdxRGlWaWlNSENIOS9PQk83ZGlPRm1PLytuZnVGcGRGWXR2T2hPdkRsVEZOdkV6UU5PMzdiampUTnpOejZSLzBlaHVYbC92cUc5Q051RUhwTnNkS0k0NGFiK2R4UkdyMUIrUkVWUStYaExoZEs1TVg0U1Zsa1NNYUZFa3k5TW1JVmx3ZjJKTmdvdFJTMndmQnBXQ1M0b1ZBNHBqazNCaHJOWmY0Sjg0YVJKNlpYSWxzOW0yNUw0YjcxWVhqYW80Y1RYNUJ0dDU3Yk82NU4razRTejU3eGxqcDlUZVQxcUpQN1BaVGNrWWNRNUFCM0NjdFc1OTM2Ny9seVBrQVByci9LcHlKTm0vYkx2NTliMmppV2M1T0JaaTBjRDI5QVpDZnp6NUpFemxjTy9vdlpkNHVwK2NQMCtIbHFtU0lvTTRKbDJGN3ludDRFUE0wb3ZoUmJVUmxySTRMSk1Pd3lzRXVSaWl5aEg0RWJZOWpPWEphRCtpZDdIOWR4SFhFZldJUmtSaHBtNGU0bW5FWWlwajIxUDBMdmF4Z2ZvUnRoMldPWWJDRDlUR1ZBTEg2MURQd3hyRWZ2UTdsYS9ndDFvRTJyQjhDTi83dlFJd2lkcmdPeDNhWWRpTDllL2c4MmV3YmovYXBWZytpSDR6dmpjMjR4djZiZ2lTUldoWVB3TDcyWmxaYjZYOEI1aW90S2R1NEZxYXNNL1ppTzA0eGdLMFR5RG1ZSnM4dEZNUWNYWWVkckR6cVU1OGpoYTI0dmh4cWtkTXk5aVoyTTlyK0x3QjN5dkg4bGIwQzNFZUdsb2JVWUlZTGgyQmlKUVBwOUdPd2ZVL2xWNDM0anlzcFRVUHJnbm5uNW5UL3lJOXh6bTV3REUvUnBSSmtWUS9XaU5uYm85aTZ5T1lKZGZDWnJRdGlCQmlvWFFaMnBTNXdIQy85cW45SUJPUWQ3UlBYeUFlVTFiQmsxaG1PTS9GYWplOFRXWEVQSUgyVkVKNUJ3N0lBL0FkZlBhUzFvSHJXSVg3UFE3eExZeVJ2b2JSV2dYOEJQazFEZnZmZ3RpUGZmNVY4R0VWTE1IeHE5SFdLdjJDUTlzUnUzQ3NmMlQzaWZZR3kxc3dyb3R3clAvUWVjRDNGeU5tWUZ3MkkxcHBQamorR05wemlqdHJURWF3N1UxczAwekFlcjhBcnAwNFNlL1ErOWhYUllhSG5ROHNkR0tiM2Jpdlg2SlZFRDZhUXhhQ1p4bmdzM1BZVHhDaElZb1IxWWgrUkNlaUJWR0htSU1Zam1NRGppc0x2aUpuaUp1Q0g4Z045VHp1SWM1TmNEYTlodjBpbnVremN6RFRGNDFUb2gyQmxneEtxRTg2TDhSWm5FdFh0bTg2VThTWnJCWDhiaEc4L3p1dGt6ZzFhUEhzS2JkaEJzMUJuRUhrVnRiU3VjTTUwM25vUU1tL1E5Z2pzSlU0Uy9QTFd0b1g0cHJZRXp3VEdWdWZzOWF4NG95Z2xRSEtNbHpmbXJYWnZSaTBhK0VROXJsQ1c0azU1UURNVkRiQ1RQa05XS25jaFdueUNLaFd4MklkcmdmYkhwTnV3eUpITDlSaUxPZGplZDhqZGk5QjcyUHIxVjVjNS91NG4zM3dLOXpUSHlwOVVxblN4MVQxdjl5WGZYQlZ4UlhBejd2M3ZnOUFKZ2trRGdRUldpS2ZBaElIL0N5SkVTSUVpeUltb1pFUkxDbHRDYWpWeW1qSFFpeENJaCtPRmFFVUxRVUdnU1k0WUFHRmxLbTA0eGRZWU9vVTFFbzdMZERPSUoxMlNzRU9qWG0zdjdQdjN1U3hJWVNnL2FkdjVqZm43bm03ZDgvZFBYdk8yWHIvWkZRaSs2TDF6anp6M0VyYVJQYW0vbE9wcFAvWFVmM2w0QnlKMWhNejYvMVBvb2Q5bis5NVhzOUUvRlRrT3VnYlN2US9oMm9ZbkJnU1daV29pdXlLbDBwbVRPUU1QT1FWeXMzUlFybkIyOHYrNUJEbk9Rdm9TNk4vbGpmY1plejFZZitqU0xWVU83d2puaU1QT0N1SmFjemxISkVGaXI0ZitYQ2FINTNuYzdZdmhUTDBWMXRxekE5OHFnOHl4dms3R0hBaTRGTTRpeDlOd0NkN2FtN1ErR3p5QXpFYUZnWCtPcXZaUC9mSnk4Z2xvWDlhZmpyTDhzOHJiTCswcGNrdHhQZnduRExYTStIM2EzelVHS2N4VXVPY3hwbXd2eTNUeGk5MjZ2QmpqY01IcENJNDExOE9LTUhHWThIWkp3NnozK1crSHl2Mk44VjIrSnZkYnY3bVdEN1BIMExVMzhSYVBONmNVNmY0eVNDZkRncHphVW92WGNJOEdyMWU1Z1R4YklPSk42ZmxCWk5IeTR4OW5XSmJaWDYwa1gwbkJocDcxd1pua1BYRTdpcHZPbXUrV3BieUhUM2RHczRqZXBpcWEyTDJRcVNINWdYTmllNEsxbGx6MFRKWjRINU12YUJqcjVjc2t5OEtwQnpiOXhrZE9WV2w2cUxsc2o1MlN2SzlVbUx0WHFuVXZkTHZVSHQwN3hPUFNkZEVEbkhpc0l6d2ZrYWZIT2xNdjdWbURRcGxrL0VMSFZzbG9tc1JueUZ4ZkhZaWZmUjk2OHlZUXVrV3JNY0dzeFptUExXSStyQ3VCZStNNWNnOXBwNDRKVCtObGtvNVoyaGR2RnJXeFVvNWN6bXltWGU4ekxnU3RZVnh1U1pmcjVEN09GKzF4S1phWW80WS82L3dHOTE2dnVkeDRqcTQxYXhSdmZTSVZyT0dWZWJieDNpcEdGdWo1OGV0ay83cUk3RVZ4R0d0SjFiSVltK0lqSTFWeVRKMHk2TEVTZVpkZ3U1cHp1OFF6dTR6ak84VHhHMWg3bWZRNjlnQ3JXVzBSdER6RWkrVTdyRnFVd2VJc1VIckZPWjNUOG82dDBScThlUGJFaXRZaDRVeVZDN3A1MjlKeVFnRnBuL1F6WlR2STI5d3JwZjNtYUVMejVwRGQzdFB5YmU5TXNsM1IzQjJzMlNvOTF2TzZqbDUwYzJRYWQ1K2VkSGJKVXUxN1hXWGdlNDJ2bjhIdGFYcUQ4bmRxbmZlcDcxS0tyeGJHVjhyRDNyVDVGSDNWWHp2ZDlMWm04bGVNeTc2TEg2U3gvalR2RGNnY2x3cTNETE8xaUtlejVFSDZXZm0yT0dQVjd4eE10U01TOFBZR21MWjdFemdxMHJZVSt6VjUvUHN4ZFptTzBNYkwyQ2YrVTU5TCtPMGovZWkzTW82SFlWclVqSTV5VmttOWJEVytiM2M3bjVWbm9oczlodFk1R0tMY2VsdGIyVGtTUmptalpUWDRTbWVyMFgrRXJhbTJ0UnVJK1ZqV01pNzl5SzM2NzFBY1lwa2xFcDBhMkFWdkJmK2w0N09jeUY5T3RGZWZzTjU3WjNrR29pYzhSc1V1ei9yUElyNVJubGY4UnNVZkxGRWljMlg3UGhjeVhZSG9MK2FjVlk3Mm92enRGUHlYUEgvM1o1TkY0UGZpTFIxTEV6L3huQS9rRmRlQWtmVFpGK1ZRVzY0Yk5zdUYvWTNDNjR6Ni90M3lVbjVrSFNQSFBFL1FKWkZqa2lXK3hnK0NMU0gwZTRlcm1lNFQraVhHNzIxZjA2Um45UTF0L1YyMjk3WDl0ck9kcG1XVHVnSHpmN3d2SXhXdkFMNmc5MU83SlBSU3V3dC9udXJkZHZiMUE0Vk10aGRyVGJoZ3dOYXQyTjN5UURGeWNQV1hCM0RtWVBtOWlGaUJHaGZNNzZyM0tIbzJWV2NIZHpYb1BuL2tUSldhVmxYR2FYcjZxNU8vUi91VDdndjl2NWczd2p2b055R0hJQzhHVGtaV1JMSzlETnJuMXRiRjhhU0MvV3h6c2FJdHQ3NS93Um5aeis4QTIvL3IrZUtDTDRLbVJBN1NoMVNRQjE1bVBya1Bsa2cwa1FzK1d3NGJDUU8zWXY4QUIzWk96a0l1dktjaGU2YnlKK0lOSjdsK1JIMGgxUDRqdGRMMWdaMVpVOTByd1ZqRThIN0pxZkdONzRyOHA4enNEVTF2ckVPWnZIOFR5Q2ZOLzRCK1N2a0t2cC93cmlua2I5Ty9kODBqZlpjMkVQN0ZPM1pNSVhuNTVBNXlHdWhPM1JqL0VwRjY1Rlc5OUF2WEY3NC9uR3BrcHBsQm5iMlFUWWduN1R2RUpjc3cvMXNSOXAzalhELzI1UFI0QzdSV3FiV2dUdlRNZXErYmVsM240dmRjVUxKZmliVDhVcjlKbXJLSzdTTzFscFc2MmRUUHdiUzNOOU1IY3U4SXRtaHhKNU9XcjlxN2F6MUsxTGZYeE9MR250S3NXdTZzU3ZJRytteE5YSkcxa0FtOUFwa0ZYM09PUVA4ZzhTZURQejdMSGVqRFFwdGZFektVdmlIeUYwWjVMbzNpTHRua1FkbzkwYWVEWE5hR0Z0YnhkaDJjdG9YM2U1b2pyeU1uSm9mTU0yaUxYM0lqUUhqRlRzWGQ1VDJjdmRsNS9JMmNuUjZudjY4N1REUGgzUWFMZmxLdk5CdlVPeTZ0RlVkMEU2N3ZUcTNvMjI3N3VodzI2cEx3clpOcS85dDN3dnJtVnpKYmNZNmR4MUY3eGJlenBiYVA3VEJQc2ZONXkxb3MwWmoweUVPREF4eTZIcjRGekdqTjVDai9PZHB6MHQ4SnZtSlZ5U2ZkaTJRRi8wQ3FOVC9rS01peTBTY1QvMG0yaitnbmVrZE1IMm5CRlMyNTgrMjMycDlidXBEMXN6RXdlZlVmaGtPdDBBM2VCWG1oSHV0ZDBqbS9wTkQxdFY3cmxmaG4vVU9nbFVEdGl0SHluZmdGZG9adERPSXhkbXhMT0oyb1d6aWVSR3lNN0l6OFgwU3pDU1czeDE5eDIrS2ZjLzBLZUcvWXUrN01vNDQvNkIzbUhjZTk5OGtwcy94a3BJUnYwSnF5SjBMeUtGOStIOGxZMnRwNXlCN3hQdktCdDZ6aS9GTE5BZkVUcE1IeThtSG5UUjNNRytacklFcSt0N2xuWllYM0M0eWh2ZmtlY2NsTzVEWFJSdmxBYzFYc1dHU3FUa1AzU0RrUUNPUFV4dFBsVEZRd1B0dTFWemoxdU1qZjJFcytjZkpsajN1Uk5uamJaRkhlTisyem5XeXB0TTdzaVpSS2NXSitiSXlWaWNyM1pka0FicVg0cy9LUzdFaFVxUHZDUE9xNXNUd21XSXFFdTl0Y3Y0YzJybUJMQXEvMmE0SmpIMVQ1VTd5OHZyMGVjTnhpV0p5NldtK243blYxdlpxRzNMOFlxamtPenprcC9aOHVrWk9uZitibEpSdkJUbCtiblBPTDVPcDJGbWdhMnJXZHFwTWN1ZHg3OU9jcnZOdlJCNlIrNzFGRUt5eGJVczRGK3ZTMUZZdEZOWW1QSmZET04xbkE3bGIvY3I0VW9yUzZFbXpYK04xejZKZE9jTVp1di8rYmwwZncrUDBkNlNuOXcvQWg5Uk9CZi9xQ2VYT1IvUmZ3eGw5a0xPQ0QzckxxWm5xNU9rQSt2b2J6YmpaWnR5WTJHUW93SzZaakt2elQ3UWdDMXZ3VDNpbHN0akFldW4rT2RuK2J1UWp6bnZNZFpOa21QVjdGSnVXeXIzZWRPb2hrVnpXVWIrN2h6Y1F2ZnJudmNEK3d4TzA4OHkzQjlLc1ZTSGpNbVM4K1VacUtuZVlDUDhsM0Z1MHZtTGRncjd4MTZVNFhvaS9kcEhpNkhiSmN4K2lmdGxMckx1S3ZTdGhYek5rZ1h0TXJ2WnVsQmx1bGxRcWtXTC9ZT1FVa2twZGNUNUIveEh5aDdScnBNTDVRTzVudmFwaE5pem11eHNOKzZrVmdQUHljTUEzRktjdThpWCsveU44TFhqdW5YcEdkNU84WmdqZlVTY2IwNkNmZnd3YW5SZVl1MGdxblYzTXNSWmJtTWZONVB4Wk1PYnJBUU9EZWU3d3lqbGo1M083RFdOVkRyZEJyL0lhbTBDZmE0TmVaWkVOK3FJTDJORld2N2JzYUV2ZjN3WjkveS9BanJiZTI4OEdmYitMMkRmQkJ2MkVEdGpSMWpybjJhRFB1NGdkRTIzUVQ3VHRJRDV4ajAyK3pkMTBDL0xESU4rZlJONkp4UHVTYi9MTS9jS2ZHYlEvRFByOUNGYkJqK0VNRkFVUTgveHA5S2xCL2cwMndxUVdrdnVRVjRuNWhmUDR5MkV3bEtYbTBySEpYNlRtTmdSekpyZW54amU5Z256WGFsOEpmMDNOWitiVzJOdUE3QWVyZysrckRlYmRsckk5dWJ5bGYvS3ExRGVhY2R0YThGMjRoL0Y5a0pOYlNPNU04Vi9XeXdhNGl1cUs0LyszbjNtaENSSUlUWmlhVUtHQXBJQUoxVllCbFVCRFNDT0VobENJVkxRRUJBU3BQT3UwVUJFVkRCUzBJc3BFQkFzVktDUlVPbE1HQzlMSnRBeFFiSXZZa25hcStERmpJU08weWhSMGtLL3QvOXg3OTdGNUNUeG45TTM4NXJ6ZHZmZnUyZnR4enY4RWUybGZKa2ZKQWVPWC9DOHc4eUhmL0lxTWRUa3U0Snl6aGpIamJvQzV1cHZmcUsyekFKVXE1cjdlSmxmOVVNWEQ5N0ZGeGJ1QXNXOG9TcndzNnBCMUtCWGRJREhjbmFiYUwzZnJtSnRBZlVLdG9QVENlM0NkZmNoM2oyR0tjejlHMmp1cGkwY3gzdklkem5PNFU4YVd1QzJhdzE2R08waVY1RERHVGNtRjMySE1yYy9jb2ZUTE5XelR6V21sdjgram1UWGJVbmNpWXV6ditRTjUvVFR6K2diODJGMkErUmx6ME95ZG9xOHRtTTU4VmVoTndjM3VZeWdQYTF0dkR1THVsNmdMak0xb3dGVC82N3pmaUo3T2NYd2xYazlkZHhoVm5MTnZodThPdFpiam94dnZ5NXJ0TWZ1UFhDZ2lsY3BuK2tzZDVqaEYxR1BVVENwZmY1OXpVcWY4R1NQNTA5a0t4MTRFdUI4eGQ0OUdQejlPN1RVSVMrTjVXTzk5d3Uvd3FGT0wwQ3Y1VHVvQXV4RjkvSHRSN05hamoxdkROU3FpYnY0MzUzazhNa1BMMk43c1Q0WHYxZ2JucWQwMk9ET1VYc3h4bXBDbnRBTnpWOUtHWXpTaXdWMkVGZHdUQTFOMVRhaWprcHJDVld0Y0U3NGorVDIwa2orVDMyOXNSRytvZWVmOUNpY1hSVzR1OXc1MVJ6dHJmUEp6c1lWdGw0ZDYxbTlHaFcvVGJzWjA3d2xVdTNkd1hycWkydCtMSEg4VThrU2YrYjdTZFhNa1I3dWZVb3RXb3cvWFpnUmhUUkhNSWp4L3dTUnp4aE5jdjMrU3lUeU1kNWw3Uk5ZODZNVDdOYVl2bndjLzBuV0dhc05ud2MvTS94R0dPdDFHK2w1ODI3U1hlSERKOEs1RzFTRTlvenBWNlZHdHJkdmFwSzVYKzZjc3JVM1JuMWV5Y29hNVI3b205WENvSjl2YlZiUXp3bXZxdkhkNVJwOWgzNTdFQzNWMHFtWGIxZFFvQzdWVjJsRHNKbU5ma3IwbVdpL1ZKblgxRmV5VjlHdEV4K3B6RmxxdHE1ZWsyTHVNN1JQcTYzUTJxYi9iMkNBdzE5bEp2WjdPVGtCYzZVNWovU2NaRDZsQlEydnVkNDVZcjEzOUZMVnFUV0FiSFN2NnZZTHp2c3haVHkxNkZXVGZDZDVqM0FOdG1TRFlLL0dEanZDWVNRUi9kbHVNenI4aTNzL1pqMlFVcGhLY0Z1anpvNXJnQmNOSnd5OEZPd1lJenNwVWd0TUtxZDA2d0Z2SDk1S01BUnIvb0VicC82dkFPWURQVEpxUm82d251ZkNxVUdVSS9rZUc1U0ZCSUlUekhzNWpPQy84dHVQODdobEpuOFAzbTNFLzd6cCszblg1b3I3N2FyNUg0Wms4UmtMckNSMzZ6ZlZSbk5aSWZHTGJyZ2FQOC9vcWFTS3ZHVllKUENzOWVHNC90cWR4UDVGb24zYjc0RW5XcG9LNWxyTW9lRlIyZnA0K0I2eVJUbWd3cWFQNThhZnAvZWYzMWZQa25zYzlSbnNkNDNka1NYd1hUT3pySGEvQ0JoVUxKcUJRWWd2enJwenpHNXcvWUhwYnpSZFVjOS9reTlsZ25uVFp2b3Y3SU1xc1B3Y3Z1Zk1aRTA0RmYzSWZvUllnZk5kaXcwSERlcTM5Z3UyMHQ2aDV2aG03YUxkR1lXMWJJRWdiblNlRFRVWnZpNDZkcDduVXF1OWY5aXVNdmZaWmZzZDU1SXR1Y0c1SHZ0SXZNMUZQOHUyVGZFNjl3RzlZYXQrRDRaSXo3SnVvcmFnL1JDK29zd0IwZGQ2aDFXUnhYcXJzTFpIelhZVEZUZzNuaVlnbVV1dTBuemxBMnU5WC9YdVl1TmhQM21YZnh6aitGZ3F0azJ6SForeTNWTVp3ZDJDKzZDS2JGWVU3bHZ0aUhOdU9DOTZ3RzJqTERXZkovZlIzQW1aYWl6SEFubzRTNnpEMVRpN3ZQMERtOG44ZWJXY3lpYXdsRDZGWTNUL1BmWEtPN1ludDhQb3Z0QzdxU0luMXFXR0ZScDdIU2xGbjdVUWROWEVkeDlQdFdsUWZqWWU2MkIvVnUrcnNVbzdIZGhZckpadUt3czQxL3owK1g4Sit6UlJ1SEM5MlVvK2xub1Z0NHBmYitBK2pMSE02eXV6SGFRZFJSd3dQZHNjK3dGQ25GbDI0cGxua1JxNzFJVk0vU04zME91RnNCUy95K2pYcnQ1Z2kyQitnUXJFbTJHMzNKY2E2djhaTWR4Z0d1QmVwRDQ1eUg3eUhvZTRuZU1HOURmMjhLdWF4YlppSHlNOUpCQmU0NzZxdGx1QlFiQXQ5aWVCTlJHNThIMFp4RFpFaGJZMjFtZ2h0ckVibEkzQlBJOFpxQzAxNlROWWR0amxyU3VmNkkvRTR6M0VaMGJGSWE2MXU3SnNwWjQvL3g2b2N1d25YY2lSTDExQ1hPRnVCbklkcXhvWk05aGxuenZBNDdxY05zcmVNRmhTTnVjMzZtOVMxOUtWSHNOdXFRb0hwZTZldVM0T0Y1RmxTd1hIWHNvNjVSWWlkQ1ZZTGtldmR3aGQ5N1R5S201d2J5VEQrSDliK211dFpZbWl6dHQ0enVGVndibU03b1JiOTdUWFNWNjkxdW10dkxQb0tWbSsrbzBjSDE0K3dybnVJdGFIMExVaC9iZTFBTDBIdHQ3N3RyL2xOM3hhUzM1M3VPb3Q3aTRUN0xibW5yL1Q5aVVBMGNobnpTclBYR0xUdytoV3lrdkYxbytBZ0NQaHNsOUZyeSt4T1BOc1BzZ1lkamQ0NmhqTTJKbERBK0ZYZ3JPRGVvKzdYNDZFclkxT3B4RWJHK1F1U0kweitxK2U0NTBXWDJubU0veExMcUJYTitGSW5sVXQvMGZtTWU2TWw5cm5mUUkzRVdvbXBLbWRRaTBxZHhuaFRKN0hGT29qQjFnVWRnMkl0Q2tnc3Nyc3dkcFRTeDFKbDFYK3J2NGtwcFloYmcva3RxelIyNStDZ2lrblpPbWJaNEhpL2szakcvS3ZqMWJWMkR4Mi9yQ002QmxudnNFM0lHWElDSlR3TGV6U3FOdHVxY3RNNUhTZFZMR1NjbHY5U3U1ajZxYk9jUWNhTDRlbjBrdEdXVFNuMjFkQ20wNFdtVDVQcDA3NTlMYXFkUTl3bjY3bDJrcE1QNEhwM0lqb2w2eTVnc015L2UxelZLK1Y4TGhya3NzNlhuQ2Q1VXEwVDE2aUdtdWdrWXFsMWdkT0NhbGxiOTNia1NPN2lQTzBuUnlKMmlrYmxhWm5IVnVxeVRPYmRTdlVPeGppT244dDllc2I0S2ZWSlB2ZnA4bVR0RjlaeVlhMEJESEZleEViN1htcWhHMUJ1OHYyZVNIMjdVWkI5NWg3RUpxblp4UExlWDltdVhPY05sVVAya2NQa0RmSWgrUWM1Q2x6OEY5ZDBvc3hMc2g3NkJXVE1YZTVSenRkK3hETXFrZS90MW5yRlhvUjVzWHJVQ3ZUdGVZSDNmNU9rRWZrTXZXVmtDQ2ttRThoSVl4bHpNVnJGK1FUbk80SEpkZzcxUVJYM1NSbUc4YnFZLzRjNUQxT3I5K1g5QkxYMFR6Q2V0c2JPNXp3a21Cc1RTbCtYeUQxbklkc040dm9tdVA0TFVPUHV3eXozNzVqcW5zWG1lQVUyMDY2MUxReHhoMk1qdi9GdVp4N0twRTZqcnFpM01sbXZKVENHK1NHYjJtZUorS0w4WVh0NXBzN3RBOHhweTlEZzdPV3pWdHE1SklONWJCQ3ZUNkVoZGdJTmRvTHJ4RGIySHQ0L3dPZi9vUzNtOHpuR3ZzVjdjeGdmcm1HN3Q3SFNtWUVNYnhKanpseGtPTE5KTmdvOTFsU01NNU01eHJmWXAxaTlwNVU1Y1MrZVZqNTBoUGcwMS9oa2lKMEl6dENucDJoM2tqZERYMUpSZmtRUlAxTEhqdEpxL0VsNW55QnpFVVhteGZrZkJ2TDlxOG52eVJINmRDdXBkMGUwbmE4bzRtdVNqOXY2cmVZd1JPWXlGWm5ia0d3enp4MGc4eDVGZmZmc3krdVFoSE1nYTZMV3d1d0IrMlcrVy83TGQwdWJVOXBIMlFOcWo5VENDdGVmZTdKUytYMWMrZHZnZkEyemxHOThqMXZHV01DMTUxeEltKzhteDlUNzZTblZUOXJ4bVZwRDhVM21lVHV1Vno0Y1VIdXJRdDRyejJVK3ZUUG83TzFrbXpmNWp1NXNNeFc5MUx0bDdDZTBmNnJ2VE1Zd2p1V041L05DNXFwanZDZDAxOCtVLythN2tyN0wrb3Z2SE5QTjByNVRTemJ3akZaNi9UaFdBZHYvbExwUzlrZ04yWTh5Yjd0YXF4eTdGeG9ZRDY0ajkwbGNJRjhsWHpiM0JwTFJwRDhaYks3RlhxZk84V2RGenZ0bjVheUtDVkhXcGtQaVFRb2xxZmVjN3NHMjZMWEVEekxHbWttN1NmMzMwNDBqTVVyaVV6cVl4MzRWeHEvVWQwZ3NFNmdCc3BOeExjcDZmQzh5LzJydW5RK1pqLzZMZFlMWGlacW1CVXZjOTdIRStqLzc1UUljMVZYRzhmL3VmZXlHUUhpbXBVQ1NLekNCQUExSmFFMHJGSm8waEpCQ29ablE4T2lVMmV6ZUpHczIyWFIzQTRST2F3VkRPclZscXN6RVFteHRSUUpCYkllWFVIUWFCdnRRVkVRZGNBWTdEdHBXVVptcDA5WXF0dVg2UDJmdmhpUUlHVHRqMVptek83LzdmZWZjYzcvelB1Zjdjbm11NTlKdUxtYVJiQklrQldRaXlYTEpjOS9sdW1rL21UNjhFK1VadzhVZDRCekwrSVdVd3ZmbWpuSVl4emhkUS9uQWczMjlsQTg0dUJ6OXhCOTR6anByS2Y5STJXNU01TDF3bVA1ZHl2Y2VJcTIxY2c3NlFSOTNZWCtHYXRkVlB1blBjTE9nendjKzVKdzM0SnpYTzUwTCtsdk9CZC85OUFuUG9jaVhRVGtXdDZjZkVWSEs1VmtjazQrb05KSzRrSVBiT1pRdi91LzJtL1g5VmZvVVAwM0dYTnBlNUJySDZZdnNjLzJQT0ZZekxpMmpmSVRwTE44TEdHTm1Zcng1RDU0MVhrYUhyd2RwNWpua3VMN0tGdjhUR09FYmkvRnBHYnhuVDlFUEViN01Dc3FkOUwraVhLdjBxUVhTLzU2TVhtMDIxK1l4bmlzSitsS3JlSzkwWVppTUQwVTgrQVo5bUtkd04zM3R0MWwvbWZDZFBPWE9LZUczc3I3N2hWOUVXMkZ6SHZhbTMrZWM4RmM2WTlLSG80anJyR3hBekhvV1hzOGUrc0Y3dUdka0hpWjQ3MlVjdGdkNS9mSXFYSm5ueWxSK3M1VHY0MWt5aWt4TVN1ZVNOeDlQVW0vMGJHZXMwRXUvdUZmNklpUHBRNDhWNk5PY3Z3bkVtRjhQL1ZGTUZXaHZjdzc3NlVQR2k3c0hNamlPMDNmem5DQjk2VUZ4MWVBNGJjZzljb1I3VDVEYUo0MG9GM0FOWlNmOVN5RXYvNEZ5R2VVbHlzT2tpaXdhcEl1MTNwMlV6aFF5bGRTNGZIVVFzMW4yVjVTM2tNS1VmMDk5bjFiSXVHMDA5OW5QMFdsTXhYU1JSMlo0bjhTM3lYTjZHWDNFTzhoZ3ViQ2ZMc2FINWJWcFBBY0xNTTZ6RWZtMHNjNWNpVXpqVDF4L1B5SEhVTTYxWGk3MWZmUWZma2g1a3VzN2dXL0pkd3V4Uzc4ZHUzdzJkbkZOZDNITmR2RU1uV2QwNDNINTNRNTBtV244NW52NGlySFh1V2hzNTk0U3RwNUdoMW5EY2hmNFBzdXRpK2Vsc1lpK1RoUDFSb1IxaXpiSFk3bnhNRzR6R2ZPWk43RzloZmd1ZmRLSVo0M1Q1dG5oUE8vTlFZN25uSE5JbjRSU3N3ZWI2RmQyNkR2cFIvZFFOcEY2VkdqdlVETGZxSEhmVVdkTTJHRitoK2thcHB1UzcrbXZsRXQ5QTdZeXZjbHp3dG1wTnptdmFOMk1qL2plK3hwR3lUcW1ZSzIrV1g0ajZ0dGtkcnYxUG9oU2ptV0hUTmM3ZjlkYjJKLzMyTWREY3UrLzVIMGFrLzFlUkFUR2FaVDd6MkNUNUhSU3BtZnl1emdtK1pINk9Vc0g3d1BQQTlqbVBZaTFBditQTUY5Z3ZzcjEvK3JWNTZHM2xOOXR3K2RTOXdidG5lSTVWV3k4N2h6WEc1MmR3M1lDL3EwOFQxYnc3R21uZE9NNWsvbG1KWDJjY293MXpTVDYzWXdwMzhVQ2N3Mzd1Um96dEIxaVA3cm4rNkR6WHNSbTdHK1RaeDlXVTY2aHZDY1YxOUYyZ1dGd256Y3liaEo4aHV0UXNOL0ZuL1J0MCtZN0gvdVdVSDZSY2hVcS9YbVVPYWowSGVUWmVQNXFTZnYzc205WlBCdkhVSnFwK0xFdmZTczZ2UTh4cG8xakROZVBhZktXNFJrS24wbC82TE1vRy9abkJIM1BvRXlXajJPMCtUekdHVjBjencwOGt6ZVNWR3g0Rml1TkQ3bG11akZkcTZEdnZGdnVvM244TGsySDgxWXFkdFJEbUtlOXh6TXVhYzlNMmRYSDh0d3ZRNGYyRkpZTGRJMWpMM2lZY1J6eFBrTmJuK2M2UDRITnZ2MWNzdzl5N2V4RnV3bmVDd0dlamFka1d5YlExbUx0RHZTS2QvcFJ4b0tDYjhpWWNESDd0OW1zNDc0OHlYcmNNa1l1NmpnT3k4VThhRnN4enB5Q3IzUE9PcmdXL3NGMk8rS2RuSjhHOW5zanNnMUdyZUt1TWxienJwbkRkWHlFTWtUcHB0bUdiSmIzc0YrWi9EYVRka1diaEJSK2JLYThvOEI5bTJEZnpuRCszK0E0dDlIMmZkQmwzRnVJQmNidjZQdUxlZHFCSi93bWFzMEZxS0V2WGF4MTBnZlBvaCt5bDJ2dFRUekFNcXZFdmNqMjlLWTloQnYxNTV4M2ZMZndUdndsejRpNGM4bW94akI1cjhaUjZuMlgrbXM4eS83aWZHQ3lmL3BXd243cHRTeGJ5emw4RTlzNFIxV2tXc0k1RitnMjErS3ZwWi9lcnB0bzEzbzRCZ2F5dFI5ekRyZnovbnpkK1NidGlQVnprMmlYYkp1SUJlZHdUaTg0SCtqSHlSbkdGWEJ1ME04UVhMN0EvZ3MvUDE4YmpSRFAxMnpQaDdSWFJidXY0REhUd21Pc3Y0RnJXOWhjSWVJY09SWWNtOEY3L2xwcExaUDdMZk9LWDNpVnZ6VFVuWGdyZlR0eXhSKzZ2Sjk3bDhlUE01LzZKUEk0OVNJeWg0eEs4dkdYZ0krMmtNM1ViWllwcER5U3ZQTXUxMnUvd1cvOUNZemdQL21ML0craDNmYmZ4WWNycE1XQTlQY0hrakgxQ2lOZlRqTDZJakN1RkxoaHcwREdGdzFrUXJkQ29WQW9GQXFGUXFGUUtCUUtoVUtoVUNnVUNvVkNvVkFvRkFxRlFxRlFLQlFLaFVLaFVDZ1VDb1ZDb1ZBb0ZBcUZRcUZRS0JRS2hVS2hVSHdxZUlEUlgvTWV4anljaEE5ZWpNS2QyQUlZTnhvWFlUQU5aT0FGUGpVQzd3VHhsTG9QSWFZOE1nM1BDTzhqcnE0aFEvdXlxK3ZVdDd1NlNYMjNxL3RRcUIxbVNZK2VScHZaMnU5ZDNZTkpwdTdxWG1TWWxxdHJ6TTkzZFoxNnBhdWIxT3RjM1lkYWN4TjZZS0VJQlNoRU1iVnFOTUNtWElvb21ra0NiV2lST1hjeEZhTXVuZ0htaDJXSmZMNHBRWVIvQzFYTXErZjNDY1JseXFhMFdYb2RueUZaY2dUL0ZVelZNdGZHZXVZc2s5YWJXVytxbmlXMDNrYmJyYlJqMFc2VU5zTUlVZzlTYitHN1dGODlWbC9yQ3pDSFdtNWZxaGl6WkJzQ3RORENzaGJyRGJBZVlTT0lScmRzSlZNTnpCVnZXOW5HZUYrZnhEaUVaVDhpMTJ4UG5Sd0xDNlZNMS9LTnlBM0lrUmpZeDZTZHFOdFRTOWJTeXJkQjJWK1JxcVB0OWZ3MkpuTmFXU29rUjg1aWZtbytGck5OWW5UQzhydG1PYlp6NWZlMkxHR2ppWFdLa1E3SnArVzJLRlhXa3ZseDVvanhhK21id1N2OUVPOFRiRVdZWDhZNUNpV3laTEpIcVY0RVpKdkVDZ2pKR2tXYkcyWHY2ajdKNnVteGlnb0tpNjNxQnR0YUdtMk9KdHBhYk91dWFLd2xHZ3Nrd3RIbWZLc2tFckdxd3ZVTmliaFZaY2Z0MkRvN2xHK05HRkZoMThiczlkYXlGcnU1V255ekpOQVdiVTFZa1doOU9HZ0ZveTF0TWZHTkpjd1h6TEZ5aFNpZVpWVUZJaTBOVmtXZ09SZ05OakszTXRyUWJGVzBodUtpcHVxR2NOeUs5TGRURjQxWnBlSGFTRGdZaUZodWpTd1RaYVZXUE5vYUM5b1VkWW4xZ1podHRUYUg3SmlWRVAxWVhHMHRDUWZ0NXJnOTE0cmJ0bVUzMWRxaGtCMnlJc2xjSzJUSGc3RndpK2lnckNOa0p3TGhTRHkvWnVXS2xXV0xacGJFd29ISTB1cnJwYVFRYlFsWWlWZ2daRGNGWW8xV3RPN2E0L2dwNy9KaEVyWFQvMTkyZWcxV1lnVXB3eUxNN0xmdmw3SWxZb2JyMmRLSWJQWDFTbjdTZC8zUG1mL0lLWk84aVFGbkdqcnhMMzc3cTl0TDByVlo0dStkakN6a2FETzFHYnplYzdRWkI4eXNuS1BhOUlPNTQzTk9mMS9MdzNuaTFmSU96TXpLZVVtYnBtVWRtSnR6NTFGdHlzRXhtVVVqUzI3V0xGN0lzK1hUNGpOS1hpUzlSTWRhTFp2NW8vajhBbm1VdkVqK3lYalZ4a1p4bk9HWldlZHViY2ZjK1VyT0psN2ZySDIrcFhnQms4UGt3Q2ErdmVPdVRucXFiTUNoZDY2TERjUVNJWkZBT2h0TGxRcUxWS1NpTkRoS0pkb1NLVWI1VVVXSm9xejNJdmRzUnpLVjI3UngweEsxS1pYSWw1UDJSL01qZGNpUHB2eTZQak43aHFKU3FidjN2TTg3Ny92TXg4N096dTB1QWU4Q1Byd0hSR1JXQjA0Q004Q3F5Q2l0aXVicVBKamFyR3hDM1UzNG93OG9UV1FOcUFBS3h0bUVYcHZJQURBS1RBTXpnRS9xUk9Ra2NCWllBcjZRR1V0cGNwL2ZpYkUzdWM5SUtwMTRPaTZMUjd6aXlIZGxzZlR0Z3NmZjJ1OXg1akZQMXVQSkh1cjJ3dHZUSG0vZTZuRW9GcmNGMXpYRXI2YkNTaGdYR2NiQVQ4RlM5aXNTb0pSd2NrVjVnRGdBVTN6VmlLV0VTaDFHZkdaSnFTRlVZUXJGQ3VDVnF3cDFHeHJqcVRwV1lXc2tSRGo3Qi92Y3k3RFBTeHNhNHpPcGI3SlB5ZXZBRXFDd1QzRit3ajRoWjltcW1IUFlKREFETEFIWGdEWEF4MVp4Zm96ekkvWVJDYkFQU1JlUUJFYUJHV0FKV0FQODdFUFlJUHRBdkk1Sksvd2t3TmdIc0VIMlBpN3JmZGdBdXdIdkJydUJvZjNKVGV5Snowdkg3S282UEZaMW1scXFUaWdjTDdNL3VyZTJZRVVadU5OWVVZdEtPK2tqTzVWMk4vWVFsbCt6dS9kSlhtWi9MZWttdjVMYXdkNGpEb0FYVGRnZ29BT0R3Qmh3Q3ZEQnV3N3ZPckdCNTRBcmdBTmdsY0VHQVoydEFPOEExOGtPd0FJR0FaVzk2NktiTXJ2bUdtbWVDck0vc04rUUpzejQ3OWx2SmIvRDNwTDhPL1pyeVcrREkrQVY5cFliNFNSVmp6eEJuU0E0Q081Qy9qNzJ5MUpIaUZkU2pXd0pjOGRodTRBa01BQ01BdE9BankyeGR2Y0pIa0lqaTJSRkpWQzY1RFBKUHljdnFjUTZ3UzFqSHhhZ0xvelI4d2c4bUJsOXhtQ1djZWxuS0FwalhId2VuakRHRDM0RVR4amplK2ZnQ1dNOGZScWVNTVlUSitBSll3eVB3aFBHR0JpQ0IxTm1MLzZpWXpOUEREeEY5VlNBVFdHV3BqQkxVNWlsS1ZMRHBzUkpidFdJc2IzZ2RuWml4aTViNXBaT2JpOVErMDFxSDZEMlM5UWVwL1laYXArajlsNXFINmEyU1cyTjJoRnFXOVJlcExzeEZUYTEzcmlydU1kcXB2WUt0VitqZHBIYUJyVmoxTzZndGs0VFZwbTF1WS90bEpTVlZFcUpodzc4U0I5Mm53QnJ3NHkyWWMyM1lVOVlncjBHVkdUSmdraHY5OFNiSW9MYlM1MUpyN3k5SjM0U2o4OHlLaTdqTml5VGo0RWEzS0JsTEtObE5MS01CZ0t3U1dBVXVBcXNBUlhBQjNVN0JqNHRiUUMyQzBnQ284QlpZQTN3eWVHc0FZeWNyQTd4ZFRrd01laXU2c0FIZ0JxMmpMTWRaeHRyczFxRFd0QU1QcXBNYXpRUW9RT1JTb1FsU0RpTUxUdlVxRGFXYWNQY1Z3My8rcXFCMUtacTJVVTJMYlp1OWx5VnA5MWIyTHJwVDExamthY2VvRDhoa1Jxc1BMcUhHRFFHM2syS3NyeUxhS3JnYnFLeFY4RnhWenVFYWdIWDJNb1g2QVpSYTQ3ZjB2N0dQOVBLRE83ZnRVWCtGNzFjUTEzK1owUmVuZVB2YVJmNDIxMWxGWkUzalRJRkxlaFNPcS90NXErdFNPazVKQzY3L0l5Z09mNTlyWjgvcGNuRXVKYzRYRVRKQ3ZBRHhqQi9GTzFsdEtQY0txTE5PWjdVRHZPOW5tcVhxRFBIZDJBSXB1ZDJZckJiTk5scE5JTElHM3pYNDQ4bnl2UzR0ZFYveVovM0QvZ2Y5c2Y5Vy8xdGZ1NXY5YmY0TjZvaE5haHVVTzlYNjFSVjlhazFLbE9KdXJGY1diVk1mSk9TamI2Z0lIeFN3dFpJUDhpRUZWKzFZdXVqS3NPN2xQTTFKY2R5QjlNMDUxdzlSbkpIZGVlZkI2TmxXcmQvMkxrdm1xWk9LRWR5UTJsbnQ1a3IreXNIbklTWmMveUQzOG5QVW5xeGdLakRmbGltWkNoZnBoVVJPdC9paFBibDV3bWxqZWVmYlJIODlmUFBGZ3FrT1h3NjJad005VFh1K1VibUhtYXNhczA3Ui9OZGZtdmF1WlE3bUhkM3ZmSkthN3JneEtWZnFjRFBPVDgrcUkvazUrbVg5SXRzWnA3ZUZGVEl6eXQ5OU12c0FSRlgraktGUXE1TUQwa2QwZWxONkxCMGJrcWRpbjlwb1NPNkd2RjBsejFkRFBXaDZ4QUVYVzB0aVVsZHJMWlc2bXFvME0wV083S1oyWTRPcVduQ2k1M1VGSnYwLzlTc3hLQ0p4YVFtYkpNVnFWa0oyMExqOUVtSnBrRVMwYVNFUGtnMEtkSG9nMUp5Nkk2a3F5cTVjRnR5UWZhazBEc2F6ZE0wcks1ckdsYWhNZi9mWXp4dG1yVFVXemcya2gyUFpzZWkyWEZnekhubTlQRm14ejZxNjdQSENpS2hPNG94ZHZUWWNjRkh4cDFDZER6akhJdG05Tm5la1h1a1IwUzZONXFaSlNQWm9menNpRFdlY1h1dDNtejBTS1pRNmgvc1R0elYxNFhiZlhVUDNxT3hRZEZZdCtpclAzR1BkRUtrKzBWZkNkRlhRdlRWYi9YTHZvaGM2b1A1V1pXa0MvdEdQQzZ4K2pvczI3R1d0a0k2SER6Vko5ZHdiMXZ6bVpZRnZMcThUT3JOZ25OL05PMDBBQ0sxTGJVdEpWSjR0RVJxQThLQmFxcjVURzlieXdKOXVab0tJdHdZVFJOellySTRTWnF6VDJhOFh4RUhRaE9UWXNJOWF4Yi8xNEZjMXJHT1pJb1RoT1Njem9NNUo3bC9PRC9yOXlNNkppN0o2Vm1QMWRkbnk1V3JYbkE3Z2owaXFDaTNoU0syVjhScWE2dkMvNzcvazFYZUo1NENteTJXcUJXaCtFUXNLRTRrTjhTd0l3d040MXBIaHZNTGVMRVMveFhGQWk2d1NFMWFYRytqT216VEpGNlppR3RleDhSazFhdk94VVNWdlpxb1VseWZrdHVIbUN6ejlveE55R2JsZEpvaitkUUc1V0dsQzU4ZVhOa0IzZ2JlQm82RDQwcVhGVEs0d2hLOFZrM3crcm9NOS9zeWZMM1Zndmx2QVFZQWxPOUcyQTBLWlc1a2MzUnlaV0Z0RFdWdVpHOWlhZzB5TUNBd0lHOWlhZzA4UEM5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlRHVnVaM1JvSURJNE5qNCtjM1J5WldGdERRcElpVnlSMzJyRElCVEc3MzJLYzlsZUZOT1FOaTFJWUdRdDVHSi9XTFlIU1BVa0V4WWp4bHprN1hmVTBzRUU0MCtPMy9ITEo2K2I1OFpvRC96ZFRiSkZENzAyeXVFOExVNGkzSERRaHUxelVGcjYreTUrNWRoWnhrbmNyclBIc1RIOXhJUUEva0hGMmJzVk5rOXF1dUdXOFRlbjBHa3p3T2FyYnJmQTI4WGFIeHpSZU1pZ3FrQmhUNDFlT3Z2YWpRZzh5bmFOb3JyMjY0NDBmeWMrVjR1UXgvMCttWkdUd3RsMkVsMW5CbVFpbzFHQnVOS29HQnIxcjA0L0VtVzNYbjUzam9rOEhNNHlXcGdvOXBGcFllS1krQmk1U0Z3RVBpUStCRDRuUGdldUU5ZUJMNGt2Z2ErSnlZd28wMTFsdUt0TVBjdlFzendsUGtYRGQyZkJPaVVNajF6azRoeEZFcDhoWmhGUzBBWWZMMlVuQzZRS2svMEtNQUJDeVlsT0RRcGxibVJ6ZEhKbFlXME5aVzVrYjJKcURURWdNQ0J2WW1vTlBEd3ZSbWxzZEdWeUwwWnNZWFJsUkdWamIyUmxMMFpwY25OMElETTFMMHhsYm1kMGFDQXlPRFF2VGlBMkwxUjVjR1V2VDJKcVUzUnRQajV6ZEhKbFlXME5DbWplVkZETGFzTXdFUHlWUGJhSHNoYW1UZ3JCa0NjdGFWMFRwNmVRZytKc2JkRkVFb29NOGQ5M0xlZlJYclNhMldHWW5RUWlHTUF3aGlFSUllQUZSQnlCaUNCKzVxK0FPQm5BYUlSTDFrU3d3bHc2MG43dGlGai9uOGpvN0pmVWdzQ1ZPZENIdE96VktkYXRKU3k4YThvZ1d4bmowelJZc24yd2dDVE1BZ3NxKzEzV0hFK2JFSU1YMjBDTnRUWmVlbVUwRmxacUhEdXZ2bVhwTWNlSjJoMlVxWnkwZGR1QnVmYXV4V2t0bmNlRnFocEhPRk9TOThjYmRNWk9wYjNDdWQ2ek9XSFdQUXNPZUVkditxQTBGYlhrSXk3cXo4WjNYQitERDFNL1pCcC9nYzN1VkRwbGI5Q1MrMHVzdWFTSk9YZnA4VXZ2eWQyYzBuVFQ5N0VOM1VUNExuWDFNSnMvVFY4ZnVhSkwvUldJYTFsNW12NEtNQUJ1STR5UURRcGxibVJ6ZEhKbFlXME5aVzVrYjJKcURUSWdNQ0J2WW1vTlBEd3ZUR1Z1WjNSb0lEUXdORGN2VTNWaWRIbHdaUzlZVFV3dlZIbHdaUzlOWlhSaFpHRjBZVDQrYzNSeVpXRnREUW84UDNod1lXTnJaWFFnWW1WbmFXNDlJdSs3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSS9QZ284ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pCWkc5aVpTQllUVkFnUTI5eVpTQTFMall0WXpBeE5pQTVNUzR4TmpNMk1UWXNJREl3TVRndk1UQXZNamt0TVRZNk5UZzZORGtnSUNBZ0lDQWdJQ0krQ2lBZ0lEeHlaR1k2VWtSR0lIaHRiRzV6T25Ka1pqMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M4d01pOHlNaTF5WkdZdGMzbHVkR0Y0TFc1ekl5SStDaUFnSUNBZ0lEeHlaR1k2UkdWelkzSnBjSFJwYjI0Z2NtUm1PbUZpYjNWMFBTSWlDaUFnSUNBZ0lDQWdJQ0FnSUhodGJHNXpPbmh0Y0QwaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x5SUtJQ0FnSUNBZ0lDQWdJQ0FnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21SalBTSm9kSFJ3T2k4dmNIVnliQzV2Y21jdlpHTXZaV3hsYldWdWRITXZNUzR4THlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmNHUm1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNCa1ppOHhMak12SWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwd1pHWjRQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNCa1puZ3ZNUzR6THlJK0NpQWdJQ0FnSUNBZ0lEeDRiWEE2VFc5a2FXWjVSR0YwWlQ0eU1ESXdMVEEyTFRJMFZEQTVPak16T2pBMEt6QXlPakF3UEM5NGJYQTZUVzlrYVdaNVJHRjBaVDRLSUNBZ0lDQWdJQ0FnUEhodGNEcERjbVZoZEdWRVlYUmxQakl3TWpBdE1EWXRNalJVTURrNk16TTZNRE1yTURJNk1EQThMM2h0Y0RwRGNtVmhkR1ZFWVhSbFBnb2dJQ0FnSUNBZ0lDQThlRzF3T2sxbGRHRmtZWFJoUkdGMFpUNHlNREl3TFRBMkxUSTBWREE1T2pNek9qQTBLekF5T2pBd1BDOTRiWEE2VFdWMFlXUmhkR0ZFWVhSbFBnb2dJQ0FnSUNBZ0lDQThlRzF3T2tOeVpXRjBiM0pVYjI5c1BrRmpjbTlpWVhRZ1VFUkdUV0ZyWlhJZ01qQWdac084Y2lCWGIzSmtQQzk0YlhBNlEzSmxZWFJ2Y2xSdmIydytDaUFnSUNBZ0lDQWdJRHg0YlhCTlRUcEViMk4xYldWdWRFbEVQblYxYVdRNk1qaGtOVFV5Tm1ZdFkyUmxPUzAwT0Rka0xXRXlNMlF0TlRSaFpEZ3lZMlV5WXpjMVBDOTRiWEJOVFRwRWIyTjFiV1Z1ZEVsRVBnb2dJQ0FnSUNBZ0lDQThlRzF3VFUwNlNXNXpkR0Z1WTJWSlJENTFkV2xrT21abVltSTBaR1poTFdFeVlXTXRORGd5WXkxaVptWTNMVGhqT0RGaE1qZzJOemRsTUR3dmVHMXdUVTA2U1c1emRHRnVZMlZKUkQ0S0lDQWdJQ0FnSUNBZ1BIaHRjRTFOT25OMVltcGxZM1ErQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHlaR1k2VTJWeFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGNtUm1PbXhwUGpJOEwzSmtaanBzYVQ0S0lDQWdJQ0FnSUNBZ0lDQWdQQzl5WkdZNlUyVnhQZ29nSUNBZ0lDQWdJQ0E4TDNodGNFMU5Pbk4xWW1wbFkzUStDaUFnSUNBZ0lDQWdJRHhrWXpwbWIzSnRZWFErWVhCd2JHbGpZWFJwYjI0dmNHUm1QQzlrWXpwbWIzSnRZWFErQ2lBZ0lDQWdJQ0FnSUR4a1l6cDBhWFJzWlQ0S0lDQWdJQ0FnSUNBZ0lDQWdQSEprWmpwQmJIUStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lEeHlaR1k2YkdrZ2VHMXNPbXhoYm1jOUluZ3RaR1ZtWVhWc2RDSXZQZ29nSUNBZ0lDQWdJQ0FnSUNBOEwzSmtaanBCYkhRK0NpQWdJQ0FnSUNBZ0lEd3ZaR002ZEdsMGJHVStDaUFnSUNBZ0lDQWdJRHhrWXpwa1pYTmpjbWx3ZEdsdmJqNEtJQ0FnSUNBZ0lDQWdJQ0FnUEhKa1pqcEJiSFErQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh5WkdZNmJHa2dlRzFzT214aGJtYzlJbmd0WkdWbVlYVnNkQ0l2UGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0prWmpwQmJIUStDaUFnSUNBZ0lDQWdJRHd2WkdNNlpHVnpZM0pwY0hScGIyNCtDaUFnSUNBZ0lDQWdJRHhrWXpwamNtVmhkRzl5UGdvZ0lDQWdJQ0FnSUNBZ0lDQThjbVJtT2xObGNUNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BISmtaanBzYVQ1U1pXbGphRzExZEdnZ1RXbGphR0ZsYkN3Z1NUTTJORHd2Y21SbU9teHBQZ29nSUNBZ0lDQWdJQ0FnSUNBOEwzSmtaanBUWlhFK0NpQWdJQ0FnSUNBZ0lEd3ZaR002WTNKbFlYUnZjajRLSUNBZ0lDQWdJQ0FnUEhCa1pqcFFjbTlrZFdObGNqNUJaRzlpWlNCUVJFWWdUR2xpY21GeWVTQXlNQzQyTGpZMlBDOXdaR1k2VUhKdlpIVmpaWEkrQ2lBZ0lDQWdJQ0FnSUR4d1pHWTZTMlY1ZDI5eVpITXZQZ29nSUNBZ0lDQWdJQ0E4Y0dSbWVEcFRiM1Z5WTJWTmIyUnBabWxsWkQ1RU9qSXdNakF3TmpJME1EY3pNalF5UEM5d1pHWjRPbE52ZFhKalpVMXZaR2xtYVdWa1Bnb2dJQ0FnSUNBZ0lDQThjR1JtZURwRGIyMXdZVzU1UGxCUFUxUWdRMGdnUVVjOEwzQmtabmc2UTI5dGNHRnVlVDRLSUNBZ0lDQWdJQ0FnUEhCa1puZzZRMjl0YldWdWRITXZQZ29nSUNBZ0lDQWdJQ0E4Y0dSbWVEcE1iMmR2VFdGeWEyVStVRHd2Y0dSbWVEcE1iMmR2VFdGeWEyVStDaUFnSUNBZ0lDQWdJRHh3WkdaNE9reHZaMjlUY0hKaFkyaGxQa1E4TDNCa1puZzZURzluYjFOd2NtRmphR1UrQ2lBZ0lDQWdJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQZ29nSUNBOEwzSmtaanBTUkVZK0Nqd3ZlRHA0YlhCdFpYUmhQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0Nqdy9lSEJoWTJ0bGRDQmxibVE5SW5jaVB6NE5DbVZ1WkhOMGNtVmhiUTFsYm1Sdlltb05NeUF3SUc5aWFnMDhQQzlHYVd4MFpYSXZSbXhoZEdWRVpXTnZaR1V2Um1seWMzUWdOUzlNWlc1bmRHZ2dOVEF2VGlBeEwxUjVjR1V2VDJKcVUzUnRQajV6ZEhKbFlXME5DbWplTWpSU01GQ3dzZEYzemkvTksxRXcxUGZPVENtT05qUURDZ2JGNm9kVUZxVHFCeVNtcHhiYjJRRUVHQURuTUF2Y0RRcGxibVJ6ZEhKbFlXME5aVzVrYjJKcURUUWdNQ0J2WW1vTlBEd3ZSbWxzZEdWeUwwWnNZWFJsUkdWamIyUmxMMFpwY25OMElEVXZUR1Z1WjNSb0lESXpNeTlPSURFdlZIbHdaUzlQWW1wVGRHMCtQbk4wY21WaGJRMEthTjVzemsxTHcwQVFCdUMvTXJkdVVKcDFOMFNVVWdnTmZtQ0R3Ulk4YnpaVHM3YkpsSEdENUw5N2NLb2lIcnk5TTd6TU14Y1dOQ3dXYVRIR2psZzlZZkJkTHhrcUNRNFA1M0J2OHl4SlY5VDNPTVEzOVJXUGJwaFUvYmpad3VvT2lsdlpNYm9ZYUNoZFJGVmVHMjIwemsybXI2elY5a3libWRhem41WW9oV2RxWElTNnZLbmNIaG1NaHQwSHd6TnhtNlFQT0wxTE9GRnJlcUhLOFI1Vi9UMXNqdXg4SjBTU1Z0VCtwMlcvV3MzVWpoNkZhNm5CRXdicjBMRGpTYng1UHMvekpOM1F5QjdsVk5nRmJQL2V1clFtTTFJWW0xZjBVWDdaaG5oQWxTeVhud0lNQUMzWlhBWU5DbVZ1WkhOMGNtVmhiUTFsYm1Sdlltb05OU0F3SUc5aWFnMDhQQzlFWldOdlpHVlFZWEp0Y3p3OEwwTnZiSFZ0Ym5NZ05DOVFjbVZrYVdOMGIzSWdNVEkrUGk5R2FXeDBaWEl2Um14aGRHVkVaV052WkdVdlNVUmJQRFl6TlRFNVJrUXpNMFpFTURaRE5EazRNVUk1TVVFelJqazVRak5HUkVOQ1BqdzRRelEyT1RBMk1qbEdPRFZHTnpRd1FUQTJPRGc1UmtSRlFrWXpOVUpHTmo1ZEwwbHVabThnTVRNZ01DQlNMMHhsYm1kMGFDQTBPUzlTYjI5MElERTFJREFnVWk5VGFYcGxJREUwTDFSNWNHVXZXRkpsWmk5WFd6RWdNaUF4WFQ0K2MzUnlaV0Z0RFFwbzNtSmlBQUlteG9SSERFd01URlZBUWtBR1NERDJnUWczb0VUUFZpQ0xnWUVSQjhIMEcwZ3dNZ0FFR0FEUzlnVWpEUXBsYm1SemRISmxZVzBOWlc1a2IySnFEWE4wWVhKMGVISmxaZzBLTVRFMkRRb2xKVVZQUmcwSzwvRG9jdW1lbnQ+CgkJPC9BcHBlbmRpeD4KCTwvQm9keT4KPC9FbnZlbG9wZT4K41101000001021209" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106756' + Content-Type: + - application/soap+xml; charset=utf-8; action="http://ch.swisspost.ebill.b2bservice/B2BService/UploadFilesReport" + Cookie: + - ittrksessid=c996ea6f.5dedd6d0eee49 + SOAPAction: + - '"http://ch.swisspost.ebill.b2bservice/B2BService/UploadFilesReport"' + User-Agent: + - Zeep/3.2.0 (www.python-zeep.org) + method: POST + uri: https://ebill-ki.postfinance.ch/B2BService/B2BService.svc + response: + body: + string: http://ch.swisspost.ebill.b2bservice/B2BService/UploadFilesReportResponse00000000-0000-0000-0000-000000000000urn:uuid:52e2cd23-f8a2-46ae-9545-283b1bb87a972022-05-13T04:51:26.164Z2022-05-13T04:56:26.164ZXML2022-05-13T06:51:26.1646559+02:00test-transaction-123OK + headers: + Connection: + - close + Content-Length: + - '1374' + Content-Type: + - application/soap+xml; charset=utf-8 + Date: + - Fri, 13 May 2022 04:51:26 GMT + Referrer-Policy: + - no-referrer-when-downgrade + Server: + - Apache (proxied) + Strict-Transport-Security: + - max-age=31536000 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-RP-UNIQUE_ID: + - Yn3jzRFe1qhLp6voSVLHyAAACQw + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/ebill_postfinance/tests/test_ebill_postfinance.py b/ebill_postfinance/tests/test_ebill_postfinance.py new file mode 100644 index 000000000..81552d564 --- /dev/null +++ b/ebill_postfinance/tests/test_ebill_postfinance.py @@ -0,0 +1,50 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +import os + +from .common import CommonCase, recorder + + +class TestEbillPostfinance(CommonCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.transaction_id = "test-transaction-123" + cls.invoice_message = cls.invoice.create_postfinance_ebill() + + @recorder.use_cassette + def test_ping_service(self): + """Check the ping service testing purpose only.""" + self.service.ping_service() + + @recorder.use_cassette + def test_upload_file(self): + """Check uploading an XML invoice to the service.""" + with open( + os.path.join( + os.path.dirname(__file__), "examples", "yellowbill_qr_iban.xml" + ), + "r", + ) as f: + data = f.read() + data = data.encode("utf-8") + res = self.service.upload_file(self.transaction_id, "XML", data) + result = res[0] + self.assertEqual(result.FileType, "XML") + self.assertEqual(result.TransactionID, "test-transaction-123") + self.assertEqual(result.ProcessingState, "OK") + + @recorder.use_cassette + def test_search_invoices(self): + """Check the search invoice endpoint. + + Get the state of the invoice send in the previous test. + And update the invoice message record with the result. + + """ + res = self.service.search_invoice(transaction_id=self.transaction_id) + data = res.InvoiceList["SearchInvoice"][0] + self.invoice_message.update_message_from_server_data(data) + self.assertEqual(self.invoice_message.state, "error") + self.assertEqual(self.invoice_message.server_state, "invalid") diff --git a/ebill_postfinance/tests/test_ebill_postfinance_message_yb.py b/ebill_postfinance/tests/test_ebill_postfinance_message_yb.py new file mode 100644 index 000000000..047226635 --- /dev/null +++ b/ebill_postfinance/tests/test_ebill_postfinance_message_yb.py @@ -0,0 +1,65 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +import logging +import os +from string import Template + +from freezegun import freeze_time +from lxml import etree as ET + +from odoo.modules.module import get_module_root +from odoo.tools import file_open + +from .common import CommonCase + +_logger = logging.getLogger(__name__) + + +@freeze_time("2019-06-21 09:06:00") +class TestEbillPostfinanceMessageYB(CommonCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.schema_file = ( + get_module_root(os.path.dirname(__file__)) + + "/messages/ybInvoice_V2.0.4.xsd" + ) + # If ebill_postfinance_stock is installed it will break the test + try: + cls.invoice.invoice_line_ids.sale_line_ids.write({"move_ids": False}) + except Exception: + _logger.info("Disabling moves on invoice lines.") + + def test_invoice_qr(self): + """Check XML payload genetated for an invoice.""" + self.invoice.name = "INV_TEST_01" + self.invoice.invoice_date_due = "2019-07-01" + message = self.invoice.create_postfinance_ebill() + message.set_transaction_id() + message.payload = message._generate_payload_yb() + # Validate the xml generated on top of the xsd schema + node = ET.fromstring(message.payload.encode("utf-8")) + self.assertXmlValidXSchema(node, xschema=None, filename=self.schema_file) + # Remove the PDF file data from the XML to ease diff check + lines = message.payload.splitlines() + for pos, line in enumerate(lines): + if line.find("MimeType") != -1: + lines.pop(pos) + break + payload = "\n".join(lines).encode("utf8") + # Prepare the XML file that is expected + expected_tmpl = Template( + file_open("ebill_postfinance/tests/examples/invoice_qr_yb.xml").read() + ) + expected = expected_tmpl.substitute( + TRANSACTION_ID=message.transaction_id, CUSTOMER_ID=self.customer.id + ).encode("utf8") + # Remove the comments in the expected xml + expected_nocomment = [ + line + for line in expected.split(b"\n") + if not line.lstrip().startswith(b" +

Beta License: AGPL-3 OCA/l10n-switzerland Translate me on Weblate Try me on Runboat

+

This module is based on the server_environment module to use files for +configuration. So we can have different configuration for each +environment (dev, test, integration, prod).

+

This module define the config variables for the ebill_postfinance module.

+

Exemple of the section to put in the configuration file:

+
+[postfinance_service.name_of_the_service]
+use_test_service": True,
+username": username,
+password": password,
+
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/l10n-switzerland project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+ + + diff --git a/ebill_postfinance_stock/README.rst b/ebill_postfinance_stock/README.rst new file mode 100644 index 000000000..c28c170aa --- /dev/null +++ b/ebill_postfinance_stock/README.rst @@ -0,0 +1,84 @@ +======================= +eBill Postfinance Stock +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d560906a22ebe7ea9c8860c9debf497de39154cb16cf9b93cdf7123f96203532 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--switzerland-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-switzerland/tree/16.0/ebill_postfinance_stock + :alt: OCA/l10n-switzerland +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-switzerland-16-0/l10n-switzerland-16-0-ebill_postfinance_stock + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-switzerland&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds some information related to delivery in the eBill Postfinance integration. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Thierry Ducrest + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-TDu| image:: https://github.com/TDu.png?size=40px + :target: https://github.com/TDu + :alt: TDu + +Current `maintainer `__: + +|maintainer-TDu| + +This module is part of the `OCA/l10n-switzerland `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/ebill_postfinance_stock/__init__.py b/ebill_postfinance_stock/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/ebill_postfinance_stock/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/ebill_postfinance_stock/__manifest__.py b/ebill_postfinance_stock/__manifest__.py new file mode 100644 index 000000000..5d826a902 --- /dev/null +++ b/ebill_postfinance_stock/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "eBill Postfinance Stock", + "summary": """Add stock integration to Postfinance eBill""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Camptocamp,Odoo Community Association (OCA)", + "maintainers": ["TDu"], + "website": "https://github.com/OCA/l10n-switzerland", + "depends": [ + "ebill_postfinance", + "sale_stock", + ], + "auto_install": True, +} diff --git a/ebill_postfinance_stock/i18n/ebill_postfinance_stock.pot b/ebill_postfinance_stock/i18n/ebill_postfinance_stock.pot new file mode 100644 index 000000000..df4ea79cb --- /dev/null +++ b/ebill_postfinance_stock/i18n/ebill_postfinance_stock.pot @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ebill_postfinance_stock +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: ebill_postfinance_stock +#: model:ir.model.fields,field_description:ebill_postfinance_stock.field_ebill_postfinance_invoice_message__display_name +msgid "Display Name" +msgstr "" + +#. module: ebill_postfinance_stock +#: model:ir.model.fields,field_description:ebill_postfinance_stock.field_ebill_postfinance_invoice_message__id +msgid "ID" +msgstr "" + +#. module: ebill_postfinance_stock +#: model:ir.model.fields,field_description:ebill_postfinance_stock.field_ebill_postfinance_invoice_message____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ebill_postfinance_stock +#: model:ir.model,name:ebill_postfinance_stock.model_ebill_postfinance_invoice_message +msgid "Postfinance message send to service" +msgstr "" diff --git a/ebill_postfinance_stock/messages/invoice-line-stock-yellowbill.jinja b/ebill_postfinance_stock/messages/invoice-line-stock-yellowbill.jinja new file mode 100644 index 000000000..521b51ec7 --- /dev/null +++ b/ebill_postfinance_stock/messages/invoice-line-stock-yellowbill.jinja @@ -0,0 +1,10 @@ +{% for picking in line.sale_line_ids.move_ids.mapped('picking_id') %} +{%- if picking.state != 'cancel' %} +{% set ref.position = ref.position + 1 %} + + {{ ref.position }} + DeliveryNoteNumber + {{ picking.name }} + +{%- endif %} +{% endfor %} diff --git a/ebill_postfinance_stock/models/__init__.py b/ebill_postfinance_stock/models/__init__.py new file mode 100644 index 000000000..6c45f0783 --- /dev/null +++ b/ebill_postfinance_stock/models/__init__.py @@ -0,0 +1 @@ +from . import ebill_postfinance_invoice_message diff --git a/ebill_postfinance_stock/models/ebill_postfinance_invoice_message.py b/ebill_postfinance_stock/models/ebill_postfinance_invoice_message.py new file mode 100644 index 000000000..89bda52eb --- /dev/null +++ b/ebill_postfinance_stock/models/ebill_postfinance_invoice_message.py @@ -0,0 +1,24 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +import os + +from odoo import models +from odoo.modules.module import get_module_root + +MODULE_PATH = get_module_root(os.path.dirname(__file__)) +INVOICE_LINE_STOCK_TEMPLATE = "invoice-line-stock-yellowbill.jinja" +TEMPLATE_DIR = [MODULE_PATH + "/messages"] + + +class EbillPostfinanceInvoiceMessage(models.Model): + _inherit = "ebill.postfinance.invoice.message" + + def _get_jinja_env(self, template_dir): + template_dir += TEMPLATE_DIR + return super()._get_jinja_env(template_dir) + + def _get_payload_params_yb(self): + params = super()._get_payload_params_yb() + params["invoice_line_stock_template"] = INVOICE_LINE_STOCK_TEMPLATE + return params diff --git a/ebill_postfinance_stock/readme/CONTRIBUTORS.rst b/ebill_postfinance_stock/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0dd376fae --- /dev/null +++ b/ebill_postfinance_stock/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Thierry Ducrest diff --git a/ebill_postfinance_stock/readme/DESCRIPTION.rst b/ebill_postfinance_stock/readme/DESCRIPTION.rst new file mode 100644 index 000000000..4789bf4f1 --- /dev/null +++ b/ebill_postfinance_stock/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds some information related to delivery in the eBill Postfinance integration. diff --git a/ebill_postfinance_stock/static/description/icon.png b/ebill_postfinance_stock/static/description/icon.png new file mode 100644 index 000000000..3a0328b51 Binary files /dev/null and b/ebill_postfinance_stock/static/description/icon.png differ diff --git a/ebill_postfinance_stock/static/description/index.html b/ebill_postfinance_stock/static/description/index.html new file mode 100644 index 000000000..ace8fe588 --- /dev/null +++ b/ebill_postfinance_stock/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +eBill Postfinance Stock + + + +
+

eBill Postfinance Stock

+ + +

Beta License: AGPL-3 OCA/l10n-switzerland Translate me on Weblate Try me on Runboat

+

This module adds some information related to delivery in the eBill Postfinance integration.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

TDu

+

This module is part of the OCA/l10n-switzerland project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/ebill_postfinance_stock/tests/__init__.py b/ebill_postfinance_stock/tests/__init__.py new file mode 100644 index 000000000..d5235b1f0 --- /dev/null +++ b/ebill_postfinance_stock/tests/__init__.py @@ -0,0 +1 @@ +from . import test_ebill_postfinance_message_yb diff --git a/ebill_postfinance_stock/tests/examples/invoice_qr_yb.xml b/ebill_postfinance_stock/tests/examples/invoice_qr_yb.xml new file mode 100644 index 000000000..cb9bb2e45 --- /dev/null +++ b/ebill_postfinance_stock/tests/examples/invoice_qr_yb.xml @@ -0,0 +1,192 @@ + + +
+ Camptocamp SA + IPECeBILLServer + CreateybInvoice + 1 + 2.0 + 0 + Odoo + 14.0 +
+ + + 41101000001021209 + 41010198248040391 + 2019-06-21 + $TRANSACTION_ID + PDFAppendix + + + +
+ BILL + INV_TEST_01 + 2019-06-21 + + VAT + +
+ Camptocamp SA + StreetOne + 1015 + Lausanne + CH + info@camptocamp.com +
+ CHE012345678 +
+
+ + + $CUSTOMER_ID +
+ Test RAD Customer XML + Teststrasse 100 + This is a very long street name that should be sna + 1700 + Fribourg + CH +
+ +
+
+ +
+ Test RAD Customer XML + 1700 + Fribourg + CH + +
+
+ + 2019-06-21 + 2019-06-21 + + CHF + + + 1 + OrderReference + CustomerRef + + 2019-06-01 + + en + + 2019-07-01 + IBAN + Yes + + 777 + Reserve + CH2130808001234567827 + 210000000003139471430009017 + + + +
+ + + NORMAL + 1 + Product Q & A + 370003021 + 4.0 + Units + 1 + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 529.88 + 492.0 + + 2 + OrderNumberBySupplier + Order123 + + + 3 + OrderNumberByBuyer + CustomerRef + + + 4 + DeliveryNoteNumber + Picking Name + + + + NORMAL + 2 + Product With a Very Long Name That Need To Be Truncated + 370003022 + 1.0 + Units + 1 + + + 7.7 + 0.0 + 0.0 + 0.0 + + 0.0 + + 0.0 + 0.0 + + 5 + OrderNumberBySupplier + Order123 + + + 6 + OrderNumberByBuyer + CustomerRef + + + 7 + DeliveryNoteNumber + Picking Name + + + + NORMAL + 3 + Phone support + 4.0 + PCE + 1 + 0.0 + 0.0 + + + + + + 7.7 + 37.88 + 492.0 + 529.88 + + 37.88 + + 492.0 + 529.88 + + 529.88 + +
+ + + +
diff --git a/ebill_postfinance_stock/tests/test_ebill_postfinance_message_yb.py b/ebill_postfinance_stock/tests/test_ebill_postfinance_message_yb.py new file mode 100644 index 000000000..3162f32f6 --- /dev/null +++ b/ebill_postfinance_stock/tests/test_ebill_postfinance_message_yb.py @@ -0,0 +1,60 @@ +# Copyright 2022 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from string import Template + +from freezegun import freeze_time +from lxml import etree as ET + +from odoo.modules.module import get_module_path +from odoo.tools import file_open + +from odoo.addons.ebill_postfinance.tests.common import CommonCase + + +@freeze_time("2019-06-21 09:06:00") +class TestEbillPostfinanceMessageYB(CommonCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.schema_file = ( + get_module_path("ebill_postfinance") + "/messages/ybInvoice_V2.0.4.xsd" + ) + cls.pickings = cls.sale.order_line.move_ids.mapped("picking_id") + cls.pickings[0].name = "Picking Name" + for line in cls.pickings.move_ids.move_line_ids: + line.qty_done = line.reserved_qty + cls.pickings._action_done() + + def test_invoice_qr(self): + """Check XML payload genetated for an invoice.""" + self.invoice.name = "INV_TEST_01" + self.invoice.invoice_date_due = "2019-07-01" + message = self.invoice.create_postfinance_ebill() + message.set_transaction_id() + message.payload = message._generate_payload_yb() + # Validate the xml generated on top of the xsd schema + node = ET.fromstring(message.payload.encode("utf-8")) + self.assertXmlValidXSchema(node, xschema=None, filename=self.schema_file) + # Remove the PDF file data from the XML to ease diff check + lines = message.payload.splitlines() + for pos, line in enumerate(lines): + if line.find("MimeType") != -1: + lines.pop(pos) + break + payload = "\n".join(lines).encode("utf8") + # Prepare the XML file that is expected + expected_tmpl = Template( + file_open("ebill_postfinance_stock/tests/examples/invoice_qr_yb.xml").read() + ) + expected = expected_tmpl.substitute( + TRANSACTION_ID=message.transaction_id, CUSTOMER_ID=self.customer.id + ).encode("utf8") + # Remove the comments in the expected xml + expected_nocomment = [ + line + for line in expected.split(b"\n") + if not line.lstrip().startswith(b"