diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..84ad3cb --- /dev/null +++ b/.classpath @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..827a17b --- /dev/null +++ b/.project @@ -0,0 +1,37 @@ + + + pi_wsvet + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/WebContent/META-INF/MANIFEST.MF b/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml new file mode 100644 index 0000000..f22c31c --- /dev/null +++ b/WebContent/WEB-INF/web.xml @@ -0,0 +1,73 @@ + + + pi_wsvet + + + + pi_wsvet_servlet + pi_wsvet_servlet + com.poloinformatico.gls.pi_wsvet_servlet + + + pi_wsvet_servlet + /pi_wsvet_servlet + + + index.html + index.htm + index.jsp + default.html + default.htm + default.jsp + + + + gls_addparcel + gls_addparcel + com.poloinformatico.servlet.gls_addparcel + + + gls_addparcel + /gls_addparcel + + + + gls_closeworkday + gls_closeworkday + com.poloinformatico.servlet.gls_closeworkday + + + gls_closeworkday + /gls_closeworkday + + + + gls_listsped + gls_listsped + com.poloinformatico.servlet.gls_listsped + + + gls_listsped + /gls_listsped + + + + gls_deletesped + gls_deletesped + com.poloinformatico.servlet.gls_deletesped + + + gls_deletesped + /gls_deletesped + + + + gls_getzpl + gls_getzpl + com.poloinformatico.servlet.gls_getzpl + + + gls_getzpl + /gls_getzpl + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..31f7642 --- /dev/null +++ b/pom.xml @@ -0,0 +1,66 @@ + + 4.0.0 + pi + pi_wsvet + 1.0 + pi_wsvet + + + + javax.servlet + servlet-api + 2.5 + provided + + + + com.google.code.gson + gson + 2.8.6 + + + + org.apache.pdfbox + pdfbox + 2.0.18 + + + + org.apache.commons + commons-text + 1.8 + + + + com.ancientprogramming.fixedformat4j + fixedformat4j + 1.2.2 + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + http://localhost:2080/ + TomcatServer + /pi_wsvet + + + + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + war + \ No newline at end of file diff --git a/src/main/java/com/labelservice_gls_italy/AddParcel.java b/src/main/java/com/labelservice_gls_italy/AddParcel.java new file mode 100644 index 0000000..e9c3e90 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/AddParcel.java @@ -0,0 +1,63 @@ +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="XMLInfoParcel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "xmlInfoParcel" +}) +@XmlRootElement(name = "AddParcel") +public class AddParcel { + + @XmlElement(name = "XMLInfoParcel") + protected String xmlInfoParcel; + + /** + * Recupera il valore della propriet� xmlInfoParcel. + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLInfoParcel() { + return xmlInfoParcel; + } + + /** + * Imposta il valore della propriet� xmlInfoParcel. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLInfoParcel(String value) { + this.xmlInfoParcel = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/AddParcelResponse.java b/src/main/java/com/labelservice_gls_italy/AddParcelResponse.java new file mode 100644 index 0000000..b35a7c7 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/AddParcelResponse.java @@ -0,0 +1,141 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="AddParcelResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "addParcelResult" +}) +@XmlRootElement(name = "AddParcelResponse") +public class AddParcelResponse { + + @XmlElement(name = "AddParcelResult") + protected AddParcelResponse.AddParcelResult addParcelResult; + + /** + * Recupera il valore della propriet� addParcelResult. + * + * @return + * possible object is + * {@link AddParcelResponse.AddParcelResult } + * + */ + public AddParcelResponse.AddParcelResult getAddParcelResult() { + return addParcelResult; + } + + /** + * Imposta il valore della propriet� addParcelResult. + * + * @param value + * allowed object is + * {@link AddParcelResponse.AddParcelResult } + * + */ + public void setAddParcelResult(AddParcelResponse.AddParcelResult value) { + this.addParcelResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class AddParcelResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/CloseWorkDay.java b/src/main/java/com/labelservice_gls_italy/CloseWorkDay.java new file mode 100644 index 0000000..734eae6 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/CloseWorkDay.java @@ -0,0 +1,64 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="XMLCloseInfoParcel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "xmlCloseInfoParcel" +}) +@XmlRootElement(name = "CloseWorkDay") +public class CloseWorkDay { + + @XmlElement(name = "XMLCloseInfoParcel") + protected String xmlCloseInfoParcel; + + /** + * Recupera il valore della propriet� xmlCloseInfoParcel. + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLCloseInfoParcel() { + return xmlCloseInfoParcel; + } + + /** + * Imposta il valore della propriet� xmlCloseInfoParcel. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLCloseInfoParcel(String value) { + this.xmlCloseInfoParcel = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/CloseWorkDayResponse.java b/src/main/java/com/labelservice_gls_italy/CloseWorkDayResponse.java new file mode 100644 index 0000000..838691a --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/CloseWorkDayResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="CloseWorkDayResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "closeWorkDayResult" +}) +@XmlRootElement(name = "CloseWorkDayResponse") +public class CloseWorkDayResponse { + + @XmlElement(name = "CloseWorkDayResult") + protected CloseWorkDayResponse.CloseWorkDayResult closeWorkDayResult; + + /** + * Recupera il valore della propriet� closeWorkDayResult. + * + * @return + * possible object is + * {@link CloseWorkDayResponse.CloseWorkDayResult } + * + */ + public CloseWorkDayResponse.CloseWorkDayResult getCloseWorkDayResult() { + return closeWorkDayResult; + } + + /** + * Imposta il valore della propriet� closeWorkDayResult. + * + * @param value + * allowed object is + * {@link CloseWorkDayResponse.CloseWorkDayResult } + * + */ + public void setCloseWorkDayResult(CloseWorkDayResponse.CloseWorkDayResult value) { + this.closeWorkDayResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class CloseWorkDayResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/DeleteSped.java b/src/main/java/com/labelservice_gls_italy/DeleteSped.java new file mode 100644 index 0000000..e2aa654 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/DeleteSped.java @@ -0,0 +1,148 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PasswordClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="NumSpedizione" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceClienteGls", + "passwordClienteGls", + "numSpedizione" +}) +@XmlRootElement(name = "DeleteSped") +public class DeleteSped { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String codiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String passwordClienteGls; + @XmlElement(name = "NumSpedizione") + protected String numSpedizione; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCodiceClienteGls() { + return codiceClienteGls; + } + + /** + * Imposta il valore della propriet� codiceClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCodiceClienteGls(String value) { + this.codiceClienteGls = value; + } + + /** + * Recupera il valore della propriet� passwordClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPasswordClienteGls() { + return passwordClienteGls; + } + + /** + * Imposta il valore della propriet� passwordClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPasswordClienteGls(String value) { + this.passwordClienteGls = value; + } + + /** + * Recupera il valore della propriet� numSpedizione. + * + * @return + * possible object is + * {@link String } + * + */ + public String getNumSpedizione() { + return numSpedizione; + } + + /** + * Imposta il valore della propriet� numSpedizione. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNumSpedizione(String value) { + this.numSpedizione = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/DeleteSpedResponse.java b/src/main/java/com/labelservice_gls_italy/DeleteSpedResponse.java new file mode 100644 index 0000000..dbd5104 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/DeleteSpedResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="DeleteSpedResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "deleteSpedResult" +}) +@XmlRootElement(name = "DeleteSpedResponse") +public class DeleteSpedResponse { + + @XmlElement(name = "DeleteSpedResult") + protected DeleteSpedResponse.DeleteSpedResult deleteSpedResult; + + /** + * Recupera il valore della propriet� deleteSpedResult. + * + * @return + * possible object is + * {@link DeleteSpedResponse.DeleteSpedResult } + * + */ + public DeleteSpedResponse.DeleteSpedResult getDeleteSpedResult() { + return deleteSpedResult; + } + + /** + * Imposta il valore della propriet� deleteSpedResult. + * + * @param value + * allowed object is + * {@link DeleteSpedResponse.DeleteSpedResult } + * + */ + public void setDeleteSpedResult(DeleteSpedResponse.DeleteSpedResult value) { + this.deleteSpedResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class DeleteSpedResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/GetPdf.java b/src/main/java/com/labelservice_gls_italy/GetPdf.java new file mode 100644 index 0000000..25e9351 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/GetPdf.java @@ -0,0 +1,152 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceCliente" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         <element name="Password" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceContratto" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         <element name="ContatoreProgressivo" type="{http://www.w3.org/2001/XMLSchema}long"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceCliente", + "password", + "codiceContratto", + "contatoreProgressivo" +}) +@XmlRootElement(name = "GetPdf") +public class GetPdf { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceCliente") + protected int codiceCliente; + @XmlElement(name = "Password") + protected String password; + @XmlElement(name = "CodiceContratto") + protected int codiceContratto; + @XmlElement(name = "ContatoreProgressivo") + protected long contatoreProgressivo; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceCliente. + * + */ + public int getCodiceCliente() { + return codiceCliente; + } + + /** + * Imposta il valore della propriet� codiceCliente. + * + */ + public void setCodiceCliente(int value) { + this.codiceCliente = value; + } + + /** + * Recupera il valore della propriet� password. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPassword() { + return password; + } + + /** + * Imposta il valore della propriet� password. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPassword(String value) { + this.password = value; + } + + /** + * Recupera il valore della propriet� codiceContratto. + * + */ + public int getCodiceContratto() { + return codiceContratto; + } + + /** + * Imposta il valore della propriet� codiceContratto. + * + */ + public void setCodiceContratto(int value) { + this.codiceContratto = value; + } + + /** + * Recupera il valore della propriet� contatoreProgressivo. + * + */ + public long getContatoreProgressivo() { + return contatoreProgressivo; + } + + /** + * Imposta il valore della propriet� contatoreProgressivo. + * + */ + public void setContatoreProgressivo(long value) { + this.contatoreProgressivo = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/GetPdfResponse.java b/src/main/java/com/labelservice_gls_italy/GetPdfResponse.java new file mode 100644 index 0000000..0a65551 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/GetPdfResponse.java @@ -0,0 +1,62 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="GetPdfResult" type="{http://www.w3.org/2001/XMLSchema}base64Binary" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "getPdfResult" +}) +@XmlRootElement(name = "GetPdfResponse") +public class GetPdfResponse { + + @XmlElement(name = "GetPdfResult") + protected byte[] getPdfResult; + + /** + * Recupera il valore della propriet� getPdfResult. + * + * @return + * possible object is + * byte[] + */ + public byte[] getGetPdfResult() { + return getPdfResult; + } + + /** + * Imposta il valore della propriet� getPdfResult. + * + * @param value + * allowed object is + * byte[] + */ + public void setGetPdfResult(byte[] value) { + this.getPdfResult = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/GetZpl.java b/src/main/java/com/labelservice_gls_italy/GetZpl.java new file mode 100644 index 0000000..312d084 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/GetZpl.java @@ -0,0 +1,152 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceCliente" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         <element name="Password" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceContratto" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ *         <element name="ContatoreProgressivo" type="{http://www.w3.org/2001/XMLSchema}long"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceCliente", + "password", + "codiceContratto", + "contatoreProgressivo" +}) +@XmlRootElement(name = "GetZpl") +public class GetZpl { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceCliente") + protected int codiceCliente; + @XmlElement(name = "Password") + protected String password; + @XmlElement(name = "CodiceContratto") + protected int codiceContratto; + @XmlElement(name = "ContatoreProgressivo") + protected long contatoreProgressivo; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceCliente. + * + */ + public int getCodiceCliente() { + return codiceCliente; + } + + /** + * Imposta il valore della propriet� codiceCliente. + * + */ + public void setCodiceCliente(int value) { + this.codiceCliente = value; + } + + /** + * Recupera il valore della propriet� password. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPassword() { + return password; + } + + /** + * Imposta il valore della propriet� password. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPassword(String value) { + this.password = value; + } + + /** + * Recupera il valore della propriet� codiceContratto. + * + */ + public int getCodiceContratto() { + return codiceContratto; + } + + /** + * Imposta il valore della propriet� codiceContratto. + * + */ + public void setCodiceContratto(int value) { + this.codiceContratto = value; + } + + /** + * Recupera il valore della propriet� contatoreProgressivo. + * + */ + public long getContatoreProgressivo() { + return contatoreProgressivo; + } + + /** + * Imposta il valore della propriet� contatoreProgressivo. + * + */ + public void setContatoreProgressivo(long value) { + this.contatoreProgressivo = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/GetZplResponse.java b/src/main/java/com/labelservice_gls_italy/GetZplResponse.java new file mode 100644 index 0000000..48d8e74 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/GetZplResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="GetZplResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "getZplResult" +}) +@XmlRootElement(name = "GetZplResponse") +public class GetZplResponse { + + @XmlElement(name = "GetZplResult") + protected GetZplResponse.GetZplResult getZplResult; + + /** + * Recupera il valore della propriet� getZplResult. + * + * @return + * possible object is + * {@link GetZplResponse.GetZplResult } + * + */ + public GetZplResponse.GetZplResult getGetZplResult() { + return getZplResult; + } + + /** + * Imposta il valore della propriet� getZplResult. + * + * @param value + * allowed object is + * {@link GetZplResponse.GetZplResult } + * + */ + public void setGetZplResult(GetZplResponse.GetZplResult value) { + this.getZplResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class GetZplResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/IlsWebService.java b/src/main/java/com/labelservice_gls_italy/IlsWebService.java new file mode 100644 index 0000000..f094303 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/IlsWebService.java @@ -0,0 +1,94 @@ + +package com.labelservice_gls_italy; + +import java.net.MalformedURLException; +import java.net.URL; +import javax.xml.namespace.QName; +import javax.xml.ws.Service; +import javax.xml.ws.WebEndpoint; +import javax.xml.ws.WebServiceClient; +import javax.xml.ws.WebServiceException; +import javax.xml.ws.WebServiceFeature; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.2.9-b130926.1035 + * Generated source version: 2.2 + * + */ +@WebServiceClient(name = "IlsWebService", targetNamespace = "https://labelservice.gls-italy.com/", wsdlLocation = "https://labelservice.gls-italy.com/ilswebservice.asmx?WSDL") +public class IlsWebService + extends Service +{ + + private final static URL ILSWEBSERVICE_WSDL_LOCATION; + private final static WebServiceException ILSWEBSERVICE_EXCEPTION; + private final static QName ILSWEBSERVICE_QNAME = new QName("https://labelservice.gls-italy.com/", "IlsWebService"); + + static { + URL url = null; + WebServiceException e = null; + try { + url = new URL("https://labelservice.gls-italy.com/ilswebservice.asmx?WSDL"); + } catch (MalformedURLException ex) { + e = new WebServiceException(ex); + } + ILSWEBSERVICE_WSDL_LOCATION = url; + ILSWEBSERVICE_EXCEPTION = e; + } + + public IlsWebService() { + super(__getWsdlLocation(), ILSWEBSERVICE_QNAME); + } + + public IlsWebService(WebServiceFeature... features) { + super(__getWsdlLocation(), ILSWEBSERVICE_QNAME, features); + } + + public IlsWebService(URL wsdlLocation) { + super(wsdlLocation, ILSWEBSERVICE_QNAME); + } + + public IlsWebService(URL wsdlLocation, WebServiceFeature... features) { + super(wsdlLocation, ILSWEBSERVICE_QNAME, features); + } + + public IlsWebService(URL wsdlLocation, QName serviceName) { + super(wsdlLocation, serviceName); + } + + public IlsWebService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) { + super(wsdlLocation, serviceName, features); + } + + /** + * + * @return + * returns IlsWebServiceSoap + */ + @WebEndpoint(name = "IlsWebServiceSoap") + public IlsWebServiceSoap getIlsWebServiceSoap() { + return super.getPort(new QName("https://labelservice.gls-italy.com/", "IlsWebServiceSoap"), IlsWebServiceSoap.class); + } + + /** + * + * @param features + * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the features parameter will have their default values. + * @return + * returns IlsWebServiceSoap + */ + @WebEndpoint(name = "IlsWebServiceSoap") + public IlsWebServiceSoap getIlsWebServiceSoap(WebServiceFeature... features) { + return super.getPort(new QName("https://labelservice.gls-italy.com/", "IlsWebServiceSoap"), IlsWebServiceSoap.class, features); + } + + private static URL __getWsdlLocation() { + if (ILSWEBSERVICE_EXCEPTION!= null) { + throw ILSWEBSERVICE_EXCEPTION; + } + return ILSWEBSERVICE_WSDL_LOCATION; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/IlsWebServiceSoap.java b/src/main/java/com/labelservice_gls_italy/IlsWebServiceSoap.java new file mode 100644 index 0000000..091f03e --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/IlsWebServiceSoap.java @@ -0,0 +1,237 @@ + +package com.labelservice_gls_italy; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; +import javax.jws.WebService; +import javax.xml.bind.annotation.XmlSeeAlso; + +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.2.9-b130926.1035 + * Generated source version: 2.2 + * + */ +@WebService(name = "IlsWebServiceSoap", targetNamespace = "https://labelservice.gls-italy.com/") +@XmlSeeAlso({ + ObjectFactory.class +}) +public interface IlsWebServiceSoap { + + + /** + * Restituisce in un array di byte il pdf. + * + * @param codiceContratto + * @param password + * @param contatoreProgressivo + * @param sedeGls + * @param codiceCliente + * @return + * returns byte[] + */ + @WebMethod(operationName = "GetPdf", action = "https://labelservice.gls-italy.com/GetPdf") + @WebResult(name = "GetPdfResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "GetPdf", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.GetPdf") + @ResponseWrapper(localName = "GetPdfResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.GetPdfResponse") + public byte[] getPdf( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceCliente", targetNamespace = "https://labelservice.gls-italy.com/") + int codiceCliente, + @WebParam(name = "Password", targetNamespace = "https://labelservice.gls-italy.com/") + String password, + @WebParam(name = "CodiceContratto", targetNamespace = "https://labelservice.gls-italy.com/") + int codiceContratto, + @WebParam(name = "ContatoreProgressivo", targetNamespace = "https://labelservice.gls-italy.com/") + long contatoreProgressivo); + + /** + * Restituisce la sequenza dei comandi ZPL per la stampa dell'etichetta. + * + * @param codiceContratto + * @param password + * @param contatoreProgressivo + * @param sedeGls + * @param codiceCliente + * @return + * returns https.labelservice_gls_italy.GetZplResponse.GetZplResult + */ + @WebMethod(operationName = "GetZpl", action = "https://labelservice.gls-italy.com/GetZpl") + @WebResult(name = "GetZplResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "GetZpl", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.GetZpl") + @ResponseWrapper(localName = "GetZplResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.GetZplResponse") + public com.labelservice_gls_italy.GetZplResponse.GetZplResult getZpl( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceCliente", targetNamespace = "https://labelservice.gls-italy.com/") + int codiceCliente, + @WebParam(name = "Password", targetNamespace = "https://labelservice.gls-italy.com/") + String password, + @WebParam(name = "CodiceContratto", targetNamespace = "https://labelservice.gls-italy.com/") + int codiceContratto, + @WebParam(name = "ContatoreProgressivo", targetNamespace = "https://labelservice.gls-italy.com/") + long contatoreProgressivo); + + /** + * Inserisce le informazioni dei colli e restituisce le relative informazioni per la stampa dello stessi. + * + * @param xmlInfoParcel + * @return + * returns https.labelservice_gls_italy.AddParcelResponse.AddParcelResult + */ + @WebMethod(operationName = "AddParcel", action = "https://labelservice.gls-italy.com/AddParcel") + @WebResult(name = "AddParcelResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "AddParcel", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.AddParcel") + @ResponseWrapper(localName = "AddParcelResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.AddParcelResponse") + public com.labelservice_gls_italy.AddParcelResponse.AddParcelResult addParcel( + @WebParam(name = "XMLInfoParcel", targetNamespace = "https://labelservice.gls-italy.com/") + String xmlInfoParcel); + + /** + * Invia le informazioni definitive di chiusura delle spedizioni e ritorna lo stato delle spedizioni (Esegue la trasmissione in sede.) + * + * @param xmlCloseInfoParcel + * @return + * returns https.labelservice_gls_italy.CloseWorkDayResponse.CloseWorkDayResult + */ + @WebMethod(operationName = "CloseWorkDay", action = "https://labelservice.gls-italy.com/CloseWorkDay") + @WebResult(name = "CloseWorkDayResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "CloseWorkDay", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.CloseWorkDay") + @ResponseWrapper(localName = "CloseWorkDayResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.CloseWorkDayResponse") + public com.labelservice_gls_italy.CloseWorkDayResponse.CloseWorkDayResult closeWorkDay( + @WebParam(name = "XMLCloseInfoParcel", targetNamespace = "https://labelservice.gls-italy.com/") + String xmlCloseInfoParcel); + + /** + * Elimina la spedizione. + * + * @param numSpedizione + * @param sedeGls + * @param codiceClienteGls + * @param passwordClienteGls + * @return + * returns https.labelservice_gls_italy.DeleteSpedResponse.DeleteSpedResult + */ + @WebMethod(operationName = "DeleteSped", action = "https://labelservice.gls-italy.com/DeleteSped") + @WebResult(name = "DeleteSpedResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "DeleteSped", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.DeleteSped") + @ResponseWrapper(localName = "DeleteSpedResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.DeleteSpedResponse") + public com.labelservice_gls_italy.DeleteSpedResponse.DeleteSpedResult deleteSped( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String codiceClienteGls, + @WebParam(name = "PasswordClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String passwordClienteGls, + @WebParam(name = "NumSpedizione", targetNamespace = "https://labelservice.gls-italy.com/") + String numSpedizione); + + /** + * Restituisce l'elenco delle spedizioni registrate degli ultimi 4 mesi. + * + * @param sedeGls + * @param codiceClienteGls + * @param passwordClienteGls + * @return + * returns https.labelservice_gls_italy.ListSpedResponse.ListSpedResult + */ + @WebMethod(operationName = "ListSped", action = "https://labelservice.gls-italy.com/ListSped") + @WebResult(name = "ListSpedResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "ListSped", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSped") + @ResponseWrapper(localName = "ListSpedResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedResponse") + public com.labelservice_gls_italy.ListSpedResponse.ListSpedResult listSped( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String codiceClienteGls, + @WebParam(name = "PasswordClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String passwordClienteGls); + + /** + * Restituisce l'elenco delle spedizioni registrate degli ultimi 4 mesi in base allo stato della spedizione. Stato: 0 = solo in attesa di chiusura, 1 = solo chiuse, non specificato = tutte + * + * @param stato + * @param sedeGls + * @param codiceClienteGls + * @param passwordClienteGls + * @return + * returns https.labelservice_gls_italy.ListSpedByStatoResponse.ListSpedByStatoResult + */ + @WebMethod(operationName = "ListSpedByStato", action = "https://labelservice.gls-italy.com/ListSpedByStato") + @WebResult(name = "ListSpedByStatoResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "ListSpedByStato", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedByStato") + @ResponseWrapper(localName = "ListSpedByStatoResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedByStatoResponse") + public com.labelservice_gls_italy.ListSpedByStatoResponse.ListSpedByStatoResult listSpedByStato( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String codiceClienteGls, + @WebParam(name = "PasswordClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String passwordClienteGls, + @WebParam(name = "Stato", targetNamespace = "https://labelservice.gls-italy.com/") + String stato); + + /** + * Restituisce l'elenco delle spedizioni registrate all'interno delle date indicate; le date vanno inserite nel formato AAAAMMGGHHMM. (La parte HHMM e' facoltativa) + * + * @param dataInizio + * @param dataFine + * @param sedeGls + * @param codiceClienteGls + * @param passwordClienteGls + * @return + * returns https.labelservice_gls_italy.ListSpedPeriodResponse.ListSpedPeriodResult + */ + @WebMethod(operationName = "ListSpedPeriod", action = "https://labelservice.gls-italy.com/ListSpedPeriod") + @WebResult(name = "ListSpedPeriodResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "ListSpedPeriod", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedPeriod") + @ResponseWrapper(localName = "ListSpedPeriodResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedPeriodResponse") + public com.labelservice_gls_italy.ListSpedPeriodResponse.ListSpedPeriodResult listSpedPeriod( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String codiceClienteGls, + @WebParam(name = "PasswordClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String passwordClienteGls, + @WebParam(name = "DataInizio", targetNamespace = "https://labelservice.gls-italy.com/") + String dataInizio, + @WebParam(name = "DataFine", targetNamespace = "https://labelservice.gls-italy.com/") + String dataFine); + + /** + * Restituisce l'elenco delle spedizioni registrate all'interno delle date indicate in base allo stato della spedizione specificato. Le date vanno inserite nel formato AAAAMMGGHHMM(La parte HHMM e' facoltativa); Stato: 0 = solo in attesa di chiusura, 1 = solo chiuse, non specificato = tutte + * + * @param stato + * @param dataInizio + * @param dataFine + * @param sedeGls + * @param codiceClienteGls + * @param passwordClienteGls + * @return + * returns https.labelservice_gls_italy.ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult + */ + @WebMethod(operationName = "ListSpedPeriodByStato", action = "https://labelservice.gls-italy.com/ListSpedPeriodByStato") + @WebResult(name = "ListSpedPeriodByStatoResult", targetNamespace = "https://labelservice.gls-italy.com/") + @RequestWrapper(localName = "ListSpedPeriodByStato", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedPeriodByStato") + @ResponseWrapper(localName = "ListSpedPeriodByStatoResponse", targetNamespace = "https://labelservice.gls-italy.com/", className = "https.labelservice_gls_italy.ListSpedPeriodByStatoResponse") + public com.labelservice_gls_italy.ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult listSpedPeriodByStato( + @WebParam(name = "SedeGls", targetNamespace = "https://labelservice.gls-italy.com/") + String sedeGls, + @WebParam(name = "CodiceClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String codiceClienteGls, + @WebParam(name = "PasswordClienteGls", targetNamespace = "https://labelservice.gls-italy.com/") + String passwordClienteGls, + @WebParam(name = "DataInizio", targetNamespace = "https://labelservice.gls-italy.com/") + String dataInizio, + @WebParam(name = "DataFine", targetNamespace = "https://labelservice.gls-italy.com/") + String dataFine, + @WebParam(name = "Stato", targetNamespace = "https://labelservice.gls-italy.com/") + String stato); + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSped.java b/src/main/java/com/labelservice_gls_italy/ListSped.java new file mode 100644 index 0000000..a4120a2 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSped.java @@ -0,0 +1,120 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PasswordClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceClienteGls", + "passwordClienteGls" +}) +@XmlRootElement(name = "ListSped") +public class ListSped { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String codiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String passwordClienteGls; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCodiceClienteGls() { + return codiceClienteGls; + } + + /** + * Imposta il valore della propriet� codiceClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCodiceClienteGls(String value) { + this.codiceClienteGls = value; + } + + /** + * Recupera il valore della propriet� passwordClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPasswordClienteGls() { + return passwordClienteGls; + } + + /** + * Imposta il valore della propriet� passwordClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPasswordClienteGls(String value) { + this.passwordClienteGls = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedByStato.java b/src/main/java/com/labelservice_gls_italy/ListSpedByStato.java new file mode 100644 index 0000000..7619adb --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedByStato.java @@ -0,0 +1,148 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PasswordClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Stato" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceClienteGls", + "passwordClienteGls", + "stato" +}) +@XmlRootElement(name = "ListSpedByStato") +public class ListSpedByStato { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String codiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String passwordClienteGls; + @XmlElement(name = "Stato") + protected String stato; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCodiceClienteGls() { + return codiceClienteGls; + } + + /** + * Imposta il valore della propriet� codiceClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCodiceClienteGls(String value) { + this.codiceClienteGls = value; + } + + /** + * Recupera il valore della propriet� passwordClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPasswordClienteGls() { + return passwordClienteGls; + } + + /** + * Imposta il valore della propriet� passwordClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPasswordClienteGls(String value) { + this.passwordClienteGls = value; + } + + /** + * Recupera il valore della propriet� stato. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStato() { + return stato; + } + + /** + * Imposta il valore della propriet� stato. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStato(String value) { + this.stato = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedByStatoResponse.java b/src/main/java/com/labelservice_gls_italy/ListSpedByStatoResponse.java new file mode 100644 index 0000000..1908cc9 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedByStatoResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ListSpedByStatoResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "listSpedByStatoResult" +}) +@XmlRootElement(name = "ListSpedByStatoResponse") +public class ListSpedByStatoResponse { + + @XmlElement(name = "ListSpedByStatoResult") + protected ListSpedByStatoResponse.ListSpedByStatoResult listSpedByStatoResult; + + /** + * Recupera il valore della propriet� listSpedByStatoResult. + * + * @return + * possible object is + * {@link ListSpedByStatoResponse.ListSpedByStatoResult } + * + */ + public ListSpedByStatoResponse.ListSpedByStatoResult getListSpedByStatoResult() { + return listSpedByStatoResult; + } + + /** + * Imposta il valore della propriet� listSpedByStatoResult. + * + * @param value + * allowed object is + * {@link ListSpedByStatoResponse.ListSpedByStatoResult } + * + */ + public void setListSpedByStatoResult(ListSpedByStatoResponse.ListSpedByStatoResult value) { + this.listSpedByStatoResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class ListSpedByStatoResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedPeriod.java b/src/main/java/com/labelservice_gls_italy/ListSpedPeriod.java new file mode 100644 index 0000000..bbbae99 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedPeriod.java @@ -0,0 +1,176 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PasswordClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DataInizio" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DataFine" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceClienteGls", + "passwordClienteGls", + "dataInizio", + "dataFine" +}) +@XmlRootElement(name = "ListSpedPeriod") +public class ListSpedPeriod { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String codiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String passwordClienteGls; + @XmlElement(name = "DataInizio") + protected String dataInizio; + @XmlElement(name = "DataFine") + protected String dataFine; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCodiceClienteGls() { + return codiceClienteGls; + } + + /** + * Imposta il valore della propriet� codiceClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCodiceClienteGls(String value) { + this.codiceClienteGls = value; + } + + /** + * Recupera il valore della propriet� passwordClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPasswordClienteGls() { + return passwordClienteGls; + } + + /** + * Imposta il valore della propriet� passwordClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPasswordClienteGls(String value) { + this.passwordClienteGls = value; + } + + /** + * Recupera il valore della propriet� dataInizio. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDataInizio() { + return dataInizio; + } + + /** + * Imposta il valore della propriet� dataInizio. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDataInizio(String value) { + this.dataInizio = value; + } + + /** + * Recupera il valore della propriet� dataFine. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDataFine() { + return dataFine; + } + + /** + * Imposta il valore della propriet� dataFine. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDataFine(String value) { + this.dataFine = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStato.java b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStato.java new file mode 100644 index 0000000..e735444 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStato.java @@ -0,0 +1,204 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="SedeGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="CodiceClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="PasswordClienteGls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DataInizio" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="DataFine" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="Stato" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "sedeGls", + "codiceClienteGls", + "passwordClienteGls", + "dataInizio", + "dataFine", + "stato" +}) +@XmlRootElement(name = "ListSpedPeriodByStato") +public class ListSpedPeriodByStato { + + @XmlElement(name = "SedeGls") + protected String sedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String codiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String passwordClienteGls; + @XmlElement(name = "DataInizio") + protected String dataInizio; + @XmlElement(name = "DataFine") + protected String dataFine; + @XmlElement(name = "Stato") + protected String stato; + + /** + * Recupera il valore della propriet� sedeGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getSedeGls() { + return sedeGls; + } + + /** + * Imposta il valore della propriet� sedeGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSedeGls(String value) { + this.sedeGls = value; + } + + /** + * Recupera il valore della propriet� codiceClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCodiceClienteGls() { + return codiceClienteGls; + } + + /** + * Imposta il valore della propriet� codiceClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCodiceClienteGls(String value) { + this.codiceClienteGls = value; + } + + /** + * Recupera il valore della propriet� passwordClienteGls. + * + * @return + * possible object is + * {@link String } + * + */ + public String getPasswordClienteGls() { + return passwordClienteGls; + } + + /** + * Imposta il valore della propriet� passwordClienteGls. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPasswordClienteGls(String value) { + this.passwordClienteGls = value; + } + + /** + * Recupera il valore della propriet� dataInizio. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDataInizio() { + return dataInizio; + } + + /** + * Imposta il valore della propriet� dataInizio. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDataInizio(String value) { + this.dataInizio = value; + } + + /** + * Recupera il valore della propriet� dataFine. + * + * @return + * possible object is + * {@link String } + * + */ + public String getDataFine() { + return dataFine; + } + + /** + * Imposta il valore della propriet� dataFine. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDataFine(String value) { + this.dataFine = value; + } + + /** + * Recupera il valore della propriet� stato. + * + * @return + * possible object is + * {@link String } + * + */ + public String getStato() { + return stato; + } + + /** + * Imposta il valore della propriet� stato. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setStato(String value) { + this.stato = value; + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStatoResponse.java b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStatoResponse.java new file mode 100644 index 0000000..b5f2763 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodByStatoResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ListSpedPeriodByStatoResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "listSpedPeriodByStatoResult" +}) +@XmlRootElement(name = "ListSpedPeriodByStatoResponse") +public class ListSpedPeriodByStatoResponse { + + @XmlElement(name = "ListSpedPeriodByStatoResult") + protected ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult listSpedPeriodByStatoResult; + + /** + * Recupera il valore della propriet� listSpedPeriodByStatoResult. + * + * @return + * possible object is + * {@link ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult } + * + */ + public ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult getListSpedPeriodByStatoResult() { + return listSpedPeriodByStatoResult; + } + + /** + * Imposta il valore della propriet� listSpedPeriodByStatoResult. + * + * @param value + * allowed object is + * {@link ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult } + * + */ + public void setListSpedPeriodByStatoResult(ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult value) { + this.listSpedPeriodByStatoResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class ListSpedPeriodByStatoResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedPeriodResponse.java b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodResponse.java new file mode 100644 index 0000000..600e742 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedPeriodResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ListSpedPeriodResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "listSpedPeriodResult" +}) +@XmlRootElement(name = "ListSpedPeriodResponse") +public class ListSpedPeriodResponse { + + @XmlElement(name = "ListSpedPeriodResult") + protected ListSpedPeriodResponse.ListSpedPeriodResult listSpedPeriodResult; + + /** + * Recupera il valore della propriet� listSpedPeriodResult. + * + * @return + * possible object is + * {@link ListSpedPeriodResponse.ListSpedPeriodResult } + * + */ + public ListSpedPeriodResponse.ListSpedPeriodResult getListSpedPeriodResult() { + return listSpedPeriodResult; + } + + /** + * Imposta il valore della propriet� listSpedPeriodResult. + * + * @param value + * allowed object is + * {@link ListSpedPeriodResponse.ListSpedPeriodResult } + * + */ + public void setListSpedPeriodResult(ListSpedPeriodResponse.ListSpedPeriodResult value) { + this.listSpedPeriodResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class ListSpedPeriodResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ListSpedResponse.java b/src/main/java/com/labelservice_gls_italy/ListSpedResponse.java new file mode 100644 index 0000000..5d27c04 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ListSpedResponse.java @@ -0,0 +1,140 @@ + +package com.labelservice_gls_italy; + +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlMixed; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="ListSpedResult" minOccurs="0">
+ *           <complexType>
+ *             <complexContent>
+ *               <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *                 <sequence>
+ *                   <any/>
+ *                 </sequence>
+ *               </restriction>
+ *             </complexContent>
+ *           </complexType>
+ *         </element>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "listSpedResult" +}) +@XmlRootElement(name = "ListSpedResponse") +public class ListSpedResponse { + + @XmlElement(name = "ListSpedResult") + protected ListSpedResponse.ListSpedResult listSpedResult; + + /** + * Recupera il valore della propriet� listSpedResult. + * + * @return + * possible object is + * {@link ListSpedResponse.ListSpedResult } + * + */ + public ListSpedResponse.ListSpedResult getListSpedResult() { + return listSpedResult; + } + + /** + * Imposta il valore della propriet� listSpedResult. + * + * @param value + * allowed object is + * {@link ListSpedResponse.ListSpedResult } + * + */ + public void setListSpedResult(ListSpedResponse.ListSpedResult value) { + this.listSpedResult = value; + } + + + /** + *

Classe Java per anonymous complex type. + * + *

Il seguente frammento di schema specifica il contenuto previsto contenuto in questa classe. + * + *

+     * <complexType>
+     *   <complexContent>
+     *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+     *       <sequence>
+     *         <any/>
+     *       </sequence>
+     *     </restriction>
+     *   </complexContent>
+     * </complexType>
+     * 
+ * + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "content" + }) + public static class ListSpedResult { + + @XmlMixed + @XmlAnyElement(lax = true) + protected List content; + + /** + * Gets the value of the content property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the content property. + * + *

+ * For example, to add a new item, do as follows: + *

+         *    getContent().add(newItem);
+         * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Object } + * {@link String } + * + * + */ + public List getContent() { + if (content == null) { + content = new ArrayList(); + } + return this.content; + } + + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/ObjectFactory.java b/src/main/java/com/labelservice_gls_italy/ObjectFactory.java new file mode 100644 index 0000000..72c0a58 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/ObjectFactory.java @@ -0,0 +1,253 @@ + +package com.labelservice_gls_italy; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the https.labelservice_gls_italy package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _Base64Binary_QNAME = new QName("https://labelservice.gls-italy.com/", "base64Binary"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: https.labelservice_gls_italy + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link ListSpedResponse } + * + */ + public ListSpedResponse createListSpedResponse() { + return new ListSpedResponse(); + } + + /** + * Create an instance of {@link GetZplResponse } + * + */ + public GetZplResponse createGetZplResponse() { + return new GetZplResponse(); + } + + /** + * Create an instance of {@link ListSpedPeriodByStatoResponse } + * + */ + public ListSpedPeriodByStatoResponse createListSpedPeriodByStatoResponse() { + return new ListSpedPeriodByStatoResponse(); + } + + /** + * Create an instance of {@link ListSpedByStatoResponse } + * + */ + public ListSpedByStatoResponse createListSpedByStatoResponse() { + return new ListSpedByStatoResponse(); + } + + /** + * Create an instance of {@link DeleteSpedResponse } + * + */ + public DeleteSpedResponse createDeleteSpedResponse() { + return new DeleteSpedResponse(); + } + + /** + * Create an instance of {@link AddParcelResponse } + * + */ + public AddParcelResponse createAddParcelResponse() { + return new AddParcelResponse(); + } + + /** + * Create an instance of {@link ListSpedPeriodResponse } + * + */ + public ListSpedPeriodResponse createListSpedPeriodResponse() { + return new ListSpedPeriodResponse(); + } + + /** + * Create an instance of {@link CloseWorkDayResponse } + * + */ + public CloseWorkDayResponse createCloseWorkDayResponse() { + return new CloseWorkDayResponse(); + } + + /** + * Create an instance of {@link ListSpedResponse.ListSpedResult } + * + */ + public ListSpedResponse.ListSpedResult createListSpedResponseListSpedResult() { + return new ListSpedResponse.ListSpedResult(); + } + + /** + * Create an instance of {@link ListSpedPeriod } + * + */ + public ListSpedPeriod createListSpedPeriod() { + return new ListSpedPeriod(); + } + + /** + * Create an instance of {@link GetPdfResponse } + * + */ + public GetPdfResponse createGetPdfResponse() { + return new GetPdfResponse(); + } + + /** + * Create an instance of {@link GetZpl } + * + */ + public GetZpl createGetZpl() { + return new GetZpl(); + } + + /** + * Create an instance of {@link GetZplResponse.GetZplResult } + * + */ + public GetZplResponse.GetZplResult createGetZplResponseGetZplResult() { + return new GetZplResponse.GetZplResult(); + } + + /** + * Create an instance of {@link ListSpedPeriodByStato } + * + */ + public ListSpedPeriodByStato createListSpedPeriodByStato() { + return new ListSpedPeriodByStato(); + } + + /** + * Create an instance of {@link ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult } + * + */ + public ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult createListSpedPeriodByStatoResponseListSpedPeriodByStatoResult() { + return new ListSpedPeriodByStatoResponse.ListSpedPeriodByStatoResult(); + } + + /** + * Create an instance of {@link GetPdf } + * + */ + public GetPdf createGetPdf() { + return new GetPdf(); + } + + /** + * Create an instance of {@link ListSpedByStatoResponse.ListSpedByStatoResult } + * + */ + public ListSpedByStatoResponse.ListSpedByStatoResult createListSpedByStatoResponseListSpedByStatoResult() { + return new ListSpedByStatoResponse.ListSpedByStatoResult(); + } + + /** + * Create an instance of {@link CloseWorkDay } + * + */ + public CloseWorkDay createCloseWorkDay() { + return new CloseWorkDay(); + } + + /** + * Create an instance of {@link DeleteSpedResponse.DeleteSpedResult } + * + */ + public DeleteSpedResponse.DeleteSpedResult createDeleteSpedResponseDeleteSpedResult() { + return new DeleteSpedResponse.DeleteSpedResult(); + } + + /** + * Create an instance of {@link ListSped } + * + */ + public ListSped createListSped() { + return new ListSped(); + } + + /** + * Create an instance of {@link AddParcelResponse.AddParcelResult } + * + */ + public AddParcelResponse.AddParcelResult createAddParcelResponseAddParcelResult() { + return new AddParcelResponse.AddParcelResult(); + } + + /** + * Create an instance of {@link DeleteSped } + * + */ + public DeleteSped createDeleteSped() { + return new DeleteSped(); + } + + /** + * Create an instance of {@link ListSpedPeriodResponse.ListSpedPeriodResult } + * + */ + public ListSpedPeriodResponse.ListSpedPeriodResult createListSpedPeriodResponseListSpedPeriodResult() { + return new ListSpedPeriodResponse.ListSpedPeriodResult(); + } + + /** + * Create an instance of {@link ListSpedByStato } + * + */ + public ListSpedByStato createListSpedByStato() { + return new ListSpedByStato(); + } + + /** + * Create an instance of {@link AddParcel } + * + */ + public AddParcel createAddParcel() { + return new AddParcel(); + } + + /** + * Create an instance of {@link CloseWorkDayResponse.CloseWorkDayResult } + * + */ + public CloseWorkDayResponse.CloseWorkDayResult createCloseWorkDayResponseCloseWorkDayResult() { + return new CloseWorkDayResponse.CloseWorkDayResult(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link byte[]}{@code >}} + * + */ + @XmlElementDecl(namespace = "https://labelservice.gls-italy.com/", name = "base64Binary") + public JAXBElement createBase64Binary(byte[] value) { + return new JAXBElement(_Base64Binary_QNAME, byte[].class, null, ((byte[]) value)); + } + +} diff --git a/src/main/java/com/labelservice_gls_italy/package-info.java b/src/main/java/com/labelservice_gls_italy/package-info.java new file mode 100644 index 0000000..11d49b6 --- /dev/null +++ b/src/main/java/com/labelservice_gls_italy/package-info.java @@ -0,0 +1,2 @@ +@javax.xml.bind.annotation.XmlSchema(namespace = "https://labelservice.gls-italy.com/", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) +package com.labelservice_gls_italy; diff --git a/src/main/java/com/poloinformatico/gls/ClientGLS.java b/src/main/java/com/poloinformatico/gls/ClientGLS.java new file mode 100644 index 0000000..c447d04 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/ClientGLS.java @@ -0,0 +1,128 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.JAXBException; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.labelservice_gls_italy.AddParcelResponse.AddParcelResult; +import com.labelservice_gls_italy.CloseWorkDayResponse.CloseWorkDayResult; +import com.labelservice_gls_italy.DeleteSpedResponse.DeleteSpedResult; +import com.labelservice_gls_italy.GetZplResponse.GetZplResult; +import com.labelservice_gls_italy.IlsWebService; +import com.labelservice_gls_italy.IlsWebServiceSoap; + +public class ClientGLS { + + private static IlsWebService service; + + private static IlsWebServiceSoap port; + + public ClientGLS() throws Exception { + // controllo connessione SSL + Utils.SSLPoke("labelservice.gls-italy.com", 443); + + service = new IlsWebService(); + port = service.getIlsWebServiceSoap(); + + System.out.println("client ok"); + } + + /******** DELETE PARCEL **********/ + public String sendDelete(String json) { + + Gson gson = new Gson(); + + DeleteSpedReq req = gson.fromJson(json, DeleteSpedReq.class); + + DeleteSpedResult res = port.deleteSped(req.getSedeGls(), req.getCodiceClienteGls(), req.getPasswordClienteGls(), + req.getNumSpedizione()); + + DeleteSpedRes res2 = Utils.deleteSpedRespUnmarsh(res); + + return gson.toJson(res2, res2.getClass()); + + } + + /***********GET ZPL*************/ + public String sendGetZpl(String json) { + + Gson gson = new Gson(); + + GetZplReq req = gson.fromJson(json, GetZplReq.class); + + //port.getZpl(sedeGls, codiceCliente, password, codiceContratto, contatoreProgressivo) + + GetZplResult res = port.getZpl(req.getSedeGls(), Integer.parseInt(req.getCodiceCliente()), req.getPassword(), Integer.parseInt(req.getCodiceContratto()), Long.parseLong(req.getContatoreProgressivo())); + + GetZplRes res2 = Utils.getZplUnmarsh(res); + + return gson.toJson(res2,res2.getClass()); + + } + + + /******************************************************************************************* + * ADD PARCEL + */ + public String sendInfo(String json) throws JsonSyntaxException, JAXBException { + + Gson gson = new Gson(); + InfoLabel res; + + res = sendInfo(gson.fromJson(json, Info.class)); + + return gson.toJson(res, InfoLabel.class); + } + + InfoLabel sendInfo(Info info) throws JAXBException { + + InfoLabel ir = Utils.unmarshInfoLabel(AddParcel(Utils.infoToXML(info))); + + return ir; + + } + + private AddParcelResult AddParcel(String xmlInfoParcel) throws JAXBException { + + System.out.println(xmlInfoParcel); + + AddParcelResult result = port.addParcel(xmlInfoParcel); + + return result; + + } + + /*************************************************************************************** + * CLOSE WORK DAY + *************************************/ + + /** + * riceve oggetto Info serializzato in json e lo invia, utilizza la porta + * CloseWorkDay + **/ + public String sendCloseWorkDay(String json) throws JsonSyntaxException, JAXBException { + + Gson gson = new Gson(); + sendCloseWorkDay(gson.fromJson(json, Info.class)); + + // riflette il json inviato + return json; + + } + + void sendCloseWorkDay(Info info) throws JAXBException { + + CloseWorkDay(Utils.infoToXML(info)); + + } + + private CloseWorkDayResult CloseWorkDay(String xmlInfoParcel) throws JAXBException { + + System.out.println(xmlInfoParcel); + + CloseWorkDayResult result = port.closeWorkDay(xmlInfoParcel); + + return result; + + } +} diff --git a/src/main/java/com/poloinformatico/gls/DeleteSpedReq.java b/src/main/java/com/poloinformatico/gls/DeleteSpedReq.java new file mode 100644 index 0000000..e48936e --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/DeleteSpedReq.java @@ -0,0 +1,53 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class DeleteSpedReq { + + @XmlElement + private String SedeGls; + + @XmlElement + private String CodiceClienteGls; + + @XmlElement + private String PasswordClienteGls; + + @XmlElement + private String NumSpedizione; + + public String getSedeGls() { + return SedeGls; + } + + public void setSedeGls(String sedeGls) { + SedeGls = sedeGls; + } + + public String getCodiceClienteGls() { + return CodiceClienteGls; + } + + public void setCodiceClienteGls(String codiceClienteGls) { + CodiceClienteGls = codiceClienteGls; + } + + public String getNumSpedizione() { + return NumSpedizione; + } + + public void setNumSpedizione(String numSpedizione) { + NumSpedizione = numSpedizione; + } + + public String getPasswordClienteGls() { + return PasswordClienteGls; + } + + public void setPasswordClienteGls(String passwordClienteGls) { + PasswordClienteGls = passwordClienteGls; + } + +} diff --git a/src/main/java/com/poloinformatico/gls/DeleteSpedRes.java b/src/main/java/com/poloinformatico/gls/DeleteSpedRes.java new file mode 100644 index 0000000..f01b826 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/DeleteSpedRes.java @@ -0,0 +1,19 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlElement; + +public class DeleteSpedRes { + + @XmlElement + private String DescrizioneErrore; + + public String getDescrizioneErrore() { + return DescrizioneErrore; + } + + public void setDescrizioneErrore(String descrizioneErrore) { + DescrizioneErrore = descrizioneErrore; + } + + +} diff --git a/src/main/java/com/poloinformatico/gls/GetZplReq.java b/src/main/java/com/poloinformatico/gls/GetZplReq.java new file mode 100644 index 0000000..40dfc5b --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/GetZplReq.java @@ -0,0 +1,65 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlElement; + +public class GetZplReq { + + @XmlElement + private String SedeGls; + + @XmlElement + private String CodiceCliente; + + @XmlElement + private String Password; + + @XmlElement + private String CodiceContratto; + + @XmlElement + private String ContatoreProgressivo; + + public String getSedeGls() { + return SedeGls; + } + + public void setSedeGls(String sedeGls) { + SedeGls = sedeGls; + } + + public String getCodiceCliente() { + return CodiceCliente; + } + + public void setCodiceCliente(String codiceCliente) { + CodiceCliente = codiceCliente; + } + + public String getPassword() { + return Password; + } + + public void setPassword(String password) { + Password = password; + } + + public String getCodiceContratto() { + return CodiceContratto; + } + + public void setCodiceContratto(String codiceContratto) { + CodiceContratto = codiceContratto; + } + + public String getContatoreProgressivo() { + return ContatoreProgressivo; + } + + public void setContatoreProgressivo(String contatoreProgressivo) { + ContatoreProgressivo = contatoreProgressivo; + } + + + + +} diff --git a/src/main/java/com/poloinformatico/gls/GetZplRes.java b/src/main/java/com/poloinformatico/gls/GetZplRes.java new file mode 100644 index 0000000..37aca00 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/GetZplRes.java @@ -0,0 +1,18 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlElement; + +public class GetZplRes { + + @XmlElement + private String Zpl; + + public String getZpl() { + return Zpl; + } + + public void setZpl(String zpl) { + Zpl = zpl; + } + +} diff --git a/src/main/java/com/poloinformatico/gls/Info.java b/src/main/java/com/poloinformatico/gls/Info.java new file mode 100644 index 0000000..b7d263f --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/Info.java @@ -0,0 +1,57 @@ +package com.poloinformatico.gls; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Info") +@XmlAccessorType(XmlAccessType.NONE) +public class Info { + + @XmlElement(name = "SedeGls") + protected String SedeGls; + @XmlElement(name = "CodiceClienteGls") + protected String CodiceClienteGls; + @XmlElement(name = "PasswordClienteGls") + protected String PasswordClienteGls; + @XmlElement + protected List Parcel = new ArrayList(); + + public Info() { + + } + + public void addParcel(Parcel p) { + System.out.println("aggiungo parcel "+p.toString()); + Parcel.add(p); + } + + public String getSedeGls() { + return SedeGls; + } + + public void setSedeGls(String sedeGls) { + SedeGls = sedeGls; + } + + public String getCodiceClienteGls() { + return CodiceClienteGls; + } + + public void setCodiceClienteGls(String codiceClienteGls) { + CodiceClienteGls = codiceClienteGls; + } + + public String getPasswordClienteGls() { + return PasswordClienteGls; + } + + public void setPasswordClienteGls(String passwordClienteGls) { + PasswordClienteGls = passwordClienteGls; + } + + +} diff --git a/src/main/java/com/poloinformatico/gls/InfoLabel.java b/src/main/java/com/poloinformatico/gls/InfoLabel.java new file mode 100644 index 0000000..0559404 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/InfoLabel.java @@ -0,0 +1,38 @@ +package com.poloinformatico.gls; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="") +@XmlAccessorType(XmlAccessType.FIELD) +public class InfoLabel { + + @XmlElement(name="content") + private List Parcel=new ArrayList(); + + public List getParcel() { + return Parcel; + } + + public void setParcel(List parcel) { + Parcel = parcel; + } + + public void addInfoLabelParcel(InfoLabelParcel p) { + this.Parcel.add(p); + } + + public int getCount() { + try { + return this.Parcel.size(); + }catch (Exception ex) { + return 0; + } + } + +} diff --git a/src/main/java/com/poloinformatico/gls/InfoLabelParcel.java b/src/main/java/com/poloinformatico/gls/InfoLabelParcel.java new file mode 100644 index 0000000..920de40 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/InfoLabelParcel.java @@ -0,0 +1,61 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; + +@XmlAccessorType(XmlAccessType.FIELD) +public class InfoLabelParcel { + + @XmlElement + private String PdfLabel; + @XmlElement + private String ContatoreProgressivo; + @XmlElement + private String NumeroSpedizione; + @XmlElement + private String SiglaMittente; + @XmlElement + private String Zpl; + + public String getContatoreProgressivo() { + return ContatoreProgressivo; + } + + public void setContatoreProgressivo(String contatoreProgressivo) { + this.ContatoreProgressivo = contatoreProgressivo; + } + + public String getPdfLabel() { + return PdfLabel; + } + + public void setPdfLabel(String pdfLabel) { + PdfLabel = pdfLabel; + } + + public String getNumeroSpedizione() { + return NumeroSpedizione; + } + + public void setNumeroSpedizione(String numeroSpedizione) { + NumeroSpedizione = numeroSpedizione; + } + + public String getSiglaMittente() { + return SiglaMittente; + } + + public void setSiglaMittente(String siglaMittente) { + SiglaMittente = siglaMittente; + } + + public String getZpl() { + return Zpl; + } + + public void setZpl(String zpl) { + Zpl = zpl; + } + +} diff --git a/src/main/java/com/poloinformatico/gls/ListParcel.java b/src/main/java/com/poloinformatico/gls/ListParcel.java new file mode 100644 index 0000000..7e08b4b --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/ListParcel.java @@ -0,0 +1,26 @@ +package com.poloinformatico.gls; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="ListParcel") +@XmlAccessorType(XmlAccessType.FIELD) +public class ListParcel { + + private List Parcel = new ArrayList(); + + public List getParcels() { + return Parcel; + } + + public void setParcels(List parcels) { + Parcel = parcels; + } + + + +} diff --git a/src/main/java/com/poloinformatico/gls/ListParcelParcel.java b/src/main/java/com/poloinformatico/gls/ListParcelParcel.java new file mode 100644 index 0000000..a3f06d9 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/ListParcelParcel.java @@ -0,0 +1,10 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + + +@XmlAccessorType(XmlAccessType.FIELD) +public class ListParcelParcel { + +} diff --git a/src/main/java/com/poloinformatico/gls/Parcel.java b/src/main/java/com/poloinformatico/gls/Parcel.java new file mode 100644 index 0000000..649ac1f --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/Parcel.java @@ -0,0 +1,321 @@ +package com.poloinformatico.gls; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; + +@XmlAccessorType(XmlAccessType.NONE) +public class Parcel { + @XmlElement + protected String CodiceContrattoGls; + @XmlElement + protected String RagioneSociale; + @XmlElement + protected String Indirizzo; + @XmlElement + protected String Localita; + @XmlElement + protected String Zipcode; + @XmlElement + private String Provincia; + @XmlElement + private String Bda; + @XmlElement + private String Colli; + @XmlElement + private String PesoReale; + @XmlElement + private String Importocontrassegno; + @XmlElement + private String NoteSpedizione; + @XmlElement + private String TipoPorto; + @XmlElement + private String Assicurazione; + @XmlElement + private String PesoVolume; + @XmlElement + private String RiferimentoCliente; + @XmlElement + private String NoteAggiuntive; + @XmlElement + private String CodiceClienteDestinatario; + @XmlElement + private String TipoCollo;//4=>PLUS,0=>NORMALE + @XmlElement + private String Email; + @XmlElement + private String Cellulare1; + @XmlElement + private String ServiziAccessori; + @XmlElement + private String ModalitaIncasso; + @XmlElement + private String GeneraPdf; + @XmlElement + private String FormatoPdf; + @XmlElement + private String ContatoreProgressivo; + @XmlElement + private String AssicurazioneIntegrativa; + @XmlElement + private String DataPrenotazioneGDO;//AAMMGG + @XmlElement + private String OrarioNoteGDO; + + + public Parcel() { + + } + + + public String getRagioneSociale() { + return RagioneSociale; + } + + public void setRagioneSociale(String ragioneSociale) { + RagioneSociale = Utils.preEncodeSpecial(ragioneSociale); + } + + public String getCodiceContrattoGls() { + return CodiceContrattoGls; + } + + public void setCodiceContrattoGls(String codiceContrattoGls) { + CodiceContrattoGls = codiceContrattoGls; + } + + public String getIndirizzo() { + return Indirizzo; + } + + public void setIndirizzo(String indirizzo) { + Indirizzo = Utils.preEncodeSpecial(indirizzo); + } + + public String getLocalita() { + return Localita; + } + + public void setLocalita(String localita) { + Localita = Utils.preEncodeSpecial(localita); + } + + public String getZipcode() { + return Zipcode; + } + + public void setZipcode(String zipcode) { + this.Zipcode = zipcode; + } + + public String getProvincia() { + return Provincia; + } + + public void setProvincia(String provincia) { + Provincia = Utils.preEncodeSpecial(provincia); + } + + public String getBda() { + return Bda; + } + + public void setBda(String bda) { + Bda = bda; + } + + public String getColli() { + return Colli; + } + + public void setColli(String colli) { + Colli = colli; + } + + public String getPesoReale() { + return PesoReale; + } + + public void setPesoReale(String pesoReale) { + PesoReale = pesoReale; + } + + public String getImportocontrassegno() { + return Importocontrassegno; + } + + public void setImportocontrassegno(String importocontrassegno) { + Importocontrassegno = importocontrassegno; + } + + public String getCodiceClienteDestinatario() { + return CodiceClienteDestinatario; + } + + public void setCodiceClienteDestinatario(String codiceClienteDestinatario) { + CodiceClienteDestinatario = codiceClienteDestinatario; + } + + public String getModalitaIncasso() { + return ModalitaIncasso; + } + + public void setModalitaIncasso(String modalitaIncasso) { + ModalitaIncasso = modalitaIncasso; + } + + public String getContatoreProgressivo() { + return ContatoreProgressivo; + } + + public void setContatoreProgressivo(String contatoreProgressivo) { + ContatoreProgressivo = contatoreProgressivo; + } + + public String getGeneraPdf() { + return GeneraPdf; + } + + public void setGeneraPdf(String generaPdf) { + GeneraPdf = generaPdf; + } + + public String getFormatoPdf() { + return FormatoPdf; + } + + public void setFormatoPdf(String formatoPdf) { + FormatoPdf = formatoPdf; + } + + + public String getAssicurazione() { + return Assicurazione; + } + + + public void setAssicurazione(String assicurazione) { + Assicurazione = assicurazione; + } + + + public String getTipoCollo() { + return TipoCollo; + } + + + public void setTipoCollo(String tipoCollo) { + TipoCollo = tipoCollo; + } + + + public String getNoteSpedizione() { + return NoteSpedizione; + } + + + public void setNoteSpedizione(String noteSpedizione) { + NoteSpedizione = Utils.preEncodeSpecial(noteSpedizione); + } + + + public String getTipoPorto() { + return TipoPorto; + } + + + public void setTipoPorto(String tipoPorto) { + TipoPorto = tipoPorto; + } + + + public String getEmail() { + return Email; + } + + + public void setEmail(String email) { + Email = email; + } + + + public String getCellulare1() { + return Cellulare1; + } + + + public void setCellulare1(String cellulare1) { + Cellulare1 = cellulare1; + } + + + public String getServiziAccessori() { + return ServiziAccessori; + } + + + public void setServiziAccessori(String serviziAccessori) { + ServiziAccessori = serviziAccessori; + } + + + public String getNoteAggiuntive() { + return NoteAggiuntive; + } + + + public void setNoteAggiuntive(String noteAggiuntive) { + NoteAggiuntive = Utils.preEncodeSpecial(noteAggiuntive); + } + + + public String getRiferimentoCliente() { + return RiferimentoCliente; + } + + + public void setRiferimentoCliente(String riferimentoCliente) { + RiferimentoCliente = riferimentoCliente; + } + + + public String getPesoVolume() { + return PesoVolume; + } + + + public void setPesoVolume(String pesoVolume) { + PesoVolume = pesoVolume; + } + + + public String getAssicurazioneIntegrativa() { + return AssicurazioneIntegrativa; + } + + + public void setAssicurazioneIntegrativa(String assicurazioneIntegrativa) { + AssicurazioneIntegrativa = assicurazioneIntegrativa; + } + + + public String getDataPrenotazioneGDO() { + return DataPrenotazioneGDO; + } + + + public void setDataPrenotazioneGDO(String dataPrenotazioneGDO) { + DataPrenotazioneGDO = dataPrenotazioneGDO; + } + + + public String getOrarioNoteGDO() { + return OrarioNoteGDO; + } + + + public void setOrarioNoteGDO(String orarioNoteGDO) { + OrarioNoteGDO = orarioNoteGDO; + } +} diff --git a/src/main/java/com/poloinformatico/gls/Test.java b/src/main/java/com/poloinformatico/gls/Test.java new file mode 100644 index 0000000..ec03351 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/Test.java @@ -0,0 +1,127 @@ +package com.poloinformatico.gls; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.gson.Gson; + +public class Test { + + public Test() { + doTest(); + } + + public static void doTest() { + try { + + ClientGLS client = new ClientGLS(); + + + //TEST ADDPARCEL/CWD + Info info = new Info(); + + List serviziAccList = new ArrayList(); + + serviziAccList = Arrays.asList(""); + + String servAcc = Utils.stringToCsvString_2(serviziAccList); + + info.setCodiceClienteGls("523"); + info.setPasswordClienteGls("1234"); + info.setSedeGls("VT"); + + Parcel parcel = new Parcel(); + parcel.setCodiceContrattoGls("4"); + parcel.setRagioneSociale("EMME & EMME GRAFIC DI BONO"); + parcel.setIndirizzo("--&&--'-"); + parcel.setLocalita("Roma"); + parcel.setProvincia("RM"); + parcel.setZipcode("00142"); + parcel.setColli("1"); + parcel.setPesoReale("2"); + parcel.setImportocontrassegno("4"); + parcel.setModalitaIncasso("CONT"); + parcel.setContatoreProgressivo("87"); + parcel.setGeneraPdf("6"); + + info.addParcel(parcel); + + parcel = new Parcel(); + parcel.setCodiceContrattoGls("4"); + parcel.setRagioneSociale("-&-' & \"& -''\"-"); + parcel.setIndirizzo("--'--&--"); + parcel.setLocalita("Roma"); + parcel.setProvincia("RM"); + parcel.setZipcode("00142"); + parcel.setColli("1"); + parcel.setPesoReale("2"); + parcel.setImportocontrassegno("4"); + parcel.setModalitaIncasso("CONT"); + parcel.setContatoreProgressivo("97"); + parcel.setGeneraPdf("6"); + + info.addParcel(parcel); + + + System.out.println(info); + + //TEST DELETE +// Gson gson = new Gson(); +// DeleteSpedReq req = new DeleteSpedReq(); +// +// req.setCodiceClienteGls("523"); +// req.setNumSpedizione(""); +// req.setPasswordClienteGls("1234"); +// req.setSedeGls("VT"); + + //TEST GETZPL +// Gson gson = new Gson(); +// GetZplReq req = new GetZplReq(); +// +// req.setCodiceCliente("523"); +// req.setContatoreProgressivo(contatoreProgressivo); +// req.setPassword("1234"); +// req.setSedeGls("VT"); +// + +// String json = gson.toJson(req,req.getClass()); +// +// +// String r; +// +// +// r = client.sendDelete(json); +// +// System.out.println(r.toString()); + + + InfoLabel il = client.sendInfo(info); + + + +// List paths = new ArrayList(); +// for (InfoLabelParcel p : il.getParcel()) { +// Utils.writeZplToDisk(p.getZpl(), "C:\\Users\\User\\Documents\\"+p.getContatoreProgressivo()+".zpl"); +// paths.add("C:\\Users\\User\\Documents\\"+p.getContatoreProgressivo()+".zpl"); +// } +// +// Utils.mergeZpl((ArrayList) paths, "C:\\Users\\User\\Documents\\merged.zpl"); + + + + //client.sendCloseWorkDay(info); +// String in = "JVBERi0xLjQKJdP0zOEKMSAwIG9iago8PAovTnVtc1swIDIgMCBSXQo+PgplbmRvYmoKMiAwIG9iago8PAovUy9ECj4+CmVuZG9iagozIDAgb2JqCjw8Ci9Db3VudCAxCi9UeXBlL1BhZ2VzCi9LaWRzWzcgMCBSXQo+PgplbmRvYmoKNCAwIG9iago8PAovU3VidHlwZS9YTUwKL0xlbmd0aCAzNTg2Ci9UeXBlL01ldGFkYXRhCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA0LjAtYzMyMCA0NC4yODQyOTcsIFN1biBBcHIgMTUgMjAwNyAxNzoxOTowMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyI+CiAgICAgICAgIDxwZGY6UHJvZHVjZXI+QWNyb2JhdCBEaXN0aWxsZXIgOC4xLjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0b3JUb29sPlBTY3JpcHQ1LmRsbCBWZXJzaW9uIDUuMi4yPC94YXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDE0LTEyLTE3VDExOjEwOjE3KzAxOjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdGVEYXRlPjIwMTQtMTItMTdUMTE6MTA6MTcrMDE6MDA8L3hhcDpDcmVhdGVEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5NaWNyb3NvZnQgVmlzdWFsIEJhc2ljPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpPkFuZHJlYTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDphOTY3MGZmYS1hYWNmLTQ2ZWEtOWNiMS1kZTJmNDIzYjliNTU8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6YmVjOTRhMTktOGQyNy00MGMyLTlmZmUtYjQ2M2QyMTliNDU4PC94YXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+CmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PAovQ3JlYXRpb25EYXRlKEQ6MjAxNDEyMTcxMTEwMTcrMDEnMDAnKQovQXV0aG9yKEFuZHJlYSkKL0NyZWF0b3IoUFNjcmlwdDUuZGxsIFZlcnNpb24gNS4yLjIpCi9Qcm9kdWNlcihQREZzaGFycCAxLjMyLjMwNTctZyBcKHd3dy5wZGZzaGFycC5uZXRcKSBcKE9yaWdpbmFsOiBBY3JvYmF0IERpc3RpbGxlciA4LjEuMCBcKFdpbmRvd3NcKVwpKQovTW9kRGF0ZShEOjIwMjAwMTAzMTc0ODExKzAxJzAwJykKL1RpdGxlKE1pY3Jvc29mdCBWaXN1YWwgQmFzaWMpCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9NZXRhZGF0YSA0IDAgUgovUGFnZXMgMyAwIFIKL1R5cGUvQ2F0YWxvZwovUGFnZUxhYmVscyAxIDAgUgo+PgplbmRvYmoKNyAwIG9iago8PAovQ3JvcEJveFswIDAgMjk4IDQyMF0KL1BhcmVudCAzIDAgUgovQ29udGVudHNbOSAwIFIgMTAgMCBSIDExIDAgUiAxMiAwIFIgMTMgMCBSIDE0IDAgUiAxNSAwIFIgMTYgMCBSIDE4IDAgUl0KL1JvdGF0ZSAwCi9NZWRpYUJveFswIDAgMjk4IDQyMF0KL1Jlc291cmNlcyA4IDAgUgovVHlwZS9QYWdlCi9Hcm91cAo8PAovQ1MvRGV2aWNlUkdCCi9TL1RyYW5zcGFyZW5jeQovSSBmYWxzZQovSyBmYWxzZQo+Pgo+PgplbmRvYmoKOCAwIG9iago8PAovUHJvY1NldFsvUERGXQovRXh0R1N0YXRlCjw8Ci9HUzEgMTcgMCBSCi9HUzAgMTkgMCBSCi9HUzIgMjYgMCBSCj4+Ci9Gb250Cjw8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PDwKL1R5cGUvRm9udERlc2NyaXB0b3IKL0FzY2VudCA4OTEKL0NhcEhlaWdodCA2NjIKL0Rlc2NlbnQgLTIxNgovRmxhZ3MgMzIKL0ZvbnRCQm94Wy01NTggLTMyOCAyMDAwIDEwNTZdCi9JdGFsaWNBbmdsZSAwCi9TdGVtViAwCi9YSGVpZ2h0IDQ1NwovRm9udE5hbWUvRlJLTU9FK1RpbWVzTmV3Um9tYW4sQm9sZAovRm9udEZpbGUyIDI3IDAgUgo+PgplbmRvYmoKMjEgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UcnVlVHlwZQovQmFzZUZvbnQvRlJLTU9FK1RpbWVzTmV3Um9tYW4sQm9sZAovRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nCi9Gb250RGVzY3JpcHRvciAyMCAwIFIKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUKL1dpZHRoc1s3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDI1MCAzMzMgNTU1IDUwMCA1MDAgMTAwMCA4MzMgMjc3IDMzMyAzMzMgNTAwIDU2OSAyNTAgMzMzIDI1MCAyNzcgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDMzMyAzMzMgNTY5IDU2OSA1NjkgNTAwIDkzMCA3MjIgNjY2IDcyMiA3MjIgNjY2IDYxMCA3NzcgNzc3IDM4OSA1MDAgNzc3IDY2NiA5NDMgNzIyIDc3NyA2MTAgNzc3IDcyMiA1NTYgNjY2IDcyMiA3MjIgMTAwMCA3MjIgNzIyIDY2NiAzMzMgMjc3IDMzMyA1ODEgNTAwIDMzMyA1MDAgNTU2IDQ0MyA1NTYgNDQzIDMzMyA1MDAgNTU2IDI3NyAzMzMgNTU2IDI3NyA4MzMgNTU2IDUwMCA1NTYgNTU2IDQ0MyAzODkgMzMzIDU1NiA1MDAgNzIyIDUwMCA1MDAgNDQzIDM5NCAyMjAgMzk0IDUyMCA3NzcgNTAwIDc3NyAzMzMgNTAwIDUwMCAxMDAwIDUwMCA1MDAgMzMzIDEwMDAgNTU2IDMzMyAxMDAwIDc3NyA2NjYgNzc3IDc3NyAzMzMgMzMzIDUwMCA1MDAgMzUwIDUwMCAxMDAwIDMzMyAxMDAwIDM4OSAzMzMgNzIyIDc3NyA0NDMgNzIyIDI1MCAzMzMgNTAwIDUwMCA1MDAgNTAwIDIyMCA1MDAgMzMzIDc0NyAyOTkgNTAwIDU2OSAzMzMgNzQ3IDUwMCAzOTkgNTQ4IDI5OSAyOTkgMzMzIDU3NiA1NDAgMzMzIDMzMyAyOTkgMzMwIDUwMCA3NTAgNzUwIDc1MCA1MDAgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgMTAwMCA3MjIgNjY2IDY2NiA2NjYgNjY2IDM4OSAzODkgMzg5IDM4OSA3MjIgNzIyIDc3NyA3NzcgNzc3IDc3NyA3NzcgNTY5IDc3NyA3MjIgNzIyIDcyMiA3MjIgNzIyIDYxMCA1NTYgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNzIyIDQ0MyA0NDMgNDQzIDQ0MyA0NDMgMjc3IDI3NyAyNzcgMjc3IDUwMCA1NTYgNTAwIDUwMCA1MDAgNTAwIDUwMCA1NDggNTAwIDU1NiA1NTYgNTU2IDU1NiA1MDAgNTU2IDUwMF0KPj4KZW5kb2JqCjIyIDAgb2JqCjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9yCi9Bc2NlbnQgODkxCi9DYXBIZWlnaHQgNjYyCi9EZXNjZW50IC0yMTYKL0ZsYWdzIDMyCi9Gb250QkJveFstNTY4IC0zMDcgMjA0NiAxMDQwXQovSXRhbGljQW5nbGUgMAovU3RlbVYgMAovWEhlaWdodCA0NDcKL0ZvbnROYW1lL0VERURNRStUaW1lc05ld1JvbWFuCi9Gb250RmlsZTIgMjggMCBSCj4+CmVuZG9iagoyMyAwIG9iago8PAovVHlwZS9Gb250Ci9TdWJ0eXBlL1RydWVUeXBlCi9CYXNlRm9udC9FREVETUUrVGltZXNOZXdSb21hbgovRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nCi9Gb250RGVzY3JpcHRvciAyMiAwIFIKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUKL1dpZHRoc1s3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDc3NyA3NzcgNzc3IDI1MCAzMzMgNDA4IDUwMCA1MDAgODMzIDc3NyAxODAgMzMzIDMzMyA1MDAgNTYzIDI1MCAzMzMgMjUwIDI3NyA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgMjc3IDI3NyA1NjMgNTYzIDU2MyA0NDMgOTIwIDcyMiA2NjYgNjY2IDcyMiA2MTAgNTU2IDcyMiA3MjIgMzMzIDM4OSA3MjIgNjEwIDg4OSA3MjIgNzIyIDU1NiA3MjIgNjY2IDU1NiA2MTAgNzIyIDcyMiA5NDMgNzIyIDcyMiA2MTAgMzMzIDI3NyAzMzMgNDY5IDUwMCAzMzMgNDQzIDUwMCA0NDMgNTAwIDQ0MyAzMzMgNTAwIDUwMCAyNzcgMjc3IDUwMCAyNzcgNzc3IDUwMCA1MDAgNTAwIDUwMCAzMzMgMzg5IDI3NyA1MDAgNTAwIDcyMiA1MDAgNTAwIDQ0MyA0NzkgMjAwIDQ3OSA1NDEgNzc3IDUwMCA3NzcgMzMzIDUwMCA0NDMgMTAwMCA1MDAgNTAwIDMzMyAxMDAwIDU1NiAzMzMgODg5IDc3NyA2MTAgNzc3IDc3NyAzMzMgMzMzIDQ0MyA0NDMgMzUwIDUwMCAxMDAwIDMzMyA5NzkgMzg5IDMzMyA3MjIgNzc3IDQ0MyA3MjIgMjUwIDMzMyA1MDAgNTAwIDUwMCA1MDAgMjAwIDUwMCAzMzMgNzU5IDI3NSA1MDAgNTYzIDMzMyA3NTkgNTAwIDM5OSA1NDggMjk5IDI5OSAzMzMgNTc2IDQ1MyAzMzMgMzMzIDI5OSAzMTAgNTAwIDc1MCA3NTAgNzUwIDQ0MyA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA4ODkgNjY2IDYxMCA2MTAgNjEwIDYxMCAzMzMgMzMzIDMzMyAzMzMgNzIyIDcyMiA3MjIgNzIyIDcyMiA3MjIgNzIyIDU2MyA3MjIgNzIyIDcyMiA3MjIgNzIyIDcyMiA1NTYgNTAwIDQ0MyA0NDMgNDQzIDQ0MyA0NDMgNDQzIDY2NiA0NDMgNDQzIDQ0MyA0NDMgNDQzIDI3NyAyNzcgMjc3IDI3NyA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTQ4IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDBdCj4+CmVuZG9iagoyNCAwIG9iago8PAovVHlwZS9Gb250RGVzY3JpcHRvcgovQXNjZW50IDEwMDkKL0NhcEhlaWdodCA3OTEKL0Rlc2NlbnQgLTIxMQovRmxhZ3MgMzIKL0ZvbnRCQm94Wy0xMjkgLTMzMSAxNDEzIDExNjhdCi9JdGFsaWNBbmdsZSAwCi9TdGVtViAwCi9YSGVpZ2h0IDY0OAovRm9udE5hbWUvRkxGRExJK0ltcGFjdAovRm9udEZpbGUyIDI5IDAgUgo+PgplbmRvYmoKMjUgMCBvYmoKPDwKL1R5cGUvRm9udAovU3VidHlwZS9UcnVlVHlwZQovQmFzZUZvbnQvRkxGRExJK0ltcGFjdAovRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nCi9Gb250RGVzY3JpcHRvciAyNCAwIFIKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUKL1dpZHRoc1s3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDE3NiAyNzAgMzY5IDYyNiA1NDcgNjkyIDU3NiAxODUgMzEzIDMxMyAyODAgNTMzIDE2NyAyOTQgMTg0IDM5NSA1MzYgMzgwIDUwMSA1MzAgNDk5IDUzNiA1NDEgMzkxIDUzNCA1NDEgMjAyIDIwMiA1MzMgNTMzIDUzMyA1MjQgNzc0IDUwNyA1NTIgNTUzIDU1MiA0MTUgMzk3IDU1MSA1NTUgMjg4IDMzMSA1MzYgMzgwIDcxNiA1NDEgNTQ2IDUwMSA1NDYgNTM4IDUxNyA0NjAgNTQ2IDUyMyA4MTQgNDgyIDQ3MyAzOTYgMjgyIDM5NSAyODIgNDgzIDU1MiAzMzMgNTAzIDUxOSA0OTQgNTE5IDUxMSAyODkgNTE4IDUyMyAyNzMgMjc5IDQ3OCAyNzMgNzcwIDUyMiA1MTEgNTE5IDUxOCAzNTcgNDcwIDMwNCA1MjIgNDM3IDY2OSA0MzMgNDQ4IDM1MSAzNjkgMjcwIDM2OSA1MjQgNzUwIDUzMCA3NTAgMTY3IDQ0MyAzNDQgNTUzIDU0MiA1NDMgMzMzIDEwMjQgNTE3IDE5NyA2ODggNzUwIDM5NiA3NTAgNzUwIDE2NyAxNjcgMzQ0IDM0NCAzNDcgNTAwIDEwMDAgMzMzIDc4MiA0NzAgMTk3IDc2NSA3NTAgMzUxIDQ3MyAxNzYgMjcwIDUxNyA1MzUgNTQ4IDQ3MyAyNzAgNDgzIDMzMyA3ODMgMzI0IDM3MSA1MzMgMjk0IDc4MyA1NTIgMzQ3IDUzMyAzMTcgMzI2IDMzMyA0NzEgNTc2IDMzMyAzMzMgMjQ0IDMyOSAzNzEgNjIzIDY0NSA2OTEgNTI0IDUwNyA1MDcgNTA3IDUwNyA1MDcgNTA3IDcxMyA1NTMgNDE1IDQxNSA0MTUgNDE1IDI4OCAyODggMjg4IDI4OCA1NTggNTQxIDU0NiA1NDYgNTQ2IDU0NiA1NDYgNTMzIDU0NiA1NDYgNTQ2IDU0NiA1NDYgNDczIDUwMSA1NTAgNTAzIDUwMyA1MDMgNTAzIDUwMyA1MDMgNzUzIDQ5NCA1MTEgNTExIDUxMSA1MTEgMjczIDI3MyAyNzMgMjczIDUxMSA1MjIgNTExIDUxMSA1MTEgNTExIDUxMSA1MzMgNTExIDUyMiA1MjIgNTIyIDUyMiA0NDggNTE5IDQ0OF0KPj4KZW5kb2JqCjI2IDAgb2JqCjw8Ci9UeXBlL0V4dEdTdGF0ZQovQ0EgMQo+PgplbmRvYmoKMjcgMCBvYmoKPDwKL0xlbmd0aDEgNjk2NzYKL0ZpbHRlci9GbGF0ZURlY29kZQovTGVuZ3RoIDMxMTA1Cj4+CnN0cmVhbQp4nOy8h2MUxf8/PDN7225vb/d67yXlklxIIyEhOUhCL0FBikRClaJCUEGwgEqNBRTpqFhAFD8SesACKmJDwY6CgIoVI5aIBXL3vHcv8MHv7/mVP8C73O7M7uzu7Lu+XjMDCCOEtGguopB/7PWjp03e5M+DI88iFGkaO+Mm/01f/vUwQtFShLicCdOuvb7zI7fICOWNQ4ipuva6WRMqpvyYjVDRkwj1vGXi+NHjvis8FUfoNjfco2QiHDBp7FdBfTDUwxOvv+mWt5pneKF+C0IJ83VTx47WTPp0GkIv3At1+/Wjb5nmGMDUI3QB7of806aPn0ZGNWRC/QBCpolwjOr4udV+I2Md1KBkugppjEUI4UqosKgS3YFTxE+Gk/9QIWogNZO6g2qi7qUeow5T5zSiZiCdQV9Fj6IX0k30Evp1+ge6jdEwLibFzuHWc89ySc9kzxTPq563PCnvHO+j3l98Fp/HV+vr7xvqG+672lfvu923w3fA94HvmO+sr82X9Ev+oD/qz/cX+bv4K/01/mv8U/1z/A/59/pf8v8coAOmgDUQDEQDeYEBgcGBawLzAssDm4IkyASloDFoCTqDvmBWMBbsFRwdHB8iITkUiKAIiegicsQcsUfckXAkJ1IUqYhcF5kbmRdZFLk3sizyWOTZyLbI3sgLkQORQ5HDkU8j30Qroolo92hDdGx0QnRKdGrOnDzbU4Gn7v0NnyfnbedLzlecrzzf7XzN+ZfPpy6MvdDWXtX+a3tbe3sylLwpOSd5IXUhlVJkj9YTRAJkBHmOClN11GxqHsjvfuoJ6gj1h0avqaM70cPp0fRi+j76AfoI/TODGIbxsnUgv8e50x4E8rvOc8CT9CLvXO96768+u8/v6+Wr65DfKN9c3y7fQd/Hvs99v/rO+ZHfCPLL9hf4y/wVqvwmg/yW+tf7X/gf8usfuDJwNchv6SX5GUB+jqC3Q34NwXGq/Pz/G/nVXZLf0sj6yDOX5PcWyO8oyK/LJfmNj04G+TWA/GxPLQL54fOm857zpSC/xPnq8z3Of3Dhmgu/tleo8vs76U9OS85IzlXkl/oKIc1Z+L2PEN0VqZ/kJGWrOQIl8Bct0SI+xSf5C2DbRy68jTo+LNg28/1PJQidpc72Q+jMHIS+0cDedMZwRjojntGdEc5oz/Bn2DPMGfoMdYacQT8o+kKn5qvbefCb+SM869TuH0uVIz8OPdV06vYvbj45+eSsU3vPHPoq59T9Z1ae3HRyxYkVJx4/cQ9CJzYq7U7aTjSeGAW1/BOJE4Unwsd7HK89XnG87HjJ8cLj+cezjgePu46bj+NjPx07c+y7Y18f+1K56tjBY/uOvXRsN5ReO7bh2JZjtce6H+t2LHwseCxwzHt6Ndxvr9LO/T39knkWvN86di27hl2dfltjECHxM/kNhHQ/yE+DrBA1VvFmXAFO/idIawIcG0CvoyEa0M/RH4JsQHbMYHTpw/6pbLkGbiL3oBaOa5uVuna/un2h4/cn+j9+BL9QCduRAsQXYbJ6JL2dJjyJ/i8fYZHyE5o6agvQ//NHuEZouFQe+b9p00e5p7Cmo7bu0vGDuhdEM8hOibJI9Kpbf8dJCj2B5qH51DVoBfoGLUD3o3vQw+hp9CSSURMI9260DP2MfkH3oZVoEcboODqLHkHPoN/Qr6gNPQ6R/w10EP0HjUFj0VI0Dr2FxqPX0ZvoXfQ2OoTeQd+iCeg9dBgdQc+ha9FP6AH0IXoffYAmou/RGbQYTUaT0BR0PboO3YDWo6moEU1D09GN6GZ0E5qBZqLv0C1oNpqFbkW3o9vQbvQYmoPugPxzJ/oB/Yj24BV4JSaYwhpMo/PoAl6FV+M1eC1qR0nMYBZzKIXX4YfxI/hRvB4/hnmsxQLW4cfxE+gc+gM/iTfgjfgpvAk/jZ/Bm/Gz+D/4ObwFN+OteBvejv5EH+EmfA/egXfiXXg3bsEi1uM9eC+WsIwN2IhOoS+wCZvx8/gFbMFWfC9+Eb+E9+H9+GX8CrZhO9qCmrEDO/Gr+AB2YTf2YC9+DR9Ef6G/0ZfoK+zDfhzAQfw6fgO/id/Cb+ND+B38Lg7hMI7gKD6Mj+D38Pv4A/wh2oszcCbOwtnoNPoaf8Q0Mfcw9zL3MfczS5ilzAPMg8wy5iFmObOCWcmsosPMamYN2sisZdYxDzOPMI8y65nHmMeZJ5gnmQ3MRuYpzWTNFGYT8zTzDLOZeZb5D/Mcs4VpZrYy25jtzA7NdZrrmZ3MLmY308LsYfYyzzMvMC8yLzH7mP3My8wrzKvMAeY15iDzOvMG8ybzFvM2c4h5h3mXOcwc0VzQtGuSmhSNaEwTmqI1NE0zNEtzNE9raYF5j3mf+YD5iPmY+YQ5ynzKfMYcY44znzMnmJPMKeYL5kvmK+Y08zXzDfMt8x3zPfMDc4b5kWllfsIf40/wUfwp/gwfE4yszBpYI2tizayFtbI21s46WBfrZj2sl/WxfjbABgWTYBYsgiScEE4Kp4QvhC+Fr4TTwtfCN8K3ujbd77pzuj90f+r+0v2tO6+7oGvXJXUpEYmYDbFhNsJG2Qw2k81is9kYHRGsgo2dy97J3sXezc5j57ML2IXsInYx28Tew97L3sfezy5hl7IPsA+yy9iH2OXoY3SSXYGOsivZVexqiGZrIao9zD7CPsquZx9jH2efYJ9En6LP0DF0An2CPmc3sBvZp9hN7NPsM+xm9ln2P+xz7Ba2md3KbmO3szvYnYJdcAhOwSW4BY/gFXwQkQJCUAgJYSEiRIUMIVPzoGYZ110zm6vmarhargfXU3MT14vrzfXh+nL9uP7cAG4gV8cN4q7gruQGc0O4q7ih3DBuODeCu5obydVz13CjuAbNciFLyBZiQo6QK+QJcSFf+E74XvhBOCP8KHQSCoRC7j7ufm4Jt5R7gHuQW8Y9xC3nVnAruVXcam4Nt5Zbpz+pP6X/Qv8l9zD3iP4r/WnuUZGIlKhBXnwW/4x/wcfxr/g33IbP4T/wn/gv/DeOQeK8gNtxEucAJkMEE0IooiE0YQhLOMITLc4lAtERkeiJRGRiIEZiImacRyzEiuM4n9iInTiIk7iIm3iIl/gA290L6CSIO+ECEsKFJEwiJEoySCbJItkkpv9aKBKKhc+EY8JxoVX4STgr/My9TnJILskjcZJPOpECUkiKSDEpIZ25N7g3yWxyK7mN3E7uIHPIXHInuYvcTeaR+dxbZAFZyL3NHeLe4d7lDnNHuPe497kPuA+5j7iPuU+4o9yn3GfcMe449zl3gjvJneK+4L7kvuJOc19z33Dfct9xP3BnuB+5Vu4n7iz3M/cL96vYjfuNa+N+585xf3B/cn9xf5NFZDEt0wbuPHeBNtImrp1L0mbaQltpG5fiEY95QttpB0/xGp7mGZ7lOZ7ntbzA62gn7aLdtIf20j5e5PW8xMu0nw7QQTrEG3gjb+LNvIW38jbezjt4J+/i3byH9/I+3s8H+CAfEmk+wkf5DD6Tz+Kz+RifQ4fpCJ/L5/FxPp/vxBfwhXwRX8yX8J35Ur6M70JH6Qy+nK/gu/KVfBWf4Lvx3flqvoav5XsIvwi/8j35XiIjsiIn8qJWFPjefB++L9+P788P4Afydfwg/gr+Sn4wP4S/ih/KDxN1oijqRUn/g/6M/kd9q/4n/Vmxu1gt1oi1+p/1v+h/1f+mb9P/rj+n/0P/p/4vfjg/gr+aH8nX89fwo/gGfjQ/hh/Lj+PH8xP4a/mJ/CThN34yP4W/jr+ev4Gfyk/jG/np/I38TfzN/AxyH7mfLCFLyQPkQbKMPESWkxVCG1lJVpHVZA1ZS9aRh8kj5FF+pvC7cE74Q3hMeFx4QnhS/61+jH6sfpx+vH6C8Cf5UdgobBCeEjYJTwvPCJuFZ+lC/cv6V/Sv6g/oXyOtwl/kJ/1Bcpa6k7qbmk8tpBZT91FLqGXUcmo19TBwkQ3U09Rm6j/UFmortZPaQ71IvUy9Rr1JvaN/S/+u/n39x/rPyM/Ue9RH1KfU59QX1NfU91QrdZb6hfxCfiW/kTbyOzlH/iB/0qV0Gd1F+I/wnLBF+Fs4L1wQ2oWkkNKfIH+Rv8l5coG0kyRJUYjCFKEoSiO1UzSdSefQ5XQFXUkn4PrudA3dg+5F9wHEdQWwoxGUj76GHkNPoCfTN9DT6RlUBj2bvoOeS99Fz6MX0IuAO91L308vpR+kH6JX0KvoNfQ6KkY/Qq+nn6Q30c/SzfQOehe9l36e3ke/Cizrbfow/R6VS39Af0Ifo0/SX1Gd6G/pM/RZ+jf6D/o8nWIohmUERmIMjImxUWcYB+NhfIyfCTBBJsxEmUwmm8lh8ph8qpgpYIqYUqYLU8kkmO5MDcUxtUwPpifTi+nN9GH6Mv2Y/swAZiBTxwxirmCuZAYzQ5irmKHMMGY4M0LGzNXCVmH7RflQWkqgdGn5MCOZBmYcM5GZJOzWYR2t43WizqCz6Bw6jy6gi+gydFm6mC6uK9R11pXrqnTVup66vrqBuit1Q3VX60bpxuqu1U3STdHfob9Lv0DfpL9Xv1T/oP4h/Sr9Ov16/eP6J/Ub9Zv0z+qb9Tukp6TN0hZpu7Rbel7aJ70qvS69Kb0tfC7aRDv+HJ/AJ/Ep/AX+kk9pkRYDa6C0Gi2tZbSsltPyWq1W0Oq0olavlbSy1qA1ak1as/5v/Xmxh/4C/gqf1pzT/KH5U/OX5m/NeX27PqlPSUjCEtFatFatTWvXOrROrUvr1nq0Xq1P69cGtEFtSBvWRrRRbYY2U5ulzRbeFQ4LR4T3hPeFD4QPhY+Ej4VPhKPCp+Q78j35gZwRXkNb0TbSxLyGi9BOtAu9ir9G29EOdEA4iO5CL6OF1ADg4FcAixwkfIJew/fh+4XXcbH+G/wNNYS6ihpKDaOupAZrk9qUgNDv+FsBCwR3FihBQ/Zr7kAvCAAuBFaQBYPuHd27usO6I/rv9N+L14ijpAKZkomsQatRK3oFbUAP4iq0BHfDM/AD+EG8DM9ELfg2gRfdokf0ij7RLwbEoBgSw2JEjIoZYqbYS6IkjUSLvcU+Yl8xS8wWY2KOxEisxEm8pJUESSeJYq6YJ8bFfLFOHCReIV4pDhY7iQXiELGf2F8cIA5kbmJuZmaSg8IeYa/wvPCC8KLwkrBP2C+8TF4nb5A3yVvkbXKIvEPeJYfJEfIeeZ98QE6Qk+QU+YJ8Sb4ip8nX5BvyLXhjV/C+K+nB9BDKR/mpABUEHxxLj6PHg18OpOvoQeCVo+gG4N596L50P7o/+NYB+jX6IPjXIfod+l3w1Rvpm+ibwWun0tPoRiqDyqSyqGzw3lvp2+jbwXMXg/8qYx/3gD/PoWJUDnjxA1QulUfFqXyqE1VAFVJF4JVt9O/0OfDQH+lW+ifwSxk806g8E/zSy0wG35zCXEedoX6A34/gh93AE6ulTDpXyqLzpGw6LsXofCmHLpBypTy6kxSX8qVO4Pmn6C/oL8Gbs8CnM8CnY3QPJp/pBD4eAf/OBa8uZyqYrnQWnSU9ID0oLZMekpZLK6SV0ipptbRGWiutkx6WHpEeldZLj0mPU8VUCfUb1Ub1pHpRvak+VF/xKskm2anbqNv1L+r3Ce/o90teySf5pYAUlEJSWIpIUSkDmCaD0gNJ8AFgghD5HxQMTlIammE5XivoRL0kG4wms8VqszucLrfH6/MHgqFwJJqRmZUdy8nNi+d3KigsKi7pXFrWpbyia2VVolv36praHj179e7Tt1//AQPrBl1x5eAhVw0dNnzE1SPrrxnVMBqNGTtu/IRrJ06aPOW662+YOq1x+o033Txj5i2zZt962+13zJl75113z5u/YOGixU333Hvf/UuWPvDgsoeWr1i5avUatO7hRx5d/9jjTzy5YeNTm55+ZjP17H+e29K8ddv2HTt37W7Zs/f5F158ad/+l9GrB147+Pobb7719qF33j18BL33/gcffvTxJ+jTz44d//zEyX9Hzv4dOft35OzfkTOl/u/I2b8jZ/+OnP07cvbvyNm/I2f/jpz9O3L278jZvyNn/46c/Tty9u/I2b8jZ/8cOaPvRz66n/pzUw8hF0KpL+B3Gn7fJfukLtBTUCg5OXWKMgErDad/HZ8IsKwwsJkVaB+qR28TCtXiPDQMaYAfOADmlKG+WEY2AMtalIlCqC+qQxbUBzC+CPyhE/oB90B34ggaiNahIBqArKgbcKn1uGfqe+BCH+BJaDNcvQknUAbqh3ulTqJBqC61Gyvr2sqBu63BeuSDM1ocSp2AO9yIFqK9gE1TaARaRa+Hu9ShK9ANqd1oJHoPj8BXp9yoN3CyO9Aq4FwvotN4Ed6voVMNqBi43nRgViacSd2V2oRK6aP8ztSB1BFgjDdA273oRxLT9Ej9hBLoOw1OTQSOaUKF8L0B+OIudBzbcTFVjfSoCJ5VD6xuC5UJfewFbHAd8Jtb8RZKn3oS3qYzcMo56BS+Be8nAfoo/XNqNjLC+xVBT5uAob6MXkVn4G498GDq+mRVagDCiEMxVAtPmgdc9jmQ3CvwPQBcLYB7w51fhhj5BXUD9Q3c+SmIAefQn8CmJuE7SBW5iy5ovzO1E0XhDRNwj95oKLDSZ4F/JfDVcO06MlNBe9Qu6rgmU3M2VZp6FTEoDm3vAj68CxjvB4Dfv4be9Mcfkzuo7fSC1K3Q3zhw3TnQnw1oD0QrGhioDtiiHxfizvBmtwJP/AJQaogMo8ZQW+h7U7NS96EA2Eo9MOmJwI/vRvOB9x4GpngGtQKL9APG7YyrcB1ExiX4ADkMEXEktUKT0KzQbNa8orlAG+hXku8lT4HUlfvko/7wrQcePhtk3QLfV9FnwJhdwELjuCvuA3cahSfg2/BSvBw/AWx4FzDRI/h7wOh/AZK+FxDP8+Q1JRJRHiqbqqEepQ5pAprPNOfZ0e2e5L7k2ZSQiqUKU0tT61LHUq2qFtxg8VWoGqxrCrD1eWgpWo4eBpnvQO+gjxROpH5Po59BB+eBqZuAIbuAA4eA3+bA2w3Fw/BMYN7LgKEfhJx2Gl8ANqAjQfhmAwrvQ0YC5v5RzcUhqht1C7WSep/6WzOLLoDvZnon/TNzmo1why6sbT+RRMlJyRXJtalisEUGLM8EPleEuoPN9QEtj0ON8J2ujjfMhu/dYIdb4LsNPY/eQIdA9oeBnR1X+6t8lZGLNnWEgYA+aczBN933fNBMNVhLAx4Puk1/b8V34cV4FXzX4kfwYyDfNJc/CRn3d3gnBCyjG+kJb1RHrib18B1FxgKjuIfsgO+75GNyDGL+35RMGSDGZ1C11LXUIqqJaqZ2UB9SH2mimm6aXpopmtc178Gb96J7Q7wfC7H6MfoJ+hX6Lfo0IKVlwPlbmO9YLVvC1rGDga0+zT7PHmdTXAbYU3/ofdZlA0nL8NWaOFkK/KsF3vslchP1NnkIb758rIlugh6MQ6NIC/Uiefi2pdSX1LPkLoQ0NerprhDFDqEX0CH6A42F/g69TpzoJ4iHD1GjyUuAmu24hCrXzNccgqgzC/r5BOQ2lmyBFmdAG6PQEOxAv2quQmdB/ofpJpBpD3ICbyYHSR+w5KPoSfI85PD1aDzuDL0bBzjib/QA3kP58S6wuznoCPoRnfpvbzXx9u6kirGTGUwX0NAePCj1OslKnQGv/wLPR8eov8H2r8IDcBxtRF+B1j/CRdinSWpc6D2IfF60Vh3J2g4++JYmDB70O9pDFaERmlOg83j7m8ka+ibqbnyOdAN12tTIPVCJxhCDV0GsUuKoHm0BS4Aoonr0GfQODoIUP2A+Q2vQErSXsqAItQGYZIp6Q+NHD6JTVD946u0Qn9yAkzah69EkeA9/6pvkk3CHyagUleIxeASqgTO9kDd1PfR8I8SiRGpkajU9nI6hd3E/bEH7IHrZQYoraD7ZCi13gB8eQ73wPWh7chzaD3nFjiO4AKyplZ4Bef0ZQOEv0e8wndAt4LVrQYtfojbIGn48FmTxA/oDbL07eE8O+E836EUvyGHXkeHUi6gaO9E0iIGZELe7gwxGgCZvhLvche4Ff9oAOeRd9DOW8Uj0EjoKnmMDPx8Lz+fgPn3REND6jWgjRMe78XY4Mg55UTbI6W+sx6XkJnieEmdXQJzdD306jr6ByJFS+5WDy3ENaG8s+kPxZXhCCarDWyEn70JlkClrqEPoaxSG7NodfPRJuK4BbEOPPKiM/goTlJMckColk6gXsRWyoR6sajBk9q64EXohwXu0IwseiIqTPeFumyGW1dEbIPvGIDNYiEUzlB4C/f4MMtm7aHpqGF7D1lCfUD9rpiW6DxmcqKrsWlHepay0c3FRYUGn/Hhebk4sOyszIxoJh4IBv8/rcbucDrvNajGbjAZZ0os6QctzLENrKIJRTm2oR4O/OdrQrImGevXKVeqh0XBg9GUHGpr9cKjHP9s0+xvUZv5/tkxAywn/o2Ui3TJxqSWW/RWoIjfHXxvyN79TE/K34BGDhkH5vprQcH9zq1rur5aXqmURyoEAXOCvtU+s8TfjBn9tc48ZE5tqG2rgdlsFbXWoerw2Nwdt1QpQFKDUbAtN24ptlVgtEFttl60EcSJ0qtkZqqltdoRqlB40U5Ha0eOa6wYNq61xBQLDc3OacfXY0JhmFOreLMXUJqhafUwzU93Mqo/xT1LeBt3j35qzv+neFhmNaYjpxoXGjR45rJkaPVx5hiEGz61pts0+bf9vFW5urB628PKzLqqp1j7Jr1Sbmhb6m9cPGnb52YCyHT4c7gHXkkiPhqYe8Oh7QYh9r/TD08j84cOa8Xx4pF95E+Wt0u83PlSrHGmY7G/mQ91DE5smN4BqnE3N6IpZgW1OZ2JP6hRy1vqbBg8LBZqrXKHho2vcW82o6YpZ2x0Jv+OfZ3JztsqGtGC36qWOgk68vDD+0jm1pDZXSn2vuCRZrPQo1BsMotk/1g89GRaCdypVNuNLUdPYUmgGn+EYrmoeBxqZ1MxXNzTJXZTjyvXNdEQO+Zt+R2ABodYf/3lkdMcRJiL/jpSiYieXTA3OXyw3x2LN2dmKibDVoFPoY6VaL87NmdFCHg1Nk/2wA/GhOpDt6OFd4iD+QEBR8D0tCTQGKs1zBw1L1/1ojGsbSsRjw5tJg3Jm/8UzliHKmbkXz1y6vCEElrxDnSC3NHPRS3+SbDXVTuzSjK3/h9Pj0+f7XhnqO2jEMH9tU0OHbPsO/kctfb700rmOUrOpehjlIh0l4qLUs2CUIy81VirDdM2aCPwxqlGPa2E5sEr1CPb3aJYbeqW3w7WBwP/jRS2pn5Wr1N1/L+voZnOX2D/r5f+o/6N7uiYKOqyJkr6DRzQ1af9xrgdEoKamHiF/j6aGptEtqbljQn451LQHME1G07TahosabUntvcfV3OPe4fASE3EXsFaCum8N4UWDtibwoitHDNsjI+RfNHjYNoJJdUP34VvDcG7YHj9CCfUoUY4qB5WKX6kAuQJD30Y4tb1rTwKhuepZjXpArY9twUg9xl08htHYFpI+JqcfFFUflIAsP7ZFkz6TuNhaA8e49LG56daZHa05OCMrZ/YC0UNIPZn+KFGjevCwy+1BdbLhudAMuwEhuGlljo5F3XcQ/CrDtlBcwoRozasU0rKaVzFycAz9KqFewN0QD4n8KmSPyecq2isGyG0V/dsrUBWU5Quw6ZQfMAQMEdhgtwZd8FP7LySUKTO/Zr+y4uOK5ATyIPBXI6pLZC7U75ZIZ80q8hC/iWzgafwKonSviCZRp4O2+WaJ9bFxlmJbyPIEn5CxfJVp6grlwfWt9fB0Gb6oqrWqtVM+qsf12MKw8DXIRpvVZokig4zIgxM71UTzh/Ytqv8luRUPoKfk1XQbcd+W5MHk0WTL+B7FBYPwb5DVE1hhEw7o23C1b1ckgiWahfQiqUXSrCCr+Y3kaV4DvTNB70BKMuvv6JVhoNIrM8JYpxPzTVcsht61qR1TO3lZ70zFJZ3ha5BJRjSj2Kr0zjGxU3VGunN4YHJrckJebbcR9zbjLsAVe6qdS4rJF5IvJxWaj6aT8dT90Lu+6PuEqLXz3cvt5d01fhM2tZDZuxwOn78n7vkimY26UQZUgTIpw05UJBeRohbcY0fFERazLXhqwgz0fGPeRvTKnAp8sgJXsKe0WNuS2p9wiIYibTf9WQ3WJKCo6YasiS7F1nZ9jXJW6lJc044SegB/vlcqXonAsV05eUVLIzjSgrsn+M4JqD3aGXfeB6jNj/JINuqHPsSFYCYO+ZyzdXpM+YOP3Sm3xpS/07FG5Yeqpte3On7/Wq6wt06X2+tPy22tjSC91kYQWyPOI8VFJYUFgFsYhi0B+aXLoWBGNBRkvcSWrkUzotEMaMEo5eKiStI5I8imy8oVNitupQzdumXEqioNdGl+vKpLTkWfcnOh3R3pG8uf4TR1yYrVipzJF7ByYvecrPLcWXk5U9yOcmtZr/LcqpsMdupUl4o7Qnk9uhVl3dS1whYsqO6SGetOYU2nSEXQkREr73l1eUlRcZeSq2tKMzKrqoM5iiDhTreIBkV7BXgqmUUqwcecCR05hpCTxg7Nf+6zxwbIp+VvULw/2AkOFAfIrPY9pCeeeli5akTqW/wU4HIBBXeg3oxAtWBTQvDz+TzhHbqpi5WrL9T3b0WKleEO0SgvjVGP0WNqa0ePxkXqrrZ2jLL+qk/qNLWTnqjgStwn4eBdjI+J8Fk21u6y+C0RexbPcngm52nB2m1GOgN22xnRaGuhtIkISoSjRSgRy4NNYQlsyrsWJQC3rlfeKdcoBX3AmZWW+iUiFhMmS5HoyPn9F6WL52LT+7fWVw9L2IKJcEZRULlJULlJULnJ1CBujMFnODRUC/1bq4ftQbbU/u3Q2Aamth3aq3u4RNnvhKsabB1XdfhY9azEGJztD/gChJH0sp4w4VAkRBhBp9XxOk6nYSxWs5UwDrvT7rJTTHoyn2KyY1kxwngNwTEoysLGbbKNwZk0bAJ6zxgc0mWMQXYrlGIYSsoTsbLJ7vjcCUbaiM2snqhWmAHC71yStjlaVupgpgzEJJvVWlgAAYDaWRa88cGrxjzSNScQqyw8ctOMd/Krk4c02qijNOaIOM1SaV6BI5shG99uvq5p0Lj6msbVT3y+Z/UTjy16/jgeV35PJ789tLX9bPLUmJ75/tKbFStZCKF7LGjVhu5+Aenxf3Ax4vCGXcFR7FSW4G6ieoTFf6EQsuINSMJ/ANUoRlZCEnqJQzTH6uCgD7hSCwVhVq+vk6ZKWyRKlrDksOtfIghx5CCyExs+qcb90xD16+sr+oO/KpG/ylj2e+sF/HsM18fADA1meNdCS6C4sKCkpNhQFFVkkBEha609+vvaS8JD+ziNnfyFvY34N3ri+c231+ZEIpk95pJ918QD/vBp1VvgjdbBG7nRd4nwIvIceZaiMnTLKaIVtAJGtMu43rrDSqxuAn3SCpy7BTfsMsZtzTZia8HBbdjIKeYiiEVcCxXeoaexDlynLeFCtEwT+rjxA8mN97mx2+mVMN6HMXZ49uJheClS/bG+EaJ3Y/82CEeoqqo1BqgmYeISVrGKS9j0sHFIsBHLVPsDIcD5tL1CC9VOoZG6d8nqfpvbUKW2PW0oKzMYyzD86g1lxjKoym+CyOpRfSBQjIzFRaqsVAMCZ2YZHAAZdi6k6i58iac+fNc1a4ZESo4vvfaZhj7jk8/iyHXdsoNhK96J85ZOumeNuL+l4ane8xfvSe40xmoVOQZSX1FNIMcYOpzwsZJNmhibFZtvmW9da1pufdq40brXJOS6q9zEzOEWDEkWIVlZphkQuvG4AQBFgBxCUfIuciIOXgfygipXowX25N1dCT3tFJG5hZh2+DGmtXvxciRg5y5vWswQDHYbPkBZchbJUgKDQbJhmzNX8mKvEh68jpzLZA7p4FwjRIk2SO1t7YayuMPZWoHsVVXO1lhMbj8tnzaWxetbjWVpceHiSnK5tCDysYrIUCCYkY76qseVQBscnz4sMWvEvWMivb5oum/3kKtvvjX5TjL57MCy7rGAR351SJ/J+8mmUKDs5oorZz4kPrXp2Rv73lNc9tQdHyY/Kcusyuum5x69ecTib0GetRA/t9P9UBDXJfL0DOa1Dm0mpFqNWWtxWdxUKdOb2U1TAo2dLq1b45Fh69Fgp4YC8xuZkFHQjFAQYiVGQVkNl/wOI4JM0YLP7jL6qX0UgYbB7RhpnC14TUIrmXwmYjquE0kLeWM7fo9DzxMGBZEH/55wJjhlXSPFOcPye0uCOKgINegIpWNuG8Tc0yDSVkgvbWDGrfWtgNEUU02YqQQYJJUA66QUe6YUy1btM9momrIGdAwtNB0mrOkwaXUPTZX9NrNOvSQ2vLVeuSjhDSo3DSo3DSo3DSo3DSagWTBhFNJtY8MX0nmx2+UDyGC0KV5gK1OyfD2eXt+IA1SA1aj5XBO6qEOIora0FsOBIItLya3j238oxMP3rr4/mVyzcXhlt1hG3eiuOb6MK25Mrk+2uUrofsnkQvHRu1+9/eydlTmlse7+mmxZd8vg5uMYDLsf6O8VNVJmgEfwZgpPsM6wEgBAfyYsRnNRNhW2vG6hqjg6aLf7aD5qeZG8BeBuOdAwHq/ZGY3KiPZBWtwhi8Hjuhb8xXbkzLK3kDd3Sk6fkzgVMxfMiiLMjsyLigCrboXc1v+ckqchWMZb5dbTEALSgUBNXXmuiNYUjrpdHhdhjBF9NKINjsFeg3MM8ktQCgnRMdhl8o1BARE26GIaimXH7rwT1UPkBfirJ+wlhKTgAHAQYxgzFrMxLURZyUbUKzuPzQnleLp1X/X2DW/dePuHM4/hZck3ueK8QG5er+pY70x6ojvvgcOrvbz5830LTs1ejLm1p/Hi79tvaEo0JZNFkSlPYvOkGsj6vUCaLfRYkGYY8M3ARCal05gMOrOpVjcxOivKRnBn21UFMzV3k3mONeLa8DPiM+EWbpdZt5VR2EjCxlMWKbtT0KWL2JGuqFDZaXx5vjT6yIPdVkZU0/slc3ElimOoChXpqCt1dZGxuht1dyM6ohPFAns4jHSSPdIpiCwuXUKSyZCIXYc0jLEAh8NKYrOIBWZoiMNUsEDsJIlhXKBhLnvYNkZ0dWQNVwuFEh5LfqfjCaqOWk9RlLMoDXCOS/nZCV4sylZa6JfwmFeUzTsKFWUrQKc1pkQw8Lu29pja93TX1bhftlCfF1uovz1t/zHlsHLUWMbq5YqFevnAAYUpDO+gM9b/wrnO0eglHAwwuLhI0SQo1qosTVD2aSche5dM/ePDN4/Peeixq79985X3Gl+NhEuz+1RfMynXJ5r9+cPjvceR5KSdNz/51cEl1z9Zc+u6axcd3j23YRlXcFufu2qLR/fq/XDyDbcttKD3NXNKp9S/omDGKtDybhUzZqL9CZeWclLZFLWK38S38G/oNDUcbQvRnM2XgZ9X/YTDa7ZnZCBFsAmdRCPR9h5yyA7iUHzDaHJmh44L72FFatiRdclF2lQP6Ui4aRf5p4cUOKO8MRARo4aIy+l2epwUE4n69aExyCs7xuAoD6WgzjcGO42wCWszLvOSbPgpboLrbZA2OnewBDVvGC1mosGqRNNYzSIrzlK18duFrsqh+Wvemfru1Jkf3vFOcjLO0mbb447MAndG91jvDLc7+tBn9/sdJ15ecPLWRcnkho+Tt7SSRdOG7Hp4aJY1Vr4xeQacBOS3BTD8BeoVwPA2VLAHORSuZTQVMb0Rq+ttFCSqN5+zz4ItDvvRw6ow6gF4XOS1gDovQ/WmyxH+VSqsHz26pgPpU6+MTiP90e3TL8f8MrD7ZtBfAIVxfmJZUBaMVRPkGfLM0EJ5QegZcbfMrhC3iwSHQwQFQ6GAVi94tLaA3WMTlAVenIe3GiweK8gUBa03hiTZH0IBOUACIRLINchmg0EOkVCAZOols14vkRl6rNfONuCAQZY01lDAoAcJ20JSMJwJmATj03JClihIz1otz0lWbN2L70IhnJcI+bWO/Oi06Nzo+uiR6KkoE5Gj/mgiWgdHlkabo+yS60FAjXJ9m8PZvx3Ytb1KpdpVFU4FibZXGMouBYp6QFiqu3GQbmBvVwr1B2IKACsrsyO5Fcv709v6yyusXFHBVlR0uGAMB8AizMp4QqAYgBguxNZ0RQHzqtFkQHAYnAyUufNck5Nde19Ti7824e975AYr26e5BvqtDHFPfusIvmte91iZS+YiEWHsWk2X85seyfLRkYhV9hpNfPff8AfJXMAXg1Jf0EOB44exZw+ypuZu57VF7pb0nunYi7BPDIeCzsm7Skz9nQus9ziXuBa7uSmGKcZZhlnGxYanmE3iBtvrtrddWsaKotXWbu651vm2Ba557t2a573aeHSibyYzQ5zhWmDaK7Gd9QZj2INGEA8GGGhOQDHwtMGopyd7KP1kC49HxQ3Y4JwWxVFj5IY9uECFbMDneEnr0xJtf4ejrf/39a7t6VIrMLn6c/X9T6djd1nZj20g2ta2VqSA3b5XztpawIFHh61uRtRFbRGOZ3nCuKKiVRtBjBs2gl0fQbyTjuC0B2cr/ovrGxHgBJWCGUIKq2AU5RiV2NfZojh1WM14CvRTDtFDM3J+XjXnw05VIw+sm/vRjOl/bPg0uWX323j4K0seHenwx1l6SjK75cCDM1bu2ZX8aPW0xTfPnPIc7tHyCh65vzIcL1QQdBZCmr8B8XXCAxKtVo2DJ/7C/MJphUsLN9k+MX9i+8b2h42fpb3JclveYupBM71Yu4papV1m2URt0jJ+c60lUVhXOIuitZRWSwoVOPSQZh3/pOY5fqOZ1mHEDtLp3uY8rN/vsQeDsUGdOn2R44kxgzB+m/YwAb8nKxjCDNKxIrLIFmKxxswWK2Vjbdbtxjx7p8wsnKfT2bOInWNYiR3IkirYLGG3sIfZkywjKQyQLSjcEtsXI/FYVWxgbFRsamxObEns0RgXu1u2TrMutVJWZ6IQFyJJ9IlErAz4HQVdd6qhqAIickWHMusbFdbSOD0OsakDxMitrRUdHgd8Rk1mMVD0j0hu79hdrFIy3eFUscZ6+ABrNig6KjSE8kgozRiVKpX2rM4Kb1Qjcqg4oOgaSiTPdedNcjSq6z9htKmoy6CXvi6IdD1/XW552KkXaK0r2j1XMzXqmdRQukaTbD/6+CPtXW56qDB517QCf/OO5KCIRR+0T6BuG2kJmdyR5NRlc71G0G8e6Hcj6DcHBxL9WQ2vzaGCQh+BZmhGGyVRKqqJaqNCVDeQ6qEdKEzQztAu0OpnZy3N26nZqT2oOaj9RvON9hx9TqvV+z3mYMjj91iCweignJwWkpmYnOGJShzmFCXzHg5IODuIkLcZD+v1e8LBEMeyUaIbKJKBOLovgiPO5jych7Ao6X16oq/0SMgHEbzS6/U4cs2WnMwwycSZgHbCZr2nTDkQQZmRMLFwuXkvYAIhvitmwTcBeFRVKPqpaAP9lMUrWtUKVjUqAzwBrVak9Qr1b+Rv1EYduvq9/n/sYwqpB99Lq0zVGThf6DKa36Gw6D/UVZgxYvpAXShkenpKhq26LLe9PK0qK5Q1t2Tpb7y+4nFQ1Aclc69vH/ryrcnRE4syIhe1pJSTty6e55JAR1emTjFh+jpUiK9LWLUyHaYi+qxbfIt888LzIvdlLcrWhjpio+5/xMpsJVZWQ2EiO1GYKcwM76Fe0rQwu8O7o7uztTWhHlmJ7IVZC7Lp1dGV2U8xT7CbhNcib2exffR2hchMs2PvGx77yKBC4hNmODLHhg1veGzBUOFl4TKIRuQ/HfP6sOwTbXZ7kC6OUWJxkEcG2UAMldjrLFau53VyUbEx01FU/AK+EnR1Az6l6GpAW//qYbsk3scTXgmiW3k1gMbOVfTvGEBWlAMwEcMPyRdjqTLYkh5wQUpErVUiaoE/m5EEEH8kI5wB0DCiC/ERpA/I3bHfJ8lMNtS0GWIESX6xO+Ky1PgKAVZJope4BG6sV0Ksou5QNAxBllyMsRc1bFFGWi0Ghacpqi6WUaCDbXem50eqk22Prnpr8Mh37ut0bYm1tlOILOtbLvN3Jb9d+XLq1c49MITY8YNyXjO6880QgIMHDm1OvvvYq8nPmixm7KyLRyMR2hc29Ul+06V80uYpTZtxAd4oc32zylDaX5k68NdyPHoP6gpoPZhZ1FWR7jrZUMRhrSjEhfLeuLd4gzgDLURr8BpxfdcW/KKuRdxd3tz1AjKuBx/Js+WV40rxyvjg8sn42jwO6cvLJUkqz8uL50rgpCKneqg1GMz1e6Ijg53LSz2dGQwRWQb/Hhny+T2RYEgqwSXxYk/J63Ecz3utHOdlSuVmuIsyaacMo+TqRQBEIioXFVrRI1RVrnS0VCnE8yS9iBHXVb5UtHYuiUaI1cIyHONMdMVdcyXZJxO50rfei72Oiq4vkMGqhzvSVtN4MTh/g6rAm5XfRfATi3EL++fF6vWAfTQLAfuopfoO1APqvQzwdFTqZa6Cq2BlfUeYVowAK2CnUEU+AHUwq3r8/+rwliCr2kMHik7bBzUEfz6+d3F5e2V1xsjkmwX2mr7tg/8bAMgTtWGnpMN/TIpZhxJDz0EPUrXtm+/I9UcijNeafRNemJ28f3JR5B8BIWLWBxzXJkfglUMKo1aBAkPJmgE2EQWEK4JNRNCSRMkYPBPfGpqWoVkaWhreGKa0fg8JBp1+j7FfUPB7DMEQ2DTlCoURisiRaZG5kfUROtKC9yRkfyCTGA0Ec4SLvI8exi1kS8LqlFw+F3FVClpHND8jkbE+g+o6DJJjfUd2bGtrh2gLQLS9oq2+ArzUoMg/1gEgqf9VWqEOcZkV4aoBlRYLz/e7TDYflENZEuwhR0PjdUsnxfHxZPgfclDLF9ZPLNPz/Z5cn0Yp7ESQQAmw8OleBeELXsx7b/WS/NLakrrSp9AbQJPdJXgmmume6VmAFroXelZ7Nnl+8Pzt0U0rPVVKfEafyWeWw3KEloySSTIDqY/wJcx/5RcM5nXxRIMdUvR1UVwg7vcUByH6LkpUI4/bD5af6XaZ3W4XKilBKNfjNXs8XoRLPG7Kh52opJhgEo143EYDh1DnUpfsxM5K7WHhpEAEZ6kaJd3eIrVDpUrs5i3WolKvLzOep5wzKOfyTuWR/XlH8kieo3NpCx68PdB1hr0F58xXnKJ+ekyZjoTwOT2mJDdQkENJbnbVR9JeoqAVcBJuYV6MBrfgFAdRCjF7epBKyXb10xWwiRrBBy7X2D8THg5hg9nW4RPWksu1TB3B00hmTkXYIQnWmrKc9op0uf1Pe/vPtDi0Ppmvzx2QKRA4GSPZ+F3qDtBqwD7+wl2XpcHW8zHNoQu142wFVZEI9hXFhaupEdcWZkSUSOgBrrASdB7AjduMxkBL6s9tYpmyS8zUlclutyS7PR5J7OLhgkGXH3JWkHTxsMGQAeJavw4GB2glILttWPJ4KhE2w209riAySHqMPbYAB/AEEZuVk3issDsRjxKxeHtdCIdkQ6YbuXCdCyPXVHCP24OgBAUxNtZPVxTQX8EW09Mzw1UVaZqmpDCV08NGHQjR3H4AwUH7xagUiy2UK24/sFA+gBUtKJNAKNWciJmKkSRLndF0/7TAXP/cwANoqbTUvzSwA+0IiBq/JpCtyRCCpmwnI7ekrt5mKobdxoTJWKzBSDZjWV6K17ub5WY3h5SoBqFtePXIYTtlzuyqgqanErzRXoU4vakKtaR+7qhJ5iqpJfXtdmgD+8+26W1V6RE3FIsNx1iBpyx4s55YDIoZpC1Dme9QpiKLcZI8HMpvxPuvKg8EL0yZUutP+qYN88S6V9L9LuwmPWfHuhCggqGBDedXaiZdePzmK0DBI66jXgyXBEkEckcdaPdnYIIi8uLNicKJ8kTTKu0nxk8cR51H3Z94vjXyrJ312ohdZ3Pa3BlyhinDnOnUeucC2LEpG0sHBJIuo43KnlPcapyCkZRWWNkYV+IVZDWzmluhWyluJBt1r9Ov8wc9n+BPRJFoWI7hGa0N24hNZxOtHn6CY4L7FnqmboZjhmeltMu+y/OJ62dOuEqvL0aUtZjljYLDd8Mw1RwA2iQcyCWDifRPUJhyxv1VfuKXjD4jMQLaUTBoo4J6EtI/Ghj7t6ZPtV6c31NAziAF5FRgrxzxRM1RPkJHHU67kzCSaIyAnFwRbOGgZGOgZNDpI1h0E9hik9YaQU4NbGKxCvheGhQCWonBy5VR8R0cYyyjW1JtCcFYRuzGMh38SEvqu22GMoCVP8KOVmpiGQ+1rWIZinV8huOLJTAtHAbUx5KAPyNqkBEdZNW5PyViGItl4BM2XIOXr3wjuSz54BuP4LW4dO/ogbOHrL62dtiYcWvpUbrkDcn3k8kDyQt/HsAizsPL+r20Lnk8uWHjTQUJ7PgSjgk3KKM6RcBbNoD3OyFMH96D/OD9ujK/4v0jhbKBUbzSfs52zv9XUJPNuRHW+cHzg9jvYYIhUQnlIVeeEeW53YzJSABwyAEcONFgnWt9FMhgUxx4vis9IZgrIp2sI3W6Bh3R3R6J/oNlKOFWDbGqt6toFVw9TQ1BGh2cD1Tm9YXMTrvNYSNMyByIY58TNkFLOI79Nm9cGacDEWanR+iUykWgcWn+sDjgV4c+GcrQMakTIlmu2pHtA6+pdrlq6oE/hZNPLh39bcAwe968u8mE5KIbyoKRSKj0BmqaUjqybt4LQTtZ1b6LPLBq5b2KBBXU8ClIMIRy8S2JqiHO6c5VFooL2UN9nT3dPYOj3WODrBHRiJFpmdHkx691zXTNDC4KHXK9HToS51ZbP3T+ZT/vOO+k45yuhXy0Q5WxWlDEDIVEmSJqSIaqA+SGguZQKDgndE+IhFC2O+CaGzwdbAtScrAueCRIHQnioC3bHQxFI3muFvxlwhYCsBvOzTOBkvzvBwLBIAArzh9owTSQCZQtZ5PsE7YWiiSsunAEkkKHznS6OiVO53Xdo2JFGRKhwvjUVSntCvtTJm3VWquKW1SG2F7RMTHZOL2+TBlIK6tXgrSKHO1qVgRF+jNyzE5LxBHNjOSYs+M4wwmbmDU3jrPs0ThyuhQekXaHtDbTU6OZYJaCrizG6crcdpOlEqeDqDKN9/+j6o6pT7ZjqA1TKu1Ude4HXbf36dD5jHOnl15XexvukXBllSSHJPsOL7unaeADj5HJyXn/1H7N7ltXjKn0JYuHW31UhEwmq9ufK5w/Ze1DSh6dnDqlCUCkLcO5iTJ7/tCsmQGK0WNeYmNMvl2yxXKlmJxliAf9sXBOSXZJ7NqsxVmLs58uasneW2Qqu8QDeycsaIRU4ishJU93AtQzwu/x+X3Y1wLW1cM7AjllJ3E+bcmKSVxUEiTJLbglzQxpRtZaaYOwUzggMbEsSdCE6OJOVKjYwg/Eo/BUPAcvwTQeiqJylERbsJzQG53lCUEsKpc4HwBVOLTD1ynP0aUFl23tiLmnW+sV/ggOeTpNIAGS1jeqkxAKgVSmWDuG45SyWuyYkfFTAiWRSFY0NlmYJM0WZkkLsubHlkvPCs8LbwlvSSKqb1SnJxoB25rSY3Dq8Kj6tZg16iIIZWAuZCi8OP8azehYxdPBEalXhCzPV/MmzLR4EvFnfrryiuQfhxLTr8r3ObsYI5Gc8w9Mm184cd6ex4f+tLN7ZXyhy+kVgSdWPHP4+p65oXheYPDNEycueOZ3Z9icmUXQ0a9mD8ofMajb1XMfGfX4aVnXzd9V0Wof8G4deLcfPbsHBYF+2Z1FQQVDlsvGIn8wAS63P6jJhwLBn7PsBdCh3e+Rg0He75EA3X7udF7wenysMxP5iSxxaBpWlJydCHJpql7pkO3Yb6+zL7VTdr/sA4Zd55vjW+rT+PbibGQnz20PKElQPtdW31ghw08hC+n1EhXtFRfHxy4OkAHoVClXx+jJ/zq6ooLQkIHWhf0DaqKjxtuqu+S2d8lVmcKYxZVDbVG6X/KBOVMDxvM//BdCaqxdBq3AUxWJyIAotql40bMHhUASXZzhoiMhXKhZaSFyCJfacJltku1pW4tNY7XZLHaHQ/lnYh7kgGBi0XtEHSd4dAEHQMZES+reRImNZfycshiOsGyuDczAZqEZJtPmgJLDwrGMRkc7IOhbOJpmA6IOQabhgSvs353buyhksznRXpyHbPiuhNGvS8CxBh3WOYKh6wJLrv8voI85Hf3b2+0DasfXfBNThZfmucqMmq1MoblKhKIVEK9XR/id/xjc/8cQ/0Kgt8ovbe277X7OUATIBlChYtSN05V56Fh6GSFg+6jKZdU5IeBqGKsxCHRTTG/r0yX7ymRuIBkfXDaQNFmH+W1yHg5gXb7V74v1pPtFdNUFe863aUpereEjEavkMXaa0l5Phl/fx+nN0xlU/B4ACy0AfZixLSFg2eitQlFAnlbFSPON3iLI9DQSPNgg0Fvop5mn5DZe08DMYBbS85nl9HLmKfppeRfdzLwgP2+4OKMqKatjOBNjtQgyLxdhBc4KUBAyEcGZWk6NBoqVqVOphSxnNAkmHRBeAWFMDO4qnKsVzFq4CxF0U60QgW3qKoMGbho3l6O5oaiFHE84zVwzhzkt0mWazYgQuLF5lOlurcNi3auMbOGirdenB7bUhQeQY5S5vPo4lpNt9aoiG5GSfhbSoL3YQnU6VF0WI78pv9kx+6nQAeBeYPzqqDAGNegJGzJpvrzwFSa7e898NpDR+XyU8r55c6THrYNskQjd7zyyhV9+PGmlCSv2nzsG3wdZfmTqN+oE9SrqhCrIyISFkeUyjV8uK0hU1BTdU7yMXVtMVSoSH923eFcZvoPdmPtsxe7cg7lHA5/kHi3+JpcvZmvZPqY+tt7Fw2wTuOVobfEGvAvv4nSFLJ5buVqzJnddJw2qrKsca22onG5bYdmCN3TZh09VajlrXeVN5VQvjliMFpIe+7GVnS3HBYUcz7GxnMxYTiSWk1VRuLnw+UJKU9i1sH/h7YX3FT5a+J/CFwvfLfy8sLVQmFaIC8sBtB9KrOR5MsTMBbjx3M2chnDlXD9uNreYe5TbyL3BfcrxAucCPVFmI0fZxagvBvfOmhAv70UKVqL6eJzYE1mxIsnus4+yT7U/at9i32dnT9p/tF+ACGZP6OUiO/GxRJByfDnxnKocTU5NVrUU8UVI5AeEeLvy+Dhfxc/h9/EaP+wI4mWIhC34+YScqJxbSRKVDZWkcpMFW5SJ9ERmXWZVyoVdMdRZ7kw6F9CJUKRoKtAakk8n6Dq6gdbQjq6lQ8DZO81XZz4bY/1bG9saYy/XQ8Bsq1fYPCCXc0oaqzKWxeLQAAynTRnNbm87LacT2/SYOi9hSNPLMvlNTq7QV1QoqyKmp/1ih87usROkzKwro6SlXdwhrUxpJKARgYgQLYvqvQYv0vl5Lw6GulCdvUh2i16sDcKmVFPu7ZhJVgdJ09jmzjvx9MZ6BD/cGEPKQsRIx7xspDi94E3Ni5dma9NrWdJDCAWdbeoMdIaBSbcqLCC9Ny+qm9yCi22JzG7ZTne0d3nVkOmHbpi/1qbXmkWny1swpaZuhHZWeUbAkVvQtHLSwCmb779mcucsj9Fu8cUyO9X2K+x1d4/G7tkrk8sTATli71Pddzku6zmopHNeyKXEmwGp09Qo8IQQ+iVx/e8MDvN4OL/R+xp5LXQU/4C/JKyWwzkk2zzUN4G/1jeDn6Gd7l1petb0rLmF7DXv8u4NveY9HDEgbDEhSu8+gk6Bfx3BpzDRYDPgzoAJcob9ZwM2nLFHBTbQSyNIeqyPYWX0s8BRpewTLt5QJGG8HjfDFc4tkbNgXZLb5ybuArajnbLflRkrUpcsq+Pm+iLWES69P71UoF5ZIKoSR7CGWP/T09WgpiwaVud26xvLGtX41rGwTlld1BhRJU6UtZkXFxBHL034m9NrjKiEr/trU58/NeHWow9sri0t788zNpsvP1g0uHfnvp2G/WK/bRZ2Htz3wJYHR5TVDBhX5XAU9n903i/lsTyFTQxMndbUQjT3ApuYnQitEjeJe8TdVo3R2JlDXtlLbL5cnrM/7vO+FlKWtRO2Bf+0Az/O+KBw9W4uNk8H+RXA4qiEwzYrEDWzSPkPtDgZMB6gCdlO7NmqAPUgIQkPxKQZAIkzrizF6lus7LaXdy2Kq/MUIK+6+JE4mRZfHydxH7C5hKycsCiXyjhfTsh18hFZIzvySu+0X3I8RabTwZLPpWutaawC4FAJ4LK6wrM+RullZRwN16uulBnMFk3hSChCGGM0MyMrgzD6SNAUzUDZImwihkAGzpBiGR0UDzg3sLzqYYn4NHGaaVpwWnZzfH+cmaafY5xhmxOalnVr7gJbU+4qcaV1bc5G6+acvTn6udJiA1G0WD9c5RJxeFNHoEp9Y7tf3W+z+dSxmeEqnwCUCUCkmGE6VpGprqcM10DmNqWX43aovDP1PsPlliZv7jm1x/aJgyfunFg9sZzX5Xdf2GdKxB6JF+XaMocNgLxy6HpzwK8J9H/oqsr1d7248uzsom7YOcXqcWe3L7jf7Fv32NZnoqamtBVQ9eBjFuTHxYlhjLGvud481TzRMt4+y8xGtE+Rg+RNw3vkPeqoeNTyG/WnqJ1jSS/cu4qaQE0NzqTmBO+mFuh/EL+z8Nlcyoo5no8pZuDnKK6e9lsR7mFtwZk7XFETS7dg73adwKuYQQDtWhOOYJF1ElI8SFE2uL26oklfpOwTdkMxcsaDVcFRwbNBTdCflSaMBXKH56l7rzG9j+YXqVajA3M6ImPZEejwQHWkTlmqo/hgLKYYSyyWXrDS1q6wyrb605DKG9PU3+D1RNLU3230eZHTbPVir8HlxTYLbDqovzIME1OU3IgDaW9Mx0hFgUbQH1t00VktVH17ih9RO7piTGmwX8usI1Ouan/m/vd+CkUsoaJAOf5973VXVg+1rr1z/Z37fsCW7x9/7BafsXD42hCIojtCVHdgerk4lhiZiGPG5AsTiUGsj5FZTXYMMFCWQRZ1OiMS9TFZ0oV97GtBHPYx4LMun6vKRW2BdFYQvcuCc/V350ATiODauLLcUYr74ifjVBwAE7arEM7hKrJ7s4IJ2AeXZsU/O5mLcz9GKKtD6Nm6IxKWPj4CEfJjUTRm6ToWWSr7RDyroMivO6IjkJR0+bq5uqW69TpGGYppUItH/r/2vgQ+qurs+7nL3JnJJJnJZLInM0kmmSyTkIUJISzJTUjYAwERQUUQJKKo7O4KWte6wFtX1CpV64JtCROXuMfautT6ira4tkAVd0Fs0daFzPd/zr03hAFE+/b9vt/v+yXwP89ZnrOf85znLDdJ3JNoT8zKr6qukodU/aHgMekkSeMjmWXQmLEgQiyO8uxctnMZf1HBtg88X4X3PoPeY+1rjqVHt+/D/N7FYpTvffjlC1PT5Cku7jB4StVjJ9IoYxdSN7SuJLJfiLJEtV6jZaQNTZO2+/Jn7nurqc53xRXSnx4876yJoyOjsRHwZOSVyD9V2vaddUJmsVJUJOVUT5avnN9Wta73+OGVLcMKnLkp7rQEd3XdprPm85dI7X1jlXcwk6ppNE2W/qQfU+xxuZsqii93XlF5XdlD6qPOaNnDQ/YUfdmakDDUWac1aCPzp9gcmLZlzrLA8MD4wNWOS8tvdd5bee8Ylz6+qKUgqSzTQ8oIe5GvsSypKrEx4vXKRwvdLxtDvlH3NjTqoZJIo+4PwEjLjFQ3So3itXNmpLFHUfU0n/GwM6/+psTEvCpZ0atqIkqPkqsnYhzX3FRlbwvluceLCedtYqonoMz546Xx4zNH9MS2CAGcNEIaUZu53C5LywN2qYrXOEXTyypadESC4W6qapHcLYEWuWV8gYc9PcLTIxnXgT2KTfeFItVISo5I7kggIkf0glC4gvMLwLdCLy2LVLCq5a5YUrG2Qumo2FIhV5zVDkWLz4JYWdk5invds2uOuAsU5r45y77DSNklvMPG08W9o/aFxQOCXax8mbqUTw8URMKzd4XnGMqQ4f0oNaLexWg/Fsh5gQjEsfnqsf/1I2v5DebtIoX5YkUcGoiJLl4zDq2vzTDO+fhmWbx7HPD40W7w1IoBpxgrt+kKyT+XRnbXpGYueXqitrxydH3jr1+bumzR0Rfdd+GWY9tOuPjUFZedvaNrzsQRHVOHjeqozF/VWdBw5l1X3eHOOV257Yya0mEjT7ruKNvIsqIh8hD90qOvKqipOaZ6yIQsfXnbxdU1G0658sXGVT03LDnjju7m6m+/SAnUDT1q4pisFH86ZH45lv+g7TRyUS69o6f716RkNLlTyEu5gRSP15OrZRQFvLzYFyYVBVLYEswsCuQ+Lu2GKqbxrVZkWGSTJmk6SYm5mjclwcldmQtfQ7/WlbLERONtTnlmho7kxTcFI+rEJwb5QePTmNQMQfWqyupIV4a0FtvaDE+GnHGe7u/wywH/PP8Gf5dfrfI3+dfC0uvf4dfypvRiSEBgfDVHDAuIcT4n3LvLlBBNu0QfsySIe4jIt5d832FceZXUSaHmY4/T9WOP/eOQMX32Rr9vSIvtNOGh68f1jdyXs6BeLSqSCzMWyIWwFkMah9FuRdCYPITKernV5nmlLq/ktpFGnoDNg72a5oLwFW0HKWwTbQeh7IFFTw8ipmZLIEucurhlXEbLMOmujERcZgsx1YNooi6XtBZbZJfHJbvOC3g3eLu8SpW3ybvW2+vd4bV5mb8mEmH6cOWQSIpooHB4zrIDWkg0jtUwfGRwUHN072+Gyd+e2V955YX5XHnUfiyRWg/5FpbVRzEKPnrI1eDUpEqxSZxU11Ep8W+xLNaUt+TXla3ZSppWZxsrK69L23NkrzuZCigcSPYUeMKb3E+7HVJOrq8o4O6R39FTCkNFgYJgYUJRIDkYzC0K5PfIb+tpwZKiQDgYLMjPd7uTE7I6bYpqz4Gy2b2Fj7ViD+kzM+ukc6CmaQkBp+QsT0vz6QXNTT59dJ3bJ+X7XvHJPr1tXMSnj6nz6Q0jYKkbBqO6Bka4EkZJKYzCIhiQnz7dkxLx+CQf7w3dgcquSrmqcmmlXKk31nEdu5GCoEhEUKQjaMUQgyI1QZGWaBM3BG9lrvEcqrykJCQ0YRRwT0iqCvWGtoQU9uquHxERFIJZsDjziiKhrIophpYb5o4MG58teaw7G95nhsP7XWGx5RQn5HvDy6D7jtplHJaLcIWXRsk41c7ntcHVlC8y8iU2ufl1n3ClpifBxVoBfynk5qdEbh6YBb6m/ksjyMHlrO9A5eZr5rQBW8QBQ4mVnoMG17PjL5l83Nk+T0ljX0ldhscbzp45saSur2RkVkpJo3LvOVPGLZzUcGff9afV2YuK7MVZC6QNK0YVnNfnOmU4PLT89NNkz6kRR7H1ReAjGIdJVCDN0DOfz5ZKEiXvMY7kUJJE9oyQ3elw5emqtfNQ9VA44lYlNTto7DwEGWeQJkG6G0ZHmOpF2MP1BrcEZQrqwXlBttr04B1BOWhc/+lbXJLL1DwFRdJMH4bC6criVwVrHiypG76Mj5KMzjP2KKzf8DaFd3+7yOigUcYXgK0Str5yccCf75c1X2paqqxpoZzc7NysXIVvCUv49NMvpTu9fsq055XwLWGJ5FeS/VJqQoafcm0ZJQO+8QuX88NT7FdqSqUGaYI0wXNOom2ptjpxtWdp1hptbeJaz5qsF+TnAgmr7djRuFdnrrWvSVrjXpvp4MuNZbP5QtC8zhDbT29GoSa2/MbHgMO4P0NS37mvnb7w3Df+tPPjV4ZOyEh2jR9S6S9J8oWKs5VnL/zop89fdqdU+uyLUnhc+3t/WDxn3MSswtFzpYKNq/PSuAdL+iaqYKRCqpJW6lneKgertJTCSq0nRUutgurLmiwLTZepzZorkZ4TrLwkw57ixaqjFYcCLs2e7CmTyvScbG+N0b815s6yRui0mIUdNVtq5OoavaajZmmNWuM1xW+SF1pQdaKe2JHYC/XUlphVPWWZoW+IyZJobNsSzW1borlt45kwynjGxL0qWGsM1hqTtWYA61fmJeMuY3XiCXnAfjQ/VJHpzyoOh/JCJcUVmWUlUsgPozy7skQqzS3u34eKMxz068givWlcJMjG6szV/tWh1RXqSt/qrKV55weXlqwOX+q7Onij76bM9f71hbcW3eO7v3Bj0cO+J4q8rWmS2JPyPVaxdYfVP0ML0ozvcCzlJlSSbr0Xx3yWNmVUj933qVgdpCtqhk6YefL9s4779antY2rrZ84fFow0hPSFzXP77h4fySwulgsy5inv8Jp53vj8qovfv+TaT88rzL773IYZn/199sif8VoyCQrzGRgBZVIJNM6Qq8HlS/QYUwoC2cWvGHKgkJlrG+iaaKBOOPP8hrfbI6he4kuPeMLSja51YdnFX4S788hPZYE8j99Tpklp6RkZVHhnwC+W5IznAnliSQ4WBcp4NOUFE2rdun8UJF5ufZP7ZF5kqEzz5yW451DCY9JcUqW5j6yzb7Hv4M/npcd0F5W5MwLQUsqDhcZ4KxSrQUTc1XTn5Bt3Nj5veqS3UFpqfTb3dvkUQ5c11mQMoL175+za5dlpaC2QBuEwDw67GBxiIxOWzPVbPOAwxa11EGQ+8EnLMA4PjHccEeMhx4tzrm4ePqZ5SN0Ue0JSXnZZWr5kT6wa3mcfHXYkhKqVe//8X3PbmsZMbFW19MKmE1e9MbzBk5OFLY6t4VzZ1pGem20rFi/7d8p/Rh/Vyhv1413VaZ4m1ZNU5vPklamaL933XPFzobc8n3i+9tjLPMXlwz3Dyi933RC8oeh+113BHteDQZct0ZbkKEtLHOealKjpLj1R9tYG6FY5IEm87ki8U7hD3FG16al0q7cKHpGqf4QzA1m35gSys1mwgmVdtpTdIy3W/Vm3pv/D67WFwnavP+R1mfNY96ZFpOP4NdGOB50+7Wi26AlOn3y08WBIHDS43BHDVZjM7hGQ3wFsY7PdEakqMjUyN7IksjqyKaJFvI58ToRN+WjjvhJ7mYhhK8wuK7XOKUqlUuukrzRrKIt8lvjLwnyVCcJy4SFHPpZR/vxUz0AUh+4raHKMSgvCSC+GE3UzV1ZeIr5azkdYVtSCfLSQqIoTaRScgPhck24kIShSERQJMY32pxWevTMsvm7MkvTSTDRybgoMTw4Mfg+kJ6WbH0Fiu8QZ+f1+d5O/J/Zud6LPoOBgys+HBKPge5RsULm84LX5wWjzg8vms1j4ie+csHVDKz4+dlfpCSlNVboTG0Hd+PJyNjMZXJxzcSWKhqm+pdugqCpUj+JKKCFw/Ul3wlJcCb2kuCf2RTfEKejOR1gS50LW9r9lQU2WGZ9kzuEt2oArXrVfmGG2BJX+213jm/dh1kcX8vXuwtE/aS4b4cuXQnOmXDtzzFK/qyC9wFNY+fOx1aNHLVpf2XLDNZPH5aR40zOVZ/qeuXZRfVFOVtnzV82ccmNHuatW6rjkkpHl1WPHnTp8+oLTNhW73UGWcaHYP+Qb1X2URTfryWtdaxNlYbgSKatHehj9o/p8StpPZEnLd1W7dJfiWu5cmOziz2mT9Tyb6+HE7BxJVcltC9hkW3lqeto5Pl+qjtZP5SHlySuMVKX2pm5JVVKzslm6GAddUBb3Cn0QCiB/oLYLTmrat3MO3+GKs65RkjhoNp7HpwX7T/iFYOEDE/5sqGfbNnfI0zzCP+3h2eelJJx74eYWdV/fxgX7np5WlbcgvXfB6MIbpa+Ds393Dtc1FTrZbuVeypUu0bO9/MvJveSV1Gr/7IzZmR3+RxJ3+Pf47X6W40l1fi5+KDcQaUqfmj5TU+zJjoBdzZAycjIDGaR5NFmTbAEt3ZMWSO+JXamf6qbc/Jzc3LFuj8/t9khEJ7iTYUvOTZZI1Tz5GCMeni98TCx7cjLcOR53smTLhWi02zUtl1w5//ScU+3W3R1uxT0n+ROJv/QVQihf2iDJLEhekRSpg0vWPWpqRJQwJ1gS8etJ7ohH7ER3+FWPX+pCPeQ8rCZKd8EzaPOwodvt5ZvwfVl75+zN3EX9rwfNzygRBOvlxrXv5Tbj2vd34UN90WUR3r2GxVMUPc3PhfVzYWUP33eyASm2I+prECSNyb+iLneT9aprtk0KGc+ajUud1FQx7I1nzpL0ad/vG/IzKqUvqlIyK245r66yQaqtGD6874VceetPgtnO4uKUdH9xZ98vpKqLhwVK5OJibdgl+wqNP42kvffGOyPvvWuue9SXjiyH+B2Cd75XN5bpa9efr3975b4TPeRYDl4nYPwxJf5TQgV9bXSMh7698huXZ/8fWTJ/PDatQRJ/g0O2sJE2qcuoSyUqBaYip2u1jTRdbqCrZaYbKQv+y9W1VAr+FrhrQY9FuAz/icDlQC1QAAwF2oDJJh0PNHEewM1Io4zTEZToAvsyOt72PAo1k8Kg04Ac2MvU92iI1kBHAWElT/Cmwz4EYSH7NVQGvjy4O8AXYQp3SF1BpyJ8IuzVnCbq4QVNBrzwL0D+r3OZQceo99B1KsV2wR5C2scjbli5hqaATgWdCv8W+LfDPRZxyuWNsedhb4U9jLaZzP6i7iuoBJiCOJNQzmkivRXUhLBU5JsCWgWkIDxNKaFfSs/SHaDHqWWUKOoNHlHvmfvrBDpOlOkQ4DJy+QaCyyQ3xL4A/gq8Z5ZtwkHgcg0E0QJlKI0EXQMEOX35ZdR5OkkIH2H7hkYyHBTbh3rtBNLVk8gN98co5zTbg1THbiBZgH/H5W0o016agrCwdiMNgX9ErsEY66Qh8t00XCsmJ+p3LHhbgRVi7PFYOIlmoD9ioEnq+5SNsCIghD7cZLaTh9sGbu5f1C/2OcrxGXimAUfx2BLj6yTyIH9uc+77FGlmH8Zm7GOEzQHmol4jgWEIPwNjeLaIg/hId6Q5Dsv6KcBjbwBKuQwWuJ8sGGOE0gCfiRLgWeAS4L+ApcAs5kG65eDncbIYabbBXcjjg8cG0uJ+mGiOnRSM7zIxxow5cwvacSKQCWAfR+NNJIE3jecLj1kxXzAXeDzy2OIxY1Ee32LcP0Cvcj25zwfQHNs2OorLIOqOsTWAhnicMVV6qVzQcjFn83i8WVTMSaP8IZ4TFu0vD+YnzxGmapiKea7yWOynmKfcFv00A1uEBmrX7kTZz6Jj1BKaqCymZvVYmqB0Qf70cX6xXepW+o38AoXtvWLMoI60Po5yP99s3yqdauulh9GWxerLtB40qG6VC9Wtks32QOxj2wPyhQYs+0AaD6nXCGPKGBj2Y/3/Hciv2x6gTtg/sW3F3NlKP+NVwv6pVA3kWxT+UWANUO4ISzc7Fks99qMxn4j2AktUHXNdp3q1FzIhjXS0UzH8j9ZuwJhbTCVIe5+s03OwPwfZV68Q5ifykl+HvAA4fdD2AePogDF3iLEkqDVeD0HD5lgSlMcz5NrbJn3HpLsNSuW8NrB85vWBZTQwvn+8WuOyhCpAJ1njM36cmuNzijk+Dx6XcdRcW1h2e3meIi+7OWePZ/nIMo5lJMs5lnEWfzztj7+RbkId3hRy+GXENeZ1QONDV6IKhJ9jyhHI4dglQh6eFFtlHxtbpVbGVmkNsSu0T0EXxc6Uz4ud3r+mqlRjyrICay0V6+gT5LTWUdtiWmHKNF53I7aRWJuMdVSsn9polGORWN+YP53noZiDV5FXPg/tWkIJaj11Kk+RokzBugl/tRIymcOWUZGym3LVKyHrrot9pvwXjRbr5nhaqMyjBo6rRKF3X0QFtrewlp0X2yPS4/UKlP24/FonNbMssJ0u1t5TTXlcwX3v0CjRoVKJ4HkZsmk7ebkuog0mUqFoB457ERGnZf+YAmqDaId8hojzFSVye3AbHdAWxto8UaS5XcizZJH2duT5Is1kaAGaaH8HMpPzOp3mOWUqtT0f+8hcsydgPZ2g3Ak9KJFIjP+XKVGppxyslWNNjFMvQJuvAO9tpl7BFHJfrPe7IaswRmxX0nShT3DYT6D3PEPjGOpGKtKaIB9HQvavolwtD200g4JiXE828ob/BKGf8DrFegLPl9GUqM1DfMwLUQZebzjtMtG2EzBGmx0JWFvmk5t+0E/s1waVsLTG/lv+iGaDjsSY3Q0NYBPsi8V6X08Vyq+wPn4OGf8IxkMWjZYX0HD5pzRcdUI3GwX7+TRcuR/4GdrgvNh2NQMyvBX+twKXI96f0J5uhH0BnvswDi5BXD/sf6UxysM03HYx3MUYq8+Bbgf+hXguulr5DV2teehSzk+kzzgvlgVkcnocbyC4rBYOWeZ7IV8OVd7W/eXsL+MhyifKgXRFPOapj21HO/0FKDZo3zT5GnoA2CC/jbi9dKF0Y4z/PuHYOIwf6FYvlK4AOgBVvZBuB60E/QTYCtzGf6EE2K3WoS2uoV7Qbg1bBYb8FM1iivBfAk8C26ywgeB8DuU/EOoHsccGum211MCQK2KPMQ7iv50i6tmQsdWxxxjKmZAPgJaMeeuAvH8X/jMRL85tK6Wb1CXkV6aTcqQyfR/wUz2gHfUfUscfCtbReH3+T6X3QyFfE3sZfVwl2n8DDRFj6CPSZHvsFekJOkHaEftGuY00huGmbNGet2NdMvsJ/lcI/7j+w1gZxm0e7w/7KIblju/XI7mR7ikDYY0DC/Za0hnqNvAD8W7HGtIZGo+xioPd/fkeDjMognYaq85AWd492A0ZUsWQl8J9M8I/gI4O9LtnYP2YYYxPBto2yEBbP8aQ38V+FFCmI2y64G9kDGjXWdyuSi/HFfFF/1jjPL5/ENej/g57n51UCHt2PB04Z+PHdLyfJUsOxRM3N6oPl+b/T8Dc+QPwPPDc/2o+GOcSYawCHkDoqGdAVz0B8+JlaiLat5ro26eJvuuFXfwVXtANWCOyQR8CquB3I+gY0EzgVYT9E+sIVPa+TjWbbjL1SoT1TQXftUCPkU5fOuyVSP9T4C7gSvi/D3QC+QDzTTSxHOF/MeL2nQV6BdzfgJ4JvAS/6eC5APZfAcfDjvX/u38BtwNVRnrfgu/bR1gfOcQ+9D9LD7P/+KHU2mdYNH4P8aPoGUem8XsNq/+PRK29xCGoaAdz3/TRgL3P9+5xLIrx4xwI6NJB6JSFrEezLsv6M+uPFhX7ttvEmYDXPAezKJ8RVbHuzPorqNjf2T6mDrTz8P5yWevIANkqV9BCIN0E5B6NAc9rGGt7iD9tvC/2JXTLdQxeYnkdAwViL8Huhsx9Wnoi9iXoy3DnYS1zWmuaJVsPkrEHr2n/q+4fu0b+G2vqVBOnxMHy7zQRH15lopARvxb/WBxp7f631/LDrNED1+n/qdta5y04G6mWYddRbv1gvTReDziS+0h67o91x+sdA9ybGd8TLtzxeonljsdB4QePPUOfycZ8sxA3734sME9b1CWxt6z5apUhbh4n9M83062tplagzaLSfVQKOVIGXA28AJkRBMV6FjsXdLbjO6p1/Jp/63QM61yM97EsE2dzGGia9CB2t/9kNajvUrjtkMXMO8vE7CON5/hxy/q50A/RZqLs69AXe6kKGAl4gc3A6f19jb0n8n5XfoKI97nKztiXSOvLw+mCh6PY5y3n/R7cbrjdfCeiJRDxuQbst5g0AXJ86YAzvqB2heBpEWfLJTQD6+bxagONU98TZ3JHibOqZhorr9x//mTepWTw2ZD9MjrR9nxsrnV+7FhB07RyrAPQTsTZt3EGPp3PJPhsCnoMmWfIFp3I51O2euijR4m7gxTr/Fi9F3HvpXHKA2iXDZQj7qmcWNd9VCfuan5PY/ncXb4Z++tR4tx+kyuPcpwzKIfPjZ0zxXlyCGUIO5+nPMcyyrPn0Vher6x1VayJpn3A2R+fZeYMONMUdY7XCbh8KFsOn8cMzNeKZ3+WwrZycQ5lnbMfSrcZtV9XiX2GNf4Kc63/5DDnnWMHnM8fsNbHn9NDH1kq94l6GGs11mzbKehbBX1hndHH6VlWXhiTnx1OF7J0E6BQXY/xst4YY4g/BBgvxpJxF1dtU0EXUzNQpWIdUu7jssUWqacgHuNxcQeZqhYBxv3OWPPeLoPPIOV2cea1DejjM2H1HXGHV2disroidqmIUy3OkidqqSgfnzs+TxOQf2AAJgnUYRzXUQBlLmeIc7XFsUu5TPIrsVvka9kuxpJxF7iHliLtCvNOKk2UtZVSxfjMoTTuf2Ae3BPN+72Jyrc0RbQVnx3eRxNEHaFTIY9VKO8uNVnUcYoVR3sP7f4NTbUvQ7mrkO8kzIv7KaS9hHn5Ner8OyCLfMpb2JPfAlkJSMtj78pO2J2QkQXAi+RXVoGeBOj0nPIves66VzPxmYCCOIB5l8uYz5A3SgXmPWHItPsMO/wa6E4BK42NtH4AwBf7TEmmSnkhJUiLUbYnkcdElAP5KB66MR6IM9+EuHPjOzz1GLoxDmPigbhMq+IBf6bF8TD9s+MBf6Yt8YB/yyHKcTi+w5XjcP6heMA/9B8ox+HSDcYD/sHvKd+keMB/0o8ox+HauSge8C/6nnJMiQf8p8SXA/LpSeC32KN+Doq9RGwJKPbXsRrQXiM89t9Ap+l+zeRrBsYYEOfe2NPGqoFWA32Xm/7X7/cT/ki7720jzMqHdYzYDGCUkRfH7XvcLNuT+/M8oKxPx7mxd+/bYeTH8UVejxl6TOwyk2eume+jRrn7hoCeZPDv227UUcR7dD/43ID99gVAH+G9FHCUPBNz04s5inkqTzJkiZwK3GbYlc+FTPFLUVDMZzGP++UCPanW00nqSzSa1wD7AugOvBb0UQdkLql3kX/AGrFKmYc1+z2snXMh756F/OpCuEIJQo/7imr5PhL7zg61C/yf0jDIwlQbYcxtxtq2EjLqTezj/gj5mS/uYfwKysd58L0My03z3rBDOQHuE8SaJu6FeB1jeZsgQa78g1K0XMjfl6nY4aYy21RxZuFCGk7Hi+DHumHthRP+Bp1sH9aFBnIq9diIjiYX3231r3+XUaX6Bo20qNNPHfbj4X8TFaibqMC5kyZoZ9IEtH+albela8kPErSxvnuAJ8xxg73ud2FgMpdZ7LlZRxsJWf8e9G/oTrbnIJ9/jvW0AWtzPeWgjEHwtWm/QHu5qMg+V9zpj3V8inpAB7W9TqPVNvF+xrq7ncj3T9oe1H87FVl7d7sLffUTIouyvtF/HvAB6v80jeM7Nb7Xss4D+s8FrDT4/nEFTUAffB2v11h6VP9ZjHlGYOVh1UfQB4R+km/mYdED9Y3T6US+G+N7PKEfHkyNMr0DfbYJ9Tb1We1VatF00Hm0WNw9/pYWK5tosv181GsUJbJ+ps0W+R3Fa7TtMbTTF1RsygeWCacb92KxsQA01tgK9N8bAPRGWrDfnzrg97VxLhdrNHnPB04x7BwWO9v0bzTTP8Xg4bj7/gr7KjMv86yGZYKQCxyvYKCeyneirN8fRPfr9Tlc/yPSH3iGxnOY31Qd7o7/cNTUY9+16AA9+gA68H0K+D406Qcm/Uzc7ULXi6fx71cO957lcNSaZ/3zLe7dy+HewRyGDj/UO5lD0h94dmf2d6pFD/H+wDiT20+9A/dP8VTo1Rspvf99Er8ZayC7eJvzPbBZb7hOhkwEbF+bMP1N/f4gaBjhDPsnB0K8Mfge2CeDD3C8fBDSGGJfIBB7zQD2kgKx7Qzo68SwbT4IaQzVePd4EOwS2RiOC5AXYP/QgHjT8D3QdoP/uH6kif3H98CegXQBx80m0vuRxrDa3WpHq11Qt6/FuwyrzGb+Vrr/0378n/bLf6re31f2gcBY/hvwlEl5L5F2qHJjbSTtz8j7LuAZ2PnN5UZx/kAinjF29gC7TPoZ8Kn1dlC9nH8jYz+/iHPQOBhPCwWsPjHe33jtWEHsZ6GNv+J4sUsMQAYcqn24Xy4CP7Rb7TZgEU0yda+/2TKh3xhvbKdZss/5kDjf8Jpvayc69oi3ttXqM9Rp6nsvmbrfI2I/ze9g+d2lIe/47WmBkAnvoTxHY20GkNeFJl41cYmp+yUCCpBsvge+fyCUIdDPANhHID+0aOwmU98Omm6gL2r495ftpf43kiGy2TYA/L50OvZ51Rjft0NvBJStAPQFcY9TRVnqR3Bvh5wf+OamWuypJ1qw8TtTRbydNebKSGrndzXibQ2/yWGddCrSeMigppw13vrOwV7kIcQ5ltzi/c37ZBP5cBovkcp6kXIq/J4jmxJGvRlLgYCJR4HnoUO/j/a4FvZXgUrorTeAXgb8GYC+rRQh/ENQ5kkDLgbPb8kmdHRGN/yOBb3Z1M+9JmwmTjD1+M2m3r7S1OlTxf7bwK2mLs96/gWCLyD0+uvNfHTQ40DfAcaSTaTnNPmZz+KZtJ/HfgF065sxbu4FPRtt2Bx7TPoYZZ/Bf5EmlgTUoa95P4Sx1/ci3M8DrBvdznc+B70LsO7JTWpbABn3HvYYbdBnn8LYuDe23TYG8u1dGm6bRun8nnbgyyV+T6zyW+LFlGuefW+2zsC1LTTEeYl4l0sOwWtQ+QHj/bx0tOEn7LfAeMBIk+eZpeNqMjVpN0CPvEHoVix7+G3gGsy5oNCx88Q5TpraQsPM91MtqOcloCPEGB9PGYhzuTl/L+f3bDyuTD3wNwz5cprB+fI9hTKaf0GQiMs82E/ELjTbj8/lbh9w9/QwI/69xv/tu634u6nD3RUd6V3Gkd5pHOT+kfcp8e82jvSO40jug+5fjnBXpq6IfSDk7kZya/wefwV0rxWxbco1se+UuthHGEcuyOi/i7FEVAw+P7+Z1p6F/G0X56EZiJMB2VWn7hH2sJleC/Z37Qd942C8QRTfNij3xy4VZ5fQE830jxdnt+Y3E9YZLe/ThJy9Bjr/B+IMv0mccXebciUV8mOSIX+kdYzYPXKLeSa5mLzSrYZMEvbXMRsWmzJqkSGjhPy5JbYR/HnyjYa8Uo4zzgylxWhHS1a9LWimfI4phzAnBK4GGoFjeY70mRD7sifQDk9b5xuijHx24RVnEuIeA3XJ5znI38AcSVfC+t8FvAn8bgD91KJH0gnNOIy3GfHh/fc3j4n3vbx3q+Z3vf17Lutd9Hqxv5gyYC8idHzzrH2K6KcG8UZW3OvH7wn4Lgdr53BrP492eg748wA610DMZ63R9llY17aKexLWK4KsO/BezHxTG+JvPVgPGrDfs/ZxYp+BPm60VVJY2YYx2Mf729hIYBrgMPfJdzPEe4wSqmBdhin8WCfIA/0C+AffQZj4CMBo7PvcsO97UOzh0C7WXghyIYywFdqN8H8fe6Ue6EWbxdvsTXJM1OFqBtpkPcPUYSz4zHdQkN9UA/CevtWkkLnibOloxIsof6MWZRFNBtWVZyhP6UO//EV8szJZ+ZBGKnuhuxA1od1Plp+Jfch3VkoP5YIORRzxbRXcfJdlfFvFb+C7KFdbAL38bIzRc2iktg60AeNEI5/aSlPUuylLeZaS0bbJsE9RPySfPIMylBboQveQj8Ns5yAOv7/+O/SV7xAPVL0SYdfB/Sr2wz/BuBmNNgnCXoOxUAN3MeXZ7ha66XikIffHRX7qz8U764RDAmUS5RkAlEeUSZ4R2wl8apXlIHA5BoLLEZf2AeCyWPWPg2iLgUC7ACry/wj4BNhnlAnj92cHttcB6XBZLTxhtp0FtKEF0ZbxQNsOxEH1M8HtPhCi3hbQD/1AG3CfiLzNMcD9rtwDmcFlZZ4PjTJyvbg+Io7Z/8rHVC/igof7Eu5EUS7kYxuPcYq+txHi/B56VYOZpjmeRDz2B6/oQ1AxtjTUjcce9/t1Rr4czu2pNWH/20Q+pJmHsetTF6EcW40yqT5yWOVXTyDitDBvSZmBPLZifDE4zo1m+c16WWUX+XHZkaZVdvUN+J8X69NAtbdgfwLtmYj084DxNN6uir7it/rJ8n1YA+6jpUArMBZoMjESaABaTHsAWAa0AeMA3cQoYAQwhu3qRVTl+B32Fhsg73bRzxnarZi/W+lS23t0qVxLdwE3AlOAfOBkoEZmXaoWZTHQAuQCxcAQIANwJS2kscm1LINij7nnC3oSAI009iBw25F0sHhdw9JB4vmkJ2J/hK6yCPQD0Ivj318cyR3/jiP+PcaRynUInfDANzXt0Jd/Gfuj2hjbqt4Ze9n+KNXaPqdaexA0g+pcq769CnIea0XsO8jlxcAKpvHl/KFvzn9ovfmNmvpXrGmvYx79DHvDSgqK8+q7qUKsf0TBhE5qVZeJe2Ob4xHMs+8oEXv6iDaPShxpsd22P4k4Q3j/6jiGErW7KNHxc+hrT4s1tMw8Xw+b53QtQq+D/md/HWGnwP9c6lC+xt6/jorUjtib5jdAGVjzQuoVQo8LqKXYi2zFPm557F2h7xnf1RbwOpOg0BUJrti9rleInN9QLcZZK3+P0I8dJEv3US0wVrjvo2x5Go0ALRvgN96kZSa1/M8QdC8tBNJNpEh7Y6/JQ+ga2MdI61Gvp6kd4LXUqVWJs9CQNpvma+fSCNvTcD9E19kyYYe//VKETaX5tqtoBOb0CPtf4f8BddhewHq6L/Yn2yt0sVaK/niGLtBeRNxf0NlaJmmgl9lehfs6ukZ7GevbH+ge7Vdww0/wL6SzbWfBfRl0qyeRbhviLY29jbgn2UfS1ShnotRHE6UZsVfpn7HX0Pe/lN6OvaauoiJtLXTvkzHOb6X56p3Qs5dAVsOuQCuBvQ79V6feT2ewP/bjY9E3pC6k09XLQC+DjG2kmSLeGbQS7jp5Qex20AnKbJJAJ8unUwHi1KnJtEx9EXzgUa+iOsytOnUNfxtCJyoFNFm4f4FxMJI6NKJjMSYIfbxJ3kse+7nUxtDSKcGZSHWOL4FtVOdMwfzJRZ7/Qr8C6gJSGLb5aLPvgXoa5AhjBObOAPsR94lxONK7+yO9s49/Nx/vVhqgJzAs+cT7GQCywm/upXm/8KGxlxZ3Mg8B04FxcXbJuKtjKs6vioBjTPwsDlXGnVAswnfCll4v9vQDvjfi74WM+52+PuubIKx9WUcEtw/4lRIqlKvJJ53Lfycvtor3B9p0rEV76UzzGOS0Hw4JarOE+iknDQDWGuUTAzY+MUXd7G9jmpYbSIB/4nADyWhHN1Z097bDI+WnBlJzDfggr9M3EGX+6kBkI6+c30J9eJgocD1RAda7wq8MFPURhbBHKfnAQNmZB6L8L4dH5QcGqqDH10CHr8UMjSD9+kYDw8/cj4aVBkaijKOfglrea6AZ7dIKbaxtnYFxZw9iEIMYxCAGMYhBDGIQgxjEIAYxiEEMYhCDGMQgBjGIQQxiEIMYxCAGMYhBDGIQgxjEIAYxiEEMYhCDGMQgBjGIQQxiEIMYxCAGMYhBDGIQgxjEIAbxoyEReWzyazSKrieNZPJQFf9GK8et8u/IRnJzIs1Q0/g3sVFATcM/n5oK3oCa2q3lBfJ71MTuxORaptHUjNoe1dVdmh9wN3tUL60BZHLDbALmAoowJdJVb/TsoXoPyHKDnGGQUw0yY6j+BBgn0tBYr+rtzsisZe/uhMTaNUwdTnanRI8dqjc71RQUl/lS6CiDRjuGiuB2TiWFxhm+3a1tRqwWw7vRZB4xNNBcBHc+oANLgU3AHkBD6VOoClgHxABVuJhvNbAW2ADsYF6RmmOouzlH9SDEI+ruQUvxXyzwoO7zVCfq3iVMt+pAqzhoKnCHaidVTYjSaYFHkYjS3SZKqnSHhwgaLS2rFQHR7NzaJ1VFXk8lFICHFE3PESEUbWkxLcOGG5bu8sra7c38Z5b5117KKqkSlRqxukuH1O55Gm5J6SO3JLGv8l23x4fclH3d7tRavdmjfC1+j4xMXcpm6gVkWqJ8SasBGeybopU1nJGyqTshudYD/s8pH1gDKLQBpiTcOsD8n3enpnPyH0bdKSLe9mh1xLB0ezJrO5p9yl9QnheV1yhIAeVdUD/o86AYeMpzyguUJMp5d7fbU7sG+d0F9ruUc6gMwb9UzqVa0PuUCylHsL0VTTbyeStaWl7bnKDcq5wvWFYoyygCepqyOFobyH9cuZvHo/JZt9PF5fss6kmrfVL5WFlMPnDtBFdGwP2kcgZVAVyTnm5nUu265kSlB9XsQbMEUEaJ7hCmrrwWRULI735lDaUj7BXlIkoD3ahcHE0L9D6u/FOwfcWpIL87MWKYdCcl1/Y2O5U7eYQof0eL/13ktrc7NLyWmkPK1VQNyGjU92B7jyeqshu23eim3eia3eia3SjFbgxaUnYhZBd4qpRttFR5h9YBd8CuIslzomjBR4WlqLT2UeUC5Xy0hOdxtJ0E3wu7nclcsvOj3lTBdj5P8KYnlTdoKiCj8G/yjFzyuHKtqMq67swcjvDnqDMRTXee0ReIeC73wZPKGuVi0RIXiRboegpOjH/lJyJyrDsxpXY1en8GnEtgrgW2AJ8DKthmoA4zaC6ggL2jO9ld635cOVZEnhBNHhp4UhmPqo8XrTU+mlYoyjzOtKjuaI6/9im2UKXEfxoqWdWiVYFpjyuTMH6mKlOiJwVQ9mlRpMsRp3QPH1Fb/bgyRbTFlGggaHhHU7OEZWzUaYyrMd0JKVySVsEYjjqShXfYnJJKebcvozaAcTpC1HYoy1mlHt1Xj66pxzwZKjqjttvjxeg/SakVNaqlecAGoAtQ0ce1YK9FH9fSDuHjVoahusMoBijo22G0B4CoUWqoCVgLPA3sAGzCdx4gw78aOcyDuQ6QkWIV3B6YOjAPWANsAHqBPYCdXlEqkU8luKthrgG6gO2Air6qQDkqEOZV8mmfgyhAq+X1+ghpNa2WVsurldXqattqz+oUh15XXFGrn8rGEDZKYdTPcy51rnEq1U7d2eFUPM58p9wT643aRwwF0b3aiKFvt3/S/k274q1fp62zy680J0optB34HFDoFckDlwcuj3658krj9sbPG5VX2re3f96uvLJt+7bPtymvVG6v/LxS0dtzRtTWz5WWSKultZIakKqkJmmqpM5VliirlbWKGlCqlCaMBXWea6lrjUupdumuDpficeW75HWuDa4uV69ri8vWpfVqW7Qd2h7N1qHN05Zqa7R12gZNC9ir7E12XVP3NI+R30GjboDZBci0BuY6YfOIkF6YW4R7nXDPg7lUuHWYHcIWhFnNNiAo/ia4hHTeRoy3BR+7gzCr2Q0EId3fgt9SmOsAWX5Lzy2sLtKLZE9RfpFMRdKeImlL0Y4iuauot0jubR4hvylK+SZK+aYo5ZuI+abI+02kCxsQRGnfEHxvgO8NwfcG+Nh2KL95MJcKmw6zQ9iCMKvZJr8RDda7mzPkW5HiXJh3ANsBhapgNgFLhCvAHPKtMHX5lu6SCiz48i3REGQkSKFB/AbJFaQ7K7t2brMbCsodwHZAIXYFgCZ2xXrl9dFW5l0fHW2QEUO3NzdgFeWirKdNgExTYd4hbFUwm4Rtk+Bx97u7YO4QtqUwN/THmytszBcArPiqfAv+rYfNLZ8L33N1l0zp6UTkTXF4e+THoqd4Az3yg9FSD0i3QaJMmlNlBe2fJO0W5m+EeYcwrxfmMcJ0665g0tfBpN8Hk+4NJjXzn+EpgvceYX4szFP15KKkj4qSnitKuqso6c6ipMel96gQAQV6dmHS+4VJfy1MeqQwaWNh0nWFSccXJk0rTJpcyEmVUj4lyXlsSicIM1fPyE/6Lj/pb/lJL+UnvZCf9Iv8pNn5SSPywS79HWtqknSbMG8SZt0jkaRAJCkvkvSYjLaRjou6yfm4LEvHUZKSEC1vDPQoTkHkgmh7MUhutL0ZJCfaPh0kO9q+HCQ12n5doNkpu6XNUFgCcrK02cE0MVp+EYJdBnFEy08AsUXLGwI9Ul+0PAjybbQzD+SbaKcf5KtoZwTkSyZPSP+gThnJSF9EO29H8tInVMrJSh9SSH4AtCfa3gTuR4zcpQepUSqGdxSaH7P9KlqOwkn3RctLQe6NlheB3GOQu6LlAZBfRDuHgNwe7bwO5OfRzp0gt0RLT+P01lOpSOdmCgm6Itqeg+Bl0XZOYWm0vQpkSbS9DmRxtPFlkFOijTs56snSZgmjW+qkclHSE6Od5Qiea1ZkDpWK4OOpTqQ8LtrOTTKWE2lOktrMirRKY1jvk1qkzSIVPVpeDbbGaHkIZLTRcqOinWGQ4dFStLFUHy29HS03zMygjPvnCakIxeCEgtHyB8AUiHaWgfijnW0gORwThUo1c/VSoyhUSrScuTzR8vzAU5KLOkWKCRSSbnk4sA/pftvYI82MBr7RexxSNPDPUpCHA5+1zw982t4DrTfwCabxAw8HtoN1WyOsuivwl/KdgXc6CwN/KAeHnhN4sXxI4NnQOYGe0scD3e3+wGYUrKtzfmBTp0jhNyFEiwbuK+2RJcTe0Dk5cHN5OHBTqIfL8DMwX855IKFLy88JXBy6KLAKQ2Fl+5WBFeV5gaWlJwROLeWMMgKnlE8PLEJFTkachZ0nB04svy4wr06U+ITylwNH1Yk6TOoUNZrQKALGd04PjEUJENDEASjBSIzLWkQdUvc4txG0lTHdLweOrn9CxkosrQGW60PsT9ovtM+3z7C3YM0psRfbC+x+u8/hdXgcyY5ER4LD4dAcqkN2kINkX09shx4mSDCf5mGiqWyqwu6R2RS/0B7rh+SQsdnqSlUmyZOOaumqD0/qscemdw0PT+pydBw3a7MkXTtbmtTVu4Amzc/v+uqoYI+UMO3YLluwReryTqJJM1oywdwlX9Ej0YxZPVKMY1ya0+UdM+tRkqSKS6/JYTr20mtmz6b0M5sym7yNKQ1jWw9hzDPNttbw/p/McPgAV17XjZOOmtW1MW92Vy1bYnmzJ3WVHZV//KxH5dPkU9taH5UXM5k961FpkXxa23T2lxa1zgbbSMFGjfJisFE7E7DJx1Mjs8H/+AFs0mZ4t25ubDSYpkqbmQmTZqpgOtZgGjOQSblKGiOYxihXCabbjQzLUQ5kqDMBm+00KhcZlttOE2yZzLY5FEJKnSFm2VwbAsPmUK0InrY/uNQI/rUR/GsO7pGk/eF1IaO0pRQSOYTkUvCE/x/+LGz5NyJJ3aPPPGNW28Jg27xg20JgXtdVZy7K7FozPz9/8xlnckB+lxKaN3/BIqYnLuw6M7iwteuMYGv+5tGzDhE8i4NHB1s306y2GbM2z9IXtkZH66Pbgie2zu6ectHwZQfkdWV/XsMvOkRiF3FiwzmvKcsOEbyMg6dwXss4r2Wc1xR9ishr0vQWaVLHrM0Oapk95niDdsuuBMyWeTkFs1vSPUsbxdQZWZB5Yc5jKkn3kSs8uysx2NKVBHBQZXNlMwdhSnNQMrzdZlDmhSMLch6T7jODPPBOCbbQysy2U1rxfwV+Vq5chR+08YoVRltnGgErw20iHAwrYVspfsAJO2OF8DXDV9Kq/T/hsMFLK8JjZm1ub2/LPKU1B4p8N+ve4dkrKBw2MgyHCXmi1kLZTxfKvktLH7q1/f32L9uVXqHlbwF2CC2/Fxr+FmAHtHy/0tu4pXFHo9LbvqV9B3i3bdm2Y5vSW7mlckelUm+WgLOaLaGE+/+tCq9Yxd5hSdRW1JsLgkLDwrW2mmGFCFgpGgY/hr+IGkZC4f7o4f2WFUbgKhHF8F2xfwwjgJNfuSp88I/hi8TR9uHw/wEEvdmiCmVuZHN0cmVhbQplbmRvYmoKMjggMCBvYmoKPDwKL0xlbmd0aDEgNzI1NjAKL0ZpbHRlci9GbGF0ZURlY29kZQovTGVuZ3RoIDMyODAxCj4+CnN0cmVhbQp4nOy8h38UVfs3fM6ZnbazZXY327JtNltSNsluSIENkQyEXiT0BIyEIk29SSJy25CoKBBUIiqKBbBjuSUgJWAhKtgR7CgIqKgoRlGxQrLvdWYDt/6ez/N7nz/AmezpM3POda72vWYAYYSQHjUjBikzLp3WMG+DUggtTyEUaZmxcIFCgl/3RijaByH+6KyG2ZdeNvwxD0KFLoS4ebMvuXLWiEfOb0OoZAlCEw/NuWjazONXv7YVoRX1cI+yOdBgG+XyQf1uqIfnXLrgisHTpxug/hxCasYl82dMY2umf4LQm/uh7rp02hUNjuPC/QhLx2G80tB0UYNna+VvCBsEhMxzoI3p+Xm1eSNrNdSgZJuIdNYShHA/qPCoH7oWp4hCasl/mBAzmvk3cy3TwtzMPMDsY37VGXWj2Wx2IjuVXcq2sCvZV9lv2VOcjvNwKX6xsF54Suj2zfNd7HvZ94Yv5V/sX+f/MWAP+AKDAqMCkwK1gSmBusCiwJbA7sB7gYOBHwKnAt2KWclSokpCKVHKlX7KQOVCZb6yWLlD2am8oJwMskFb0BHMCkaDhcHzg+ODFwaXBO8MbsgiWVyWOcuaZc/KzApk5WbFsoZmTcu6KERCcigYQRESMUTkSEbEFfFGwpH8SEmkInJJpDmyJLIscnPk9sgDkacimyM7I89FdkfeiuyLfBz5KloRVaMDovXRGdFZ0Yuj8/MXFzofCz5288/4NDntPF12uuJ0v9P9Tw88/eLp1JkZZ051VXb91HWqq6s71L2ge3H3mdSZVIrSHq0niATJZPI0E2aqmauYJUC/W5mHmP3MbzqTrpotYmvZaexy9hb2NnY/e5JDHMf5+Wqg34PCMR8C+l3i2+3r9iN/s3+9/6eAK6AEhgaqe+g3NdAc2BZ4JfBh4NPAT4FfFaRYgX55Si8lqVRo9JsH9GtV1ivP/Q/6jQqOC04B+rWeo58F6OfO8vfQrz5rpkY/5f9Cv+pz9GuNrI88cY5+bwD9DgD9ys/R76LoPKBfPdDP+dgyoB8+bTvtO90H6Keerjo9+PR7Zy4881NXhUa/P7uV7obuhd3NlH6pLxDS/QC/dxFiz0Pa0T2Xpjrg8+48EDiiR2JK7BbPIHRm/5k3Uc/BA29z33xfhtAPzA8jETqxGKGvdJDbTlhOmE8YTxhOSCf0J8QT/AnuBHuCOUFOoG/pfqGjN2opyOHRf38Hzzq6/bs+tOW7SUdbji767PIj845ceXTnibe+yD9664m7jmw4svrw6sMPHl6B0OFH6bgjzsONh6dCLXFYPVx8OHxo8KFBhyoOJQ+VHSo+lDiUeyjrkOdQxiF88PuDJw4eP/jlwc/pVQdfObjr4AsHt0Npz8FHDm48OOjggIP9D4YPZh0MHvQfWwP320nHeb9hX8i4EtZ3H38vfw+/Jr1aaxZCxk/k1xAyfCs/DrRCzAwqzbgChPx3oNYsaDufvY99GPKn2feBNkA7bjw6d/C/01SoF+YIq/TQrm+jdX2Hlj7X8/sd/a+HpEj9IL1AAv0izdNa0mmD9DD6/zmkZfQntfTUbkL/z4d0oVR/rnzB/2XMcHpP6Z6e2n3n2l8xPGfMANp5ac3o11Klp5NBD6El6EbmQrQafYVuQreiFeh+9Dh6GMmoBYh7A7odnUQ/olvQXWgZxugQ+gGtRU+gn9FP6BR6EDT/a+gV9B80Hc1ArWgmegNdhF5Fr6O30ZvoLbQXfY1moXfQPrQfPY1mo+/Rbeh99C56D81B36ATaDmah+aii9Gl6BL0L7QezUeNqAE1ocvQ5WgBWoj+jY6jK9BV6Ep0NVqErkHb0QNoMboW7M916Fv0HdqBV+O7MMEM1mEWnUZn8N14Db4H34u6UDfmMI8FlML34fvxWrwOr8cPYBHrsYQN+EH8EPoV/YYfxo/gR/FjeAN+HD+Bn8RP4f/gp/FG3IY34c34GfQ7+gC34BV4C96Kt+HtuB0bsQnvwDuxGcvYgq3oKPoM23AGfhY/h+3YgW/Gz+MX8C7cgV/EL2EndqGNqA27cSZ+Ge/GHuzFPuzHe/Ar6A/0J/ocfYEDWMFBnIVfxa/h1/Eb+E38Ft6L38YhHMYRHMX78H78Dn4Xv4ffRztxNs7BuTgPHUNf4g+4Fm4FdzN3C3crt5Jr5W7jVnG3c3dwd3Krubu4u9kwt4a7Bz3K3cvdx93PreXWceu5B7gHuYe4h7lHuEe5x3TzdBdzG7jHuSe4J7mnuP9wT3MbuTZuE7eZe4bbortEdym3ldvGbefauR3cTu5Z7jnuee4FbhfXwb3IvcS9zO3m9nCvcK9yr3Gvc29wb3JvcXu5t7l93H7dGV2XrluXYhGLWcIyrI5lWY7lWYEVWT0rce9w73LvcR9wH3IfcQe4j7lPuIPcIe5T7jB3hDvKfcZ9zn3BHeO+5L7ivuaOc99w33InuO+4Tu57/CH+CB/AH+NP8EHJysu8hbfyNj6Dt/MO3sm7eDfv4b28j/fzAV7hg3yWZJMyJLtklg5LR6Sj0mfS59IX0jHpS+kr6WvDKcMvhl8Nvxl+N/xh+NNw2nDG0GXoNqSMyIj5EB/mI3yUz+Zz+Fw+j4+xEckhOflm/jr+ev4Gfgl/I38Tv5Rfxi/nW/gV/M38Lfyt/Eq+lb+NX8Xfzt/B34k+REf41egAfxd/N78GtNm9oNXu59fy6/j1/AP8g/xD/MPoY/QJOogOo4/Qp/wj/KP8Y/wG/nH+Cf5J/in+P/zT/Ea+jd/Eb+af4bfwWyWX5JYyJY/klXySXwqARgpKWVJICksRKSplSzm6VbrbhQG6q4QqYaAwSBgsDNEtEIYKw4ThwghhpDBKOF8YLVQLY4SxwjhhvDBBmChMEmqEWmGyMEW4QKgTLhSmCvW6O6VcKU+KSflSgVQoxaWEdFz6RvpWOiF9JxVJvaRi4RbhVmGl0CrcJqwSbhfuEO4UVgt3CXcLa4R7hHuF+0xHTEdNn5k+F+4X1pq+MB0T1hmJkTHqkB//gE/iH/Eh/BP+GZ/Cv+Lf8O/4D/wnjoHhPIO7cDfOB58MEUwIYYiOsIQjPBGISPS4gEjEQIzERMxEJhZiJTaSgQuJnThwHCeIk7iIm2QSD/ESH/GTAPh2N4N3koWLcC8SwsUkTCIkSrJJDskleSRm+lIqkUqlT6SD0iGpU/pe+kE6KbxK8kkBKSRxkiBFpBcpJiWklJSR3sJrwuvkKnI1uYYsIteSxaSZXEeuJzeQJeRG4Q1yE1kqvCm8JewV3hb2CfuFd4R3hfeE94UPhA+Fj4QDwsfCJ8JB4ZDwqXBYOCIcFT4TPhe+EI4JXwpfCV8Lx4VvhRPCd0Kn8L3wg3BS+FH4ydhf+Fk4Jfwi/Cr8Jvwu/CH8SZaR5azMWoTTwhnWytqELqGbzWDtrIN1CikRiVgkrIt1i4yoE1mRE3lREEVRL0qigc1kPayX9bF+NiAaRZNoFmVWYYNsFhsSLaJVtIkZol10iE7RJbrFTNEjekWf6BcDoiIGxSwxZGTFiBgVs8UcMVfME2NiPhtmI2KBWCjGxYRYJPYSi8USsVQsE3uLfcSkWM5G2Wyxr1ghnif2EytFVewvDhCrxIHiIHGw9KP0kzhEHGrkjLxRMIpGvVESh4nDxRHiSHGUeL44WqwWx4hjxXHieHGCOFGcJNYYDUaj0WQ0m741nTB9Z+o0fW/6wTjAWGUcaBxkOmn60fST6WfTKdMvpl9Nv5l+N/0h1oqTxSniBWKdeKE4VawXp4nTxRniTPEicZY4W5wjzpV+FueJF4uXiJeK/xLniw1io9gkXiYuEC8XF5JbyK1kJWklt5FV5HZyB7mTrJZOkbvI3WQNuYfcS+4j95O1ZJ34b+kX6VfpN+kB6UHpIelh09em6aYZppmmi0yzpN/Jd9Kj0iPSY9IG6XHpCelJ6Sm22PSi6SXTy6bdpj2kU/qDfG96hfzAXMfcwNzILGWWM7cwK5nbmTuZNcz9gEUeYR5nnmT+w2xkNjFbmR3M88yLzB7mdWav6Q3T26Z3TR+aPiEnmXeYD5iPmU+Zz5gvmW+YTuYH5kfyI/mJ/ExOkV/Ir+Q38jvbh02y5dJ/pKeljdKf0mnpjNQldUsp02HyB/mTnCZnSBfpJikGMZghDMPozF0My+aw+WxftoLtx6pw/QB2IDuYHcoOB49rLKCjyUyAvZCdzs5i57H/YpvYhUw2exV7LdvMXs8uYW9ilwF2upm9lW1lV7F3sKvZu9l72PuYGLuWXc8+zG5gn2Lb2C3sNnYn+yy7i30ZUNab7D72HaaAfY/9iD3IHmG/YIrYr9kT7A/sz+xv7Gk2xTEcz0mcmbNwNs7JnODcnI8LcAoX5LK4MBflcrg8Lp8r5BJMKdeLK+H6cOVcP07lBnADGYEbxA3mhnBDuWHccG4EN5IbxZ3PjeaquTHcWG4cN56bwE3kJnE1XC03WcbcFGmT9MxZ+jB6RmIMafpwF3D13ExuDjdX2m7ABtYgGowGi8FucBt8hqAhYsg25Bpihrih2NDb0NdQaagyDDGMMIw2jDNMMkwxTDXMMMw2zDVcbLrWdL3pJlOL6WZTq2mV6Q7T3ab7TOtND5oeNj1q2mB6ytRm2mJ+zPykeaP5GfN287PmXeaXza+aXze/KX1qdBpd+FN8GB/BR/Fn+HMxpUd6DKiB0ev0rJ7T83pBL+r1eklv0Bv1Jr1ZL+steqveps8w/Wk6bRxsOoO/wMd0v+p+0/2u+0P3p+60qcvUbUqZkRmbid6ud+idepferc/Ue/RevU/v1wf0ij6oz9KH9GF9RB/VZ+tz9Ln6POltaZ+0X3pHeld6T3pf+kD6UPpIOiB9TI6Tb8i35IS0B21Cm0kLtweXoK1oG3oZf4meQVvQbukVdD16ES1lzgcMPhZQ5BjpI7QH34JvlV7Fpaav8FfMBGYiM4mpYcYx4/Xd+pSE0C/4awlLBPeWGElHOnTXouckcC4kXpIli2Gv4W3DPsN+03HTN8YLjVPNvWRGJrIOrUGd6CX0CFqFK9FK3B8vxLfhVfh2/G/Ujq+RRKPX6DP6jQGjYgwas4whY9gYMUaN2cYc41AzY9aZWeMw43DjCGOuMc8YM+abOTNvFsyiWW+WzAaz0VhgLDTGjQljtXGMcaxxnHG8scjYyzjBONI4yni+cTS3gLuc+zd5Rdoh7ZSelZ6TnpdekHZJHdKL5FXyGnmdvEHeJG+RveRtso/sJ++Qd8l75DA5Qo6Sz8jn5AtyjHxJviJfgzSeB9I3jh3PTmACjMIEmSyQwRnsTPYikMvRbDU7BqRyKlsP2Hs4O4IdyY4C2drN7mFfAfl6i93Lvg2yehm7gL0cpHY+28A2MtlMDpPL5IH0Xs1ewy4CyV0O8ktjHytAnhczMSYfpPg2poApZOJMgiliejHFTAlI5Sn2F/ZXkNDv2E72e5BLGSTTSp8Jcunn5oFsXsxdwpxgvoXfdyCH/UESq8w5bIE5ly0057Fxc4xNmPPZXuYCcyFbZI6bE+YikPyj7Gfs5yDNuSDT2SDTMXYwl+CKQMYjIN8FINV9uQruPDaXzTXfZl5lvt18h/lO82rzXea7zWvM95jvNd9nvt+81rzOvN78gPlBppQpY35mTjFDmKHMMGY4M8I40ew0u5hrmEWm5027pL2mDrPfHDAr5qA5yxwyh80Rc9ScDUiTQ+lAEhzgmCBE/gcEg05Gx3K8IOolg9Fkli1WW4bd4XS5Mz1enz+gBLNC4Ug0Oyc3L5ZfUBhPFPUqLikt690nWd634rx+lWr/AVUDBw0eMnTY8BEjR50/unrM2HHjJ0ycVFM7ecoFdRdOrZ+Gps+YedGs2XPmzrv4kkv/Nb+hsemyBZcv/PcVV1519TWLrl3cfN31Nyy58aaly5a3rLj5lltXtt626vY77lx9191r7kH33b923foHHnzo4UcefWzD4088yTz1n6c3tm3a/MyWrdu2t+/Y+exzz7+wq+NF9PLuPa+8+trrb7z51t639+1H77z73vsffPgR+viTg4c+PXzkn8jZP5GzfyJn/0TOaP2fyNk/kbN/Imf/RM7+iZz9Ezn7J3L2T+Tsn8jZP5GzfyJn/0TO/omc/RM5+3vkjL0VfiNRAH5e5g7kQSj1GfyOwe949/DUGfZiFOqelzrK2ABZ/afnh1AEsNU6FEYncRFwXQcajh5F/VE1ugMNAWS0EZnQlfhNpEMhNBBtQBEcQAQNRk5ANGvAM7wA8NCXgDJy0Ah0GPBGGA0CjORAydQ3kI5Ay1I7YJQeVQHC2okvweNQHMpDST6OwZNXpjqQE+Wk9qYOQO1+wAzh1CY0FEpfIQvKBjR1G7ICCnsjdQZmGgYc9xi+Bn+DgqgerdCV6FpSF6O+IKcf4BFQGoWuZA+IWwGt3YYeAmzTkTqS+hq9oMOA+haD9C6DGW9GHaSQqWLXIwVF0XnofDQNeq9GHwNKKmLUVHZqQGoNtD6GfiIx8grDwzxiaBiaChjzAaDGh4BsfgGMVgqo7Uk438HfswdgbiMAE14FyO9+oN5jgDt3gDdXBL6eE6jlRLloAvStBJneDNpkPx6BaykCYx5hE92VqYyUPfV1KoXyUA3McB1omWPoFE7AGHgCk8Us0Pl1C9heXdfBCmei+wCtvgPzOAx0/wX9jvPg/Ix6eqlJqQ2pL2EuAgqgPmgMmgyIlaLUB2FXX0K70Y/4NHio15J9uj0gPydTq4C2UTQA5j4aRo+De6+AXdqM2uH8EFZpAeRXhPvg8/FYPBuvBDTbDrjmY/B1g6SRfMu0MW8yh3RlLJsqhzs5kB+eG0KTAD1fAih4GVoF692A9qDXAXlGcQGs6EO4/lfSlwyE8yHQHofBl1ipO8Pe1H20+0T36VQL4oHLhgAdLgcUfwz9AIhVATw5D1+Gv4CZt5ItjImRmRBISX9mPFPLLGPuYF5j3tY16Z7UfcIOA03yJD+t+1/d76RGpJYgGi3mYF7ZKB+VoN7AP7OAmy6G+TVoSP4aQOot6Fbgl1WA75+Ede9Cr6MP0KeA3k9hBLg3gefC0y8FrrsR3wrnGsDgLwI+fh0s2a/0JFlw5oDnXUmqyGAym9wI5x2gFz8kxxkvM4NZzDTDuZbZxnysQzodYM5ecA4FffUY9yYgt6H8dOGtM51deV21XYe7UXdm95Tu1d0vdn+dmpi6EuYfQQWoEGa6FGa5BnjwETifAE7chl5Bb1FMBnP9CRPMUjQPqDwPsEkRrsRD8DA4R+ExcE6AcxKeDOc0PB3PgXMxbsbX4xvwErBgd2onjU08gh/H27RIwk44PwCL/RX+Fv8ESAcBznECLskGxJGElVaRIWQ0GQvnbDIfzgbSRBbCDj1GniE7yIeMjYmADp7GNIJ/+DTzEvM+84eO6PJ1cV2FbqJutu4G3T7dO7oDutNsgB3EzgFP6yXOA17QBNDEdwPKP86d4Tm+mp/OX8O/z6eECGirV2HdW/8WVIpz+/BlbIbuCnIE5MLFNLBL8QSgGEfGM5cwtzLvsrPwSUYBLN7CzGUuTj3EDCa/M/PxRLILZ4FPWM7MQjejFH4SLNcp8rXOjseTb3CO7ja8ncxnqghHH8K+p7PrbmCPI0Q+QuVkEe4ge8ALviH1PCpn1+Ij7FryDlJ0R4kNHQGpXkrugoveJnPJClSjK2FPo7lA98fZK4De/cgynMe8r1uLvmRC5GdAmatBa+zFw3VhciFJ4idB43ZhP+rEjagB34lU/Cx4Tu0I4w3MY3gkMcButREj7o0R2ssE8fuMHtXSOeIoseNqcpJMYJ7j9jOlGIOWeBddhRmcAN45e3Sjf4EE3EGyQacNAm3yHu6FXOgu0Penup+jGps9wK4APnuAyUdjUQLVkTdROcjGl3DWoJtQL7QTeHAZSpC70TWpZjwT9P4o0J8EPJN5KI4l0JZOmNtisBcOkgW6cCo89XfQ/2+A1h+Bv0f/xgpIVgfK0dGem3WDQDPVg/5dAedMVAe1+9Aqbiv7HhqNnQjplO61wOWH0IVgc76A52eiCpjfZPSALh9mrYBmboQr7useilQ4b0JvYoIWwZz7gZxX64aC5l2dmgcrnAs2aiTYxNfR3NRdqAr2bmzqhtQKNDX1QOoCNBuNS20A/bswtRmVoaVsLZnIxnQloGNfx7vBHh3EK0BvD0WfgD6KYBf6Fs6nYf792GdRi+4j0J2VqZtTHyA70CMLKDQdrOgxdCn6Hug2lOlAxd3nk02pwUwDWKgjaEzqsVQA69Gc1CWgeZ9Dj/As6J5m5GcfAd5doZtFEjDfXOTAcWi9gF3HfMT8qGtQB0wYr1b2O6+ib3myT++y0pLiXkWJeGFBfiwvNyc7GgmHsoJKwO/zejLdLqcjw2a1yGaT0SDpRYHnWB1DMMofFBpcr7RF69t00dDQoQW0HpoGDdP+0lDfpkDT4L+PaVPqtWHK30eqMHLW/xippkeq50ZiWalAFQX5yqCQ0rZ3YEhpx5PH1ED5loGhWqWtUyuP0sqtWtkI5WAQLlAGueYMVNpwvTKobfDCOS2D6gfC7TZJ+qpQ1UX6gny0SS9BUYJSmzPUsAk7+2GtQJyDyjcRJBhhUm2ZoYGD2tyhgXQGbUxk0LSZbdVjagYN9ASDtQX5bbhqRmh6GwoNaDPHtCGoSntMG1fVxmuPUebS1aAVyqb8jpab22U0vT5mmBmaOe2CmjZmWi19hiUGzx3Y5rzqmOu/Vbi5tapm6V97PUzLINdchVZbWpYqbevH1Py1N0jT2lq4RxuJDK5vGQwPvhlIOGKcAs8iN9bWtOEb4YEKXQddU3p1F4UG0Zb6eUqbGBoQmtMyrx42JrOlDY29Mrg5M1PdkTqKMgcpLeNrQsG2Sk+odtpA76YM1DL2ymfcquL+e09B/ibZkibrJpO5p2Aw/rVw0bk+raQNp6URY8/RFdMZhYYBO7QpMxSYSU0I1tSHJhf1QS0z+sAwOGoxXNU2E/ZjbptYVd8il0O7TK9vYyNySGn5BcH+hzq/+3vLtJ4WLiL/gmiRcsk5RoP+s+W2WKwtL48yCF8FOwpz7KfVSwvyF7aTtlCDrEAG5EPVQNtpteVxIH4wSLd3RbuKpkOlrXlMTbquoOmezUiNx2rbSD3t6TjbY59Ae5rP9py7vD4EfLxFe6VtbxOi5/7MssM2aE55G3b8L90XpftHjAuNGDO5RhnUUt9D2xHj/1ZL9/c519dTwukOIHibLgKUGhYC1hs7uYY2wB8bGRwaNLd+KIgazLHNVlXDeEhtukQ8jHYr4N8Lzt2ZVmoM9F66CKfx/8x2XgAG1lqwMrhNrh+aTmv1weD/40XtqZP0Ki3772U9a2orj/293vdv9b9Nz9DCwIR1UTJi/OSWFv3f+gaDsmppGRxSBrfUt0xrTzVPDylyqGUHwPWaloZB9We3vz21c4WnbfDNtbCIObgcWJugAZtCeNmYTSpeNm5yzQ4ZIWXZ+JrNBJOq+gG1m8LQV7NDQUjVWgltpY20otAK2D2Qis1E0MZ7dqgINWu9Oq1Bq89ox0hrE862YTSjnaTb5PSDotqDVDC2M9p16R717GgdtAnptub06Jye0QL0yLRnJwL9j7TO9EFVTNX4mr8yjyaRtQXAjAR7wfPxsvQdHI9GbSL4WfIC+NI82bUZsbp28sIWBul5WtiKkVvg2F3QTxCDc5GIL8YXIldM/rWiq+J8+VTFqK4KVAll+QwkRYmgJWiJQIK9OnRGYTrOqPTtmKLrgEWPw82kBlATgypVhbDNvplli1nwZghqYxhEZFwNUt6K1+P9mAM4UrIVNevGT6bP6qqrkCtQvBPSogSui9mC9uA4wnadJs67KA64LXUMzwf/QkIx1YtUTmJUUS0vFdXK0qkiXiduFIl4o2HeVfRejU2xWCeq7CxKRHo57BlcKCtaWlKGUVztX1jYv/9LWloYV+l9mdQx0g+wN4PGqiJi3wzMLgN/rZ3JVo2EySAEpg3UlMBDCqgZCpNg6pkGZj1zlOGYZ/F/yJu6djx/0xH61M5TdfDQisqKpWxhbJG8uygRw+DQk37d9mp8gr31z4nsE/R7mOGp48x2dg6SARHv3DxNAHPKbWZZO82Mxsx2bFatYiaKqlGiRuuj66NHo7qohTabpgIkXAxAdD1ikTuyE/uBtK4Y7FHdqM7z5brGX0fRZdOFV12pjsThUDgrDHgP3EjC8RGvx+fxexjOFjVHpKjL7XQTLqizTEcBLnM6zjBByWGAUhgr07FHgMQq26cjtx6SGByYJnnaLy/vOluJtXdZcS+nw5JBgMLZ0d6y01Hcq6x3maUkO5odDWXxHBl+84LJ9fddc++y96a/dN2luwclG8sW+AsT4WRu+cDSoSVk7XE8emz/dXu6N37Xve3OL1/8rfv4pjunNT2Fk8fvvSwRPG9c932wRyeBjTmgmAPdpWaornrXetdRlw65VBdZCE4jMfW3Ac7rD5y7Hvw3RisLUA7BBv+OzHgu+GL9ofyTasJmM4BozIqCgTBoJ/4Nhg9TrSaTWbWUJsyLza3m9Wad2e3cScL4WA9xYxWj5M5jcoW2uxZrEluS6JfOM/iXWKwIvGzcWGeLFFsyHA6nPVjaj5RSAtD1n8TDg7aKC7pJfR+Hno9kRgboXn3g9NKmPn4SiRBf0VXk0B15ij9A+TAf1vgkrNGP56jX8y4p6XR5zytxqZC4aWL2Oxy5fAU/jH+c51Rlim6yMMU52XWxsMCywHqfdL9pjeUp6SnT6+zrztdcHzs/dh1V/tD94bTbsU/nZj12t8Pt9Ll40Sm5JF+Je4h7uXOlwrvchDgz3QY3Z2TchOXA8bRn8DadsR2mIYpqhqGyWcRiO1OsGmQ2c6Ubr3NvdBP3TqYYCHfLM5gY/O34FtWIuM9H26ba5tsW23S2dsyrNqoDM5GiKs0KU6+sV4jifhb/AXJmxKqaMRVA52Kykuwi+8gR8gMoTndgJwD0c/x8rCLN0XWjQKxkKlidXXWNFZVdjZs4qve2rxTxLnGfSFBdY23smMXqTGo7Y00miZwesmWR+xY39NeaKpbK7KLdJhBJ3NhUBzsGTIximAmWIlRaAlvF8aEyYGa6eI4nfLBXWVlv5smpZ46CI6Ks/dfMddGIe9+9j3yaGP7oH/3w9EsmDc7EbPfpCB6A7378ukcvb9zxyvuts2c/uLX7ZB+5qIBqQpDyibCfvfDIHUifOrrZkBTbUx1qhSHZXxykHyyNyNLtE3Fubp9ctaS+ZF/J0ZLf9Dwqwf3FxaGrCp8I7wjvLHy98EjoSORg4bdZ30QMw4TcdnzzMzk5Mmonx57Zn8CJdqZkK8PKDuxox+u2+tRYvMTXjquekY25Oc/iOSgDieQLVaqGPSCt2h7ATj7TZsCGdtwK7QXNBaS1YH0BKYD2rVP5xbD2dvKlqldL8PqSjhJSAnqv33bVtstGbO5iqnCOn9sgbXc66xpP0eQY2AlQPbHOpsrOuk5rMp7WQWWFcX9Ub9ZxWcFQMByMBHUcGzFFo3pQLnFdwXTsN0MpKGVPx3qxkEtMxwGjj2obuSKtbmJ518GhyVgTaozFbGWazoF9cmibFdRUO21yaNqnVNM90VCIyiHdWX5O+aYlD00asHNRc8Oq7hPLZ8SD7kzLFc5I3qy7QpmB2OrzldHrhl5Xf+8c3fDld84bPfmOtUXbrm67bsPAbF++wFZy0tpLRo/o48vp79dfuGT07MWPUh3eBtaolWkDa+QE/4Jxt+OI6jPOLmt1rwelqiLeoFols2oHI1XSal9vJ/bncASw+rtgw6mtqDul8bSmqsHY4b+YKdtfTVaQGir45cf7D6A505a2XYX9u2wD0qUBdD7g1bBt7MXIiwLEtYlQ7letOOAnfh/y+r3IF8B+L8l4gfkcOeHHw0/PfK46BeL1M2bB6/ChQANuxgRjwUwEFK+ELazbu39vPE4lS+7s/P47HE8f8qKlu3fL8CtKeFSPYDKbjbLeLwaqg5zdbJMzLZkej9fl44LA7psjpTR7JlFTouWxQi3fnJtuVqLp5kx/utmpNW+2a5l6l2wrMZoluHnSPNw8WB7mHx2sNU+SJ2TU+OeZZ8tz/AvlZt1SU4t5qbzUuty/LHCv+V55jeVe/w7zDvn5zB3+N81vyK/53vAfNB+QT5iPy8f9f5h/l//w/eHPF80jPCQABhSIhHx+v1c06T2iw+v0OATCewS7JcNjv8JvlhXZ7/VmWeQMS4MFU0huaievqxbiB+fAH/A9glCacO14q2oQZDNjdzgEQRS87fhPVTTDNeQRk2ppJ4lnRvuxv518p5oU1VRtOmliTI8pF7do/ODO7KrrdGXKnbLmRMhwQnoKnKKuiqWmwhgLDsXSOlOhK7YUNFnMheROLHf8n+lSedHuCr4C/qiuq4udPXBTXS0O8pw9QzNSYKV742KctlhlVGokwjze9fMFWX2nd0+Y4C7uhz8N4QPJunFd34xJ5vzrq+/wKx+Ozg7E+UjE7Ercrrvg9N3LxrCRiK4wmD8VG0m46xC1YsNTn7Fm4MMwJuoA0R/HcRJn4oHV5jX+h8wPWbeZt1slwY8dTryIudp+heMWpsVxP7M68ynmWUY0MCYd8Q1lahk2LsiWsAeUD7uVeDDeidqZEduUe9gcL4PbyZGtALllLLcz/beuNNLvPtqZuBrPEMlT4LvhXvJTGy04YKm0EEumGsVRsUJxYbMr4CIug9FIJriGRWbO0NRYrK5J85x+bWoc1XmqEUjfBfrs1FeVnd+dAnJ2gpi+rikyxe7hDGDCo1LUEeE8YgEy2CER3GwB1juN4HP3+Eex2HXXAeFRU2MdtoWoG8ARe4ZV84ycnC6kZINgW8NUYxX3gl3QvRMI9PvqgaWfLFrYefeSN64MzOo++Wz3xh0t23Dl87evzLN6MjIl9uLu4n3blne/f6S9+6fWxg0ZWzf8ufPMm3j8s0MdNk+CUr4Y1MAV9P0RelGdH1RlmUwIqnSxQTWn1B2cZplZJgQ8JJjlCniswSx3wIODITHgsQRDVgshWABXwGYjE9wCeEgT3Dp6qTtLbBCahaMCkxJwQqgW6gVmqtAh7BcYQUeHCZl0mNCe+n0LvRYK3aqPPlqYpjQEm4NHg0wiWB2sDzIdwf1BMu0QEL2usQnoDkddY2MTYAsopR0r2gY+MxwRYEpKnNIeTzJUGrRTdxJk0knVPLmi69nE+KjLqA/kJxJkUNG4qNuoV2KJSCRSpFzFXDI76La6tPKZO7QyUCj1Zepb9gmgUDZ+UR3RYsXWlRi4dHTpSoKtPoKzSYGtj+0K293gj6QIb8vKssoBjz6YFQx4PMEsJuARg6GMgCcTCGa1YEKyrFkZVmtWVjt+UDVnPwUGTMTEkylYRYZQFWGwjrNYFDkhqzIjt6eObrFYyAQonNpCSUcL2yj15LW5VNnJlaVqLlZy8frco7kk15ZBb2EPBhNZuCMLZxkoVbNkemUWQG1VTy/NcudMezDNx5Sc4KV2wQ8IHPuVNkD5KwrdKHFBoXR2Lk3rEQR+UtJFCc1TsIXqmqpq1BzR6rbm4kqUtI5Gw61T0WTrfDTPepX1Xvw4fhZvtb6J/8TWHwCE1uG6WjDFuLHqgpodiKQ2POO3VhKqxh3GSmt76vg2ZxKr3iQtbu7JPFq2zZ0EPqPFA6rZmrQ6rOCr2eHnTtqgbbOUhNvsT2e/b81IEhUc7bMKrCeHei2qY4KY8sZfOCOEKXMUF59jnSjlHA9uYM7zRqrj+EBiYtgRPnO9Jzo60Z0TnxR29D2vr68vO/IMz5gWBfIikRKl6fRy3cAzz5+tMRsH5dtEsK5DQatdAVrNgDxok1p0l3UD/7j+cVn3b3wlvxQv43VVgjEHMfYcTnRVBJg4A0BaZihYVBmWGeaj+5tZWar4VB/xWSpkURGJWQwAYh3m7VFEVA+Nkhtjv9LCfzFcL+yhWC0zaouaDJYC5MGuApzBQ8nBQknWGwuwm0BiFewFyKmD5K/Eil2H6+qwgiwyCtK0d5kTiGXRgJrVImdHSScW8A3dV3Wf6D7efcOhXb9t+9fyWy99Ztcfy/8FOmd+9/vdb3bPAbe8Ale9tWnY0g3dz3VveWYZzsP98QVPLqOeRxZCupimd/LxFTtQISz19vLSeOHlrgWeBd5rchoK7/TyV7q2h3fmHPQc9H4S5tzZcmFONBlJZvfNSRROzp6b3VDYXCi9gnCmN9c7wvuR+6CH3ZCD3wh/7Pwk/HH2gZwTYc6rhnw5gingEYJZOODhgyFzwGMPhpBPyc/z5VSGRodIKMTb83LALyQCL1hRppyZyFQzGzLZzGGFdAv6VZaiQqwWthWSdYUdhfsLmcJ8zFHFhQ1UsLBmHHCW2aRJm0lrNGkqzrS2oLAd//uZ4DTYrtj5VN56VFePvNWNqgJhiDIF33i0rLNW02lyp4U6UuAQJ61JTb/BpnrDuU6vK5ITzXVGi3HYC0m2O68YRzyh4rNmBHzeYeOvVGU/qJ9QX12WX+kLWxhAmHoGIASajWlswk1UHGP/k/d7RKOXo8eVzHakfWMNleKHvdFRJV3PFk+MZHiyRxXjH7e923rwtaKm/qVjfXPuGrpkfHE1ubr78uZAfiTSJ7CAuYSWRmy+6tH9piF6/QPNNXeNsMHOA7pm58DO56ASQtTNYRclV0Qj2tIsbL0xuie0p4AZFn6sgLgCzsJZYQaQZCQaGYJq8HwyP3w1vppcFrhMWZh1RaQFL1XuLngSPxnZHn2uIBW2c8oSfHN4SfY94Ufww+TR8MaCXQUHEj8UpAqMVkDzmcSaA7tbVF5YnpgVnhvX54En68X2gMcczEKRHA8CY2cKhhwBjzcYUkl+JBzOIhhcNhx+iiiEz8t9hKc84aTT5WW+mq/nmVZ+PQAg5HnKW9KOb1PNvXJ8Pi8Bjw9gqWDVXNOatGs6aHQpCm4MktHB9UES3CqXYbWsoWx/GVNWImgcJWh0EDSOErIcdo2j7FqjXeMo+9rSaTuwG51V3z3sJNc1naoDnEO5KZ7mpngPN/X4hJ2AHKzJuqZ4rAsa3OAyLqVuIeh1bE1mAndqfmBMQ7xFCRflt4IifygQKQjFi3GRH5LCrPxiFAonlF7FGJ2FWuC2NKX9Fk2vRzTIisHWbM5I5oD52pahKWoontwqJxOyGVQzTmvkWmDBWDCINVb731iRpx4ngJ00MwIvsnO6V3eXFitGv+yNjizVmNLupUz5/YG9Kx96ErvqW+afOc/mFV/as+6G8hnkKkAo3Qv/zpqVj1++qD3affVNNQZyB95w/eJ1NuoRNac+07GgtfuQSarbemc+pl+bSQwy63JQLhsbjUcT0VLejger+8v6lGUyHt1U11T31MypHo41siaU11GuWyAtMC4wLTQ3+BsCDfGGxHLhJmmpcalpiXlpbINuQ7FsNRYbS4ylvmJfia+UursFOsWvBHJzC8CF7kcqdQl3wp8IJILnlZxXOtQ4NG+8NNE4SZ6YOzEGmCxAPMWBUk/ZeNd49/jM2l4XFF9QckHpBWWTe5sYScq1SZ7ckKSU981NlDdZm2zLw3fzd8fXJDbEO3JezHsl1lF+sjzjfKGPB80nno14H6CQxbjHW1aNpfcUeT2++QGP37/TR1tK3Pdk5AGPGUwZBoMpZsgz6aKilnEh3IUQl1PEhHKoF41Vf1YJQCPwndtxSJXjll0WcsSCFctGyxELA2Bm6fbAU/6YTGNDMCCwrhDvKvyhMAUqVR1SqhbugwqDCpXCBChaXeFzeDBK4sHY1RM8qIs1gplrOkVDOk1dTcl4LG3zNH3ppFEcZ5KiHhNwNUCds764VqrDciOU0+GFcIK35USlfLEY5ZqpMrVBwiegqi8wFCPJkB/LlkG1mk25eRErqFchzlGej2lqVEvwWacdeL8OHCFxhjTLOFueEdPV1dZh0O2oEVGRUA2Sy5zUJczJ4oRZc0tqsSVUSMDBt1O31E80XatF/jg+ZCn2kzSbZ0fD0bNBCooCmCcj1rqnLpizLNbvmxdWjPjhub4lgZcz3T6AVpk1Wy9ZdFvv8uzuh28fefQ/l1zZx5kZ1IMlji1df+HiMf2KRyyadekdY+45IrKVAK7eWXVb/ZLJvWbl+19ecPP4Ve+VugNxyvlW8FeepjaZWLfozVyApCMCWxzYLwNU+ny7KUAcvAlUHcX5lXLX/v0dOE7hvMEqB7FDkJKPO7Cm71xpoF5cmgbq+XEtV29QQiU/W08HTgaZnc4drmcz24J/8Ozj7qcyn2O3cTt4cLQf4x7nn7A/5mDv5VvNrdZ7HK1Bdq59pnOB7kp9c5Cd7JjkrA5exM3l2Sl8rTBFf6Gp1s6qwWo0npnEjuNYJVii62MfjIaZ2AiXy+cIOfYcBwtGMJgAQLE/yKaDfKoXmYKK3pHpyHMwDt5Il+gxgabhhYCJUCNcJ3ft2bMH7HCdFh30qBmIxR5ktsses0mAwQGn3xNoTy1VLQ6eUwSeB32dAfqK5TjqhJc6nDS0GzCDIUCE58TTTuz8OuFQHa2Okw6d43jCrtqr7W32k3ZWsdfbG+zNdp29nZzYpgRXBym+jwHHu0/VHatDrh5fXHtHQLkbcpdW+L9D+loNyf/30HQu2PwmypSi3mVNmlVrUkf9azkpCLYkGLYD22xJfY6Nth7YZE6e9QdrQVNjO8cDeUKYxsmywX/mKP9inGbV7FL26aGR0tzu7Ei3Llt2D+tH8i7sU4hrsRovH8Qa2JERY7DootPX6m6bnBEIsZGIWBjuNe/Ml4xlQYGvVMIkQr3CYalOZjmzEfVC5zHDeuJRSqWGRytVah/tHr4wIkgS9RhoawQZiimukaxWMqHYQYdA/fAWajahcEq1U9NZrI0tTvJazhdobp0iwiWFxcivy81PlBhUEW5qUH0+mlqgy9Ceel/100EGg26xC7u0Vpc2wiVH/HxFvg7FQfvsBswE3hol1N54F+WV92N7cRwqGvE6Oj6NxXbL7++lINWjzpe8LcXEOq4MW5VAsrlyg7hNz1hj1kVoUfFNaIW0opTzWR3lcmVzpU70jmRHcoOUQVkjy9XK5T5Bb+IVlDUMj9APk4aVjuhdVT7svEnSbOlGcYl+iWQe77jBQQKVUytJvVCMSioKcwtKngWeNSBDqmObmDTkSEmDhirKS2VDtYGokNQbGEXLFhp0hgoXBVm5UnK0a6prvouJuxa7iOvagIzpihMVagWBZTfQAHBBKdCtnRmsWnRSYUcBLqiPoGKjwVBSAoQ/AzvATSh+Fs9GYfAJ4ImmJIoEIs2R1ohOjZyMkOYIjsh0UORZUoV4ZAetEUja2/Fs1e+JJ4t41ZRUwL9q5hmZxyd5XA2yWdWv6l9pU9DY1BQbBfo8JnfFqCdd0RXTBATOX+sAvJ7qOlYndzZWdjaBrYhZknRMLBZPC/9mxgB4tJY62XS7NJswpLSvN8Taevcp60M4UdALhAtmKVmEK5WSgIF8Ni+y2swBoxdnhfqySS/qI5QouLREsnplLzZlQVLOVXiR5o1R86AZilgsL4+GonETbkSNYBbAJtRsrrQCFgbnB1FZ3FIEKwWOPLpZ1rJtpmRvBdZO8a+BZkdVSUq6FCnphJ+XcnumBFIqJXvn0FwPuR5yEXLxHO49ewDorY2A5GqB4d5lZb3TDhRnd54NFlP74nTY6XsoLbJkT7tjcA2N+hX3IkNuCZedN/Vqf+6b300aVxmJkng0Em9bd9X5fb1WvdMsG+wVDbOKyvFd+aMHTuwzcsmlFvf186qKBl4xMbx8VlZWfnlhr5KCia25gQGxG7tfv6FvBm+s6LN64O24rsKdX58cOpXansGpY8xwkPwg/mWzoMNnZZ9kcpoLzGkuMKfJL+eImEW+PtgALjQw81Yq9EEAy+9vsWWQCVB4YxvVBr4iBsQTRC9WV7m7E1Nh3Etjz5usISoCl+UVlKBQlbGuzGmcxBKvbbxuHNiP8XyNp8bLz2YXss2oObjFs0fZrxxFX7JibzwET3RN8E4N1bvqvQtdTd4W6622Vkur61GAGhtDz+AX8av8q+5vhGPeb5VT2MWR4dZJ1hWBFUpz6GSItyj4udRRpMAvAJuNfIgKTwIMZ32wOUhQUAYbRYNeDcFWgAdtQRr7Oho8GTQGZ/mOgBP6qiMi8j4a8MhI0kztY03CIqXgWwEDHm1YaSCGuIwSSEX1qAG1ojbUgY4ikTYQ9MRlmTdkkupMvC4TZ7Zjg2o9yWHEyZzCJTiVY7mqrKod5La0o0WjmnVNjV2Ndccam6iLFYtVdnY2amJ3zNpjQPXjfDN8l/mY232YvksDKerTpw/uQwFmHeBLEDfK3Eh2JT3As2BYWFmmwKAD+By4umOTnOwJOoB5acQcsB0pLUHFPe8xsqM9L4M1JgS+ZIZHDtxw33GMtyx9uii/r98ihUL9Zp435oHl08/vXYIv2Poy5o4cwKaVo6LxqH1hwD98+gMPn64qvBJWPzB1DHz6W1EAFZARPbwVjWvRzlzOpTGVkGYwjdmQ4nNokTKHpFAjYqH8pBgooynaaGj9XdVYUnHRKxTvTuZz5KNKFmq+gBW8JVW2qaKJTLBlILB2fH4+o1mLyk9jnXH44R7r8CnYhg6NOcE+eHpoO9YKVyFFYhh6qbfBh1VfvY/4AhLcRnKAGHATHDqqPWGGGTRXdGYzpIT2KEq8MFcboy2Om8Bx8UIaUIjtjVnSlqpjLzgDdDJ1dXsrO8FtrvwUnk9RI3hrQ4aUxKmIDIgVltTHr9Fdw7bomuMb4x1xXo03xwmKO/LssQnsBGF8bDXPD+WxEu+tH6KfqL9b91je+jjfET8ZI4qClOBO4HYJNNigCmW0cqEyS3+JcpWyDq1TnuB38K/kSVHBlm3ob/XbBtp92Y7+Xr9vYAAuk3T5do1qgXycnx9gpACSggaFGgervd7R7NjoYALgRxHHidxqjnqYOYUlNN8+pJSrKqxa3AOPR3V2NdVVdFXQg74KboIlW5xJWXsLj9KZpv0zozGdkB2JCrkKiukgyeEjCs5j85WzEXr6NrEP5XAaQKGQl7pFES6tRK2gRHvCJNnpV/rAsk42VGqhjn4PD5NXq5qHrz76+8tXjjYrrsyYEVsKzEGHp0DqPlnIVcyI1wya0nbJlNmDzzu9Zw8eMurx+4dmyqGG058+MMRrCTW+jg8MbEiOnvPaGx8BR48EfTmOaUMZyMcs6uHoHMGRYUcGM7AgMmmZSVOYJntCRVgB1UAQkulnu6kOTVfSgmqh8WWEJE/EwiNepq9yoZtezWvaFcbx4A9+qF0BhTe2U2nQFUmSphio91PZqXEVOJkaW38a64jv7aCqNs3NPnszWg/qiFE07cSkJ5F+oqCFU8KUhWVe4dt4BvH1YPTX8zp+le5B3WYdQx/Fw9KoJEYpO2dkBPywTlqE1QLb09VCZnLQJpMp4E9zOfhdHWm2378X5lq3G5zgXtpcYaaU3QHfT3XVuetRfcaHDOtWvGBivUmH6k0G6Kz0VcNLhAA1EQGNxXJKtOZxeYUlHs4t1tgudEx1TnZNyeQxI3K8KBhY+zBuObmZW2pokW/0PUSedG21vU8+Nn8inyI/MzZrPV8vNMDqlosv8q+ZT/Jg6XjjEsKIVE44kJPhZeJgMkQcHRhPxovTSRNZblvuXmN7WHxY3y5sFdv0r5KvyVHDKX2GsJ/HiN/Pk0aaU9rRMFQb+OiLdBko4bDTqdqsSetU+2L7OvsRwBZ2z3s6rKOh8gzN79+cdvTVoQADgMYXeDDdEf4twZHjSZodeL5jsWMloKNTGRnN9EVOq0ASwkrhiMDIgirASoQ24ajACU+Y7Dq0nPIVk69aEyb6lpJBJtmkmJiTJmyiMxGBlqYqf9WItGSC+zaqq7FCBuesDrJO8NG0F9tNlKViTRbYIvCT5tvBT4rRT8gACTU2JelLb9SnD2qsw1U1Wzj6PwU11mqOnQZumrQIFA9Pk0JJg1qQNMJPoBYnh4IbmlEdsdmTrnnSfT01fbqmT9dEraaaxKRddifdiiVpVLSXCjj2Nw+rtrbWxjl73tKlLZiVWrBIMJpG9J/gmTOXTr6xIGB/4+5HTvy47Z5XupbiDazsnlE27gbS960FC2ZckbH8M4w/PoH5N58orwn3Ua8Df2g0QsxV7M0oRoQe6Y4UaPaqQKVmp0DDRJ4Ylk0cFky5WNBi0Fag9beqlQqoyaqJfjoYzVHzJIJN0gvhiN+JkDnX3I49m60cfWff2SF3VO7tlDvTRglMUoe8W36Fnru1N2s9grwDmbVrEFyq+nK5MNxJyMWaIGKOSiAmVJC1aRxQJU0atXaof7KddplMBflnTdCnNIHH792bfm/hUfutUNbY10SZgcxAw1D3jcyNBvYeHY4XLA62cq38OmGduFZea2krEGUO9NTUvKkx4hVMW/zCqiy8xc+3M4IaCPnX+Xf5id8SjjhxrBqASyIv12rhBF4vA4O347HPrASw0k5+3YzzYu1YVo05udhqtsirzGYcpsz6TH19iZaXl6fzysp0Hi7SctXhDZa0mjBl8ammBlOHab+JM7nzdzIcw/eEqtJMOaoTWFdDJRWQfVV3rEkL71dUdDVVVHYBKon3xPatkewMRzRij0YcOV6UnRH24v8RXQUn6S8h0rKyUkuotBjc957vWqgd0hwm8NrtxXb8qDfSb1zXp7k5A9ybN9dsbZxbU17idxYPDwSihar3O2Zk16PNWfnhcM7A6WTy0IrlL1w+sKCPvzR4qc1WNPvDAUPpF6DndQ9mDoJP3hcNQ7XMXer1Vkf1XdE1ZQwqkKeQhXkLxxGUxxVyY1cousreo6fM7315tGHKSt1K9gbnEtfK0pZ+NwxaOeKm0Xc673StGd2u28FucW5xvV7y+oiOKfunHJ1ycoonU7EXy6UZZYEp7GPC8LJKD3IwZcHhHuSu+u+/YxBttgxRAMBojVBsbwU7FKHbkWGopDmAf6lyXWRjZFeEibTjtVtrYs1BGoY6rBrpWOu64MbgriAT7LlGy+GSIIxVXa3D8XD6vdpwFZqG51PRGV6dgTPasaDa5gt4sQAFC9xGKOXWVOGqdqZINbiH6+NuXO1udhP38+RdxIFwjUIV0KXnePcYPCY/3zzqBSYB9s4PaRKNYhJqQE7g+YmViXUJJuGi9jVhoCKRKE0WMs3j8Xi6NiNIKxTe2CJnaIXDGo4en351C4I0PhLIwTkaDzozS1bm4NE5DTkdOftzdDkmOjLn7HtiKHyvWqnCyLlcmZKYok5ZDzRnp9BLvZKhZIpp5erBeLCGwAcXKQ5sdjQ49oGyb0/9pFrodQ4DdQwc2hwd7eR51bamElcWJZhqhlQzmL6qJAwlpdtXouVwV4Y+nrrJtLCdrpGZO3nKTnwF4Dr9puWumPaGmQJ2wOVaoTPWdEyONWovnhtjTVT7xxrlY+C71TWBRuoxCl1fURNRKXfSbwDAy2iS6XgYDFZiy77gkSABO9F0qpMGuWhL5EgEWpqo4PV84XfuK7+zeP+qEZPKB4VLvT6nC7PRSK+i4qKSIobrHx0dLYzkRSdGxnuxt6/fi0aUjlLQAFypoPPYSi+qLhjlRWNj4xU80DXYiydkT/LiiZN85R4Y7umLRhYNV/CI4aVlKqlSQI/301V48fnxMV40LneMggY5q7xIsyBn48g9yX/fvdIjL3adduCmOmrsGjXTpuoLZeDRUtlK4wQnN1l7oslno8Rgd7Qv3MAOhXowlAbhndqp9VBYRcMAcGpX4XQQuucDOMz9tQb10vGT966/of6lmInhWMYc+3ef3Y8MHJIfCCa8DW+fVzd/3n2nX7xxhGQp5aeWxJLYPnzmwJLqkdMHFXf/Hk+Uz3x+y5PFJfd8hs/Pvb122W6V5URnpp7lhjY0b8uIJjMsCq9jWNHYMLZxxqpJvcpcrsgAcUagKBC6kCxdeNXaSQOarlo3ecCZ64prIolwv8VDSxwOHQduRgVChAc0J6Es0hMl3IHCwNg+avKsRs0WGoMaMgtqrxeDNhcjgkRovCnSjyroEJF6tbQbCm9vo6NFo+ssB0Phc22Uiw6no6Dw4VY6yqVQeOccHZwfXAxqJWs+7HM9hznNMmsohN6Ay+JsYN0+BCbdWyd/WteD+NJRwb3y7leAB2L009JzqM+oWKmwBbWU3mfLiBE9hf790wXV3bs3N0Gl0H09R+hDASYGs3gbXd6vqpdeKYrhkFEzxEZCja9RM9B0ZSc1bQKFX7fQDtqynfa5XOFQj1UGXJjGiHth7p/urdybDpzRacbAX24N4/pwQ7g1vD58Mswq4eowUWkSpgqgV68SLe9Tns4LEuk8FNFytdCdWeLK9duGZxlz/dbhoWC2u7/iDw40uA22VlhKEqEsA2+z6ltFLCapTtlcVUoz1VxZylxsMBjdxrBLjSVdWgyzrLyk1YWrXbje1eBqda13nXSxrs2hzQ9pX8ZpH/NT0wuqpDNtdkGTwNLkc59gp0UOgwuKm8C8/vVjSg3CgaXVDG3PZ9nZEZyb17dvXl5F32vdRf27q6oKPSLvz/TmmHAGeyvtqMjL69sd7FImJr3hcGbFBDztznzFbQ43AIecB1xrBq6149vO8qwTtkzj2QyD9v+CaT6c9oUU5gwG+mUBaGONG6Hw7RbaZDjLlgbKvJQboXB4K73GwD4PXp5Av9NENmBQyZahivTmdkTf2Hwa63XOxUvv827q5f0l6pBt0zgvQwso2OAyhPge7y7t12kxBjqpNCMZ0sZGK6QZyWBwOv7CSPBULa5AeWd7q7PDedLJODWHanAJzdXyZN8S7NxsnFlW7cSqs9pZ72xwtjrXw0DekOvnh2fhXD+XHcrINva3+TMGwpR4To9w2GjouU06nF3at6TVgKsNuN7QYGg1rDecNLCGzY6/sEJFV/prsf9uPqhVzcfS9v7v+312u692lwzprqwszDQFXJk5Fmxhbz3df2Ifn7a3jHrvEIrPafTSghCXAE9pEvNej7furFWpK1Gr+elOi7a1lgkjE2ftc4JuKN0+2qKa6R4nYtqoWFHvwWdHDT47iraoQTpqcP8h/bVx/TVG6a8xSv+RGfRpI89eN5KKOB008uwNoPCn6qZjR+rpbUbGtMtj2uWx3to7FNrQW6aX9abvPiR6XW8vvXFvCisCdGhvovVr3/z1tmj3sGj3sNCAdfoeSqInRvZS+h5KnhY/AwygSnSoQnr6zwCP0piawx3vNWgoVarKkPETVDomPgGPnjB/wuIJzISJ3JAiVyRf4ivyWV573xuPx2nkCrRoVwc9enhaY7r/s9jD6tTm7pZjWv6KpnnPARu1Am4Pd5d4lh8/YSLvKhpi0TjeomhBNiWmoZiY1hbr3V+r9ddq/UfCOr7dng671fSmnzTSZq1AR0HhJ623d++akdQC0caRZyUICr9rvSNH1tb0CI7lXCrDzLUfLAFpa95bWUl9IuDeNuOI8TW70OD/r713AY+qOvfG19p7zz2TmczkMjNJZiaZmUwmM7mTxEAkE0i4BQQEgVBjooA3VMLNW0FiLQptLXg5Xluhfmo9oiWEixH1iFZtrUVprXq0tdqKVltQ23qpCpn/71177zAEED2n/+d7nu9J9Lffdd9rr/2u97LW2kPqPdYGVAJVqfd2+jxej8dzivrXkZ8sGGXa1/FhrtwLFu/otnfWx+18YwcPmoMxv2dAOrSjuCHmr0YgaSueGvNPnFKcFfPnDciZO0LxmL9qQLbvCLXE/BMQSI4NnRGd1jLbf0arOdYwLdkYKzUzU2TinLn0YiKJDKvNZFQMpokTqqs8edaOvDyfMytcVBXkPcE++oSA1yUdDbGKePiUqgbe09DXIDVQWu60uS3hqVMD02ZMk3qnbZwmsWnOadI0zOtd2bmjpnXP6xiQ5m8vum+NZ4AvXCtOUXXSCVAnLQsgcHi/SppOa1vU+i5rFot9zeL/aRir5ibtaMDQtzfxuOZ0ZReHMxz2SKgknFFUwDMdxZkRcrto10Y4XrRbKhwv2Ev0lUeees0V50lz9bMq+mmVYqPJlHdEjgwlm4ym42uTWj5joav8/No5q3LO+2H75KVFuXZr/amDTe4xRXlWJT86p27xVEnKGT1hsHpqo81QlJheXzer3FvdPjimucYnNE/UwbPj0oGFjpKyhV2Xt7efMXrV4KVzgrmBcDjPGcqawb/XU5Gsm2SLD7afVYHEcDjrdKRVJwsTDYM58+vzw+H8MWfws25NFGlaKgOO32eQZLXSkCSrE5KsSiyNV6tH3MyO3BCJhAqKhQrDMbMQSdrpXiEPzLlhqpYrTi3lirXzXF085epbtLnkpZRQ8VxWKCoXioYKRROFMQ81EcukyjGaPGLBniYPFY3pQi5Gss1KNWKsQApXkSCxVCdpKb66xk4fLziBYiBCOWFHuMbkS0hCllRWQiceOOB8I067gY26JBFrE2nyw0kChC7p6yHJsypzhQcnfKRqERYdqFbbd4TNQnuahaQwC6lhzhVL9LkiKddMSbm5daNYoShZKBIKRWaheFCxiq+LixgJEyoRi9WN0sSF6OlROreS1vX3qhubZOLkJ0fXJcvqzHU0/6vqZtR11/XUbawzlCs8KcK9iPXVGfvq9tVJfXW8Gwl76uRCc27M7xiQHcms4ljMH55SbI75M6eECmP+EAREsiJUHS1rqfJXtxawUE2teOJwKORwZFrzcsOmjWbeZ+YOc495k/lFs2ImDzI/VlsYLgvEZsS6Yz0xpTe2MdYXk1nMGZPEYWYLJnysexSmOtS2mOWHxRLhMlV7i5NsNKEbG4emsrp64vHKRiXilfMKuMHoMfj0aUzHc5bif9qREscYjp3A6kSlGZmeeMQIqOXtP7mx/aJgbqatetzgGHey1qq0TLvsUlsmTcTsCdWOgD4PDz7VPqdp1eAVcwNemH/REsd0ftnqpd8ZLOzMLcRMm7iQz753ko/mmQShvV9+BPPMwQqlDG2mFcAMFBadWLTLEGv3GU467JDhU2juUCYFkm5KVEQxJS9itjkjTNWM6jan6mIcWYC3UD6V81HlfOIpn5ItOC47wyksOKcw3xRhB1BQUfwZGepCulBFxFzQRUxfqmtz9ebwn+buyn2GP2d5uvA1i9H1FyufZGnLnZuzlv/Ast7xWr4pkKypU8QC+qYAfzbnOZ+UDPDJZr03LoVeehw+7XSwosL30XWG0q30KBuVPsWoHKDPoZqTGZsypIyhtWPa96fV4Hh7X+ms9r4ZM+dvy/BP3hZQJp8+f97jdNKBKUAgtYdU4Ph5jzGfXMMUli3XvO98Pz8tCu3QceTMdD0vdEUyS6RIQYk1YizJcmQHWSH3BXmuBSGPCSG33Rnk+TIuOba8IPMacFG3MIf+xE4/eA1cx8fPS2atlFYar7RemXml6/LclZ6VBebOjk71XJilwJnVmA/kkDNvU515ckPEcp7mqtfX59GKXrZLc8oltu+qxZe+uObFK89b/etZdYvHbfrO2VddMFHeetd1W799qPfe7z901eeXtTTfteqXg3/c/POPf9ANpyP1+eAUeTd4LcoapWKN12JjxHmaGmsZEauRWMnqcXtZUI65hQx2B8VxGpg3X+zQ7TUhd8WWqF0YdnJp3KVkGn271Q/EkjaYHxWRzPoOoykqpDATUphxcCckLCy3g0LgCpVcqQraPXucz0KwVh61A/oIq0kd2kmMWGMlnhTbmFbrmNHoneBbt5CR7qCqA4zUqQ+S+cJYC6JUqTEzyrg3E52xUW+oA/Smm52qZORDO0T7tC2iOHH1VdYxxK2NzsnObznXZynXJviYRPOY9sS3EhdmXZhYbr4i64rEd833mt43f26xV42ZV9sx6qJRSnIMrzTLpTGXG2aV99piN4yraIhFi6ZH/axVcsVLZaXCWc+pJ5KJ+uT1ZNZUB6wbrVK3tde61Spb/xaU3LS/mR8MzqCjDb1FnI4EqMcADEXdo59q15wZ+rYLUnGZ+Gr8YDN5tXlDXq2c6ST7R/34qLLOZDdHRpVklFRF6kw1QV5px6XWUh/k1baK4LCPj8RaE1hQjtTmDH0uKfgwqhswtbkNRxwkgyow6biuZuhI3FcyccP07525dF3PA1PqS2vyGtsHg96GqDvHGfJ7InyUJfPiWQvHzjwzOa+qMiw3LnvlirMv+u7vDt65JsdRPvj+WbX+SITn2qoXyud0VHky1ww+sCQ0et5p5z7y26WneVzkadnB0A+Dl0v5Tn3Xs0xwsjGQlxUVJkTUE+Caw5XunwR06yOg2w0B4hmx1hkQ7lNAGBoB4ZeIgtwpe3K9j4K5PawE7Jw5PbokuiYqR0tNngwZLLWX/JCD8EKOsR1ofUezF3QpHKLmSlB3iWWNRbKgAY8RPRXsnCX8DOrjF4KdA+S3kWCmgNg5CQTKYkdUPtoXOyedQ5o+P7kERrajRqpxJKWk4zuKKVnGu8p4gHhRWPXXhqLRYEuJP9rKrLayrOygkyse+ky70ZnBMzpkmZlgt3cZedLIjRWBMl7GssKBQCDIe4MbgxILOmHH7wnuCxqC3bH7hs5hqZb4sv1Ll2mfLiw72JmlWtyNLG2xZRm0MMRbTr1+wkO3jTWtq5vSuvM9dfkVDZNGhUNzc1w55VVu+7ixg/EJxV6rwR7yBaJWniNvfeGF8YlofVt27KzByVOjULHhXGH1Lth8agGpWfDLwtR+6WXwS7UySuOXaK3gl9ok6VCJi1VCLlYJuSPfZ45mUHq0yEHLfpTnIHFXQ/mOapM56ihSXHEDv8LALzJwQ6SSc15m8l7m5wv83B8J+ni3r8cn+Vw21vx0Zyc0VSUoSCcdsiAWgXbe+7u9zt+p8m6IO2qKHFGzUpbrd1UYpLJqk9qM19Vu4IsN3zZIhkiZqdXPF/pX+CV/xGXj1MN/JH3ELQ5HbY3PnClszaiLSDRaW6PJtadV+jTtgHcSnE8/3dnsfFqcfUOniHViloQ3IblcFUlbY6LU1ujJ7siYX3Kn8+awwWqi31Dtru2p7a01OmoHeDB5HUTk8/bnM58OPx15NfRK+LXEu8q7oXfD7ydsruZEZ+KS8tWJDXyDtEHuzen19eb3Fqwv31BhF7/aKlsyjAXWxC+LnwuZC+TcbFdBbqE3lp+43XK79c7gTaGbwjZX3F6amJKYXttVe3ns8sS1mfeHtta+J79bkBEzV/vZ45KfB3il+HQ23s8erxjgvmRWmcfvfTzf7wv4uNMXxMhRpvfxXMosdrnCIbtNcUQFMfj5L1hFZVk1YzSovqu8Xg8dxcrOraSBlX7t4txFmwof0p6RnJ209Th4t6PHsdEhOwZ4fdIb9XkrAmZuTmyK8u5oT7Q3KgejVVEpupsHWQ0PbmvXJwedVhcm7GHaz04V8c6Oxkpo//4UR5A2N/YjXxxhb3LuTzvGDtvBCms6bLdl2+02/VB7h3qqvXPZUefaEdR+uaAiaLGPYvEO9Xuh0lgg6MwymgJZcG+NMXMBo4+SmanUUMBV0S/2GMTp9S9Nnzo/zfqyVOnsgONLR9fnJb2b+CZpk7zJdod9Y85G38b8jQW3F98a2lSeASMmTrsStNuStFWGKsPfT9wZvjNh6Owg0yarNOhttJR6G3nS2igB+erWuk+sYFsbK5CUELA0Zjj9rubMIF3oo5H8RkG8jWH1gEJIJRl0TNndmPC41bZcalsOF27hwi1cjYmgi+p8lHQ4UMzRKDvtuI+dGvgo6bLjPnaUATxZAsMPSh79x9WTk3RUX2zji6P6efrJNAioUFat/nFUOJp+TF/aWFRy2ZkT5gQDXTc+//jK2RcV5eTZi4oK7jqnbe7Zg38sL7/z2/XTarOcrgx56+Avb7pwSvkppbGKiQvuXn273+rjE3/ww5mNbWdtHN04d+lteY5MD2RYdurvUpPyJMvnh/WzAIVJF2RYoTgRYMsQbnJGjpsb3CLoForMra5BicDHQuG5aSyEB++2mROO3GyFDgHQP77UvPfwvr2VB5/WdNgbsMkqj5ZP3jx1J1Bcc9LCeB/vCe/Upwe8tBIoFpF7bNzmyOc5F2Tzydlc3C4JVsS9bfncIEw4g3B5DUILGtyqk28UPRX6D4EvxAqZ211YkObyihM9zYf3dXbuce51Pt2pr+bjteY/wuzoQEtGYxfvkqTmwtuzbvc+kfNE7oD3Pa9pUyFf7+PTM6bbuzK67J944C/meKIeOTfH4/XJnC7Z+Zu5nFOl9VaukiRuzKijTue+mPNmzoc5cs6i7PxfM9sAP5BMBKE8KyoL+wqlQsa5ohjC2TPcvNfNmdvp7nPvce9zv+U2ursLtqzXDbjD6kHlTvETJfS1Pms+vJ9Up/MgsvZzqE8GuCCbxfYfLLNl5L1m1eaEsrIFm9WKk2cldAqgXnyVP+WVV2pLi8ZmRUO9rRXzym5oWF6eF1OeHHxpwuGfdYyNlZ6zoLZrgXR+Ue4Fk0oWkWaU4IEelm9mEalK46rcqFjpMWsbEbZgqbZuq9lDQb/mB+xPuoX57xMFfS6xRuzS2c2lewwIfCw2zFxh3UHI9ESMtmCmx1iYyLSZ6IzNTnIQzFZW+UaczoHAaGh2Hjyg7ZWpS7h0RjLNjpprUg8fyWarLWjzZIYjeWhVbdLGzWKnwqruVIi9i6BP7Fv4hInlswrv12U2lwQF5wWN6tptiYv2WqiIS98fo4DgPZcrWpK+OouLU6wK0WUPMWIzmFAYYrAHxcmyOh6l5ZZglPRDX1QZZWsIjA5OCkwKGnxm93TyD4qm+yPRkDnKW0x+c2vQFik0D/C2pNvKIhGoJHqeTKvNarMViYOPmayPcwfv4Zv4i1zhtJ4ScXl9YZdrhnujW+rFpc8tE9MFNbYD05U8teZoO41+DOdwU5P4USJaHBWMKJa+hiw1qA5nfoEjq8DhK2DOrHxnYQETyyniB1U64/p2iXrCUedD2G2muiKNOxGL1skLHEW5gWjm4Afll65qm7Y0UdAwibd0NMcvbm+cL998+OVN4lzjU73jOn7Qy29vqcnnkcN39s6onyqZTmuQIrSvAh49CB4NSk+qPLrLYmE+l1H8IkkWEAQk+c/bGEQYreM1V0IjVB5Z+aj2WC35ZouluAj1bNliiS7bbcwqE+a2yyiJFMzvoAgEqZ298SP/q4cGKt/Y6xTnY5MW1yzrPM+3vLJXfHheV0xa6Oycumxvti9kKbYWZQVdYU/QG/SNtjRaR7saPXXe0b4p5smWVmubp8072XeB+Ufm2y0/9t2Rv6n4P9n95nstd3vv9t2f/1/mnZZd1l2eh727fY/m7yl+2fOp9VPPl77yTRZeLHZXu0cJGq9WqT+m0okTVRqNqjQUUmlWlqDJpLdglKN4FVvGl0k9hlXBqw1rszYUW0abR1lHeRrznzXuKfpvn2mddb3nOq/c4JrkkdyebL+b5Qf9zGXN8mMWXJtMWHzeoMfrrbJYsy0Wa77PF7aYERI/MaqYYZK5XTCbmNHntXkGONRTl5U7rWHrJusu6++sButqSz4xsTNprNxsfsT8Ambvaot3pY8+TwkyC/rrcI2yaMdJiPbX1BF5OKOOWfbAXRrgT+xyFvPeYnU0UIroLod7VBEJVq8zHl+67GPxlZPvsOddL3je87HvINFlHvUH1lReJ+l63df4ioq2CDvpm1r1T7C++vXUTmsw194M4fXew6CWsI02pN+ClWKljzWs7kZzEGYKoH3nytVzgvSTA2RIuN3CYS6hHyHQv6miT6iy+NaCaCzn5VfyzLbiUTw+KjtUMPhobPCR3NJAVo18c6QkGKoaNEr2UwozLQ5bJKJk+Scc+kA21Fc6LWbyjVP7DTswWxLyXm22lBT5szKlBC3FZDJLiceslEYCRoeR2Ly5ubIyr5E+4tM/49OXXkqgPVvFuYAC4VKIq0ccFTKrV0+JRWGlovErEjzBVkZ4xLaylJfa1NYTifKioopybfWQ7tXc2UyHIMTNsoTXIUY1f5tLfIxV0FyXG4WDmRWJBiu6Ki6w9FS8H3m/9F+Rf5VmUIF+d50o98v8wKiiiorYwvpCrzeQH3JWKNaSwpJESWPJGfSP3Hl+WmK2RRrCDdHpbCqfZppsnhieEJ1WOi22ztTr7M26PrKudF2st+IO581UOPKo85HII6VPVPwy8svS1yKvle6rCDCDYjLmKHmWiClqKTXG6vLGO8dnzTCcbprjOT223rbBuc6z3rs+tC6yrqS3Iu86y7V515XIdksHv8x5WZaCOYG3GYlYuQmzwpmX5XcGQ0X+IIsl/MxhzfQ7Al6/H279tdvNpVEo09XJpCcSDppNZospHCvNjsVKwQ2RaJXZkm02W2CdeHPC1ki21RoJhcNVHm+2x+ONlYS8cNYx/6x4D4/yA5hEfn5ge4A7sijmZJmwTaAFnU448EEmUSJnCRTBJPU8yi9kEWbm9yUdpUl0NhwutQUPORZZ4VNt27GHLYqF6PxbTjK/coaXb/byx70vet+E1LsxXInpnf9w0BHhTrx07dxX5FHuZCUsBzM8I2mt7CrhyZLeEqkEBtIOy+popXk3prkZ5pQ1yEp5b+lHpRIdYtuJqqWbTWLZa0aM98Y47QUEY8lYX2xPbF/MFOsuH7KaDtK+n9d38PB+OD1LtbmNJB8SkO3Z74MpRdB/CIl+FQkajkws/dMwNXxQ9bOGvqWk7+DNujgwp6fET/x5ZfrV5DQ3mcXvT9Jug7rZEIe4IFlR4szOaCbHhI4euklOFDbmpZFsIh/15zVGiOSI2LacoU8vNclhVAVHVHxqKcSGLki0OA/Jqhyx816o4aefGeWJ5jbxHZP82eZ9T2ZHG3nR3NjgC7F3Bj+JDL5eeEoT5IniLwgkDv+dP3RdU16mHInIec5Qds7hf/Av64Nu+q1B+wWH/iZNPvywLE2utZPNmDE4Qf4YEqZmaB0ZOiBeJrPLozxaCL0sVlOyIW92ZYlgFgUlEZQoWCOCNQO6yo4fjB/Af82VezvFkvARze23xFlhdpZ0ZQ2vYS7IlNCVdA9HdnYtY6Nqh0TLG51Pw/oiybJHXQjrc7bPnvc4y0/9i3lTHzEfhtPq1LbDt1joBF1m/D9ikntURe7C+msMa42SxWJwmb1mnyWe7SuxhF1hX0n8FF7vqsuf6Drfcr71Au+5vgX55ycuN19hvcJ7mW9F/uWJ9db13tvYbZZbfbfEH2X7Rr1jDGHmx+OJsjIrF/rQS0o0UaMp0RJz0OvzVZVZs1EgEY8L9RkvQ5Uyn0WxmhOgXsxnc0hTpFFx/hy9jVaGGgsdo/LyfF6ak/kbrPxN60e0cNxj/dAqW1c3W6ZbuiyyZTXMx8xkYfwVR5A7gpuCUnBDV4JXJpoTUsJbO+o/aQudts87l03b37l0/+GPO+lU/WFt23za4f1xdd4MfUlvTpsf9DsRGF/PyacAX0q6Mn4ihSc0njHt20OyFxvoq2L8l8G35JSXF725N8tkLo7zskipx+Id/H791pljpjZUFTWWWv0Twy2DDzuKvM68WrBwtDDaNljDv4iVuiw2O1Sipyiz+dAla9e1Jspqcx1jOzZJ2wMVoQxnhvixZePbr254/eCnXY6mT/DCxY/j3/124VNEf3vzquSXKw7/wHmWeSaiFpRX/0Fi+ud4iwbb2Fwn+3LF5791njX0DxVrf06DsZGLf8dS0vEA2y+3srUKYxHgIuMDbJKxkbXzpWwm8mYDFUi/QbkG3hdjlyA+C/QGqZHJSJ8CfAQkgFlAEDgHmAdMBVYBM1G2D/ghtaFDvp6daTqLnW34BTo1hxUDUxAOKW+zMmU5K0J4EsVxv1q5kJUhXIy8mKkQZX+ReofyUa5YlJuDestZL/LHIm4DXKbrWT6oA3Aj3Yd27qc+g7bLT9Kzpj5E+FL0YzLCX4JOQF9bQacifTrCpwJ21GmSGlMLEM5C+FSMTRbCGUAb6n1OdVDejj4uRH424hKVxX3toPlUFm3G5Fd5Pr+D/UR+lW1TZrNs8dy/YJn03PTM+jNR/6lPJ8AE6l861P4JUF+lI307BtIwLJJrxbu6WnvWH0l7WY+8OfUPhEPGbNZGML3K/Hi+A0CjspB5TYWp99DHyYYdrA5xM+ARoDZ/xK6VP2ZJ5MWNt4BvFrKxUjUy6lJfSN9mhcYIm4jnxXizKPreQbwHXgij3CxRfyHzK+8wH8JJArj+XTFGKibh3beDjse4f2BmqYNoYzwB7TwCPIn6ebh/JY0BvXc+Z3ALyr6PvMuA5eARL5CH/O8LHkYdqo/7tNA91PfAnIIHAeI9oEaH9n502HSI8X9AIBfIAxoAuu8twKPAaUAhlUG7uSjvRz+uIp4h3iT+IN4Q/A9+EjxL73E5xoZ4TJ0z90rnsnVANpAwMnathjKUFfOF3iP1meYCtU28RTyjU+SXaHx/gJ6TeCqNhgwJcW8xB4m30miMeJ+onBTPEJP2sFOJZ9Wx1qnoQxvNR5oTOtX7Q/NTzBFQeTFz09jRe9epPhZDdDOLIG+q4TU2Ualmc+VnwP9nIjwDtAHjc5eYgx8q/8H2S2uZZNrDEniXNHdvH0ZvI5he5heivT0YyxJlL7td0JelYuVlbjBsSb1v2CJdpUIPp9Ph4HvUPKKE9Lxvmv4/gfSKYQs7F+G/Gl5OpZSX2Y2kJUx/41VAUKdI7wd6gTJznN9mXswHTGcwJ/jmY2CJkmSjDUnWoOxhzUqOmHcRpJ+BtiuVxWwM6sl8D1svn8HuNm5ho+SX8R5xL+kVdg2B2gftGeKj4Tx3LC8JqvPrcSjNAbtOxZxqTP1RzKvG1JtiTjamBlXKmkg3kHwW+oEJ2Zyl8+sQX/6YlcifpPHnMD5N488xqOcczpfDqaZb7Po8RZ1c0jX0/EI+zhHzScg55PXr5YfTofoPsAHpgdTvhRzey+br8xqoBiLI/7kmRyCH8b5Jd1yfOtN4WepMeUrqTDznLuN1oP9IbZeiqW1DOjXCajRZ5tN1KY2TYS8rGNKjETZdk2cR0qfK/dDhqh51C/35F+Yx/EPIthrRX5qHNAcrIfei0OOfpr5QXOwSeT1jMuYlpYNHZlKeYmY58p8gc6ewFfJdqZfkG4QMapMHWYccxxxGXYyZxyCxAkMra0cdJtqjMqCURv03KuBPkgWTEMe70uUyvXvjF8wORA0fsHo8c8TwgHjWiJDjt7EwjYOouxJ6BW2Z4sylSCyulYmIOhfDXhDjARmYNhaabh5LbRpPFzzrEHVqU1+YXayRYLiP1eP+EXGvSWy0uZGVGOakPhB2hYudJv+CVcmTWABhn+D766CjYtCXk6AfAfltYBC86VTjQlcLmvpc6Ps1Qp9nGCrZXGFPUJ6R+Y0xVkFQQsjrZuXyfWhnCfjqC4R/lkoJ++ANlkX3RvoEzT4hO0ES8+U3qPccK6c5Rn0Q+ob6cwf47UUWIJ1ouhtjaKVzDF/nL6X+a32MQ7WmXpBeY3NAx0iz2VuYMlsRXkx2oPw665Lvwfvbyork+dDfz0A3joEOn4Kx2sfmyS8gXIz0u4BLYfutYA7FwRbKf0a5GuT1oN5etHE38gnXos4fQH/GTpV/xS6Q98A++DPZCKxIWQnaCbSy8fxBtlj6nC021kMnj9HaJ6xIdQjcDb35Z62uBtFXHcfr8xWw7Y7TX9HX9H5SH4/TP9EPtCvqoYyiMAfG6Q9ARKWDM6Xr2RZgs/Q6yk5jV/D7U7sxyBOGYVJ6XKnjq4AKpY49DFyNcAL0v4CtapzdAfweWIu294BuN4p/iI4zaRz4GRRpdwG3Ac/reemg+xwvPR2G/NTuo+I7oWsA/nFqN2F4eeVqVo/71SunpnYT5PehQwDjGpZtupRly1Gk+1FvWNyQDzm3k4VllvrsZH36KuCvKm0ck1/nGb8uaO6Sfv53tfd1IV2f2ot3XCn68AHkseAh2MavpF4FncNfgd5eCVkKIF6OuFsfT/09If0mkT7s/YFXGI358PTh8eHv9WRxaTvrSofOB0P8cCMbS1CaUR4YHjc/x8YSjM8g75lj48pPT4L5sFHuoD6BB6PHxo3TWZQghdFXH9XBnAOG4i9CrgJUVtS3Q18CNHcJ0g7oYmAovw4yH0gb13oaV/kONV9/P/p7Gf5+0L9q5QXWAloCWgU6S4sLmj5nh/P08DRdlhyvzLC5UXWiNv9fAubOr4BfAM/+/30vzsCrgBMQNuoY+OB1sDnn0FLN4V8zdigb1A29gJl3CHr18O8QPgeII/ww0m4DXQcKUXNoEOkp6BEZ9C7FB/udsXUA2hjsUese/hS4TG3j8KOMffnfGlao9Q/9AMD7PQzL7NAO4H7gZ0Ar6ujt3ID4UtCfIz5RbesQwof/BFwHtAO3qvTQ9wDKt+Aer5I9chw/9N9KT+R/fF2q+xk6PcaH+CZ0zNeiR/ka+vs/GdV9ieNQMQ5a/41p/flKH0en4B9LOmBLh8imJDuabFmyn8l+HKLkt00S1K21o1MH6UCyncl+NdSK9UbygeJp/mCbrjfSZSv/mN0FOIF8jS5Gmc/h67wA2eOATP0Ez3cPAXE36TVQsj9fRNgBXfcElQHdi3gh6Ce6TtNl6zEy9iQ67d8d/6Y68n+gU2s0dA3DidJ1nKJhMmG4Lv6mOJnu/h/r8hPo6HQ9/b+N63peh2UsqyGYkqndhOF26TF2wEniJ7Nzv2l8uN3xjePD7BI9PhzH5A/nPd2e8cEH1jFs3n1TkG+h7Dxi++t9GD6Ph+abFscYtaUDcqAUOisG3A38EzKjEHABNyJ+lfkQqzE/xGoQh15NkR/bDCykPNB6fj2E26epw4h/B3GnsleUnadh4cn4eTjfkn0u7EOMmZCDG6n/rBIYA7iAbcDF+rsm3xP3/rP0GGPk5yrzU58oLwDDbMCT0jq2FHgIcQfiDtoTMULD07oG5PItGmVin0Zf44OsN64VZVrF3skzYr2vUpHYGcry1MXaWorLGGN2ySTW7EL6Oh10UTmtDRnXUVrqSn392HQu2l8HPVCLdmntm9bAl7NL5ELoh/tZUNrDFG0NmelrybQ+RfrK2Cz6kTG0fjyDxYFmbd9khrZPVSb/gI2Su2mvJvU5rbtLzewnfJBZaT/Cij5aZrOQ6XrWCiMqZipAO8vYqeb9qXdgm71jbBT7OVN1vUo6UQ+nrf1NEmN1ZE2zWNsTOsomoP6hXhGtx6TfV69nuh269NvqOl26Lj+RbSM9kHoJbf1EXyM90XrnEB2+/j58nf5q1i7H2OyhNVnS2b/T+q6N8fC+6PcCTx74ClvIre2LKUol3lll6jPiMW0/R+zDKepe3GiDwqbSeiOQVHawpPx91obnrBoqs1nsbWWhLPnY+p5bPvEXrUGC1gOltB4s9jA2iT08i4Ys8ECV6MsX6r6ZwQrQuuPF4j7/PAKxTmtX93dS/5T/AplGoHU19Icgr07dDPo2jd3QXuBCdq781FF7ghny35ki9gQ/A/D+gSagU+PTTm1uTRJrh3he8YywqfBO16C/H8s9kBfq+IiyxsWs1fgU8BLGZC3k/89YtqGaZRunsenKdXjmK4FCpL8GO/ZG5gdK+NjUb/njzA8YCFIH88sXY251M4XW+6UDgLavpq5Ps88I/BDqAMo1LKrtS80iSA/wIm2f8FItXKiGkdbIdglobQD3pQHlUh/KmXhf83Dv2Wh/O/o4A2HcR3aCL4YBdc7RQHZ5HvGNMhcy6miMHw7UJVo5HEgnGhkOLd03HEgnOm44kD7uOP04UbkT9eNE6SXDgfSSf0M/TtRuaDiQHvqK/rUPB9Lbv0E/TjTO4eFAevgr+nHacCD9tOH9gHx6F3gCfukHoPClUzeraSnybaFdBt+hdWzgXC3+llZu3RGIde9vAZ1qvVQXysDnTR0A4IukZh7B4JPA99Q6+n1S1wKLNFvhBbXu4KPqvUX/tHuKunpfnxwWzwV2qvcT96b+7wYNAXdoZR7W7vuU2u/B20C/o5Y/vF99RlHvqSOgdYPU6cgPgKJ+6nlgFmACcgBaN/gceBFhL+gfAVqPKEO8Th2XwdeAPxyRC+x1xcVmyp8K3eg2BVSq1AuZy6DrrGm66hLI/EI6CyLfxPKUOyG/fgS59jqzKpcwZoQfKuT3QeiLOMpPgay4HuXnIA4YkpCZ96H8bWiP9mH2Ij8XMhn3EHHITW3fcJJ8KuTuqaxU2/+PCJ0KeWs5G/ZLFuyTs1BvHvOb/otFDYtZOcowZYAx83j04UFWrvvCli3Q39+GTS8xC/QmM/wF6bS3pT2T8TtstLKLNerU/HPYO9A3Rh8rg5xus+xgk4xzaD1tsGHo3pqtJT3I/Ei/D3hM4xvgUByYKvaraF8INpr8c1Dax4NtY7AjPcACtN9Fe06ajx4wTob+uIVlGF/AfD7EKszjWMQ4Q/jw7cP2bsfS/pOxG+Vfgv2h+e4mE8awi1l1SvZG+noA7llBe2piX+vIeoBK9TZov03d8/rDcLtGt6PSbAqxRqDfQ38eQa8XZx8i2j10erS9MYmNEXtjD4izJRnHUK1PtI9He2m6PWu8BCgDFrNzDfey2cqt0OWb2GxTC2xahWWQfQYdK+5HOtpwA+z8ffS7JCnY5Kkq4GJ1XyyFd5qi9YjleH+vAmdiMi44ks5maHNpOuJjtbKrgAvUMOWlLtfSx2rtX6CWobqH30B4pXYvba1m8M8qUhuAonQ7VeyJwr4/Dh2y6xWmnQX5Cvq119Iwh+lMVZo9fNQe/4ko6sCOS/1VW7uS0uzoo2j6+RSUf1+jf9HSHcRrJCuG02PPr5zgPMsJqD7PhubbcPv6ROdgjk+7j3dO5giFT6fFv+7aHfle2jgJepzzB+qa3BHqPsp/Gk7FebhUasiOpXXFRpZLZwK+Cgb1rJvTOBty+zjQ7PtjYDgEGQqYmo4GnTH4KhihMQnm4PEh/AKB1FYNKQ0vESBDGcEgHx/K8c/XtenPY/qXhioV4pzDV0D0tewIyP/4KsD3ZwTTlxqWHA193PVx1MdFf269v/r99Xb/t+/xf/te/l3P/VV9Twfm5O+B/9Yond3LPV6/iQeNbuBPwGfCZqH5HNWQC575O/Ab4J8a9gmo51Ry5afBA6+Ls7ZDdY7hAzoTQ9DfiXr+xm2CJDfV4p4/oPokC4U8vPS447MX/asEYNEZa1BHPbdDttfvlQ9VvU7QZZ95n1hvyDeoZ2vH0noH+KJKeZKdq9l7z2u238PCn1bPwTpUecdahcyl80vrIaNS8AkPirOiN2r4jYZbNdvvNA054jzwA+w/0yFXwD6rEPVH437fBjZr9nZIiwOD/Wr6UN+eHzojaWAGQwyA3SAPsHL5JfB4DXQ5IP8QgL0g9nG6mFeZifgG2FZpZ25Qvlw5A3WmAWcIm2KsfNWRuS3O19C5GgKdyZmK8lbYgqeCWsQ5GuHfC78e98KztCnTmUOc/SEdRWdr0IYyGmmwi+Ru8Otp4AsPnpvQg2f/VIV8KXAt/ODbgc8RfgDp/8L4no4wfGP5OgD2qNQH/BThiaDvgm5GGdjGUhXihGuQFgC9ElgN2FXwD1VI54NOB8W95PdBW4DTgAyNnqbW4+tANwHLtHLzmUG6HhiHcAA0DvoQMI4ZqD3+ilZ+flqZs46UMa1mE6znwua+BrQSfNmS2s3fZ03KfPp1ypRd9R8GX1D9lsHnaB8HINvoLsR/dcy5AH2fXKMGI+tSroWv/3f4fXSuZzNzGMZArx5g4w0JVkTrFuknl+g8sVh7OoOZ9LVvHcZ5LMfyDGQoyplFWZVKW9Tz8/wMNU2E4W2xLWqbNM90G9eYyyRjNezICmE7OcW5Mjp3/bbQrWNJ5wv92sY6tfNT4/Cc5D/SXHge/GJFnYna/J1I59mIrzQ78GcEqYfNo/vSPoU0g3wFUfdbqk+aukr1b1NT0O6P0vaebiH8397bGr4HdaK9opOdyzjZOY1j4t9wP2X4uY2TneM4aXzYfsvJ9srAp/cr6vcG2Ue+Q8C7fyD1GAF85IeMflyz1U6VbsF8fYa1GIvEemRC1f2QlSS7FkIOwubX2puuPCtk+bBvHFKf6982yIvEOiml5wsZR2u+lUPrtENrtPo3CWI+fRf+IVhSrHFfAxmQocmWaZoM2kJI3ScViTVJkkU5fCXoTAEf/z5mw3RNRpXhWf5Dkz+bUvcI+XKTJqNuUNcM+SOpGzVZFYBO8kt3ALM0OVQNSrgECAKlwp++SYXwyx4TeqlKk5PU7umoh7C2j+GErmmiOUjfwJzMVoL+36vZBDr2anaCoCezCdPq/f145bV9mynQM25x1pe+RdjLCnSfa+hc9F1C1rSmrfnra+/jtfXm8UKPa/v6w30C2suBPhun+/MYp2e1dR6ddqkQaz5CR5syYSZDl4p1WdUHKwe1amdqQ5rfkJnm7+l+nPAz5GdZi2EC8izQl3fRXkJqjLaOZtb8ZFrrukecx/gxKxHnmEE1e6ED9G+gDm2djXzhg8AnCGeq4cO/1ny41iFfaCf9a8+DNxqeQ/qz8JUOsXzjreKbmj7pn6yEvocioM7tBNorSkOTdg4K/WTV6tkD1qpRyFyxltGg0Dc3f2LjpN+zS+Sn2Dj5alYj/5aF5e+xUcibJ/8F7+RVdiHCM5VGdp70pLpnBXvmNNAg6opvqxCn8dK/rWpSXmYx4y+A+zHvz2Uh432gxcwq/wr27ETc+x6M682sTu5CfLuIe6QcyMEN4JcVLCr/hkUNPrR5D3ijF/bT/XhXp7Ko4odt+zGbhj5VKt9lZiWTWY2zmA95BYpLlGkwLENaDur8BrKF6j6A9K0Ir2Me6sNxgT6J/qRB9EeFUcpJfaD35RhQP9LhOrbto4Bnp/4Mvx9BjEU6MC7q2KSeB34NHND7hfSjxisdoq86rkQb6f3FGOqgsRwOGtt0HPN8Gmjc0yGeWwfewxAwBvROxL01HqD3Lu9lbvHMVIae81TtufA8sIc9+vuXP2RjRF2UIT5AHY/oF93nUpSld78F9a9FuFjk1+n8JOpROsqKd+jS8rfg2Yj3yjDv6bnFmKY+oPE0PIn+/hbt7cQ9OlAXdqLoH7W9A/fW+q+0QmahLcMTSE+IMRfvStRJog21/570vgs+o75Tm3rfqQz8KWMv8xBQvtKwEeVxL/SvydgNCs1A95TmsDzgCsAFNAAZwBigSCJ5qqYVfd1yuPdEswn6/AOWA1/pxwSjDe/yZbbW8DZbK5VArpSw9UAC8AMLgCogHyjUENPySrS4GSjNuIVNyMwgGZTanflbQcn2u0Hz3+48mQ023NbQbZDh5WCn/Jy/kuoCfR907YnOWZwoPvwcx/DzGCfr1zE20fAzNTtSbxlY6i3lltR7yv7Ue6YzWY3hdVYDnVRjcLNG2x+/hCc+mMCYwKtni4HlRIf38+ueOf+6z03nz5QLofumMxt0wWnwIcNivXqu+K6lGHrvTPhEZE+RvraZxzKX4WGWYbweOvO7qc9NvakPDP+ZSom1Wvivpp8wl9HPMkz/grxflLb2rZ2rg06aSHYdnckwvgofqAE6fjabJH/O2gx19M1l6oD2zUsedF5cuVGcHxgUvi78ZdofFjpZ/a7WR3rGMo+dbz01NWDbxZi1itWAz1qP8pdeYRK/X5wjn6Cmod5M+AHQS2lpkzQa06iefomgx5z1gw1awa4XZ/5uZxOkJ+AnAOib12iFD38D8Dlrh49lNdyM8E/ZrQYP7IfHWMgUw9jksTMMZ7MWyIkW00qkv8zmQ+aElNtTLxleZN8x/Av1nmTX4P2GDNeCD55kRsN1bIVhD+I3scuNz6U+NWxH/krEkYYxtxoqUe9sUf5bymrY181sPmQJM7zHLoF/cR76Wc4H2XI+O/U39hmds0/t4x9hPFeysPEU8FCKZStnQG+vAuKws3JhL6+Eve2GnxpGfAn0fiFz8DeYw9iEeDWbQHGlFPVykdeMek3sGsi9bElOnQ55NV8uYmWIN0kTmMFYyRzyjWw25F+T4kEdD/MbaR0Z7cPfaJLzIecaEI9CRsYwHmvZNEMNcwhbB2NuupK1EWhMzWexbPNioBOoZ37rKtzzr8xNUKKpzwjE618FyNgwQX4HcyctfFI/cdi5/JOeuz/JOfuTyqaHIfMIunxaDPt4sZCl5E9PUungX9S1CLEns1PdI01NHBbm6l4dUbF+FQbmarhxGCrVPaHUKKBat+uFT5/2vRH4vUjd3xkc1L8Jgk5sgk5rOoa2pYVpfFBejrJi+DbZ/EpWQXtFaK/YsBs+pott0pZBLv1fYh+8tVJ1FUT6NTRoH2YEZoXprK/AByeG9VIVto+OD7vrWDimMuY8nzHXOSpyJMbyDh2B76qvD//lKoKvMBa6n7HoOsbK4P9U3KOiev4R1NYzdgqZ/7j3qfCJkptVjMOYTLwZ5v9fGZv6Q8amP8bYbL+KOX8YwQhGMIIRjGAEIxjBCEYwghGMYAQjGMEIRjCCEYxgBCMYwQhGMIIRjGAEIxjBCEYwghGMYAQjGMEIRjCCEYxgBCMYwQhGMIIRjGAEIxjBCEYwghGM4GuBM+Y0SDtZE/sVMzGJOVkl/aKVcZTyN2ZgUouVzZY/lB5ihSwgfyAfRLmAfLDfWBgYkA9sl8sCzS058n7WLb/PNsnvsDcBhTmR4kSoGehBOAUYUnvkP21va6tJDoDGKwTtL43VPEIZ/b6CmsflP0kPsigLIOHN/tx8kfPH/nHjtED9KWpge1l5zZstVvmP7ENAkv8ov8lK1VrbSytqPmqxI4HLVzEH5yzANstvsD5AYkn59e3hkppNT8i/Rv6v5OfYQlHtuX57Vg0a/IX8MHPh8XbJO7Wcndszs2pYy3L5eozTHlz3AW8BH9G/a8KWyD9la4ANwFZAYQ5cA0AlMJ1S5C3yFvTzXtR34FoJLAE2AApG9gGkL6arfL98IStG3R/IN7Mc0O/LNwl6D6gP9G6k+0F/gjjRTVr8TlDKv0NLvx3xXNDbNHor0vNBb0Gc6H9o8UvllaLeCo1ulpf3+wPOFj/yg0AVICN0M0I3Y+huRozhyuVr5IvEnbaB1oBerFIM1+r+opB4R6u353lrNmNIV2PoV2PkVmPkVjMFWav0MqvUMuXyKpRZhTKrUGYVRqVKXo77Laef28TVCQQBGeO+HONO6X247gH2ifTv4roR2Ewx+TKMYwy9Wi9f2F8aAJOdt70xWdP8qHwuhjopn7vdW1iz4UjMYiVGBM3UqIPKLhK5i7ZbMih10XZfoUpRanFLpryAfRuQWDauYWAU0Aoo8oL+cGVgt3wau9jMkpmBNdIaeY2yxqBUtXLXE3INm2FmYEmXXM6aUCAW6GriDd2WHkuvRXZagpYqS9Iyw2JYIq+RN8hyQK6Um+XpcpdsGEjt6TeNrgVJTjSOrt1o22zrs+2x7bMZ+ox7jPuMbxk/MhqCxipj0jjD2G3sMfYaNxo3Gy0bjRtNUretx9Zrk522oK3KlrTNsBkCJr65Za18Ds1+XJ1AD7ARUDDGXUgPymcBXXgbXRiKs+gHUHGl38xyAvsQfgvUgJgD5Rwo50CqA6kOpDJcKWcG0A30aLnGoRy9DpX/iHIA+rfBM5GaibF9C9ePKARMQcyOmB0xO0rtkw6hh05cg8AMQBZpbwHgGlz1vCotvxswivyPRBk9L0l1pUPJs6N7YrwvxjfH+MYYTzY1t9Qki3FxuVxdoa5IV2nXvcqS0JLIktIl9yrTQ9Mj00un36s0h5ojzaXN9yqVocpIZWnlvUogFIgESgP3Khumbp36xNQXpypdU5dMXTNVbsCr294fr6oRtDhCdGe/11fT4GgZI23F43Thugl4E5BZANdKoBlYAijSVlwDEMSVQDMwHegCDKjxEIkXXANaHqVvEnkUonzpqHwZD/5g/+ja6S3TIHK7gE2AjLYfRP6DorQa2irS+3B9S6RP18pvFukBXPU6sqhDYm6+dg0AzUAX0AMY2IvyXKiIudQ+rgGgB9gKKPJ8/DdXnis9hP8elB6UE0l7dU6A5eYyxlxZZmeLU8oAJ9j5/eJ6m7iuF9dmcQ0nM6fYP51i/68p9mun2KMISKWsBRk3i2tR0tZi39Fin95ij7XY0VoeK2J2KUdcjXTlfxPX08Q1kcwusn9eZP9nkf3vRfYfF9mXFtlPLaJ6BZjBdilbXG105beI6xRxLUnaAvZnA/a5AXtDwN5i53dx3J2NE1e/uObTlf9jh6PVwSyP8n+wVrTE+5tigQGJCcJT/U0tIIP9TRNBDvc33QXyRX/TTYHH+OdcKDb+aX94f6Alh3/MJysU/6dG/84nsy2gH4GeB3ofa+IR0Hv6m66m8v8H9e9A/G5WbKbyP2EzRL1NfLJI/7FW70f9iXNw1zv7E1fgrnewhLjrrf2J/Ui9qT+xHuTG/sRFIBv6I9TBC/ubygItWfw8Fpao7AIWkagnU7U7TkLLF4FOVCu39SeoVivdYICP7w9Vg0Spl4/xEJshbhfoD4mHLGQh0UQBC4lO57OIoJncITpvZ8WCmvtDV6MV447I/sBnTY/Sg7NPuKP/rsDbj+H55iD6Zz65f0vgN4/QcPUHXkwM8MiuwAuhRwPPhAf4nP7AnsSAGRlPJAYkvjOwDYPch7IS3xXYmjgv8FBI5N4bQi5e9aam8sCdofmB2yOI9weuTjxG3WAX44nnILsjMTYwtWlLYEJkgCM72YSbJa2B0aFlgUYknzLAJ2/fEqgOD1BXqtDGll2BMtyxJCS6ckbDbqmOmfjKZMK0wnSOaY5ppmmMqdZUbgqaCk0Fpmyzy+w0Z5ozzFaz2Ww0K2bJzMzZA6m3knGGWZhtdBIxKnRVRNgp0VX8lDUkJTdLmDt9brldap81jve52ln77HF9DfH2AVPq9L5T4u195hnfmreN8x92INYnrRvgbPY8MCglrc3vc42f9wjjvHLt9flEV629vqODt/ftWcDazwn2fToLz2GdOb/PEBrnYbmXNnuaXWOzGie0HufSrV3jR/488fQ/T2HfLe2z5vU9UNjRV0OBVGFHe9/EWcEz5z0iLZWWtLU+IvUQ6Zj3CL9SWtp2OqXzK1s7hoqxYqkHxVgTESq2nRVTMVbMt4tiU0UxsGlxW+u24mK10FN8MhUC+zwlCp2nthXGLdDWDCIoJvlZWLQVlvxUDPygNuZIbyyDcYdozJHBRGMFVGhbJIIiiQgV2dYQQYFtkQaRveVIdiiidqeDRcR9IrxD3IfzI2VK1TLgAq2MZEaZ+L/zb9G4b1CYbz/7DwsXtC0KtXWH2hYB3X3fv/R8T1/vOcHgtoV/oIxgn1zSfc6C84mevajvD6FFrX0LQ63BbWcvOE72Aso+O9S6jS1omz1v24Lkotb+s5Nnt4XObu3Yft+a8e1H3Wv90L3GrzlOY2uosfF0r/vaj5PdTtn30b3a6V7tdK/7kveJe7WfPo63z5i3zczGdYw/U6XbJZsV86E7v6hjXK6zZ6yYHGOKPFfl71YY1JYt3tGXERrXZwcoq7ylvIWy6LcgkZWJZIeW5blqTFH+bn6/luVEclZoHIszT9sFrUP/L1++fMVyuqxcGcd1xUqPSFyBWVs0q71vwsz58/qa+pra+pLdrR2c3sdK7W/8vKTziaYXm6QlTWuaNjRtatraZFi5sgPJrieKXyyWuoqXFK8p3lC8qXhrsZEyzpy3K9m0qfjDYnkl2ImvwF9bq7jnSlD8T9EVK6k3yxlusBxQbxdfGR8/r6WYLYDRy2GglzM3EAJqgVmAgf0c15eAt4F/Agq7BtebgP8DbKcUuVwub/Nc0Ep37IiT1PHINdur6mpOGQA9+1yVzpqv0rbTVNrUUuMB7W+utbY4YH9zthvXXwGvA38FvgAMco1cIxpfqbJtx3K2PM7RfYbICrosj6/gcQQ4DfeK5fE4IxCH4xWgaJwfzfiML1/JMBR4ISAoJFKXU7WVRPU/ZFAr8f8PmZdYzgplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8Ci9MZW5ndGgxIDE4MDc2Ci9GaWx0ZXIvRmxhdGVEZWNvZGUKL0xlbmd0aCA5MjcwCj4+CnN0cmVhbQp4nO17eUBU5f7393nOMguLAyKyycwwDIqI4IIryrCGYoqCXXAFBUVzwaXUTKVFTajEQut6q9vqLfXmMJaNS2VZmW1aluUNt6vV7ZZlpVYmc97Pc2Ygvd3be3+/98/XM37m+zzfZ/vu5xwQYkRkpjqSyDZ1dmWtceOTO8DZSqTOn3rzQttH6194hshgQ982rXb67P3zehQQhbjAq5o+a8m0taM+6UIU8SSRqaCmurLq6J7GUKIuX2OPfjVghI8LPkUUn4h+Ys3shYt9j39xE/qFRB2+njV3aiU5/mQh6tkX/XOzKxfXGvtLWD9UzLfVzq+u7f0P937084iMY8Hjurw4EPKixWIAlQJMUK7PufrCoCQrqsFoMgcFh4R2sISFd4zoFNk5KjomNq5LvNVmT3AkOpO6dkvuntIjtWdaeq/effpm9Os/YOCgwZlDhma5snNy8/ILriscNrxoxPUjRxWPHlNSOvaGP5SVjxs/YeKkyRWVNGVqVfW06TUzZt44a/acubXz5i9YeNPNixYvuWXprcuWr6i77fY77ly5avVda+ob7r7n3rWN6+67v2n9hgce/OPGPz308CN/fvSxx5948qlNf3n6mc1btv712W3uZs/2557f8YJ3567de1586eW9r7y677XX39j/5oG33n7n3fcOHnr/g8MffnTk40+O/u3TlmPHT5w8RbJSBk1fgx9VyqPlbAW7j2k8lvfn+/kBfkxaLtVLd0uPSe/JwfIoeYI8WV4XvzL+B1snW7wtwZZkS7f1sQ2yZdqG2vJstbYltjW2J21/sW21K/aO9kh7gj3J3tM+yb7e/nQCT1ATOiSEJ3RKiEmwJiQnpCQUJlQmVDu4w+KwO8nJncFOizPCGeWMcyY6ezj7OjOds5x1zjuddznvdt7vfMy51elx7nLucb7mfNt50HnU+XlSZpIrKSepImlq0rSkG8+pv8iaJvxPj0KLSzwKWrwBLT6BFndCi3ulJ2Qmh8qj5UlyY3xd/Pe2jrbONpuuRW/bwHYtFtpW2J74jRbj7Y3tWoRBi+iE+IAWFQlVuha2/6BFcbsWjc5HnZvbtXgLWnwCLQa1a1GdNPMc/cI0TTtNpEVoi2gZTSXyhRFdfrT1h9bvW79rPdf6UuuLrXtad7c2nH74dC9/qJ5ceXLDqYsnV5765tTZU+f/PkXwTtWfuutk2KmUU/Gn4k7MPLHklHLy6MlnTj5wfMPxx483EB3/i74y6vi845PRSz+RfaLvCeex644VHBtybNCx/sf6Hut1rPsxx7G4Y52O8ZZvW75u+bLl85bTLR+3HGx5q2Vfy6stu4laPC2bWx5pKWopbLmupXtLt5auLYlt2UOvtqUSX+zHv7/4TD6H3/obbi2/hX734rX6rPmB3hz6X1180L/lduOoLahnT9CdtJI30Qb6B62ie6mBHqZn6EmyUD2qxh10P31PP9A99ADdxSQ6Tt/RI7SZLtB5ukiP01/pAO2nZ2kK/NhIVfQ2VdOb9BYdpHfoXXqPvqRpdJgO0fu0jabTOVpHR+hD+ohq6Cs6S2toJs2gG2k2zaI59CjNpXlUS/NpAd1EC+lmWkT/pMV0Cy2hpYiUW8lLj9EKWo5svo2+pm9oF1OZgRmZiZlZELWSjwWzEBbKOpDGiFlYGH3JGAtnHVkE68QiWWcWxaJZDItlcawL/UQ/s3hmZTZmZwnMwRKZkyWxrqwbS2bdWQrrwVLpEn3MerI0ls56sd6sD+vLMlg/1p8NYAPZIDaYZdLf6TQbwoayLOZi2SyH5bI8ls8K2HWskA1jw1kRuamZjWDXs5FsFCtmo9kYVsJK2Vj6hS7TGfqM3cD+wMpYORvHxrMJbCKbxCazClbJprCprIpVs2lsOqthM9hMdiPtZrPYbDaHzaXP6QtWS5/QKfqUWugYnaSjdII8tJ07eRLtoBfoNd6VnqPn6XW6HZG6msn8Y/4JP8r/xj/lPXgLP8aP8xP8JD/F/85P8zP8M/ojfUv76Cm6j7toLc+hnbyOPuCNfB2/j9/PZPoT7aVXpH9KX+GuV6IjQUBJoyjk83HgH4JqudonYlxcUo52Vv2dyFU+/93Y7frfRDh7zI//cCVSFmXTWO1TRNN0xF0pZSLOCrUXSSYna2JPkYE1kZGCKZcOwF8/M5Je1fZSIfpTaCOi9jwLlx7XttC9mBdMHyAankJGBFMcueht+HuZdBD1IBi7dUKc5LGllERlWJUGnzVpL2ifaudJ1O1EGkyTEb8fIDongyfOHAV5KtgQHsGnoRdDCeSkYYj9JtoJa79OHyHWhPeF11ezbbwX3yoFSa/KFu0trM+iEciFO2kTbUUedECc90eUNbH12he6ROnYfSS0mIGsugk5fBARc5F+ho5BiPjukHUqW475n/BRfDpfIq2Rt2lbtP3aD3iOSKQ+1I8G0g00HmsX45z7UA3WIwoeQow0I+8P6Fl+EPn8KeLxHLQKEtkHKeKw93DEeQUkv5ndylaxR9kBdoY/pTSp6zTSZmjLoH8QJIyEXWxkp17Um4bC4oVUBIlLaSw+ZTQJ9aMG3lqIz02oAysgxUp81qFePUAP4vMnVCEhzU7aTXvoFcTvYchzBHn5LSrXBaagNkQh55Og6whWy+azlawB988m9mf2BNvGvGwPe5H9yC7zGG7lKTyHX8eLeTm/hb8uMkWSpX7SCKlBekDaKrVI30jnZS6nyYvlfUpHJVc1qPf7wnwHtRAtVdsAy23TDsByRupIXeBJB2yYCH92oxTdktfjMxIeHw39SqkSXlmAz0L9cxtq71pE28OovU/h8yw+bmTxi9DoNVj6PeR3C6z8DeLxB3zOo35dgsU5k1gXVDF/DXOiSonalI1PATxwPWJnJpvHbsHndsRPg4gNtpE9hc9e/XOYfci+ZZdYK+/I++GJIp8XwAKj+DjctW7hdyDzn+JbeDPsYJSsUl/pZulW6WHpL9KL0svSKemSbJadcje5UF4k3yHfJ7+jkNJBqVSqlOnKQ8oZ5axyWb1TfcFgMUww/MnwlTFK5Buy6OrrK/qK5QH+sULtBeqqHSWzdpH3olLkXbp2SO+N1Pk/4yk3WDvPGpmXLkPzvsin1dRLa0aGX6YN7AN4eRkbRk1sGS3id9C3sEENewd3hx2o1LcgPvewGdxOu6SFtJwH0X7cC9bQSdw7uiE3prFHEF9rEUVOVsYX8kw2hv+RH6D+fBRtlTbRedy1N+Hm/yPvQZ/xUu0LpQj36Cj6ntWzegnOxz11K+J0Avy8FX50UxhlYeev2SB6D6e56E5EYCmNkdPYP2H/eOpPQ3km78xD2E/s79wpL/29WqeWIlfwrd5EfVB3rb4vfft+HQUnmspRg4+JHmqA+D7l+1Qr0GJ9u7DWKqVoh9tma3Tl2v/JZbyirX3GXpI3UJS8n8J1yQ5qI3zvu/LGlpYU5uXmZLuyhg7JHNC/b5/evdLTeqb2SOme3K1rkjPRkWC3WeO7xMXGREd1juwU0TE8zNIhNCQ4yGwyGlRFljijHvmOggqbO6nCLSc5CgtTRd9RCUblFYwKtw2sgqvnuG0V+jTb1TNdmDntX2a6/DNd7TOZxZZJmak9bPkOm/vdPIfNy8aNLkP7njxHuc19Vm9fr7flJL0Tgo7djhW2/KiaPJubVdjy3QU319TnV+Rhv+Ygc64jt9qc2oOazUFoBqHlLnDUNrOCoUxv8IL8Qc2cjCGQyj3ckZfvHubIEyK4JWd+ZZW7eHRZfl6s3V6e2sPNcqc6prjJkePukKJPoVz9GLea6zbox9hmCHWowdbcY2/93V4LTalICa5yVFVOKHNLleXijLAU93WOPPd1t5yJSu3hZZtKy9ymXC+j0rKdNFyrax5Wl5dXLk4Lzy1bfeX0WKk+P2qGTXTr61fb3I+OLrty1C6+y8uxaWqPojFldkjtyL/bJtQYU6ZrgE1ZVBqEFDyhpl/hake+4FTMtLlNjhxHTf3MCjgrpt5NY5bYPTHDXTu1kzQ831ZfWuawu7NiHeWVeXHNEVQ/Zsn2YS7bsKtHUns0W8L8lm4O7RBoBIdc2ahuH9Nb+nTRgtRtpmZCIscwhIjbNtUGScocbu4cIL6qB1D91AGYhqucwaIzYL+Kessg4QjFidel+guEQHCc/fpqTmWAozotF0g0CxCY9fUFDltBfUV9pVerm+KwWRz1zcHB9bX5iE0qLsMqr7arIdZdcHe521JRwwYFQqNgTJG74+jxZRCowFZTCQ7+ZTnsECysvG1O8X8aJoQLggY6D3V3757aIyO1x83uIketxeYuym87uHxQGpxpt4v4afC6aAo67rrRZf6+jabEesiVllLu5hViZG/bSKexYqSubaR9eYUDifKc/v7UyW1Mav/XwRLZMb9mkJtF/s5wtX8ciZlva5YVZ31xWVJlfUNsUkX93eV5/9mWRUW/a0t3nxTdAO6OuWVSLC/3t3isJGIAxssXqEL5aJgpgnYmAlMGsdU3VKPhyLtbhEmeqAAsv8aRP6Py/zarvj6/ypFfVVmV4z8g1+0q1QmVjkOKOuE4V2VeeYAVmIARWR+pyCsXYYeliNVcIZujsi1i2zkVAQ4YWIZ/wwIEYiHL7TbsPLbMHxJebe8AgfJYHFMmRkpFzPhZge5VE2MD7XJcflHEudUD2o/MbWuWOIpGjysL9NzhVMSKSqE0al1Os4PdNbrZxe4qGVe204IH5LtKyzyc8dyKnPLmRIyV7bQRuXQuF1zBFB2b6IidxqBj1OfH7nQR1emjss7Q+1NR0HSesY3HaKqX+3kW/0FJ+kEu4hiR/SOuttkyeEY/r07n6Vcz8dzSMpdZcRldJlcwD+GxzUywPODsQuSaGG0Xb6KxzVg1Rmd7WV2zyRXrn1GHGS6/hHeN/fXosePKtgcTlunfOChHXIj2qBoYsUzEfJXbVVx2a3lNfQWinbjIEjxx4TWLDFTcrMheluQh1bCbJYkfCfLg5yWJzKriZc4dksSHmwyY4XyO0TDjn3fi0SMqZaTlfOb1FzJHWi5mXm+5kElZmZbWzAuZaPZKt4fZw5z4YrDDZZu097JLwUurTd4rfvqRyIN5f8mBk+NcISQ1MJx3uyLxsTK2wqaUltmKPRj24P1bz0oO35esM4Qq1E7JTJ2PZ7gESnZFHQ1nT4ezqNkWyTpbDUmYztYnxk0PmuewXDyLf5R1Nutsr/R5E1lYRCh3JPTkGWF9+/Xr0zueK32THAlqp7CIyD69+2XIrNtyz5x1e+enX//ZEys/qHH6ZkX3TO0Sm5oaJ6e1nvE+fZ8r996Ht/CME8dXTVz1dPpt2fnLLv/znkF5i4Qu/WDAw5Aphma6kijaEs1jpkuSYg1loaExptkRkiTFzOYxnYMrQtwhPCSEq3htuN9lUqd3Xh/HQ+fFCpUvnj0TFj4wbSK+KO3swLSs1jD0YAGD5SxS3C0iYbsqWXjnAeXgQiV7BoVn+NXoZM/oO5T36Y3nIDzQb7uMJ/X1qT17pvo2xM1xL/3uxwbfVhbh+/oLvor1uSEnu/DGjYPvevjBkd++0OB7y2cSP9sNhg4/4K3bTCE0wmPiIbtZi3gVYW+8oJrVELPREPQiOAox9iQCx769g3FzqOVzy8XL8FPYwIEBCXdSiHZyQDmlpcGHrZm6B/uEOcJELLCOYZJUt2CBb5bPxibe4VFLfjnu+9p3Gu8fEXLCL8d5c+so3cMn5XBY04n3x8ydZGZPu+LZx8mzQ0KU9NmdJWV2QkgP8/T49RlsOiVNp7B5fWG+sxb4uzVTOFzY7eznZ3qld7RHRArv9ssIU1VHQlJSht9I8Tysk0WEQ1IS87s/zG/FQtakpjit3ZT4xeVzN/eMrX3jjscPzQ+3LP2gfsvRyawpI657V2dKzAD27LzB3ZIyxzOenb346bW3bd50z8hxz+zyXTjlO7Hv2T/MeZOvm5Y+pJw5b8zpU0tcvL3LcbCtgYLZGNeMbPMfzLVmiVgHNZIszKpaDbGmTkGphu6mxKDlhgbDQ4Ythg5iWAy6yMVGqaMMFTTXMJ+WGW42LgneZdxpej5oR/BedlA9aDjHNPVicJTJpASJfWST0WgOCg42B3u1c64Qo8UocW4OlhXFrAhOF24xo/gYjMENLkmWDQrjXFFUIxm4wUKYscNgMIsf/u/iq0nlq10dbMoRfiTEHBo5J8dsDg2JFnGacubzITFnW6MGpole1IABSH0kPz6inxnTKugANmDA6mWW115bbcl8TbRDLa8J9EovcncoLnsBJcaMZ3UzYjwT/8pZkbu0uMwj2WSvdhLzy9n8ifNoIiLLzUvKXBbMv/JXDiEsLLzzwHLW0S45JHtHDHKDlPKdb3SnB6J9I46w2202l0Ut+fmvzOE7hmj7lnVkTb70j0XOFmrH5RS8BSVSjqsTYzaLJdUSqSyyScGLIk0WtiKMvHzYjiTTipiJzok7+TB/rbv+rF7p/IF2FgqmQVnEuD3sqnKSYe8UEQi5MH9eRnaSU3zjY3v2jYvrldaFPXXdD56d50ZGLTq8Ztf3I6R1LGbpkOFLWy03FxaufDvrlw8eWXX2G3Z027bHJzZ+fBrSliI7eyKCgihrJ8k832WrMDCDIUhaSdy0MshoiuyYazKFwJFLQiRjddDEYJENlvPwDlzVlhXzzoqkCGv/lPKXfF8wg+9nltGapJb49vje9b3je8i3x3+iHrNB1McVZ1opy6qsGrhRNRp4EDfzarYkxKRUqx/6D9JTD5fwedpZf9n2J32fMDnON365bzx7arlwBX+6tUwtaX2R55L/FP4zTlEoxhXCV8pGRTpkYNXyRFUU8M8pLSuwGarHz4xax6sll77z7cEKhjf246hYN1Ev2uOK51KQIShOsRXF5ds+lD42/C3OFCaVymNVKSgpMdHL6139QoIiQkKCEpPiU9FSQoIsxsQke7IrupjqohujH412R6vR0RG4GcYri1Kl+EURphWMsd14byey8zUuk8VCS/rUxrAYwYsmI1/jSZ4RvZNvot6Wi+dRgSZaLqL0gAaiQ08NFOrwgQMFqK2xOrRnyurQZUgDNn8eswdqeETnyM6yeJNtK1YIIj2a+nZN6oo7l37jQiBJh3xL4h1JXSM7TWHRw4aN/sfGZ74dzlbbu3dP7trt4Yen5U7+cMOTXxTJMxaX9hyaNTo5edBfbrzxm78+ObfujR0zXx/fNyd7bY8e02smbbpt19bKmY+9QvpP+kh6Uq9QLlciU1caZCOvnquwDopVmay8rJxQvlVUmzJXEZWCbTCpaZYzSNbe4mECgRU1cd583GzT/Hdsh+586clLvvE/i6i69J3SgeUR0+tgJk4x0eM7SdX2uswqN6E4GbmFicoUzrkqMUYiwU14hZdVJGHOdtMRVQJ1BctHzGpQZFWOqgaZ/UXofNTZaAu+YE1/ZXltCIsKC7+iKGVlIiRFvbGg3qB6qIxMalu9aSssIVcWFnOgqkh2yR7eMbxjRznzSOttP7A919vtiV1EDCN+p/p6s8PsRpYqfoShP0ZFb7x7XdagyR0yL1Cs/+cbm+5745KgBzxT3/T92Do+aKRJ/DbRhPn+X6zi2xjuKyYKesT3o+/HoJHtv3ANXNIvatvUGX7wZCrkFyhRkShRrqR+SgPoQ5TIluKJ6nYqBRJ5FsXLebhtlKE9HmO3UKLUnYLl4VQoBYPK1E8eSpmShnYR5chjwU9A+zp/mz3iB/bIbkcfKlX74CyLdl6+kUrlORifRaVSCZCG/gz05+H8kcAmCse+pVIQlSp7MDYWmIxxOUBHgTqol+TGmRU0Uk7Xzqt3QtsW4IB2XkqlYJ6D9d11migdx7wbtfN8C+LHCNm7Qd4LlAmaKXemTF5MspyEdi/YRmCIdkk67G+rKTgvDcA8uSuoE/OPYf1r1J3Xkir3pBxphXZeGY81i3H+BpxzEOfCxjyFnhEUug/U9RaA3kLndp2E/EKmfwNdxs5XQ5evl/YGsAF4uV22fwXkugrCl/shiwNjhZDhBPpvog3fy9OhZz4l6siF7FvoAb5F+1n4TXkeMk/WDijPUYaIiTbodn4d+3xFQ5UtlKSup1S5ivpCPuJ/xN5PYC8n2VQDdBHywPeIvUR9fRV8c7d2SLfLV9SF/4QxQJ6NWEOMttsK9lFuh2xWrCftvBHgr2IuIGJTQJflPPUUdhcyMfL9KGdpX7D1GAfkW+HbJUA5+q8iLsv8642BWIQvHAE6QvhFj7+R2mPAW8D7uo8AdQzkavNXALovtmiHgG3AfthtEHAYuAOYB0QBD4k5UhiF4iEgVI9bxI4eowe1gyJG5MXgw0a6TaGHHudd9fwRth7OLmAu8pTDV0oyYrmVgpW70P4okDeIXSF32956jInYmXNFnPvjfx9v0v37nW5fEWdX0/6/WYscVQohWwml6DKK2L2SjtHpYPR76X4OyPMbitwW+QUaKosYGandgfhdALoRtAHyq6A+3f6Yp3DMnw37btLOIR/X6fUAOQkdC0VdEHPa6U0YmwtaA1qDOSK30n5LlSFkxp5+3uRA3vwrRW0R+X011U6327bNf6g9Iv8FBXTK56IeiNgQ+fbf0FTKEXVLrx0B3/vjAnsGKOxR2OYjkYt6PiEf9VqwmV7nm7VLGJ8oYlseoZ1TZmrnpEJQawBDYL+5mret7kpm6O+P91Jxhu6XSbCziJ8i4SPtYlvNhU523S5iDmJS6qp9qesLWdUKsop6qxYit5bREPjxgODDt4NlO/WBjUNhj0LoWKjzMkCRv3KEf1wKRz1J0+N+RNs86bTmk/uDop5KoYF4GgebCp9HY34yDebn0Mdc1JYh0iWKUL7WfGoe5J+rHdXPEmvEeJ6/zirDySyNgPxz/fkRyO/94h6jesmsrvDPwb2tVM+9eX77yDNBhb2wVulPsfpeX1Nncd+TSzEmgDXyVjLr9poXqOcBW+n5I2y14VdbyWvBvweybcC90Iv2TxStPgkqzhpCg9U7QEfSGD0fhS5doNc+0MsUK/RSLsFfZthvCXhLdF0LYXtVWaTXCr/uOaBd/bkrzUNcivO7Ij9xbxL5JFtxDnJEvR/tl6B/QcBHRAPVXvoeOfo+hXg+3afzh+j3Ov995yVxb1QfJBXrBos5Qgbdbik4A7pLg7F3IKbb6R1Xx7io4/JM1OoycuK5o1iKpWL4uVBu1o4gpp14HuDYO89cAJs3kFNuZgb1PGzzLo1TxqL2nSGn8iUQgvdh1Hs8LY2CnH8M0Afb+oH2UuUVatSfQd4FT9CPeIL8EVOULdqXyha+3I+29pX0X8H2+scEFbhy7H/K/9+AH8G9ltogf0T3CfAjuN8ARmKlhq9YOmBroxj3BFAHdMe8Wsy7XcAwlix4Tz8PzFVctAvoD6wAPoLtnOCPbbt/tt9vp+rPEFfVwLZnJvhuYNs8bkQ/g1J4f3IAKWwz8CD6ffR+MusKlJKZO0FXgn+MknEvTOFp5OQ8QJNBwymaHdXP6Mo7I4Zy8Bz7DfCZdoltQHwHaxelYsqSSikD96IsvgKoQn8k+qWUxXYBlylUGgh+IWUhv7KwR5ZUiHE5QAeDxuK811ErChHHDu2ifBr3qM+AL7WLfArkfAjyX9Tvw060nfx+6sw9lAEM5AS+V28n/9fzbkMdug3j4wA8qwJOfjGAn/yAfjrann30vMEzOLAMmAiMBTICPIEsIA8Y8t8+q18xL0PUIPg9WB4RmOcIzLuhff/5wDggH+gKFAT41wXOzcJ9LQPxMVh/xhT53qB9Jp7HxLPKlXkt/CZ8Jfyj+8CKvIft1ZWUpXTGPl9QlrqRsoyLQGuANUAKUAY4EZuoleraX6GcAF0HGkylhkfQvh9YEqCi3hb7oYg5u36FfBH4ONB2gu4APQj6EAAfKYK3CdiIfVHzlXDsU4gatI+C1Zmwz/ug0wDwVDvQAIyhYMM3mHMeWIv+cMi7KLAPIB/GHmXAogCmAAMxZsXcGkAFngsAfeMXZDNmkN14meyG2/xUx7sBeprs5g2gjwChkBP3NCNsrD7rp0a8X6EOlhorqMQ4hEpMl6nE8BOoBf1paN+PdrIfxkuBtplKzK+gvwPjuHeq+7BvA2T8HnQlgGcuQy8/zzCBSk120GRQ6IE9S00407DOT02dAQq0QbFvqRHxANlLjFU4KxpnLPNTkwzeYdAI0M3AFzTSWEwjMT7SFA5w9D/1t42v6P1RxjIahfNHQS6dQvZRxnPAZRpl9oLup1FBhbCRl+ym98keNC2AaPAex1k+IMWvr4656H9NM02FNNM4Ce3zATxLJUG4V5u/AVQqDXooADwj6PyjAf4jASDezGVkE/sbT2BfxKNA0Gyy4VnAachD/HyK55lHSVbf90N+BVTE0KfIgQLKgo+yEBtZkpeyDN+j/T74zwHPAhnodwF/tX9u4KX/lv9HeH4FK/CDmwNo+i2kab8P+ZIfytN+qDFXoO5fsOc/w4gQNs7xw1RwDddwDddwDddwDddwDddwDddwDdfw/w3EX1D/Qt9TJo0hhThZKI1uAG8de1D8HXZ2lP77nkLJRGPJLYn/N2DDdzrgAmqBOqAROAkYpGAP16zZJvF7L95CY/mnoH8D/ZvOj5WM2MuAvSz4TgfqgEOALCkYUTFixXcaMBdYAcj8I0+IZvXyDz3BguzzGAR51aMK8oEnSJD3PWZBDnpMgrznMQryroepY738Hf+Ct8WCPW3K8Fc8jGNwr0cSgy8L8bz8RX9vj+jt5I/zJzzdrekv8SeoFtgLSCxyR7XVSkfYES8fgdEGL89/PsLqXtgb6yZ67h5o9bKxngmJIGc8TVbri7yer6HeZGWl/FZX5ypr+izXrOJZ0qymTtb7m9Kt/beU9rXSLj4X2899ju9a0de6h2/kD5KDrPzPnqYIbPuIpwm7s2pPdR/01niqRa+jp1qMjdxe3c1anG3mt1MFUAucBGRex1d40qzp2V34CnIBxYBE6YGeG9gLyO0cMV5xxcghvuJ5w6HpJ6dzL/vIM70TzpogFPLySZ6meAgQsR0qjHqJ30BrgYOAxG9wWVb1s+4AbKtcq+pW7V0le/kYVxgYq5r6WakAQUfhYUaXl8c9F2WKMjW+xD4gAzWyyfq34oo0NH5paHzG0Ljc0DjZ0Dje0FhmaLzBAAVdvC9VwShZfICgzM4Heqqsm/cEuvU8A931Xp3M8/K+ILW7WTgxvon381RbDyEqB1I37DCc96dq0GGYW21V9mBjdNlUvfuhWFpt3ejVF23w4pRq6xp/7zZ/b4lXnznRP7ME++ob8Dt5b50+ylPBR3D18sRbH8wOC7AzeU/KAR3MU3WaydN1/mCehumVXt4TpMKrL56ETVP10YEUaSR4qB/v74nsnAU+WtSZhuo0k/flGdsjh5o67OIZmJ3h4UOyshPQngtwqoNoTMyhaj6IhtBk9NcCfwa2AS8DCnXAtxXgkDRCPy2Np3siOonT0KJOOE3QTJ7Ke26PGGqamx0OZVYA24BvARmb9MQmPWkU4Ibw56CI4uog1GIDLdkxYNmAYqARkCnrii1O6pyDaGkAF+dQE+/jGWI6sRtDDLuneli+NTtE772M728BDZBwaipOTX2ee5EZs3fzZHoTvILtE4zWCV6e7DFaF+3m3SgCzHzPSsQuz9u+spv15C6eC+Pkbgdr5R7/BNbCuyBwpntBelubvDzes8G61E927+YplIRNRnmqk/2p1xsJFooYawQ4ufBdBxwCTgIyC/dUGzEzx1Od5E9ZUSWyt2N59R7ehS7hwNU4yWhdgQO3X7KaSBzF8t2I9y5IwXiYogfvLuoHT+HdIVJ/WD6ZdyUjON1AhVLxPE6f0SVAu/O47ZhpgbHi4Io4iLYX34x35Un6gjie5EoxWhONCUabMd4YZ4wxRhkjjRHGcKPFGGoMNpqNRqNqlI3ciINsA1iRe+9UKppic18scXiZefQ4t+LIYe7wIioqzYlyd5SKeFFJjntASpHXSGPc/VOK3Kbi8WXNjN1bDq6b36X/WZaXRQvWyljxF1k7ibEeK++JDdDy8pQu7qqikjL34i7l7t6i0dilnCJTfntFsRRKYTuhRlz+shl5UQsWpqSwFPDEddOkBZNYYKIY0C8MLWjnYcbCSX6qtwIz9X7K714LfsNhRcVL9sCLD6J8WVnGDoP1pMG6wCCGikow0qiPNIqRxpOGRv9IFMufUZKDpWXNRsopz53gp9t5kBl2qYi1l+dEWmqH6kYabI9aHrtLJvY0BaWUu4MdOe4QQAylZqdmiyGZ9KFQ8cd0gaGo5YPtsbvY04EhC9hhcJiuga7ETVD/V3W8/LH8GndF/sxKd2X+zAp3U/4MWwUK0lxHnj5nYZtxU8QiPAfk13j5eixxNVS4bY48t0EwNgQYCY68f2O5BW12jkrBPeD/ABZy3d8KZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgMzAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDAwNTEgMDAwMDAgbiAKMDAwMDAwMDA3NyAwMDAwMCBuIAowMDAwMDAwMTMyIDAwMDAwIG4gCjAwMDAwMDM3OTggMDAwMDAgbiAKMDAwMDAwNDA3OSAwMDAwMCBuIAowMDAwMDA0MTYxIDAwMDAwIG4gCjAwMDAwMDQ0MTMgMDAwMDAgbiAKMDAwMDAwNDU0NyAwMDAwMCBuIAowMDAwMDA1MDQxIDAwMDAwIG4gCjAwMDAwMDU0MTUgMDAwMDAgbiAKMDAwMDAwNTgwMCAwMDAwMCBuIAowMDAwMDA2MTcwIDAwMDAwIG4gCjAwMDAwMDY1NDYgMDAwMDAgbiAKMDAwMDAwNjkzMCAwMDAwMCBuIAowMDAwMDA3MzQ0IDAwMDAwIG4gCjAwMDAwMDc2NTAgMDAwMDAgbiAKMDAwMDAwNzc2MSAwMDAwMCBuIAowMDAwMDA4OTQ3IDAwMDAwIG4gCjAwMDAwMDg5OTEgMDAwMDAgbiAKMDAwMDAwOTIwNyAwMDAwMCBuIAowMDAwMDEwNDExIDAwMDAwIG4gCjAwMDAwMTA2MjIgMDAwMDAgbiAKMDAwMDAxMTgxNiAwMDAwMCBuIAowMDAwMDEyMDIxIDAwMDAwIG4gCjAwMDAwMTMyMDcgMDAwMDAgbiAKMDAwMDAxMzI1MSAwMDAwMCBuIAowMDAwMDQ0NDQ1IDAwMDAwIG4gCjAwMDAwNzczMzUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAzMAovUm9vdCA2IDAgUgovSW5mbyA1IDAgUgovSURbPDNENjZBOERDNThBQUQ3MjcyNUFFRDExRDkwOTJCQjQ3PjxEQjFDODA0QzZENDRCNjRDQjY3QTMzNzM1NzVCRkNEOD5dCj4+CnN0YXJ0eHJlZgo4NjY5MwolJUVPRgo="; +// Utils.writePdfToDisk(in, "C:\\Users\\User\\Documents\\test.pdf"); + + } catch (Exception e) { + System.out.println("************************************************************************catch test"); + e.printStackTrace(); + } + } + + public static void main(String[] args) { + + doTest(); + } +} diff --git a/src/main/java/com/poloinformatico/gls/Utils.java b/src/main/java/com/poloinformatico/gls/Utils.java new file mode 100644 index 0000000..ec4da21 --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/Utils.java @@ -0,0 +1,446 @@ +package com.poloinformatico.gls; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import java.util.Locale; +import java.util.Scanner; + +import javax.net.ssl.SSLParameters; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.SourceLocator; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.text.StringEscapeUtils; +import org.apache.pdfbox.io.MemoryUsageSetting; +import org.apache.pdfbox.multipdf.PDFMergerUtility; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import com.labelservice_gls_italy.AddParcelResponse.AddParcelResult; +import com.labelservice_gls_italy.DeleteSpedResponse.DeleteSpedResult; +import com.labelservice_gls_italy.GetZplResponse.GetZplResult; + +public class Utils { + + public static String infoToXML(Info x) throws JAXBException { + System.out.println("infoToXml"); + JAXBContext jaxbContext = JAXBContext.newInstance(Info.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); + jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); + StringWriter sw = new StringWriter(); + jaxbMarshaller.marshal(x, sw); + String xmlContent = sw.toString(); + + return postEncodeSpecial(xmlContent);//!!! + } + + public static InfoLabel unmarshInfoLabel(AddParcelResult in/* Node node */) throws JAXBException { + + Object content = in.getContent().get(0); + + // JAXBContext context = JAXBContext.newInstance(AddParcelResult.class); + + // Unmarshaller um = context.createUnmarshaller(); + + // InfoLabel apr = (InfoLabel)um.unmarshal((Node)content); + + InfoLabel il = new InfoLabel(); + + Element e = (Element) content;// root + + NodeList nl1 = e.getChildNodes(); + + for (int i = 0; i < nl1.getLength(); i++) { + InfoLabelParcel ilp = new InfoLabelParcel(); + Node n1 = nl1.item(i); + NodeList nl2 = n1.getChildNodes(); + + for (int j = 0; j < nl2.getLength(); j++) { + // CAMPI InfoLabelParcel + try { + + if (nl2.item(j).getNodeName().equals("PdfLabel")) { + ilp.setPdfLabel(nl2.item(j).getChildNodes().item(0).getNodeValue()); + } + if (nl2.item(j).getNodeName().equals("ContatoreProgressivo")) { + ilp.setContatoreProgressivo(nl2.item(j).getChildNodes().item(0).getNodeValue()); + } + if (nl2.item(j).getNodeName().equals("NumeroSpedizione")) { + ilp.setNumeroSpedizione(nl2.item(j).getChildNodes().item(0).getNodeValue()); + } + if (nl2.item(j).getNodeName().equals("Zpl")) { + ilp.setZpl(nl2.item(j).getChildNodes().item(0).getNodeValue()); + } + } catch (Exception ex) { + continue; + } + } + + il.addInfoLabelParcel(ilp); + } + + return il; + } + + +// public static String deleteSpedToXml(DeleteSpedReq x) throws JAXBException { +// +// JAXBContext jaxbContext = JAXBContext.newInstance(DeleteSpedReq.class); +// Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); +// jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); +// StringWriter sw = new StringWriter(); +// jaxbMarshaller.marshal(x, sw); +// String xmlContent = sw.toString(); +// +// return xmlContent; +// +// } + + public static DeleteSpedRes deleteSpedRespUnmarsh(DeleteSpedResult in) { + + Object content = in.getContent().get(0); + + DeleteSpedRes il = new DeleteSpedRes(); + + Element e = (Element) content;// root + + Node n1 = e.getFirstChild(); + + e.getAttribute("DescrizioneErrore"); + + n1.getNodeValue(); + + il.setDescrizioneErrore(n1.getNodeValue()); + + return il; + } + + public static GetZplRes getZplUnmarsh(GetZplResult in) { + + Object content = in.getContent().get(0); + + GetZplRes il = new GetZplRes(); + + Element e = (Element) content;// root + + Node n1 = e.getFirstChild(); + + e.getAttribute("Zpl"); + + n1.getNodeValue(); + + il.setZpl(n1.getNodeValue()); + + return il; + } + + + public static String formatDouble(Double d) { + + System.out.println(d); + + Locale fmtLocale = Locale.ITALY; + + NumberFormat formatter = NumberFormat.getInstance(fmtLocale); + formatter.setMaximumFractionDigits(2); + formatter.setMinimumFractionDigits(2); + formatter.setGroupingUsed(false); + System.out.println(formatter.format(d)); + System.out.println(fmtLocale.toLanguageTag()); + return formatter.format(d); + + + /* + DecimalFormatSymbols unusualSymbols = + new DecimalFormatSymbols(fmtLocale); + unusualSymbols.setDecimalSeparator(','); + + unusualSymbols.setGroupingUsed(false); + + String pattern = "###,##"; + DecimalFormat myFormatter = new DecimalFormat(pattern); + df.set + String output = myFormatter.format(d); + //System.out.println(value + " " + pattern + " " + output); + return output;*/ + + } + + public static void SSLPoke(String url, int port) throws Exception { + + try { + SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); + SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(url, port); + + SSLParameters sslparams = new SSLParameters(); + sslparams.setEndpointIdentificationAlgorithm("HTTPS"); + sslsocket.setSSLParameters(sslparams); + + InputStream in = sslsocket.getInputStream(); + OutputStream out = sslsocket.getOutputStream(); + + // Write a test byte to get a reaction :) + out.write(1); + + while (in.available() > 0) { + System.out.print(in.read()); + } + System.out.println("** SSL OK **"); + } catch (Exception e) { + System.out.println("*** ERRORE SSL"); + throw (new Exception("ERRORE CONNESSIONE SSL - CONTROLLARE CONNETTIVITA INTERNET")); + } + } + + public static String writeZplToDisk(String in, String nomeFile) throws FileNotFoundException { + + try (PrintWriter out = new PrintWriter(nomeFile)) { + out.println(in); + return nomeFile; + } + + } + + public static String mergeZpl(ArrayList paths, String fullPathDest) throws IOException { + + String res; + + String merged = ""; + Scanner scanner = null; + Scanner scanner2 = null; + + try { + for (String s : paths) { + + scanner2 = new Scanner(new File(s)); + scanner = scanner2.useDelimiter("\\Z"); + merged += scanner.next(); + // PER ZPL AGGIUNGO LINEFEED PRIMA DELLA PROSSIMA PAGINA + merged += "\n"; + } + } catch (IOException e) { + merged = null; + } finally { + scanner.close(); + scanner2.close(); + } + + File file = new File(fullPathDest); + try (FileWriter fr = new FileWriter(file, false)) { + fr.write(merged); + res = fullPathDest; + } catch (Exception e) { + res = null; + } + + return res; + + } + + /** PDF **/ + /** in => Stringa da convertire, nomeFile => path assoluto file **/ + public static String writePdfToDisk(/* input base64 */String in, /* path assoluto file output */String nomeFile) { + + byte[] arrByte = in.getBytes(); + String res = null; + FileOutputStream fos1 = null; + + try { + + fos1 = new FileOutputStream(nomeFile); + Base64.Decoder dec1 = Base64.getDecoder(); + InputStream is1 = dec1.wrap(new ByteArrayInputStream(arrByte)); + int _byte; + while ((_byte = is1.read()) != -1) + fos1.write(_byte); + is1.close(); + + PDDocument doc = PDDocument.load(new File(nomeFile)); + PDPage page = doc.getPage(0); + page.setCropBox(new PDRectangle(0, 135, 360, 360)); + doc.save(nomeFile); + doc.close(); + + res = nomeFile; + } catch (IOException ioe) { + System.err.printf("I/O error: %s%n", ioe.getMessage()); + res = null; + } finally { + /* + * try { fos1.close(); } catch (IOException e) { // TODO Auto-generated catch + * block e.printStackTrace(); } + */ + } + + return res; + } + + /** + * prende lista di path completi, li fonde in sequenza e scrive file output + * merge in fullPathDest + **/ + public static String mergePdf(ArrayList paths, String fullPathDest) { + PDFMergerUtility ut = new PDFMergerUtility(); + + String res = null; + + try { + for (String s : paths) { + ut.addSource(s); + + } + + ut.setDestinationFileName(fullPathDest); + ut.mergeDocuments(MemoryUsageSetting.setupTempFileOnly()); + res = fullPathDest; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + res = null; + } + + return res; + + } + + /** XSLT **/ + // This method applies the xslFilename to inFilename and writes + // the output to outFilename. +// public static void xsl(String inFilename, String outFilename, String xslFilename) { +// try { +// // Create transformer factory +// TransformerFactory factory = TransformerFactory.newInstance(); +// +// // Use the factory to create a template containing the xsl file +// Templates template = factory.newTemplates(new StreamSource(new FileInputStream(xslFilename))); +// +// // Use the template to create a transformer +// Transformer xformer = template.newTransformer(); +// +// // Prepare the input and output files +// Source source = new StreamSource(new FileInputStream(inFilename)); +// Result result = new StreamResult(new FileOutputStream(outFilename)); +// +// // Apply the xsl file to the source file and write the result +// // to the output file +// xformer.transform(source, result); +// } catch (FileNotFoundException e) { +// System.err.print(e.getMessage()); +// } catch (TransformerConfigurationException e) { +// // An error occurred in the XSL file +// System.err.print(e.getMessage()); +// } catch (TransformerException e) { +// // An error occurred while applying the XSL file +// // Get location of error in input file +// SourceLocator locator = e.getLocator(); +// int col = locator.getColumnNumber(); +// int line = locator.getLineNumber(); +// String publicId = locator.getPublicId(); +// String systemId = locator.getSystemId(); +// +// System.err.print(e.getMessage()); +// } +// } + + public static String xmlToHtml(String xmlContent) { + String out; + xmlContent = xmlContent.trim().replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "
") + .replaceAll(" ", " "); + out = "" + xmlContent + ""; + return out; + } + +// private static String stringToCsvString_1(ArrayList in) { +// String res = ""; +// try { +// res = in.stream().filter(StringUtils::isNotBlank).collect(Collectors.joining(",")); +// } catch (Exception e) { +// res = ""; +// } +// return res; +// } + + public static String stringToCsvString_2(List in) throws Exception { + + String res = ""; + + try { + StringBuilder csvBuilder = new StringBuilder(); + for (String s : in) { + if (s != null && !s.trim().equals("")) { + csvBuilder.append(s); + csvBuilder.append(","); + } + } + String csv = csvBuilder.toString(); + if (csv.length() > 0) { + res = csv.substring(0, csv.length() - ",".length()); + }else res=""; + } catch (Exception e) { + res = ""; + } + + return res; + } + +// public static String encodeXml(String in) { +// +// String res = in; +//// res = in.replaceAll("&", "&"); +//// res = res.replaceAll("\'", "'"); +//// res = res.replaceAll("\"", """); +// +// return res; +// } + + public static String preEncodeSpecial(String in) { + + String res = in; + + res = res.replaceAll("\'", "#\'#"); + res = res.replaceAll("\"", "#\"#"); + + return res; + } + + public static String postEncodeSpecial(String in) { + + String res = in; + res = res.replaceAll("#\'#", "'"); + res = res.replaceAll("#\"#", """); + + return res; + } +} diff --git a/src/main/java/com/poloinformatico/gls/listsped.xsl b/src/main/java/com/poloinformatico/gls/listsped.xsl new file mode 100644 index 0000000..e2167cf --- /dev/null +++ b/src/main/java/com/poloinformatico/gls/listsped.xsl @@ -0,0 +1,40 @@ + + + + + +

Stato Spedizioni G.L.S.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DataNum. SpedizioneRiferimenti ClienteDdtDenominazione DestinatarioCitta DestinatarioProvincia DestinatarioIndirizzo DestinatarioTotale ColliPeso SpedizioneStato Spedizione
+ + + + \ No newline at end of file diff --git a/src/main/java/com/poloinformatico/servlet/gls_addparcel.java b/src/main/java/com/poloinformatico/servlet/gls_addparcel.java new file mode 100644 index 0000000..977825e --- /dev/null +++ b/src/main/java/com/poloinformatico/servlet/gls_addparcel.java @@ -0,0 +1,64 @@ +package com.poloinformatico.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.stream.Collectors; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.poloinformatico.gls.ClientGLS; + +/** + * Servlet implementation class gls_addparcel + */ +public class gls_addparcel extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public gls_addparcel() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + try { + String body = request.getReader().lines().collect(Collectors.joining()); + + ClientGLS cli = new ClientGLS(); + + String result = cli.sendInfo(body); + + PrintWriter out = response.getWriter(); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out.print(result); + out.flush(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + doGet(request, response); + } + +} diff --git a/src/main/java/com/poloinformatico/servlet/gls_closeworkday.java b/src/main/java/com/poloinformatico/servlet/gls_closeworkday.java new file mode 100644 index 0000000..46d1ae2 --- /dev/null +++ b/src/main/java/com/poloinformatico/servlet/gls_closeworkday.java @@ -0,0 +1,59 @@ +package com.poloinformatico.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.stream.Collectors; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.poloinformatico.gls.ClientGLS; + +/** + * Servlet implementation class gls_closeworkday + */ +public class gls_closeworkday extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public gls_closeworkday() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + String body = request.getReader().lines().collect(Collectors.joining()); + + ClientGLS cli = new ClientGLS(); + + String result = cli.sendCloseWorkDay(body); + + PrintWriter out = response.getWriter(); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out.print(result); + out.flush(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/main/java/com/poloinformatico/servlet/gls_deletesped.java b/src/main/java/com/poloinformatico/servlet/gls_deletesped.java new file mode 100644 index 0000000..fb8f23d --- /dev/null +++ b/src/main/java/com/poloinformatico/servlet/gls_deletesped.java @@ -0,0 +1,65 @@ +package com.poloinformatico.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.stream.Collectors; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.poloinformatico.gls.ClientGLS; + +/** + * Servlet implementation class gls_deletesped + */ +public class gls_deletesped extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public gls_deletesped() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + System.out.println("DOGET"); + + String body = request.getReader().lines().collect(Collectors.joining()); + + ClientGLS cli = new ClientGLS(); + + String result = cli.sendDelete(body); + + System.out.println("gls_deletesped RESULT: "+result); + + PrintWriter out = response.getWriter(); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out.print(result); + out.flush(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/main/java/com/poloinformatico/servlet/gls_getzpl.java b/src/main/java/com/poloinformatico/servlet/gls_getzpl.java new file mode 100644 index 0000000..853e8c4 --- /dev/null +++ b/src/main/java/com/poloinformatico/servlet/gls_getzpl.java @@ -0,0 +1,63 @@ +package com.poloinformatico.servlet; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.stream.Collectors; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.poloinformatico.gls.ClientGLS; + +/** + * Servlet implementation class gls_getzpl + */ +public class gls_getzpl extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public gls_getzpl() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + try { + System.out.println("DOGET"); + + String body = request.getReader().lines().collect(Collectors.joining()); + + ClientGLS cli = new ClientGLS(); + + String result = cli.sendGetZpl(body); + + System.out.println("gls_getzpl RESULT: "+result); + + PrintWriter out = response.getWriter(); + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + out.print(result); + out.flush(); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/main/java/com/poloinformatico/servlet/gls_listsped.java b/src/main/java/com/poloinformatico/servlet/gls_listsped.java new file mode 100644 index 0000000..537046f --- /dev/null +++ b/src/main/java/com/poloinformatico/servlet/gls_listsped.java @@ -0,0 +1,39 @@ +package com.poloinformatico.servlet; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Servlet implementation class gls_listsped + */ +public class gls_listsped extends HttpServlet { + private static final long serialVersionUID = 1L; + + /** + * @see HttpServlet#HttpServlet() + */ + public gls_listsped() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + response.getWriter().append("Served at: ").append(request.getContextPath()); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // TODO Auto-generated method stub + doGet(request, response); + } + +} diff --git a/src/main/java/com/poloinformatico/tnt/Test.java b/src/main/java/com/poloinformatico/tnt/Test.java new file mode 100644 index 0000000..c73852c --- /dev/null +++ b/src/main/java/com/poloinformatico/tnt/Test.java @@ -0,0 +1,63 @@ +package com.poloinformatico.tnt; + +import com.ancientprogramming.fixedformat4j.format.FixedFormatManager; +import com.ancientprogramming.fixedformat4j.format.impl.FixedFormatManagerImpl; +import com.poloinformatico.tnt.ents.TntSpedRow; + +public class Test { + + public static void main(String[] args) { + + TntSpedRow r = new TntSpedRow(); + + r.setNazInt("D"); + r.setIdMittente("IT_GESCOM01M"); + r.setNazione("IT"); + r.setTipoRecord("A"); + r.setPeso(14300); + r.setVolume(0); + r.setNumeroColli(2); + r.setDivisione("D"); + r.setServizio("NC"); + r.setValoreAssic(100050); + r.setValutaAssic("EUR"); + r.setRifMittente("FT17551"); + r.setIstruzioniOperative("istruzioni operative"); + r.setTerminiPagamento("S"); + r.setSourceSystem("ED"); + r.setVersion("1.0"); + r.setMitt("S"); + //r.setMittPariva("");//FORMATO IT XXXXXXXXXXX + r.setMittIndir("indirizzo mittente"); + r.setMittCAP("12345"); + r.setMittNaz("IT"); + r.setMittPreTel(""); + r.setMittNumTel(""); + r.setMittProv("VT"); + r.setMittRagSoc("GESCOM SPA"); + + /*sezione destinatario*/ + r.setDest("R"); + r.setDestCAP(""); + r.setDestCitta("ROMA"); + //r.setDestContatto(""); + r.setDestInd1("INDIRIZZO DEST"); + r.setDestNaz("IT"); + //r.setDestNumFax(""); + //r.setDestNumTel(""); + r.setDestPariva(""); + + + + + + + FixedFormatManager manager = new FixedFormatManagerImpl(); + + String exportedString = manager.export(r); + + System.out.println(exportedString); + + } + +} diff --git a/src/main/java/com/poloinformatico/tnt/ents/TntSpedRow.java b/src/main/java/com/poloinformatico/tnt/ents/TntSpedRow.java new file mode 100644 index 0000000..4d882d3 --- /dev/null +++ b/src/main/java/com/poloinformatico/tnt/ents/TntSpedRow.java @@ -0,0 +1,437 @@ +package com.poloinformatico.tnt.ents; + +import com.ancientprogramming.fixedformat4j.annotation.Align; +import com.ancientprogramming.fixedformat4j.annotation.Field; +import com.ancientprogramming.fixedformat4j.annotation.Record; + +@Record +public class TntSpedRow { + private String nazInt; + private String idMittente; + private String nazione; + private String tipoRecord; + private int dettCollo; + private int peso;//virgola virtuale, 3 decimali + private int volume; + private int numeroColli; + private String divisione; + private String servizio; + private int valoreAssic; + private String valutaAssic; + //private String descrImballo; + private String rifMittente; + private String istruzioniOperative; + private String terminiPagamento;//S=>MITTENTE,R=>DESTINATARIO + private String sourceSystem; + private String version; + //private String descrizioneMerce; + /*sezione mittente*/ + private String mitt; + private String mittPariva;//FORMATO IT XXXXXXXXXXX + private String mittIndir; + private String mittCAP; + private String mittNaz; + private String mittPreTel; + private String mittNumTel; + private String mittRagSoc; + private String mittCitta; + private String mittContatto; + //private String mittPreFax; + //private String mittNumFax; + private String mittProv; + /*sezione destinatario*/ + private String dest; + private String destPariva;//FORMATO IT XXXXXXXXXXX + private String destInd1; + private String destCAP; + private String destNaz; + private String destPreTel; + private String destNumTel; + private String destRagSoc; + private String destCitta; + private String destContatto; + private String destPreFax; + private String destNumFax; + private String destProv; + + + + + @Field(offset=1,length = 1) + public String getNazInt() { + return nazInt; + } + + public void setNazInt(String nazInt) { + this.nazInt = nazInt; + } + @Field(offset=2,length=12) + public String getIdMittente() { + return idMittente; + } + + public void setIdMittente(String idMittente) { + this.idMittente = idMittente; + } + @Field(offset=22,length=3) + public String getNazione() { + return nazione; + } + + public void setNazione(String nazione) { + this.nazione = nazione; + } + + @Field(offset=49,length=1) + public String gettipoRecord() { + return tipoRecord; + } + + public void setTipoRecord(String tipoRecord) { + this.tipoRecord = tipoRecord; + } + + @Field(offset=50,length=5,align = Align.LEFT,paddingChar = '0') + public int getDettCollo() { + return dettCollo; + } + + public void setDettCollo(int dettCollo) { + this.dettCollo = dettCollo; + } + + @Field(offset=55,length=8,align=Align.RIGHT,paddingChar = '0') + public int getPeso() { + return peso; + } + + public void setPeso(int peso) { + this.peso = peso; + } + + @Field(offset=63,length=7,align=Align.RIGHT,paddingChar = '0') + public int getVolume() { + return volume; + } + + public void setVolume(int volume) { + this.volume = volume; + } + + @Field(offset=70,length=5,align=Align.RIGHT,paddingChar = '0') + public int getNumeroColli() { + return numeroColli; + } + + public void setNumeroColli(int numeroColli) { + this.numeroColli = numeroColli; + } + + @Field(offset=75,length = 3) + public String getDivisione() { + return divisione; + } + + public void setDivisione(String divisione) { + this.divisione = divisione; + } + + @Field(offset=78,length = 4) + public String getServizio() { + return servizio; + } + + public void setServizio(String servizio) { + this.servizio = servizio; + } + + @Field(offset = 82, length = 13,align=Align.RIGHT,paddingChar = '0') + public int getValoreAssic() { + return valoreAssic; + } + + public void setValoreAssic(int valoreAssic) { + this.valoreAssic = valoreAssic; + } + + @Field(offset=95,length = 3) + public String getValutaAssic() { + return valutaAssic; + } + + public void setValutaAssic(String valutaAssic) { + this.valutaAssic = valutaAssic; + } + + @Field(offset=118,length=24) + public String getRifMittente() { + return rifMittente; + } + + public void setRifMittente(String rifMittente) { + this.rifMittente = rifMittente; + } + + @Field(offset=142,length=60) + public String getIstruzioniOperative() { + return istruzioniOperative; + } + + public void setIstruzioniOperative(String istruzioniOperative) { + this.istruzioniOperative = istruzioniOperative; + } + + @Field(offset=202,length=1) + public String getTerminiPagamento() { + return terminiPagamento; + } + + public void setTerminiPagamento(String terminiPagamento) { + this.terminiPagamento = terminiPagamento; + } + + @Field(offset=203,length=2) + public String getSourceSystem() { + return sourceSystem; + } + + public void setSourceSystem(String sourceSystem) { + this.sourceSystem = sourceSystem; + } + + @Field(offset=205,length=5) + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @Field(offset=240,length=1) + public String getMitt() { + return mitt; + } + + public void setMitt(String mitt) { + this.mitt = mitt; + } + + @Field(offset=242,length=20) + public String getMittPariva() { + return mittPariva; + } + + public void setMittPariva(String mittPariva) { + this.mittPariva = mittPariva; + } + + @Field(offset=262,length=30) + public String getMittIndir() { + return mittIndir; + } + + public void setMittIndir(String mittIndir) { + this.mittIndir = mittIndir; + } + + @Field(offset=352,length=9) + public String getMittCAP() { + return mittCAP; + } + + public void setMittCAP(String mittCAP) { + this.mittCAP = mittCAP; + } + + @Field(offset=361,length=3) + public String getMittNaz() { + return mittNaz; + } + + public void setMittNaz(String mittNaz) { + this.mittNaz = mittNaz; + } + + @Field(offset=364,length=7) + public String getMittPreTel() { + return mittPreTel; + } + + public void setMittPreTel(String mittPreTel) { + this.mittPreTel = mittPreTel; + } + + @Field(offset=371,length=9) + public String getMittNumTel() { + return mittNumTel; + } + + public void setMittNumTel(String mittNumTel) { + this.mittNumTel = mittNumTel; + } + + @Field(offset=380,length=50) + public String getMittRagSoc() { + return mittRagSoc; + } + + public void setMittRagSoc(String mittRagSoc) { + this.mittRagSoc = mittRagSoc; + } + + @Field(offset=430,length=30) + public String getMittCitta() { + return mittCitta; + } + + public void setMittCitta(String mittCitta) { + this.mittCitta = mittCitta; + } + + @Field(offset=460,length=22) + public String getMittContatto() { + return mittContatto; + } + + public void setMittContatto(String mittContatto) { + this.mittContatto = mittContatto; + } + + @Field(offset=498,length=30) + public String getMittProv() { + return mittProv; + } + + public void setMittProv(String mittProv) { + this.mittProv = mittProv; + } + + @Field(offset=528,length=2) + public String getDest() { + return dest; + } + + public void setDest(String dest) { + this.dest = dest; + } + + @Field(offset=530,length=20) + public String getDestPariva() { + return destPariva; + } + + public void setDestPariva(String destPariva) { + this.destPariva = destPariva; + } + + @Field(offset=550,length=30) + public String getDestInd1() { + return destInd1; + } + + public void setDestInd1(String destInd1) { + this.destInd1 = destInd1; + } + + @Field(offset=640,length=9) + public String getDestCAP() { + return destCAP; + } + + public void setDestCAP(String destCAP) { + this.destCAP = destCAP; + } + + @Field(offset=649,length=3) + public String getDestNaz() { + return destNaz; + } + + public void setDestNaz(String destNaz) { + this.destNaz = destNaz; + } + + @Field(offset=652,length=7) + public String getDestPreTel() { + return destPreTel; + } + + public void setDestPreTel(String destPreTel) { + this.destPreTel = destPreTel; + } + + @Field(offset=659,length=9) + public String getDestNumTel() { + return destNumTel; + } + + public void setDestNumTel(String destNumTel) { + this.destNumTel = destNumTel; + } + + @Field(offset=668,length=50) + public String getDestRagSoc() { + return destRagSoc; + } + + public void setDestRagSoc(String destRagSoc) { + this.destRagSoc = destRagSoc; + } + + @Field(offset=718,length=30) + public String getDestCitta() { + return destCitta; + } + + public void setDestCitta(String destCitta) { + this.destCitta = destCitta; + } + + @Field(offset=748,length=22) + public String getDestContatto() { + return destContatto; + } + + public void setDestContatto(String destContatto) { + this.destContatto = destContatto; + } + + @Field(offset=770,length=7) + public String getDestPreFax() { + return destPreFax; + } + + public void setDestPreFax(String destPreFax) { + this.destPreFax = destPreFax; + } + + @Field(offset=777,length=9) + public String getDestNumFax() { + return destNumFax; + } + + public void setDestNumFax(String destNumFax) { + this.destNumFax = destNumFax; + } + + @Field(offset=786,length=30) + public String getDestProv() { + return destProv; + } + + public void setDestProv(String destProv) { + this.destProv = destProv; + } + + + + + + + + + + + +}