OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjICBJZiBlZGl0aW5nIHRoaXMgZmlsZSwgcnVuIHRoaXMgY29tbWFuZCBiZWZvcmUgY29tbWl0dGluZwojIwltYWtlIC1mIE1ha2VmaWxlLm9yZyBUQUJMRQojIwoKcmVxdWlyZSA1LjAwMDsKdXNlIHN0cmljdDsKCiMgc2VlIElOU1RBTEwgZm9yIGluc3RydWN0aW9ucy4KCm15ICR1c2FnZT0iVXNhZ2U6IENvbmZpZ3VyZSBbbm8tPGNpcGhlcj4gLi4uXSBbZW5hYmxlLTxjaXBoZXI+IC4uLl0gW2V4cGVyaW1lbnRhbC08Y2lwaGVyPiAuLi5dIFstRHh4eF0gWy1seHh4XSBbLUx4eHhdIFstZnh4eF0gWy1LeHh4XSBbbm8taHcteHh4fG5vLWh3XSBbW25vLV10aHJlYWRzXSBbW25vLV1zaGFyZWRdIFtbbm8tXXpsaWJ8emxpYi1keW5hbWljXSBbbm8tYXNtXSBbbm8tZHNvXSBbbm8ta3JiNV0gW3NjdHBdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJUl0gWy0td2l0aC14eHhbPXZ2dl1dIFstLXRlc3Qtc2FuaXR5XSBvcy9jb21waWxlcls6ZmxhZ3NdXG4iOwoKIyBPcHRpb25zOgojCiMgLS1vcGVuc3NsZGlyICBpbnN0YWxsIE9wZW5TU0wgaW4gT1BFTlNTTERJUiAoRGVmYXVsdDogRElSL3NzbCBpZiB0aGUKIyAgICAgICAgICAgICAgIC0tcHJlZml4IG9wdGlvbiBpcyBnaXZlbjsgL3Vzci9sb2NhbC9zc2wgb3RoZXJ3aXNlKQojIC0tcHJlZml4ICAgICAgcHJlZml4IGZvciB0aGUgT3BlblNTTCBpbmNsdWRlLCBsaWIgYW5kIGJpbiBkaXJlY3RvcmllcwojICAgICAgICAgICAgICAgKERlZmF1bHQ6IHRoZSBPUEVOU1NMRElSIGRpcmVjdG9yeSkKIwojIC0taW5zdGFsbF9wcmVmaXggIEFkZGl0aW9uYWwgcHJlZml4IGZvciBwYWNrYWdlIGJ1aWxkZXJzIChlbXB0eSBieQojICAgICAgICAgICAgICAgZGVmYXVsdCkuICBUaGlzIG5lZWRuJ3QgYmUgc2V0IGluIGFkdmFuY2UsIHlvdSBjYW4KIyAgICAgICAgICAgICAgIGp1c3QgYXMgd2VsbCB1c2UgIm1ha2UgSU5TVEFMTF9QUkVGSVg9L3doYXRldmVyIGluc3RhbGwiLgojCiMgLS13aXRoLWtyYjUtZGlyICBEZWNsYXJlIHdoZXJlIEtlcmJlcm9zIDUgbGl2ZXMuICBUaGUgbGlicmFyaWVzIGFyZSBleHBlY3RlZAojCQl0byBsaXZlIGluIHRoZSBzdWJkaXJlY3RvcnkgbGliLyBhbmQgdGhlIGhlYWRlciBmaWxlcyBpbgojCQlpbmNsdWRlLy4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMgLS13aXRoLWtyYjUtbGliICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGxpYnJhcmllcyBsaXZlLiAgQSB2YWx1ZSBpcwojCQlyZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2xpYikKIyAtLXdpdGgta3JiNS1pbmNsdWRlICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGhlYWRlciBmaWxlcyBsaXZlLiAgQQojCQl2YWx1ZSBpcyByZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2luY2x1ZGUpCiMgLS13aXRoLWtyYjUtZmxhdm9yICBEZWNsYXJlIHdoYXQgZmxhdm9yIG9mIEtlcmJlcm9zIDUgaXMgdXNlZC4gIEN1cnJlbnRseQojCQlzdXBwb3J0ZWQgdmFsdWVzIGFyZSAiTUlUIiBhbmQgIkhlaW1kYWwiLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIwojIC0tdGVzdC1zYW5pdHkgTWFrZSBhIG51bWJlciBvZiBzYW5pdHkgY2hlY2tzIG9uIHRoZSBkYXRhIGluIHRoaXMgZmlsZS4KIyAgICAgICAgICAgICAgIFRoaXMgaXMgYSBkZWJ1Z2dpbmcgdG9vbCBmb3IgT3BlblNTTCBkZXZlbG9wZXJzLgojCiMgLS1jcm9zcy1jb21waWxlLXByZWZpeCBBZGQgc3BlY2lmaWVkIHByZWZpeCB0byBiaW51dGlscyBjb21wb25lbnRzLgojCiMgbm8taHcteHh4ICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUuCiMgICAgICAgICAgICAgICBHZW5lcmljIE9wZW5TU0wtc3R5bGUgbWV0aG9kcyByZWxhdGluZyB0byB0aGlzIHN1cHBvcnQKIyAgICAgICAgICAgICAgIGFyZSBhbHdheXMgY29tcGlsZWQgYnV0IHJldHVybiBOVUxMIGlmIHRoZSBoYXJkd2FyZQojICAgICAgICAgICAgICAgc3VwcG9ydCBpc24ndCBjb21waWxlZC4KIyBuby1odyAgICAgICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIGFueSBjcnlwdG8gaGFyZHdhcmUuCiMgW25vLV10aHJlYWRzICBbZG9uJ3RdIHRyeSB0byBjcmVhdGUgYSBsaWJyYXJ5IHRoYXQgaXMgc3VpdGFibGUgZm9yCiMgICAgICAgICAgICAgICBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucyAoZGVmYXVsdCBpcyAidGhyZWFkcyIgaWYgd2UKIyAgICAgICAgICAgICAgIGtub3cgaG93IHRvIGRvIGl0KQojIFtuby1dc2hhcmVkCVtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIHdoZW4gc3VwcG9ydGVkLgojIG5vLWFzbSAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIKIyBuby1kc28gICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBuYXRpdmUgc2hhcmVkLWxpYnJhcnkgbWV0aG9kcy4gVGhpcwojICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhhdCBhbGwgbWV0aG9kcyBqdXN0IHJldHVybiBOVUxMLgojIG5vLWtyYjUgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IEtSQjUgbGlicmFyeSBvciBjb2RlLgojIFtuby1demxpYiAgICAgW2Rvbid0XSBjb21waWxlIHN1cHBvcnQgZm9yIHpsaWIgY29tcHJlc3Npb24uCiMgemxpYi1keW5hbWljCUxpa2UgInpsaWIiLCBidXQgdGhlIHpsaWIgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSBhIHNoYXJlZAojCQlsaWJyYXJ5IGFuZCB3aWxsIGJlIGxvYWRlZCBpbiBydW4tdGltZSBieSB0aGUgT3BlblNTTCBsaWJyYXJ5LgojIHNjdHAgICAgICAgICAgaW5jbHVkZSBTQ1RQIHN1cHBvcnQKIyAzODYgICAgICAgICAgIGdlbmVyYXRlIDgwMzg2IGNvZGUKIyBuby1zc2UyCWRpc2FibGVzIElBLTMyIFNTRTIgY29kZSwgYWJvdmUgb3B0aW9uIGltcGxpZXMgbm8tc3NlMgojIG5vLTxjaXBoZXI+ICAgYnVpbGQgd2l0aG91dCBzcGVjaWZpZWQgYWxnb3JpdGhtIChyc2EsIGlkZWEsIHJjNSwgLi4uKQojIC08eHh4PiArPHh4eD4gY29tcGlsZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2gKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCiMgTWluaW11bSB3YXJuaW5nIG9wdGlvbnMuLi4gYW55IGNvbnRyaWJ1dGlvbnMgdG8gT3BlblNTTCBzaG91bGQgYXQgbGVhc3QgZ2V0CiMgcGFzdCB0aGVzZS4KCm15ICRnY2NfZGV2dGVhbV93YXJuID0gIi1XYWxsIC1wZWRhbnRpYyAtRFBFREFOVElDIC1Xbm8tbG9uZy1sb25nIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc2hhZG93IC1XZm9ybWF0IC1XZXJyb3IgLURDUllQVE9fTURFQlVHX0FMTCAtRENSWVBUT19NREVCVUdfQUJPUlQgLURSRUZfQ0hFQ0sgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQiOwoKbXkgJHN0cmljdF93YXJuaW5ncyA9IDA7CgpteSAkeDg2X2djY19kZXM9IkRFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwiOwoKIyBNRDJfQ0hBUiBzbGFncyBwZW50aXVtIHByb3MKbXkgJHg4Nl9nY2Nfb3B0cz0iUkM0X0lOREVYIE1EMl9JTlQiOwoKIyBNT0RJRlkgVEhFU0UgUEFSQU1FVEVSUyBJRiBZT1UgQVJFIEdPSU5HIFRPIFVTRSBUSEUgJ3V0aWwvc3BlZWQuc2ggU0NSSVBUCiMgRG9uJ3Qgd29ycnkgYWJvdXQgdGhlc2Ugbm9ybWFsbHkKCm15ICR0Y2M9ImNjIjsKbXkgJHRmbGFncz0iLWZhc3QgLVhhIjsKbXkgJHRibl9tdWw9IiI7Cm15ICR0bGliPSItbG5zbCAtbHNvY2tldCI7CiMkYml0czE9IlNJWFRFRU5fQklUICI7CiMkYml0czI9IlRISVJUWV9UV09fQklUICI7Cm15ICRiaXRzMT0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMyPSJTSVhUWV9GT1VSX0JJVCAiOwoKbXkgJHg4Nl9hc209Ing4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubyB4ODYtZ2YybS5vOjpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXMtNTg2Lm8gdnBhZXMteDg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubzpnaGFzaC14ODYubzplX3BhZGxvY2steDg2Lm8iOwoKbXkgJHg4Nl9lbGZfYXNtPSIkeDg2X2FzbTplbGYiOwoKbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm8geDg2XzY0LW1vbnQ1Lm8geDg2XzY0LWdmMm0ubyByc2F6X2V4cC5vIHJzYXoteDg2XzY0Lm8gcnNhei1hdngyLm86ZWNwX25pc3R6MjU2Lm8gZWNwX25pc3R6MjU2LXg4Nl82NC5vOjphZXMteDg2XzY0Lm8gdnBhZXMteDg2XzY0Lm8gYnNhZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm8gYWVzbmktc2hhMS14ODZfNjQubyBhZXNuaS1zaGEyNTYteDg2XzY0Lm8gYWVzbmktbWIteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm8gc2hhMS1tYi14ODZfNjQubyBzaGEyNTYtbWIteDg2XzY0Lm86OnJjNC14ODZfNjQubyByYzQtbWQ1LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzpnaGFzaC14ODZfNjQubyBhZXNuaS1nY20teDg2XzY0Lm86ZV9wYWRsb2NrLXg4Nl82NC5vIjsKbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm8gaWE2NC1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6cmM0LWlhNjQubyByYzRfc2tleS5vOjo6OjpnaGFzaC1pYTY0Lm86OnZvaWQiOwpteSAkc3BhcmN2OV9hc209InNwYXJjdjljYXAubyBzcGFyY2NwdWlkLm86Ym4tc3BhcmN2OS5vIHNwYXJjdjktbW9udC5vIHNwYXJjdjlhLW1vbnQubyB2aXMzLW1vbnQubyBzcGFyY3Q0LW1vbnQubyBzcGFyY3Y5LWdmMm0ubzo6ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm8gZGVzdDQtc3BhcmN2OS5vOmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm8gYWVzdDQtc3BhcmN2OS5vOjptZDUtc3BhcmN2OS5vOnNoYTEtc3BhcmN2OS5vIHNoYTI1Ni1zcGFyY3Y5Lm8gc2hhNTEyLXNwYXJjdjkubzo6Ojo6OmNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9jYmMubyBjbWxsdDQtc3BhcmN2OS5vOmdoYXNoLXNwYXJjdjkubzo6dm9pZCI7Cm15ICRzcGFyY3Y4X2FzbT0iOnNwYXJjdjgubzo6ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6Ojo6Ojo6dm9pZCI7Cm15ICRhbHBoYV9hc209ImFscGhhY3B1aWQubzpibl9hc20ubyBhbHBoYS1tb250Lm86Ojo6OjpzaGExLWFscGhhLm86Ojo6Ojo6Z2hhc2gtYWxwaGEubzo6dm9pZCI7Cm15ICRtaXBzNjRfYXNtPSI6Ym4tbWlwcy5vIG1pcHMtbW9udC5vOjo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vIHNoYTUxMi1taXBzLm86Ojo6Ojo6OiI7Cm15ICRtaXBzMzJfYXNtPSRtaXBzNjRfYXNtOyAkbWlwczMyX2FzbSA9fiBzL1xzKnNoYTUxMlwtbWlwc1wuby8vOwpteSAkczM5MHhfYXNtPSJzMzkweGNhcC5vIHMzOTB4Y3B1aWQubzpibi1zMzkweC5vIHMzOTB4LW1vbnQubyBzMzkweC1nZjJtLm86OjphZXMtczM5MHgubyBhZXMtY3RyLm8gYWVzLXh0cy5vOjo6c2hhMS1zMzkweC5vIHNoYTI1Ni1zMzkweC5vIHNoYTUxMi1zMzkweC5vOjpyYzQtczM5MHgubzo6Ojo6Z2hhc2gtczM5MHgubzoiOwpteSAkYXJtdjRfYXNtPSJhcm1jYXAubyBhcm12NGNwdWlkLm86Ym5fYXNtLm8gYXJtdjQtbW9udC5vIGFybXY0LWdmMm0ubzo6OmFlc19jYmMubyBhZXMtYXJtdjQubyBic2Flcy1hcm12Ny5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vIGdoYXNodjgtYXJteC5vOjp2b2lkIjsKbXkgJGFhcmNoNjRfYXNtPSJhcm1jYXAubyBhcm02NGNwdWlkLm8gbWVtX2Nsci5vOjo6OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlc3Y4LWFybXgubzo6OnNoYTEtYXJtdjgubyBzaGEyNTYtYXJtdjgubyBzaGE1MTItYXJtdjgubzo6Ojo6OjpnaGFzaHY4LWFybXgubzoiOwpteSAkcGFyaXNjMTFfYXNtPSJwYXJpc2NpZC5vOmJuX2FzbS5vIHBhcmlzYy1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcGFyaXNjLm86OjpzaGExLXBhcmlzYy5vIHNoYTI1Ni1wYXJpc2MubyBzaGE1MTItcGFyaXNjLm86OnJjNC1wYXJpc2Mubzo6Ojo6Z2hhc2gtcGFyaXNjLm86OjMyIjsKbXkgJHBhcmlzYzIwX2FzbT0icGFyaXNjaWQubzpwYS1yaXNjMlcubyBwYXJpc2MtbW9udC5vOjo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjo2NCI7Cm15ICRwcGM2NF9hc209InBwY2NwdWlkLm8gcHBjY2FwLm86Ym4tcHBjLm8gcHBjLW1vbnQubyBwcGM2NC1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcHBjLm8gdnBhZXMtcHBjLm8gYWVzcDgtcHBjLm86OjpzaGExLXBwYy5vIHNoYTI1Ni1wcGMubyBzaGE1MTItcHBjLm8gc2hhMjU2cDgtcHBjLm8gc2hhNTEycDgtcHBjLm86Ojo6Ojo6Z2hhc2hwOC1wcGMubzoiOwpteSAkcHBjMzJfYXNtPSRwcGM2NF9hc207Cm15ICRub19hc209Ijo6Ojo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKCiMgQXMgZm9yICRCU0R0aHJlYWRzLiBJZGVhIGlzIHRvIG1haW50YWluICJjb2xsZWN0aXZlIiBzZXQgb2YgZmxhZ3MsCiMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLAojIGJ1dCBpcyB0cmVhdGVkIGRpZmZlcmVudGx5LiBPcGVuQlNEIGV4cGFuZHMgaXMgYXMgLURfUE9TSVhfVEhSRUFECiMgLWxjX3IsIHdoaWNoIGlzIHN1ZmZpY2llbnQuIEZyZWVCU0QgNC54IGV4cGFuZHMgaXQgYXMgLWxjX3IsCiMgd2hpY2ggaGFzIHRvIGJlIGFjY29tcGFuaWVkIGJ5IGV4cGxpY2l0IC1EX1RIUkVBRF9TQUZFIGFuZAojIHNvbWV0aW1lcyAtRF9SRUVOVFJBTlQuIEZyZWVCU0QgNS54IGV4cGFuZHMgaXQgYXMgLWxjX3IsIHdoaWNoCiMgc2VlbXMgdG8gYmUgc3VmZmljaWVudD8KbXkgJEJTRHRocmVhZHM9Ii1wdGhyZWFkIC1EX1RIUkVBRF9TQUZFIC1EX1JFRU5UUkFOVCI7CgojY29uZmlnLXN0cmluZwkkY2MgOiAkY2ZsYWdzIDogJHVuaXN0ZCA6ICR0aHJlYWRfY2ZsYWcgOiAkc3lzX2lkIDogJGxmbGFncyA6ICRibl9vcHMgOiAkY3B1aWRfb2JqIDogJGJuX29iaiA6ICRlY19vYmogOiAkZGVzX29iaiA6ICRhZXNfb2JqIDogJGJmX29iaiA6ICRtZDVfb2JqIDogJHNoYTFfb2JqIDogJGNhc3Rfb2JqIDogJHJjNF9vYmogOiAkcm1kMTYwX29iaiA6ICRyYzVfb2JqIDogJHdwX29iaiA6ICRjbWxsX29iaiA6ICRtb2Rlc19vYmogOiAkZW5naW5lc19vYmogOiAkZHNvX3NjaGVtZSA6ICRzaGFyZWRfdGFyZ2V0IDogJHNoYXJlZF9jZmxhZyA6ICRzaGFyZWRfbGRmbGFnIDogJHNoYXJlZF9leHRlbnNpb24gOiAkcmFubGliIDogJGFyZmxhZ3MgOiAkbXVsdGlsaWIKCm15ICV0YWJsZT0oCiMgRmlsZSAnVEFCTEUnIChjcmVhdGVkIGJ5ICdtYWtlIFRBQkxFJykgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGlzIGxpc3QsCiMgZm9ybWF0dGVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCgoKIyJiIiwJCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9OiR7dGJuX211bH06OiIsCiMiYmwtNGMtMmMiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIE1EMl9DSEFSOiR7dGJuX211bH06OiIsCiMiYmwtNGMtcmkiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIFJDNF9JTkRFWDoke3Ribl9tdWx9OjoiLAojImIyLWlzLXJpLWRwIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMn1JREVBX1NIT1JUIFJDNF9JTkRFWCBERVNfUFRSOiR7dGJuX211bH06OiIsCgojIE91ciBkZXZlbG9wbWVudCBjb25maWdzCiJwdXJpZnkiLAkicHVyaWZ5IGdjYzotZyAtRFBVUklGWSAtV2FsbDo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDo6OjoiLAoiZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nZ2RiIC1nMiAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6Oih1bmtub3duKTo6LWxlZmVuY2U6Ojo6IiwKImRlYnVnLWJlbiIsCSJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1PMiAtcGlwZTo6KHVua25vd24pOjo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9OT19IV19QQURMT0NLIC1nMyAtTzIgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tZGVidWctNjQiLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1Xbm8tZXJyb3I9b3Zlcmxlbmd0aC1zdHJpbmdzIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1nMyAtTzMgLXBpcGU6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWJlbi1kZWJ1Zy02NC1jbGFuZyIsCSJjbGFuZzokZ2NjX2RldnRlYW1fd2FybiAtZnNhbml0aXplPXVuZGVmaW5lZCAtV25vLWVycm9yPW92ZXJsZW5ndGgtc3RyaW5ncyAtV25vLWVycm9yPWV4dGVuZGVkLW9mZnNldG9mIC1Xbm8tZXJyb3I9bGFuZ3VhZ2UtZXh0ZW5zaW9uLXRva2VuIC1Xc3RyaWN0LW92ZXJmbG93IC1RdW51c2VkLWFyZ3VtZW50cyAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRERFQlVHX1VOVVNFRCAtZzMgLU8zIC1waXBlOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1iZW4tZGVidWctNjQtbm9vcHQiLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1Xbm8tZXJyb3I9b3Zlcmxlbmd0aC1zdHJpbmdzIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1nMyAtcGlwZTo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctYmVuLW1hY29zIiwJImNjOiRnY2NfZGV2dGVhbV93YXJuIC1ET1BFTlNTTF9OT19BU00gLURCTl9ERUJVRyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURERUJVR19VTlVTRUQgLURPUEVOU1NMX1RIUkVBRFMgLURfUkVFTlRSQU5UIC1ERFNPX0RMRkNOIC1ESEFWRV9ETEZDTl9IIC1hcmNoIGkzODYgLU8zIC1ETF9FTkRJQU4gLWczIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLW5vLW9wdCIsCSJnY2M6IC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUcgLVdlcnJvciAtRExfRU5ESUFOIC1EVEVSTUlPUyAtV2FsbCAtZzM6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1kYXJ3aW42NCIsImNjOiRnY2NfZGV2dGVhbV93YXJuIC1Xbm8tbGFuZ3VhZ2UtZXh0ZW5zaW9uLXRva2VuIC1Xbm8tZXh0ZW5kZWQtb2Zmc2V0b2YgLWFyY2ggeDg2XzY0IC1PMyAtRExfRU5ESUFOIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDokeDg2XzY0X2FzbTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGVidWctcnNlIiwiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLXBpcGUgLU8gLWcgLWdnZGIzIC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctYm9kbyIsCSJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLVduby1lcnJvcj1vdmVybGVuZ3RoLXN0cmluZ3MgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDT05GX0RFQlVHIC1EQklPX1BBSVJfREVCVUcgLW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJkZWJ1Zy1lcmJyaWRnZSIsICAgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGVidWctdWxmIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9uczo6OkNZR1dJTjMyOjo6JHtub19hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6OjouZGxsIiwKImRlYnVnLXN0ZXZlNjQiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MgLWc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUzMiIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW0zMiAtRExfRU5ESUFOIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtV25vLW92ZXJsZW5ndGgtc3RyaW5ncyAtZyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUtb3B0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1PMyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtV25vLW92ZXJsZW5ndGgtc3RyaW5ncyAtZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZiIsImdjYzotRExFVklUVEVfREVCVUcgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLWdnZGIgLWczIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbSIsImdjYzotRExFVklUVEVfREVCVUcgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtZ2dkYiAtZzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYtZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtZ2dkYiAtZzMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtZ2dkYiAtZzMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmYzMiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZjY0IiwiZ2NjOi1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQk5fU1RSSUNUIC1EUFVSSUZZIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIC1ET1BFTlNTTF9OT19BU00gLURPUEVOU1NMX05PX0lOTElORV9BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRFBFREFOVElDIC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1pYTMyLWFlcyIsICJnY2M6LURBRVNfRVhQRVJJTUVOVEFMIC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ong4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubzo6ZGVzLTU4Ni5vIGNyeXB0NTg2Lm86YWVzX3g4NmNvcmUubyBhZXNfY2JjLm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86OmdoYXNoLXg4Ni5vOmVfcGFkbG9jay14ODYubzplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1nZW5lcmljMzIiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFRFUk1JTyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgteDg2XzY0IiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXRlc3QtNjQtY2xhbmciLAkiY2xhbmc6JGdjY19kZXZ0ZWFtX3dhcm4gLVduby1lcnJvcj1vdmVybGVuZ3RoLXN0cmluZ3MgLVduby1lcnJvcj1leHRlbmRlZC1vZmZzZXRvZiAtV25vLWVycm9yPWxhbmd1YWdlLWV4dGVuc2lvbi10b2tlbiAtV25vLWVycm9yPXVudXNlZC1jb25zdC12YXJpYWJsZSAtV3N0cmljdC1vdmVyZmxvdyAtUXVudXNlZC1hcmd1bWVudHMgLURCTl9ERUJVRyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURERUJVR19VTlVTRUQgLWczIC1PMyAtcGlwZTo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGFyd2luNjQtZGVidWctdGVzdC02NC1jbGFuZyIsICAiY2xhbmc6LWFyY2ggeDg2XzY0IC1ETF9FTkRJQU4gJGdjY19kZXZ0ZWFtX3dhcm4gLVduby1lcnJvcj1vdmVybGVuZ3RoLXN0cmluZ3MgLVduby1lcnJvcj1leHRlbmRlZC1vZmZzZXRvZiAtV25vLWVycm9yPWxhbmd1YWdlLWV4dGVuc2lvbi10b2tlbiAtV25vLWVycm9yPXVudXNlZC1jb25zdC12YXJpYWJsZSAtV3N0cmljdC1vdmVyZmxvdyAtUXVudXNlZC1hcmd1bWVudHMgLURCTl9ERUJVRyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURERUJVR19VTlVTRUQgLWczIC1PMyAtcGlwZTo6JHtCU0R0aHJlYWRzfTpNQUNPU1g6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219Om1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIEJhc2ljIGNvbmZpZ3MgdGhhdCBzaG91bGQgd29yayBvbiBhbnkgKDMyIGFuZCBsZXNzIGJpdCkgYm94CiJnY2MiLAkJImdjYzotTzM6Oih1bmtub3duKTo6OkJOX0xMT05HOjo6IiwKImNjIiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMjIyNWT1MgQ29uZmlndXJhdGlvbnMKInZvcy1nY2MiLCJnY2M6LU8zIC1XYWxsIC1ET1BFTlNTTF9TWVNOQU1FX1ZPUyAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTjo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLWdjYyIsImdjYzotTzAgLWcgLVdhbGwgLURPUEVOU1NMX1NZU05BTUVfVk9TIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EX1ZPU19FWFRFTkRFRF9OQU1FUyAtREJfRU5ESUFOIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRzo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIEdOVSBDIHNldHVwcwojIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIHN3aXRjaGVzIG9mZiBpbmxpbmUgYXNzZW1ibGVyLiBXZSBoYXZlIHRvIGRvIGl0CiMgaGVyZSBiZWNhdXNlIHdoZW5ldmVyIEdOVSBDIGluc3RhbnRpYXRlcyBhbiBhc3NlbWJsZXIgdGVtcGxhdGUgaXQKIyBzdXJyb3VuZHMgaXQgd2l0aCAjQVBQICNOT19BUFAgY29tbWVudCBwYWlyIHdoaWNoIChhdCBsZWFzdCBTb2xhcmlzCiMgN194ODYpIC91c3IvY2NzL2Jpbi9hcyBmYWlscyB0byBhc3NlbWJsZSB3aXRoICJJbGxlZ2FsIG1uZW1vbmljIgojIGVycm9yIG1lc3NhZ2UuCiJzb2xhcmlzLXg4Ni1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1wZW50aXVtIC1XYWxsIC1ETF9FTkRJQU4gLURPUEVOU1NMX05PX0lOTElORV9BU006Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLXNoYXJlZCAtc3RhdGljLWxpYmdjYyBtaWdodCBhcHBlYXIgY29udHJvdmVyc2lhbCwgYnV0IG1vZHVsZXMgdGFrZW4KIyBmcm9tIHN0YXRpYyBsaWJnY2MgZG8gbm90IGhhdmUgcmVsb2NhdGlvbnMgYW5kIGxpbmtpbmcgdGhlbSBpbnRvIG91cgojIHNoYXJlZCBvYmplY3RzIGRvZXNuJ3QgaGF2ZSBhbnkgbmVnYXRpdmUgc2lkZS1lZmZlY3RzLiBPbiB0aGUgY29udHJhcnksCiMgZG9pbmcgc28gbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdjYyBzaGFyZWQgYnVpbGQgd2l0aCBTdW4gQy4gR2l2ZW4KIyB0aGF0IGdjYyBnZW5lcmF0ZXMgZmFzdGVyIGNvZGUgW3RoYW5rcyB0byBpbmxpbmUgYXNzZW1ibGVyXSwgSSB3b3VsZAojIGFjdHVhbGx5IHJlY29tbWVuZCB0byBjb25zaWRlciB1c2luZyBnY2Mgc2hhcmVkIGJ1aWxkIGV2ZW4gd2l0aCB2ZW5kb3IKIyBjb21waWxlcjotKQojCQkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgoic29sYXJpczY0LXg4Nl82NC1nY2MiLCJnY2M6LW02NCAtTzMgLVdhbGwgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQgLXN0YXRpYy1saWJnY2M6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAoKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIFN1biBDIHNldHVwcwoic29sYXJpcy14ODYtY2MiLCJjYzotZmFzdCAteGFyY2g9Z2VuZXJpYyAtTyAtWGE6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXg4Nl82NC1jYyIsImNjOi1mYXN0IC14YXJjaD1hbWQ2NCAteHN0cmNvbnN0IC1YYSAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD1hbWQ2NCAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBHTlUgQyBzZXR1cHMKInNvbGFyaXMtc3BhcmN2Ny1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1tdjggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtbTMyIHNob3VsZCBiZSBzYWZlIHRvIGFkZCBhcyBsb25nIGFzIGRyaXZlciByZWNvZ25pemVzIC1tY3B1PXVsdHJhc3BhcmMKInNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktZ2NjIiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLU8gLWcgLW12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLU8gLWcgLW1jcHU9dWx0cmFzcGFyYyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVduby1sb25nLWxvbmcgLURfX0VYVEVOU0lPTlNfXyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTdW5PUyBjb25maWdzLCBhc3N1bWluZyBzcGFyYyBmb3IgdGhlIGdjYyBvbmUuCiMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDoke25vX2FzbX06OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMToke25vX2FzbX06OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElSSVggNi54IGNvbmZpZ3MKIyBPbmx5IE4zMiBhbmQgTjY0IEFCSXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgTzMyIEFCSSBidWlsZCwgaW52b2tlCiMgJy4vQ29uZmlndXJlIGlyaXgtY2MgLW8zMicgbWFudWFsbHkuCiJpcml4LW1pcHMzLWdjYyIsImdjYzotbWFiaT1uMzIgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiJpcml4LW1pcHMzLWNjIiwgImNjOi1uMzIgLW1pcHMzIC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpERVNfUFRSIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6JHttaXBzNjRfYXNtfTpuMzI6ZGxmY246aXJpeC1zaGFyZWQ6Oi1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiMgTjY0IEFCSSBidWlsZHMuCiJpcml4NjQtbWlwczQtZ2NjIiwiZ2NjOi1tYWJpPTY0IC1taXBzNCAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiaXJpeDY0LW1pcHM0LWNjIiwgImNjOi02NCAtbWlwczQgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKCiMjIyMgVW5pZmllZCBIUC1VWCBBTlNJIEMgY29uZmlncy4KIyBTcGVjaWFsIG5vdGVzOgojIC0gT3JpZ2luYWxseSB3ZSB3ZXJlIG9wdGltaXppbmcgYXQgK080IGxldmVsLiBJdCBzaG91bGQgYmUgbm90ZWQKIyAgIHRoYXQgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuICtPMyBhbmQgK080IGlzIGdsb2JhbCBpbnRlci0KIyAgIHByb2NlZHVyYWwgYW5hbHlzaXMuIEFzIGl0IGhhcyB0byBiZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBsaW5rCiMgICBzdGFnZSB0aGUgY29tcGlsZXIgbGVhdmVzIGJlaGluZCBjZXJ0YWluIHBzZXVkby1jb2RlIGluIGxpYiouYQojICAgd2hpY2ggbWlnaHQgYmUgcmVsZWFzZSBvciBldmVuIHBhdGNoIGxldmVsIHNwZWNpZmljLiBHZW5lcmF0aW5nCiMgICB0aGUgbWFjaGluZSBjb2RlIGZvciBhbmQgYW5hbHl6aW5nIHRoZSAqd2hvbGUqIHByb2dyYW0gYXBwZWFycwojICAgdG8gYmUgKmV4dHJlbWVseSogbWVtb3J5IGRlbWFuZGluZyB3aGlsZSB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcwojICAgYWN0dWFsbHkgcXVlc3Rpb25hYmxlLiBUaGUgc2l0dWF0aW9uIGlzIGludGVuc2lmaWVkIGJ5IHRoZSBkZWZhdWx0CiMgICBIUC1VWCBkYXRhIHNldCBzaXplIGxpbWl0IChpbmZhbW91cyAnbWF4ZHNpeicgdHVuYWJsZSkgb2YgNjRNQgojICAgd2hpY2ggaXMgd2F5IHRvbyBsb3cgZm9yICtPNC4gSW4gb3RoZXIgd29yZHMsIGRvZXNuJ3QgK08zIG1ha2UKIyAgIG1vcmUgc2Vuc2U/CiMgLSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSFAgY29tcGlsZXIgYnkgZGVmYXVsdCBnZW5lcmF0ZXMgY29kZQojICAgc3VpdGFibGUgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgaG9zdCB5b3UncmUgY3VycmVudGx5IGNvbXBpbGluZyBhdC4KIyAgIElmIHRoZSB0b29sa2l0IGlzIG1lbnQgdG8gYmUgdXNlZCBvbiB2YXJpb3VzIFBBLVJJU0MgcHJvY2Vzc29ycwojICAgY29uc2lkZXIgJy4vY29uZmlnICtEQXBvcnRhYmxlJy4KIyAtICtERDY0IGlzIGNob3NlbiBpbiBmYXZvdXIgb2YgK0RBMi4wVyBiZWNhdXNlIGl0J3MgbWVhbnQgdG8gYmUKIyAgIGNvbXBhdGlibGUgd2l0aCAqZnV0dXJlKiByZWxlYXNlcy4KIyAtIElmIHlvdSBydW4gLi9Db25maWd1cmUgaHB1eC1wYXJpc2MtW2ddY2MgbWFudWFsbHkgZG9uJ3QgZm9yZ2V0IHRvCiMgICBwYXNzIC1EX1JFRU5UUkFOVCBvbiBIUC1VWCAxMCBhbmQgbGF0ZXIuCiMgLSAtRE1EMzJfWEFSUkFZIHRyaWdnZXJzIHdvcmthcm91bmQgZm9yIGNvbXBpbGVyIGJ1ZyB3ZSByYW4gaW50byBpbgojICAgMzItYml0IG1lc3NhZ2UgZGlnZXN0cy4gKEZvciB0aGUgbW9tZW50IG9mIHRoaXMgd3JpdGluZykgSFAgQwojICAgZG9lc24ndCBzZWVtIHRvICJkaWdlc3QiIHRvbyBtYW55IGxvY2FsIHZhcmlhYmxlcyAodGhleSBtYWtlICJoaW0iCiMgICBjaGV3IGZvcmV2ZXI6LSkuIEZvciBtb3JlIGRldGFpbHMgbG9vay11cCBNRDMyX1hBUlJBWSBjb21tZW50IGluCiMgICBjcnlwdG8vc2hhL3NoYV9sY2wuaC4KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiMgU2luY2UgdGhlcmUgaXMgbWVudGlvbiBvZiB0aGlzIGluIHNobGliL2hwdXgxMC1jYy5zaAoiaHB1eC1wYXJpc2MtY2MtbzQiLCJjYzotQWUgK080ICtFU2xpdCAteiAtREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYy1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMS1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke3BhcmlzYzExX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTEuMSIsCiJocHV4LXBhcmlzYzItZ2NjIiwiZ2NjOi1tYXJjaD0yLjAgLU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToiLmV2YWx7bXkgJGFzbT0kcGFyaXNjMjBfYXNtOyRhc209fnMvMldcLi8yXC4vOyRhc209fnMvOjY0LzozMi87JGFzbX0uIjpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfMzIiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6Ojo6Ojo6dm9pZDpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfNjQiLAoKIyBNb3JlIGF0dGVtcHRzIGF0IHVuaWZpZWQgMTAuWCBhbmQgMTEuWCB0YXJnZXRzIGZvciBIUCBDIGNvbXBpbGVyLgojCiMgQ2hyaXMgUnVlbW1sZXIgPHJ1ZW1tbGVyQGN1cC5ocC5jb20+CiMgS2V2aW4gU3RldmVzIDxrc0BocC5zZT4KImhwdXgtcGFyaXNjLWNjIiwiY2M6K08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzEtY2MiLCJjYzorREExLjEgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtwYXJpc2MxMV9hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMS4xIiwKImhwdXgtcGFyaXNjMi1jYyIsImNjOitEQTIuMCArRFMyLjAgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWSAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiIuZXZhbHtteSAkYXNtPSRwYXJpc2MyMF9hc207JGFzbT1+cy8yV1wuLzJcLi87JGFzbT1+cy86NjQvOjMyLzskYXNtfS4iOmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfMzIiLAoiaHB1eDY0LXBhcmlzYzItY2MiLCJjYzorREQ2NCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtwYXJpc2MyMF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfNjQiLAoKIyBIUC9VWCBJQS02NCB0YXJnZXRzCiJocHV4LWlhNjQtY2MiLCJjYzotQWUgK0REMzIgK08yICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDMyIC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXgzMiIsCiMgRnJhbmsgR2V1cnRzIDxmcmFuay5nZXVydHNAbmwuYWJuYW1yby5jb20+IGhhcyBwYXRpZW50bHkgYXNzaXN0ZWQgd2l0aAojIHdpdGggZGVidWdnaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29uZmlnLgoiaHB1eDY0LWlhNjQtY2MiLCJjYzotQWUgK0RENjQgK08zICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDY0IiwKIyBHQ0MgYnVpbGRzLi4uCiJocHV4LWlhNjQtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDMyIiwKImhwdXg2NC1pYTY0LWdjYyIsImdjYzotbWxwNjQgLU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotbWxwNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4NjQiLAoKIyBMZWdhY3kgSFBVWCA5LlggY29uZmlncy4uLgoiaHB1eC1jYyIsCSJjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWSAtQWUgK0VTbGl0ICtPMiAtejo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1nY2MiLAkiZ2NjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtTzM6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBIUCBNUEUvaVggaHR0cDovL2phenouZXh0ZXJuYWwuaHAuY29tL3NyYy9vcGVuc3NsLwoiTVBFL2lYLWdjYyIsCSJnY2M6LURfRU5ESUFOIC1EQk5fRElWMlcgLU8zIC1EX1BPU0lYX1NPVVJDRSAtRF9TT0NLRVRfU09VUkNFIC1JL1NZU0xPRy9QVUI6Oih1bmtub3duKTpNUEU6LUwvU1lTTE9HL1BVQiAtbHN5c2xvZyAtbHNvY2tldCAtbGN1cnNlczpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6IiwKCiMgREVDIEFscGhhIE9TRi8xL1RydTY0IHRhcmdldHMuCiMKIwkiV2hhdCdzIGluIGEgbmFtZT8gVGhhdCB3aGljaCB3ZSBjYWxsIGEgcm9zZQojCSBCeSBhbnkgb3RoZXIgd29yZCB3b3VsZCBzbWVsbCBhcyBzd2VldC4iCiMKIyAtIFdpbGxpYW0gU2hha2VzcGVhcmUsICJSb21lbyAmIEp1bGlldCIsIEFjdCBJSSwgc2NlbmUgSUkuCiMKIyBGb3IgZ2NjLCB0aGUgZm9sbG93aW5nIGdhdmUgYSAlNTAgc3BlZWR1cCBvbiBhIDE2NCBvdmVyIHRoZSAnREVTX0lOVCcgdmVyc2lvbgojCiJvc2YxLWFscGhhLWdjYyIsICJnY2M6LU8zOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMToke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoib3NmMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6LW1zeW06LnNvIiwKCiMjIyMKIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCiMjIyMKIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmlnIGlzIGZyZWUgdG8KIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZpbmUgYXBwcm9wcmlhdGUgLW1hcmNoLgojIElmIHlvdSBjb21waWxlciBkb2VzIG5vdCwgZG8gY29tcGxlbWVudCBjb25maWcgY29tbWFuZCBsaW5lIHdpdGggb25lIQoibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFhcmNoNjQiLCJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FhcmNoNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIENvbmZpZ3VyZSBzY3JpcHQgYWRkcyBtaW5pbWFsbHkgcmVxdWlyZWQgLW1hcmNoIGZvciBhc3NlbWJseSBzdXBwb3J0LAojIGlmIG5vIC1tYXJjaCB3YXMgc3BlY2lmaWVkIGF0IGNvbW1hbmQgbGluZS4gbWlwczMyIGFuZCBtaXBzNjQgYmVsb3cKIyByZWZlciB0byBjb250ZW1wb3JhcnkgTUlQUyBBcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbnMsIE1JUFMzMiBhbmQKIyBNSVBTNjQsIHJhdGhlciB0aGFuIHRvIGtlcm5lbCBiaXRuZXNzLgoibGludXgtbWlwczMyIiwJImdjYzotbWFiaT0zMiAtRFRFUk1JTyAtTzMgLVdhbGwgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtbWlwczY0IiwgICAiZ2NjOi1tYWJpPW4zMiAtRFRFUk1JTyAtTzMgLVdhbGwgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiJsaW51eDY0LW1pcHM2NCIsICAgImdjYzotbWFiaT02NCAtRFRFUk1JTyAtTzMgLVdhbGwgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHttaXBzNjRfYXNtfTo2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW1hYmk9NjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgSUEtMzIgdGFyZ2V0cy4uLgoibGludXgtaWEzMi1pY2MiLAkiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yOjotRF9SRUVOVFJBTlQ6Oi1sZGwgLW5vX2NwcHJ0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LUtQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hb3V0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQiLAojIyMjCiJsaW51eC1nZW5lcmljNjQiLCJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGM2NCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXgtcHBjNjRsZSIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHBwYzY0X2FzbTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjoiLAoibGludXgtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsIC1ub19jcHBydDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4LXg4Nl82NC1pY2MiLCAiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yOjotRF9SRUVOVFJBTlQ6Oi1sZGwgLW5vX2NwcHJ0OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXgteDMyIiwJImdjYzotbXgzMiAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1teDMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6eDMyOiIsCiJsaW51eDY0LXMzOTB4IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7czM5MHhfYXNtfTo2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKIyMjIyBTbyBjYWxsZWQgImhpZ2hncHJzIiB0YXJnZXQgZm9yIHovQXJjaGl0ZWN0dXJlIENQVXMKIyAiSGlnaGdwcnMiIGlzIGtlcm5lbCBmZWF0dXJlIGZpcnN0IGltcGxlbWVudGVkIGluIExpbnV4IDIuNi4zMiwgc2VlCiMgL3Byb2MvY3B1aW5mby4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mCiMgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBub3Qgb25seSB1cG9uIDMyLWJpdCBwcm9jZXNzIGNvbnRleHQKIyBzd2l0Y2gsIGJ1dCBldmVuIG9uIGFzeW5jaHJvbm91cyBzaWduYWwgZGVsaXZlcnkgdG8gc3VjaCBwcm9jZXNzLgojIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZGVwbG95IDY0LWJpdCBpbnN0cnVjdGlvbnMgZXZlbiBpbiBsZWdhY3kKIyBhcHBsaWNhdGlvbiBjb250ZXh0IGFuZCBhY2hpZXZlIGJldHRlciBbb3Igc2hvdWxkIHdlIHNheSBhZGVxdWF0ZV0KIyBwZXJmb3JtYW5jZS4gVGhlIGJ1aWxkIGlzIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggbGludXgtZ2VuZXJpYzMyLAojIGFuZCB0aGUgaWRlYSBpcyB0byBiZSBhYmxlIHRvIGluc3RhbGwgdGhlIHJlc3VsdGluZyBsaWJjcnlwdG8uc28KIyBhbG9uZ3NpZGUgZ2VuZXJpYyBvbmUsIGUuZy4gYXMgL2xpYi9oaWdoZ3Bycy9saWJjcnlwdG8uc28ueC55LCBmb3IKIyBsZGNvbmZpZyBhbmQgcnVuLXRpbWUgbGlua2VyIHRvIGF1dG9kaXNjb3Zlci4gVW5mb3J0dW5hdGVseSBpdAojIGRvZXNuJ3Qgd29yayBqdXN0IHlldCwgYmVjYXVzZSBvZiBjb3VwbGUgb2YgYnVncyBpbiBnbGliYwojIHN5c2RlcHMvczM5MC9kbC1wcm9jaW5mby5jIGFmZmVjdGluZyBsZGNvbmZpZyBhbmQgbGQuc28uMS4uLgoibGludXgzMi1zMzkweCIsCSJnY2M6LW0zMSAtV2EsLW16YXJjaCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6Ii5ldmFse215ICRhc209JHMzOTB4X2FzbTskYXNtPX5zL2JuXC1zMzkweFwuby9ibl9hc20uby87JGFzbX0uIjozMTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMTouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9oaWdoZ3BycyIsCiMjIyMgU1BBUkMgTGludXggc2V0dXBzCiMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CiMgYXNzaXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgoibGludXgtc3BhcmN2OCIsImdjYzotbXY4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgaXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KImxpbnV4LXNwYXJjdjkiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1XYSwtQXY4cGx1cyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgR0NDIDMuMSBpcyBhIHJlcXVpcmVtZW50CiJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAojIyMjIEFscGhhIExpbnV4IHdpdGggR05VIEMgYW5kIENvbXBhcSBDIHNldHVwcwojIFNwZWNpYWwgbm90ZXM6CiMgLSBsaW51eC1hbHBoYStid3gtZ2NjIGlzIG1lbnQgdG8gYmUgdXNlZCBmcm9tIC4vY29uZmlnIG9ubHkuIElmIHlvdQojICAgb3VnaHQgdG8gcnVuICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYStid3gtZ2NjJyBtYW51YWxseSwgZG8KIyAgIGNvbXBsZW1lbnQgdGhlIGNvbW1hbmQgbGluZSB3aXRoIC1tY3B1PWV2NTYsIC1tY3B1PWV2NiBvciB3aGF0ZXZlcgojICAgd2hpY2ggaXMgYXBwcm9wcmlhdGUuCiMgLSBJZiB5b3UgdXNlIGNjYyBrZWVwIGluIG1pbmQgdGhhdCAtZmFzdCBpbXBsaWVzIC1hcmNoIGhvc3QgYW5kIHRoZQojICAgY29tcGlsZXIgaXMgZnJlZSB0byBpc3N1ZSBpbnN0cnVjdGlvbnMgd2hpY2ggZ29ubmEgbWFrZSBlbGRlciBDUFUKIyAgIGNob2tlLiBJZiB5b3Ugd2lzaCB0byBidWlsZCAiYmxlbmRlZCIgdG9vbGtpdCwgYWRkIC1hcmNoIGdlbmVyaWMKIyAgICphZnRlciogLWZhc3QgYW5kIGludm9rZSAnLi9Db25maWd1cmUgbGludXgtYWxwaGEtY2NjJyBtYW51YWxseS4KIwojCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiMKImxpbnV4LWFscGhhLWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYS1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCiJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAojCiMgVElfQ0dUX0M2MDAwXzcuMy54IGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4LWM2NHhwbHVzIiwiY2w2eDotLWxpbnV4IC1lYT0ucyAtZW89Lm8gLW12NjQwMCsgLW8yIC1veCAtbXMgLXBkZW4gLURPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVDo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkc6YzY0eHBsdXNjcHVpZC5vOmJuLWM2NHhwbHVzLm8gYzY0eHBsdXMtZ2YybS5vOjo6YWVzLWM2NHhwbHVzLm8gYWVzX2NiYy5vIGFlc19jdHIubzo6OnNoYTEtYzY0eHBsdXMubyBzaGEyNTYtYzY0eHBsdXMubyBzaGE1MTItYzY0eHBsdXMubzo6cmM0LWM2NHhwbHVzLm86Ojo6OmdoYXNoLWM2NHhwbHVzLm86OnZvaWQ6ZGxmY246bGludXgtc2hhcmVkOi0tcGljOi16IC0tc3lzdiAtLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTp0cnVlIiwKCiMgQW5kcm9pZDogbGludXgtKiBidXQgd2l0aG91dCAtRFRFUk1JTyBhbmQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KImFuZHJvaWQiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImFuZHJvaWQteDg2IiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306Ii5ldmFse215ICRhc209JHt4ODZfZWxmX2FzbX07JGFzbT1+cy86ZWxmLzphbmRyb2lkLzskYXNtfS4iOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiYW5kcm9pZC1hcm12NyIsImdjYzotbWFyY2g9YXJtdjctYSAtbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiYW5kcm9pZC1taXBzIiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgKkJTRCBbZG8gc2VlIGNvbW1lbnQgYWJvdXQgJHtCU0R0aHJlYWRzfSBhYm92ZSFdCiJCU0QtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4NiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1CU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsIC1nOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1zcGFyY3Y4IiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLW12OCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6JHtzcGFyY3Y4X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMiBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODZfNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKImJzZGktZWxmLWdjYyIsICAgICAiZ2NjOi1EUEVSTDUgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJuZXh0c3RlcCIsCSJjYzotTyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoibmV4dHN0ZXAzLjMiLAkiY2M6LU8zIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIE5DUiBNUC1SQVMgVU5JWCB2ZXIgMDIuMDMuMDEKIm5jci1zY2RlIiwiY2M6LU82IC1YYSAtSG9mZj1CRUhBVkVEIC02ODYgLUh3aWRlIC1IaXc6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2wgLWxjODk6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgUU5YCiJxbng0IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU86Oih1bmtub3duKTo6OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoiUU5YNiIsICAgICAgICJnY2M6LURURVJNSU9TOjo6Oi1sc29ja2V0Ojoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlFOWDYtaTM4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMiAtV2FsbDo6OjotbHNvY2tldDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgQmVPUwoiYmVvcy14ODYtcjUiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDpCRU9TOi1sYmUgLWxuZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmJlb3M6YmVvcy1zaGFyZWQ6LWZQSUMgLURQSUM6LXNoYXJlZDouc28iLAoiYmVvcy14ODYtYm9uZSIsICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDpCRU9TOi1sYmUgLWxiaW5kIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpiZW9zOmJlb3Mtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvIiwKCiMjIyMgU0NPL0NhbGRlcmEgdGFyZ2V0cy4KIwojIE9yaWdpbmFsbHkgd2UgaGFkIGxpa2UgdW5peHdhcmUtKiwgdW5peHdhcmUtKi1wZW50aXVtLCB1bml4d2FyZS0qLXA2LCBldGMuCiMgTm93IHdlIG9ubHkgaGF2ZSBibGVuZGVkIHVuaXh3YXJlLSogYXMgaXQncyB0aGUgb25seSBvbmUgdXNlZCBieSAuL2NvbmZpZy4KIyBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSwgYnlwYXNzIC4vY29uZmlnCiMgYW5kICcuL0NvbmZpZ3VyZSB1bml4d2FyZS03IC1LcGVudGl1bV9wcm8nIG9yIHdoYXRldmVyIGFwcHJvcHJpYXRlLgojIE5vdGUgdGhhdCBub3QgYWxsIHRhcmdldHMgaW5jbHVkZSBhc3NlbWJsZXIgc3VwcG9ydC4gTW9zdGx5IGJlY2F1c2Ugb2YKIyBsYWNrIG9mIG1vdGl2YXRpb24gdG8gc3VwcG9ydCBvdXQtb2YtZGF0ZSBwbGF0Zm9ybXMgd2l0aCBvdXQtb2YtZGF0ZQojIGNvbXBpbGVyIGRyaXZlcnMgYW5kIGFzc2VtYmxlcnMuIFRpbSBSaWNlIDx0aW1AbXVsdGl0YWxlbnRzLm5ldD4gaGFzCiMgcGF0aWVudGx5IGFzc2lzdGVkIHRvIGRlYnVnIG1vc3Qgb2YgaXQuCiMKIyBVbml4V2FyZSAyLjB4IGZhaWxzIGRlc3Rlc3Qgd2l0aCAtTy4KInVuaXh3YXJlLTIuMCIsImNjOi1ERklMSU9fSCAtRE5PX1NUUklOR1NfSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtMi4xIiwiY2M6LU8gLURGSUxJT19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS03IiwiY2M6LU8gLURGSUxJT19IIC1LYWxsb2NhOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYICR7eDg2X2djY19kZXN9OiR7eDg2X2VsZl9hc219LTE6ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInVuaXh3YXJlLTctZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURGSUxJT19IIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0tMTpkbGZjbjpnbnUtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgU0NPIDUgLSBCZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az4gc2F5cyB0aGUgLU8gYnJlYWtzIHRoZSBTQ08gY2MuCiJzY281LWNjIiwgICJjYzotYmVsZjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0tMTpkbGZjbjpzdnIzLXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic2NvNS1nY2MiLCAgImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219LTE6ZGxmY246c3ZyMy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSUJNJ3MgQUlYLgoiYWl4My1jYyIsICAiY2M6LU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OjoiLAoiYWl4LWdjYyIsICAiZ2NjOi1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6JHBwYzMyX2FzbTphaXgzMjpkbGZjbjphaXgtc2hhcmVkOjotc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVgzMiIsCiJhaXg2NC1nY2MiLCJnY2M6LW1haXg2NCAtTyAtREJfRU5ESUFOOjotcHRocmVhZDpBSVg6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVI6JHBwYzY0X2FzbTphaXg2NDpkbGZjbjphaXgtc2hhcmVkOjotbWFpeDY0IC1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDY0IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NCAtcXJvIC1xcm9jb25zdDo6LXF0aHJlYWRlZCAtRF9USFJFQURfU0FGRTpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOiRwcGMzMl9hc206YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXEzMiAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0IC1xcm8gLXFyb2NvbnN0OjotcXRocmVhZGVkIC1EX1RIUkVBRF9TQUZFOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjokcHBjNjRfYXNtOmFpeDY0OmRsZmNuOmFpeC1zaGFyZWQ6Oi1xNjQgLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YIDY0IiwKCiMKIyBDcmF5IFQ5MCBhbmQgc2ltaWxhciAoU0RTQykKIyBJdCdzIEJpZy1lbmRpYW4sIGJ1dCB0aGUgYWxnb3JpdGhtcyB3b3JrIHByb3Blcmx5IHdoZW4gQl9FTkRJQU4gaXMgTk9UCiMgZGVmaW5lZC4gIFRoZSBUOTAgaW50cyBhbmQgbG9uZ3MgYXJlIDggYnl0ZXMgbG9uZywgYW5kIGFwcGFyZW50bHkgdGhlCiMgQl9FTkRJQU4gY29kZSBhc3N1bWVzIDQgYnl0ZSBpbnRzLiAgRm9ydHVuYXRlbHksIHRoZSBub24tQl9FTkRJQU4gYW5kCiMgbm9uIExfRU5ESUFOIGNvZGUgYWxpZ25zIHRoZSBieXRlcyBpbiBlYWNoIHdvcmQgY29ycmVjdGx5LgojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIGlzIHRvIGF2b2lkIHR3byBmYXRhbCBjb21waWxlciBlcnJvcnM6CiMnVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgYml0IGZpZWxkIGlzIG5vdCBhbGxvd2VkLiAnCiMnQW4gZXhwcmVzc2lvbiB3aXRoIGJpdCBmaWVsZCBleGlzdHMgYXMgdGhlIG9wZXJhbmQgb2YgInNpemVvZiIgJwojICh3cml0dGVuIGJ5IFdheW5lIFNjaHJvZWRlciA8c2Nocm9lZGVAU0RTQy5FRFU+KQojCiMgajkwIGlzIGNvbnNpZGVyZWQgdGhlIGJhc2UgbWFjaGluZSB0eXBlIGZvciB1bmljb3MgbWFjaGluZXMsCiMgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIG5vdyBjYWxsZWQgImNyYXktajkwIiAuLi4KImNyYXktajkwIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UOjo6IiwKCiMKIyBDcmF5IFQzRSAoUmVzZWFyY2ggQ2VudGVyIEp1ZWxpY2gsIGJlY2ttYW5AYWNsLmxhbmwuZ292KQojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIHdhcyB3cml0dGVuIGZvciB0aGUgQzkwIChpdCBzZWVtcykuICBJIGFkZGVkCiMgYW5vdGhlciB1c2UuICBCYXNpY2FsbHksIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIFQzRSB1c2VzIHNvbWUgYml0IGZpZWxkcwojIGZvciBzb21lIHN0X2FkZHIgc3R1ZmYsIGFuZCB0aGVuIHNpemVvZiBhbmQgYWRkcmVzcy1vZiBmYWlscwojIEkgY291bGQgbm90IHVzZSB0aGUgYW1zL2FscGhhLm8gb3B0aW9uIGJlY2F1c2UgdGhlIENyYXkgYXNzZW1ibGVyLCAnY2FtJwojIGRpZCBub3QgbGlrZSBpdC4KImNyYXktdDNlIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDo6OiIsCgojIERHVVgsIDg4MTAwLgoiZGd1eC1SMy1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LXg4Ni1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCgojIFNpbml4L1JlbGlhbnRVTklYIFJNNDAwCiMgTk9URTogVGhlIENEUysrIENvbXBpbGVyIHVwIHRvIFYyLjBCc29tZXRoaW5nIGhhcyB0aGUgSVJJWF9DQ19CVUcgb3B0aW1pemVyIHByb2JsZW0uIEJldHRlciB1c2UgLWcgICovCiJSZWxpYW50VU5JWCIsImNjOi1LUElDIC1nIC1EVEVSTUlPUyAtREJfRU5ESUFOOjotS3RocmVhZDpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6Qk5fTExPTkcgREVTX1BUUiBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnJlbGlhbnR1bml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlNJTklYIiwiY2M6LU86Oih1bmtub3duKTpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKIlNJTklYLU4iLCIvdXNyL3VjYi9jYzotTzIgLW1pc2FsaWduZWQ6Oih1bmtub3duKTo6LWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKCiMgU0lFTUVOUyBCUzIwMDAvT1NEOiBhbiBFQkNESUMtYmFzZWQgbWFpbmZyYW1lCiJCUzIwMDAtT1NEIiwiYzg5Oi1PIC1YTExNTCAtWExMTUsgLVhMIC1EQl9FTkRJQU4gLURURVJNSU9TIC1EQ0hBUlNFVF9FQkNESUM6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBPUy8zOTAgVW5peCBhbiBFQkNESUMtYmFzZWQgVW5peCBzeXN0ZW0gb24gSUJNIG1haW5mcmFtZQojIFlvdSBuZWVkIHRvIGNvbXBpbGUgdXNpbmcgdGhlIGM4OS5zaCB3cmFwcGVyIGluIHRoZSB0b29scyBkaXJlY3RvcnksIGJlY2F1c2UgdGhlCiMgSUJNIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIC1MIHN3aXRjaCBhZnRlciBhbnkgb2JqZWN0IG1vZHVsZXMuCiMKIk9TMzkwLVVuaXgiLCJjODkuc2g6LU8gLURCX0VORElBTiAtRENIQVJTRVRfRUJDRElDIC1ETk9fU1lTX1BBUkFNX0ggIC1EX0FMTF9TT1VSQ0U6Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgVmlzdWFsIEMgdGFyZ2V0cwojCiMgV2luNjQgdGFyZ2V0cywgV0lONjRJIGRlbm90ZXMgSUEtNjQgYW5kIFdJTjY0QSAtIEFNRDY0CiJWQy1XSU42NEkiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjppYTY0Y3B1aWQubzppYTY0Lm8gaWE2NC1tb250Lm86OjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86Omlhczp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3g4Nl82NC1nY2NcLm8vYm5fYXNtLm8vOyRhc219LiI6YXV0bzp3aW4zMiIsCiJkZWJ1Zy1WQy1XSU42NEkiLCJjbDotVzMgLUdzMCAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vOjo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86Ojo6Ojo6Z2hhc2gtaWE2NC5vOjppYXM6d2luMzIiLAoiZGVidWctVkMtV0lONjRBIiwiY2w6LVczIC1HczAgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRBOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMveDg2XzY0LWdjY1wuby9ibl9hc20uby87JGFzbX0uIjphdXRvOndpbjMyIiwKIyB4ODYgV2luMzIgdGFyZ2V0IGRlZmF1bHRzIHRvIEFOU0kgQVBJLCBpZiB5b3Ugd2FudCBVTklDT0RFLCBjb21wbGVtZW50CiMgJ3BlcmwgQ29uZmlndXJlIFZDLVdJTjMyJyB3aXRoICctRFVOSUNPREUgLURfVU5JQ09ERScKIlZDLVdJTjMyIiwiY2w6LVczIC1HczAgLUdGIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OndpbjMybjp3aW4zMiIsCiMgVW5pZmllZCBDRSB0YXJnZXQKImRlYnVnLVZDLVdJTjMyIiwiY2w6LVczIC1HczAgLUdGIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTp3aW4zMm46d2luMzIiLAoiVkMtQ0UiLCJjbDo6OjpXSU5DRTo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEJvcmxhbmQgQysrIDQuNQoiQkMtMzIiLCJiY2MzMjo6OjpXSU4zMjo6Qk5fTExPTkcgREVTX1BUUiBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTjoke25vX2FzbX06d2luMzIiLAoKIyBNaW5HVwoibWluZ3ciLCAiZ2NjOi1tbm8tY3lnd2luIC1ETF9FTkRJQU4gLURXSU4zMl9MRUFOX0FORF9NRUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfTVQ6TUlOR1czMjotbHdzMl8zMiAtbGdkaTMyIC1sY3J5cHQzMjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c30gRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl9hc219OmNvZmY6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEwgLURPUEVOU1NMX1VTRV9BUFBMSU5LOi1tbm8tY3lnd2luOi5kbGwuYSIsCiMgQXMgZm9yIE9QRU5TU0xfVVNFX0FQUExJTksuIEFwcGxpbmsgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIC5kbGwKIyBjb21waWxlZCB3aXRoIG9uZSBjb21waWxlciB3aXRoIGFwcGxpY2F0aW9uIGNvbXBpbGVkIHdpdGggYW5vdGhlcgojIGNvbXBpbGVyLiBJdCdzIHBvc3NpYmxlIHRvIGVuZ2FnZSBBcHBsaW5rIHN1cHBvcnQgaW4gbWluZ3c2NCBidWlsZCwKIyBidXQgaXQncyBub3QgZG9uZSwgYmVjYXVzZSB0aWxsIG1pbmd3NjQgc3VwcG9ydHMgc3RydWN0dXJlZCBleGNlcHRpb24KIyBoYW5kbGluZywgb25lIGNhbid0IHNlcmlvdXNseSBjb25zaWRlciBpdHMgYmluYXJpZXMgZm9yIHVzaW5nIHdpdGgKIyBub24tbWluZ3c2NCBydW4tdGltZSBlbnZpcm9ubWVudC4gQW5kIGFzIG1pbmd3NjQgaXMgYWx3YXlzIGNvbnNpc3RlbnQKIyB3aXRoIGl0c2VsZiwgQXBwbGluayBpcyBuZXZlciBlbmdhZ2VkIGFuZCBjYW4gYXMgd2VsbCBiZSBvbWl0dGVkLgoibWluZ3c2NCIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtTzMgLVdhbGwgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFOjotRF9NVDpNSU5HVzY0Oi1sd3MyXzMyIC1sZ2RpMzIgLWxjcnlwdDMyOlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfNjRfYXNtfTptaW5ndzY0OndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1tbm8tY3lnd2luOi5kbGwuYSIsCgojIFVXSU4KIlVXSU4iLCAiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLU8gLVdhbGw6OjpVV0lOOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQ3lnd2luCiJDeWd3aW4tcHJlMS4zIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW00ODYgLVdhbGw6Oih1bmtub3duKTpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTpjb2ZmOmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKIkN5Z3dpbi14ODZfNjQiLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1PMyAtV2FsbDo6OkNZR1dJTjMyOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTptaW5ndzY0OmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKImRlYnVnLUN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoKIyBOZXRXYXJlIGZyb20gRGF2aWQgV2FyZCAoZHN3YXJkQG5vdmVsbC5jb20pCiMgcmVxdWlyZXMgZWl0aGVyIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzLCBvciBnY2MgLyBubG1jb252CiMgTmV0V2FyZSBkZWZhdWx0cyBzb2NrZXQgYmlvIHRvIFdpblNvY2sgc29ja2V0cy4gSG93ZXZlciwKIyB0aGUgYnVpbGRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLUkvbmRrL3dzMjk1c2RrL2luY2x1ZGUgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtRE5FVFdBUkVfQlNEU09DSyAtRE5FVERCX1VTRV9JTlRFUk5FVCAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtSS9uZGsvbGliYy9pbmNsdWRlL3dpbnNvY2sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLURORVRXQVJFX0JTRFNPQ0sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzIgLVdhbGw6OjpNU0RPUzotTC9kZXYvZW52L1dBVFRfUk9PVC9saWIgLWx3YXR0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkc6Ojo6IiwKIyBLJlIgQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkOyB5b3UgbmVlZCBnY2Mgb24gb2xkIFVsdHJpeCBpbnN0YWxsYXRpb25zCiMjInVsdHJpeCIsImNjOi1PMiAtRE5PUFJPVE8gLUROT0NPTlNUIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoKIyMjIyMgTWFjT1MgWCAoYS5rLmEuIERhcndpbikgc2V0dXAKImRhcndpbi1wcGMtY2MiLCJjYzotYXJjaCBwcGMgLU8zIC1EQl9FTkRJQU4gLVdhLC1mb3JjZV9jcHVzdWJ0eXBlX0FMTDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYyAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW42NC1wcGMtY2MiLCJjYzotYXJjaCBwcGM2NCAtTzMgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGM2NF9hc219Om9zeDY0OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luLWkzODYtY2MiLCJjYzotYXJjaCBpMzg2IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfSU5UIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoiLmV2YWx7bXkgJGFzbT0keDg2X2FzbTskYXNtPX5zL2Nhc3RcLTU4Nlwuby8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW42NC14ODZfNjQtY2MiLCJjYzotYXJjaCB4ODZfNjQgLWdnZGIgLWcyIC1PMCAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1PMyAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGVidWctZGFyd2luLXBwYy1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtREJfRU5ESUFOIC1nIC1XYWxsIC1POjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUM6LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAojIGlQaG9uZU9TL2lPUwojCiMgSXQgdGFrZXMgdGhyZWUgcHJpb3Itc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBtYWtlIGl0IHdvcms6CiMKIyBDUk9TU19DT01QSUxFPS93aGVyZS90b29sY2hhaW4vaXMvdXNyL2Jpbi8gW25vdGUgZW5kaW5nIHNsYXNoXQojIENST1NTX1RPUD0vd2hlcmUvU0RLcy9hcmUKIyBDUk9TU19TREs9aVBob25lT1N4Lnkuc2RrCiMKIyBFeGFjdCBwYXRocyB2YXJ5IHdpdGggWGNvZGUgcmVsZWFzZXMsIGJ1dCBmb3IgY291cGxlIG9mIGxhc3Qgb25lcwojIHRoZXkgd291bGQgbG9vayBsaWtlIHRoaXM6CiMKIyBDUk9TU19DT01QSUxFPWB4Y29kZS1zZWxlY3QgLS1wcmludC1wYXRoYC9Ub29sY2hhaW5zL1hjb2RlRGVmYXVsdC54Y3Rvb2xjaGFpbi91c3IvYmluLwojIENST1NTX1RPUD1geGNvZGUtc2VsZWN0IC0tcHJpbnQtcGF0aGAvUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtL0RldmVsb3BlcgojIENST1NTX1NESz1pUGhvbmVPUzcuMC5zZGsKIwoiaXBob25lb3MtY3Jvc3MiLCJjYzotTzMgLWlzeXNyb290IFwkKENST1NTX1RPUCkvU0RLcy9cJChDUk9TU19TREspIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tY29tbW9uOjotRF9SRUVOVFJBTlQ6aU9TOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiaW9zNjQtY3Jvc3MiLCJjYzotTzMgLWFyY2ggYXJtNjQgLW1pb3MtdmVyc2lvbi1taW49Ny4wLjAgLWlzeXNyb290IFwkKENST1NTX1RPUCkvU0RLcy9cJChDUk9TU19TREspIC1mbm8tY29tbW9uOjotRF9SRUVOVFJBTlQ6aU9TOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIC1SQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIC1CRl9QVFI6JHtub19hc219OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoKIyMjIyMgQS9VWAoiYXV4My1nY2MiLCJnY2M6LU8yIC1EVEVSTUlPOjoodW5rbm93bik6QVVYOi1sYnNkOlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6OiIsCgojIyMjIyBTb255IE5FV1MtT1MgNC54CiJuZXdzb3M0LWdjYyIsImdjYzotTyAtREJfRU5ESUFOOjoodW5rbm93bik6TkVXUzQ6LWxtbGQgLWxpYmVydHk6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjo6OiIsCgojIyMjIyBHTlUgSHVyZAoiaHVyZC14ODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDIiwKCiMjIyMjIE9TLzIgRU1YCiJPUzItRU1YIiwgImdjYzo6Ojo6Ojo6IiwKCiMjIyMjIFZ4V29ya3MgZm9yIHZhcmlvdXMgdGFyZ2V0cwoidnh3b3Jrcy1wcGM2MHgiLCJjY3BwYzotRF9SRUVOVFJBTlQgLW1ydHAgLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1mbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweCAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1EQ1BVPVBQQzMyIC1EVE9PTF9GQU1JTFk9Z251IC1EVE9PTD1nbnUgLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oL3dybi9jb3JlaXA6OjpWWFdPUktTOi1XbCwtLWRlZnN5bSxfX3dyc19ydHBfYmFzZT0weGUwMDAwMDAwIC1MIFwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9saWIvcHBjL1BQQzMyL2NvbW1vbjo6Ojo6IiwKInZ4d29ya3MtcHBjZ2VuIiwiY2NwcGM6LURfUkVFTlRSQU5UIC1tcnRwIC1tc29mdC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtTzEgLWZuby1idWlsdGluIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XYWxsIC1EQ1BVPVBQQzMyIC1EVE9PTF9GQU1JTFk9Z251IC1EVE9PTD1nbnUgLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oL3dybi9jb3JlaXA6OjpWWFdPUktTOi1XbCwtLWRlZnN5bSxfX3dyc19ydHBfYmFzZT0weGUwMDAwMDAwIC1MIFwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9saWIvcHBjL1BQQzMyL3NmY29tbW9uOjo6OjoiLAoidnh3b3Jrcy1wcGM0MDUiLCJjY3BwYzotZyAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM0MDUgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjNzUwIiwiY2NwcGM6LWFuc2kgLW5vc3RkaW5jIC1EUFBDNzUwIC1EX1JFRU5UUkFOVCAtZnZvbGF0aWxlIC1mbm8tYnVpbHRpbiAtZm5vLWZvci1zY29wZSAtZnNpZ25lZC1jaGFyIC1XYWxsIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggXCQoREVCVUdfRkxBRyk6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAtZGVidWciLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRERFQlVHIC1nOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjODYwIiwiY2NwcGM6LW5vc3RkaW5jIC1tc29mdC1mbG9hdCAtRENQVT1QUEM4NjAgLUROT19TVFJJTkdTX0ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3Mtc2ltbGludXgiLCJjY3BlbnRpdW06LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRF9WU0JfQ09ORklHX0ZJTEU9XCJcJChXSU5EX0JBU0UpL3RhcmdldC9saWIvaC9jb25maWcvdnNiQ29uZmlnLmhcIiAtRExfRU5ESUFOIC1EQ1BVPVNJTUxJTlVYIC1EVE9PTF9GQU1JTFk9Z251IC1EVE9PTD1nbnUgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCAtRE9QRU5TU0xfTk9fSFdfUEFETE9DSzo6OlZYV09SS1M6LXI6OiR7bm9fYXNtfTo6Ojo6OnJhbmxpYnBlbnRpdW06IiwKInZ4d29ya3MtbWlwcyIsImNjbWlwczotbXJ0cCAtbWlwczIgLU8gLUcgMCAtQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1EX1ZTQl9DT05GSUdfRklMRT1cIlwkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9oL2NvbmZpZy92c2JDb25maWcuaFwiIC1EQ1BVPU1JUFMzMiAtbXNvZnQtZmxvYXQgLW1uby1icmFuY2gtbGlrZWx5IC1EVE9PTF9GQU1JTFk9Z251IC1EVE9PTD1nbnUgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXA6Oi1EX1JFRU5UUkFOVDpWWFdPUktTOi1XbCwtLWRlZnN5bSxfX3dyc19ydHBfYmFzZT0weGUwMDAwMDAwIC1MIFwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9saWIvbWlwcy9NSVBTSTMyL3NmY29tbW9uOjoke21pcHMzMl9hc219Om8zMjo6Ojo6OnJhbmxpYm1pcHM6IiwKCiMjIyMjIENvbXBhcSBOb24tU3RvcCBLZXJuZWwgKFRhbmRlbSkKInRhbmRlbS1jODkiLCJjODk6LVd3IC1EX19UQU5ERU0gLURfWE9QRU5fU09VUkNFIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0xIC1EX1RBTkRFTV9TT1VSQ0UgLURCX0VORElBTjo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQ6OjoiLAoKIyB1Q2xpbnV4CiJ1Q2xpbnV4LWRpc3QiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpCTl9MTE9ORzoke25vX2FzbX06JEVOVnsnTElCU1NMX2RsZmNuJ306bGludXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6JEVOVnsnUkFOTElCJ306OiIsCiJ1Q2xpbnV4LWRpc3Q2NCIsIiRFTlZ7J0NDJ306XCQoQ0ZMQUdTKTo6LURfUkVFTlRSQU5UOjpcJChMREZMQUdTKSBcJChMRExJQlMpOlNJWFRZX0ZPVVJfQklUX0xPTkc6JHtub19hc219OiRFTlZ7J0xJQlNTTF9kbGZjbid9OmxpbnV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOiRFTlZ7J1JBTkxJQid9OjoiLAoKKTsKCm15IEBNSzFNRl9CdWlsZHM9cXcoVkMtV0lONjRJIFZDLVdJTjY0QQoJCSAgICBkZWJ1Zy1WQy1XSU42NEkgZGVidWctVkMtV0lONjRBCgkJICAgIFZDLU5UIFZDLUNFIFZDLVdJTjMyIGRlYnVnLVZDLVdJTjMyCgkJICAgIEJDLTMyCgkJICAgIG5ldHdhcmUtY2xpYiBuZXR3YXJlLWNsaWItYnNkc29jawoJCSAgICBuZXR3YXJlLWxpYmMgbmV0d2FyZS1saWJjLWJzZHNvY2spOwoKbXkgJGlkeCA9IDA7Cm15ICRpZHhfY2MgPSAkaWR4Kys7Cm15ICRpZHhfY2ZsYWdzID0gJGlkeCsrOwpteSAkaWR4X3VuaXN0ZCA9ICRpZHgrKzsKbXkgJGlkeF90aHJlYWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc3lzX2lkID0gJGlkeCsrOwpteSAkaWR4X2xmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vcHMgPSAkaWR4Kys7Cm15ICRpZHhfY3B1aWRfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JuX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9lY19vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3dwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jbWxsX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tb2Rlc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfZW5naW5lc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfcGVybGFzbV9zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfZHNvX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfdGFyZ2V0ID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfbGRmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9leHRlbnNpb24gPSAkaWR4Kys7Cm15ICRpZHhfcmFubGliID0gJGlkeCsrOwpteSAkaWR4X2FyZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfbXVsdGlsaWIgPSAkaWR4Kys7CgpteSAkcHJlZml4PSIiOwpteSAkbGliZGlyPSIiOwpteSAkb3BlbnNzbGRpcj0iIjsKbXkgJGV4ZV9leHQ9IiI7Cm15ICRpbnN0YWxsX3ByZWZpeD0gIiRFTlZ7J0lOU1RBTExfUFJFRklYJ30iOwpteSAkY3Jvc3NfY29tcGlsZV9wcmVmaXg9IiI7Cm15ICRmaXBzbGliZGlyPSIvdXNyL2xvY2FsL3NzbC9maXBzLTIuMC9saWIvIjsKbXkgJG5vZmlwc2NhbmlzdGVyY2hlY2s9MDsKbXkgJGZpcHNjYW5pc3RlcmludGVybmFsPSJuIjsKbXkgJGZpcHNjYW5pc3Rlcm9ubHkgPSAwOwpteSAkYmFzZWFkZHI9IjB4RkIwMDAwMCI7Cm15ICRub190aHJlYWRzPTA7Cm15ICR0aHJlYWRzPTA7Cm15ICRub19zaGFyZWQ9MDsgIyBidXQgIm5vLXNoYXJlZCIgaXMgZGVmYXVsdApteSAkemxpYj0xOyAgICAgICMgYnV0ICJuby16bGliIiBpcyBkZWZhdWx0Cm15ICRub19rcmI1PTA7ICAgIyBidXQgIm5vLWtyYjUiIGlzIGltcGxpZWQgdW5sZXNzICItLXdpdGgta3JiNS0uLi4iIGlzIHVzZWQKbXkgJG5vX3JmYzM3Nzk9MTsgIyBidXQgIm5vLXJmYzM3NzkiIGlzIGRlZmF1bHQKbXkgJG5vX2FzbT0wOwpteSAkbm9fZHNvPTA7Cm15ICRub19nbXA9MDsKbXkgQHNraXA9KCk7Cm15ICRNYWtlZmlsZT0iTWFrZWZpbGUiOwpteSAkZGVzX2xvY2w9ImNyeXB0by9kZXMvZGVzX2xvY2wuaCI7Cm15ICRkZXMJPSJjcnlwdG8vZGVzL2Rlcy5oIjsKbXkgJGJuCT0iY3J5cHRvL2JuL2JuLmgiOwpteSAkbWQyCT0iY3J5cHRvL21kMi9tZDIuaCI7Cm15ICRyYzQJPSJjcnlwdG8vcmM0L3JjNC5oIjsKbXkgJHJjNF9sb2NsPSJjcnlwdG8vcmM0L3JjNF9sb2NsLmgiOwpteSAkaWRlYQk9ImNyeXB0by9pZGVhL2lkZWEuaCI7Cm15ICRyYzIJPSJjcnlwdG8vcmMyL3JjMi5oIjsKbXkgJGJmCT0iY3J5cHRvL2JmL2JmX2xvY2wuaCI7Cm15ICRibl9hc20JPSJibl9hc20ubyI7Cm15ICRkZXNfZW5jPSJkZXNfZW5jLm8gZmNyeXB0X2IubyI7Cm15ICRhZXNfZW5jPSJhZXNfY29yZS5vIGFlc19jYmMubyI7Cm15ICRiZl9lbmMJPSJiZl9lbmMubyI7Cm15ICRjYXN0X2VuYz0iY19lbmMubyI7Cm15ICRyYzRfZW5jPSJyYzRfZW5jLm8gcmM0X3NrZXkubyI7Cm15ICRyYzVfZW5jPSJyYzVfZW5jLm8iOwpteSAkbWQ1X29iaj0iIjsKbXkgJHNoYTFfb2JqPSIiOwpteSAkcm1kMTYwX29iaj0iIjsKbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbGxfY2JjLm8iOwpteSAkcHJvY2Vzc29yPSIiOwpteSAkZGVmYXVsdF9yYW5saWI7Cm15ICRwZXJsOwpteSAkZmlwcz0wOwoKIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKCm15ICVkaXNhYmxlZCA9ICggIyAid2hhdCIgICAgICAgICA9PiAiY29tbWVudCIgW29yIHNwZWNpYWwga2V5d29yZCAiZXhwZXJpbWVudGFsIl0KCQkgImVjX25pc3RwXzY0X2djY18xMjgiID0+ICJkZWZhdWx0IiwKCQkgImdtcCIJCSAgPT4gImRlZmF1bHQiLAoJCSAianBha2UiICAgICAgICAgID0+ICJleHBlcmltZW50YWwiLAoJCSAibWQyIiAgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInJjNSIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJyZmMzNzc5IgkgID0+ICJkZWZhdWx0IiwKCQkgInNjdHAiICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInNoYXJlZCIgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJzc2wtdHJhY2UiCSAgPT4gImRlZmF1bHQiLAoJCSAic3RvcmUiCSAgPT4gImV4cGVyaW1lbnRhbCIsCgkJICJ1bml0LXRlc3QiCSAgPT4gImRlZmF1bHQiLAoJCSAiemxpYiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInpsaWItZHluYW1pYyIgICA9PiAiZGVmYXVsdCIKCSAgICAgICApOwpteSBAZXhwZXJpbWVudGFsID0gKCk7CgojIElmIHNzbCBkaXJlY3RvcnkgbWlzc2luZyBhc3N1bWUgdHJ1bmNhdGVkIEZJUFMgdGFyYmFsbAppZiAoIS1kICJzc2wiKQoJewoJcHJpbnQgU1RERVJSICJBdXRvIENvbmZpZ3VyaW5nIGZpcHNvbmx5XG4iOwoJJGZpcHMgPSAxOwoJJG5vZmlwc2NhbmlzdGVyY2hlY2sgPSAxOwoJJGZpcHNsaWJkaXI9IiI7CgkkZmlwc2NhbmlzdGVyaW50ZXJuYWw9InkiOwoJJGZpcHNjYW5pc3Rlcm9ubHkgPSAyOwoJaWYgKCEgLWYgImNyeXB0by9ibi9ibl9nZjJtLmMiICkKCQl7CgkJJGRpc2FibGVke2VjMm19ID0gImZvcmNlZCI7CgkJfQoJfQoKIyBUaGlzIGlzIHdoYXQgJGRlcGZsYWdzIHdpbGwgbG9vayBsaWtlIHdpdGggdGhlIGFib3ZlIGRlZmF1bHRzCiMgKHdlIG5lZWQgdGhpcyB0byBzZWUgaWYgd2Ugc2hvdWxkIGFkdmlzZSB0aGUgdXNlciB0byBydW4gIm1ha2UgZGVwZW5kIik6Cm15ICRkZWZhdWx0X2RlcGZsYWdzID0gIiAtRE9QRU5TU0xfTk9fRUNfTklTVFBfNjRfR0NDXzEyOCAtRE9QRU5TU0xfTk9fR01QIC1ET1BFTlNTTF9OT19KUEFLRSAtRE9QRU5TU0xfTk9fTUQyIC1ET1BFTlNTTF9OT19SQzUgLURPUEVOU1NMX05PX1JGQzM3NzkgLURPUEVOU1NMX05PX1NDVFAgLURPUEVOU1NMX05PX1NTTF9UUkFDRSAtRE9QRU5TU0xfTk9fU1RPUkUgLURPUEVOU1NMX05PX1VOSVRfVEVTVCI7CgojIEV4cGxpY2l0ICJuby0uLi4iIG9wdGlvbnMgd2lsbCBiZSBjb2xsZWN0ZWQgaW4gJWRpc2FibGVkIGFsb25nIHdpdGggdGhlIGRlZmF1bHRzLgojIFRvIHJlbW92ZSBzb21ldGhpbmcgZnJvbSAlZGlzYWJsZWQsIHVzZSAiZW5hYmxlLWZvbyIgKHVubGVzcyBpdCdzIGV4cGVyaW1lbnRhbCkuCiMgRm9yIHN5bW1ldHJ5LCAiZGlzYWJsZS1mb28iIGlzIGEgc3lub255bSBmb3IgIm5vLWZvbyIuCgojIEZvciBmZWF0dXJlcyBjYWxsZWQgImV4cGVyaW1lbnRhbCIgaGVyZSwgYSBtb3JlIGV4cGxpY2l0ICJleHBlcmltZW50YWwtZm9vIiBpcyBuZWVkZWQgdG8gZW5hYmxlLgojIFdlIHdpbGwgY29sbGVjdCBzdWNoIHJlcXVlc3RzIGluIEBleHBlcmltZW50YWwuCiMgVG8gYXZvaWQgYWNjaWRlbnRhbCB1c2Ugb2YgZXhwZXJpbWVudGFsIGZlYXR1cmVzLCBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHVzZSAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMX0ZPTy4KCgpteSAkbm9fc3NlMj0wOwoKJnVzYWdlIGlmICgkI0FSR1YgPCAwKTsKCm15ICRmbGFnczsKbXkgJGRlcGZsYWdzOwpteSAkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lczsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7Cm15ICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpteSAkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKbXkgJG9wZW5zc2xfb3RoZXJfZGVmaW5lczsKbXkgJGxpYnM7Cm15ICRsaWJrcmI1PSIiOwpteSAkdGFyZ2V0OwpteSAkb3B0aW9uczsKbXkgJHN5bWxpbms7Cm15ICRtYWtlX2RlcGVuZD0wOwpteSAld2l0aGFyZ3M9KCk7CgpteSBAYXJndmNvcHk9QEFSR1Y7Cm15ICRhcmd2c3RyaW5nPSIiOwpteSAkYXJndl91bnByb2Nlc3NlZD0xOwoKd2hpbGUoJGFyZ3ZfdW5wcm9jZXNzZWQpCgl7CgkkZmxhZ3M9IiI7CgkkZGVwZmxhZ3M9IiI7Cgkkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX290aGVyX2RlZmluZXM9IiI7CgkkbGlicz0iIjsKCSR0YXJnZXQ9IiI7Cgkkb3B0aW9ucz0iIjsKCSRzeW1saW5rPTE7CgoJJGFyZ3ZfdW5wcm9jZXNzZWQ9MDsKCSRhcmd2c3RyaW5nPWpvaW4oJyAnLEBhcmd2Y29weSk7CgpQUk9DRVNTX0FSR1M6Cglmb3JlYWNoIChAYXJndmNvcHkpCgkJewoJCXMgL14tbm8tL25vLS87ICMgc29tZSBwZW9wbGUganVzdCBjYW4ndCByZWFkIHRoZSBpbnN0cnVjdGlvbnMKCgkJIyByZXdyaXRlIHNvbWUgb3B0aW9ucyBpbiAiZW5hYmxlLS4uLiIgZm9ybQoJCXMgL14tPy0/c2hhcmVkJC9lbmFibGUtc2hhcmVkLzsKCQlzIC9ec2N0cCQvZW5hYmxlLXNjdHAvOwoJCXMgL150aHJlYWRzJC9lbmFibGUtdGhyZWFkcy87CgkJcyAvXnpsaWIkL2VuYWJsZS16bGliLzsKCQlzIC9eemxpYi1keW5hbWljJC9lbmFibGUtemxpYi1keW5hbWljLzsKCgkJaWYgKC9ebm8tKC4rKSQvIHx8IC9eZGlzYWJsZS0oLispJC8pCgkJCXsKCQkJaWYgKCEoJGRpc2FibGVkeyQxfSBlcSAiZXhwZXJpbWVudGFsIikpCgkJCQl7CgkJCQlpZiAoJDEgZXEgInNzbCIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsic3NsMiJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQkkZGlzYWJsZWR7InNzbDMifSA9ICJvcHRpb24oc3NsKSI7CgkJCQkJfQoJCQkJZWxzaWYgKCQxIGVxICJ0bHMiKQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7InRsczEifSA9ICJvcHRpb24odGxzKSIKCQkJCQl9CgkJCQllbHNpZiAoJDEgZXEgInNzbDMtbWV0aG9kIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJzc2wzLW1ldGhvZCJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQkkZGlzYWJsZWR7InNzbDMifSA9ICJvcHRpb24oc3NsKSI7CgkJCQkJfQoJCQkJZWxzZQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7JDF9ID0gIm9wdGlvbiI7CgkJCQkJfQoJCQkJfQoJCQl9CgkJZWxzaWYgKC9eZW5hYmxlLSguKykkLyB8fCAvXmV4cGVyaW1lbnRhbC0oLispJC8pCgkJCXsKCQkJbXkgJGFsZ28gPSAkMTsKCQkJaWYgKCRkaXNhYmxlZHskYWxnb30gZXEgImV4cGVyaW1lbnRhbCIpCgkJCQl7CgkJCQlkaWUgIllvdSBhcmUgcmVxdWVzdGluZyBhbiBleHBlcmltZW50YWwgZmVhdHVyZTsgcGxlYXNlIHNheSAnZXhwZXJpbWVudGFsLSRhbGdvJyBpZiB5b3UgYXJlIHN1cmVcbiIKCQkJCQl1bmxlc3MgKC9eZXhwZXJpbWVudGFsLS8pOwoJCQkJcHVzaCBAZXhwZXJpbWVudGFsLCAkYWxnbzsKCQkJCX0KCQkJZGVsZXRlICRkaXNhYmxlZHskYWxnb307CgoJCQkkdGhyZWFkcyA9IDEgaWYgKCRhbGdvIGVxICJ0aHJlYWRzIik7CgkJCX0KCQllbHNpZiAoL14tLXRlc3Qtc2FuaXR5JC8pCgkJCXsKCQkJZXhpdCgmdGVzdF9zYW5pdHkoKSk7CgkJCX0KCQllbHNpZiAoL14tLXN0cmljdC13YXJuaW5ncy8pCgkJCXsKCQkJJHN0cmljdF93YXJuaW5ncyA9IDE7CgkJCX0KCQllbHNpZiAoL15yZWNvbmZpZ3VyZS8gfHwgL15yZWNvbmYvKQoJCQl7CgkJCWlmIChvcGVuKElOLCI8JE1ha2VmaWxlIikpCgkJCQl7CgkJCQl3aGlsZSAoPElOPikKCQkJCQl7CgkJCQkJY2hvbXA7CgkJCQkJaWYgKC9eQ09ORklHVVJFX0FSR1M9KC4qKS8pCgkJCQkJCXsKCQkJCQkJJGFyZ3ZzdHJpbmc9JDE7CgkJCQkJCUBhcmd2Y29weT1zcGxpdCgnICcsJGFyZ3ZzdHJpbmcpOwoJCQkJCQlkaWUgIkluY29ycmVjdCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIgoJCQkJCQkJaWYgKGdyZXAoL15yZWNvbmYvLEBhcmd2Y29weSkpOwoJCQkJCQlwcmludCAiUmVjb25maWd1cmluZyB3aXRoOiAkYXJndnN0cmluZ1xuIjsKCQkJCQkJJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCQkJCQkJY2xvc2UoSU4pOwoJCQkJCQlsYXN0IFBST0NFU1NfQVJHUzsKCQkJCQkJfQoJCQkJCX0KCQkJCWNsb3NlKElOKTsKCQkJCX0KCQkJZGllICJJbnN1ZmZpY2llbnQgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiI7CgkJCX0KCQllbHNpZiAoL14zODYkLykKCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQoJCWVsc2lmICgvXmZpcHMkLykKCQkJewoJCQkkZmlwcz0xOwoJCQl9CgkJZWxzaWYgKC9ecnNhcmVmJC8pCgkJCXsKCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCgkJCSMgVGhlIGNoZWNrIGZvciB0aGUgb3B0aW9uIGlzIHRoZXJlIHNvIHNjcmlwdHMgYXJlbid0CgkJCSMgYnJva2VuCgkJCX0KCQllbHNpZiAoL15ub2ZpcHNjYW5pc3RlcmNoZWNrJC8pCgkJCXsKCQkJJGZpcHMgPSAxOwoJCQkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkJCX0KCQllbHNpZiAoL15maXBzY2hlY2skLykKCQkJewoJCQlpZiAoJGZpcHNjYW5pc3Rlcm9ubHkgIT0gMikKCQkJCXsKCQkJCXByaW50IFNUREVSUiA8PCJFT0YiOwpFUlJPUjogRklQUyBub3QgYXV0b2RldGVjdGVkLiBOb3QgcnVubmluZyBmcm9tIHJlc3RyaWN0ZWQgdGFyYmFsbD8/CkVPRgoJCQkJZXhpdCgxKTsKCQkJCX0KCQkJfQoJCWVsc2lmICgvXmZpcHNjYW5pc3Rlcm9ubHkkLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJJGZpcHNsaWJkaXI9IiI7CgkJCSRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ieSI7CgkJCSRmaXBzY2FuaXN0ZXJvbmx5ID0gMTsKCQkJfQoJCWVsc2lmICgvXmZpcHNjYW5pc3RlcmJ1aWxkJC8pCgkJCXsKCQkJJGZpcHMgPSAxOwoJCQkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkJCSRmaXBzbGliZGlyPSIiOwoJCQkkZmlwc2NhbmlzdGVyaW50ZXJuYWw9InkiOwoJCQkkZmlwc2NhbmlzdGVyb25seSA9IDE7CgkJCX0KCQllbHNpZiAoL15bLStdLykKCQkJewoJCQlpZiAoL14tLXByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWxpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkbGliZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLW9wZW5zc2xkaXI9KC4qKSQvKQoJCQkJewoJCQkJJG9wZW5zc2xkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0taW5zdGFsbC5wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGluc3RhbGxfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgta3JiNS0oZGlyfGxpYnxpbmNsdWRlfGZsYXZvcik9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJrcmI1LSIuJDF9PSQyOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1saWI9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWxpYiJ9PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1pbmNsdWRlPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn09Ii1JJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtZmlwc2xpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkZmlwc2xpYmRpcj0iJDEvIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWJhc2VhZGRyPSguKikkLykKCQkJCXsKCQkJCSRiYXNlYWRkcj0iJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLWNyb3NzLWNvbXBpbGUtcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRjcm9zc19jb21waWxlX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLVtsTF0oLiopJC8gb3IgL14tV2wsLykKCQkJCXsKCQkJCSRsaWJzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2UJIyBjb21tb24gaWYgKC9eWy0rXS8pLCBqdXN0IHBhc3MgZG93bi4uLgoJCQkJewoJCQkJJF8gPX4gcy8lKFswLTlhLWZdezEsMn0pL2NocihoZXgoJDEpKS9nZWk7CgkJCQkkZmxhZ3MuPSRfLiIgIjsKCQkJCX0KCQkJfQoJCWVsc2lmICgkXyA9fiAvXihbXjpdKyk6KC4rKSQvKQoJCQl7CgkJCWV2YWwgIlwkdGFibGV7XCQxfSA9IFwiJDJcIiI7ICMgYWxsb3cgJHh4eCBjb25zdHJ1Y3RzIGluIHRoZSBzdHJpbmcKCQkJJHRhcmdldD0kMTsKCQkJfQoJCWVsc2UKCQkJewoJCQlkaWUgInRhcmdldCBhbHJlYWR5IGRlZmluZWQgLSAkdGFyZ2V0IChvZmZlbmRpbmcgYXJnOiAkXylcbiIgaWYgKCR0YXJnZXQgbmUgIiIpOwoJCQkkdGFyZ2V0PSRfOwoJCQl9CgoJCXVubGVzcyAoJF8gZXEgJHRhcmdldCB8fCAvXm5vLS8gfHwgL15kaXNhYmxlLS8pCgkJCXsKCQkJIyAibm8tLi4uIiBmb2xsb3dzIGxhdGVyIGFmdGVyIGltcGxpZWQgZGlzYWN0aXZhdGlvbnMKCQkJIyBoYXZlIGJlZW4gZGVyaXZlZC4gIChEb24ndCB0YWtlIHRoaXMgdG9vIHNlcm9pdXNseSwKCQkJIyB3ZSByZWFsbHkgb25seSB3cml0ZSBPUFRJT05TIHRvIHRoZSBNYWtlZmlsZSBvdXQgb2YKCQkJIyBub3N0YWxnaWEuKQoKCQkJaWYgKCRvcHRpb25zIGVxICIiKQoJCQkJeyAkb3B0aW9ucyA9ICRfOyB9CgkJCWVsc2UKCQkJCXsgJG9wdGlvbnMgLj0gIiAiLiRfOyB9CgkJCX0KCQl9Cgl9CgoKCmlmICgkcHJvY2Vzc29yIGVxICIzODYiKQoJewoJJGRpc2FibGVkeyJzc2UyIn0gPSAiZm9yY2VkIjsKCX0KCmlmICghZGVmaW5lZCgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0pIHx8ICR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSBlcSAiIikKCXsKCSRkaXNhYmxlZHsia3JiNSJ9ID0gImtyYjUtZmxhdm9yIG5vdCBzcGVjaWZpZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJewoJIyAiemxpYi1keW5hbWljIiB3YXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQsIHNvIGVuYWJsZSAiemxpYiIKCWRlbGV0ZSAkZGlzYWJsZWR7InpsaWIifTsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsicmlqbmRhZWwifSkpCgl7CgkkZGlzYWJsZWR7ImFlcyJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZGVzIn0pKQoJewoJJGRpc2FibGVkeyJtZGMyIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSkKCXsKCSRkaXNhYmxlZHsiZWNkc2EifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJlY2RoIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDIuMCByZXF1aXJlcyBNRDUgYW5kIFJTQQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pKQoJewoJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDMuMCBhbmQgVExTIHJlcXVpcmVzIE1ENSBhbmQgU0hBIGFuZCBlaXRoZXIgUlNBIG9yIERTQStESAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsic2hhIn0pCiAgICB8fCAoZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KQogICAgICAgICYmIChkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkpKQoJewoJJGRpc2FibGVkeyJzc2wzIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsidGxzMSJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InRsczEifSkpCgl7CgkkZGlzYWJsZWR7InRsc2V4dCJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkKICAgIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkKCXsKCSRkaXNhYmxlZHsiZ29zdCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNSUCBhbmQgSEVBUlRCRUFUUyByZXF1aXJlIFRMU0VYVAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InRsc2V4dCJ9KSkKCXsKCSRkaXNhYmxlZHsic3JwIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsiaGVhcnRiZWF0cyJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoJHRhcmdldCBlcSAiVEFCTEUiKSB7Cglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludF90YWJsZV9lbnRyeSgkdGFyZ2V0KTsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgZXEgIkxJU1QiKSB7Cglmb3JlYWNoIChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnQ7CgkJcHJpbnQgIlxuIjsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7CgkkdGFyZ2V0ID0gIkN5Z3dpbiIuJDE7Cn0KCnByaW50ICJDb25maWd1cmluZyBmb3IgJHRhcmdldFxuIjsKCiZ1c2FnZSBpZiAoIWRlZmluZWQoJHRhYmxleyR0YXJnZXR9KSk7CgppZiAoJGZpcHMpCgl7CglkZWxldGUgJGRpc2FibGVkeyJzaGFyZWQifSBpZiAoJGRpc2FibGVkeyJzaGFyZWQifSBlcSAiZGVmYXVsdCIpOwoJfQoKZm9yZWFjaCAoc29ydCAoa2V5cyAlZGlzYWJsZWQpKQoJewoJJG9wdGlvbnMgLj0gIiBuby0kXyI7CgoJcHJpbnRmICIgICAgbm8tJS0xMnMgJS0xMHMiLCAkXywgIlskZGlzYWJsZWR7JF99XSI7CgoJaWYgKC9eZHNvJC8pCgkJeyAkbm9fZHNvID0gMTsgfQoJZWxzaWYgKC9edGhyZWFkcyQvKQoJCXsgJG5vX3RocmVhZHMgPSAxOyB9CgllbHNpZiAoL15zaGFyZWQkLykKCQl7ICRub19zaGFyZWQgPSAxOyB9CgllbHNpZiAoL156bGliJC8pCgkJeyAkemxpYiA9IDA7IH0KCWVsc2lmICgvXnN0YXRpYy1lbmdpbmUkLykKCQl7IH0KCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCXsgfQoJZWxzaWYgKC9ec3ltbGlua3MkLykKCQl7ICRzeW1saW5rID0gMDsgfQoJZWxzaWYgKC9ec3NlMiQvKQoJCXsgJG5vX3NzZTIgPSAxOyB9CgllbHNlCgkJewoJCW15ICgkQUxHTywgJGFsZ28pOwoJCSgkQUxHTyA9ICRhbGdvID0gJF8pID1+IHRyL1tcLWEtel0vW19BLVpdLzsKCgkJaWYgKC9eYXNtJC8gfHwgL15lcnIkLyB8fCAvXmh3JC8gfHwgL15ody0vKQoJCQl7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCgkJCWlmICgvXmVyciQvKQl7ICRmbGFncyAuPSAiLURPUEVOU1NMX05PX0VSUiAiOyB9CgkJCWVsc2lmICgvXmFzbSQvKQl7ICRub19hc20gPSAxOyB9CgkJCX0KCQllbHNlCgkJCXsKCQkJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCgkJCWlmICgvXmtyYjUkLykKCQkJCXsgJG5vX2tyYjUgPSAxOyB9CgkJCWVsc2UKCQkJCXsKCQkJCXB1c2ggQHNraXAsICRhbGdvOwoJCQkJIyBmaXgtdXAgY3J5cHRvL2RpcmVjdG9yeSBuYW1lKHMpCgkJCQlAc2tpcFskI3NraXBdPSJ3aHJscG9vbCIgaWYgJGFsZ28gZXEgIndoaXJscG9vbCI7CgkJCQlwcmludCAiIChza2lwIGRpcikiOwoKCQkJCSRkZXBmbGFncyAuPSAiIC1ET1BFTlNTTF9OT18kQUxHTyI7CgkJCQl9CgkJCX0KCQl9CgoJcHJpbnQgIlxuIjsKCX0KCm15ICRleHBfY2ZsYWdzID0gIiI7Cgpmb3JlYWNoIChzb3J0IEBleHBlcmltZW50YWwpCgl7CglteSAkQUxHTzsKCSgkQUxHTyA9ICRfKSA9fiB0ci9bYS16XS9bQS1aXS87CgoJIyBvcGVuc3NsY29uZi5oIHdpbGwgc2V0IE9QRU5TU0xfTk9fLi4uIHVubGVzcyBPUEVOU1NMX0VYUEVSSU1FTlRBTF8uLi4gaXMgZGVmaW5lZAoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCSRleHBfY2ZsYWdzIC49ICIgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF8kQUxHTyI7Cgl9CgpteSAkSXNNSzFNRj1zY2FsYXIgZ3JlcCAvXiR0YXJnZXQkLyxATUsxTUZfQnVpbGRzOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iIHx8ICR0YXJnZXQgZXEgIkRKR1BQIiB8fCAkdGFyZ2V0ID1+IC9ebWluZ3cvKTsKJGV4ZV9leHQ9Ii5ubG0iIGlmICgkdGFyZ2V0ID1+IC9uZXR3YXJlLyk7CiRleGVfZXh0PSIucG0iICBpZiAoJHRhcmdldCA9fiAvdm9zLyk7CmlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIikKCXsKCWlmICgkZmlwcykKCQl7CgkJaWYgKGV4aXN0cyAkRU5We0ZJUFNESVJ9KQoJCQl7CgkJCSRvcGVuc3NsZGlyPSIkRU5We0ZJUFNESVJ9IjsKCQkJfQoJCWVsc2UKCQkJewoJCQkkb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wvZmlwcy0yLjAiOwoJCQl9CgkJfQoJZWxzZQoJCXsKCQkkb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiOwoJCX0KCX0KJHByZWZpeD0kb3BlbnNzbGRpciBpZiAkcHJlZml4IGVxICIiOwoKJGRlZmF1bHRfcmFubGliPSAmd2hpY2goInJhbmxpYiIpIG9yICRkZWZhdWx0X3JhbmxpYj0idHJ1ZSI7CiRwZXJsPSRFTlZ7J1BFUkwnfSBvciAkcGVybD0md2hpY2goInBlcmw1Iikgb3IgJHBlcmw9JndoaWNoKCJwZXJsIikKICBvciAkcGVybD0icGVybCI7Cm15ICRtYWtlID0gJEVOVnsnTUFLRSd9IHx8ICJtYWtlIjsKCm15ICRmaXBzX2F1dGhfa2V5ID0gJEVOVnsnRklQU19BVVRIX0tFWSd9OwpteSAkZmlwc19hdXRoX29mZmljZXIgPSAkRU5WeydGSVBTX0FVVEhfT0ZGSUNFUid9OwpteSAkZmlwc19hdXRoX3VzZXIgPSAkRU5WeydGSVBTX0FVVEhfVVNFUid9OwoKJGNyb3NzX2NvbXBpbGVfcHJlZml4PSRFTlZ7J0NST1NTX0NPTVBJTEUnfSBpZiAkY3Jvc3NfY29tcGlsZV9wcmVmaXggZXEgIiI7CgpjaG9wICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyID1+IC9cLyQvOwpjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKIyBBbGxvdyBlbnZpcm9ubWVudCBDQyB0byBvdmVycmlkZSBjb21waWxlci4uLgppZigkRU5We0NDfSkgewogICAgJGNjID0gJEVOVntDQ307Cn0KbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRlY19vYmogPSAkZmllbGRzWyRpZHhfZWNfb2JqXTsKbXkgJGRlc19vYmogPSAkZmllbGRzWyRpZHhfZGVzX29ial07Cm15ICRhZXNfb2JqID0gJGZpZWxkc1skaWR4X2Flc19vYmpdOwpteSAkYmZfb2JqID0gJGZpZWxkc1skaWR4X2JmX29ial07Cm15ICRtZDVfb2JqID0gJGZpZWxkc1skaWR4X21kNV9vYmpdOwpteSAkc2hhMV9vYmogPSAkZmllbGRzWyRpZHhfc2hhMV9vYmpdOwpteSAkY2FzdF9vYmogPSAkZmllbGRzWyRpZHhfY2FzdF9vYmpdOwpteSAkcmM0X29iaiA9ICRmaWVsZHNbJGlkeF9yYzRfb2JqXTsKbXkgJHJtZDE2MF9vYmogPSAkZmllbGRzWyRpZHhfcm1kMTYwX29ial07Cm15ICRyYzVfb2JqID0gJGZpZWxkc1skaWR4X3JjNV9vYmpdOwpteSAkd3Bfb2JqID0gJGZpZWxkc1skaWR4X3dwX29ial07Cm15ICRjbWxsX29iaiA9ICRmaWVsZHNbJGlkeF9jbWxsX29ial07Cm15ICRtb2Rlc19vYmogPSAkZmllbGRzWyRpZHhfbW9kZXNfb2JqXTsKbXkgJGVuZ2luZXNfb2JqID0gJGZpZWxkc1skaWR4X2VuZ2luZXNfb2JqXTsKbXkgJHBlcmxhc21fc2NoZW1lID0gJGZpZWxkc1skaWR4X3Blcmxhc21fc2NoZW1lXTsKbXkgJGRzb19zY2hlbWUgPSAkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV07Cm15ICRzaGFyZWRfdGFyZ2V0ID0gJGZpZWxkc1skaWR4X3NoYXJlZF90YXJnZXRdOwpteSAkc2hhcmVkX2NmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9jZmxhZ107Cm15ICRzaGFyZWRfbGRmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9sZGZsYWddOwpteSAkc2hhcmVkX2V4dGVuc2lvbiA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfZXh0ZW5zaW9uXTsKbXkgJHJhbmxpYiA9ICRFTlZ7J1JBTkxJQid9IHx8ICRmaWVsZHNbJGlkeF9yYW5saWJdOwpteSAkYXIgPSAkRU5WeydBUid9IHx8ICJhciI7Cm15ICRhcmZsYWdzID0gJGZpZWxkc1skaWR4X2FyZmxhZ3NdOwpteSAkbXVsdGlsaWIgPSAkZmllbGRzWyRpZHhfbXVsdGlsaWJdOwoKIyBpZiAkcHJlZml4L2xpYiRtdWx0aWxpYiBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGVuCiMgYXNzdW1lIHRoYXQgaXQncyBub3Qgc2VhcmNoZWQgYnkgbGlua2VyIGF1dG9tYXRpY2FsbHksIGluCiMgd2hpY2ggY2FzZSBhZGRpbmcgJG11bHRpbGliIHN1ZmZpeCBjYXVzZXMgbW9yZSBncmllZiB0aGFuCiMgd2UncmUgcmVhZHkgdG8gdG9sZXJhdGUsIHNvIGRvbid0Li4uCiRtdWx0aWxpYj0iIiBpZiAhLWQgIiRwcmVmaXgvbGliJG11bHRpbGliIjsKCiRsaWJkaXI9ImxpYiRtdWx0aWxpYiIgaWYgJGxpYmRpciBlcSAiIjsKCiRjZmxhZ3MgPSAiJGNmbGFncyRleHBfY2ZsYWdzIjsKCiMgJyUnIGluICRsZmxhZ3MgaXMgdXNlZCB0byBzcGxpdCBmbGFncyB0byAicHJlLSIgYW5kIHBvc3QtZmxhZ3MKbXkgKCRwcmVsZmxhZ3MsJHBvc3RsZmxhZ3MpPXNwbGl0KCclJywkbGZsYWdzKTsKaWYgKGRlZmluZWQoJHBvc3RsZmxhZ3MpKQl7ICRsZmxhZ3M9JHBvc3RsZmxhZ3M7CX0KZWxzZQkJCQl7ICRsZmxhZ3M9JHByZWxmbGFnczsgdW5kZWYgJHByZWxmbGFnczsJfQoKaWYgKCR0YXJnZXQgPX4gL15taW5ndy8gJiYgYCRjYyAtLXRhcmdldC1oZWxwIDI+JjFgICF+IG0vXC1tbm9cLWN5Z3dpbi9tKQoJewoJJGNmbGFncyA9fiBzL1wtbW5vXC1jeWd3aW5ccyovLzsKCSRzaGFyZWRfbGRmbGFnID1+IHMvXC1tbm9cLWN5Z3dpblxzKi8vOwoJfQoKaWYgKCR0YXJnZXQgPX4gL2xpbnV4LipcLW1pcHMvICYmICEkbm9fYXNtICYmICRmbGFncyAhfiAvXC1tKGlwc3xhcmNoPSkvKSB7CgkjIG1pbmltYWxseSByZXF1aXJlZCBhcmNoaXRlY3R1cmUgZmxhZ3MgZm9yIGFzc2VtYmx5IG1vZHVsZXMKCSRjZmxhZ3M9Ii1taXBzMiAkY2ZsYWdzIiBpZiAoJHRhcmdldCA9fiAvbWlwczMyLyk7CgkkY2ZsYWdzPSItbWlwczMgJGNmbGFncyIgaWYgKCR0YXJnZXQgPX4gL21pcHM2NC8pOwp9CgpteSAkbm9fc2hhcmVkX3dhcm49MDsKbXkgJG5vX3VzZXJfY2ZsYWdzPTA7CgppZiAoJGZsYWdzIG5lICIiKQl7ICRjZmxhZ3M9IiRmbGFncyRjZmxhZ3MiOyB9CmVsc2UJCQl7ICRub191c2VyX2NmbGFncz0xOyAgICAgICB9CgojIEtlcmJlcm9zIHNldHRpbmdzLiAgVGhlIGZsYXZvciBtdXN0IGJlIHByb3ZpZGVkIGZyb20gb3V0c2lkZSwgZWl0aGVyIHRocm91Z2gKIyB0aGUgc2NyaXB0ICJjb25maWciIG9yIG1hbnVhbGx5LgppZiAoISRub19rcmI1KQoJewoJbXkgKCRscmVzb2x2LCAkbHBhdGgsICRsZXh0KTsKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bSGhdZWltZGFsJC8pCgkJewoJCWRpZSAiU29ycnksIEhlaW1kYWwgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWRcbiI7CgkJfQoJIyMjIyMgSEFDSyB0byBmb3JjZSB1c2Ugb2YgSGVpbWRhbC4KCSMjIyMjIFdBUk5JTkc6IFNpbmNlIHdlIGRvbid0IHJlYWxseSBoYXZlIGFkZXF1YXRlIHN1cHBvcnQgZm9yIEhlaW1kYWwsCgkjIyMjIyAgICAgICAgICB1c2luZyB0aGlzIHdpbGwgYnJlYWsgdGhlIGJ1aWxkLiAgWW91J2xsIGhhdmUgdG8gbWFrZQoJIyMjIyMgICAgICAgICAgY2hhbmdlcyB0byB0aGUgc291cmNlLCBhbmQgaWYgeW91IGRvLCBwbGVhc2Ugc2VuZAoJIyMjIyMgICAgICAgICAgcGF0Y2hlcyB0byBvcGVuc3NsLWRldkBvcGVuc3NsLm9yZwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXmZvcmNlLVtIaF1laW1kYWwkLykKCQl7CgkJd2FybiAiSGVpbWRhbCBpc24ndCByZWFsbHkgc3VwcG9ydGVkLiAgWW91ciBidWlsZCBXSUxMIGJyZWFrXG4iOwoJCXdhcm4gIklmIHlvdSBmaXggdGhlIHByb2JsZW1zLCBwbGVhc2Ugc2VuZCBhIHBhdGNoIHRvIG9wZW5zc2wtZGV2XEBvcGVuc3NsLm9yZ1xuIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9oZWltZGFsIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gZXEgIiI7CgkJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9ID0gIi1MIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uCgkJCSIvbGliIC1sZ3NzYXBpIC1sa3JiNSAtbGNvbV9lcnIiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X0hFSU1EQUwgJGNmbGFncyI7CgkJfQoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltNbV1bSWldW1R0XS8pCgkJewoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2tlcmJlcm9zIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gZXEgIiI7CgkJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9ID0gIi1MIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uCgkJCSIvbGliIC1sZ3NzYXBpX2tyYjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9NSVQgJGNmbGFncyI7CgkJJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IHMvXltNbV1bSWldW1R0XVsuXy1dKi8vOwoJCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL14xWy5fLV0qWzAxXS8pCgkJCXsKCQkJJGNmbGFncz0iLURLUkI1X01JVF9PTEQxMSAkY2ZsYWdzIjsKCQkJfQoJCX0KCUxSRVNPTFY6Cglmb3JlYWNoICRscGF0aCAoIi9saWIiLCAiL3Vzci9saWIiKQoJCXsKCQlmb3JlYWNoICRsZXh0ICgiYSIsICJzbyIpCgkJCXsKCQkJJGxyZXNvbHYgPSAiJGxwYXRoL2xpYnJlc29sdi4kbGV4dCI7CgkJCWxhc3QgTFJFU09MVglpZiAoLXIgIiRscmVzb2x2Iik7CgkJCSRscmVzb2x2ID0gIiI7CgkJCX0KCQl9Cgkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gLj0gIiAtbHJlc29sdiIKCQlpZiAoIiRscmVzb2x2IiBuZSAiIik7Cgkkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9ID0gIi1JIi4kd2l0aGFyZ3N7ImtyYjUtZGlyIn0uIi9pbmNsdWRlIgoJCWlmICR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gZXEgIiIgJiYKCQkgICAkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gbmUgIiI7Cgl9CgojIFRoZSBEU08gY29kZSBjdXJyZW50bHkgYWx3YXlzIGltcGxlbWVudHMgYWxsIGZ1bmN0aW9ucyBzbyB0aGF0IG5vCiMgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGF0IGZyb20gYSBjb21waWxhdGlvbiBwb2ludAojIG9mIHZpZXcuIEhvd2V2ZXIsIHRoZSAibWV0aG9kInMgbWF5IHJldHVybiB6ZXJvIHVubGVzcyB0aGF0IHBsYXRmb3JtCiMgaGFzIHN1cHBvcnQgY29tcGlsZWQgaW4gZm9yIHRoZW0uIEN1cnJlbnRseSBlYWNoIG1ldGhvZCBpcyBlbmFibGVkCiMgYnkgYSBkZWZpbmUgIkRTT188bmFtZT4iIC4uLiB3ZSB0cmFuc2xhdGUgdGhlICJkc29fc2NoZW1lIiBjb25maWcKIyBzdHJpbmcgZW50cnkgaW50byB1c2luZyB0aGUgZm9sbG93aW5nIGxvZ2ljOwpteSAkZHNvX2NmbGFnczsKaWYgKCEkbm9fZHNvICYmICRkc29fc2NoZW1lIG5lICIiKQoJewoJJGRzb19zY2hlbWUgPX4gdHIvW2Etel0vW0EtWl0vOwoJaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTiIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIC1ESEFWRV9ETEZDTl9IIjsKCQl9CgllbHNpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOX05PX0giKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiI7CgkJfQoJZWxzZQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT18kZHNvX3NjaGVtZSI7CgkJfQoJJGNmbGFncyA9ICIkZHNvX2NmbGFncyAkY2ZsYWdzIjsKCX0KCm15ICR0aHJlYWRfY2ZsYWdzOwpteSAkdGhyZWFkX2RlZmluZXM7CmlmICgkdGhyZWFkX2NmbGFnIG5lICIodW5rbm93bikiICYmICEkbm9fdGhyZWFkcykKCXsKCSMgSWYgd2Uga25vdyBob3cgdG8gZG8gaXQsIHN1cHBvcnQgdGhyZWFkcyBieSBkZWZhdWx0LgoJJHRocmVhZHMgPSAxOwoJfQppZiAoJHRocmVhZF9jZmxhZyBlcSAiKHVua25vd24pIiAmJiAkdGhyZWFkcykKCXsKCSMgSWYgdGhlIHVzZXIgYXNrZWQgZm9yICJ0aHJlYWRzIiwgW3NdaGUgaXMgYWxzbyBleHBlY3RlZCB0bwoJIyBwcm92aWRlIGFueSBzeXN0ZW0tZGVwZW5kZW50IGNvbXBpbGVyIG9wdGlvbnMgdGhhdCBhcmUKCSMgbmVjZXNzYXJ5LgoJaWYgKCRub191c2VyX2NmbGFncykKCQl7CgkJcHJpbnQgIllvdSBhc2tlZCBmb3IgbXVsdGktdGhyZWFkaW5nIHN1cHBvcnQsIGJ1dCBkaWRuJ3RcbiI7CgkJcHJpbnQgInByb3ZpZGUgYW55IHN5c3RlbS1zcGVjaWZpYyBjb21waWxlciBvcHRpb25zXG4iOwoJCWV4aXQoMSk7CgkJfQoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICRjZmxhZ3MiIDsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7Cgl9CmVsc2UKCXsKCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkdGhyZWFkX2NmbGFnICRjZmxhZ3MiOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKIwlteSAkZGVmOwojCWZvcmVhY2ggJGRlZiAoc3BsaXQgJyAnLCR0aHJlYWRfY2ZsYWcpCiMJCXsKIwkJaWYgKCRkZWYgPX4gcy9eLUQvLyAmJiAkZGVmICF+IC9eXy8pCiMJCQl7CiMJCQkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgJGRlZlxuIjsKIwkJCX0KIwkJfQoJfQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9JGVjX29iaj0KCSRkZXNfb2JqPSRhZXNfb2JqPSRiZl9vYmo9JGNhc3Rfb2JqPSRyYzRfb2JqPSRyYzVfb2JqPSRjbWxsX29iaj0KCSRtb2Rlc19vYmo9JHNoYTFfb2JqPSRtZDVfb2JqPSRybWQxNjBfb2JqPSR3cF9vYmo9JGVuZ2luZXNfb2JqPSIiOwoJJGNmbGFncz1+cy9cLURbQkxdX0VORElBTi8vCQlpZiAoJGZpcHMpOwoJJHRocmVhZF9jZmxhZ3M9fnMvXC1EW0JMXV9FTkRJQU4vLwlpZiAoJGZpcHMpOwoJfQplbHNpZiAoZGVmaW5lZCgkZGlzYWJsZWR7ZWMybX0pKQoJewoJJGJuX29iaiA9fiBzL1x3Ky1nZjJtLm8vLzsKCX0KCmlmICghJG5vX3NoYXJlZCkKCXsKCSRjYXN0X29iaj0iIjsJIyBDQVNUIGFzc2VtYmxlciBpcyBub3QgUElDCgl9CgppZiAoJHRocmVhZHMpCgl7CgkkY2ZsYWdzPSR0aHJlYWRfY2ZsYWdzOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgLj0gJHRocmVhZF9kZWZpbmVzOwoJfQoKaWYgKCR6bGliKQoJewoJJGNmbGFncyA9ICItRFpMSUIgJGNmbGFncyI7CglpZiAoZGVmaW5lZCgkZGlzYWJsZWR7InpsaWItZHluYW1pYyJ9KSkKCQl7CgkJaWYgKGRlZmluZWQoJHdpdGhhcmdzeyJ6bGliLWxpYiJ9KSkKCQkJewoJCQkkbGZsYWdzID0gIiRsZmxhZ3MgLUwiIC4gJHdpdGhhcmdzeyJ6bGliLWxpYiJ9IC4gIiAtbHoiOwoJCQl9CgkJZWxzZQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtbHoiOwoJCQl9CgkJfQoJZWxzZQoJCXsKCQkkY2ZsYWdzID0gIi1EWkxJQl9TSEFSRUQgJGNmbGFncyI7CgkJfQoJfQoKIyBZb3Ugd2lsbCBmaW5kIHNobGliX21hcmsxIGFuZCBzaGxpYl9tYXJrMiBleHBsYWluZWQgaW4gTWFrZWZpbGUub3JnCm15ICRzaGFyZWRfbWFyayA9ICIiOwppZiAoJHNoYXJlZF90YXJnZXQgZXEgIiIpCgl7Cgkkbm9fc2hhcmVkX3dhcm4gPSAxIGlmICEkbm9fc2hhcmVkICYmICEkZmlwczsKCSRub19zaGFyZWQgPSAxOwoJfQppZiAoISRub19zaGFyZWQpCgl7CglpZiAoJHNoYXJlZF9jZmxhZyBuZSAiIikKCQl7CgkJJGNmbGFncyA9ICIkc2hhcmVkX2NmbGFnIC1ET1BFTlNTTF9QSUMgJGNmbGFncyI7CgkJfQoJfQoKaWYgKCEkSXNNSzFNRikKCXsKCSMgYWRkIHtuby19c3RhdGljLWVuZ2luZSB0byBvcHRpb25zIHRvIGFsbG93IG1rZGVmLnBsIHRvIHdvcmsgd2l0aG91dCBleHRyYSBhcmd1bWVudHMKCWlmICgkbm9fc2hhcmVkKQoJCXsKCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX0RZTkFNSUNfRU5HSU5FXG4iOwoJCSRvcHRpb25zLj0iIHN0YXRpYy1lbmdpbmUiOwoJCX0KCWVsc2UKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19TVEFUSUNfRU5HSU5FXG4iOwoJCSRvcHRpb25zLj0iIG5vLXN0YXRpYy1lbmdpbmUiOwoJCX0KCX0KCiRjcHVpZF9vYmouPSIgdXBsaW5rLm8gdXBsaW5rLXg4Ni5vIiBpZiAoJGNmbGFncyA9fiAvXC1ET1BFTlNTTF9VU0VfQVBQTElOSy8pOwoKIwojIFBsYXRmb3JtIGZpeC11cHMKIwppZiAoJHRhcmdldCA9fiAvXC1pY2MkLykJIyBJbnRlbCBDIGNvbXBpbGVyCgl7CglteSAkaWNjdmVyPTA7CglpZiAob3BlbihGRCwiJGNjIC1WIDI+JjEgfCIpKQoJCXsKCQl3aGlsZSg8RkQ+KSB7ICRpY2N2ZXI9JDEgaWYgKC9WZXJzaW9uIChbMC05XSspXC4vKTsgfQoJCWNsb3NlKEZEKTsKCQl9CglpZiAoJGljY3Zlcj49OCkKCQl7CgkJJGNmbGFncz1+cy9cLUtQSUMvLWZQSUMvOwoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJaWYgKCRpY2N2ZXI+PTkpCgkJewoJCSRsZmxhZ3MuPSIgLWktc3RhdGljIjsKCQkkbGZsYWdzPX5zL1wtbm9fY3BwcnQvLW5vLWNwcHJ0LzsKCQl9CglpZiAoJGljY3Zlcj49MTApCgkJewoJCSRsZmxhZ3M9fnMvXC1pXC1zdGF0aWMvLXN0YXRpYy1pbnRlbC87CgkJfQoJaWYgKCRpY2N2ZXI+PTExKQoJCXsKCQkkY2ZsYWdzLj0iIC1uby1pbnRlbC1leHRlbnNpb25zIjsJIyBkaXNhYmxlIENpbGsKCQkkbGZsYWdzPX5zL1wtbm9cLWNwcHJ0Ly1uby1jeHhsaWIvOwoJCX0KCX0KCiMgVW5saWtlIG90aGVyIE9TZXMgKGxpa2UgU29sYXJpcywgTGludXgsIFRydTY0LCBJUklYKSBCU0QgcnVuLXRpbWUKIyBsaW5rZXJzICh0ZXN0ZWQgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVlQlNEKSAiZGVtYW5kIiBSUEFUSCBzZXQgb24KIyAuc28gb2JqZWN0cy4gQXBwYXJlbnRseSBhcHBsaWNhdGlvbiBSUEFUSCBpcyBub3QgZ2xvYmFsIGFuZCBkb2VzCiMgbm90IGFwcGx5IHRvIC5zbyBsaW5rZWQgd2l0aCBvdGhlciAuc28uIFByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZgojIHdoZW4gbGlic3NsLnNvIGZhaWxzIHRvIGxvYWQgbGliY3J5cHRvLnNvLiBPbmUgY2FuIGFyZ3VlIHRoYXQgd2UKIyBzaG91bGQgZW5ncmF2ZSB0aGlzIGludG8gTWFrZWZpbGUuc2hhcmVkIHJ1bGVzIG9yIGludG8gQlNELSogY29uZmlnCiMgbGluZXMgYWJvdmUuIE1lYW53aGlsZSBsZXQncyB0cnkgdG8gYmUgY2F1dGlvdXMgYW5kIHBhc3MgLXJwYXRoIHRvCiMgbGlua2VyIG9ubHkgd2hlbiAtLXByZWZpeCBpcyBub3QgL3Vzci4KaWYgKCR0YXJnZXQgPX4gL15CU0RcLS8pCgl7Cgkkc2hhcmVkX2xkZmxhZy49IiAtV2wsLXJwYXRoLFwkKExJQlJQQVRIKSIgaWYgKCRwcmVmaXggIX4gbXxeL3VzclsvXSokfCk7Cgl9CgppZiAoJHN5c19pZCBuZSAiIikKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkICRjZmxhZ3MiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiNkZWZpbmUgT1BFTlNTTF9TWVNOQU1FXyRzeXNfaWRcbiI7Cgl9CgppZiAoJHJhbmxpYiBlcSAiIikKCXsKCSRyYW5saWIgPSAkZGVmYXVsdF9yYW5saWI7Cgl9CgojbXkgKCRibjEpPXNwbGl0KC9ccysvLCRibl9vYmopOwojJGJuMSA9ICIiIHVubGVzcyBkZWZpbmVkICRibjE7CiMkYm4xPSRibl9hc20gdW5sZXNzICgkYm4xID1+IC9cLm8kLyk7CiMkYm5fb2JqPSIkYm4xIjsKCiRjcHVpZF9vYmo9IiIgaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpOwoKJGJuX29iaiA9ICRibl9hc20gdW5sZXNzICRibl9vYmogbmUgIiI7CiMgYm4tNTg2IGlzIHRoZSBvbmx5IG9uZSBpbXBsZW1lbnRpbmcgYm5fKl9wYXJ0X3dvcmRzCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9QQVJUX1dPUkRTIiBpZiAoJGJuX29iaiA9fiAvYm4tNTg2Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm9fc3NlMiAmJiAkYm5fb2JqID1+IC84Ni8pOwoKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8tbW9udC8pOwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVDUiIGlmICgkYm5fb2JqID1+IC8tbW9udDUvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYm5fb2JqID1+IC8tZ2YybS8pOwoKaWYgKCRmaXBzKQoJewoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwoJaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU0NBTklTVEVSXG4iOwoJCSRjZmxhZ3MgPSAiLURPUEVOU1NMX0ZJUFNDQU5JU1RFUiAkY2ZsYWdzIjsKCQl9Cgl9CgokY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwokZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7CiRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7CiRjYXN0X29iaj0kY2FzdF9lbmMJdW5sZXNzICgkY2FzdF9vYmogPX4gL1wubyQvKTsKJHJjNF9vYmo9JHJjNF9lbmMJdW5sZXNzICgkcmM0X29iaiA9fiAvXC5vJC8pOwokcmM1X29iaj0kcmM1X2VuYwl1bmxlc3MgKCRyYzVfb2JqID1+IC9cLm8kLyk7CmlmICgkc2hhMV9vYmogPX4gL1wubyQvKQoJewojCSRzaGExX29iaj0kc2hhMV9lbmM7CgkkY2ZsYWdzLj0iIC1EU0hBMV9BU00iICAgaWYgKCRzaGExX29iaiA9fiAvc3g4Ni8gfHwgJHNoYTFfb2JqID1+IC9zaGExLyk7CgkkY2ZsYWdzLj0iIC1EU0hBMjU2X0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhMjU2Lyk7CgkkY2ZsYWdzLj0iIC1EU0hBNTEyX0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhNTEyLyk7CglpZiAoJHNoYTFfb2JqID1+IC9zc2UyLykKCSAgICB7CWlmICgkbm9fc3NlMikKCQl7ICAgJHNoYTFfb2JqID1+IHMvXFMqc3NlMlxTKy8vOyAgICAgICAgfQoJCWVsc2lmICgkY2ZsYWdzICF+IC9PUEVOU1NMX0lBMzJfU1NFMi8pCgkJeyAgICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiI7ICAgIH0KCSAgICB9Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CmlmICgkYWVzX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EQUVTX0FTTSIgaWYgKCRhZXNfb2JqID1+IG0vXGJhZXNcLS8pOzsKCSMgYWVzLWN0ci5vIGlzIG5vdCBhIHJlYWwgZmlsZSwgb25seSBpbmRpY2F0aW9uIHRoYXQgYXNzZW1ibGVyCgkjIG1vZHVsZSBpbXBsZW1lbnRzIEFFU19jdHIzMl9lbmNyeXB0Li4uCgkkY2ZsYWdzLj0iIC1EQUVTX0NUUl9BU00iIGlmICgkYWVzX29iaiA9fiBzL1xzKmFlc1wtY3RyXC5vLy8pOwoJIyBhZXMteHRzLm8gaW5kaWNhdGVzIHByZXNlbmNlIG9mIEFFU194dHNfW2VufGRlXWNyeXB0Li4uCgkkY2ZsYWdzLj0iIC1EQUVTX1hUU19BU00iIGlmICgkYWVzX29iaiA9fiBzL1xzKmFlc1wteHRzXC5vLy8pOwoJJGFlc19vYmogPX4gcy9ccyoodnBhZXN8YWVzbmkpXC14ODZcLm8vL2cgaWYgKCRub19zc2UyKTsKCSRhZXNfb2JqID1+IHMvXHMqKHZwfGJzKWFlcy1cdypcLm8vL2cgaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpOwoJJGNmbGFncy49IiAtRFZQQUVTX0FTTSIgaWYgKCRhZXNfb2JqID1+IG0vdnBhZXMvKTsKCSRjZmxhZ3MuPSIgLURCU0FFU19BU00iIGlmICgkYWVzX29iaiA9fiBtL2JzYWVzLyk7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CiR3cF9vYmo9IiIgaWYgKCR3cF9vYmogPX4gL21teC8gJiYgJHByb2Nlc3NvciBlcSAiMzg2Iik7CmlmICgkd3Bfb2JqID1+IC9cLm8kLyAmJiAhJGRpc2FibGVkeyJ3aGlybHBvb2wifSkKCXsKCSRjZmxhZ3MuPSIgLURXSElSTFBPT0xfQVNNIjsKCX0KZWxzZQl7Cgkkd3Bfb2JqPSJ3cF9ibG9jay5vIjsKCX0KJGNtbGxfb2JqPSRjbWxsX2VuYwl1bmxlc3MgKCRjbWxsX29iaiA9fiAvLm8kLyk7CmlmICgkbW9kZXNfb2JqID1+IC9naGFzaFwtLykKCXsKCSRjZmxhZ3MuPSIgLURHSEFTSF9BU00iOwoJfQppZiAoJGVjX29iaiA9fiAvZWNwX25pc3R6MjU2LykKCXsKCSRjZmxhZ3MuPSIgLURFQ1BfTklTVFoyNTZfQVNNIjsKCX0KCiMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwojIGFuZCB3b3JrcyBhcyB3ZWxsIG9uIGNvbW1hbmQgbGluZXMuCiRjZmxhZ3MgPX4gcy8oW1xcXCJdKS9cXFwxL2c7CgpteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKbXkgJHZlcnNpb25fbnVtID0gInVua25vd24iOwpteSAkbWFqb3IgPSAidW5rbm93biI7Cm15ICRtaW5vciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25fbnVtYmVyID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5ID0gInVua25vd24iOwpteSAkc2hsaWJfbWFqb3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl9taW5vciA9ICJ1bmtub3duIjsKCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbHYuaCcpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgb3BlbnNzbHYuaDokIVxuIjsKd2hpbGUgKDxJTj4pCgl7CgkkdmVyc2lvbj0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLlRFWFQuKk9wZW5TU0wgKFxTKykgLzsKCSR2ZXJzaW9uX251bT0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLk5VTUJFUi4qMHgoXFMrKS87Cgkkc2hsaWJfdmVyc2lvbl9udW1iZXI9JDEgaWYgL1NITElCX1ZFUlNJT05fTlVNQkVSICoiKFteIl0rKSIvOwoJJHNobGliX3ZlcnNpb25faGlzdG9yeT0kMSBpZiAvU0hMSUJfVkVSU0lPTl9ISVNUT1JZICoiKFteIl0qKSIvOwoJfQpjbG9zZShJTik7CmlmICgkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IG5lICIiKSB7ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgLj0gIjoiOyB9CgppZiAoJHZlcnNpb24gPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7CgkkbWFqb3I9JDE7CgkkbWlub3I9JDI7Cgl9CgppZiAoJHNobGliX3ZlcnNpb25fbnVtYmVyID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJHNobGliX21ham9yPSQxOwoJJHNobGliX21pbm9yPSQyOwoJfQoKaWYgKCRzdHJpY3Rfd2FybmluZ3MpCgl7CglteSAkd29wdDsKCWRpZSAiRVJST1IgLS1zdHJpY3Qtd2FybmluZ3MgcmVxdWlyZXMgZ2NjIiB1bmxlc3MgKCRjYyA9fiAvZ2NjJC8pOwoJZm9yZWFjaCAkd29wdCAoc3BsaXQgL1xzKy8sICRnY2NfZGV2dGVhbV93YXJuKQoJCXsKCQkkY2ZsYWdzIC49ICIgJHdvcHQiIHVubGVzcyAoJGNmbGFncyA9fiAvJHdvcHQvKQoJCX0KCX0KCmlmICgkZmlwc2NhbmlzdGVyaW50ZXJuYWwgZXEgInkiKQoJewoJb3BlbihJTiwiPGZpcHMvZmlwc19hdXRoLmluIikgfHwgZGllICJjYW4ndCBvcGVuIGZpcHNfYXV0aC5pbiI7CglvcGVuKE9VVCwiPmZpcHMvZmlwc19hdXRoLmgiKSB8fCBkaWUgImNhbid0IG9wZW4gZmlwc19hdXRoLmgiOwoJd2hpbGUoPElOPikKCQl7CgkJcy9GSVBTX0FVVEhfS0VZLiokL0ZJUFNfQVVUSF9LRVkgJGZpcHNfYXV0aF9rZXkvIGlmIGRlZmluZWQgJGZpcHNfYXV0aF9rZXk7CgkJcy9GSVBTX0FVVEhfQ1JZUFRPX09GRklDRVIuKiQvRklQU19BVVRIX0NSWVBUT19PRkZJQ0VSICRmaXBzX2F1dGhfb2ZmaWNlci8gaWYgZGVmaW5lZCAkZmlwc19hdXRoX29mZmljZXI7CgkJcy9GSVBTX0FVVEhfQ1JZUFRPX1VTRVIuKiQvRklQU19BVVRIX0NSWVBUT19VU0VSICRmaXBzX2F1dGhfdXNlci8gaWYgZGVmaW5lZCAkZmlwc19hdXRoX3VzZXI7CgkJcHJpbnQgT1VUICRfOwoJCX0KCWNsb3NlIElOOwoJY2xvc2UgT1VUOwoJfQoKbXkgJG1mb3JnID0gJGZpcHNjYW5pc3Rlcm9ubHkgPyAiTWFrZWZpbGUuZmlwcyIgOiAiTWFrZWZpbGUub3JnIjsKCm9wZW4oSU4sIjwkbWZvcmciKSB8fCBkaWUgInVuYWJsZSB0byByZWFkICRtZm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gJG1mb3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CgppZiAoJGZpcHNjYW5pc3Rlcm9ubHkpCgl7CgkkYWVzX29iaiA9fiBzL2Flc25pLXNoYTEteDg2XzY0Lm8vLzsKCSRibl9vYmogPX4gcy9tb2RleHA1MTIteDg2XzY0Lm8vLzsKCX0KCndoaWxlICg8SU4+KQoJewoJY2hvbXA7Cgkkc2RpcnMgPSAxIGlmIC9eU0RJUlM9LzsKCWlmICgkc2RpcnMpIHsKCQlteSAkZGlyOwoJCWZvcmVhY2ggJGRpciAoQHNraXApIHsKCQkJcy8oXHMpJGRpciAvJDEvOwoJCQlzL1xzJGRpciQvLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwogICAgICAgIHMvZmlwcyAvLyBpZiAoL15ESVJTPS8gJiYgISRmaXBzKTsKICAgICAgICBzL2VuZ2luZXMgLy8gaWYgKC9eRElSUz0vICYmICRkaXNhYmxlZHsiZW5naW5lIn0pOwoJcy9jY2dvc3QvLyBpZiAoL15FTkdESVJTPS8gJiYgJGRpc2FibGVkeyJnb3N0In0pOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk1VTFRJTElCPS4qJC9NVUxUSUxJQj0kbXVsdGlsaWIvOwoJcy9eT1BFTlNTTERJUj0uKiQvT1BFTlNTTERJUj0kb3BlbnNzbGRpci87CglzL15MSUJESVI9LiokL0xJQkRJUj0kbGliZGlyLzsKCXMvXklOU1RBTExfUFJFRklYPS4qJC9JTlNUQUxMX1BSRUZJWD0kaW5zdGFsbF9wcmVmaXgvOwoJcy9eUExBVEZPUk09LiokL1BMQVRGT1JNPSR0YXJnZXQvOwoJcy9eT1BUSU9OUz0uKiQvT1BUSU9OUz0kb3B0aW9ucy87CglzL15DT05GSUdVUkVfQVJHUz0uKiQvQ09ORklHVVJFX0FSR1M9JGFyZ3ZzdHJpbmcvOwoJaWYgKCRjcm9zc19jb21waWxlX3ByZWZpeCkKCQl7CgkJcy9eQ0M9LiokL0NST1NTX0NPTVBJTEU9ICRjcm9zc19jb21waWxlX3ByZWZpeFxuQ0M9IFwkXChDUk9TU19DT01QSUxFXCkkY2MvOwoJCXMvXkFSPVxzKi9BUj0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eTk09XHMqL05NPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15SQU5MSUI9XHMqL1JBTkxJQj0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSBcJFwoQ1JPU1NfQ09NUElMRVwpJGNjLyBpZiAkY2MgZXEgImdjYyI7CgkJfQoJZWxzZQl7CgkJcy9eQ0M9LiokL0NDPSAkY2MvOwoJCXMvXkFSPVxzKmFyL0FSPSAkYXIvOwoJCXMvXlJBTkxJQj0uKi9SQU5MSUI9ICRyYW5saWIvOwoJCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gJGNjLyBpZiAkY2MgZXEgImdjYyIgfHwgKCRjYyBlcSAnY2MnICYmICR0YXJnZXQgPX4gL2Rhcndpbi8pOwoJCX0KCXMvXkNGTEFHPS4qJC9DRkxBRz0gJGNmbGFncy87CglzL15ERVBGTEFHPS4qJC9ERVBGTEFHPSRkZXBmbGFncy87CglzL15QRVhfTElCUz0uKiQvUEVYX0xJQlM9ICRwcmVsZmxhZ3MvOwoJcy9eRVhfTElCUz0uKiQvRVhfTElCUz0gJGxmbGFncy87CglzL15FWEVfRVhUPS4qJC9FWEVfRVhUPSAkZXhlX2V4dC87CglzL15DUFVJRF9PQko9LiokL0NQVUlEX09CSj0gJGNwdWlkX29iai87CglzL15CTl9BU009LiokL0JOX0FTTT0gJGJuX29iai87CglzL15FQ19BU009LiokL0VDX0FTTT0gJGVjX29iai87CglzL15ERVNfRU5DPS4qJC9ERVNfRU5DPSAkZGVzX29iai87CglzL15BRVNfRU5DPS4qJC9BRVNfRU5DPSAkYWVzX29iai87CglzL15CRl9FTkM9LiokL0JGX0VOQz0gJGJmX29iai87CglzL15DQVNUX0VOQz0uKiQvQ0FTVF9FTkM9ICRjYXN0X29iai87CglzL15SQzRfRU5DPS4qJC9SQzRfRU5DPSAkcmM0X29iai87CglzL15SQzVfRU5DPS4qJC9SQzVfRU5DPSAkcmM1X29iai87CglzL15NRDVfQVNNX09CSj0uKiQvTUQ1X0FTTV9PQko9ICRtZDVfb2JqLzsKCXMvXlNIQTFfQVNNX09CSj0uKiQvU0hBMV9BU01fT0JKPSAkc2hhMV9vYmovOwoJcy9eUk1EMTYwX0FTTV9PQko9LiokL1JNRDE2MF9BU01fT0JKPSAkcm1kMTYwX29iai87CglzL15XUF9BU01fT0JKPS4qJC9XUF9BU01fT0JKPSAkd3Bfb2JqLzsKCXMvXkNNTExfRU5DPS4qJC9DTUxMX0VOQz0gJGNtbGxfb2JqLzsKCXMvXk1PREVTX0FTTV9PQkouPSokL01PREVTX0FTTV9PQko9ICRtb2Rlc19vYmovOwoJcy9eRU5HSU5FU19BU01fT0JKLj0qJC9FTkdJTkVTX0FTTV9PQko9ICRlbmdpbmVzX29iai87CglzL15QRVJMQVNNX1NDSEVNRT0uKiQvUEVSTEFTTV9TQ0hFTUU9ICRwZXJsYXNtX3NjaGVtZS87CglzL15QUk9DRVNTT1I9LiovUFJPQ0VTU09SPSAkcHJvY2Vzc29yLzsKCXMvXkFSRkxBR1M9LiovQVJGTEFHUz0gJGFyZmxhZ3MvOwoJcy9eUEVSTD0uKi9QRVJMPSAkcGVybC87CglzL15LUkI1X0lOQ0xVREVTPS4qL0tSQjVfSU5DTFVERVM9JHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifS87CglzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKCXMvXkxJQlpMSUI9LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOwoJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKCXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CglzL15GSVBTQ0FOTElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKCXMvXlNIQVJFRF9GSVBTPS4qL1NIQVJFRF9GSVBTPS87CglzL15TSExJQkRJUlM9LiovU0hMSUJESVJTPSBjcnlwdG8gc3NsLzsKCXMvXkZJUFNDQU5JU1RFUklOVEVSTkFMPS4qL0ZJUFNDQU5JU1RFUklOVEVSTkFMPSRmaXBzY2FuaXN0ZXJpbnRlcm5hbC87CglzL15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOwoJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CglzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwoJaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LmR5bGliLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5cJChTSExJQl9NQUpPUikuZHlsaWIgLmR5bGliLzsKCQl9CglzL15TSEFSRURfTERGTEFHUz0uKi9TSEFSRURfTERGTEFHUz0kc2hhcmVkX2xkZmxhZy87CglpZiAoJGZpcHNjYW5pc3Rlcm9ubHkgJiYgZXhpc3RzICRkaXNhYmxlZHsiZWMybSJ9KQoJCXsKCQluZXh0IGlmICgvZWMyXy8gfHwgL2JuX2dmMm0vKTsKCQl9CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiRUNfQVNNICAgICAgICA9JGVjX29ialxuIjsKcHJpbnQgIkRFU19FTkMgICAgICAgPSRkZXNfb2JqXG4iOwpwcmludCAiQUVTX0VOQyAgICAgICA9JGFlc19vYmpcbiI7CnByaW50ICJCRl9FTkMgICAgICAgID0kYmZfb2JqXG4iOwpwcmludCAiQ0FTVF9FTkMgICAgICA9JGNhc3Rfb2JqXG4iOwpwcmludCAiUkM0X0VOQyAgICAgICA9JHJjNF9vYmpcbiI7CnByaW50ICJSQzVfRU5DICAgICAgID0kcmM1X29ialxuIjsKcHJpbnQgIk1ENV9PQkpfQVNNICAgPSRtZDVfb2JqXG4iOwpwcmludCAiU0hBMV9PQkpfQVNNICA9JHNoYTFfb2JqXG4iOwpwcmludCAiUk1EMTYwX09CSl9BU009JHJtZDE2MF9vYmpcbiI7CnByaW50ICJDTUxMX0VOQyAgICAgID0kY21sbF9vYmpcbiI7CnByaW50ICJNT0RFU19PQkogICAgID0kbW9kZXNfb2JqXG4iOwpwcmludCAiRU5HSU5FU19PQkogICA9JGVuZ2luZXNfb2JqXG4iOwpwcmludCAiUFJPQ0VTU09SICAgICA9JHByb2Nlc3NvclxuIjsKcHJpbnQgIlJBTkxJQiAgICAgICAgPSRyYW5saWJcbiI7CnByaW50ICJBUkZMQUdTICAgICAgID0kYXJmbGFnc1xuIjsKcHJpbnQgIlBFUkwgICAgICAgICAgPSRwZXJsXG4iOwpwcmludCAiS1JCNV9JTkNMVURFUyA9Iiwkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LCJcbiIKCWlmICR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gbmUgIiI7CgpteSAkZGVzX3B0cj0wOwpteSAkZGVzX3Jpc2MxPTA7Cm15ICRkZXNfcmlzYzI9MDsKbXkgJGRlc191bnJvbGw9MDsKbXkgJGJuX2xsPTA7Cm15ICRkZWZfaW50PTI7Cm15ICRyYzRfaW50PSRkZWZfaW50OwpteSAkbWQyX2ludD0kZGVmX2ludDsKbXkgJGlkZWFfaW50PSRkZWZfaW50OwpteSAkcmMyX2ludD0kZGVmX2ludDsKbXkgJHJjNF9pZHg9MDsKbXkgJHJjNF9jaHVuaz0wOwpteSAkYmZfcHRyPTA7Cm15IEB0eXBlPSgiY2hhciIsInNob3J0IiwiaW50IiwibG9uZyIpOwpteSAoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKTsKbXkgJGV4cG9ydF92YXJfYXNfZm49MDsKCm15ICRkZXNfaW50OwoKZm9yZWFjaCAoc29ydCBzcGxpdCgvXHMrLywkYm5fb3BzKSkKCXsKCSRkZXNfcHRyPTEgaWYgL0RFU19QVFIvOwoJJGRlc19yaXNjMT0xIGlmIC9ERVNfUklTQzEvOwoJJGRlc19yaXNjMj0xIGlmIC9ERVNfUklTQzIvOwoJJGRlc191bnJvbGw9MSBpZiAvREVTX1VOUk9MTC87CgkkZGVzX2ludD0xIGlmIC9ERVNfSU5ULzsKCSRibl9sbD0xIGlmIC9CTl9MTE9ORy87CgkkcmM0X2ludD0wIGlmIC9SQzRfQ0hBUi87CgkkcmM0X2ludD0zIGlmIC9SQzRfTE9ORy87CgkkcmM0X2lkeD0xIGlmIC9SQzRfSU5ERVgvOwoJJHJjNF9jaHVuaz0xIGlmIC9SQzRfQ0hVTksvOwoJJHJjNF9jaHVuaz0yIGlmIC9SQzRfQ0hVTktfTEwvOwoJJG1kMl9pbnQ9MCBpZiAvTUQyX0NIQVIvOwoJJG1kMl9pbnQ9MyBpZiAvTUQyX0xPTkcvOwoJJGlkZWFfaW50PTEgaWYgL0lERUFfU0hPUlQvOwoJJGlkZWFfaW50PTMgaWYgL0lERUFfTE9ORy87CgkkcmMyX2ludD0xIGlmIC9SQzJfU0hPUlQvOwoJJHJjMl9pbnQ9MyBpZiAvUkMyX0xPTkcvOwoJJGJmX3B0cj0xIGlmICRfIGVxICJCRl9QVFIiOwoJJGJmX3B0cj0yIGlmICRfIGVxICJCRl9QVFIyIjsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDEsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMSwwLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVRfTE9ORy87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKSBpZiAvVEhJUlRZX1RXT19CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDEsMCkgaWYgL1NJWFRFRU5fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwwLDEpIGlmIC9FSUdIVF9CSVQvOwoJJGV4cG9ydF92YXJfYXNfZm49MSBpZiAvRVhQT1JUX1ZBUl9BU19GTi87Cgl9CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2xjb25mLmguaW4nKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIGNyeXB0by9vcGVuc3NsY29uZi5oLmluOiQhXG4iOwp1bmxpbmsoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iIGlmIC1lICJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciOwpvcGVuKE9VVCwnPmNyeXB0by9vcGVuc3NsY29uZi5oLm5ldycpIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiI7CnByaW50IE9VVCAiLyogb3BlbnNzbGNvbmYuaCAqL1xuIjsKcHJpbnQgT1VUICIvKiBXQVJOSU5HOiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG9wZW5zc2xjb25mLmguaW4gYnkgQ29uZmlndXJlLiAqL1xuXG4iOwoKcHJpbnQgT1VUICIjaWZkZWYgIF9fY3BsdXNwbHVzXG4iOwpwcmludCBPVVQgImV4dGVybiBcIkNcIiB7XG4iOwpwcmludCBPVVQgIiNlbmRpZlxuIjsKcHJpbnQgT1VUICIvKiBPcGVuU1NMIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOiAqL1xuIjsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfTk9fKC4qKS8jaWZuZGVmIE9QRU5TU0xfRVhQRVJJTUVOVEFMXyQxXG4jIGlmbmRlZiBPUEVOU1NMX05PXyQxXG4jICBkZWZpbmUgT1BFTlNTTF9OT18kMVxuIyBlbmRpZlxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF8oLiopLyMgaWYgZGVmaW5lZChPUEVOU1NMXyQxKSBcJlwmICFkZWZpbmVkKCQxKVxuIyAgZGVmaW5lICQxXG4jIGVuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9ICIgICAvKiBubyBjaXBoZXJzIGV4Y2x1ZGVkICovXG4iIGlmICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIGVxICIiOwokb3BlbnNzbF90aHJlYWRfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9zeXNfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9vdGhlcl9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CnByaW50IE9VVCAkb3BlbnNzbF9zeXNfZGVmaW5lczsKcHJpbnQgT1VUICIjaWZuZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORFxuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7CnByaW50IE9VVCAiXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CnByaW50IE9VVCAiXG4jZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovXG5cbiI7CnByaW50IE9VVCAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKcHJpbnQgT1VUICRvcGVuc3NsX290aGVyX2RlZmluZXMsIlxuIjsKCnByaW50IE9VVCAiLyogVGhlIE9QRU5TU0xfTk9fKiBtYWNyb3MgYXJlIGFsc28gZGVmaW5lZCBhcyBOT18qIGlmIHRoZSBhcHBsaWNhdGlvblxuIjsKcHJpbnQgT1VUICIgICBhc2tzIGZvciBpdC4gIFRoaXMgaXMgYSB0cmFuc2llbnQgZmVhdHVyZSB0aGF0IGlzIHByb3ZpZGVkIGZvciB0aG9zZVxuIjsKcHJpbnQgT1VUICIgICB3aG8gaGF2ZW4ndCBoYWQgdGhlIHRpbWUgdG8gZG8gdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlaXJcbiI7CnByaW50IE9VVCAiICAgYXBwbGljYXRpb25zLiAgKi9cbiI7CnByaW50IE9VVCAiI2lmZGVmIE9QRU5TU0xfQUxHT1JJVEhNX0RFRklORVNcbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFuczsKcHJpbnQgT1VUICIjZW5kaWZcblxuIjsKCnByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX0NQVUlEX09CSlxuXG4iIGlmICgkY3B1aWRfb2JqIG5lICJtZW1fY2xyLm8iKTsKCndoaWxlICg8SU4+KQoJewoJaWYJKC9eI2RlZmluZVxzK09QRU5TU0xESVIvKQoJCXsKCQlteSAkZm9vID0gJG9wZW5zc2xkaXI7CgkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKCQlwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTERJUiBcIiRmb29cIlxuIjsKCQl9CgllbHNpZgkoL14jZGVmaW5lXHMrRU5HSU5FU0RJUi8pCgkJewoJCW15ICRmb28gPSAiJHByZWZpeC8kbGliZGlyL2VuZ2luZXMiOwoJCSRmb28gPX4gcy9cXC9cXFxcL2c7CgkJcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkZm9vXCJcbiI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK09QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTi8pCgkJeyBwcmludGYgT1VUICIjdW5kZWYgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OXG4iCgkJCWlmICRleHBvcnRfdmFyX2FzX2ZuOwoJCSAgcHJpbnRmIE9VVCAiIyVzIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIiwKCQkJKCRleHBvcnRfdmFyX2FzX2ZuKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrT1BFTlNTTF9VTklTVEQvKQoJCXsKCQkkdW5pc3RkID0gIjx1bmlzdGQuaD4iIGlmICR1bmlzdGQgZXEgIiI7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xfVU5JU1REICR1bmlzdGRcbiI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklUX0xPTkcvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUX0xPTkdcbiIsKCRiNjRsKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVFlfRk9VUl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUXG4iLCgkYjY0KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrVEhJUlRZX1RXT19CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFRISVJUWV9UV09fQklUXG4iLCgkYjMyKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVEVFTl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRFRU5fQklUXG4iLCgkYjE2KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrRUlHSFRfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBFSUdIVF9CSVRcbiIsKCRiOCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0JOX0xMT05HXHMqJC8pCgkJeyBwcmludGYgT1VUICIjJXMgQk5fTExPTkdcbiIsKCRibl9sbCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eXCNkZWZpbmVccytERVNfTE9OR1xzKy4qLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgREVTX0xPTkcgdW5zaWduZWQgJXNcbiIsCgkJCSgkZGVzX2ludCk/J2ludCc6J2xvbmcnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1BUUi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1BUUlxuIiwoJGRlc19wdHIpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzEvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMVxuIiwoJGRlc19yaXNjMSk/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19SSVNDMi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1JJU0MyXG4iLCgkZGVzX3Jpc2MyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1VOUk9MTC8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1VOUk9MTFxuIiwoJGRlc191bnJvbGwpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytSQzRfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzRfaW50XTsgfQoJZWxzaWYJKC9eI3VuZGVmXHMrUkM0X0NIVU5LLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIFJDNF9DSFVOS1xuIiBpZiAkcmM0X2NodW5rPT0wOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0NIVU5LIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrUkM0X0lOREVYLykKCQl7IHByaW50ZiBPVVQgIiMlcyBSQzRfSU5ERVhcbiIsKCRyYzRfaWR4KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytJMzg2X09OTFkvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEkzODZfT05MWVxuIiwgKCRwcm9jZXNzb3IgZXEgIjM4NiIpPwoJCQkiZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrTUQyX0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgTUQyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskbWQyX2ludF07IH0KCWVsc2lmCSgvXiNkZWZpbmVccytJREVBX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBJREVBX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskaWRlYV9pbnRdO30KCWVsc2lmCSgvXiNkZWZpbmVccytSQzJfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIFJDMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJHJjMl9pbnRdO30KCWVsc2lmICgvXiMoZGVmaW5lfHVuZGVmKVxzK0JGX1BUUi8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAwOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMTsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUjJcbiIgaWYgJGJmX3B0ciA9PSAyOwoJICAgICAgICB9CgllbHNlCgkJeyBwcmludCBPVVQgJF87IH0KCX0KY2xvc2UoSU4pOwpwcmludCBPVVQgIiNpZmRlZiAgX19jcGx1c3BsdXNcbiI7CnByaW50IE9VVCAifVxuIjsKcHJpbnQgT1VUICIjZW5kaWZcbiI7CmNsb3NlKE9VVCk7CnJlbmFtZSgiY3J5cHRvL29wZW5zc2xjb25mLmgiLCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgY3J5cHRvL29wZW5zc2xjb25mLmhcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oIjsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciLCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXdcbiI7CgoKIyBGaXggdGhlIGRhdGUKCnByaW50ICJTSVhUWV9GT1VSX0JJVF9MT05HIG1vZGVcbiIgaWYgJGI2NGw7CnByaW50ICJTSVhUWV9GT1VSX0JJVCBtb2RlXG4iIGlmICRiNjQ7CnByaW50ICJUSElSVFlfVFdPX0JJVCBtb2RlXG4iIGlmICRiMzI7CnByaW50ICJTSVhURUVOX0JJVCBtb2RlXG4iIGlmICRiMTY7CnByaW50ICJFSUdIVF9CSVQgbW9kZVxuIiBpZiAkYjg7CnByaW50ICJERVNfUFRSIHVzZWRcbiIgaWYgJGRlc19wdHI7CnByaW50ICJERVNfUklTQzEgdXNlZFxuIiBpZiAkZGVzX3Jpc2MxOwpwcmludCAiREVTX1JJU0MyIHVzZWRcbiIgaWYgJGRlc19yaXNjMjsKcHJpbnQgIkRFU19VTlJPTEwgdXNlZFxuIiBpZiAkZGVzX3Vucm9sbDsKcHJpbnQgIkRFU19JTlQgdXNlZFxuIiBpZiAkZGVzX2ludDsKcHJpbnQgIkJOX0xMT05HIG1vZGVcbiIgaWYgJGJuX2xsOwpwcmludCAiUkM0IHVzZXMgdSR0eXBlWyRyYzRfaW50XVxuIiBpZiAkcmM0X2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIlJDNF9JTkRFWCBtb2RlXG4iIGlmICRyYzRfaWR4OwpwcmludCAiUkM0X0NIVU5LIGlzIHVuZGVmaW5lZFxuIiBpZiAkcmM0X2NodW5rPT0wOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKcHJpbnQgIk1EMiB1c2VzIHUkdHlwZVskbWQyX2ludF1cbiIgaWYgJG1kMl9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJJREVBIHVzZXMgdSR0eXBlWyRpZGVhX2ludF1cbiIgaWYgJGlkZWFfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkMyIHVzZXMgdSR0eXBlWyRyYzJfaW50XVxuIiBpZiAkcmMyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIkJGX1BUUiB1c2VkXG4iIGlmICRiZl9wdHIgPT0gMTsKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7CgppZigkSXNNSzFNRikgewoJb3BlbiAoT1VULCI+Y3J5cHRvL2J1aWxkaW5mLmgiKSB8fCBkaWUgIkNhbid0IG9wZW4gYnVpbGRpbmYuaCI7CglwcmludGYgT1VUIDw8RU9GOwojaWZuZGVmIE1LMU1GX0JVSUxECiAgLyogYXV0by1nZW5lcmF0ZWQgYnkgQ29uZmlndXJlIGZvciBjcnlwdG8vY3ZlcnNpb24uYzoKICAgKiBmb3IgVW5peCBidWlsZHMsIGNyeXB0by9NYWtlZmlsZS5zc2wgZ2VuZXJhdGVzIGZ1bmN0aW9uYWwgZGVmaW5pdGlvbnM7CiAgICogV2luZG93cyBidWlsZHMgKGFuZCBvdGhlciBtazFtZiBidWlsZHMpIGNvbXBpbGUgY3ZlcnNpb24uYyB3aXRoCiAgICogLURNSzFNRl9CVUlMRCBhbmQgdXNlIGRlZmluaXRpb25zIGFkZGVkIHRvIHRoaXMgZmlsZSBieSB1dGlsL21rMW1mLnBsLiAqLwogICNlcnJvciAiV2luZG93cyBidWlsZHMgKFBMQVRGT1JNPSR0YXJnZXQpIHVzZSBtazFtZi5wbC1jcmVhdGVkIE1ha2VmaWxlcyIKI2VuZGlmCkVPRgoJY2xvc2UoT1VUKTsKfSBlbHNlIHsKCW15ICRtYWtlX2NvbW1hbmQgPSAiJG1ha2UgUEVSTD1cJyRwZXJsXCciOwoJbXkgJG1ha2VfdGFyZ2V0cyA9ICIiOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGxpbmtzIiBpZiAkc3ltbGluazsKCSRtYWtlX3RhcmdldHMgLj0gIiBkZXBlbmQiIGlmICRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAkbWFrZV9kZXBlbmQ7CgkkbWFrZV90YXJnZXRzIC49ICIgZ2VudGVzdHMiIGlmICRzeW1saW5rOwoJKHN5c3RlbSAkbWFrZV9jb21tYW5kLiRtYWtlX3RhcmdldHMpID09IDAgb3IgZGllICJtYWtlICRtYWtlX3RhcmdldHMgZmFpbGVkIgoJCWlmICRtYWtlX3RhcmdldHMgbmUgIiI7CglpZiAoICRmaXBzY2FuaXN0ZXJvbmx5ICkKCQl7fQoJZWxzaWYgKCAkcGVybCA9fiBtQF4vQCkgewoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwkcGVybCwnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnLCAnXm15IFwkcHJlZml4OyQnLCAnbXkgJHByZWZpeCA9ICInIC4gJHByZWZpeCAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7JywgICdebXkgXCRwcmVmaXg7JCcsICdteSAkcHJlZml4ID0gIicgLiAkcHJlZml4IC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCAmJiAhJGZpcHNjYW5pc3Rlcm9ubHkpIHsKCQlwcmludCA8PEVPRjsKClNpbmNlIHlvdSd2ZSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IGxlYXN0IG9uZSBhbGdvcml0aG0sIHlvdSBuZWVkIHRvIGRvCnRoZSBmb2xsb3dpbmcgYmVmb3JlIGJ1aWxkaW5nOgoKCW1ha2UgZGVwZW5kCkVPRgoJfQp9CgojIGNyZWF0ZSB0aGUgbXMvdmVyc2lvbjMyLnJjIGZpbGUgaWYgbmVlZGVkCmlmICgkSXNNSzFNRiAmJiAoJHRhcmdldCAhfiAvXm5ldHdhcmUvKSkgewoJbXkgKCR2MSwgJHYyLCAkdjMsICR2NCk7CglpZiAoJHZlcnNpb25fbnVtID1+IC8oXlswLTlhLWZdezF9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KS9pKSB7CgkJJHYxPWhleCAkMTsKCQkkdjI9aGV4ICQyOwoJCSR2Mz1oZXggJDM7CgkJJHY0PWhleCAkNDsKCX0KCW9wZW4gKE9VVCwiPm1zL3ZlcnNpb24zMi5yYyIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiBtcy92ZXJzaW9uMzIucmMiOwoJcHJpbnQgT1VUIDw8RU9GOwojaW5jbHVkZSA8d2ludmVyLmg+CgpMQU5HVUFHRSAweDA5LDB4MDEKCjEgVkVSU0lPTklORk8KICBGSUxFVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBQUk9EVUNUVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKICBGSUxFRkxBR1MgMHgwMUwKI2Vsc2UKICBGSUxFRkxBR1MgMHgwMEwKI2VuZGlmCiAgRklMRU9TIFZPU19fV0lORE9XUzMyCiAgRklMRVRZUEUgVkZUX0RMTAogIEZJTEVTVUJUWVBFIDB4MEwKQkVHSU4KICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKICAgIEJFR0lOCglCTE9DSyAiMDQwOTA0YjAiCglCRUdJTgojaWYgZGVmaW5lZChGSVBTKQoJICAgIFZBTFVFICJDb21tZW50cyIsICJXQVJOSU5HOiBURVNUIFZFUlNJT04gT05MWSAqKipOT1QqKiogRklQUyAxNDAtMiBWQUxJREFURUQuXFwwIgojZW5kaWYKCSAgICAvLyBSZXF1aXJlZDoKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCiNpZiBkZWZpbmVkKEZJUFMpCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJURVNUIFVOVkFMSURBVEVEIEZJUFMxNDAtMiBETExcXDAiCiNlbHNlCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgojZW5kaWYKCSAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAiJHZlcnNpb25cXDAiCiNpZiBkZWZpbmVkKENSWVBUTykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYmVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmVheTMyLmRsbFxcMCIKI2VsaWYgZGVmaW5lZChTU0wpCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJzc2xlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJzc2xlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYm9zc2xmaXBzXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYm9zc2xmaXBzLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQoKcHJpbnQgPDxFT0Y7CgpDb25maWd1cmVkIGZvciAkdGFyZ2V0LgpFT0YKCnByaW50IDw8XEVPRiBpZiAoISRub190aHJlYWRzICYmICEkdGhyZWFkcyk7CgpUaGUgbGlicmFyeSBjb3VsZCBub3QgYmUgY29uZmlndXJlZCBmb3Igc3VwcG9ydGluZyBtdWx0aS10aHJlYWRlZAphcHBsaWNhdGlvbnMgYXMgdGhlIGNvbXBpbGVyIG9wdGlvbnMgcmVxdWlyZWQgb24gdGhpcyBzeXN0ZW0gYXJlIG5vdCBrbm93bi4KU2VlIGZpbGUgSU5TVEFMTCBmb3IgZGV0YWlscyBpZiB5b3UgbmVlZCBtdWx0aS10aHJlYWRpbmcuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICgkbm9fc2hhcmVkX3dhcm4pOwoKWW91IGdhdmUgdGhlIG9wdGlvbiAnc2hhcmVkJy4gIE5vcm1hbGx5LCB0aGF0IHdvdWxkIGdpdmUgeW91IHNoYXJlZCBsaWJyYXJpZXMuClVuZm9ydHVuYXRlbHksIHRoZSBPcGVuU1NMIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbmNsdWRlIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQKZm9yIHRoaXMgcGxhdGZvcm0geWV0LCBzbyBpdCB3aWxsIHByZXRlbmQgeW91IGdhdmUgdGhlIG9wdGlvbiAnbm8tc2hhcmVkJy4gIElmCnlvdSBjYW4gaW5mb3JtIHRoZSBkZXZlbG9wcGVycyAob3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnKSBob3cgdG8gc3VwcG9ydCBzaGFyZWQKbGlicmFyaWVzIG9uIHRoaXMgcGxhdGZvcm0sIHRoZXkgd2lsbCBhdCBsZWFzdCBsb29rIGF0IGl0IGFuZCB0cnkgdGhlaXIgYmVzdAooYnV0IHBsZWFzZSBmaXJzdCBtYWtlIHN1cmUgeW91IGhhdmUgdHJpZWQgd2l0aCBhIGN1cnJlbnQgdmVyc2lvbiBvZiBPcGVuU1NMKS4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpOwoKV0FSTklORzogT3BlblNTTCBoYXMgYmVlbiBjb25maWd1cmVkIHVzaW5nIHVuc3VwcG9ydGVkIG9wdGlvbihzKSB0byBpbnRlcm5hbGx5CmdlbmVyYXRlIGEgZmlwc2NhbmlzdGVyLm8gb2JqZWN0IG1vZHVsZSBmb3IgVEVTVElORyBQVVJQT1NFUyBPTkxZOyB0aGF0CmNvbXBpbGVkIG1vZHVsZSBpcyBOT1QgRklQUyAxNDAtMiB2YWxpZGF0ZWQgYW5kIENBTk5PVCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlCk9wZW5TU0wgRklQUyBPYmplY3QgTW9kdWxlIGFzIGlkZW50aWZpZWQgYnkgdGhlIENNVlAKKGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsLykgaW4gYW55IGFwcGxpY2F0aW9uIHJlcXVpcmluZyB0aGUgdXNlIG9mIEZJUFMKMTQwLTIgdmFsaWRhdGVkIHNvZnR3YXJlLgoKVGhpcyBpcyBhIHRlc3QgT3BlblNTTCAyLjAgRklQUyBtb2R1bGUuCgpTZWUgdGhlIGZpbGUgUkVBRE1FLkZJUFMgZm9yIGRldGFpbHMgb2YgaG93IHRvIGJ1aWxkIGEgdGVzdCBsaWJyYXJ5LgoKRU9GCgpleGl0KDApOwoKc3ViIHVzYWdlCgl7CglwcmludCBTVERFUlIgJHVzYWdlOwoJcHJpbnQgU1RERVJSICJcbnBpY2sgb3MvY29tcGlsZXIgZnJvbTpcbiI7CglteSAkaj0wOwoJbXkgJGk7CiAgICAgICAgbXkgJGs9MDsKCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgPX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSAhfiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9CglwcmludCBTVERFUlIgIlxuXG5OT1RFOiBJZiBpbiBkb3VidCwgb24gVW5peC1pc2ggc3lzdGVtcyB1c2UgJy4vY29uZmlnJy5cbiI7CglleGl0KDEpOwoJfQoKc3ViIHdoaWNoCgl7CglteSgkbmFtZSk9QF87CglteSAkcGF0aDsKCWZvcmVhY2ggJHBhdGggKHNwbGl0IC86LywgJEVOVntQQVRIfSkKCQl7CgkJaWYgKC1mICIkcGF0aC8kbmFtZSRleGVfZXh0IiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lJGV4ZV9leHQiIHVubGVzcyAoJG5hbWUgZXEgInBlcmwiIGFuZAoJCQkgc3lzdGVtKCIkcGF0aC8kbmFtZSRleGVfZXh0IC1lICIgLiAnXCdleGl0KCRdPDUuMCk7XCcnKSk7CgkJCX0KCQl9Cgl9CgpzdWIgZG9maWxlCgl7CglteSAkZjsgbXkgJHA7IG15ICVtOyBteSBAYTsgbXkgJGs7IG15ICRmZjsKCSgkZiwkcCwlbSk9QF87CgoJb3BlbihJTiwiPCRmLmluIikgfHwgb3BlbihJTiwiPCRmIikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZjokIVxuIjsKCUBhPTxJTj47CgljbG9zZShJTik7Cglmb3JlYWNoICRrIChrZXlzICVtKQoJCXsKCQlncmVwKC8kay8gJiYgKCRfPXNwcmludGYoJG17JGt9LiJcbiIsJHApKSxAYSk7CgkJfQoJb3BlbihPVVQsIj4kZi5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmLm5ldzokIVxuIjsKCXByaW50IE9VVCBAYTsKCWNsb3NlKE9VVCk7CglyZW5hbWUoJGYsIiRmLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZlxuIiBpZiAtZSAkZjsKCXJlbmFtZSgiJGYubmV3IiwkZikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmLm5ld1xuIjsKCX0KCnN1YiBwcmludF90YWJsZV9lbnRyeQoJewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoKCW15ICgkY2MsICRjZmxhZ3MsICR1bmlzdGQsICR0aHJlYWRfY2ZsYWcsICRzeXNfaWQsICRsZmxhZ3MsCgkgICAgJGJuX29wcywgJGNwdWlkX29iaiwgJGJuX29iaiwgJGVjX29iaiwgJGRlc19vYmosICRhZXNfb2JqLCAkYmZfb2JqLAoJICAgICRtZDVfb2JqLCAkc2hhMV9vYmosICRjYXN0X29iaiwgJHJjNF9vYmosICRybWQxNjBfb2JqLAoJICAgICRyYzVfb2JqLCAkd3Bfb2JqLCAkY21sbF9vYmosICRtb2Rlc19vYmosICRlbmdpbmVzX29iaiwKCSAgICAkcGVybGFzbV9zY2hlbWUsICRkc29fc2NoZW1lLCAkc2hhcmVkX3RhcmdldCwgJHNoYXJlZF9jZmxhZywKCSAgICAkc2hhcmVkX2xkZmxhZywgJHNoYXJlZF9leHRlbnNpb24sICRyYW5saWIsICRhcmZsYWdzLCAkbXVsdGlsaWIpPQoJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoKCXByaW50IDw8RU9GCgoqKiogJHRhcmdldApcJGNjICAgICAgICAgICA9ICRjYwpcJGNmbGFncyAgICAgICA9ICRjZmxhZ3MKXCR1bmlzdGQgICAgICAgPSAkdW5pc3RkClwkdGhyZWFkX2NmbGFnID0gJHRocmVhZF9jZmxhZwpcJHN5c19pZCAgICAgICA9ICRzeXNfaWQKXCRsZmxhZ3MgICAgICAgPSAkbGZsYWdzClwkYm5fb3BzICAgICAgID0gJGJuX29wcwpcJGNwdWlkX29iaiAgICA9ICRjcHVpZF9vYmoKXCRibl9vYmogICAgICAgPSAkYm5fb2JqClwkZWNfb2JqICAgICAgID0gJGVjX29iagpcJGRlc19vYmogICAgICA9ICRkZXNfb2JqClwkYWVzX29iaiAgICAgID0gJGFlc19vYmoKXCRiZl9vYmogICAgICAgPSAkYmZfb2JqClwkbWQ1X29iaiAgICAgID0gJG1kNV9vYmoKXCRzaGExX29iaiAgICAgPSAkc2hhMV9vYmoKXCRjYXN0X29iaiAgICAgPSAkY2FzdF9vYmoKXCRyYzRfb2JqICAgICAgPSAkcmM0X29iagpcJHJtZDE2MF9vYmogICA9ICRybWQxNjBfb2JqClwkcmM1X29iaiAgICAgID0gJHJjNV9vYmoKXCR3cF9vYmogICAgICAgPSAkd3Bfb2JqClwkY21sbF9vYmogICAgID0gJGNtbGxfb2JqClwkbW9kZXNfb2JqICAgID0gJG1vZGVzX29iagpcJGVuZ2luZXNfb2JqICA9ICRlbmdpbmVzX29iagpcJHBlcmxhc21fc2NoZW1lID0gJHBlcmxhc21fc2NoZW1lClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKXCRtdWx0aWxpYiAgICAgPSAkbXVsdGlsaWIKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lKzFdID1+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgZm9sbG93aW5nIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSAhfiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2Jlb3MnLCAnZGwnLCAnZGxmY24nLCAnd2luMzInIGFuZCAndm1zJ1xuIjsKCQkJfQoJCX0KCXByaW50IFNUREVSUiAiTm8gc2FuaXR5IGVycm9ycyBkZXRlY3RlZCFcbiIgaWYgJGVycm9yY250ID09IDA7CglyZXR1cm4gJGVycm9yY250OwoJfQo=