# 'The invoice hash API body does not match the (calculated) Hash of the XML'

**URL:** <https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578>\
**Category:** SDK, web-based validator and sandbox\
**Created:** [October 8, 2024, 12:05pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578 "2024-10-08T12:05:38Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![CDAdeveloper](https://avatars.discourse-cdn.com/v4/letter/c/edb3f5/32.png) [@CDAdeveloper](https://zatca1.discourse.group/u/CDAdeveloper)\
**Post date:** [October 8, 2024, 12:05pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/1 "2024-10-08T12:05:38Z")

</div>

Dear All,  
I hope this email finds you well,

I sent multiple emails to support but haven’t received any response from you yet.  
I followed the steps in the simulation version to generate CSR & private key and create PCSID successfully, but when I send invoices every time to Zatca (reporting & clearance) the same error message still appears ‘The invoice hash API body does not match the (calculated) Hash of the XML’. I checked each step and made sure it was correct,  
The steps:

1. Generate CSR & private key through SDK command line (fatoora -sim -csr -csrConfig csr-config-example.properties)
2. Generate CSID ([https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/compliance](https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/compliance))
3. from step 2 decode binaryToken to create a certificate then save in …/Data/Certificate/cert.pem & save the private key in …/Data/Certificate/ec-secp256k1-priv-key.pem.
4. Sing invoices with company VAT number through SDK command line (fatoora -sign -invoice Simplified\_Invoice.xml)
5. Send invoices ([https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/compliance/invoices](https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/compliance/invoices))
6. Generate PCSID
7. Updated cert.pem file in …/Data/Certificate/cert.pem depend on PCSID data
8. Send invoices - reporting through [https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/invoices/reporting/single](https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/invoices/reporting/single)

.Net C# code:

```auto
var signResult = _eInvoiceSigningLogic.SignDocument(myDoc, certificate, privateKey);
                if (signResult.IsValid)
                {
                    signResult.SaveSignedEInvoice(xmlPath);
                    var requestResult = _RequestResult.GenerateRequest(signResult.SignedEInvoice);
                    if (requestResult.IsValid)
                    {
                       hash = requestResult.InvoiceRequest.InvoiceHash;
                       str_xml = requestResult.InvoiceRequest.Invoice;
                       uuid = requestResult.InvoiceRequest.Uuid;
                    }
                }
var qrResult = _qrValidator.GenerateEInvoiceQRCode(signResult.SignedEInvoice);
var Reporting = new BuildXmlResult
                {
                    Xml = str_xml /*Convert.ToBase64String(Encoding.UTF8.GetBytes(XmlToString(signResult.SignedEInvoice)))*/,
                    Hash = hash,
                    QrCode = qrResult.QR,
                    UUID = parameters.InvoiceUUID
                };
                var responce = zatcaPost.ZatcaReport(Reporting);
public async Task <BuildXmlResult> ZatcaReport(BuildXmlResult XmlResult)
        {
            try
            {
                var client = new HttpClient();
                var request = new HttpRequestMessage(HttpMethod.Post, "https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/invoices/reporting/single");
                request.Headers.Add("Accept-Language", "en");
                request.Headers.Add("Accept-Version", "V2");
                request.Headers.Add("Authorization", config.Authorization);
                var content = new StringContent("{\r\n \"invoiceHash\":\"" + XmlResult.Hash + "\",\r\n\r\n \"uuid\":\"" + XmlResult.UUID + "\",\r\n\r\n \"invoice\":\"" + XmlResult.Xml + "\"\r\n\r\n}", null, "application/json");
                request.Content = content;
               var response = client.Send(request);
                if (response.IsSuccessStatusCode)
                {
                    XmlResult.Status = "Accepted";
                }
                else
                {
                    XmlResult.Status = "Rejected";
                }
             
                XmlResult.Massage = await response.Content.ReadAsStringAsync();
                return XmlResult;
            }
            Catch (Exception ex)
            {
                return XmlResult;
            }
           
        }

```

I hope to respond me as soon as possible  
Thanks for the support

---

<div class="post-metadata">

**Author:** ![idaoud](https://avatars.discourse-cdn.com/v4/letter/i/f9ae1b/32.png) [@idaoud](https://zatca1.discourse.group/u/idaoud)\
**Post date:** [October 8, 2024, 12:12pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/2 "2024-10-08T12:12:35Z")

</div>

Dear @CDAdeveloper

Thanks for reaching out,

Can I kindly ask you to provide the full request and response?

Additionally, after getting your PCSID did you update the authentication in both Clearance & Reporting APIs to be basic auth with the binarysecuritytoken as userName and the secret as password?

Thanks,  
Ibrahem Daoud.

---

<div class="post-metadata">

**Author:** ![CDAdeveloper](https://avatars.discourse-cdn.com/v4/letter/c/edb3f5/32.png) [@CDAdeveloper](https://zatca1.discourse.group/u/CDAdeveloper)\
**Post date:** [October 8, 2024, 12:22pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/3 "2024-10-08T12:22:46Z")

</div>

Thank you for your fast response  
This is a request function, and we update the authentication

```auto
public async Task <BuildXmlResult> ZatcaReport(BuildXmlResult XmlResult)
        {
            try
            {
                var client = new HttpClient();
                var request = new HttpRequestMessage(HttpMethod.Post, "https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/invoices/reporting/single");
                request.Headers.Add("Accept-Language", "en");
                request.Headers.Add("Accept-Version", "V2");
                request.Headers.Add("Authorization", config.Authorization);
                var content = new StringContent("{\r\n \"invoiceHash\":\"" + XmlResult.Hash + "\",\r\n\r\n \"uuid\":\"" + XmlResult.UUID + "\",\r\n\r\n \"invoice\":\"" + XmlResult.Xml + "\"\r\n\r\n}", null, "application/json");
                request.Content = content;
               var response = client.Send(request);
                if (response.IsSuccessStatusCode)
                {
                    XmlResult.Status = "Accepted";
                }
                else
                {
                    XmlResult.Status = "Rejected";
                }
             
                XmlResult.Massage = await response.Content.ReadAsStringAsync();
                return XmlResult;
            }
            Catch (Exception ex)
            {
                return XmlResult;
            }
           
        }

```

---

<div class="post-metadata">

**Author:** ![idaoud](https://avatars.discourse-cdn.com/v4/letter/i/f9ae1b/32.png) [@idaoud](https://zatca1.discourse.group/u/idaoud)\
**Post date:** [October 8, 2024, 12:31pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/4 "2024-10-08T12:31:44Z")

</div>

Dear @CDAdeveloper

Can you try to send the same invoice through the postman and share the response?

Thanks,  
Ibrahem Daoud.

---

<div class="post-metadata">

**Author:** ![CDAdeveloper](https://avatars.discourse-cdn.com/v4/letter/c/edb3f5/32.png) [@CDAdeveloper](https://zatca1.discourse.group/u/CDAdeveloper)\
**Post date:** [October 8, 2024, 12:36pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/5 "2024-10-08T12:36:32Z")

</div>

{“validationResults”:{“infoMessages”:[{“type”:“INFO”,“code”:“XSD\_ZATCA\_VALID”,“category”:“XSD validation”,“message”:“Complied with UBL 2.1 standards in line with ZATCA specifications”,“status”:“PASS”}],“warningMessages”:[{“type”:“WARNING”,“code”:“BR-KSA-61”,“category”:“KSA”,“message”:“Previous invoice hash (KSA-13) must exist in an invoice.”,“status”:“WARNING”}],“errorMessages”:[{“type”:“ERROR”,“code”:“invalid-invoice-hash”,“category”:“INVOICE\_HASHING\_ERRORS”,“message”:“The invoice hash API body does not match the (calculated) Hash of the XML”,“status”:“ERROR”}],“status”:“ERROR”},“reportingStatus”:“NOT\_REPORTED”}

Thank you for being so helpful

---

<div class="post-metadata">

**Author:** ![idaoud](https://avatars.discourse-cdn.com/v4/letter/i/f9ae1b/32.png) [@idaoud](https://zatca1.discourse.group/u/idaoud)\
**Post date:** [October 8, 2024, 12:42pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/6 "2024-10-08T12:42:56Z")

</div>

Dear @CDAdeveloper

for the error that related to the invoice hash you need to ensure that the XML that you are sending contains the same value of invoiceHash that you are sending in the body

Can I kindly ask you to share the body content from the API?

Thanks,  
Ibrahem Daoud.

---

<div class="post-metadata">

**Author:** ![CDAdeveloper](https://avatars.discourse-cdn.com/v4/letter/c/edb3f5/32.png) [@CDAdeveloper](https://zatca1.discourse.group/u/CDAdeveloper)\
**Post date:** [October 8, 2024, 12:51pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/7 "2024-10-08T12:51:28Z")

</div>

Thank you for your response  
this is a request body ,

```auto
{
    "invoiceHash":"cJo9c4DpBjxYpktZ1YOOiVk44dE2N8Fdq6EIl4/IOlo=",

    "uuid":"6d4e54bd-9712-485a-9c51-6de75527cdc5",

    "invoice":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEludm9pY2UgeG1sbnM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkludm9pY2UtMiIgeG1sbnM6Y2FjPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTIiIHhtbG5zOmNiYz0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQmFzaWNDb21wb25lbnRzLTIiIHhtbG5zOmV4dD0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uRXh0ZW5zaW9uQ29tcG9uZW50cy0yIj48ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICA8ZXh0OkV4dGVuc2lvblVSST51cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6ZHNpZzplbnZlbG9wZWQ6eGFkZXM8L2V4dDpFeHRlbnNpb25VUkk+CiAgICAgICAgPGV4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICA8c2lnOlVCTERvY3VtZW50U2lnbmF0dXJlcyB4bWxuczpzaWc9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vblNpZ25hdHVyZUNvbXBvbmVudHMtMiIgeG1sbnM6c2FjPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpTaWduYXR1cmVBZ2dyZWdhdGVDb21wb25lbnRzLTIiIHhtbG5zOnNiYz0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6U2lnbmF0dXJlQmFzaWNDb21wb25lbnRzLTIiPgogICAgICAgICAgICAgICAgPHNhYzpTaWduYXR1cmVJbmZvcm1hdGlvbj4gCiAgICAgICAgICAgICAgICAgICAgPGNiYzpJRD51cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2lnbmF0dXJlOjE8L2NiYzpJRD4KICAgICAgICAgICAgICAgICAgICA8c2JjOlJlZmVyZW5jZWRTaWduYXR1cmVJRD51cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2lnbmF0dXJlOkludm9pY2U8L3NiYzpSZWZlcmVuY2VkU2lnbmF0dXJlSUQ+CiAgICAgICAgICAgICAgICAgICAgPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgSWQ9InNpZ25hdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkczpTaWduZWRJbmZvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzEyL3htbC1jMTRuMTEiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNlY2RzYS1zaGEyNTYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpSZWZlcmVuY2UgSWQ9Imludm9pY2VTaWduZWREYXRhIiBVUkk9IiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlRyYW5zZm9ybXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHM6WFBhdGg+bm90KC8vYW5jZXN0b3Itb3Itc2VsZjo6ZXh0OlVCTEV4dGVuc2lvbnMpPC9kczpYUGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kczpUcmFuc2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHM6WFBhdGg+bm90KC8vYW5jZXN0b3Itb3Itc2VsZjo6Y2FjOlNpZ25hdHVyZSk8L2RzOlhQYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzOlRyYW5zZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLXhwYXRoLTE5OTkxMTE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpYUGF0aD5ub3QoLy9hbmNlc3Rvci1vci1zZWxmOjpjYWM6QWRkaXRpb25hbERvY3VtZW50UmVmZXJlbmNlW2NiYzpJRD0nUVInXSk8L2RzOlhQYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzOlRyYW5zZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMTIveG1sLWMxNG4xMSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHM6VHJhbnNmb3Jtcz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOkRpZ2VzdFZhbHVlPmNKbzljNERwQmp4WXBrdFoxWU9PaVZrNDRkRTJOOEZkcTZFSWw0L0lPbG89PC9kczpEaWdlc3RWYWx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHM6UmVmZXJlbmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlJlZmVyZW5jZSBUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjU2lnbmF0dXJlUHJvcGVydGllcyIgVVJJPSIjeGFkZXNTaWduZWRQcm9wZXJ0aWVzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOkRpZ2VzdFZhbHVlPk5UZ3paV1kzWlRjeVltTXlabVpqTlRObU5ETmxZMlUzTnpSallXVTNObU0wTlRZeE56aGlaVEF4WmpCaU56QXdaV0kyTXpKa05EQTRNbVUxWkRjNE5BPT08L2RzOkRpZ2VzdFZhbHVlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kczpSZWZlcmVuY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHM6U2lnbmVkSW5mbz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlNpZ25hdHVyZVZhbHVlPk1FUUNJRnlGRUMrdlhkNHRJcFNjWGtDM3o4bFptcC9vL2dkSVphTzBqK0RpWmRqK0FpQkJHdXhqVkl5Ynl0Mi8wK0lYTFB6VmM0NllaV1hFSVlhRHJXemNhMHZkQWc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkczpLZXlJbmZvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOlg1MDlEYXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRkZUQ0NCTHVnQXdJQkFnSVRFd0FBVVVpQTJTbFg1a3l2SWdBQkFBQlJTREFLQmdncWhrak9QUVFEQWpCaU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJHOWpZV3d4RXpBUkJnb0praWFKay9Jc1pBRVpGZ05uYjNZeEZ6QVZCZ29Ka2lhSmsvSXNaQUVaRmdkbGVIUm5ZWHAwTVJzd0dRWURWUVFERXhKUVJWcEZTVTVXVDBsRFJWTkRRVEl0UTBFd0hoY05NalF4TURBMk1USXdOekk0V2hjTk1qWXhNREEyTVRJeE56STRXakIxTVFzd0NRWURWUVFHRXdKVFFURXRNQ3NHQTFVRUNoTWtRMmhwYkdSeVpXNGdWMmwwYUNCRWFYTmhZbWxzYVhSNUlFRnpjMjlqYVdGMGFXOXVNUTh3RFFZRFZRUUxFd1pTYVhsaFpHZ3hKakFrQmdOVkJBTVRIVU5FUVMwNE9EWTBNekV4TkRBdE16RXdNVGM1T0Rrd09EQXdNREF6TUZZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUFvRFFnQUU4VGFhK2pieERnRUg2QUNnMW5ORjlJT040SUh5RmhzbGRXUkloM05HeUl6bDhLZ2phZnNiRjRMZFhndjdDemFjVDJMS2VqV0MyUFltUXJ0NDVjMERncU9DQXo0d2dnTTZNSUdvQmdOVkhSRUVnYUF3Z1oya2dab3dnWmN4UFRBN0JnTlZCQVFNTkRFdFEwUkJmREl0VW1Wb1lXSjhNeTFsWkRJeVpqRmtPQzFsTm1FeUxURXhNVGd0T1dJMU9DMWtPV0U0WmpFeFpUUTBOV1l4SHpBZEJnb0praWFKay9Jc1pBRUJEQTh6TVRBeE56azRPVEE0TURBd01ETXhEVEFMQmdOVkJBd01CREV4TURBeEVUQVBCZ05WQkJvTUNGSklSa0l5TXpZMU1STXdFUVlEVlFRUERBcE9iMjRnY0hKdlptbDBNQjBHQTFVZERnUVdCQlFkbEFsZTdMek9pMjZnQkk2NmtYM2lJdFpUWmpBZkJnTlZIU01FR0RBV2dCU0I4cU43Y251OVVLTnFuL0hvMDQzV2U1eHd0VENCNVFZRFZSMGZCSUhkTUlIYU1JSFhvSUhVb0lIUmhvSE9iR1JoY0Rvdkx5OURUajFRUlZwRlNVNVdUMGxEUlZORFFUSXRRMEVvTVNrc1EwNDlVRkphUlVsT1ZrOUpRMFZRUzBreUxFTk9QVU5FVUN4RFRqMVFkV0pzYVdNbE1qQkxaWGtsTWpCVFpYSjJhV05sY3l4RFRqMVRaWEoyYVdObGN5eERUajFEYjI1bWFXZDFjbUYwYVc5dUxFUkRQV1Y0ZEhwaGRHTmhMRVJEUFdkdmRpeEVRejFzYjJOaGJEOWpaWEowYVdacFkyRjBaVkpsZG05allYUnBiMjVNYVhOMFAySmhjMlUvYjJKcVpXTjBRMnhoYzNNOVkxSk1SR2x6ZEhKcFluVjBhVzl1VUc5cGJuUXdnYzRHQ0NzR0FRVUZCd0VCQklIQk1JRytNSUc3QmdnckJnRUZCUWN3QW9hQnJteGtZWEE2THk4dlEwNDlVRVZhUlVsT1ZrOUpRMFZUUTBFeUxVTkJMRU5PUFVGSlFTeERUajFRZFdKc2FXTWxNakJMWlhrbE1qQlRaWEoyYVdObGN5eERUajFUWlhKMmFXTmxjeXhEVGoxRGIyNW1hV2QxY21GMGFXOXVMRVJEUFdWNGRIcGhkR05oTEVSRFBXZHZkaXhFUXoxc2IyTmhiRDlqUVVObGNuUnBabWxqWVhSbFAySmhjMlUvYjJKcVpXTjBRMnhoYzNNOVkyVnlkR2xtYVdOaGRHbHZia0YxZEdodmNtbDBlVEFPQmdOVkhROEJBZjhFQkFNQ0I0QXdQQVlKS3dZQkJBR0NOeFVIQkM4d0xRWWxLd1lCQkFHQ054VUlnWWFvSFlUUSt4S0c3WjBraDg3N0dkUEFWV2FCbk5ndGcrWEZYUUlCWkFJQkVEQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd013SndZSkt3WUJCQUdDTnhVS0JCb3dHREFLQmdnckJnRUZCUWNEQWpBS0JnZ3JCZ0VGQlFjREF6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUF5bHJsbjZKeVc0Mk9JUGVqR2ZTNURQT2pVeVlMalh4eFFDQ0ZKS0drTTF3Q0lGcXVNU2QvY25qMDJlc0htUVNka2Zmd3p5cWJwUHR6Sm5iaytOSW1QUHJpPC9kczpYNTA5Q2VydGlmaWNhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RzOlg1MDlEYXRhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2RzOktleUluZm8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkczpPYmplY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eGFkZXM6UXVhbGlmeWluZ1Byb3BlcnRpZXMgeG1sbnM6eGFkZXM9Imh0dHA6Ly91cmkuZXRzaS5vcmcvMDE5MDMvdjEuMy4yIyIgVGFyZ2V0PSJzaWduYXR1cmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4YWRlczpTaWduZWRQcm9wZXJ0aWVzIElkPSJ4YWRlc1NpZ25lZFByb3BlcnRpZXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4YWRlczpTaWduaW5nVGltZT4yMDI0LTEwLTA4VDE1OjQ5OjQwPC94YWRlczpTaWduaW5nVGltZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4YWRlczpTaWduaW5nQ2VydGlmaWNhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhhZGVzOkNlcnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4YWRlczpDZXJ0RGlnZXN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRzOkRpZ2VzdFZhbHVlPk9UYzFObUZrWlRBM1kyVXdNRFkzTm1ZMk5qUmlZemM0T1RCak16Y3lZMlF3TkRJeVlURTBOamRqTkdRM01Ea3hPR1l4TnpoaU5EUmpaR0k1TXprNVlnPT08L2RzOkRpZ2VzdFZhbHVlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hhZGVzOkNlcnREaWdlc3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4YWRlczpJc3N1ZXJTZXJpYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHM6WDUwOUlzc3Vlck5hbWU+Q049UEVaRUlOVk9JQ0VTQ0EyLUNBLCBEQz1leHRnYXp0LCBEQz1nb3YsIERDPWxvY2FsPC9kczpYNTA5SXNzdWVyTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkczpYNTA5U2VyaWFsTnVtYmVyPjQyMzcxNDI2NjgxNjAwODIyNTgxNzU1NDQ1ODY2MzI4ODgyMDYwODI5MTE0NDwvZHM6WDUwOVNlcmlhbE51bWJlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94YWRlczpJc3N1ZXJTZXJpYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94YWRlczpDZXJ0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94YWRlczpTaWduaW5nQ2VydGlmaWNhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveGFkZXM6U2lnbmVkU2lnbmF0dXJlUHJvcGVydGllcz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hhZGVzOlNpZ25lZFByb3BlcnRpZXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hhZGVzOlF1YWxpZnlpbmdQcm9wZXJ0aWVzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2RzOk9iamVjdD4KICAgICAgICAgICAgICAgICAgICA8L2RzOlNpZ25hdHVyZT4KICAgICAgICAgICAgICAgIDwvc2FjOlNpZ25hdHVyZUluZm9ybWF0aW9uPgogICAgICAgICAgICA8L3NpZzpVQkxEb2N1bWVudFNpZ25hdHVyZXM+CiAgICAgICAgPC9leHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgIDwvZXh0OlVCTEV4dGVuc2lvbj4KPC9leHQ6VUJMRXh0ZW5zaW9ucz4KCTxjYmM6UHJvZmlsZUlEPnJlcG9ydGluZzoxLjA8L2NiYzpQcm9maWxlSUQ+Cgk8Y2JjOklEPjU0MTwvY2JjOklEPgoJPGNiYzpVVUlEPjZkNGU1NGJkLTk3MTItNDg1YS05YzUxLTZkZTc1NTI3Y2RjNTwvY2JjOlVVSUQ+Cgk8Y2JjOklzc3VlRGF0ZT4yMDI0LTEwLTA4PC9jYmM6SXNzdWVEYXRlPgoJPGNiYzpJc3N1ZVRpbWU+MDA6MDA6MDBaPC9jYmM6SXNzdWVUaW1lPgoJPGNiYzpJbnZvaWNlVHlwZUNvZGUgbmFtZT0iMDIwMDAwMCI+Mzg4PC9jYmM6SW52b2ljZVR5cGVDb2RlPgoJPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TQVI8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT4KCTxjYmM6VGF4Q3VycmVuY3lDb2RlPlNBUjwvY2JjOlRheEN1cnJlbmN5Q29kZT4KCTxjYmM6TGluZUNvdW50TnVtZXJpYz4xPC9jYmM6TGluZUNvdW50TnVtZXJpYz4JCiAJPGNhYzpBZGRpdGlvbmFsRG9jdW1lbnRSZWZlcmVuY2U+CgkJPGNiYzpJRD5JQ1Y8L2NiYzpJRD4KCQk8Y2JjOlVVSUQ+NTQxPC9jYmM6VVVJRD4KCTwvY2FjOkFkZGl0aW9uYWxEb2N1bWVudFJlZmVyZW5jZT4KCTxjYWM6QWRkaXRpb25hbERvY3VtZW50UmVmZXJlbmNlPgogICAgICAgIDxjYmM6SUQ+UVI8L2NiYzpJRD4KICAgICAgICA8Y2FjOkF0dGFjaG1lbnQ+CiAgICAgICAgICAgIDxjYmM6RW1iZWRkZWREb2N1bWVudEJpbmFyeU9iamVjdCBtaW1lQ29kZT0idGV4dC9wbGFpbiI+QVNSRGFHbHNaSEpsYmlCWGFYUm9JRVJwYzJGaWFXeHBkSGtnUVhOemIyTnBZWFJwYjI0Q0R6TXhNREUzT1RnNU1EZ3dNREF3TXdNVE1qQXlOQzB4TUMwd09GUXdNem93TURvd01BUUdNak13TGpBd0JRVXpNQzR3TUFZc1kwcHZPV00wUkhCQ2FuaFpjR3QwV2pGWlQwOXBWbXMwTkdSRk1rNDRSbVJ4TmtWSmJEUXZTVTlzYnowSFlFMUZVVU5KUm5sR1JVTXJkbGhrTkhSSmNGTmpXR3RETTNvNGJGcHRjQzl2TDJka1NWcGhUekJxSzBScFdtUnFLMEZwUWtKSGRYaHFWa2w1WW5sME1pOHdLMGxZVEZCNlZtTTBObGxhVjFoRlNWbGhSSEpYZW1OaE1IWmtRV2M5UFFoWU1GWXdFQVlIS29aSXpqMENBUVlGSzRFRUFBb0RRZ0FFOFRhYStqYnhEZ0VINkFDZzFuTkY5SU9ONElIeUZoc2xkV1JJaDNOR3lJemw4S2dqYWZzYkY0TGRYZ3Y3Q3phY1QyTEtlaldDMlBZbVFydDQ1YzBEZ2dsSE1FVUNJUURLV3VXZm9uSmJqWTRnOTZNWjlMa004Nk5USmd1TmZIRkFJSVVrb2FRelhBSWdXcTR4SjM5eWVQVFo2d2VaQkoyUjkvRFBLcHVrKzNNbWR1VDQwaVk4K3VJPTwvY2JjOkVtYmVkZGVkRG9jdW1lbnRCaW5hcnlPYmplY3Q+CiAgICAgICAgPC9jYWM6QXR0YWNobWVudD4KPC9jYWM6QWRkaXRpb25hbERvY3VtZW50UmVmZXJlbmNlPjxjYWM6U2lnbmF0dXJlPgogICAgICA8Y2JjOklEPnVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzaWduYXR1cmU6SW52b2ljZTwvY2JjOklEPgogICAgICA8Y2JjOlNpZ25hdHVyZU1ldGhvZD51cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6ZHNpZzplbnZlbG9wZWQ6eGFkZXM8L2NiYzpTaWduYXR1cmVNZXRob2Q+CjwvY2FjOlNpZ25hdHVyZT48Y2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5PgoJCTxjYWM6UGFydHk+CgkJICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KCQkJICAgIDxjYmM6SUQgc2NoZW1lSUQ9IkNSTiI+MTA0MTc3NjM4NDwvY2JjOklEPgoJCSAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPgoJCQk8Y2FjOlBvc3RhbEFkZHJlc3M+CgkJCQk8Y2JjOlN0cmVldE5hbWU+SW1hbSBTYXVkIEJpbiBBYmR1bGF6aXogQmluIE1vaGFtbWVkIFJkPC9jYmM6U3RyZWV0TmFtZT4KCQkJCTxjYmM6QnVpbGRpbmdOdW1iZXI+MjM2NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPgoJCQkJPGNiYzpDaXR5U3ViZGl2aXNpb25OYW1lPktpbmcgRmFoYWQgRGlzdC48L2NiYzpDaXR5U3ViZGl2aXNpb25OYW1lPgoJCQkJPGNiYzpDaXR5TmFtZT5SaXlhZGg8L2NiYzpDaXR5TmFtZT4KCQkJCTxjYmM6UG9zdGFsWm9uZT4xMjI3MzwvY2JjOlBvc3RhbFpvbmU+CgkJCQk8Y2JjOkNvdW50cnlTdWJlbnRpdHk+S2luZ2RvbSBPZiBTYXVkaSBBcmFiaWE8L2NiYzpDb3VudHJ5U3ViZW50aXR5PgoJCQkJPGNhYzpDb3VudHJ5PgoJCQkJCTxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNBPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPgoJCQkJPC9jYWM6Q291bnRyeT4KCQkJPC9jYWM6UG9zdGFsQWRkcmVzcz4KCQkJPGNhYzpQYXJ0eVRheFNjaGVtZT4KCQkJCTxjYmM6Q29tcGFueUlEPjMxMDE3OTg5MDgwMDAwMzwvY2JjOkNvbXBhbnlJRD4KCQkJCTxjYWM6VGF4U2NoZW1lPgoJCQkJCTxjYmM6SUQ+VkFUPC9jYmM6SUQ+CgkJCQk8L2NhYzpUYXhTY2hlbWU+CgkJCTwvY2FjOlBhcnR5VGF4U2NoZW1lPgoJCQk8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+CgkJCQk8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+Q2hpbGRyZW4gV2l0aCBEaXNhYmlsaXR5IEFzc29jaWF0aW9uPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT4KCQkJPC9jYWM6UGFydHlMZWdhbEVudGl0eT4KCQk8L2NhYzpQYXJ0eT4KCTwvY2FjOkFjY291bnRpbmdTdXBwbGllclBhcnR5PgoJPGNhYzpBY2NvdW50aW5nQ3VzdG9tZXJQYXJ0eT4KCQk8Y2FjOlBhcnR5PgoJCQk8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CgkJCQk8Y2JjOklEIHNjaGVtZUlEPSJJUUEiPjIxNTE1MTU2NDg8L2NiYzpJRD4KCQkJPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KCQkJPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PgoJCQkJPGNiYzpSZWdpc3RyYXRpb25OYW1lPtij2LHZiNmJINiz2KfZhdmKPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT4KCQkJPC9jYWM6UGFydHlMZWdhbEVudGl0eT4KCQk8L2NhYzpQYXJ0eT4KCTwvY2FjOkFjY291bnRpbmdDdXN0b21lclBhcnR5PgogCgkKCTxjYWM6UGF5bWVudE1lYW5zPgoJCTxjYmM6UGF5bWVudE1lYW5zQ29kZT40ODwvY2JjOlBheW1lbnRNZWFuc0NvZGU+CgkJPGNiYzpJbnN0cnVjdGlvbk5vdGUvPgoJPC9jYWM6UGF5bWVudE1lYW5zPgoJPGNhYzpBbGxvd2FuY2VDaGFyZ2U+Cgk8Y2JjOklEPjE8L2NiYzpJRD4KCTxjYmM6Q2hhcmdlSW5kaWNhdG9yPmZhbHNlPC9jYmM6Q2hhcmdlSW5kaWNhdG9yPgogICAgCgk8Y2JjOkFsbG93YW5jZUNoYXJnZVJlYXNvbj5kaXNjb3VudDwvY2JjOkFsbG93YW5jZUNoYXJnZVJlYXNvbj4KCTxjYmM6QW1vdW50IGN1cnJlbmN5SUQ9IlNBUiI+MC4wMDwvY2JjOkFtb3VudD4KCTxjYWM6VGF4Q2F0ZWdvcnk+CgkJPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD0iNiIgc2NoZW1lSUQ9IlVOL0VDRSA1MzA1Ij5TPC9jYmM6SUQ+CgkJPGNiYzpQZXJjZW50PjE1LjAwPC9jYmM6UGVyY2VudD4KCQk8Y2FjOlRheFNjaGVtZT4KCQkJPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD0iNiIgc2NoZW1lSUQ9IlVOL0VDRSA1MTUzIj5WQVQ8L2NiYzpJRD4KCQk8L2NhYzpUYXhTY2hlbWU+Cgk8L2NhYzpUYXhDYXRlZ29yeT4KPC9jYWM6QWxsb3dhbmNlQ2hhcmdlPgoJPGNhYzpUYXhUb3RhbD4KCQk8Y2JjOlRheEFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjMwLjAwPC9jYmM6VGF4QW1vdW50PgoJCTxjYWM6VGF4U3VidG90YWw+CgkJCTxjYmM6VGF4YWJsZUFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjIwMC4wMDwvY2JjOlRheGFibGVBbW91bnQ+CgkJCTxjYmM6VGF4QW1vdW50IGN1cnJlbmN5SUQ9IlNBUiI+MzAuMDA8L2NiYzpUYXhBbW91bnQ+CgkJCTxjYWM6VGF4Q2F0ZWdvcnk+CgkJCQk8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPSI2IiBzY2hlbWVJRD0iVU4vRUNFIDUzMDUiPlM8L2NiYzpJRD4KCQkJCTxjYmM6UGVyY2VudD4xNS4wMDwvY2JjOlBlcmNlbnQ+CgkJCQk8Y2FjOlRheFNjaGVtZT4KCQkJCQk8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPSI2IiBzY2hlbWVJRD0iVU4vRUNFIDUxNTMiPlZBVDwvY2JjOklEPgoJCQkJPC9jYWM6VGF4U2NoZW1lPgoJCQk8L2NhYzpUYXhDYXRlZ29yeT4KCQk8L2NhYzpUYXhTdWJ0b3RhbD4KCTwvY2FjOlRheFRvdGFsPgoJPGNhYzpUYXhUb3RhbD4KCQk8Y2JjOlRheEFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjMwLjAwPC9jYmM6VGF4QW1vdW50PgoJPC9jYWM6VGF4VG90YWw+Cgk8Y2FjOkxlZ2FsTW9uZXRhcnlUb3RhbD4KCTxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjIwMC4wMDwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+Cgk8Y2JjOlRheEV4Y2x1c2l2ZUFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjIwMC4wMDwvY2JjOlRheEV4Y2x1c2l2ZUFtb3VudD4KCTxjYmM6VGF4SW5jbHVzaXZlQW1vdW50IGN1cnJlbmN5SUQ9IlNBUiI+MjMwLjAwPC9jYmM6VGF4SW5jbHVzaXZlQW1vdW50PgoJPGNiYzpBbGxvd2FuY2VUb3RhbEFtb3VudCBjdXJyZW5jeUlEPSJTQVIiPjAuMDA8L2NiYzpBbGxvd2FuY2VUb3RhbEFtb3VudD4KCTxjYmM6Q2hhcmdlVG90YWxBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4wLjAwPC9jYmM6Q2hhcmdlVG90YWxBbW91bnQ+CiAgICA8Y2JjOlByZXBhaWRBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4wLjAwPC9jYmM6UHJlcGFpZEFtb3VudD4gCgk8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4yMzAuMDA8L2NiYzpQYXlhYmxlQW1vdW50Pgo8L2NhYzpMZWdhbE1vbmV0YXJ5VG90YWw+Cgk8Y2FjOkludm9pY2VMaW5lPgoJCTxjYmM6SUQ+MTwvY2JjOklEPgoJCTxjYmM6SW52b2ljZWRRdWFudGl0eSB1bml0Q29kZT0iUENFIj4xPC9jYmM6SW52b2ljZWRRdWFudGl0eT4KCQk8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD0iU0FSIj4yMDAuMDA8L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PgoJCTxjYWM6VGF4VG90YWw+CgkJCTxjYmM6VGF4QW1vdW50IGN1cnJlbmN5SUQ9IlNBUiI+MzAuMDA8L2NiYzpUYXhBbW91bnQ+CgkJCTxjYmM6Um91bmRpbmdBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4yMzAuMDA8L2NiYzpSb3VuZGluZ0Ftb3VudD4KCQk8L2NhYzpUYXhUb3RhbD4KCQk8Y2FjOkl0ZW0+CgkJCTxjYmM6TmFtZT7YudmK2KfYr9ipINij2LfZgdin2YQ8L2NiYzpOYW1lPgoJCQk8Y2FjOkNsYXNzaWZpZWRUYXhDYXRlZ29yeT4KCQkJCTxjYmM6SUQ+UzwvY2JjOklEPgoJCQkJPGNiYzpQZXJjZW50PjE1LjAwPC9jYmM6UGVyY2VudD4KCQkJCTxjYWM6VGF4U2NoZW1lPgoJCQkJCTxjYmM6SUQ+VkFUPC9jYmM6SUQ+CgkJCQk8L2NhYzpUYXhTY2hlbWU+CgkJCTwvY2FjOkNsYXNzaWZpZWRUYXhDYXRlZ29yeT4KCQk8L2NhYzpJdGVtPgoJCTxjYWM6UHJpY2U+CgkJCTxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4yMDAuMDA8L2NiYzpQcmljZUFtb3VudD4KICAgICAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHk+MTwvY2JjOkJhc2VRdWFudGl0eT4KCQkJPGNhYzpBbGxvd2FuY2VDaGFyZ2U+CgkJCQk8Y2JjOkNoYXJnZUluZGljYXRvcj5mYWxzZTwvY2JjOkNoYXJnZUluZGljYXRvcj4KCQkJCTxjYmM6QWxsb3dhbmNlQ2hhcmdlUmVhc29uPmRpc2NvdW50PC9jYmM6QWxsb3dhbmNlQ2hhcmdlUmVhc29uPgoJCQkJPGNiYzpBbW91bnQgY3VycmVuY3lJRD0iU0FSIj4wLjAwPC9jYmM6QW1vdW50PgoJCQk8L2NhYzpBbGxvd2FuY2VDaGFyZ2U+CgkJPC9jYWM6UHJpY2U+Cgk8L2NhYzpJbnZvaWNlTGluZT4KPC9JbnZvaWNlPg=="

}

```

---

<div class="post-metadata">

**Author:** ![idaoud](https://avatars.discourse-cdn.com/v4/letter/i/f9ae1b/32.png) [@idaoud](https://zatca1.discourse.group/u/idaoud)\
**Post date:** [October 8, 2024, 12:59pm UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/8 "2024-10-08T12:59:05Z")

</div>

Dear @CDAdeveloper

Please reach out to your RM and let him reach out to our support team via the below mail with your concerns and try to provide screenshots from the postman for request, response, and authorization that you are using, to ensure comprehensive support as usual and schedule meeting if needed.

SP email: [sp\_support@zatca.gov.sa](mailto:sp_support@zatca.gov.sa)

Thanks,  
Ibrahem Daoud.

---

<div class="post-metadata">

**Author:** ![CDAdeveloper](https://avatars.discourse-cdn.com/v4/letter/c/edb3f5/32.png) [@CDAdeveloper](https://zatca1.discourse.group/u/CDAdeveloper)\
**Post date:** [October 14, 2024, 10:36am UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/9 "2024-10-14T10:36:36Z")

</div>

Thank you for being so helpful, we want to inform you that we fixed the error, the reason was some spaces made the file of invoice XML before the signing different from the file of invoice XML after signing,  
Added the property from C# to save the same XML file before and after signing with the same spaces

```auto
 XmlDocument myDoc = new XmlDocument() {
                    PreserveWhitespace = true
                };

```

Thank you,

---

<div class="post-metadata">

**Author:** ![idaoud](https://avatars.discourse-cdn.com/v4/letter/i/f9ae1b/32.png) [@idaoud](https://zatca1.discourse.group/u/idaoud)\
**Post date:** [October 14, 2024, 10:45am UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/10 "2024-10-14T10:45:42Z")

</div>

Dear @CDAdeveloper

It’s great to hear that you fixed the error, since we are talking about Hash it’s a sensitive value and any change in the invoice even if it’s a space need a new Hash.

Please do not hesitate to reach out for any further concerns.

Thanks,  
Ibrahem Daoud.

---

<div class="post-metadata">

**Author:** ![madiha](https://avatars.discourse-cdn.com/v4/letter/m/d07c76/32.png) [@madiha](https://zatca1.discourse.group/u/madiha)\
**Post date:** [April 15, 2025, 10:35am UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/11 "2025-04-15T10:35:54Z")

</div>

i have the same problem i am using this package in hashing and signing

> **[GitHub - SallaApp/ZATCA: An unofficial package maintained by Salla to help...](https://github.com/SallaApp/ZATCA)**
>
> An unofficial package maintained by Salla to help developers to implement ZATCA (Fatoora) QR code easily which required for e-invoicing

i am using [https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance/invoices](https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance/invoices)  
developer-portal

---

<div class="post-metadata">

**Author:** ![Alm\_Info](https://avatars.discourse-cdn.com/v4/letter/a/bc79bd/32.png) [@Alm\_Info](https://zatca1.discourse.group/u/Alm_Info)\
**Post date:** [February 28, 2026, 11:45am UTC](https://zatca1.discourse.group/t/the-invoice-hash-api-body-does-not-match-the-calculated-hash-of-the-xml/3578/12 "2026-02-28T11:45:13Z")

</div>

I am currently facing an issue with ZATCA compliance validation and would appreciate your support.

When calling the compliance simulation endpoint:

`https://gw-fatoora.zatca.gov.sa/e-invoicing/simulation/compliance/invoices`

I receive the following response from ZATCA:

- XSD validation: **PASS**

- Warning: **BR-KSA-98** (Simplified invoice should be submitted within 24 hours)

- Error: **invalid-invoice-hash**

- Overall status: **ERROR**

So structurally the invoice is valid and compliant with UBL 2.1.

I have already:

- Ensured whitespace preservation before and after signing

- Used the SDK-generated request body without modification

- Verified that the invoiceHash sent to ZATCA matches the SDK output  
However, the issue still persists.  
Any guidance would be greatly appreciated.
