santuario-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sean Mullan <Sean.Mul...@Sun.COM>
Subject Re: XML DSig validation (X509Certificate) keeps failing :(
Date Thu, 18 Mar 2010 19:53:47 GMT
No idea what is causing the failure, but see the following tips for debugging 
signature validation failures:

http://weblogs.java.net/blog/2008/03/13/configuring-logging-properties-jsr-105-and-apache-xml-signature-applications
http://weblogs.java.net/blog/mullan/archive/2006/02/more_xml_signat_1.html

You should generate logging info both when you generate and when you validate 
the signature. Then, compare the "Canonicalized SignedInfo:" and "Pre-digested 
input:" debug lines and you should be able to spot the differences that is 
causing one (or more) of the digests not to match.

Often this is caused by formatters or serializers making subtle changes to the 
content of what was signed and breaking the signature between the time it was 
generated and when it is validated. For example, you can't indent or format a 
signature after it has been generated and expect it to validate ok.

--Sean

Christian Schouten wrote:
> Hi all,
> 
>  
> 
> I’m trying to build a small class to do XML Signature validation. I’ve 
> found some samples on the web but I cannot seem to get it to work for my 
> (enveloping) signed XML file, performed with an X509 certificate.
> 
> I must be rather far, since debugging println statements show I’m 
> correctly building the XML document, the Signature element is correctly 
> extracted and the x509 certificate is correctly extracted.
> 
> All is well it seems up until the last part: boolean coreValidity = 
> signature.validate(valContext);
> 
> No error is thrown, but it simply will not return true :(
> 
> If anybody quickly spots what bit it is that I am missing (sorry for the 
> large Base64-string…), that would be more than appreciated!
> 
>  
> 
> Thanks in advance for any pointers,
> 
> Best,
> 
> Chris
> 
>  
> 
>  
> 
> Code:
> 
> ---
> 
> /*
> 
> * ValidateXmlsignature.class to Base64 decode an XBRL document and its 
> XML-DSig signature and validate the signature against the document.
> 
>  */
> 
>  
> 
> package nl.mycorp.xmlsignature;
> 
>  
> 
> import java.io.ByteArrayInputStream;
> 
> import java.util.Iterator;
> 
> import java.security.Key;
> 
> import java.security.Provider;
> 
> import java.security.PublicKey;
> 
> import java.security.cert.X509Certificate;
> 
> import javax.xml.crypto.AlgorithmMethod;
> 
> import javax.xml.crypto.KeySelector;
> 
> import javax.xml.crypto.KeySelectorException;
> 
> import javax.xml.crypto.KeySelectorResult;
> 
> import javax.xml.crypto.XMLCryptoContext;
> 
> import javax.xml.crypto.XMLStructure;
> 
> import javax.xml.crypto.dsig.Reference;
> 
> import javax.xml.crypto.dsig.SignatureMethod;
> 
> import javax.xml.crypto.dsig.XMLSignature;
> 
> import javax.xml.crypto.dsig.XMLSignatureFactory;
> 
> import javax.xml.crypto.dsig.dom.DOMValidateContext;
> 
> import javax.xml.crypto.dsig.keyinfo.KeyInfo;
> 
> import javax.xml.crypto.dsig.keyinfo.X509Data;
> 
> import javax.xml.parsers.DocumentBuilderFactory;
> 
> import org.apache.commons.codec.binary.Base64;
> 
> import org.w3c.dom.Document;
> 
> import org.w3c.dom.NodeList;
> 
>  
> 
>  
> 
>  
> 
> /**
> 
>  * @author Christian C. Schouten
> 
>  * @see Based on Sun Java WSDP XML Digital Signature API Examples 
> (amongst others).
> 
> * @version ValidateXmlSignature: Version 1.0
> 
>  */
> 
> public class ValidateXmlSignature {
> 
>     public static void main(String[] args) throws Exception {
> 
>         StringBuffer base64String = new 
> StringBuffer("PFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+DQogIDxTaWduZWRJbmZvPg0KICAgIDxDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiIC8+DQogICAgPFNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIgLz4NCiAgICA8UmVmZXJlbmNlIFVSST0iI01lc3NhZ2UiPg0KICAgICAgPFRyYW5zZm9ybXM+DQogICAgICAgIDxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiIC8+DQogICAgICA8L1RyYW5zZm9ybXM+DQogICAgICA8RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiIC8+DQogICAgICA8RGlnZXN0VmFsdWU+YW9yaWhtZkw0SGlISXlTTDh2WjUrbWZjeTNRPTwvRGlnZXN0VmFsdWU+DQogICAgPC9SZWZlcmVuY2U+DQogIDwvU2lnbmVkSW5mbz4NCiAgPFNpZ25hdHVyZVZhbHVlPmxreHJNUzVtRngyQVRnV2xhWFVvcUpFWEliS0RwQzJNRzZoZWd5VlRGZkg3UlFJcTBkcXpEUFg2MXdYcVljYmFUbU12am9BTmdSV0tpMlFaZW1YTWZ1NHlQcTZFM0ZkZmd5SC93QnYwZFZROU8rMFN1RGlIOTdpMU15M2Z4YkF4N3BUSG0xckpoc0lja21Tb2N1cU
d6a1UzeFlmd0lVNnRFQXRYN3ZrZFBDVmdqZE8yVFM5RkVnRHlUQ3lGZEEzOVpVQlJPZSt5UTNnY0gxUjBpTVg2NXpSUG52MG1LZDc4Y0hpU1VRNWNGMzdBSkNia2lNMHJPWjFNSkQ0alZxYVdRN0xMMXBXSGVpRjQ1VmE4dFc3SGlqa0RwUFQ3OS9hLzI0cDR5UzR3aUhhTXk3RXpWUm4xNTJvLzdLdnB6TjhPODVBVEo5OXhZdHpOZDduZ001SWZDQT09PC9TaWduYXR1cmVWYWx1ZT4NCiAgPEtleUluZm8+DQogICAgPFg1MDlEYXRhPg0KICAgICAgPFg1MDlDZXJ0aWZpY2F0ZT5NSUlHYmpDQ0JoaWdBd0lCQWdJS0Zsa2F3d0FDQUFCMFRUQU5CZ2txaGtpRzl3MEJBUVVGQURCNE1TQXdIZ1lKS29aSWh2Y05BUWtCRmhGRFFVQm1hVzVsY21WbWJHVmpkQzV1YkRFTE1Ba0dBMVVFQmhNQ1Rrd3hDekFKQmdOVkJBZ1RBazVJTVJFd0R3WURWUVFIRXdoQllXeHpiV1ZsY2pFUE1BMEdBMVVFQ2hNR1EzSmxRV2x0TVJZd0ZBWURWUVFERXcxR2FXNWxjbVZtYkdWamRFTkJNQjRYRFRBNU1URXdOVEV5TXpFek5sb1hEVEV5TVRFd05URXlOREV6Tmxvd2dhb3hKREFpQmdrcWhraUc5dzBCQ1FFV0ZVTXVVMk5vYjNWMFpXNUFaSFYwYUd4bGNpNXViREVMTUFrR0ExVUVCaE1DVGt3eEZUQVRCZ05WQkFnVERGcDFhV1F0U0c5c2JHRnVaREVXTUJRR0ExVUVCeE1OSjNNdFIzSmhkbVZ1YUdGblpURWJNQmtHQTFVRUNoTVNSSFYwYUd4bGNpQkJjM052WTJsaGRHVnpNU2t3SndZRFZRUURFeUJuY0MxaWIzZ3VjMlZ5ZG1salpXeHBZbkpoY25r
dVpIVjBhR3hsY2k1dWJEQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxxWDFtSWRDUFR4NVFVZHpSY1JyNTEzcHlSdm51Vk9BTWd1dzU5aW51SHJUME5KVVl2ZUQyZGF3T1pCL1E1aitZcjF6U24yQ0FFSDRidHo4cDhHWDUrazd5RU95cjUzRHFDaTZLYTVmQVExb2NGQXI4bzZVNUk1Q2Q5am8yWnM3cHBUamtwQjRpUXRHTTRWdHFVODdqbERrZTVXR2V5QnE2UEpsWHN3QVZWVVpxYk12eXVHY0pmSWNHNFBzMUpxeG1xLzVjZkExdWYyaDhCU0RQOWVhZXpTVERnck1ROVhIcUZrWitqN0xsRk5ackdTUHFwMFFGNUFJQ2FyQVNLbkxGaWE4N1Nya3ZoV3ZROU9hb2Y5RElnUUNrZ0RqNmg1eFBPSVN1d2F3Y1VaRkZsRWVrQS9HRE02cmtvc01zZ05vTkxFMUlpNWdVRUFyRlFXdFZBcnU1c0NBd0VBQWFPQ0E0Y3dnZ09ETUE0R0ExVWREd0VCL3dRRUF3SUU4REFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0hRWURWUjBPQkJZRUZNWmJVRHBFVVM2SW5XRHpHK1pmN1RpU0ppalFNSUd4QmdOVkhTTUVnYWt3Z2FhQUZGKzBUc3JkUk8wY3FiVTdOUTU0MCticDVOR2RvWHlrZWpCNE1TQXdIZ1lKS29aSWh2Y05BUWtCRmhGRFFVQm1hVzVsY21WbWJHVmpkQzV1YkRFTE1Ba0dBMVVFQmhNQ1Rrd3hDekFKQmdOVkJBZ1RBazVJTVJFd0R3WURWUVFIRXdoQllXeHpiV1ZsY2pFUE1BMEdBMVVFQ2hNR1EzSmxRV2x0TVJZd0ZBWURWUVFERXcxR2FXNWxjbVZtYkdWamRFTkJnaEJSb2
gwcjZjVDRza2YzeTc2YnliVkdNSUlCTFFZRFZSMGZCSUlCSkRDQ0FTQXdnYytnZ2N5Z2djbUdnY1pzWkdGd09pOHZMME5PUFVacGJtVnlaV1pzWldOMFEwRXNRMDQ5WTNKbFlXbHRZV1FzUTA0OVEwUlFMRU5PUFZCMVlteHBZeVV5TUV0bGVTVXlNRk5sY25acFkyVnpMRU5PUFZObGNuWnBZMlZ6TEVOT1BVTnZibVpwWjNWeVlYUnBiMjRzUkVNOVkzSmxZV2x0Y0hKdlpDeEVRejFtYVc1bGNtVm1iR1ZqZEN4RVF6MXViRDlqWlhKMGFXWnBZMkYwWlZKbGRtOWpZWFJwYjI1TWFYTjBQMkpoYzJVL2IySnFaV04wWTJ4aGMzTTlZMUpNUkdsemRISnBZblYwYVc5dVVHOXBiblF3VEtCS29FaUdSbWgwZEhBNkx5OWpjbVZoYVcxaFpDNWpjbVZoYVcxd2NtOWtMbVpwYm1WeVpXWnNaV04wTG01c0wwTmxjblJGYm5KdmJHd3ZSbWx1WlhKbFpteGxZM1JEUVM1amNtd3dnZ0ZNQmdnckJnRUZCUWNCQVFTQ0FUNHdnZ0U2TUlHOUJnZ3JCZ0VGQlFjd0FvYUJzR3hrWVhBNkx5OHZRMDQ5Um1sdVpYSmxabXhsWTNSRFFTeERUajFCU1VFc1EwNDlVSFZpYkdsakpUSXdTMlY1SlRJd1UyVnlkbWxqWlhNc1EwNDlVMlZ5ZG1salpYTXNRMDQ5UTI5dVptbG5kWEpoZEdsdmJpeEVRejFqY21WaGFXMXdjbTlrTEVSRFBXWnBibVZ5Wldac1pXTjBMRVJEUFc1c1AyTkJRMlZ5ZEdsbWFXTmhkR1UvWW1GelpUOXZZbXBsWTNSamJHRnpjejFqWlhKMGFXWnBZMkYwYVc5dVFYVjBhRzl5YVhSNU1IZ0dDQ3NHQVFVRkJ6QUNobXhvZEhSd09pOHZZM0ps
WVdsdFlXUXVZM0psWVdsdGNISnZaQzVtYVc1bGNtVm1iR1ZqZEM1dWJDOURaWEowUlc1eWIyeHNMMk55WldGcGJXRmtMbU");
> 
>                 
> base64String.append("55WldGcGJYQnliMlF1Wm1sdVpYSmxabXhsWTNRdWJteGZSbWx1WlhKbFpteGxZM1JEUVNneUtTNWpjblF3RFFZSktvWklodmNOQVFFRkJRQURRUUE3WEtuVUhmN1ZsU2cza0JtbVVRM2EvNTlUUHRBM0o4ZldPZ3V5Q3lyWTRRM1pKUXY4blIzWHZlVGlheUMyWms5SzIzdjFTU0pINldYMjFBcy91Q21SPC9YNTA5Q2VydGlmaWNhdGU+DQogICAgPC9YNTA5RGF0YT4NCiAgPC9LZXlJbmZvPg0KICA8T2JqZWN0IElkPSJNZXNzYWdlIj4NCiAgICA8eGJybGk6eGJybCB4bWxuczpycHQtYmFuay1rcmVkaWV0LWtsZWluPSJodHRwOi8vd3d3LnJhcHBvcnRhZ2Vwb3J0YWFsLm5sL0JUMjAxMC9yZXBvcnQvYmFuay9ycHQtYmFuay1rcmVkaWV0LWtsZWluLTIwMDkiIHhtbG5zOmJhbmstc2M9Imh0dHA6Ly93d3cucmFwcG9ydGFnZXBvcnRhYWwubmwvQlQyMDEwL2RvbWVpbi9iYW5rL2NvbnRleHQvYmFuay1jb250ZXh0IiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczppc280MjE3PSJodHRwOi8vd3d3Lnhicmwub3JnLzIwMDMvaXNvNDIxNyIgeG1sbnM6a3ZrLXJqPSJodHRwOi8vd3d3Lm5sdGF4b25vbWllLm5sLzIwMTAvYmFzaXMva3ZrLXJqL2t2ay1yaiIgeG1sbnM6bmwtY2Q9Imh0dHA6Ly93d3cubmx0YXhvbm9taWUubmwvMjAxMC9iYXNpcy9ubC1jb21tb24tZGF0YS9ubC1jb21tb24tZGF0YSIgeG1sbnM6eGxpbms9Imh0d
HA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnJlZj0iaHR0cDovL3d3dy54YnJsLm9yZy8yMDA2L3JlZiIgeG1sbnM6YmFuay1jZD0iaHR0cDovL3d3dy5yYXBwb3J0YWdlcG9ydGFhbC5ubC9CVDIwMTAvZG9tZWluL2JhbmsvY29tbW9uLWRhdGEvYmFuay1jb21tb24tZGF0YSIgeG1sbnM6bGluaz0iaHR0cDovL3d3dy54YnJsLm9yZy8yMDAzL2xpbmtiYXNlIiB4bWxuczp4YnJsaT0iaHR0cDovL3d3dy54YnJsLm9yZy8yMDAzL2luc3RhbmNlIiB4bWxuczpubC1jb2Rlcz0iaHR0cDovL3d3dy5ubHRheG9ub21pZS5ubC8yMDEwL2Jhc2lzL25sLXR5cGVzL25sLWNvZGVzIiB4bWxuczpubC10eXBlcz0iaHR0cDovL3d3dy5ubHRheG9ub21pZS5ubC8yMDEwL2Jhc2lzL25sLXR5cGVzL25sLXR5cGVzIiB4bWxuczpyaj0iaHR0cDovL3d3dy5ubHRheG9ub21pZS5ubC8yMDEwL2RvbWVpbi9rdmsvcmoiIHhtbG5zOmt2ay1jZD0iaHR0cDovL3d3dy5ubHRheG9ub21pZS5ubC8yMDEwL2RvbWVpbi9rdmsvY29tbW9uLWRhdGEva3ZrLWNvbW1vbi1kYXRhIiB4bWxuczpiYW5rPSJodHRwOi8vd3d3LnJhcHBvcnRhZ2Vwb3J0YWFsLm5sL0JUMjAxMC9kb21laW4vYmFuay9iYW5rL2JhbmsiIHhtbG5zOmdlbj0iaHR0cDovL3d3dy5ubHRheG9ub21pZS5ubC8yMDEwL2Jhc2lzL25sLWdlbmJhc2UvbmwtZ2VuYmFzZSI+DQogICAgICA8bGluazpzY2hlbWFSZWYgeGxpbms6dHlwZT0ic2ltcGxlIiB4bGluazpocmV
mPSJodHRwOi8vd3d3LnJhcHBvcnRhZ2Vwb3J0YWFsLm5sL0JUMjAxMC9yZXBvcnQvYmFuay9ycHQtYmFuay1rcmVkaWV0LWtsZWluLTIwMDkueHNkIiAvPg0KICAgICAgPHhicmxpOmNvbnRleHQgaWQ9Imluc3QiPg0KICAgICAgICA8eGJybGk6ZW50aXR5Pg0KICAgICAgICAgIDx4YnJsaTppZGVudGlmaWVyIHNjaGVtZT0iaHR0cDovL3d3dy5iYW5rLm5sL2JhbmstaWQiPjExMDAwMDExPC94YnJsaTppZGVudGlmaWVyPg0KICAgICAgICA8L3hicmxpOmVudGl0eT4NCiAgICAgICAgPHhicmxpOnBlcmlvZD4NCiAgICAgICAgICA8eGJybGk6aW5zdGFudD4yMDA5LTEyLTMxPC94YnJsaTppbnN0YW50Pg0KICAgICAgICA8L3hicmxpOnBlcmlvZD4NCiAgICAgICAgPHhicmxpOnNjZW5hcmlvPg0KICAgICAgICAgIDxiYW5rLXNjOmJhbmtTY2VuYXJpbz5WYXN0Z2VzdGVsZDwvYmFuay1zYzpiYW5rU2NlbmFyaW8+DQogICAgICAgIDwveGJybGk6c2NlbmFyaW8+DQogICAgICA8L3hicmxpOmNvbnRleHQ+DQogICAgICA8eGJybGk6Y29udGV4dCBpZD0iZHVyIj4NCiAgICAgICAgPHhicmxpOmVudGl0eT4NCiAgICAgICAgICA8eGJybGk6aWRlbnRpZmllciBzY2hlbWU9Imh0dHA6Ly93d3cuYmFuay5ubC9iYW5rLWlkIj4xMTAwMDAxMTwveGJybGk6aWRlbnRpZmllcj4NCiAgICAgICAgPC94YnJsaTplbnRpdHk+DQogICAgICAgIDx4YnJsaTpwZXJpb2Q+DQogICAgICAgICAgPHhicmxpOnN0YXJ0RGF0ZT4yMDA5L
TAxLTAxPC94YnJsaTpzdGFydERhdGU+DQogICAgICAgICAgPHhicmxpOmVuZERhdGU+MjAwOS0xMi0zMTwveGJybGk6ZW5kRGF0ZT4NCiAgICAgICAgPC94YnJsaTpwZXJpb2Q+DQogICAgICAgIDx4YnJsaTpzY2VuYXJpbz4NCiAgICAgICAgICA8YmFuay1zYzpiYW5rU2NlbmFyaW8+VmFzdGdlc3RlbGQ8L2Jhbmstc2M6YmFua1NjZW5hcmlvPg0KICAgICAgICA8L3hicmxpOnNjZW5hcmlvPg0KICAgICAgPC94YnJsaTpjb250ZXh0Pg0KICAgICAgPHhicmxpOnVuaXQgaWQ9ImV1ciI+DQogICAgICAgIDx4YnJsaTptZWFzdXJlPmlzbzQyMTc6RVVSPC94YnJsaTptZWFzdXJlPg0KICAgICAgPC94YnJsaTp1bml0Pg0KICAgICAgPGt2ay1yajpCYWxhbmNlU2hlZXRCZWZvcmVBZnRlckFwcHJvcHJpYXRpb25SZXN1bHRzIGNvbnRleHRSZWY9ImR1ciI+TmE8L2t2ay1yajpCYWxhbmNlU2hlZXRCZWZvcmVBZnRlckFwcHJvcHJpYXRpb25SZXN1bHRzPg0KICAgICAgPGt2ay1jZDpBbm51YWxSZXBvcnRMb2NhdGlvbiBjb250ZXh0UmVmPSJkdXIiPkRlbiBIYWFnPC9rdmstY2Q6QW5udWFsUmVwb3J0TG9jYXRpb24+DQogICAgICA8YmFuay1jZDpGaW5hbmNpYWxTdGF0ZW1lbnRUeXBlIGNvbnRleHRSZWY9ImR1ciI+VmVubm9vdHNjaGFwcGVsaWprPC9iYW5rLWNkOkZpbmFuY2lhbFN0YXRlbWVudFR5cGU+DQogICAgICA8a3ZrLWNkOlN0YXRlbWVudEJ5QXVkaXRvciBjb250ZXh0UmVmPSJkdXIiPkRpdCBpcyBlZW4
gdGVzdGluc3RhbmNlIHZhbiBkZSB2ZW5ub290c2NoYXBwZWxpamtlIGtyZWRpZXRyYXBwb3J0YWdlIHZvb3IgbmF0dXVybGlqa2UgcGVyc29uZW48L2t2a");
> 
>                 
> base64String.append("y1jZDpTdGF0ZW1lbnRCeUF1ZGl0b3I+DQogICAgICA8a3ZrLWNkOk90aGVyU3RhdGVtZW50IGNvbnRleHRSZWY9ImR1ciI+SW5zdGFuY2UgaXMgZ2VtYWFrdCBtZXQgZGUgdmVyc2llIHZhbiAxOSBqYW51YXJpIDIwMTA8L2t2ay1jZDpPdGhlclN0YXRlbWVudD4NCiAgICAgIDxubC1jZDpTdGFydERhdGVGb3JGaW5hbmNpYWxQZXJpb2QgY29udGV4dFJlZj0iZHVyIj4yMDA5LTAxLTAxPC9ubC1jZDpTdGFydERhdGVGb3JGaW5hbmNpYWxQZXJpb2Q+DQogICAgICA8bmwtY2Q6RW5kRGF0ZUZvckZpbmFuY2lhbFBlcmlvZCBjb250ZXh0UmVmPSJkdXIiPjIwMDktMTItMzE8L25sLWNkOkVuZERhdGVGb3JGaW5hbmNpYWxQZXJpb2Q+DQogICAgICA8bmwtY2Q6RG9jdW1lbnRDcmVhdGlvbkRhdGUgY29udGV4dFJlZj0iZHVyIj4yMDEwLTAxLTE4PC9ubC1jZDpEb2N1bWVudENyZWF0aW9uRGF0ZT4NCiAgICAgIDxubC1jZDpOYW1lYnVzaW5lc3MgY29udGV4dFJlZj0iZHVyIj5UZXN0b25kZXJuZW1pbmc8L25sLWNkOk5hbWVidXNpbmVzcz4NCiAgICAgIDxubC1jZDpTdGF0dXRvcnlOYW1lRW50aXR5IGNvbnRleHRSZWY9ImR1ciI+VGVzdG9uZGVybmVtaW5nIENWPC9ubC1jZDpTdGF0dXRvcnlOYW1lRW50aXR5Pg0KICAgICAgPGt2ay1jZDpQbGFjZUJ1c2luZXNzIGNvbnRleHRSZWY9ImR1ciI+RGVuIEhhYWc8L2t2ay1jZDpQbGFjZUJ1c2luZXNzPg0KICAgICAgPGJhbmstY2Q6RGF0
ZUVzdGFibGlzaG1lbnRMZWdhbFBlcnNvbiBjb250ZXh0UmVmPSJkdXIiPjIwMDktMDEtMDE8L2JhbmstY2Q6RGF0ZUVzdGFibGlzaG1lbnRMZWdhbFBlcnNvbj4NCiAgICAgIDxiYW5rLWNkOkRhdGVDaGFuZ2VSZWd1bGF0aW9uc0xlZ2FsUGVyc29uIGNvbnRleHRSZWY9ImR1ciI+MjAwOS0wMS0wMjwvYmFuay1jZDpEYXRlQ2hhbmdlUmVndWxhdGlvbnNMZWdhbFBlcnNvbj4NCiAgICAgIDxubC1jZDpMZWdhbEZvcm0gY29udGV4dFJlZj0iZHVyIj5Db21tYW5kaXRhaXJlIHZlbm5vb3RzY2hhcDwvbmwtY2Q6TGVnYWxGb3JtPg0KICAgICAgPG5sLWNkOkR1dGNoQWRkcmVzcz4NCiAgICAgICAgPG5sLWNkOkRlc2NyaXB0aW9uTG9jYXRpb25OTCBjb250ZXh0UmVmPSJkdXIiPkFkcmVzIGJpbm5lbmxhbmQ8L25sLWNkOkRlc2NyaXB0aW9uTG9jYXRpb25OTD4NCiAgICAgICAgPG5sLWNkOkhvdXNlTnVtYmVyQWRkaXRpb24gY29udGV4dFJlZj0iZHVyIj5sb2NhdGllIGE8L25sLWNkOkhvdXNlTnVtYmVyQWRkaXRpb24+DQogICAgICAgIDxubC1jZDpIb3VzZU51bWJlck5MIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MzQ8L25sLWNkOkhvdXNlTnVtYmVyTkw+DQogICAgICAgIDxubC1jZDpQbGFjZU9mUmVzaWRlbmNlTkwgY29udGV4dFJlZj0iZHVyIj5EZW4gSGFhZzwvbmwtY2Q6UGxhY2VPZlJlc2lkZW5jZU5MPg0KICAgICAgICA8bmwtY2Q6UG9zdGFsQ29kZU5MIGNvbnRleH
RSZWY9ImR1ciI+MjU4MkhIPC9ubC1jZDpQb3N0YWxDb2RlTkw+DQogICAgICAgIDxubC1jZDpTdHJlZXROYW1lTkwgY29udGV4dFJlZj0iZHVyIj5QaWV0IFBhYWx0amVzcGFkPC9ubC1jZDpTdHJlZXROYW1lTkw+DQogICAgICA8L25sLWNkOkR1dGNoQWRkcmVzcz4NCiAgICAgIDxiYW5rLWNkOk5hbWVJbnRlcm1lZGlhcnkgY29udGV4dFJlZj0iZHVyIj5BY2NvdW50IGJ2PC9iYW5rLWNkOk5hbWVJbnRlcm1lZGlhcnk+DQogICAgICA8YmFuay1jZDpRdWFsaWZpY2F0aW9uSW50ZXJtZWRpYXJ5IGNvbnRleHRSZWY9ImR1ciI+UkE8L2JhbmstY2Q6UXVhbGlmaWNhdGlvbkludGVybWVkaWFyeT4NCiAgICAgIDxiYW5rLWNkOkRvbWljaWxlSW50ZXJtZWRpYXJ5IGNvbnRleHRSZWY9ImR1ciI+RGVuIEhhYWc8L2JhbmstY2Q6RG9taWNpbGVJbnRlcm1lZGlhcnk+DQogICAgICA8YmFuay1jZDpUZWxlcGhvbmVOdW1iZXJJbnRlcm1lZGlhcnkgY29udGV4dFJlZj0iZHVyIj4wNzAtMTIzNDU2NzwvYmFuay1jZDpUZWxlcGhvbmVOdW1iZXJJbnRlcm1lZGlhcnk+DQogICAgICA8YmFuay1jZDpOYW1lQ29tcGlsZXIgY29udGV4dFJlZj0iZHVyIj5QaWV0IFBhYWx0amVzPC9iYW5rLWNkOk5hbWVDb21waWxlcj4NCiAgICAgIDxiYW5rLWNkOkFjY291bnROdW1iZXJCYW5rIGNvbnRleHRSZWY9ImR1ciI+MTIzNDU2NzwvYmFuay1jZDpBY2NvdW50TnVtYmVyQmFuaz4NCiAgICAgIDxiYW5rLWNkOkNyZWRpdENvZGUgY29u
dGV4dFJlZj0iZHVyIj43NjU0MzIxPC9iYW5rLWNkOkNyZWRpdENvZGU+DQogICAgICA8YmFuazpTcXVhcmVNZXRlclNhbGVzU3VyZmFjZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwMDA8L2Jhbms6U3F1YXJlTWV0ZXJTYWxlc1N1cmZhY2U+DQogICAgICA8YmFuazpOdW1iZXJMb2NhdGlvbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yPC9iYW5rOk51bWJlckxvY2F0aW9ucz4NCiAgICAgIDxiYW5rOlNCSUNvZGUgY29udGV4dFJlZj0iZHVyIj4zPC9iYW5rOlNCSUNvZGU+DQogICAgICA8Z2VuOkdvb2R3aWxsRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwMDwvZ2VuOkdvb2R3aWxsRmlzY2FsPg0KICAgICAgPGJhbms6Q29zdHNSZXNlYXJjaEFuZERldmVsb3BtZW50IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMDwvYmFuazpDb3N0c1Jlc2VhcmNoQW5kRGV2ZWxvcG1lbnQ+DQogICAgICA8Z2VuOkNvbmNlc3Npb25zQW5kTGljZW5zZXNBbmRJbnRlbGxlY3R1YWxQcm9wZXJ0eUZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMDA8L2dlbjpDb25jZXNzaW9uc0FuZExpY2Vuc2VzQW5kSW50ZWxsZWN0dWFsUHJvcGVydHlGaXNjYWw+DQogICAgICA8Z2VuOkludGFuZ2libGVGaXhlZEFzc2V0c1BhaW
RJbkFkdmFuY2VGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NDAwPC9nZW46SW50YW5naWJsZUZpeGVkQXNz");
> 
>                 
> base64String.append("ZXRzUGFpZEluQWR2YW5jZUZpc2NhbD4NCiAgICAgIDxnZW46UHJvZHVjdGlvblJpZ2h0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDA8L2dlbjpQcm9kdWN0aW9uUmlnaHRzRmlzY2FsPg0KICAgICAgPGJhbms6T3RoZXJJbnRhbmdpYmxlRml4ZWRBc3NldHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NjAwPC9iYW5rOk90aGVySW50YW5naWJsZUZpeGVkQXNzZXRzPg0KICAgICAgPGdlbjpJbnRhbmdpYmxlRml4ZWRBc3NldHNUb3RhbEZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMTAwPC9nZW46SW50YW5naWJsZUZpeGVkQXNzZXRzVG90YWxGaXNjYWw+DQogICAgICA8YmFuazpCdXNpbmVzc1ByZW1pc2VzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE1MDwvYmFuazpCdXNpbmVzc1ByZW1pc2VzPg0KICAgICAgPGJhbms6U29pbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yNTA8L2Jhbms6U29pbD4NCiAgICAgIDxiYW5rOkJ1c2luZXNzUHJlbWlzZXNXaXRoU29pbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDA8L2Jhbms6QnVzaW5lc3NQcmVtaXNlc1dpdGhTb2lsPg0KICAgICAgPGJhbms6QnVzaW5lc3NQcmVtaXNlc1d
pdGhTb2lsU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6UmVnaXN0cnlOdW1iZXJSZWdpc3RlckJvdW5kR29vZCBjb250ZXh0UmVmPSJpbnN0Ij40MzIxPC9iYW5rOlJlZ2lzdHJ5TnVtYmVyUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOlB1cmNoYXNlVmFsdWVSZWdpc3RlckJvdW5kR29vZCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMDA8L2Jhbms6UHVyY2hhc2VWYWx1ZVJlZ2lzdGVyQm91bmRHb29kPg0KICAgICAgICA8YmFuazpQdXJjaGFzZVllYXJSZWdpc3RlckJvdW5kR29vZCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDA4PC9iYW5rOlB1cmNoYXNlWWVhclJlZ2lzdGVyQm91bmRHb29kPg0KICAgICAgICA8YmFuazpWYWx1ZVB1cnBvc2VzVmFsdWF0aW9uT2ZJbW1vdmFibGVQcm9wZXJ0eUFjdFJlZ2lzdGVyQm91bmRHb29kIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjI5NTwvYmFuazpWYWx1ZVB1cnBvc2VzVmFsdWF0aW9uT2ZJbW1vdmFibGVQcm9wZXJ0eUFjdFJlZ2lzdGVyQm91bmRHb29kPg0KICAgICAgICA8YmFuazpEYXRlT2ZBZG9wdGlvbkZvclZhbHVlT2ZJbW1vdmFibGVQcm9wZXJ0eUFjdFJlZ2lzdGVyQm91bmRHb29kIGNvbnRleHRSZWY9Imluc3QiPjIwMTAtMDEtMDE8L2Jhbms6RGF0ZU9mQWRvcHRpb25Gb3JWYWx1ZU9mSW1tb3ZhYmxlUHJvcGVyd
HlBY3RSZWdpc3RlckJvdW5kR29vZD4NCiAgICAgICAgPGJhbms6QmFsYW5jZVNoZWV0VmFsdWVSZWdpc3RlckJvdW5kR29vZCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDA8L2Jhbms6QmFsYW5jZVNoZWV0VmFsdWVSZWdpc3RlckJvdW5kR29vZD4NCiAgICAgICAgPGJhbms6QW1vcnRpc2F0aW9uTWV0aG9kUmVnaXN0ZXJCb3VuZEdvb2QgY29udGV4dFJlZj0iaW5zdCI+cmVjaHQgdG9lIHJlY2h0IGFhbjwvYmFuazpBbW9ydGlzYXRpb25NZXRob2RSZWdpc3RlckJvdW5kR29vZD4NCiAgICAgIDwvYmFuazpCdXNpbmVzc1ByZW1pc2VzV2l0aFNvaWxTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6TGVzc2Vlc0ludmVzdG1lbnRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjM1MDwvYmFuazpMZXNzZWVzSW52ZXN0bWVudHM+DQogICAgICA8YmFuazpBaXJjcmFmdHNCYWxhbmNlU2hlZXRWYWx1ZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDA8L2Jhbms6QWlyY3JhZnRzQmFsYW5jZVNoZWV0VmFsdWU+DQogICAgICA8YmFuazpBaXJjcmFmdHNTcGVjaWZpY2F0aW9uPg0KICAgICAgICA8YmFuazpSZWdpc3RyeU51bWJlclJlZ2lzdGVyQm91bmRHb29kIGNvbnRleHRSZWY9Imluc3QiPnZsaWVndHVpZzAwNzwvYmFuazpSZWdpc3RyeU51bWJlclJlZ2lzdGVyQm91bmRHb29kPg0KICAgICAgICA
8YmFuazpQdXJjaGFzZVZhbHVlUmVnaXN0ZXJCb3VuZEdvb2QgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTA1MDwvYmFuazpQdXJjaGFzZVZhbHVlUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOlB1cmNoYXNlWWVhclJlZ2lzdGVyQm91bmRHb29kIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMDk8L2Jhbms6UHVyY2hhc2VZZWFyUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVnaXN0ZXJCb3VuZEdvb2QgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwPC9iYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOkFtb3J0aXNhdGlvbk1ldGhvZFJlZ2lzdGVyQm91bmRHb29kIGNvbnRleHRSZWY9Imluc3QiPmluIDUgamFhcjwvYmFuazpBbW9ydGlzYXRpb25NZXRob2RSZWdpc3RlckJvdW5kR29vZD4NCiAgICAgIDwvYmFuazpBaXJjcmFmdHNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6U2hpcHNCYWxhbmNlU2hlZXRWYWx1ZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42MDA8L2Jhbms6U2hpcHNCYWxhbmNlU2hlZXRWYWx1ZT4NCiAgICAgIDxiYW5rOlNoaXBzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6UmVnaXN0cnlOdW1iZXJSZWdpc3Rlc
kJvdW5kR29vZCBjb250ZXh0UmVmPSJpbnN0Ij5zY2hpcDAwNzwvYmFuazpSZWdpc3RyeU51bWJlclJlZ2lzdGVyQm91bmRHb29kPg0KICAgICAgICA8YmF");
> 
>                 
> base64String.append("uazpQdXJjaGFzZVZhbHVlUmVnaXN0ZXJCb3VuZEdvb2QgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTE1MDwvYmFuazpQdXJjaGFzZVZhbHVlUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOlB1cmNoYXNlWWVhclJlZ2lzdGVyQm91bmRHb29kIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMDc8L2Jhbms6UHVyY2hhc2VZZWFyUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVnaXN0ZXJCb3VuZEdvb2QgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NjAwPC9iYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVnaXN0ZXJCb3VuZEdvb2Q+DQogICAgICAgIDxiYW5rOkFtb3J0aXNhdGlvbk1ldGhvZFJlZ2lzdGVyQm91bmRHb29kIGNvbnRleHRSZWY9Imluc3QiPmluIDMgamFhcjwvYmFuazpBbW9ydGlzYXRpb25NZXRob2RSZWdpc3RlckJvdW5kR29vZD4NCiAgICAgIDwvYmFuazpTaGlwc1NwZWNpZmljYXRpb24+DQogICAgICA8Z2VuOk1hY2hpbmVyeUZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDwvZ2VuOk1hY2hpbmVyeUZpc2NhbD4NCiAgICAgIDxnZW46Rml4dHVyZXNBbmRGaXR0aW5nc0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj
0iZXVyIj4zMDA8L2dlbjpGaXh0dXJlc0FuZEZpdHRpbmdzRmlzY2FsPg0KICAgICAgPGdlbjpDYXJzQW5kT3RoZXJUcmFuc3BvcnRNZWFuc0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDA8L2dlbjpDYXJzQW5kT3RoZXJUcmFuc3BvcnRNZWFuc0Zpc2NhbD4NCiAgICAgIDxnZW46Rml4ZWRCdXNpbmVzc0Fzc2V0c0luRGV2ZWxvcG1lbnRGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTAwPC9nZW46Rml4ZWRCdXNpbmVzc0Fzc2V0c0luRGV2ZWxvcG1lbnRGaXNjYWw+DQogICAgICA8YmFuazpQcmVwYXltZW50c1RhbmdpYmxlRml4ZWRBc3NldHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTA8L2Jhbms6UHJlcGF5bWVudHNUYW5naWJsZUZpeGVkQXNzZXRzPg0KICAgICAgPGJhbms6T3RoZXJUYW5naWJsZUZpeGVkQXNzZXRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjI1PC9iYW5rOk90aGVyVGFuZ2libGVGaXhlZEFzc2V0cz4NCiAgICAgIDxnZW46VG90YWxUYW5naWJsZUZpeGVkQXNzZXRzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjI1NzU8L2dlbjpUb3RhbFRhbmdpYmxlRml4ZWRBc3NldHNGaXNjYWw+DQogICAgICA8YmFuazpMb25nVGVybVJlY2VpdmFibGVzRnJvbVNoYXJlaG9s
ZGVyc1BhcnRpY2lwYW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDAwPC9iYW5rOkxvbmdUZXJtUmVjZWl2YWJsZXNGcm9tU2hhcmVob2xkZXJzUGFydGljaXBhbnRzPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50c1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+TExWQVAwMDc8L2Jhbms6SWRlbnRpZmljYXRpb25OdW1iZXJSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6QmFsYW5jZVNoZWV0VmFsdWVSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDAwPC9iYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOlJlZGVtcHRpb25ZZWFybHlSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xNTA8L2Jhbms6UmVkZW1wdGlvblllYXJseVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpJbnRlcmVzdFJhdGVZZWFybHlSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yPC9iYW5rOkludGVyZXN0UmF0ZVllYXJseVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblJlY2VpdmFibGVzIG
NvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25SZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6U2VjdXJpdHlSZWNlaXZhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5mYWxzZTwvYmFuazpTZWN1cml0eVJlY2VpdmFibGVzPg0KICAgICAgPC9iYW5rOkxvbmdUZXJtUmVjZWl2YWJsZXNTaGFyZWhvbGRlcnNQYXJ0aWNpcGFudHNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjMwMDA8L2Jhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJSZWNlaXZhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5MTFZERzAwNzwvYmFuazpJZGVudGlmaWNhdGlvbk51bWJlclJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpCYWxhbmNlU2hlZXRWYWx1ZVJlY2VpdmFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjMwMDA8L2Jhbms6QmFsYW5jZVNoZWV0VmFsdWVSZWNlaXZhYmxl
cz4NCiAgICAgICAgPGJhbms6UmVkZW1wdGlvblllYXJseVJlY2VpdmFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldX");
> 
>                 
> base64String.append("IiPjMwMDwvYmFuazpSZWRlbXB0aW9uWWVhcmx5UmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkludGVyZXN0UmF0ZVllYXJseVJlY2VpdmFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQ8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+ZmFsc2U8L2Jhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25SZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6U2VjdXJpdHlSZWNlaXZhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij50cnVlPC9iYW5rOlNlY3VyaXR5UmVjZWl2YWJsZXM+DQogICAgICA8L2Jhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzU3BlY2lmaWNhdGlvbj4NCiAgICAgIDxiYW5rOkxvbmdUZXJtUmVjZWl2YWJsZXNQcml2YXRlTG9hbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NDAwMDwvYmFuazpMb25nVGVybVJlY2VpdmFibGVzUHJpdmF0ZUxvYW5zPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1SZWNlaXZhYmxlc1ByaXZhdGVMb2Fuc1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+TExWT0wwM
Dc8L2Jhbms6SWRlbnRpZmljYXRpb25OdW1iZXJSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6QmFsYW5jZVNoZWV0VmFsdWVSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDAwPC9iYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOlJlZGVtcHRpb25ZZWFybHlSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDA8L2Jhbms6UmVkZW1wdGlvblllYXJseVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpJbnRlcmVzdFJhdGVZZWFybHlSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDwvYmFuazpJbnRlcmVzdFJhdGVZZWFybHlSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25SZWNlaXZhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij50cnVlPC9iYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOlNlY3VyaXR5UmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+ZmFsc2U8L2Jhbms6U2VjdXJpdHlSZWNlaXZhYmxlcz4NCiAgICAgIDwvYmFuazpMb25nVGVybVJlY2VpdmFibGVzUHJpdmF0ZUxvYW5zU3BlY2lmaWNhdGlvbj4NCiAgICAgIDxiYW5rOlBhcnRpY2lwYXRpbmdJbnRlcmVzdHMgZGVjaW1hbHM9IjAiIGNvbnR
leHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwMDwvYmFuazpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzPg0KICAgICAgPGJhbms6SW52ZXN0bWVudHNMaXN0ZWRPblN0b2NrTWFya2V0IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwMDA8L2Jhbms6SW52ZXN0bWVudHNMaXN0ZWRPblN0b2NrTWFya2V0Pg0KICAgICAgPGJhbms6SW52ZXN0bWVudHNOb3RMaXN0ZWRPblN0b2NrTWFya2V0IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMDA8L2Jhbms6SW52ZXN0bWVudHNOb3RMaXN0ZWRPblN0b2NrTWFya2V0Pg0KICAgICAgPGJhbms6T3RoZXJGaW5hbmNpYWxGaXhlZEFzc2V0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMDAwPC9iYW5rOk90aGVyRmluYW5jaWFsRml4ZWRBc3NldHM+DQogICAgICA8Z2VuOkZpbmFuY2lhbEZpeGVkQXNzZXRzVG90YWxGaXNjYWwgZGVjaW1hbHM9IjMiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDA8L2dlbjpGaW5hbmNpYWxGaXhlZEFzc2V0c1RvdGFsRmlzY2FsPg0KICAgICAgPGt2ay1yajpBc3NldHNOb25DdXJyZW50VG90YWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjQ2NzU8L2t2ay1yajpBc3NldHNOb25DdXJyZW50VG90YWw+DQogICAgICA8Z2VuOldvcmtJblByb2dyZXNzRmlzY2FsIGRlY
2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwPC9nZW46V29ya0luUHJvZ3Jlc3NGaXNjYWw+DQogICAgICA8YmFuazpEZXBvc2l0V29ya0luUHJvZ3Jlc3MgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjA8L2Jhbms6RGVwb3NpdFdvcmtJblByb2dyZXNzPg0KICAgICAgPGdlbjpSYXdBbmRBbmNpbGxhcnlNYXRlcmlhbHNGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzA8L2dlbjpSYXdBbmRBbmNpbGxhcnlNYXRlcmlhbHNGaXNjYWw+DQogICAgICA8Z2VuOkZpbmlzaGVkUHJvZHVjdHNBbmRDb21tZXJjaWFsR29vZHNGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NDA8L2dlbjpGaW5pc2hlZFByb2R1Y3RzQW5kQ29tbWVyY2lhbEdvb2RzRmlzY2FsPg0KICAgICAgPGJhbms6T3RoZXJJbnZlbnRvcmllcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDwvYmFuazpPdGhlckludmVudG9yaWVzPg0KICAgICAgPGdlbjpTdG9ja1RvdGFsRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE1MDwvZ2VuOlN0b2NrVG90YWxGaXNjYWw+DQogICAgICA8YmFuazpUcmFkZVJlY2VpdmFibGVzTm9taW5hbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXV
yIj42MDwvYmFuazpUcmFkZVJlY2VpdmFibGVzTm9taW5hbD4NCiAgICAgIDxiYW5rOkludGVyY29tcGFueVRyYWRlUmVjZWl2YWJsZXMgZGVjaW1hbHM9I");
> 
>                 
> base64String.append("jAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjMwPC9iYW5rOkludGVyY29tcGFueVRyYWRlUmVjZWl2YWJsZXM+DQogICAgICA8YmFuazpQcm92aXNpb25zVHJhZGVSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4tODA8L2Jhbms6UHJvdmlzaW9uc1RyYWRlUmVjZWl2YWJsZXM+DQogICAgICA8Z2VuOlRyYWRlUmVjZWl2YWJsZXNGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjEwPC9nZW46VHJhZGVSZWNlaXZhYmxlc0Zpc2NhbD4NCiAgICAgIDxiYW5rOlRyYWRlUmVjZWl2YWJsZXNUaGlydHlEYXlzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwPC9iYW5rOlRyYWRlUmVjZWl2YWJsZXNUaGlydHlEYXlzPg0KICAgICAgPGJhbms6VHJhZGVSZWNlaXZhYmxlc1NpeHR5RGF5cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDwvYmFuazpUcmFkZVJlY2VpdmFibGVzU2l4dHlEYXlzPg0KICAgICAgPGJhbms6VHJhZGVSZWNlaXZhYmxlc05pbmV0eURheXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+OTA8L2Jhbms6VHJhZGVSZWNlaXZhYmxlc05pbmV0eURheXM+DQogICAgICA8YmFuazpUcmFkZVJlY2VpdmFibGVzQWJvdmVOaW5ldHlEYXlzIGRlY2lt
YWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjYwPC9iYW5rOlRyYWRlUmVjZWl2YWJsZXNBYm92ZU5pbmV0eURheXM+DQogICAgICA8YmFuazpTaG9ydFRlcm1SZWNlaXZhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xNTAwPC9iYW5rOlNob3J0VGVybVJlY2VpdmFibGVzU2hhcmVob2xkZXJzUGFydGljaXBhbnRzPg0KICAgICAgPGJhbms6U2hvcnRUZXJtUmVjZWl2YWJsZXNTaGFyZWhvbGRlcnNQYXJ0aWNpcGFudHNTcGVjaWZpY2F0aW9uPg0KICAgICAgICA8YmFuazpJZGVudGlmaWNhdGlvbk51bWJlclJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPktMVkFQMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTUwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTUwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIG
NvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTE8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6U2VjdXJpdHlSZWNlaXZhYmxlcz4NCiAgICAgIDwvYmFuazpTaG9ydFRlcm1SZWNlaXZhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50c1NwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpTaG9ydFRlcm1SZWNlaXZhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjI1MDA8L2Jhbms6U2hvcnRUZXJtUmVjZWl2YWJsZXNQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzQWZmaWxpYXRlZENvbXBhbmllcz4NCiAgICAgIDxiYW5rOlNob3J0VGVybVJlY2VpdmFibGVzUGFydGljaXBhdGluZ0ludGVyZXN0c0FmZmlsaWF0ZWRDb21wYW5pZXNTcGVjaWZpY2F0aW9uPg0KICAgICAgICA8YmFuazpJZGVudGlmaWNhdGlvbk51bWJlclJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPktMVkRHMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUmVjZWl2YWJsZXM+DQog
ICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjUwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjUwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOlNlY3VyaXR5UmVjZWl2YWJsZXM+DQogICAgICA8L2Jhbms6U2hvcnRUZXJtUmVjZWl2YWJsZXNQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzQWZmaWxpYXRlZENvbXBhbmllc1NwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpTaG9ydFRlcm1SZWNlaXZhYmxlc1ByaXZhdGVMb2FucyBkZWNpbWFscz0iMCIgY29udGV4dF
JlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zNTAwPC9iYW5rOlNob3J0VGVybVJlY2VpdmFibGVzUHJpdmF0ZUxvYW5zPg0KICAgICAgPGJhbms6U2hvcnRU");
> 
>                 
> base64String.append("ZXJtUmVjZWl2YWJsZXNQcml2YXRlTG9hbnNTcGVjaWZpY2F0aW9uPg0KICAgICAgICA8YmFuazpJZGVudGlmaWNhdGlvbk51bWJlclJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPktMVk9MMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzUwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzUwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlSZWNlaXZhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UmVjZWl2YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUmVjZWl2YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblJlY2VpdmFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVJlY2VpdmFibGVzIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOlNlY3V
yaXR5UmVjZWl2YWJsZXM+DQogICAgICA8L2Jhbms6U2hvcnRUZXJtUmVjZWl2YWJsZXNQcml2YXRlTG9hbnNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGdlbjpBY2NydWVkSW5jb21lRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQ1MDA8L2dlbjpBY2NydWVkSW5jb21lRmlzY2FsPg0KICAgICAgPGJhbms6T3RoZXJSZWNlaXZhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41NTAwPC9iYW5rOk90aGVyUmVjZWl2YWJsZXM+DQogICAgICA8YmFuazpUYXhlc1JlY2VpdmFibGUgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjUwMDwvYmFuazpUYXhlc1JlY2VpdmFibGU+DQogICAgICA8YmFuazpQcmVwYXltZW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMDAwPC9iYW5rOlByZXBheW1lbnRzPg0KICAgICAgPGdlbjpSZWNlaXZhYmxlc1RvdGFsRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE3NzEwPC9nZW46UmVjZWl2YWJsZXNUb3RhbEZpc2NhbD4NCiAgICAgIDxnZW46U2VjdXJpdGllc0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwPC9nZW46U2VjdXJpdGllc0Zpc2NhbD4NCiAgICAgIDxnZW46TGlxdWlkQXNzZXRzVG90YWxGaXNjYWwgZGVja
W1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTU4NDY1PC9nZW46TGlxdWlkQXNzZXRzVG90YWxGaXNjYWw+DQogICAgICA8YmFuazpPdGhlckxpcXVpZEFzc2V0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj43NTA8L2Jhbms6T3RoZXJMaXF1aWRBc3NldHM+DQogICAgICA8YmFuazpCYWxhbmNlR0JhbmtBY2NvdW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xNTY5NjU8L2Jhbms6QmFsYW5jZUdCYW5rQWNjb3VudHM+DQogICAgICA8Z2VuOkJhbmtDcmVkaXRzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjc1MDwvZ2VuOkJhbmtDcmVkaXRzRmlzY2FsPg0KICAgICAgPGt2ay1yajpBc3NldHNDdXJyZW50VG90YWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTc3MzI1PC9rdmstcmo6QXNzZXRzQ3VycmVudFRvdGFsPg0KICAgICAgPGdlbjpBc3NldHNUb3RhbEFtb3VudEZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDIwMDA8L2dlbjpBc3NldHNUb3RhbEFtb3VudEZpc2NhbD4NCiAgICAgIDxrdmstcmo6UmV2YWx1YXRpb25SZXNlcnZlIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQwMDwva3ZrLXJqOlJldmFsdWF0aW9uUmVzZXJ2ZT4
NCiAgICAgIDxrdmstcmo6TGVnYWxTdGF0dXRvcnlSZXNlcnZlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDA8L2t2ay1yajpMZWdhbFN0YXR1dG9yeVJlc2VydmVzPg0KICAgICAgPGt2ay1yajpTdGF0dXRvcnlSZXNlcnZlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDA8L2t2ay1yajpTdGF0dXRvcnlSZXNlcnZlcz4NCiAgICAgIDxnZW46UmVpbnZlc3RtZW50UmVzZXJ2ZUZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42MDA8L2dlbjpSZWludmVzdG1lbnRSZXNlcnZlRmlzY2FsPg0KICAgICAgPGt2ay1yajpPdGhlckZpc2NhbFJlc2VydmVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjcwMDwva3ZrLXJqOk90aGVyRmlzY2FsUmVzZXJ2ZXM+DQogICAgICA8a3ZrLXJqOlJlc3VsdEZvclRoZVllYXIgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTcwMDwva3ZrLXJqOlJlc3VsdEZvclRoZVllYXI+DQogICAgICA8a3ZrLXJqOkVxdWl0eVRvdGFsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQ1MDA8L2t2ay1yajpFcXVpdHlUb3RhbD4NCiAgICAgIDxnZW46QW5udWl0eVJlc2VydmVGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1c
iI+MTAwPC9nZW46QW5udWl0eVJlc2VydmVGaXNjYWw+DQogICAgICA8Z2VuOlBlbnNpb25Qcm92aXNpb25GaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHR");
> 
>                 
> base64String.append("SZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwPC9nZW46UGVuc2lvblByb3Zpc2lvbkZpc2NhbD4NCiAgICAgIDxiYW5rOk90aGVyT3BlcmF0aW9uYWxQcm92aXNvbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NDAwPC9iYW5rOk90aGVyT3BlcmF0aW9uYWxQcm92aXNvbnM+DQogICAgICA8YmFuazpPdGhlck5vdE9wZXJhdGlvbmFsUHJvdmlzaW9ucyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj41MDA8L2Jhbms6T3RoZXJOb3RPcGVyYXRpb25hbFByb3Zpc2lvbnM+DQogICAgICA8YmFuazpPdGhlclByb3Zpc2lvbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+OTAwPC9iYW5rOk90aGVyUHJvdmlzaW9ucz4NCiAgICAgIDxnZW46UHJvdmlzaW9uc1RvdGFsRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE1MDA8L2dlbjpQcm92aXNpb25zVG90YWxGaXNjYWw+DQogICAgICA8YmFuazpMb25nVGVybVBheWFibGVzU2hhcmVob2xkZXJzUGFydGljaXBhbnRzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6RmluYW5jaWVyQm9ycm93aW5nQXJyYW5nZW1lbnRGaW5hbmNpYWxJbnN0aXR1dGlvbnMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpGaW5hbmNpZXJCb3Jyb3dpbmdBcnJhbmdlbWVudEZpbmFuY2lhbEluc3
RpdHV0aW9ucz4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5MTFZBUDAwNzwvYmFuazpJZGVudGlmaWNhdGlvbk51bWJlclBheWFibGVzPg0KICAgICAgICA8YmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwMDA8L2Jhbms6QmFsYW5jZVNoZWV0VmFsdWVQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6Q2FwaXRhbFN1bUJvcnJvd2luZ0FycmFuZ2VtZW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwMDwvYmFuazpDYXBpdGFsU3VtQm9ycm93aW5nQXJyYW5nZW1lbnRzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTwvYmFuazpJbnRlcmVzdFJhdGVZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6T3JpZ2luYWxNYXR1cml0eUluTW9udGhzQm9ycm93aW5nQXJyYW5nZW1lbnRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjM2PC9iYW5rOk9yaWdp
bmFsTWF0dXJpdHlJbk1vbnRoc0JvcnJvd2luZ0FycmFuZ2VtZW50cz4NCiAgICAgICAgPGJhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25QYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij50cnVlPC9iYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOlNlY3VyaXR5UGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+ZmFsc2U8L2Jhbms6U2VjdXJpdHlQYXlhYmxlcz4NCiAgICAgIDwvYmFuazpMb25nVGVybVBheWFibGVzU2hhcmVob2xkZXJzUGFydGljaXBhbnRzU3BlY2lmaWNhdGlvbj4NCiAgICAgIDxiYW5rOkxvbmdUZXJtUGF5YWJsZXNQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzQWZmaWxpYXRlZENvbXBhbmllc1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOkZpbmFuY2llckJvcnJvd2luZ0FycmFuZ2VtZW50RmluYW5jaWFsSW5zdGl0dXRpb25zIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOkZpbmFuY2llckJvcnJvd2luZ0FycmFuZ2VtZW50RmluYW5jaWFsSW5zdGl0dXRpb25zPg0KICAgICAgICA8YmFuazpJZGVudGlmaWNhdGlvbk51bWJlclBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPkxMVkRHMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDwvYmFuazpCYWxhbm
NlU2hlZXRWYWx1ZVBheWFibGVzPg0KICAgICAgICA8YmFuazpDYXBpdGFsU3VtQm9ycm93aW5nQXJyYW5nZW1lbnRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMDAwPC9iYW5rOkNhcGl0YWxTdW1Cb3Jyb3dpbmdBcnJhbmdlbWVudHM+DQogICAgICAgIDxiYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42MDA8L2Jhbms6UmVkZW1wdGlvblllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpJbnRlcmVzdFJhdGVZZWFybHlQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42PC9iYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpPcmlnaW5hbE1hdHVyaXR5SW5Nb250aHNCb3Jyb3dpbmdBcnJhbmdlbWVudHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NDg8L2Jhbms6T3JpZ2luYWxNYXR1cml0eUluTW9udGhzQm9ycm93aW5nQXJyYW5nZW1lbnRzPg0KICAgICAgICA8YmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25QYXlhYmxlcz4NCiAgICAgICAgPGJhbms6U2VjdXJpdHlQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij50cnVlPC9iYW5rOlNlY3VyaXR5
UGF5YWJsZXM+DQogICAgICA8L2Jhbms6TG9uZ1Rlcm1QYXlhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzU3BlY2lmaW");
> 
>                 
> base64String.append("NhdGlvbj4NCiAgICAgIDxiYW5rOkxvbmdUZXJtUGF5YWJsZXNDcmVkaXRJbnN0aXR1dGlvblNwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOkZpbmFuY2llckJvcnJvd2luZ0FycmFuZ2VtZW50RmluYW5jaWFsSW5zdGl0dXRpb25zIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOkZpbmFuY2llckJvcnJvd2luZ0FycmFuZ2VtZW50RmluYW5jaWFsSW5zdGl0dXRpb25zPg0KICAgICAgICA8YmFuazpJZGVudGlmaWNhdGlvbk51bWJlclBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPkxMVktJMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzAwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzPg0KICAgICAgICA8YmFuazpDYXBpdGFsU3VtQm9ycm93aW5nQXJyYW5nZW1lbnRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjMwMDAwPC9iYW5rOkNhcGl0YWxTdW1Cb3Jyb3dpbmdBcnJhbmdlbWVudHM+DQogICAgICAgIDxiYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj43MDA8L2Jhbms6UmVkZW1wdGlvblllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpJbnRlc
mVzdFJhdGVZZWFybHlQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj43PC9iYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpPcmlnaW5hbE1hdHVyaXR5SW5Nb250aHNCb3Jyb3dpbmdBcnJhbmdlbWVudHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTA8L2Jhbms6T3JpZ2luYWxNYXR1cml0eUluTW9udGhzQm9ycm93aW5nQXJyYW5nZW1lbnRzPg0KICAgICAgICA8YmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOlNlY3VyaXR5UGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+ZmFsc2U8L2Jhbms6U2VjdXJpdHlQYXlhYmxlcz4NCiAgICAgIDwvYmFuazpMb25nVGVybVBheWFibGVzQ3JlZGl0SW5zdGl0dXRpb25TcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1QYXlhYmxlc1ByaXZhdGVMb2Fuc1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOkZpbmFuY2llckJvcnJvd2luZ0FycmFuZ2VtZW50RmluYW5jaWFsSW5zdGl0dXRpb25zIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6RmluYW5jaWVyQm9ycm93aW5nQXJyYW5nZW1lbnRGaW5hbmNpYWxJbnN0aXR1dGlvbnM+DQogICAgICAgIDxiYW5rOklkZW50aWZ
pY2F0aW9uTnVtYmVyUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+TExWT0wwMDc8L2Jhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6UGFydHkgY29udGV4dFJlZj0iaW5zdCI+cGFydGlqMDA3PC9iYW5rOlBhcnR5Pg0KICAgICAgICA8YmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQwMDA8L2Jhbms6QmFsYW5jZVNoZWV0VmFsdWVQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6Q2FwaXRhbFN1bUJvcnJvd2luZ0FycmFuZ2VtZW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDAwMDwvYmFuazpDYXBpdGFsU3VtQm9ycm93aW5nQXJyYW5nZW1lbnRzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+ODAwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+ODwvYmFuazpJbnRlcmVzdFJhdGVZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6T3JpZ2luYWxNYXR1cml0eUluTW9udGhzQm9ycm93aW5nQXJyYW5nZW1lbnRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0I
iB1bml0UmVmPSJldXIiPjUyPC9iYW5rOk9yaWdpbmFsTWF0dXJpdHlJbk1vbnRoc0JvcnJvd2luZ0FycmFuZ2VtZW50cz4NCiAgICAgICAgPGJhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25QYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij50cnVlPC9iYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOlNlY3VyaXR5UGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpTZWN1cml0eVBheWFibGVzPg0KICAgICAgPC9iYW5rOkxvbmdUZXJtUGF5YWJsZXNQcml2YXRlTG9hbnNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6TG9uZ1Rlcm1QYXlhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwPC9iYW5rOkxvbmdUZXJtUGF5YWJsZXNTaGFyZWhvbGRlcnNQYXJ0aWNpcGFudHM+DQogICAgICA8YmFuazpMb25nVGVybVBheWFibGVzUGFydGljaXBhdGluZ0ludGVyZXN0c0FmZmlsaWF0ZWRDb21wYW5pZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDwvYmFuazpMb25nVGVybVBheWFibGVzUGFydGljaXBhdGluZ0ludGVyZXN0c0FmZmlsaWF0ZWRDb21wYW5pZXM+DQogICAgICA8YmFuazpMb25nVGVybVBheWFibGVzQ3JlZGl0SW5zdGl0dXRpb24gZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV
1ciI+MzAwMDwvYmFuazpMb25nVGVybVBheWFibGVzQ3JlZGl0SW5zdGl0dXRpb24+DQogICAgICA8YmFuazpMb25nVGVybVBheWFibGVzUHJpdmF0ZUxvY");
> 
>                 
> base64String.append("W5zIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQwMDA8L2Jhbms6TG9uZ1Rlcm1QYXlhYmxlc1ByaXZhdGVMb2Fucz4NCiAgICAgIDxrdmstcmo6QWNjcnVhbHNEZWZlcnJlZEluY29tZU5vbkN1cnJlbnQgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTAwMDA8L2t2ay1yajpBY2NydWFsc0RlZmVycmVkSW5jb21lTm9uQ3VycmVudD4NCiAgICAgIDxnZW46VHJhZGVQYXlhYmxlc0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwMDwvZ2VuOlRyYWRlUGF5YWJsZXNGaXNjYWw+DQogICAgICA8YmFuazpUcmFkZVBheWFibGVzVGhpcnR5RGF5cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwPC9iYW5rOlRyYWRlUGF5YWJsZXNUaGlydHlEYXlzPg0KICAgICAgPGJhbms6VHJhZGVQYXlhYmxlc1NpeHR5RGF5cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDAwPC9iYW5rOlRyYWRlUGF5YWJsZXNTaXh0eURheXM+DQogICAgICA8YmFuazpUcmFkZVBheWFibGVzTmluZXR5RGF5cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMDAwPC9iYW5rOlRyYWRlUGF5YWJsZXNOaW5ldHlEYXlzPg0KICAgICAgPGJhbms6VHJhZGVQYXlhYmxlc0Fib3ZlTmlu
ZXR5RGF5cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDAwPC9iYW5rOlRyYWRlUGF5YWJsZXNBYm92ZU5pbmV0eURheXM+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMTAwMDwvYmFuazpTaG9ydFRlcm1QYXlhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50cz4NCiAgICAgIDxiYW5rOlNob3J0VGVybVBheWFibGVzU2hhcmVob2xkZXJzUGFydGljaXBhbnRzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5LTFZBUDAwNzwvYmFuazpJZGVudGlmaWNhdGlvbk51bWJlclBheWFibGVzPg0KICAgICAgICA8YmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjExMDAwPC9iYW5rOkJhbGFuY2VTaGVldFZhbHVlUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMTAwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3
QiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6U2VjdXJpdHlQYXlhYmxlcz4NCiAgICAgIDwvYmFuazpTaG9ydFRlcm1QYXlhYmxlc1NoYXJlaG9sZGVyc1BhcnRpY2lwYW50c1NwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEyMDAwPC9iYW5rOlNob3J0VGVybVBheWFibGVzUGFydGljaXBhdGluZ0ludGVyZXN0c0FmZmlsaWF0ZWRDb21wYW5pZXM+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5LTFZEMDA3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkJhbGFuY2VTaGVldFZhbHVlUGF5YWJsZXMgZGVjaW1hbHM9
IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+NTAwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOlNlY3VyaXR5UGF5YWJsZXM+DQogICAgICA8L2Jhbms6U2hvcnRUZXJtUGF5YWJsZXNQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzQWZmaWxpYXRlZENvbXBhbmllc1NwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBZmZpbGlhdGVkQ29tcGFuaWVzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij
5LTFZHQjAwNzwvYmFuazpJZGVudGlmaWNhdGlvbk51bWJlclBheWFibGVzPg0KICAgICAgICA8YmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzIGRl");
> 
>                 
> base64String.append("Y2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjcwMDA8L2Jhbms6QmFsYW5jZVNoZWV0VmFsdWVQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6UmVkZW1wdGlvblllYXJseVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjcwMDwvYmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjExPC9iYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25QYXlhYmxlcz4NCiAgICAgICAgPGJhbms6U2VjdXJpdHlQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5mYWxzZTwvYmFuazpTZWN1cml0eVBheWFibGVzPg0KICAgICAgPC9iYW5rOlNob3J0VGVybVBheWFibGVzUGFydGljaXBhdGluZ0ludGVyZXN0c0FmZmlsaWF0ZWRDb21wYW5pZXNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6U2hvcnRUZXJtUGF5YWJsZXNDcmVkaXRJbnN0aXR1dGlvbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTMwMDA8L2Jhbms6U2hvcnRUZXJtUGF5YWJsZXN
DcmVkaXRJbnN0aXR1dGlvbnM+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc0NyZWRpdEluc3RpdHV0aW9uc1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+S0xWS0kwMDc8L2Jhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6QmFsYW5jZVNoZWV0VmFsdWVQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMzAwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzPg0KICAgICAgICA8YmFuazpOb21pbmFsQ3JlZGl0TGltaXQgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDA8L2Jhbms6Tm9taW5hbENyZWRpdExpbWl0Pg0KICAgICAgICA8YmFuazpBZGRpdGlvbmFsQ3JlZGl0TGltaXQgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzAwMDA8L2Jhbms6QWRkaXRpb25hbENyZWRpdExpbWl0Pg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwPC9iYW5rOlJlZGVtcHRpb25ZZWFybHlQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZ
WY9ImV1ciI+MjA8L2Jhbms6SW50ZXJlc3RSYXRlWWVhcmx5UGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkluZGljYXRpb25TdWJvcmRpbmF0aW9uUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+dHJ1ZTwvYmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzPg0KICAgICAgICA8YmFuazpTZWN1cml0eVBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPmZhbHNlPC9iYW5rOlNlY3VyaXR5UGF5YWJsZXM+DQogICAgICA8L2Jhbms6U2hvcnRUZXJtUGF5YWJsZXNDcmVkaXRJbnN0aXR1dGlvbnNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGJhbms6U2hvcnRUZXJtUGF5YWJsZXNQcml2YXRlTG9hbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTQwMDA8L2Jhbms6U2hvcnRUZXJtUGF5YWJsZXNQcml2YXRlTG9hbnM+DQogICAgICA8YmFuazpTaG9ydFRlcm1QYXlhYmxlc1ByaXZhdGVMb2Fuc1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyUGF5YWJsZXMgY29udGV4dFJlZj0iaW5zdCI+S0xWT0kwMDc8L2Jhbms6SWRlbnRpZmljYXRpb25OdW1iZXJQYXlhYmxlcz4NCiAgICAgICAgPGJhbms6QmFsYW5jZVNoZWV0VmFsdWVQYXlhYmxlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xNDAwMDwvYmFuazpCYWxhbmNlU2hlZXRWYWx1ZVBheWFibGVzPg0KICAgICAgICA8YmFuazpSZWRlbXB0aW9
uWWVhcmx5UGF5YWJsZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTQwMDwvYmFuazpSZWRlbXB0aW9uWWVhcmx5UGF5YWJsZXM+DQogICAgICAgIDxiYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEyPC9iYW5rOkludGVyZXN0UmF0ZVllYXJseVBheWFibGVzPg0KICAgICAgICA8YmFuazpJbmRpY2F0aW9uU3Vib3JkaW5hdGlvblBheWFibGVzIGNvbnRleHRSZWY9Imluc3QiPnRydWU8L2Jhbms6SW5kaWNhdGlvblN1Ym9yZGluYXRpb25QYXlhYmxlcz4NCiAgICAgICAgPGJhbms6U2VjdXJpdHlQYXlhYmxlcyBjb250ZXh0UmVmPSJpbnN0Ij5mYWxzZTwvYmFuazpTZWN1cml0eVBheWFibGVzPg0KICAgICAgPC9iYW5rOlNob3J0VGVybVBheWFibGVzUHJpdmF0ZUxvYW5zU3BlY2lmaWNhdGlvbj4NCiAgICAgIDxiYW5rOlBheWFibGVzVmFsdWVBZGRlZFRheCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xNTAwMDwvYmFuazpQYXlhYmxlc1ZhbHVlQWRkZWRUYXg+DQogICAgICA8YmFuazpXYWdlVGF4QW5kU29jaWFsU2VjdXJpdHlDb3N0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4zMzAwMDwvYmFuazpXYWdlVGF4QW5kU29jaWFsU2VjdXJpdHlDb3N0cz4NCiAgICAgIDxiYW5rOkVtcGxveWVlSW5zdXJhb
mNlQ29udHJpYnV0aW9ucyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xODAwMDwvYmFuazpFbXBsb3llZUluc3VyYW5");
> 
>                 
> base64String.append("jZUNvbnRyaWJ1dGlvbnM+DQogICAgICA8YmFuazpSZWNlaXZlZEFkdmFuY2VQYXltZW50c1dvcmtJblByb2dyZXNzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE5MDAwPC9iYW5rOlJlY2VpdmVkQWR2YW5jZVBheW1lbnRzV29ya0luUHJvZ3Jlc3M+DQogICAgICA8YmFuazpPdGhlclBheWFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjQxMDAwPC9iYW5rOk90aGVyUGF5YWJsZXM+DQogICAgICA8a3ZrLXJqOkFjY3J1YWxzRGVmZXJyZWRJbmNvbWVDdXJyZW50IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjE4NjAwMDwva3ZrLXJqOkFjY3J1YWxzRGVmZXJyZWRJbmNvbWVDdXJyZW50Pg0KICAgICAgPGdlbjpMaWFiaWxpdGllc1RvdGFsRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIwMjAwMDwvZ2VuOkxpYWJpbGl0aWVzVG90YWxGaXNjYWw+DQogICAgICA8a3ZrLXJqOk5ldFJlc3VsdEFmdGVyVGF4IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTIwMDAwPC9rdmstcmo6TmV0UmVzdWx0QWZ0ZXJUYXg+DQogICAgICA8a3ZrLXJqOlByb2ZpdExvc3NCZWZvcmVUYXggZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj40MDAwMDwva3ZrLXJqOlByb2ZpdE
xvc3NCZWZvcmVUYXg+DQogICAgICA8a3ZrLXJqOkdyb3NzTWFyZ2luIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+NDQwMDA8L2t2ay1yajpHcm9zc01hcmdpbj4NCiAgICAgIDxrdmstcmo6U2hhcmVSZXN1bHRzU3Vic2lkaWFyaWVzVG90YWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj40MDAwMDwva3ZrLXJqOlNoYXJlUmVzdWx0c1N1YnNpZGlhcmllc1RvdGFsPg0KICAgICAgPGt2ay1yajpFeHRyYW9yZGluYXJ5SXRlbXNJbmNvbWVFeHBlbnNlQWZ0ZXJUYXggZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj40MDAwMDwva3ZrLXJqOkV4dHJhb3JkaW5hcnlJdGVtc0luY29tZUV4cGVuc2VBZnRlclRheD4NCiAgICAgIDxiYW5rOkV4dHJhb3JkaW5hcnlJdGVtc0luY29tZUV4cGVuc2VCZWZvcmVUYXggZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj41MDAwMDwvYmFuazpFeHRyYW9yZGluYXJ5SXRlbXNJbmNvbWVFeHBlbnNlQmVmb3JlVGF4Pg0KICAgICAgPGdlbjpFeHRyYW9yZGluYXJ5SW5jb21lQnVzaW5lc3NUb3RhbEZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjQwMDAwPC9nZW46RXh0cmFvcmRpbmFyeUluY29tZUJ1c2luZXNzVG90YWxGaXNjYWw+DQogICAgICA8Z2VuOkV4dHJhb3JkaW5hcnlFeHBlbmRpdHVyZUJ1c2luZXNz
VG90YWxGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMDAwMDwvZ2VuOkV4dHJhb3JkaW5hcnlFeHBlbmRpdHVyZUJ1c2luZXNzVG90YWxGaXNjYWw+DQogICAgICA8YmFuazpPdGhlckNoYW5nZXNBc2lkZUZyb21SZXN1bHRzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjAwMDA8L2Jhbms6T3RoZXJDaGFuZ2VzQXNpZGVGcm9tUmVzdWx0cz4NCiAgICAgIDxrdmstcmo6VGF4RXhwZW5zZUluY29tZUF0dHJpYnV0YWJsZUV4dHJhb3JkaW5hcnlJdGVtc0luY29tZUV4cGVuc2UgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMDAwMDwva3ZrLXJqOlRheEV4cGVuc2VJbmNvbWVBdHRyaWJ1dGFibGVFeHRyYW9yZGluYXJ5SXRlbXNJbmNvbWVFeHBlbnNlPg0KICAgICAgPGt2ay1yajpUb3RhbEJ1c2luZXNzQ29zdHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMDAwMDwva3ZrLXJqOlRvdGFsQnVzaW5lc3NDb3N0cz4NCiAgICAgIDxrdmstcmo6UmV2ZW51ZXNSZXZlaXZhYmxlc1RvdGFsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTUwMDA8L2t2ay1yajpSZXZlbnVlc1JldmVpdmFibGVzVG90YWw+DQogICAgICA8a3ZrLXJqOkludGVyZXN0U2ltaWxhckluY29tZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0Um
VmPSJldXIiPjEwMDA8L2t2ay1yajpJbnRlcmVzdFNpbWlsYXJJbmNvbWU+DQogICAgICA8a3ZrLXJqOlZhbHVhdGlvblJlY2VpdmFibGVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjAwMDwva3ZrLXJqOlZhbHVhdGlvblJlY2VpdmFibGVzPg0KICAgICAgPGt2ay1yajpJbnRlcmVzdFNpbWlsYXJFeHBlbnNlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjgwMDA8L2t2ay1yajpJbnRlcmVzdFNpbWlsYXJFeHBlbnNlcz4NCiAgICAgIDxnZW46UmVjZWl2YWJsZXNWYWx1YXRpb25EZWNyZWFzZUZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjI1MDA8L2dlbjpSZWNlaXZhYmxlc1ZhbHVhdGlvbkRlY3JlYXNlRmlzY2FsPg0KICAgICAgPGdlbjpWYWx1YXRpb25JbmNyZWFzZVJlY2VpdmFibGVzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTUwMDwvZ2VuOlZhbHVhdGlvbkluY3JlYXNlUmVjZWl2YWJsZXNGaXNjYWw+DQogICAgICA8Z2VuOlNlY3VyaXRpZXNWYWx1YXRpb25JbmNyZWFzZUZpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjMwMDA8L2dlbjpTZWN1cml0aWVzVmFsdWF0aW9uSW5jcmVhc2VGaXNjYWw+DQogICAgICA8Z2VuOlNlY3VyaXRpZXNWYWx1YXRpb25EZWNyZWFzZUZpc2NhbCBkZWNpbWFs
cz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjQwMDA8L2dlbjpTZWN1cml0aWVzVmFsdWF0aW9uRGVjcmVhc2VGaXNjYWw+DQogICAgIC");
> 
>                 
> base64String.append("A8a3ZrLXJqOlNhbGFyaWVzV2FnZXNCeU5hdHVyZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwMDA8L2t2ay1yajpTYWxhcmllc1dhZ2VzQnlOYXR1cmU+DQogICAgICA8a3ZrLXJqOlNvY2lhbFNlY3VyaXR5Q29udHJpYnV0aW9uc0J5TmF0dXJlIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTUwMDwva3ZrLXJqOlNvY2lhbFNlY3VyaXR5Q29udHJpYnV0aW9uc0J5TmF0dXJlPg0KICAgICAgPGt2ay1yajpUb3RhbERlcHJlY2lhdGlvbnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yMDAwPC9rdmstcmo6VG90YWxEZXByZWNpYXRpb25zPg0KICAgICAgPGt2ay1yajpWYWx1YXRpb25DaGFuZ2VUYW5naWJsZUFuZEludGFuZ2libGVGaXhlZEFzc2V0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjI1MDA8L2t2ay1yajpWYWx1YXRpb25DaGFuZ2VUYW5naWJsZUFuZEludGFuZ2libGVGaXhlZEFzc2V0cz4NCiAgICAgIDxrdmstcmo6SW1wYWlybWVudE5vbkN1cnJlbnRBc3NldHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yOTAwPC9rdmstcmo6SW1wYWlybWVudE5vbkN1cnJlbnRBc3NldHM+DQogICAgICA8a3ZrLXJqOk90aGVyQnVzaW5lc3NDb3N0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyI
iB1bml0UmVmPSJldXIiPjEwMDwva3ZrLXJqOk90aGVyQnVzaW5lc3NDb3N0cz4NCiAgICAgIDxrdmstcmo6RGVzY3JpcHRpb25Nb3N0SW1wb3J0YW50QWN0aXZpdGllc0xlZ2FsRW50aXR5IGNvbnRleHRSZWY9ImR1ciI+RGl0IGlzIGVlbiBvbmRlcm5lbWluZyB2b29yIHRlc3Q8L2t2ay1yajpEZXNjcmlwdGlvbk1vc3RJbXBvcnRhbnRBY3Rpdml0aWVzTGVnYWxFbnRpdHk+DQogICAgICA8a3ZrLXJqOkdlbmVyYWxQb2xpY2llcyBjb250ZXh0UmVmPSJkdXIiPkFsZ2VtZW5lIGdyb25kc2xhZ2VuPC9rdmstcmo6R2VuZXJhbFBvbGljaWVzPg0KICAgICAgPGt2ay1yajpHZW5lcmFsUG9saWNpZXNBbm51YWxSZXBvcnQgY29udGV4dFJlZj0iZHVyIj5Wb29yIGRlIG9wc3RlbGxpbmcgdmFuIGRlIGphYXJyZWtlbmluZzwva3ZrLXJqOkdlbmVyYWxQb2xpY2llc0FubnVhbFJlcG9ydD4NCiAgICAgIDxrdmstcmo6QmFzaXNPZlByZXNlbnRhdGlvbklmTm90T25Hb2luZ0NvbmNlcm5CYXNpcyBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZ2VuIGJpaiBkaXNjb250aW51aXRlaXQ8L2t2ay1yajpCYXNpc09mUHJlc2VudGF0aW9uSWZOb3RPbkdvaW5nQ29uY2VybkJhc2lzPg0KICAgICAgPGt2ay1yajpDaGFuZ2VBY2NvdW50aW5nUG9saWNpZXM+DQogICAgICAgIDxrdmstcmo6Q2hhbmdlQWNjb3VudGluZ1BvbGljaWVzRmluYW5jaWFsSW1wYWN0Q2hhbmdlc0FjY291bnRpbmdQb2xpY2llc0VxdWl0eVRvdGFsIGNvbnR
leHRSZWY9ImR1ciI+U3RlbHNlbHdpanppZ2luZ2VuIGVmZmVjdCBlaWdlbiB2ZXJtb2dlbjwva3ZrLXJqOkNoYW5nZUFjY291bnRpbmdQb2xpY2llc0ZpbmFuY2lhbEltcGFjdENoYW5nZXNBY2NvdW50aW5nUG9saWNpZXNFcXVpdHlUb3RhbD4NCiAgICAgICAgPGt2ay1yajpDaGFuZ2VBY2NvdW50aW5nUG9saWNpZXNGaW5hbmNpYWxJbXBhY3RDaGFuZ2VBY2NvdW50aW5nUG9saWN5TmV0UmVzdWx0VG90YWwgY29udGV4dFJlZj0iZHVyIj5TdGVsc2Vsd2lqemlnaW5nZW4gZWZmZWN0IHJlc3VsdGFhdDwva3ZrLXJqOkNoYW5nZUFjY291bnRpbmdQb2xpY2llc0ZpbmFuY2lhbEltcGFjdENoYW5nZUFjY291bnRpbmdQb2xpY3lOZXRSZXN1bHRUb3RhbD4NCiAgICAgICAgPGt2ay1yajpSZWFzb25Gb3JDaGFuZ2VJbkFjY291bnRpbmdQb2xpY3kgY29udGV4dFJlZj0iZHVyIj5yZWRlbiB2b29yIHdpanppZ2luZzwva3ZrLXJqOlJlYXNvbkZvckNoYW5nZUluQWNjb3VudGluZ1BvbGljeT4NCiAgICAgIDwva3ZrLXJqOkNoYW5nZUFjY291bnRpbmdQb2xpY2llcz4NCiAgICAgIDxrdmstcmo6Rm9yZWlnbkN1cnJlbmN5VHJhbnNsYXRpb25Qb2xpY3kgY29udGV4dFJlZj0iZHVyIj5PbXJla2VuaW5nIHZhbHV0YTwva3ZrLXJqOkZvcmVpZ25DdXJyZW5jeVRyYW5zbGF0aW9uUG9saWN5Pg0KICAgICAgPGt2ay1yajpBc3NldHNQb2xpY2llcyBjb250ZXh0UmVmPSJkdXIiPkFjdGl2YSBncm9uZHNsYWdlbjwva3ZrLXJqO
kFzc2V0c1BvbGljaWVzPg0KICAgICAgPGt2ay1yajpJbnRhbmdpYmxlQXNzZXRzUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+SW1tLiB2YXN0ZSBhY3RpdmEgZ3JvbmRzbGFnPC9rdmstcmo6SW50YW5naWJsZUFzc2V0c1BvbGljeT4NCiAgICAgIDxrdmstcmo6QW1vcnRpc2F0aW9uTWV0aG9kc0ZvcklkZW50aWZpYWJsZUludGFuZ2libGVBc3NldHMgY29udGV4dFJlZj0iZHVyIj5BRnNjaHJpanZpbmdzbWV0aG9kZSBpbW0gdmFzdGUgYWN0aXZhPC9rdmstcmo6QW1vcnRpc2F0aW9uTWV0aG9kc0ZvcklkZW50aWZpYWJsZUludGFuZ2libGVBc3NldHM+DQogICAgICA8a3ZrLXJqOkFtb3J0aXNhdGlvbk1ldGhvZFBvc2l0aXZlR29vZHdpbGwgY29udGV4dFJlZj0iZHVyIj5BZnNjaHJpanZpbmdzbWV0aG9kZSBnb29kd2lsbDwva3ZrLXJqOkFtb3J0aXNhdGlvbk1ldGhvZFBvc2l0aXZlR29vZHdpbGw+DQogICAgICA8a3ZrLXJqOkdvb2R3aWxsQW1vcnRpc2l6ZWRNb3JlVGhhbkZpdmVZZWFycyBjb250ZXh0UmVmPSJkdXIiPkFmc2NocmludmluZ3N0ZXJtaWpuIGdvb2R3aWxsPC9rdmstcmo6R29vZHdpbGxBbW9ydGlzaXplZE1vcmVUaGFuRml2ZVllYXJzPg0KICAgICAgPGt2ay1yajpQcm9wZXJ0eVBsYW50QW5kRXF1aXBtZW50UG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnICBtdmE8L2t2ay1yajpQcm9wZXJ0eVBsYW50QW5kRXF1aXBtZW50UG9saWN5Pg0KICAgICAgPGt2ay1yajpNZWFzdXJlbWV
udEJhc2lzRm9yUHJvcGVydHlQbGFudEFuZEVxdWlwbWVudCBjb250ZXh0UmVmPSJkdXIiPldhYXJkZXJpbmdzZ3JvbmRzbGFnIG12YTwva3ZrLXJqOk1lY");
> 
>                 
> base64String.append("XN1cmVtZW50QmFzaXNGb3JQcm9wZXJ0eVBsYW50QW5kRXF1aXBtZW50Pg0KICAgICAgPGt2ay1yajpEZXByZWNpYXRpb25NZXRob2RzRm9yUHJvcGVydHlQbGFudEFuZEVxdWlwbWVudCBjb250ZXh0UmVmPSJkdXIiPkFmc2NocmlqdmluZ3NtZXRob2RlIG12YTwva3ZrLXJqOkRlcHJlY2lhdGlvbk1ldGhvZHNGb3JQcm9wZXJ0eVBsYW50QW5kRXF1aXBtZW50Pg0KICAgICAgPGt2ay1yajpSYW5kb21EZXByZWNpYXRpb25JbkZpbmFuY2lhbFllYXJEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPldpbGxla2V1cmlnZSBhZnNjaHJpanZpbmcgZ3JvbmRzbGFnPC9rdmstcmo6UmFuZG9tRGVwcmVjaWF0aW9uSW5GaW5hbmNpYWxZZWFyRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkZpbmFuY2lhbEZpeGVkQXNzZXRzUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGZpbiB2YXN0ZSBhY3RpdmE8L2t2ay1yajpGaW5hbmNpYWxGaXhlZEFzc2V0c1BvbGljeT4NCiAgICAgIDxrdmstcmo6SW52ZW50b3JpZXNQb2xpY3kgY29udGV4dFJlZj0iZHVyIj5Hcm9uZHNsYWcgdm9vcnJhZGVuPC9rdmstcmo6SW52ZW50b3JpZXNQb2xpY3k+DQogICAgICA8a3ZrLXJqOlJlY2VpdmFibGVzUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIHZvcmRlcmluZ2VuIGVuIG92ZXJsb3BlbmRlIGFjdGl2YTwva3ZrLXJqOlJlY2VpdmFibGVzUG9saWN5Pg0KICAgICAgPGt2ay1y
ajpTZWN1cml0aWVzUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGVmZmVjdGVuPC9rdmstcmo6U2VjdXJpdGllc1BvbGljeT4NCiAgICAgIDxrdmstcmo6Q2FzaEFuZENhc2hFcXVpdmFsZW50c1BvbGljeSBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZyBsaXF1aWRlIG1pZGRlbGVuPC9rdmstcmo6Q2FzaEFuZENhc2hFcXVpdmFsZW50c1BvbGljeT4NCiAgICAgIDxrdmstcmo6RXF1aXR5QW5kTGlhYmlsaXRpZXNQb2xpY2llcyBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZyBwYXNzaXZhPC9rdmstcmo6RXF1aXR5QW5kTGlhYmlsaXRpZXNQb2xpY2llcz4NCiAgICAgIDxrdmstcmo6UHJvdmlzaW9uc1BvbGljeSBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZyB2b29yemllbmluZ2VuPC9rdmstcmo6UHJvdmlzaW9uc1BvbGljeT4NCiAgICAgIDxrdmstcmo6TGlhYmlsaXRpZXNOb25DdXJyZW50UG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzYWxnIGxhbmdsb3BlbmRlIHNjaHVsZGVuPC9rdmstcmo6TGlhYmlsaXRpZXNOb25DdXJyZW50UG9saWN5Pg0KICAgICAgPGt2ay1yajpBY2NydWFsc0RlZmVycmVkSW5jb21lQ3VycmVudFBvbGljeSBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZyBLb3J0bG9wZW5kZSBzY2h1bGRlbi9vdmVybG9wZW5kZSBwYXNzaXZhPC9rdmstcmo6QWNjcnVhbHNEZWZlcnJlZEluY29tZUN1cnJlbnRQb2xpY3k+DQogICAgICA8a3ZrLXJqOkluY29tZVN0YXRlbW
VudFBvbGljaWVzIGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGJlcGFsaW5nIHJlc3VsdGFhdDwva3ZrLXJqOkluY29tZVN0YXRlbWVudFBvbGljaWVzPg0KICAgICAgPGt2ay1yajpSZXZlbnVlUmVjb2duaXRpb25Qb2xpY3kgY29udGV4dFJlZj0iZHVyIj5Hcm9uZHNsYWcgb3BicmVuZ3N0ZW48L2t2ay1yajpSZXZlbnVlUmVjb2duaXRpb25Qb2xpY3k+DQogICAgICA8a3ZrLXJqOkdyb3NzTWFyZ2luUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGJydXRvbWFyZ2U8L2t2ay1yajpHcm9zc01hcmdpblBvbGljeT4NCiAgICAgIDxrdmstcmo6U2hhcmVSZXN1bHRzU3Vic2lkaWFyaWVzUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGFhbmRlZWwgaW4gcmVzdWx0YWF0IHZhbiBkZWVsbmVtaW5nPC9rdmstcmo6U2hhcmVSZXN1bHRzU3Vic2lkaWFyaWVzUG9saWN5Pg0KICAgICAgPGt2ay1yajpJbmNvbWVUYXhlc1BvbGljeSBjb250ZXh0UmVmPSJkdXIiPkdyb25kc2xhZyB3aW5zdGJlbGFzdGluZ2VuPC9rdmstcmo6SW5jb21lVGF4ZXNQb2xpY3k+DQogICAgICA8a3ZrLXJqOkV4dHJhb3JkaW5hcnlJbmNvbWVFeHBlbnNlUG9saWN5IGNvbnRleHRSZWY9ImR1ciI+R3JvbmRzbGFnIGJ1aXRlbmdld29uZSBiYXRlbiBlbiBsYXN0ZW48L2t2ay1yajpFeHRyYW9yZGluYXJ5SW5jb21lRXhwZW5zZVBvbGljeT4NCiAgICAgIDxrdmstcmo6SW50YW5naWJsZUFzc2V0c0Rpc2Nsb3N1cmVz
IGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgaW1tIGFjdGl2YTwva3ZrLXJqOkludGFuZ2libGVBc3NldHNEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6UHJvcGVydHlQbGFudEFuZEVxdWlwbWVudERpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgbXZhPC9rdmstcmo6UHJvcGVydHlQbGFudEFuZEVxdWlwbWVudERpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpCb3Jyb3dpbmdDb3N0c0NhcGl0YWxpc2VkUHJvcGVydHlQbGFudEFuZEVxdWlwbWVudCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDA8L2t2ay1yajpCb3Jyb3dpbmdDb3N0c0NhcGl0YWxpc2VkUHJvcGVydHlQbGFudEFuZEVxdWlwbWVudD4NCiAgICAgIDxrdmstcmo6RmluYW5jaWFsRml4ZWRBc3NldHNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGZpbiB2YXN0ZSBhY3RpdmE8L2t2ay1yajpGaW5hbmNpYWxGaXhlZEFzc2V0c0Rpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3REaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGRlZWxuZW1pbmdlbjwva3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdERpc2Nsb3N1cmVzPg0KICAgICAgPGJhbms6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUHJlc2VudGF0aW9uPg0KICAgICAgICA8a3ZrLXJqOlBhcn
RpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlGdWxseUxpYWJsZVBhcnRuZXJOYW1lIGNvbnRleHRSZWY9ImR1ciI+TmFhbSBkZWVsbmVtaW5nPC9r");
> 
>                 
> base64String.append("dmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lck5hbWU+DQogICAgICAgIDxrdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lckxvY2F0aW9uIGNvbnRleHRSZWY9ImR1ciI+V29vbnBsYWF0cyBkZWVsbmVtZWluZzwva3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlGdWxseUxpYWJsZVBhcnRuZXJMb2NhdGlvbj4NCiAgICAgICAgPGJhbms6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lclJlZ2lzdHJhdGlvbkNoYW1iZXJPZkNvbW1lcmNlIGNvbnRleHRSZWY9ImR1ciI+SW5zY2hyaWpmbnVtbWVyIGRlZWxuZW1pbmc8L2Jhbms6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lclJlZ2lzdHJhdGlvbkNoYW1iZXJPZkNvbW1lcmNlPg0KICAgICAgICA8a3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlGdWxseUxpYWJsZVBhcnRuZXJQZXJjZW50YWdlT3duZXJzaGlwIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTA8L2t2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55RnVsbHlMaWFibGVQYXJ0bmVyUGVyY2VudGFnZU93bmVyc2hpcD4NCiAgICAgICAgPGt2ay1yajpQYXJ0aWNpcGF
0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55RnVsbHlMaWFibGVQYXJ0bmVyVmFsdWVFcXVpdHkgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDAwPC9rdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lclZhbHVlRXF1aXR5Pg0KICAgICAgICA8a3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlGdWxseUxpYWJsZVBhcnRuZXJOZXRSZXN1bHQgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzAwMDA8L2t2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55RnVsbHlMaWFibGVQYXJ0bmVyTmV0UmVzdWx0Pg0KICAgICAgICA8a3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlGdWxseUxpYWJsZVBhcnRuZXJBZGRpdGlvbmFsRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5BYW52dWxsZW5kZSB0b2VsaWNodGluZyBkZWVsbmVtaW5nPC9rdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUZ1bGx5TGlhYmxlUGFydG5lckFkZGl0aW9uYWxEaXNjbG9zdXJlcz4NCiAgICAgIDwvYmFuazpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55RnVsbHlMaWFibGVQcmVzZW50YXRpb24+DQogICAgICA8YmFuazpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzUGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZ
U1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwUHJlc2VudGF0aW9uPg0KICAgICAgICA8a3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlBbG9uZUpvaW50bHlPbmVNb3JlRGF1Z2h0ZXJDb21wYW5pZXNPd25BY2NvdW50TW9yZTIwUGVyY2VudE93bmVyc2hpcE5hbWUgY29udGV4dFJlZj0iZHVyIj5OYWFtIHZpamZkZSBkZWVsbmVtaW5nPC9rdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwTmFtZT4NCiAgICAgICAgPGt2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55QWxvbmVKb2ludGx5T25lTW9yZURhdWdodGVyQ29tcGFuaWVzT3duQWNjb3VudE1vcmUyMFBlcmNlbnRPd25lcnNoaXBMb2NhdGlvbiBjb250ZXh0UmVmPSJkdXIiPldvb25wbGFhdHMgdmlqZmRlIGRlZWxuZW1pbmc8L2t2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55QWxvbmVKb2ludGx5T25lTW9yZURhdWdodGVyQ29tcGFuaWVzT3duQWNjb3VudE1vcmUyMFBlcmNlbnRPd25lcnNoaXBMb2NhdGlvbj4NCiAgICAgICAgPGJhbms6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjB
QZXJjZW50T3duZXJzaGlwUmVnaXN0cmF0aW9uQ2hhbWJlck9mQ29tbWVyY2UgY29udGV4dFJlZj0iZHVyIj5JbnNjaHJpamZudW1tZXIgdmlqZmRlIGRlZWxuZW1pbmc8L2Jhbms6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwUmVnaXN0cmF0aW9uQ2hhbWJlck9mQ29tbWVyY2U+DQogICAgICAgIDxrdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwUGVyY2VudGFnZU93bmVyc2hpcCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjIwPC9rdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwUGVyY2VudGFnZU93bmVyc2hpcD4NCiAgICAgICAgPGt2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55QWxvbmVKb2ludGx5T25lTW9yZURhdWdodGVyQ29tcGFuaWVzT3duQWNjb3VudE1vcmUyMFBlcmNlbnRPd25lcnNoaXBGdWxseVByb3BvcnRpb25hbGx5Q29uc29saWRhdGVkVmFsdWVkTmV0RXF1aXR5VmFsdWVFcXVpdHkgZGVjaW1hbHM9IjAiI
GNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzAwMDAwPC9rdmstcmo6UGFydGljaXBhdGluZ0ludGVyZXN0UGFyZW50Q29tcGFueUFsb25lSm9");
> 
>                 
> base64String.append("pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwRnVsbHlQcm9wb3J0aW9uYWxseUNvbnNvbGlkYXRlZFZhbHVlZE5ldEVxdWl0eVZhbHVlRXF1aXR5Pg0KICAgICAgICA8a3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlBbG9uZUpvaW50bHlPbmVNb3JlRGF1Z2h0ZXJDb21wYW5pZXNPd25BY2NvdW50TW9yZTIwUGVyY2VudE93bmVyc2hpcEZ1bGx5UHJvcG9ydGlvbmFsbHlDb25zb2xpZGF0ZWRWYWx1ZWROZXRFcXVpdHlWYWx1ZU5ldFJlc3VsdCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj40MDAwMDwva3ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlBbG9uZUpvaW50bHlPbmVNb3JlRGF1Z2h0ZXJDb21wYW5pZXNPd25BY2NvdW50TW9yZTIwUGVyY2VudE93bmVyc2hpcEZ1bGx5UHJvcG9ydGlvbmFsbHlDb25zb2xpZGF0ZWRWYWx1ZWROZXRFcXVpdHlWYWx1ZU5ldFJlc3VsdD4NCiAgICAgICAgPGt2ay1yajpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RQYXJlbnRDb21wYW55QWxvbmVKb2ludGx5T25lTW9yZURhdWdodGVyQ29tcGFuaWVzT3duQWNjb3VudE1vcmUyMFBlcmNlbnRPd25lcnNoaXBBZGRpdGlvbmFsRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5BYW52dWxsZW5kZSB0b2VsaWNodGluZyB2aWpmZGUgZGVlbG5lbWluZzwva3
ZrLXJqOlBhcnRpY2lwYXRpbmdJbnRlcmVzdFBhcmVudENvbXBhbnlBbG9uZUpvaW50bHlPbmVNb3JlRGF1Z2h0ZXJDb21wYW5pZXNPd25BY2NvdW50TW9yZTIwUGVyY2VudE93bmVyc2hpcEFkZGl0aW9uYWxEaXNjbG9zdXJlcz4NCiAgICAgIDwvYmFuazpQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzUGFyZW50Q29tcGFueUFsb25lSm9pbnRseU9uZU1vcmVEYXVnaHRlckNvbXBhbmllc093bkFjY291bnRNb3JlMjBQZXJjZW50T3duZXJzaGlwUHJlc2VudGF0aW9uPg0KICAgICAgPGt2ay1yajpEZXRhaWxPZkFzc29jaWF0ZXNOb3RBY2NvdW50ZWRGb3JVc2luZ0VxdWl0eU1ldGhvZCBjb250ZXh0UmVmPSJkdXIiPkdlZ2V2ZW5zIGdlYXNzb2NpZWVyZGUgZGVlbG5lbWluZ2VuIC4uLi4uPC9rdmstcmo6RGV0YWlsT2ZBc3NvY2lhdGVzTm90QWNjb3VudGVkRm9yVXNpbmdFcXVpdHlNZXRob2Q+DQogICAgICA8a3ZrLXJqOkludmVudG9yaWVzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGlnbnZvb3JyYWRlbjwva3ZrLXJqOkludmVudG9yaWVzRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkludmVudG9yaWVzWWVhcmx5QW1vdW50SW50ZXJlc3RDYXBpdGFsaXNlZCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDAwMDwva3ZrLXJqOkludmVudG9yaWVzWWVhcmx5QW1vdW50SW50ZXJlc3RDYXBpdGFsaXNlZD4NCiAgICAgIDxrdmstcmo6UmVjZWl2YWJsZXNE
aXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIHZvcmRlcmluZ2VuIGVuIG92ZXJsb3BlbmRlIGFjdGl2YTwva3ZrLXJqOlJlY2VpdmFibGVzRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkFtb3VudE9mUmVjZWl2YWJsZXNFeHBvc2VkVG9NYXR1cml0aWVzRm9yTW9yZVRoYW5PbmVZZWFyVG90YWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzAwMDA8L2t2ay1yajpBbW91bnRPZlJlY2VpdmFibGVzRXhwb3NlZFRvTWF0dXJpdGllc0Zvck1vcmVUaGFuT25lWWVhclRvdGFsPg0KICAgICAgPGt2ay1yajpTZWN1cml0aWVzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBlZmZlY3Rlbjwva3ZrLXJqOlNlY3VyaXRpZXNEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6RXF1aXR5RGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBlaWdlbiB2ZXJtb2dlbjwva3ZrLXJqOkVxdWl0eURpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpTdGF0dXRvcnlSZXNlcnZlc0Rpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgc3RhdHV0YWlyZSByZXNlcnZlczwva3ZrLXJqOlN0YXR1dG9yeVJlc2VydmVzRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOlJlc3VsdEZvclRoZVllYXJEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIG9udmVyZGVlbGRlIHdpbnN0PC9rdmstcm
o6UmVzdWx0Rm9yVGhlWWVhckRpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpSZWludmVzdG1lbnRSZXNlcnZlRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBoZXJpbnZlc3RlcmluZ3NyZXNlcnZlPC9rdmstcmo6UmVpbnZlc3RtZW50UmVzZXJ2ZURpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpPdGhlckZpc2NhbFJlc2VydmVzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBvdmVyaWdlIGZpc2NhbGUgcmVzZXJ2ZXJzPC9rdmstcmo6T3RoZXJGaXNjYWxSZXNlcnZlc0Rpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpSZXBvcnRPZlJldGFpbmVkUGFydE9mUmVzdWx0IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwPC9rdmstcmo6UmVwb3J0T2ZSZXRhaW5lZFBhcnRPZlJlc3VsdD4NCiAgICAgIDxrdmstcmo6UHJvdmlzaW9uc0Rpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgdm9vcnppZW5pbmdlbjwva3ZrLXJqOlByb3Zpc2lvbnNEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6TGlhYmlsaXRpZXNOb25DdXJyZW50RGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBsYW5nbG9wZW5kZSBzY2h1bGRlbjwva3ZrLXJqOkxpYWJpbGl0aWVzTm9uQ3VycmVudERpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpDb2xsYXRlcmFsTGlhYmlsaXRpZXNOb25DdXJyZW50RGlzY2xv
c3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyB6ZWtlcmhlZGVuPC9rdmstcmo6Q29sbGF0ZXJhbExpYWJpbGl0aWVzTm9uQ3VycmVudERpc2");
> 
>                 
> base64String.append("Nsb3N1cmVzPg0KICAgICAgPGJhbms6U2VjdXJpdGllc1JlZ2lzdGVyQm91bmRHb29kcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4xMDAwPC9iYW5rOlNlY3VyaXRpZXNSZWdpc3RlckJvdW5kR29vZHM+DQogICAgICA8YmFuazpTZWN1cml0aWVzUmVnaXN0ZXJCb3VuZEdvb2RzU3BlY2lmaWNhdGlvbj4NCiAgICAgICAgPGJhbms6T2JqZWN0U2VjdXJpdGllcyBjb250ZXh0UmVmPSJpbnN0Ij5PYmplY3R6ZWtlcmhlaWQwMDc8L2Jhbms6T2JqZWN0U2VjdXJpdGllcz4NCiAgICAgICAgPGJhbms6UmFua1NlY3VyaXRpZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MTwvYmFuazpSYW5rU2VjdXJpdGllcz4NCiAgICAgICAgPGJhbms6VmFsdWVTZWN1cml0aWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjEwMDA8L2Jhbms6VmFsdWVTZWN1cml0aWVzPg0KICAgICAgPC9iYW5rOlNlY3VyaXRpZXNSZWdpc3RlckJvdW5kR29vZHNTcGVjaWZpY2F0aW9uPg0KICAgICAgPGt2ay1yajpBbW91bnRPZkNsYXNzT2ZMaWFiaWxpdHlFeHBvc2VkVG9Db250cmFjdHVhbE1hdHVyaXRpZXNNYXR1cmluZ0Zyb21Nb3JlVGhhbk9uZVllYXIgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjA8L2t2ay1yajpBbW91bnRPZkNsYXNzT2ZMaWFiaWxpdHlFe
HBvc2VkVG9Db250cmFjdHVhbE1hdHVyaXRpZXNNYXR1cmluZ0Zyb21Nb3JlVGhhbk9uZVllYXI+DQogICAgICA8a3ZrLXJqOkFtb3VudE9mQ2xhc3NPZkxpYWJpbGl0eUV4cG9zZWRUb0NvbnRyYWN0dWFsTWF0dXJpdGllc01hdHVyaW5nRnJvbU1vcmVUaGFuRml2ZVllYXJzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjIxPC9rdmstcmo6QW1vdW50T2ZDbGFzc09mTGlhYmlsaXR5RXhwb3NlZFRvQ29udHJhY3R1YWxNYXR1cml0aWVzTWF0dXJpbmdGcm9tTW9yZVRoYW5GaXZlWWVhcnM+DQogICAgICA8a3ZrLXJqOkludGVyZXN0UmF0ZUxpYWJpbGl0eUV4cG9zZWRUb0NvbnRyYWN0dWFsTWF0dXJpdGllc01hdHVyaW5nRnJvbU1vcmVUaGFuT25lWWVhciBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjIyPC9rdmstcmo6SW50ZXJlc3RSYXRlTGlhYmlsaXR5RXhwb3NlZFRvQ29udHJhY3R1YWxNYXR1cml0aWVzTWF0dXJpbmdGcm9tTW9yZVRoYW5PbmVZZWFyPg0KICAgICAgPGt2ay1yajpMaWFiaWxpdGllc0N1cnJlbnREaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGtvcnRsb3BlbmRlIHNjaHVsZGVuIGVuIG92ZXJsb3BlbmRlIHBhc3NpdmE8L2t2ay1yajpMaWFiaWxpdGllc0N1cnJlbnREaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6Q29sbGF0ZXJhbExpYWJpbGl0aWVzQ3VycmVudERpc2Nsb3N1cmVzIGNvbnR
leHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgemVrZXJoZWlkc3N0ZWxsaW5nPC9rdmstcmo6Q29sbGF0ZXJhbExpYWJpbGl0aWVzQ3VycmVudERpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpDb250aW5nZW50TGlhYmlsaXRpZXNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIG5pZXQgdWl0IGRlIGJhbGFucyBibGlqa2VuZGUgcmVjaHRlbiBlbiB2ZXJwbGljaHRpbmdlbjwva3ZrLXJqOkNvbnRpbmdlbnRMaWFiaWxpdGllc0Rpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpDb250aW5nZW50TGlhYmlsaXRpZXNHcm91cERpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgamVnZW5zIGdyb2Vwc21hYXRzY2hhcHBpamVuPC9rdmstcmo6Q29udGluZ2VudExpYWJpbGl0aWVzR3JvdXBEaXNjbG9zdXJlcz4NCiAgICAgIDxiYW5rOlJlbnRDb250cmFjdHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MjAwMDwvYmFuazpSZW50Q29udHJhY3RzPg0KICAgICAgPGJhbms6UmVudENvbnRyYWN0c1NwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOk9iamVjdElkZW50aWZpY2F0aW9uUmVudENvbnRyYWN0cyBjb250ZXh0UmVmPSJpbnN0Ij5odXVyMDA3PC9iYW5rOk9iamVjdElkZW50aWZpY2F0aW9uUmVudENvbnRyYWN0cz4NCiAgICAgICAgPGJhbms6TWF0dXJpdHlJbk1vbnRoc1JlbnRDb250cmFjdHMgZGVjaW1hbHM9IjAiIGNvbnRle
HRSZWY9Imluc3QiIHVuaXRSZWY9ImV1ciI+MzY8L2Jhbms6TWF0dXJpdHlJbk1vbnRoc1JlbnRDb250cmFjdHM+DQogICAgICAgIDxiYW5rOkNsb3NpbmdEYXRlUmVudENvbnRyYWN0cyBjb250ZXh0UmVmPSJpbnN0Ij4yMDEyLTEyLTMxPC9iYW5rOkNsb3NpbmdEYXRlUmVudENvbnRyYWN0cz4NCiAgICAgICAgPGJhbms6UmVudENvc3RzWWVhcmx5UmVudENvbnRyYWN0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj4yMDAwPC9iYW5rOlJlbnRDb3N0c1llYXJseVJlbnRDb250cmFjdHM+DQogICAgICA8L2Jhbms6UmVudENvbnRyYWN0c1NwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpEZWxpdmVyZWRXYXJyZW50aWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjMwMDA8L2Jhbms6RGVsaXZlcmVkV2FycmVudGllcz4NCiAgICAgIDxiYW5rOkNvbnRyYWN0c09wZXJhdGluZ0xlYXNlIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+NDAwMDwvYmFuazpDb250cmFjdHNPcGVyYXRpbmdMZWFzZT4NCiAgICAgIDxiYW5rOk51bWJlck9wZXJhdGluZ0xlYXNlQ29udHJhY3RzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjM8L2Jhbms6TnVtYmVyT3BlcmF0aW5nTGVhc2VDb250cmFjdHM+DQogICAgICA8YmFuazpDb250cmFjdHNPcGVyYXRpbmdMZWFzZVNwZWNpZmljYXRpb24
+DQogICAgICAgIDxiYW5rOk5hbWVDb21wYW55IGNvbnRleHRSZWY9ImR1ciI+TGVhc2UwMDc8L2Jhbms6TmFtZUNvbXBhbnk+DQogICAgICAgIDxiYW5rO");
> 
>                 
> base64String.append("k9ibGlnYXRvcnlMZWFzZUNvbnRyYWN0WWVhcmx5IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MzAwMDwvYmFuazpPYmxpZ2F0b3J5TGVhc2VDb250cmFjdFllYXJseT4NCiAgICAgICAgPGJhbms6TWF0dXJpdHlJbk1vbnRoc0NvbnRyYWN0c09wZXJhdGluZ0xlYXNlIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjQ8L2Jhbms6TWF0dXJpdHlJbk1vbnRoc0NvbnRyYWN0c09wZXJhdGluZ0xlYXNlPg0KICAgICAgICA8YmFuazpDbG9zaW5nRGF0ZUNvbnRyYWN0c09wZXJhdGluZ0xlYXNlIGNvbnRleHRSZWY9ImR1ciI+MjAxMy0xMi0zMTwvYmFuazpDbG9zaW5nRGF0ZUNvbnRyYWN0c09wZXJhdGluZ0xlYXNlPg0KICAgICAgPC9iYW5rOkNvbnRyYWN0c09wZXJhdGluZ0xlYXNlU3BlY2lmaWNhdGlvbj4NCiAgICAgIDxiYW5rOkNhcGl0YWxDb21taXRtZW50IGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+NDAwMDwvYmFuazpDYXBpdGFsQ29tbWl0bWVudD4NCiAgICAgIDxiYW5rOk90aGVyQ29udGluZ2VudExpYWJpbGl0aWVzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJpbnN0IiB1bml0UmVmPSJldXIiPjUwMDA8L2Jhbms6T3RoZXJDb250aW5nZW50TGlhYmlsaXRpZXM+DQogICAgICA8a3ZrLXJqOkZpbmFuY2lhbEluc3RydW1lbnRzRmFpclZhbHVlRGlzY2xvc3VyZXMgY29u
dGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBmaW4gaW5zdHJ1bXRlbjwva3ZrLXJqOkZpbmFuY2lhbEluc3RydW1lbnRzRmFpclZhbHVlRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkdyb3NzTWFyZ2luRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj50b2VsaWNodGluZyBiZWRyaWpmc3Jlc3VsdGFhdDwva3ZrLXJqOkdyb3NzTWFyZ2luRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOlRvdGFsT3BlcmF0aW5nSW5jb21lIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjAwMDwva3ZrLXJqOlRvdGFsT3BlcmF0aW5nSW5jb21lPg0KICAgICAgPGdlbjpTdG9ja0FuZFdvcmtJblByb2dyZXNzQ2hhbmdlRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTAwPC9nZW46U3RvY2tBbmRXb3JrSW5Qcm9ncmVzc0NoYW5nZUZpc2NhbD4NCiAgICAgIDxnZW46Q2FwaXRhbGl6ZWRQcm9kdWN0aW9uT3duQnVzaW5lc3NGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yMDA8L2dlbjpDYXBpdGFsaXplZFByb2R1Y3Rpb25Pd25CdXNpbmVzc0Zpc2NhbD4NCiAgICAgIDxrdmstcmo6T3RoZXJPcGVyYXRpbmdJbmNvbWUgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj43MDA8L2t2ay1yajpPdGhlck9wZXJhdGluZ0luY29tZT4NCiAgICAgIDxiYW5rOlByaXZhdGVVc2VPd2
5CdXNpbmVzcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjUwMDwvYmFuazpQcml2YXRlVXNlT3duQnVzaW5lc3M+DQogICAgICA8YmFuazpQdXJjaGFzZURpc2NvdW50QW5kQm9udXNlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjUwMDwvYmFuazpQdXJjaGFzZURpc2NvdW50QW5kQm9udXNlcz4NCiAgICAgIDxnZW46UmF3QW5jaWxsYXJ5TWF0ZXJpYWxzUHVyY2hhc2VQcmljZVNhbGVzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+ODAwPC9nZW46UmF3QW5jaWxsYXJ5TWF0ZXJpYWxzUHVyY2hhc2VQcmljZVNhbGVzRmlzY2FsPg0KICAgICAgPGdlbjpPdXRzb3VyY2VkV29ya0Nvc3RzQW5kT3RoZXJFeHRlcm5hbENvc3RzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+OTAwPC9nZW46T3V0c291cmNlZFdvcmtDb3N0c0FuZE90aGVyRXh0ZXJuYWxDb3N0c0Zpc2NhbD4NCiAgICAgIDxiYW5rOk91dHNvdXJjZWRXb3JrQ29zdHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj40NTA8L2Jhbms6T3V0c291cmNlZFdvcmtDb3N0cz4NCiAgICAgIDxiYW5rOk90aGVyRXh0ZXJuYWxDb3N0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjQ1MDwvYmFuazpPdGhlckV4dGVybmFsQ29zdHM+DQog
ICAgICA8a3ZrLXJqOlRvdGFsQnVzaW5lc3NDb3N0c0Rpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgc29tIGRlciBrb3N0ZW48L2t2ay1yajpUb3RhbEJ1c2luZXNzQ29zdHNEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6V2FnZXNBbmRTYWxhcmllc0Rpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgbG9uZW4gZW4gc2FsYXJpc3Nlbjwva3ZrLXJqOldhZ2VzQW5kU2FsYXJpZXNEaXNjbG9zdXJlcz4NCiAgICAgIDxiYW5rOlNhbGFyaWVzQW5kQmVuZWZpdHNEaXJlY3RvcnMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj41MDA8L2Jhbms6U2FsYXJpZXNBbmRCZW5lZml0c0RpcmVjdG9ycz4NCiAgICAgIDxiYW5rOldhZ2VzQW5kU2FsYXJpZXNFbXBsb3llZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj41MDA8L2Jhbms6V2FnZXNBbmRTYWxhcmllc0VtcGxveWVlcz4NCiAgICAgIDxrdmstcmo6U29jaWFsU2VjdXJpdHlDb3N0c0Rpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgc29jaWFsZSBsYXN0ZW48L2t2ay1yajpTb2NpYWxTZWN1cml0eUNvc3RzRGlzY2xvc3VyZXM+DQogICAgICA8Z2VuOlBlbnNpb25Db3N0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjMwPC9nZW46UGVuc2lvbkNvc3RzRmlzY2FsPg0KICAgICAgPG
t2ay1yajpUb3RhbERlcHJlY2lhdGlvbnNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGFmc2NocmlqdmluZyBpdmEgZW4gbXZh");
> 
>                 
> base64String.append("PC9rdmstcmo6VG90YWxEZXByZWNpYXRpb25zRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkRlcHJlY2lhdGlvbnNFeHBlbnNlc0ludGFuZ2libGVBc3NldHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj41MDA8L2t2ay1yajpEZXByZWNpYXRpb25zRXhwZW5zZXNJbnRhbmdpYmxlQXNzZXRzPg0KICAgICAgPGt2ay1yajpEZXByZWNpYXRpb25zRXhwZW5zZXNUYW5naWJsZUFzc2V0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjE1MDA8L2t2ay1yajpEZXByZWNpYXRpb25zRXhwZW5zZXNUYW5naWJsZUFzc2V0cz4NCiAgICAgIDxrdmstcmo6VmFsdWF0aW9uQ2hhbmdlVGFuZ2libGVBbmRJbnRhbmdpYmxlRml4ZWRBc3NldHNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxjb2NodGluZyBvdmVyaWdlIHdhYXJkZXZlcm1pbmRlcmluZzwva3ZrLXJqOlZhbHVhdGlvbkNoYW5nZVRhbmdpYmxlQW5kSW50YW5naWJsZUZpeGVkQXNzZXRzRGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOlZhbHVhdGlvbkNoYW5nZUludGFuZ2libGVBc3NldHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMjUwPC9rdmstcmo6VmFsdWF0aW9uQ2hhbmdlSW50YW5naWJsZUFzc2V0cz4NCiAgICAgIDxrdmstcmo6VmFsdWF0aW9uQ2hhbmdlVGFuZ2libGVBc3NldHMgZGVjaW1hbHM9IjA
iIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMjUwPC9rdmstcmo6VmFsdWF0aW9uQ2hhbmdlVGFuZ2libGVBc3NldHM+DQogICAgICA8a3ZrLXJqOlNwZWNpYWxWYWx1YXRpb25DdXJyZW50QXNzZXRzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBiaWp6b25kZXJlIHdhYXJkZXZlcm1pbmRlcmluZyB2bG90dGVuZGUgYWN0aXZhPC9rdmstcmo6U3BlY2lhbFZhbHVhdGlvbkN1cnJlbnRBc3NldHNEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6T3RoZXJCdXNpbmVzc0Nvc3RzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBvdmVyaWdlIGJlZHJpamZza29zdGVuPC9rdmstcmo6T3RoZXJCdXNpbmVzc0Nvc3RzRGlzY2xvc3VyZXM+DQogICAgICA8YmFuazpPcGVyYXRpbmdFeHBlbnNlcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwPC9iYW5rOk9wZXJhdGluZ0V4cGVuc2VzPg0KICAgICAgPGdlbjpDYXJBbmRUcmFuc3BvcnRDb3N0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwPC9nZW46Q2FyQW5kVHJhbnNwb3J0Q29zdHNGaXNjYWw+DQogICAgICA8YmFuazpBZG1pbmlzdHJhdGlvbkNvc3RzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6QWRtaW5pc3RyYXRpb25Db3N0cz4NCiAgICAgIDxiYW5rOlJlbnRhb
ENvc3RzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6UmVudGFsQ29zdHM+DQogICAgICA8YmFuazpPcGVyYXRpb25hbExlYXNlQ29zdHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xMDwvYmFuazpPcGVyYXRpb25hbExlYXNlQ29zdHM+DQogICAgICA8YmFuazpPdGhlckFjY29tbW9kYXRpb25Db3N0cyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwPC9iYW5rOk90aGVyQWNjb21tb2RhdGlvbkNvc3RzPg0KICAgICAgPGJhbms6T3RoZXJFbXBsb3llZUV4cGVuc2VzIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTA8L2Jhbms6T3RoZXJFbXBsb3llZUV4cGVuc2VzPg0KICAgICAgPGdlbjpTYWxlc0Nvc3RzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTA8L2dlbjpTYWxlc0Nvc3RzRmlzY2FsPg0KICAgICAgPGJhbms6TWFuYWdlbWVudEZlZSBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwPC9iYW5rOk1hbmFnZW1lbnRGZWU+DQogICAgICA8YmFuazpGcmFuY2hpc2VGZWUgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj41PC9iYW5rOkZyYW5jaGlzZUZlZT4NCiAgICAgIDxiYW5rOk90aGVyQ29zdHMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY
9ImR1ciIgdW5pdFJlZj0iZXVyIj41PC9iYW5rOk90aGVyQ29zdHM+DQogICAgICA8a3ZrLXJqOlJldmVudWVzUmVjZWl2YWJsZXNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIG9wYnJlbmdzdGVuIHZvcmRlcmluZ2VuPC9rdmstcmo6UmV2ZW51ZXNSZWNlaXZhYmxlc0Rpc2Nsb3N1cmVzPg0KICAgICAgPGdlbjpSZXZlbnVlc1JlY2VpdmFibGVzQWdhaW5zdFNoYXJlaG9sZGVyc0FuZFBhcnRpY2lwYW50c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjE2MDwvZ2VuOlJldmVudWVzUmVjZWl2YWJsZXNBZ2FpbnN0U2hhcmVob2xkZXJzQW5kUGFydGljaXBhbnRzRmlzY2FsPg0KICAgICAgPGdlbjpSZXZlbnVlc0ludGVyZXN0T25CYW5rQ3JlZGl0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjE3MDwvZ2VuOlJldmVudWVzSW50ZXJlc3RPbkJhbmtDcmVkaXRzRmlzY2FsPg0KICAgICAgPGdlbjpSZXZlbnVlc090aGVyUmVjZWl2YWJsZXNGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xODA8L2dlbjpSZXZlbnVlc090aGVyUmVjZWl2YWJsZXNGaXNjYWw+DQogICAgICA8Z2VuOlJldmVudWVzUmVjZWl2YWJsZXNBZ2FpbnN0UGFydGljaXBhdGluZ0ludGVyZXN0c0FuZEFmZmlsaWF0ZWRDb21wYW5pZXNGaXNjYWwgZGVjaW1hbHM9IjAiIGNvbnRleHRSZ
WY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xOTA8L2dlbjpSZXZlbnVlc1JlY2VpdmFibGVzQWdhaW5zdFBhcnRpY2lwYXRpbmdJbnRlcmVzdHNBbmRBZmZpbGl");
> 
>                 
> base64String.append("hdGVkQ29tcGFuaWVzRmlzY2FsPg0KICAgICAgPGt2ay1yajpSZXZlbnVlc090aGVySW52ZXN0bWVudHNSZWxhdGVkVG9TdWJzaWRpYXJpZXMgZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yMDA8L2t2ay1yajpSZXZlbnVlc090aGVySW52ZXN0bWVudHNSZWxhdGVkVG9TdWJzaWRpYXJpZXM+DQogICAgICA8a3ZrLXJqOlRvdGFsSW50ZXJlc3RTaW1pbGFySW5jb21lRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyByZW50ZWJhdGVuIGVhPC9rdmstcmo6VG90YWxJbnRlcmVzdFNpbWlsYXJJbmNvbWVEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6VmFsdWF0aW9uUmVjZWl2YWJsZXNEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPldpanppZ2luZ2VuIGZpbiB2YXN0ZSBhY3RpdmE8L2t2ay1yajpWYWx1YXRpb25SZWNlaXZhYmxlc0Rpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpUb3RhbEludGVyZXN0U2ltaWxhckV4cGVuc2VEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIHJlbnRlbGFzdGVuPC9rdmstcmo6VG90YWxJbnRlcmVzdFNpbWlsYXJFeHBlbnNlRGlzY2xvc3VyZXM+DQogICAgICA8Z2VuOlBhcnRpY2lwYXRpbmdJbnRlcmVzdHNBbmRBZmZpbGlhdGVkQ29tcGFuaWVzQ29zdHNEZWJ0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjIzMD
wvZ2VuOlBhcnRpY2lwYXRpbmdJbnRlcmVzdHNBbmRBZmZpbGlhdGVkQ29tcGFuaWVzQ29zdHNEZWJ0c0Zpc2NhbD4NCiAgICAgIDxnZW46U2hhcmVob2xkZXJzQW5kUGFydGljaXBhbnRzQ29zdHNEZWJ0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjI0MDwvZ2VuOlNoYXJlaG9sZGVyc0FuZFBhcnRpY2lwYW50c0Nvc3RzRGVidHNGaXNjYWw+DQogICAgICA8Z2VuOkludGVyZXN0RXhwZW5kaXR1cmVFdGNDb3N0c0RlYnRzRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjUwPC9nZW46SW50ZXJlc3RFeHBlbmRpdHVyZUV0Y0Nvc3RzRGVidHNGaXNjYWw+DQogICAgICA8a3ZrLXJqOlNoYXJlUmVzdWx0U3Vic2lkaWFyaWVzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBhYW5kZWVsIHJlc3VsdGFhdCBkZWVsbmVtaW5nPC9rdmstcmo6U2hhcmVSZXN1bHRTdWJzaWRpYXJpZXNEaXNjbG9zdXJlcz4NCiAgICAgIDxnZW46UmVzdWx0c0RvbWVzdGljUGFydGljaXBhdGluZ0ludGVyZXN0c0Zpc2NhbCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjI3MDwvZ2VuOlJlc3VsdHNEb21lc3RpY1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNGaXNjYWw+DQogICAgICA8Z2VuOlJlc3VsdHNQYXJ0aWNpcGF0aW5nSW50ZXJlc3RzQWJyb2FkRmlzY2FsIGRlY2ltYWxzPSIwIiBjb250
ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MjgwPC9nZW46UmVzdWx0c1BhcnRpY2lwYXRpbmdJbnRlcmVzdHNBYnJvYWRGaXNjYWw+DQogICAgICA8a3ZrLXJqOkV4dHJhb3JkaW5hcnlSZXN1bHRBZnRlclRheERpc2Nsb3N1cmVzIGNvbnRleHRSZWY9ImR1ciI+VG9lbGljaHRpbmcgYnVpdGVuZ2V3b29uIHJlc3VsdGFhdCBuYSBiZWxhc3Rpbmc8L2t2ay1yajpFeHRyYW9yZGluYXJ5UmVzdWx0QWZ0ZXJUYXhEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6VG90YWxFeHRyYW9yZGluYXJ5SW5jb21lRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBidWl0ZW5nZXdvbmUgYmF0ZW48L2t2ay1yajpUb3RhbEV4dHJhb3JkaW5hcnlJbmNvbWVEaXNjbG9zdXJlcz4NCiAgICAgIDxrdmstcmo6VG90YWxFeHRyYW9yZGluYXJ5RXhwZW5kaXR1cmVEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGJ1aXRlbmdld29uZSBsYXN0ZW48L2t2ay1yajpUb3RhbEV4dHJhb3JkaW5hcnlFeHBlbmRpdHVyZURpc2Nsb3N1cmVzPg0KICAgICAgPGt2ay1yajpOdW1iZXJPZkVtcGxveWVlc0F2ZXJhZ2VPdmVyUGVyaW9kIGRlY2ltYWxzPSIwIiBjb250ZXh0UmVmPSJkdXIiIHVuaXRSZWY9ImV1ciI+MTU8L2t2ay1yajpOdW1iZXJPZkVtcGxveWVlc0F2ZXJhZ2VPdmVyUGVyaW9kPg0KICAgICAgPGt2ay1yajpOdW1iZXJFbXBsb3llZXNXb3JraW5nVGhlTmV0aGVybGFuZHMgZGVjaW
1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4xPC9rdmstcmo6TnVtYmVyRW1wbG95ZWVzV29ya2luZ1RoZU5ldGhlcmxhbmRzPg0KICAgICAgPGt2ay1yajpTZWdtZW50SW5mb3JtYXRpb25OdW1iZXJFbXBsb3llZXNBdmVyYWdlT3ZlclBlcmlvZD4NCiAgICAgICAgPGt2ay1yajpOdW1iZXJFbXBsb3llZXNBdmVyYWdlT3ZlclBlcmlvZE5hbWVTZWdtZW50IGNvbnRleHRSZWY9ImR1ciI+TmFhbSBzZWdtZW50PC9rdmstcmo6TnVtYmVyRW1wbG95ZWVzQXZlcmFnZU92ZXJQZXJpb2ROYW1lU2VnbWVudD4NCiAgICAgICAgPGt2ay1yajpOdW1iZXJFbXBsb3llZXNBdmVyYWdlT3ZlclBlcmlvZEJ5U2VnbWVudCBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjE0PC9rdmstcmo6TnVtYmVyRW1wbG95ZWVzQXZlcmFnZU92ZXJQZXJpb2RCeVNlZ21lbnQ+DQogICAgICA8L2t2ay1yajpTZWdtZW50SW5mb3JtYXRpb25OdW1iZXJFbXBsb3llZXNBdmVyYWdlT3ZlclBlcmlvZD4NCiAgICAgIDxrdmstcmo6TG9hbnNBZHZhbmNlc1dhcnJhbnRpZXNPbkJlaGFsZk9mRGlyZWN0b3JzRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5MZW5pbmdlbiwgdm9vcnNjaG90dGVuLCBldGMuLi4uLjwva3ZrLXJqOkxvYW5zQWR2YW5jZXNXYXJyYW50aWVzT25CZWhhbGZPZkRpcmVjdG9yc0Rpc2Nsb3N1cmVzPg0KICAgICAgPGJhbms6TnVtYmVyT2ZEaXJlY3RvcnNJbkZURXMg
ZGVjaW1hbHM9IjAiIGNvbnRleHRSZWY9ImR1ciIgdW5pdFJlZj0iZXVyIj4yPC9iYW5rOk51bWJlck9mRGlyZWN0b3JzSW5GVEVzPg0KICAgICAgPGJhbm");
> 
>                 
> base64String.append("s6RGlyZWN0b3JzPg0KICAgICAgICA8a3ZrLXJqOk5hbWVEaXJlY3RvciBjb250ZXh0UmVmPSJkdXIiPk5hYW0gYmVzdHV1cmRlcjwva3ZrLXJqOk5hbWVEaXJlY3Rvcj4NCiAgICAgICAgPGJhbms6SWRlbnRpZmljYXRpb25OdW1iZXJEaXJlY3RvciBjb250ZXh0UmVmPSJkdXIiPm51bW1lciBiZXN0dXVyZGVyPC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyRGlyZWN0b3I+DQogICAgICAgIDxiYW5rOkRhdGVPZkJpcnRoRGlyZWN0b3IgY29udGV4dFJlZj0iZHVyIj4xOTU1LTAxLTAxPC9iYW5rOkRhdGVPZkJpcnRoRGlyZWN0b3I+DQogICAgICA8L2Jhbms6RGlyZWN0b3JzPg0KICAgICAgPGt2ay1yajpEZXNjcmlwdGlvbk9mRXZlbnRBZnRlckJhbGFuY2VTaGVldERhdGUgY29udGV4dFJlZj0iZHVyIj5HZWJldXJ0ZW5pcyBuYSBiYWxhbnNkYXR1bTwva3ZrLXJqOkRlc2NyaXB0aW9uT2ZFdmVudEFmdGVyQmFsYW5jZVNoZWV0RGF0ZT4NCiAgICAgIDxrdmstcmo6RXhwbGFuYXRpb25PZkFtb3VudE9mRXN0aW1hdGVkRmluYW5jaWFsRWZmZWN0T2ZFdmVudEFmdGVyQmFsYW5jZVNoZWV0RGF0ZSBjb250ZXh0UmVmPSJkdXIiPmdlc2NoYXQgZmluYW5jaWVlbCBlZmZlY3QgZ2ViZXVydGVuaXMgbmEgYmFsYW5zZGF0dW08L2t2ay1yajpFeHBsYW5hdGlvbk9mQW1vdW50T2ZFc3RpbWF0ZWRGaW5hbmNpYWxFZmZlY3RPZkV2ZW50QWZ0ZXJCYWxhbmNlU2hlZXREYXRlPg0KICAgICAgP
Gt2ay1yajpUcnVlQW5kRmFpclZpZXdEaXNjbG9zdXJlcyBjb250ZXh0UmVmPSJkdXIiPlRvZWxpY2h0aW5nIGFmd2lqa2luZ2VuPC9rdmstcmo6VHJ1ZUFuZEZhaXJWaWV3RGlzY2xvc3VyZXM+DQogICAgICA8a3ZrLXJqOkF1ZGl0b3JzUmVwb3J0IGNvbnRleHRSZWY9ImR1ciI+QWNjb3VudGFudHN2ZXJrbGFyaW5nPC9rdmstcmo6QXVkaXRvcnNSZXBvcnQ+DQogICAgICA8a3ZrLXJqOlByb3Zpc2lvbnNBcnRpY2xlc0Fzc29jaWF0aW9uUHJvZml0QXBwcm9wcmlhdGlvbiBjb250ZXh0UmVmPSJkdXIiPldlZXJnYXZlIHN0YXR1dGFpcmUgcmVnZWxpbmc8L2t2ay1yajpQcm92aXNpb25zQXJ0aWNsZXNBc3NvY2lhdGlvblByb2ZpdEFwcHJvcHJpYXRpb24+DQogICAgICA8a3ZrLXJqOlByb2ZpdEFwcHJvcHJpYXRpb25Qcm9wb3NlZCBjb250ZXh0UmVmPSJkdXIiPk9wZ2F2ZSBiZXN0ZW1taW5nIHdpbnN0PC9rdmstcmo6UHJvZml0QXBwcm9wcmlhdGlvblByb3Bvc2VkPg0KICAgICAgPGJhbms6U3BlY2lhbEFydGljbGVzQXNzb2NpYXRpb25Db250cm9sU3RydWN0dXJlPg0KICAgICAgICA8a3ZrLXJqOlNwZWNpYWxQcm92aXNpb25zQXJ0aWNsZXNBc3NvY2lhdGlvbkdvdmVybmluZ0NvbnRyb2xTdHJ1Y3R1cmVOYW1lIGNvbnRleHRSZWY9ImR1ciI+TmFhbSBiaWp6LiBzdGF0dXRhaXIgcmVjaHQ8L2t2ay1yajpTcGVjaWFsUHJvdmlzaW9uc0FydGljbGVzQXNzb2NpYXRpb25Hb3Zlcm5pbmdDb250cm9sU3RydWN
0dXJlTmFtZT4NCiAgICAgICAgPGt2ay1yajpTcGVjaWFsUHJvdmlzaW9uc0FydGljbGVzQXNzb2NpYXRpb25Hb3Zlcm5pbmdDb250cm9sU3RydWN0dXJlTmF0dXJlIGNvbnRleHRSZWY9ImR1ciI+T21zY2hyaWp2aW5nIGJpanouIHN0YXR1dGFpciByZWNodDwva3ZrLXJqOlNwZWNpYWxQcm92aXNpb25zQXJ0aWNsZXNBc3NvY2lhdGlvbkdvdmVybmluZ0NvbnRyb2xTdHJ1Y3R1cmVOYXR1cmU+DQogICAgICA8L2Jhbms6U3BlY2lhbEFydGljbGVzQXNzb2NpYXRpb25Db250cm9sU3RydWN0dXJlPg0KICAgICAgPGt2ay1yajpSZXBvcnRTdWJzaWRpYXJpZXM+DQogICAgICAgIDxrdmstcmo6U3Vic2lkaWFyaWVzVHJhZGVOYW1lRGlmZmVyZW50IGNvbnRleHRSZWY9ImR1ciI+SGFuZGVsc25hYW0gbmV2ZW52ZXN0aWdpbmc8L2t2ay1yajpTdWJzaWRpYXJpZXNUcmFkZU5hbWVEaWZmZXJlbnQ+DQogICAgICAgIDxrdmstcmo6U3Vic2lkaWFyaWVzQ291bnRyeSBjb250ZXh0UmVmPSJkdXIiPkxhbmQgbmV2ZW52ZXN0aWdpbmc8L2t2ay1yajpTdWJzaWRpYXJpZXNDb3VudHJ5Pg0KICAgICAgPC9rdmstcmo6UmVwb3J0U3Vic2lkaWFyaWVzPg0KICAgICAgPGJhbms6RXF1aXR5QnVzaW5lc3NOYXR1cmFsUGVyc29ucyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42MDA8L2Jhbms6RXF1aXR5QnVzaW5lc3NOYXR1cmFsUGVyc29ucz4NCiAgICAgIDxiYW5rOkVxdWl0eUJ1c2luZXNzT
mF0dXJhbFBlcnNvblNwZWNpZmljYXRpb24+DQogICAgICAgIDxiYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyRGlyZWN0b3IgY29udGV4dFJlZj0iZHVyIj4xMjM0NTY3PC9iYW5rOklkZW50aWZpY2F0aW9uTnVtYmVyRGlyZWN0b3I+DQogICAgICAgIDxiYW5rOkVxdWl0eUJ1c2luZXNzTmF0dXJhbFBlcnNvbiBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iaW5zdCIgdW5pdFJlZj0iZXVyIj42MDA8L2Jhbms6RXF1aXR5QnVzaW5lc3NOYXR1cmFsUGVyc29uPg0KICAgICAgPC9iYW5rOkVxdWl0eUJ1c2luZXNzTmF0dXJhbFBlcnNvblNwZWNpZmljYXRpb24+DQogICAgICA8YmFuazpFcXVpdHlCdXNpbmVzc05hdHVyYWxQZXJzb25zRGlzY2xvc3VyZXMgY29udGV4dFJlZj0iZHVyIj5Ub2VsaWNodGluZyBlaWdlbiB2ZXJtb2dlbiBuYXR1dXJsaWprZSBwZXJzb29uPC9iYW5rOkVxdWl0eUJ1c2luZXNzTmF0dXJhbFBlcnNvbnNEaXNjbG9zdXJlcz4NCiAgICAgIDxiYW5rOlByaXZhdGVJbnRha2VzQW5kRGVwb3NpdHNOYXR1cmFsUGVyc29ucyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjI1PC9iYW5rOlByaXZhdGVJbnRha2VzQW5kRGVwb3NpdHNOYXR1cmFsUGVyc29ucz4NCiAgICAgIDxrdmstcmo6UmV2ZW51ZVJlbGF0ZWRQcmV2aW91c1llYXJSYXRpbyBkZWNpbWFscz0iMCIgY29udGV4dFJlZj0iZHVyIiB1bml0UmVmPSJldXIiPjEwPC9rdmstcmo6UmV2ZW51ZVJlbGF0ZWR
QcmV2aW91c1llYXJSYXRpbz4NCiAgICAgIDxrdmstcmo6TmV0UHJvZml0TG9zc09yZGluYXJ5QWN0aXZpdGllcyBkZWNpbWFscz0iMCIgY29udGV4dFJlZ");
> 
>                 
> base64String.append("j0iZHVyIiB1bml0UmVmPSJldXIiPjgwMDAwPC9rdmstcmo6TmV0UHJvZml0TG9zc09yZGluYXJ5QWN0aXZpdGllcz4NCiAgICA8L3hicmxpOnhicmw+DQogIDwvT2JqZWN0Pg0KPC9TaWduYXR1cmU+");
> 
>         System.out.println("Signature validation result: " + 
> validate(base64String.toString()));
> 
>     }
> 
>  
> 
> /**
> 
>  * Decodes a Base64 encoded XBRL document and validates its enveloping 
> XML-DSig signature.
> 
>  * @param base64String A Base64 encoded, XML-DSig signed, XBRL document.
> 
>  * @returns String OK|FAIL
> 
>  * @exception Exception When a <wsse:Signature> element cannot be found.
> 
>  */
> 
>     public static String validate(String base64String) throws Exception {
> 
>         // Decode Base64 string
> 
>         byte[] x509 = Base64.decodeBase64(base64String.getBytes());
> 
>         ByteArrayInputStream bais = new ByteArrayInputStream(x509);
> 
>  
> 
>         // Open XML document
> 
>         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
> 
>         dbf.setNamespaceAware(true);
> 
>         Document doc = dbf.newDocumentBuilder().parse(bais);
> 
>  
> 
>         // Retrieve signature
> 
>         NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, 
> "Signature");
> 
>         if(nl.getLength() == 0) {
> 
>             throw new Exception("ERROR: Cannot find Signature element");
> 
>         }
> 
>  
> 
>         // Create a DOM XMLSignatureFactory that will be used to 
> generate the enveloped signature
> 
>         String providerName = System.getProperty("jsr105Provider", 
> "org.jcp.xml.dsig.internal.dom.XMLDSigRI");
> 
>         XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", 
> (Provider)Class.forName(providerName).newInstance());
> 
>  
> 
>         // Create a DOMValidateContext and specify a KeySelector and 
> document context
> 
>         DOMValidateContext valContext = new DOMValidateContext(new 
> X509KeySelector(), nl.item(0));
> 
>        
> 
>         // Unmarshal the XMLSignature
> 
>         XMLSignature signature = fac.unmarshalXMLSignature(valContext);
> 
>         // Double check unmarshalling completed correctly
> 
>         
> System.out.println(signature.getSignedInfo().getSignatureMethod().getAlgorithm());
> 
>        
> 
>         // Validate the XMLSignature.
> 
>         boolean coreValidity = signature.validate(valContext);
> 
>         System.out.println("coreValidity: " + coreValidity);
> 
>  
> 
>         // Check core validation status and find out what caused failure
> 
>         if (coreValidity == false) {
> 
>             // Check the signature validation status
> 
>             boolean valid = 
> signature.getSignatureValue().validate(valContext);
> 
>             System.out.println("signature validation status: " + valid);
> 
>             // Check the validation status of each Reference.
> 
>             Iterator i = 
> signature.getSignedInfo().getReferences().iterator();
> 
>             for (int j=0; i.hasNext(); j++) {
> 
>                 valid = ((Reference)i.next()).validate(valContext);
> 
>                 System.out.println("reference["+j+"] validation status: 
> " + valid);
> 
>             }
> 
>         }
> 
>  
> 
>         return coreValidity ? "OK" : "FAIL";
> 
>     }
> 
> }
> 
>  
> 
> class X509KeySelector extends KeySelector {
> 
>     public KeySelectorResult select(KeyInfo keyInfo, KeySelector.Purpose 
> purpose, AlgorithmMethod method, XMLCryptoContext context) throws 
> KeySelectorException {
> 
>                 if (keyInfo == null) {
> 
>                         throw new KeySelectorException("ERROR: KeyInfo 
> object null!");
> 
>                 }
> 
>                 // Search for X509Data in KeyInfo
> 
>             Iterator hKeyInfo = keyInfo.getContent().iterator();
> 
>             while(hKeyInfo.hasNext()) {
> 
>                 XMLStructure hX509Data = (XMLStructure)hKeyInfo.next();
> 
>                 if(!(hX509Data instanceof X509Data)) continue;
> 
>                 X509Data x509Data = (X509Data)hX509Data;
> 
>                 Iterator hX509Certificate = 
> x509Data.getContent().iterator();
> 
>                 while (hX509Certificate.hasNext()) {
> 
>                     Object oX509Certificate = hX509Certificate.next();
> 
>                     if (!(oX509Certificate instanceof X509Certificate)) 
> continue;
> 
>                     X509Certificate x509Certificate = 
> ((X509Certificate)oX509Certificate);
> 
>                     final PublicKey key = x509Certificate.getPublicKey();
> 
>                     // Double check an X509 was found and correctly parsed
> 
>                     System.out.print(x509Certificate.getSubjectDN());
> 
>                     // Make sure the algorithm is compatible with the method
> 
>                     if (algEquals(method.getAlgorithm(), 
> key.getAlgorithm())) {
> 
>                         return new KeySelectorResult() {
> 
>                             public Key getKey() { return key; }
> 
>                         };
> 
>                     }
> 
>                 }
> 
>             }
> 
>             throw new KeySelectorException("ERROR: No X509Certificate 
> found!");
> 
>         }
> 
>  
> 
>     static boolean algEquals(String algURI, String algName) {
> 
>         if ((algName.equalsIgnoreCase("DSA") && 
> algURI.equalsIgnoreCase(SignatureMethod.DSA_SHA1)) || 
> (algName.equalsIgnoreCase("RSA") && 
> algURI.equalsIgnoreCase(SignatureMethod.RSA_SHA1))) {
> 
>             return true;
> 
>         } else {
> 
>             return false;
> 
>         }
> 
>     }
> 
> }
> 


Mime
View raw message