Sample code for 30+ languages & platforms
Java

Create Enveloping XML Signature with Multiple References

See more XML Digital Signatures Examples

Demonstrates how to create an enveloping XML digital signature containing multiple Object references.

Chilkat Java Downloads

Java
import com.chilkatsoft.*;

public class ChilkatExample {

  static {
    try {
        System.loadLibrary("chilkat");
    } catch (UnsatisfiedLinkError e) {
      System.err.println("Native code library failed to load.\n" + e);
      System.exit(1);
    }
  }

  public static void main(String argv[])
  {
    boolean success = false;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // This example creates an XML signature that contains three Objects:
    // 
    // 1. A base64 encoded JPG image.
    // 2. Some plain text.
    // 3. Some JSON.
    // 

    // Get a small JPG image.
    CkBinData jpgData = new CkBinData();
    CkHttp http = new CkHttp();
    success = http.QuickGetBd("https://www.chilkatsoft.com/images/starfish.jpg",jpgData);
    if (success != true) {
        System.out.println(http.lastErrorText());
        return;
        }

    // Get a small JSON document.
    CkStringBuilder sbJson = new CkStringBuilder();
    success = http.QuickGetSb("https://www.chilkatsoft.com/exampleData/sample.json",sbJson);
    if (success != true) {
        System.out.println(http.lastErrorText());
        return;
        }

    // Get an RSA private key for signing.
    CkStringBuilder sbPem = new CkStringBuilder();
    success = http.QuickGetSb("https://www.chilkatdownload.com/example_data/rsaprivkey_secret.pem",sbPem);
    if (success != true) {
        System.out.println(http.lastErrorText());
        return;
        }

    CkPrivateKey rsaKey = new CkPrivateKey();
    success = rsaKey.LoadEncryptedPem(sbPem.getAsString(),"secret");
    if (success != true) {
        System.out.println(rsaKey.lastErrorText());
        return;
        }

    // OK.. ready to begin building the signature.
    CkXmlDSigGen gen = new CkXmlDSigGen();

    // Provide the RSA key to the XML Digital Signature generator
    gen.SetPrivateKey(rsaKey);

    // Add enveloped references to the content to be signed.
    CkStringBuilder sbContent = new CkStringBuilder();
    sbContent.Append("The quick brown fox jumped over the lazy dog.");
    gen.AddEnvelopedRef("aaa",sbContent,"sha256","C14N","");

    gen.AddEnvelopedRef("bbb",sbJson,"sha256","C14N","");

    CkStringBuilder sbBase64 = new CkStringBuilder();
    // Use "base64_mime" to encode the JPG data to base64 in multiple lines.
    jpgData.GetEncodedSb("base64_mime",sbBase64);
    gen.AddEnvelopedRef("ccc",sbBase64,"sha256","C14N","");

    // Generate the XML digital signature.
    CkStringBuilder sbXml = new CkStringBuilder();
    success = gen.CreateXmlDSigSb(sbXml);
    if (success != true) {
        System.out.println(gen.lastErrorText());
        return;
        }

    // Examine the enveloped signature, where the data for each reference is contained within the XML Signature
    System.out.println(sbXml.getAsString());

    // The exact XML signature looks like this:
    // (A pretty-printed XML signature is shown further below, but beware that the introduced whitespace breaks the signature.)

    // <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#aaa"><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>f0KK1a9yt2XMxCcr5Keziiv4BpAev/rRt/CGSJwS9i0=</ds:DigestValue></ds:Reference><ds:Reference URI="#bbb"><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>buBASaqBjJXez8r/hFz4ZIIf+1mgf63AoI8MihViJtU=</ds:DigestValue></ds:Reference><ds:Reference URI="#ccc"><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>+9PN/3Bz7xOuqi/wIBlGHEwPx+YUoILMsr2Iu0i1cCU=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>fI9l6/CKuwa7J2cczBzsKTOKec6cOVX/ehY2RcDZreGJlSo8bgv++nliFTwPyiZ8GT1Q2rDrA8biOt/ysZWnfim6AR79ld9CtLuKdqNsS/aSjwroDG/eWM0447zWoDSgAIsjXUAsF5xLschFW7+pGoPl5S1fVT/PUBkySlBi0I/U8P2UdiY8GoAL2rkHxTxDHaWh1GpBY28o9MSCuTgTiLVHF6WbmdHggqMc70OSTRh5vCMzZRTaAkTH6SWYt2WczKwmVea7hkM3BhpbA3EnpEIxK7TFl2GkFGXxAyXAxe2SVmXngt025LOFtU72fE+eChbqr5tejWl81z1g2F7ZnQ==</ds:SignatureValue><ds:KeyInfo><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>sXeRhM55P13FbpNcXAMR3olbw2Wa6keZIHu5YTZYUBTlYWId+pNiwUz3zFIEo+0IfYR0H27ybIycQO+1IIzJofUFNMAL3tZps2OKPlsjuCPls6kXpXhv/gvhux8LrCtp4PcKWqJ6QVOZKChc7WAx40qFWzHi57ueqRTv3x0kESqGg/VjsqyTEvb55psJO2RsfhLT7+YVh3hImRM3RDaJdkTkPuOxeFyT6N7VXD09329sLuS3QkUbE9zEKDnz9X3d8dEQdJhSI9ba5fxl8R7fu8pB67ElfzFml96X1jLFtzy1pzOT5Fc4ROcaqlYckVzdBq9sxezm6MYmDBjNAcibRw==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id="aaa">The quick brown fox jumped over the lazy dog.</ds:Object><ds:Object Id="bbb">{
    //    "apple": "red",
    //    "lime": "green",
    //    "banana": "yellow",
    //    "broccoli": "green",
    //    "strawberry": "red"
    // }
    // </ds:Object><ds:Object Id="ccc">/9j/4AAQSkZJRgABAgEASABIAAD/7Q18UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
    // AQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAAAAE4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgAB
    // AAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA
    // MgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNBBQAAAAAAAQAAAABOEJJTQQM
    // AAAAAAyTAAAAAQAAAIAAAACAAAABgAAAwAAAAAx3ABgAAf/Y/+AAEEpGSUYAAQIBAEgASAAA//4A
    // J0ZpbGUgd3JpdHRlbiBieSBBZG9iZSBQaG90b3Nob3CoIDQuMAD/7gAOQWRvYmUAZIAAAAAB/9sA
    // hAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwM
    // DAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwM
    // DAwMDAwMDAwMDAwMDAwMDAz/wAARCACAAIADASIAAhEBAxEB/90ABAAI/8QBPwAAAQUBAQEBAQEA
    // AAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIF
    // BwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKD
    // JkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eH
    // l6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFy
    // gpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVW
    // ZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD1VJJJJSkkkklKSSSSUpJJMSACTwEl
    // KJA5MJAg8arnuqdbta4+hJaCQ0AgTHfe8tY3/OUuh9bsybfRu0d2Ez/0x7Xf2FWhzuGeY4Ym5DTw
    // sM8uWyDH7h27dXoEkklZYFJJJJKUkkkkp//Q9VSSSSUpJJJJSkkkklKVPqt5pxHR9J/tbHmriw/r
    // Dk/QpaYI9x+P5qh5nKMWHJP92Jrz6MuCHHkiPG3l+oZTq2uL7HUkHYwCptnOm24n6KX1eut/aoBe
    // XxtklpbyN3tb9Db/AFULMIcNG2XO3S9oY6IHtJ9R7n1+p7vzq0X6sML+pudtexu/2tsMuho2rE+H
    // C8sD1uyaH/o7rZ6GDJ5PobfohOmHATroXEUkkkkpSSSSSn//0fVCsLq/XjiZLcZhDXuMCSAfj7y1
    // bq5D64dLvLvtmO3c5oOkSdR+bq3a5Qc17vtH2jwy7s/KjGcoGTY925T1zKkS9rpbvhwj2n6Lv7Sv
    // 4/XGED127Afzxq371weL1S5zrWhj3MrAFr3CXNaxrf0TI2saz1HfSWvh5rb9rK3erLQHMA9rCfe2
    // v+Vbt+msSPxHnMB/WEZIj5rHqr+9H/um/k5PGRtXjF7aq6q1u6twcD4Ii5inJvx9a7SNfonVv9VX
    // cfrpiL2THLma/gtPl/inK5q9fBL92fpaM+VmPl9Q/F1ci0U0vsPDRK5fLyK773vtkh57dgPo8q91
    // XrNVtPpUgw76RIgx5LA9V9hcGAuOob8fzdPcqfxfmY5IjDjleolMxOn9UW2uU5cxBlIEE/k0utua
    // 3I9+zbUyGNb7HTz7y0v9Rn9lXvqcA/KDh3kmPM/Bv0formus32G5zGEEuJ95c50iezrfc3/MXR/U
    // UPrewXRLgdseEo/DsfDLFZ1/sZ+ZFcvPfSnv0kkltOMpJJJJSkkkklP/0vVUO6llzCx4kFESSU8X
    // 136py512NInnZoY52rmrKMzBtLLA5nIN7Xlpj2hrH7o2+xm32r1d7GvEOEgrE6z9XcfMrc5jQHdx
    // 2Kp8xycZgmIqXb9FvctzpiRHJrHa+oeTxeqtftpvHpMaJNz/AHHafosayvd/J/tq4CHNL2n2nVjj
    // I9vDbPd9Dcuc6xjZvTb4IOpAaXRtEHdt2EbHf2kbp3WXwK8j3DvHgJj2AfvO/wAG1lCxc3JmIJAo
    // jeLpcIIEomwfsdi/JsgEHQATI1IHzSos3te4MdZtG4tYDr3hw9yrXX45x22eo173uLRWPpCAJds/
    // d/roTMvJraTjv9PcC1xAB077tzVAMZI2rXrouoGB4Rr9jWLK78mCC93mZgRH8natrArOPXW5jxWG
    // mWieD+c7+0szExwLw+ZeQNw8PLn/AKpaFtwrYxrwQXOIZIEODf3fpJ+TJMSj7ZIMdkTAPpNa7vQ0
    // 9Zy3e1r2PA/Ogop6vmt59P46hczj9VxWOIdc2pokS4gcCZhhf/I/tqX7axrAG1WG2xztuxrSZb++
    // 0/2fannn/iIOktO/A1DyuO/lFPQP6vknT1mM54CA7rFokuySI8uQBJhczd9YGOgVVOLmtLnkkREt
    // 52B3s2uQLer5GYHMqqZU120AjVzSwS57f5FzvZtTvf8AiEj6spiPDgDJHlYV8o/B7PD68/ewWPD2
    // P4n2nXwat6qwW1h7eHCVwXQun5uVktssc5wB1n6I13RW36LV3WLWaqGsPYLb5L3/AGv154pXodjw
    // +Lnc3HHHJWP60//T9VSSSSUpJJJJTgfWjp1F+N6jmAmYOnK4h/TGh72tgGSABIAE/wDSXc/WHNZs
    // 9Bp+iZcQJ17NH8pcwGF1zng7Q7gGJ/L/ANBYfxPMBnqB1EfV/edjkOKOL1bbhzh030w4xu2e48wJ
    // /O/8yQ22lr3V7y1oBHpiCD9E7t+r/wAz6CXU+qOYLK8Z+3e3ZZug6D3Q3/yay8LPd9oHqDdBH0oM
    // /wBoqHHjySgZy7aNq7oV5Olffk4k+i80u2ncQNYP0v3lj35ORkWbrHl7hI3ET/J/zdrVu5TmZlTL
    // 9jKKwzZIfJd+dudvj81Zd2CxoNlT5AE7VJglAfMAJ7fyLLHhIsj1bIcejIyDsbuId9LUCCPzv+i1
    // amF0q/6ALnE6ECXeP9lav1Y+rzspoc46GC93czrtXZYPQMPGaPYC7uSruPlJZBczwwOwju0OY5+O
    // MmGMXIdS8ng/VXIs19PZuOrnan/N+it3B+qdVcG47o1jgfcuhZVWwQ1oCmrePl8UPliL7nUudk5r
    // Nk3ka7DRDj4tOO0NraAjJJKZgf/U9VSSSSUpUep9QGLUQ0j1HDTyH7ysZeSzGpdY7twPErk+sZ7r
    // XEl3ueYFY5AiW/yf6yp89zYwYzR/WS0hH/uv7sWzyuD3JgkegbtbMyCbHOfOwH3WHVuv5ztqw+qd
    // QaJqoeLNdXsJESNGsn876W+x6XUuqEOfjU2tdXYBudGojmuHbttjbP8ArarYvTH5Lm2aw4mAPzvu
    // WLgwyMuOdylI2B1lI9ZOvQiLPpjFzhXbaToXAz7RMD86ByojHcy4BzS0ke3dp/mrvelfU/cxrrQG
    // DwHP+cm659UmV0i6rU16ydSP/MVqHl8ogZabfL1YYc9hOQQ6X8zzuDS9+K4NDhZHt2l4G7R30Wex
    // u2trv9J/pE7Mewyx7RLjqXGfJ/u/R/nfvI7AcctayQ0aEbiw6iHe+fzm+z/CIx2mH7RUzgAkuJJ+
    // lte8O3/yvYsqWQ2a67NiRPFpsdXqvqltGK5o0IK6Fct9V8lovfU2QHAGDprx2XUroeVnx4Mcu8Q4
    // fMxMc0we9/apJJJTMKkkkklP/9X1VJJJJTg/WDL9N4b2rbuDfFx9rWrj+pZz3l9TGA2Wa+0maxxZ
    // Xc2N2y5i7Dr+BkXO9SkTMdgdRx9JYVH1bzL8h1j27C7RzjyR8Fj81yebLzcp8NxoCBJ9IdTlc+DH
    // hHEfV2cvpnR/tFrRVSGv0BP0tp4+m73dv5tdn0foFWM0W3DdaYklWel9GowWCBL+5PK0gABAWjg5
    // aGId59ZHUtTmeanlJANQ6RUAAIGgUbqm21mtwkOEKaSnaz599YemvwLXFodssPLfDt3/AHlm13Wv
    // q2uyQKqBpU5xBl30m1j8937y77r/AE1mZiOO2XtEhcDl4hqyTU6sNbWR+l+iAJO83aP3/urG5/lh
    // CfEBUJG77Sdrks/u4xE6zi63Qsl1WWx5na5x2vmQ4E7XO3fn+9q7ml4fU1w7heZ4mQWXs2WizHrP
    // pVFkBu4fpHbW/S/tr0Hot/r4NbjyBCs/DJ/qjA/ok1/dk1PiOOpif72jfSSSWg0FJJJJKf/W9VSS
    // SSUsQDykABwE6SSlJJJJKUkkkkpYgEEHgrl/rR0IZDTdW2e5A8V1KhZUy1pa8SCmZMcckTGWxZMW
    // WWOYnHcPllOPkDN3GrYWwJa0BsTxXt9jPo+5egfVxj24DdwgnX70x+ruGbfUAgTO3stLHoZRWK2C
    // AFDy3LeyZG7vQf3Wfmub94RFVSVJJJWWopJJJJT/AP/ZADhCSU0EBgAAAAAABwABAQEAAQEA//4A
    // J0ZpbGUgd3JpdHRlbiBieSBBZG9iZSBQaG90b3Nob3CoIDQuMAD/7gAhQWRvYmUAZIAAAAABAwAQ
    // AwIDBgAAAAAAAAAAAAAAAP/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwR
    // DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwR
    // EQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8IAEQgAeAB4AwEiAAIRAQMRAf/E
    // AMkAAQACAgMBAAAAAAAAAAAAAAAFBgQHAQMIAgEBAAMBAQEAAAAAAAAAAAAAAAMEBQIBBhAAAgIB
    // BAICAgIDAAAAAAAAAgMBBAUAIBEGEBITFDAhMSJBIxURAAIBAwEEBwMJBQkAAAAAAAECEQASAyEx
    // IjITIEFRQlJiBGFyIxAwcYGRoZJDY8GCotIz8LGywuJTc4MUEgABAwEGAwQIBwEAAAAAAAABABEC
    // IRAgMVEiA0FxEmEyQmKBkaFScpLS4sHRgrITIzME/9oADAMBAQIRAxEAAADaoAABG89SPNDu0Mvc
    // LEAAA4OXHIBxTbXRsu/BbL1ltLvvOGjmgAcUW91SvZw5bXsziaWwMmk996jI1tHZ1/B2zqDa+xUk
    // Xxxez+xjffnvcPeXHIgKJtrCr2tWy8Ri42xLdPSikz5CDj/OLz8U9zxacSJuFyCzu1u430AYPPVe
    // rudAfO73XkV7MsSfPxLSUjJs8796eDj9/KWEADppktR8XW68KQv8slOitxVSxXqcjGdmRobU+sHO
    // +k+eB4ABTojYytaj5Is1XX2DWkZsjWePuX6yU25aeUEsAB5VHqp5VHqp5VHqp5VHqmN80POvTub5
    // VPPVTyq989VPKo//2gAIAQIAAQUA8sMVhVtBYHdl3QKsYPA+bajYuH3K0ozKiG02LVmiQRrnXMeX
    // 1gbFirEEK/WfrOOYqvjVTGlB+DIQFrCtPJECtBSZLQsNmReTW1KnMWqv+pRSDY/ez6Sfk8XK0ide
    // ZlO4vXiOOPH/2gAIAQMAAQUA8gEmT65Jndjw/tkpj1802ADG1lnB0C0mv8a8iJa4nUgUR4rXDVIT
    // BRP7k4idQnT3oWP+dCMkSBlSogplzvRbbTmT5oV+BtWxVqpeOWGv2GY4nzF5ormZmdUrEMXbiIfu
    // D25nnnx//9oACAEBAAEFAPwew8/lzGRmquM1cVaqPixX/J2C2bLVpwm/r0zON3SQxqCGdl+xFepa
    // hhHJE+zhQ9Mftn+M1m3ryNbJTqpn2jFXJVLUa7HdESvXAmnUeDb+PH1qbu29c+4K2uptoZdJS2zE
    // aTnbYauWHWGZb1+thKRBaxOQrvqQ1c6J6R0WSojKrVdvmYgozXV614L+It4tlHLwBG4SA/6MyloT
    // jFLGFpsLnUur8E8PR+TUoK2fg20mE2t5yOMr3k9j62yhcrvuVYZZc94mEQ7M0q6f++2dB2DJNM/t
    // WWU8JZeeD6n8JgEAOzt0gxykhI5HIUxmnCLCbddxaqVSe/E9SsOCn1KmnSKNZEbcnkBqKuuhx5bK
    // cDY+R441hg2wTId1iks8ksBAN1qyusnJXnut3cpMxXxdmyaejvagMW6nYH4nBiiivbWUEG7sF2Pm
    // yVkDLGYQ3vwvXU0xgRiO2YaShdo1tSUrZh7EWKG7stOx8+O6zcsHisNXoK8OUDl9hxcY+4E2Vq6d
    // chtbcSwPQgA7ewYqL1W/UOq3o4lE/k/nV/A07hY7GIoBs//aAAgBAgIGPwC0zkWjEOSjKIIYsxvx
    // 2+O4ajyxUuGFxoSMSK6Sy0zluRGMZ6/uX9sTtns1xQnXpDCHKP1KcImoazG3KWf5qhAmMYoSNSMu
    // 78yMx1QyL9Cae9L55yQm8gxfr7ptMpFoxDklSlAMCafCEGNRVR2zTqyWmIfPxeu4f+aNIQ/0LPqy
    // /SnGmHveOf2onb7w9qhL3SD6PFdluEEmRcg923qA0TrnX3fKoE49Iv6mbtVLf//aAAgBAwIGPwC0
    // RGJQ6qvflM4CgW2OdzWKGj5J2enDFPA08yjE48fiW3JqMVgnII9FrHVDL6UJwqCHUXoQMEXdP7UQ
    // 4nI8B+NojEOShB6o+sFSmA/SHWqR5CgufyEPKWCYatz9vNdO4aTpyU45gog8Lg24sGo/FObBGR1x
    // pzC3AMHv6Hfyovj22//aAAgBAQEGPwD5iJE/PDGhjI+w9g62oPduTPWWMnTmT8NbvI+SkyjvCfnc
    // jI9gU2AhgG08K/56S3nqA4XEMuRcgjW98X6d3hrFPYOnqYrQg9DJlPUNPppmGPmlZLglgI2tdyRd
    // WMh8bKXLtaGZg0cHOyDmbs9+sQ8o6Rp8OQsMaST/AHJbvL3vLV+HMwUNy0dWlWYf1GVX7qV8SM+M
    // EjmJt09n8tTiyCfCdvyJ6eZA3iO090VkUlr2FqnCGDa+bDwf9lLiXuC0bJgmfeu4e/WMeUdP/wBW
    // ARlTUEATRPrXJzl7QGHw2VmL5N78v8FXernHmyERittUSLt2eHEiMlBoMwCrAQYiZSN+2hjTMTI0
    // vE/Y01eWuZiC3b7K0JYnQE3bFEKiLr47t9P+OudkW1wCVY7J9vvW0kOAwEMp0INcQ+2t51H11BzL
    // 9tfDyK30H5YOoNMyAK5BB7DNOGL2bSZmFHhuVrt2jj9QxJymTlyTzIU/lXMuPH+/ZZQyKYB6/qDW
    // KG/x9+pgAdZjs0mkGDM2ZgoBQqVtPZ+pQL7zRNmzZ2W0FCqOxpYnX8NaSIAJMkftosMYcCNpJ2nc
    // 28VcycVrYzlRJAJVTvKnDv8A6dKMQLZCf6iC1QSLtp38n+3SO/EQJ6BTIonqNO6kBDqZ+nu0oEk7
    // bSNDrB2/E/jpvUeoCoGMwBuqBpwLP8PxHoPi4XWbmlTDCWmaAxl3zWExwKrEW7d+/Z4KW0ajaCWK
    // yRBlBb37P56YXlAV5cqoAtA3f323LnqFL8kEFpc7FjrNqe5bW6pyGQV00FpuXebzeFaXN6gajULQ
    // UbB0SE1ZFknqBmdaus1I6xB++sePFdzQPiHQANO7y7eKnfLnXG4UxeSCSusDxXUHVSVA2ChjgmOI
    // n/TxUpCcpBEE6t9OtBso5jDrbWoxoBHShdcraKv7aZ3N4BkxvTPft8VN6dLTrDEGT+pjDqOLz1La
    // 9Z9hrGCV013xuj32Ph81WubCwDRI0u3wODC7W8FC6CrtIgEDQeb3qCqIAHTbK5gKKAMczJsUkag3
    // WKt1cv0gbDkAZMzg9v5ZXuuv9slC4asdAokkezh/HRdse3UAnWmTJIOIm07GOumzeoMTvqbQqqdZ
    // 3p5jO2Ld4Fx46xZCAhVgCp0MHTZanepWHWOmULEY8IEkam5uGhhV2TI+nqJUl8ZU22RI3H4r1oW3
    // ZspOpYkgeZot73coZMouynUk1AGlH1WAQTx6ffWS3Eucxaqm7dYm1SIbxdykXIvLeTxgghjs5hea
    // xOPCJ6bsuO9Wa7YT1W+7u+apZWUE65H1eNkXUFVRd1n5WxuJDCKZwrQzAqykgrJjmLHEyrQyJ8R8
    // 5tW83ZNt7uMQZrMlqb7U2ObgDIP069PeANboA6JKj4iiVNOro3NZiOdLXmfyr7iqL+pTaQoAEDQf
    // f5fnr2W1+0aGrcQ+vo//2Q==
    // </ds:Object></ds:Signature>

    // Here is the pretty-printed XML signature, which isn't actually valid anymore..

    // <?xml version="1.0" encoding="utf-8" ?>
    // <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    //     <ds:SignedInfo>
    //         <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
    //         <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
    //         <ds:Reference URI="#aaa">
    //             <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
    //             <ds:DigestValue>f0KK1a9yt2XMxCcr5Keziiv4BpAev/rRt/CGSJwS9i0=</ds:DigestValue>
    //         </ds:Reference>
    //         <ds:Reference URI="#bbb">
    //             <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
    //             <ds:DigestValue>buBASaqBjJXez8r/hFz4ZIIf+1mgf63AoI8MihViJtU=</ds:DigestValue>
    //         </ds:Reference>
    //         <ds:Reference URI="#ccc">
    //             <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
    //             <ds:DigestValue>+9PN/3Bz7xOuqi/wIBlGHEwPx+YUoILMsr2Iu0i1cCU=</ds:DigestValue>
    //         </ds:Reference>
    //     </ds:SignedInfo>
    //     <ds:SignatureValue>fI9l6/CKuwa7J2cczBzsKTOKec6cOVX/ehY2RcDZreGJlSo8bgv++nliFTwPyiZ8GT1Q2rDrA8biOt/ysZWnfim6AR79ld9CtLuKdqNsS/aSjwroDG/eWM0447zWoDSgAIsjXUAsF5xLschFW7+pGoPl5S1fVT/PUBkySlBi0I/U8P2UdiY8GoAL2rkHxTxDHaWh1GpBY28o9MSCuTgTiLVHF6WbmdHggqMc70OSTRh5vCMzZRTaAkTH6SWYt2WczKwmVea7hkM3BhpbA3EnpEIxK7TFl2GkFGXxAyXAxe2SVmXngt025LOFtU72fE+eChbqr5tejWl81z1g2F7ZnQ==</ds:SignatureValue>
    //     <ds:KeyInfo>
    //         <ds:KeyValue>
    //             <ds:RSAKeyValue>
    //                 <ds:Modulus>sXeRhM55P13FbpNcXAMR3olbw2Wa6keZIHu5YTZYUBTlYWId+pNiwUz3zFIEo+0IfYR0H27ybIycQO+1IIzJofUFNMAL3tZps2OKPlsjuCPls6kXpXhv/gvhux8LrCtp4PcKWqJ6QVOZKChc7WAx40qFWzHi57ueqRTv3x0kESqGg/VjsqyTEvb55psJO2RsfhLT7+YVh3hImRM3RDaJdkTkPuOxeFyT6N7VXD09329sLuS3QkUbE9zEKDnz9X3d8dEQdJhSI9ba5fxl8R7fu8pB67ElfzFml96X1jLFtzy1pzOT5Fc4ROcaqlYckVzdBq9sxezm6MYmDBjNAcibRw==</ds:Modulus>
    //                 <ds:Exponent>AQAB</ds:Exponent>
    //             </ds:RSAKeyValue>
    //         </ds:KeyValue>
    //     </ds:KeyInfo>
    //     <ds:Object Id="aaa">The quick brown fox jumped over the lazy dog.</ds:Object>
    //     <ds:Object Id="bbb">{
    //    "apple": "red",
    //    "lime": "green",
    //    "banana": "yellow",
    //    "broccoli": "green",
    //    "strawberry": "red"
    // }</ds:Object>
    //     <ds:Object Id="ccc">/9j/4AAQSkZJRgABAgEASABIAAD/7Q18UGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
    // AQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAAAAE4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgAB
    // AAAAAAAAAAI4QklNA/UAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEA
    // MgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNBBQAAAAAAAQAAAABOEJJTQQM
    // AAAAAAyTAAAAAQAAAIAAAACAAAABgAAAwAAAAAx3ABgAAf/Y/+AAEEpGSUYAAQIBAEgASAAA//4A
    // J0ZpbGUgd3JpdHRlbiBieSBBZG9iZSBQaG90b3Nob3CoIDQuMAD/7gAOQWRvYmUAZIAAAAAB/9sA
    // hAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwM
    // DAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwM
    // DAwMDAwMDAwMDAwMDAwMDAz/wAARCACAAIADASIAAhEBAxEB/90ABAAI/8QBPwAAAQUBAQEBAQEA
    // AAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIF
    // BwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKD
    // JkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eH
    // l6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFy
    // gpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVW
    // ZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD1VJJJJSkkkklKSSSSUpJJMSACTwEl
    // KJA5MJAg8arnuqdbta4+hJaCQ0AgTHfe8tY3/OUuh9bsybfRu0d2Ez/0x7Xf2FWhzuGeY4Ym5DTw
    // sM8uWyDH7h27dXoEkklZYFJJJJKUkkkkp//Q9VSSSSUpJJJJSkkkklKVPqt5pxHR9J/tbHmriw/r
    // Dk/QpaYI9x+P5qh5nKMWHJP92Jrz6MuCHHkiPG3l+oZTq2uL7HUkHYwCptnOm24n6KX1eut/aoBe
    // XxtklpbyN3tb9Db/AFULMIcNG2XO3S9oY6IHtJ9R7n1+p7vzq0X6sML+pudtexu/2tsMuho2rE+H
    // C8sD1uyaH/o7rZ6GDJ5PobfohOmHATroXEUkkkkpSSSSSn//0fVCsLq/XjiZLcZhDXuMCSAfj7y1
    // bq5D64dLvLvtmO3c5oOkSdR+bq3a5Qc17vtH2jwy7s/KjGcoGTY925T1zKkS9rpbvhwj2n6Lv7Sv
    // 4/XGED127Afzxq371weL1S5zrWhj3MrAFr3CXNaxrf0TI2saz1HfSWvh5rb9rK3erLQHMA9rCfe2
    // v+Vbt+msSPxHnMB/WEZIj5rHqr+9H/um/k5PGRtXjF7aq6q1u6twcD4Ii5inJvx9a7SNfonVv9VX
    // cfrpiL2THLma/gtPl/inK5q9fBL92fpaM+VmPl9Q/F1ci0U0vsPDRK5fLyK773vtkh57dgPo8q91
    // XrNVtPpUgw76RIgx5LA9V9hcGAuOob8fzdPcqfxfmY5IjDjleolMxOn9UW2uU5cxBlIEE/k0utua
    // 3I9+zbUyGNb7HTz7y0v9Rn9lXvqcA/KDh3kmPM/Bv0formus32G5zGEEuJ95c50iezrfc3/MXR/U
    // UPrewXRLgdseEo/DsfDLFZ1/sZ+ZFcvPfSnv0kkltOMpJJJJSkkkklP/0vVUO6llzCx4kFESSU8X
    // 136py512NInnZoY52rmrKMzBtLLA5nIN7Xlpj2hrH7o2+xm32r1d7GvEOEgrE6z9XcfMrc5jQHdx
    // 2Kp8xycZgmIqXb9FvctzpiRHJrHa+oeTxeqtftpvHpMaJNz/AHHafosayvd/J/tq4CHNL2n2nVjj
    // I9vDbPd9Dcuc6xjZvTb4IOpAaXRtEHdt2EbHf2kbp3WXwK8j3DvHgJj2AfvO/wAG1lCxc3JmIJAo
    // jeLpcIIEomwfsdi/JsgEHQATI1IHzSos3te4MdZtG4tYDr3hw9yrXX45x22eo173uLRWPpCAJds/
    // d/roTMvJraTjv9PcC1xAB077tzVAMZI2rXrouoGB4Rr9jWLK78mCC93mZgRH8natrArOPXW5jxWG
    // mWieD+c7+0szExwLw+ZeQNw8PLn/AKpaFtwrYxrwQXOIZIEODf3fpJ+TJMSj7ZIMdkTAPpNa7vQ0
    // 9Zy3e1r2PA/Ogop6vmt59P46hczj9VxWOIdc2pokS4gcCZhhf/I/tqX7axrAG1WG2xztuxrSZb++
    // 0/2fannn/iIOktO/A1DyuO/lFPQP6vknT1mM54CA7rFokuySI8uQBJhczd9YGOgVVOLmtLnkkREt
    // 52B3s2uQLer5GYHMqqZU120AjVzSwS57f5FzvZtTvf8AiEj6spiPDgDJHlYV8o/B7PD68/ewWPD2
    // P4n2nXwat6qwW1h7eHCVwXQun5uVktssc5wB1n6I13RW36LV3WLWaqGsPYLb5L3/AGv154pXodjw
    // +Lnc3HHHJWP60//T9VSSSSUpJJJJTgfWjp1F+N6jmAmYOnK4h/TGh72tgGSABIAE/wDSXc/WHNZs
    // 9Bp+iZcQJ17NH8pcwGF1zng7Q7gGJ/L/ANBYfxPMBnqB1EfV/edjkOKOL1bbhzh030w4xu2e48wJ
    // /O/8yQ22lr3V7y1oBHpiCD9E7t+r/wAz6CXU+qOYLK8Z+3e3ZZug6D3Q3/yay8LPd9oHqDdBH0oM
    // /wBoqHHjySgZy7aNq7oV5Olffk4k+i80u2ncQNYP0v3lj35ORkWbrHl7hI3ET/J/zdrVu5TmZlTL
    // 9jKKwzZIfJd+dudvj81Zd2CxoNlT5AE7VJglAfMAJ7fyLLHhIsj1bIcejIyDsbuId9LUCCPzv+i1
    // amF0q/6ALnE6ECXeP9lav1Y+rzspoc46GC93czrtXZYPQMPGaPYC7uSruPlJZBczwwOwju0OY5+O
    // MmGMXIdS8ng/VXIs19PZuOrnan/N+it3B+qdVcG47o1jgfcuhZVWwQ1oCmrePl8UPliL7nUudk5r
    // Nk3ka7DRDj4tOO0NraAjJJKZgf/U9VSSSSUpUep9QGLUQ0j1HDTyH7ysZeSzGpdY7twPErk+sZ7r
    // XEl3ueYFY5AiW/yf6yp89zYwYzR/WS0hH/uv7sWzyuD3JgkegbtbMyCbHOfOwH3WHVuv5ztqw+qd
    // QaJqoeLNdXsJESNGsn876W+x6XUuqEOfjU2tdXYBudGojmuHbttjbP8ArarYvTH5Lm2aw4mAPzvu
    // WLgwyMuOdylI2B1lI9ZOvQiLPpjFzhXbaToXAz7RMD86ByojHcy4BzS0ke3dp/mrvelfU/cxrrQG
    // DwHP+cm659UmV0i6rU16ydSP/MVqHl8ogZabfL1YYc9hOQQ6X8zzuDS9+K4NDhZHt2l4G7R30Wex
    // u2trv9J/pE7Mewyx7RLjqXGfJ/u/R/nfvI7AcctayQ0aEbiw6iHe+fzm+z/CIx2mH7RUzgAkuJJ+
    // lte8O3/yvYsqWQ2a67NiRPFpsdXqvqltGK5o0IK6Fct9V8lovfU2QHAGDprx2XUroeVnx4Mcu8Q4
    // fMxMc0we9/apJJJTMKkkkklP/9X1VJJJJTg/WDL9N4b2rbuDfFx9rWrj+pZz3l9TGA2Wa+0maxxZ
    // Xc2N2y5i7Dr+BkXO9SkTMdgdRx9JYVH1bzL8h1j27C7RzjyR8Fj81yebLzcp8NxoCBJ9IdTlc+DH
    // hHEfV2cvpnR/tFrRVSGv0BP0tp4+m73dv5tdn0foFWM0W3DdaYklWel9GowWCBL+5PK0gABAWjg5
    // aGId59ZHUtTmeanlJANQ6RUAAIGgUbqm21mtwkOEKaSnaz599YemvwLXFodssPLfDt3/AHlm13Wv
    // q2uyQKqBpU5xBl30m1j8937y77r/AE1mZiOO2XtEhcDl4hqyTU6sNbWR+l+iAJO83aP3/urG5/lh
    // CfEBUJG77Sdrks/u4xE6zi63Qsl1WWx5na5x2vmQ4E7XO3fn+9q7ml4fU1w7heZ4mQWXs2WizHrP
    // pVFkBu4fpHbW/S/tr0Hot/r4NbjyBCs/DJ/qjA/ok1/dk1PiOOpif72jfSSSWg0FJJJJKf/W9VSS
    // SSUsQDykABwE6SSlJJJJKUkkkkpYgEEHgrl/rR0IZDTdW2e5A8V1KhZUy1pa8SCmZMcckTGWxZMW
    // WWOYnHcPllOPkDN3GrYWwJa0BsTxXt9jPo+5egfVxj24DdwgnX70x+ruGbfUAgTO3stLHoZRWK2C
    // AFDy3LeyZG7vQf3Wfmub94RFVSVJJJWWopJJJJT/AP/ZADhCSU0EBgAAAAAABwABAQEAAQEA//4A
    // J0ZpbGUgd3JpdHRlbiBieSBBZG9iZSBQaG90b3Nob3CoIDQuMAD/7gAhQWRvYmUAZIAAAAABAwAQ
    // AwIDBgAAAAAAAAAAAAAAAP/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwR
    // DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwR
    // EQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8IAEQgAeAB4AwEiAAIRAQMRAf/E
    // AMkAAQACAgMBAAAAAAAAAAAAAAAFBgQHAQMIAgEBAAMBAQEAAAAAAAAAAAAAAAMEBQIBBhAAAgIB
    // BAICAgIDAAAAAAAAAgMBBAUAIBEGEBITFDAhMSJBIxURAAIBAwEEBwMJBQkAAAAAAAECEQASAyEx
    // IjITIEFRQlJiBGFyIxAwcYGRoZJDY8GCotIz8LGywuJTc4MUEgABAwEGAwQIBwEAAAAAAAABABEC
    // IRAgMVEiA0FxEmEyQmKBkaFScpLS4sHRgrITIzME/9oADAMBAQIRAxEAAADaoAABG89SPNDu0Mvc
    // LEAAA4OXHIBxTbXRsu/BbL1ltLvvOGjmgAcUW91SvZw5bXsziaWwMmk996jI1tHZ1/B2zqDa+xUk
    // Xxxez+xjffnvcPeXHIgKJtrCr2tWy8Ri42xLdPSikz5CDj/OLz8U9zxacSJuFyCzu1u430AYPPVe
    // rudAfO73XkV7MsSfPxLSUjJs8796eDj9/KWEADppktR8XW68KQv8slOitxVSxXqcjGdmRobU+sHO
    // +k+eB4ABTojYytaj5Is1XX2DWkZsjWePuX6yU25aeUEsAB5VHqp5VHqp5VHqp5VHqmN80POvTub5
    // VPPVTyq989VPKo//2gAIAQIAAQUA8sMVhVtBYHdl3QKsYPA+bajYuH3K0ozKiG02LVmiQRrnXMeX
    // 1gbFirEEK/WfrOOYqvjVTGlB+DIQFrCtPJECtBSZLQsNmReTW1KnMWqv+pRSDY/ez6Sfk8XK0ide
    // ZlO4vXiOOPH/2gAIAQMAAQUA8gEmT65Jndjw/tkpj1802ADG1lnB0C0mv8a8iJa4nUgUR4rXDVIT
    // BRP7k4idQnT3oWP+dCMkSBlSogplzvRbbTmT5oV+BtWxVqpeOWGv2GY4nzF5ormZmdUrEMXbiIfu
    // D25nnnx//9oACAEBAAEFAPwew8/lzGRmquM1cVaqPixX/J2C2bLVpwm/r0zON3SQxqCGdl+xFepa
    // hhHJE+zhQ9Mftn+M1m3ryNbJTqpn2jFXJVLUa7HdESvXAmnUeDb+PH1qbu29c+4K2uptoZdJS2zE
    // aTnbYauWHWGZb1+thKRBaxOQrvqQ1c6J6R0WSojKrVdvmYgozXV614L+It4tlHLwBG4SA/6MyloT
    // jFLGFpsLnUur8E8PR+TUoK2fg20mE2t5yOMr3k9j62yhcrvuVYZZc94mEQ7M0q6f++2dB2DJNM/t
    // WWU8JZeeD6n8JgEAOzt0gxykhI5HIUxmnCLCbddxaqVSe/E9SsOCn1KmnSKNZEbcnkBqKuuhx5bK
    // cDY+R441hg2wTId1iks8ksBAN1qyusnJXnut3cpMxXxdmyaejvagMW6nYH4nBiiivbWUEG7sF2Pm
    // yVkDLGYQ3vwvXU0xgRiO2YaShdo1tSUrZh7EWKG7stOx8+O6zcsHisNXoK8OUDl9hxcY+4E2Vq6d
    // chtbcSwPQgA7ewYqL1W/UOq3o4lE/k/nV/A07hY7GIoBs//aAAgBAgIGPwC0zkWjEOSjKIIYsxvx
    // 2+O4ajyxUuGFxoSMSK6Sy0zluRGMZ6/uX9sTtns1xQnXpDCHKP1KcImoazG3KWf5qhAmMYoSNSMu
    // 78yMx1QyL9Cae9L55yQm8gxfr7ptMpFoxDklSlAMCafCEGNRVR2zTqyWmIfPxeu4f+aNIQ/0LPqy
    // /SnGmHveOf2onb7w9qhL3SD6PFdluEEmRcg923qA0TrnX3fKoE49Iv6mbtVLf//aAAgBAwIGPwC0
    // RGJQ6qvflM4CgW2OdzWKGj5J2enDFPA08yjE48fiW3JqMVgnII9FrHVDL6UJwqCHUXoQMEXdP7UQ
    // 4nI8B+NojEOShB6o+sFSmA/SHWqR5CgufyEPKWCYatz9vNdO4aTpyU45gog8Lg24sGo/FObBGR1x
    // pzC3AMHv6Hfyovj22//aAAgBAQEGPwD5iJE/PDGhjI+w9g62oPduTPWWMnTmT8NbvI+SkyjvCfnc
    // jI9gU2AhgG08K/56S3nqA4XEMuRcgjW98X6d3hrFPYOnqYrQg9DJlPUNPppmGPmlZLglgI2tdyRd
    // WMh8bKXLtaGZg0cHOyDmbs9+sQ8o6Rp8OQsMaST/AHJbvL3vLV+HMwUNy0dWlWYf1GVX7qV8SM+M
    // EjmJt09n8tTiyCfCdvyJ6eZA3iO090VkUlr2FqnCGDa+bDwf9lLiXuC0bJgmfeu4e/WMeUdP/wBW
    // ARlTUEATRPrXJzl7QGHw2VmL5N78v8FXernHmyERittUSLt2eHEiMlBoMwCrAQYiZSN+2hjTMTI0
    // vE/Y01eWuZiC3b7K0JYnQE3bFEKiLr47t9P+OudkW1wCVY7J9vvW0kOAwEMp0INcQ+2t51H11BzL
    // 9tfDyK30H5YOoNMyAK5BB7DNOGL2bSZmFHhuVrt2jj9QxJymTlyTzIU/lXMuPH+/ZZQyKYB6/qDW
    // KG/x9+pgAdZjs0mkGDM2ZgoBQqVtPZ+pQL7zRNmzZ2W0FCqOxpYnX8NaSIAJMkftosMYcCNpJ2nc
    // 28VcycVrYzlRJAJVTvKnDv8A6dKMQLZCf6iC1QSLtp38n+3SO/EQJ6BTIonqNO6kBDqZ+nu0oEk7
    // bSNDrB2/E/jpvUeoCoGMwBuqBpwLP8PxHoPi4XWbmlTDCWmaAxl3zWExwKrEW7d+/Z4KW0ajaCWK
    // yRBlBb37P56YXlAV5cqoAtA3f323LnqFL8kEFpc7FjrNqe5bW6pyGQV00FpuXebzeFaXN6gajULQ
    // UbB0SE1ZFknqBmdaus1I6xB++sePFdzQPiHQANO7y7eKnfLnXG4UxeSCSusDxXUHVSVA2ChjgmOI
    // n/TxUpCcpBEE6t9OtBso5jDrbWoxoBHShdcraKv7aZ3N4BkxvTPft8VN6dLTrDEGT+pjDqOLz1La
    // 9Z9hrGCV013xuj32Ph81WubCwDRI0u3wODC7W8FC6CrtIgEDQeb3qCqIAHTbK5gKKAMczJsUkag3
    // WKt1cv0gbDkAZMzg9v5ZXuuv9slC4asdAokkezh/HRdse3UAnWmTJIOIm07GOumzeoMTvqbQqqdZ
    // 3p5jO2Ld4Fx46xZCAhVgCp0MHTZanepWHWOmULEY8IEkam5uGhhV2TI+nqJUl8ZU22RI3H4r1oW3
    // ZspOpYkgeZot73coZMouynUk1AGlH1WAQTx6ffWS3Eucxaqm7dYm1SIbxdykXIvLeTxgghjs5hea
    // xOPCJ6bsuO9Wa7YT1W+7u+apZWUE65H1eNkXUFVRd1n5WxuJDCKZwrQzAqykgrJjmLHEyrQyJ8R8
    // 5tW83ZNt7uMQZrMlqb7U2ObgDIP069PeANboA6JKj4iiVNOro3NZiOdLXmfyr7iqL+pTaQoAEDQf
    // f5fnr2W1+0aGrcQ+vo//2Q==</ds:Object>
    // </ds:Signature>
    // 
    // 
  }
}