OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1MeHh4XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tuby1dc2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW25vLWFzbV0gW25vLWRzb10gW25vLWtyYjVdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJUl0gWy0td2l0aC14eHhbPXZ2dl1dIFstLXRlc3Qtc2FuaXR5XSBvcy9jb21waWxlcls6ZmxhZ3NdXG4iOwoKIyBPcHRpb25zOgojCiMgLS1vcGVuc3NsZGlyICBpbnN0YWxsIE9wZW5TU0wgaW4gT1BFTlNTTERJUiAoRGVmYXVsdDogRElSL3NzbCBpZiB0aGUKIyAgICAgICAgICAgICAgIC0tcHJlZml4IG9wdGlvbiBpcyBnaXZlbjsgL3Vzci9sb2NhbC9zc2wgb3RoZXJ3aXNlKQojIC0tcHJlZml4ICAgICAgcHJlZml4IGZvciB0aGUgT3BlblNTTCBpbmNsdWRlLCBsaWIgYW5kIGJpbiBkaXJlY3RvcmllcwojICAgICAgICAgICAgICAgKERlZmF1bHQ6IHRoZSBPUEVOU1NMRElSIGRpcmVjdG9yeSkKIwojIC0taW5zdGFsbF9wcmVmaXggIEFkZGl0aW9uYWwgcHJlZml4IGZvciBwYWNrYWdlIGJ1aWxkZXJzIChlbXB0eSBieQojICAgICAgICAgICAgICAgZGVmYXVsdCkuICBUaGlzIG5lZWRuJ3QgYmUgc2V0IGluIGFkdmFuY2UsIHlvdSBjYW4KIyAgICAgICAgICAgICAgIGp1c3QgYXMgd2VsbCB1c2UgIm1ha2UgSU5TVEFMTF9QUkVGSVg9L3doYXRldmVyIGluc3RhbGwiLgojCiMgLS13aXRoLWtyYjUtZGlyICBEZWNsYXJlIHdoZXJlIEtlcmJlcm9zIDUgbGl2ZXMuICBUaGUgbGlicmFyaWVzIGFyZSBleHBlY3RlZAojCQl0byBsaXZlIGluIHRoZSBzdWJkaXJlY3RvcnkgbGliLyBhbmQgdGhlIGhlYWRlciBmaWxlcyBpbgojCQlpbmNsdWRlLy4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMgLS13aXRoLWtyYjUtbGliICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGxpYnJhcmllcyBsaXZlLiAgQSB2YWx1ZSBpcwojCQlyZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2xpYikKIyAtLXdpdGgta3JiNS1pbmNsdWRlICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGhlYWRlciBmaWxlcyBsaXZlLiAgQQojCQl2YWx1ZSBpcyByZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2luY2x1ZGUpCiMgLS13aXRoLWtyYjUtZmxhdm9yICBEZWNsYXJlIHdoYXQgZmxhdm9yIG9mIEtlcmJlcm9zIDUgaXMgdXNlZC4gIEN1cnJlbnRseQojCQlzdXBwb3J0ZWQgdmFsdWVzIGFyZSAiTUlUIiBhbmQgIkhlaW1kYWwiLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIwojIC0tdGVzdC1zYW5pdHkgTWFrZSBhIG51bWJlciBvZiBzYW5pdHkgY2hlY2tzIG9uIHRoZSBkYXRhIGluIHRoaXMgZmlsZS4KIyAgICAgICAgICAgICAgIFRoaXMgaXMgYSBkZWJ1Z2dpbmcgdG9vbCBmb3IgT3BlblNTTCBkZXZlbG9wZXJzLgojCiMgbm8taHcteHh4ICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUuCiMgICAgICAgICAgICAgICBHZW5lcmljIE9wZW5TU0wtc3R5bGUgbWV0aG9kcyByZWxhdGluZyB0byB0aGlzIHN1cHBvcnQKIyAgICAgICAgICAgICAgIGFyZSBhbHdheXMgY29tcGlsZWQgYnV0IHJldHVybiBOVUxMIGlmIHRoZSBoYXJkd2FyZQojICAgICAgICAgICAgICAgc3VwcG9ydCBpc24ndCBjb21waWxlZC4KIyBuby1odyAgICAgICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIGFueSBjcnlwdG8gaGFyZHdhcmUuCiMgW25vLV10aHJlYWRzICBbZG9uJ3RdIHRyeSB0byBjcmVhdGUgYSBsaWJyYXJ5IHRoYXQgaXMgc3VpdGFibGUgZm9yCiMgICAgICAgICAgICAgICBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucyAoZGVmYXVsdCBpcyAidGhyZWFkcyIgaWYgd2UKIyAgICAgICAgICAgICAgIGtub3cgaG93IHRvIGRvIGl0KQojIFtuby1dc2hhcmVkCVtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIHdoZW4gc3VwcG9ydGVkLgojIG5vLWFzbSAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIKIyBuby1kc28gICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBuYXRpdmUgc2hhcmVkLWxpYnJhcnkgbWV0aG9kcy4gVGhpcwojICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhhdCBhbGwgbWV0aG9kcyBqdXN0IHJldHVybiBOVUxMLgojIG5vLWtyYjUgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IEtSQjUgbGlicmFyeSBvciBjb2RlLgojIFtuby1demxpYiAgICAgW2Rvbid0XSBjb21waWxlIHN1cHBvcnQgZm9yIHpsaWIgY29tcHJlc3Npb24uCiMgemxpYi1keW5hbWljCUxpa2UgInpsaWIiLCBidXQgdGhlIHpsaWIgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSBhIHNoYXJlZAojCQlsaWJyYXJ5IGFuZCB3aWxsIGJlIGxvYWRlZCBpbiBydW4tdGltZSBieSB0aGUgT3BlblNTTCBsaWJyYXJ5LgojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2VsZl9hc209Ing4NmNwdWlkLWVsZi5vOmJuODYtZWxmLm8gY284Ni1lbGYubzpkeDg2LWVsZi5vIHl4ODYtZWxmLm86YXg4Ni1lbGYubzpieDg2LWVsZi5vOm14ODYtZWxmLm86c3g4Ni1lbGYubyBzNTEyc3NlMi1lbGYubzpjeDg2LWVsZi5vOnJ4ODYtZWxmLm86cm04Ni1lbGYubzpyNTg2LWVsZi5vIjsKbXkgJHg4Nl9jb2ZmX2FzbT0ieDg2Y3B1aWQtY29mLm86Ym44Ni1jb2YubyBjbzg2LWNvZi5vOmR4ODYtY29mLm8geXg4Ni1jb2YubzpheDg2LWNvZi5vOmJ4ODYtY29mLm86bXg4Ni1jb2YubzpzeDg2LWNvZi5vIHM1MTJzc2UyLWNvZi5vOmN4ODYtY29mLm86cng4Ni1jb2YubzpybTg2LWNvZi5vOnI1ODYtY29mLm8iOwpteSAkeDg2X291dF9hc209Ing4NmNwdWlkLW91dC5vOmJuODYtb3V0Lm8gY284Ni1vdXQubzpkeDg2LW91dC5vIHl4ODYtb3V0Lm86YXg4Ni1vdXQubzpieDg2LW91dC5vOm14ODYtb3V0Lm86c3g4Ni1vdXQubyBzNTEyc3NlMi1vdXQubzpjeDg2LW91dC5vOnJ4ODYtb3V0Lm86cm04Ni1vdXQubzpyNTg2LW91dC5vIjsKCm15ICR4ODZfNjRfYXNtPSJhbWQ2NGNwdWlkLm86eDg2XzY0LWdjYy5vOjo6Ojo6OnJjNC1hbWQ2NC5vOjoiOwpteSAkaWE2NF9hc209IjppYTY0Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86OjpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86OnJjNC1pYTY0Lm86OiI7CgpteSAkbm9fYXNtPSI6Ojo6Ojo6Ojo6IjsKCiMgQXMgZm9yICRCU0R0aHJlYWRzLiBJZGVhIGlzIHRvIG1haW50YWluICJjb2xsZWN0aXZlIiBzZXQgb2YgZmxhZ3MsCiMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLCAKIyBidXQgaXMgdHJlYXRlZCBkaWZmZXJlbnRseS4gT3BlbkJTRCBleHBhbmRzIGlzIGFzIC1EX1BPU0lYX1RIUkVBRAojIC1sY19yLCB3aGljaCBpcyBzdWZmaWNpZW50LiBGcmVlQlNEIDQueCBleHBhbmRzIGl0IGFzIC1sY19yLAojIHdoaWNoIGhhcyB0byBiZSBhY2NvbXBhbmllZCBieSBleHBsaWNpdCAtRF9USFJFQURfU0FGRSBhbmQKIyBzb21ldGltZXMgLURfUkVFTlRSQU5ULiBGcmVlQlNEIDUueCBleHBhbmRzIGl0IGFzIC1sY19yLCB3aGljaAojIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQ/Cm15ICRCU0R0aHJlYWRzPSItcHRocmVhZCAtRF9USFJFQURfU0FGRSAtRF9SRUVOVFJBTlQiOwoKI2NvbmZpZy1zdHJpbmcJJGNjIDogJGNmbGFncyA6ICR1bmlzdGQgOiAkdGhyZWFkX2NmbGFnIDogJHN5c19pZCA6ICRsZmxhZ3MgOiAkYm5fb3BzIDogJGNwdWlkX29iaiA6ICRibl9vYmogOiAkZGVzX29iaiA6ICRhZXNfb2JqIDogJGJmX29iaiA6ICRtZDVfb2JqIDogJHNoYTFfb2JqIDogJGNhc3Rfb2JqIDogJHJjNF9vYmogOiAkcm1kMTYwX29iaiA6ICRyYzVfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzCgpteSAldGFibGU9KAojIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LAojIGZvcm1hdHRlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgoKCiMiYiIsCQkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfToke3Ribl9tdWx9OjoiLAojImJsLTRjLTJjIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBNRDJfQ0hBUjoke3Ribl9tdWx9OjoiLAojImJsLTRjLXJpIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBSQzRfSU5ERVg6JHt0Ym5fbXVsfTo6IiwKIyJiMi1pcy1yaS1kcCIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czJ9SURFQV9TSE9SVCBSQzRfSU5ERVggREVTX1BUUjoke3Ribl9tdWx9OjoiLAoKIyBPdXIgZGV2ZWxvcG1lbnQgY29uZmlncwoicHVyaWZ5IiwJInB1cmlmeSBnY2M6LWcgLURQVVJJRlkgLVdhbGw6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Ojo6IiwKImRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZ2dkYiAtZzIgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjoodW5rbm93bik6Oi1sZWZlbmNlOjo6OiIsCiJkZWJ1Zy1iZW4iLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6Ojpibjg2LWVsZi5vIGNvODYtZWxmLm8iLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOi1ETF9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtRFBFREFOVElDIC1nIC1tYXJjaD1pNDg2IC1wZWRhbnRpYyAtV3NoYWRvdyAtV2FsbDo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZSIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1nIC1tY3B1PWk0ODYgLXBlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZCIsCiJkZWJ1Zy1zdGV2ZS1saW51eC1wc2V1ZG82NCIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRE9QRU5TU0xfTk9fQVNNIC1nIC1tY3B1PWk0ODYgLVdhbGwgLVdlcnJvciAtV3NoYWRvdyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpTSVhUWV9GT1VSX0JJVDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZi1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20tZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW00ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW00ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMgQmFzaWMgY29uZmlncyB0aGF0IHNob3VsZCB3b3JrIG9uIGFueSAoMzIgYW5kIGxlc3MgYml0KSBib3gKImdjYyIsCQkiZ2NjOi1PMzo6KHVua25vd24pOjo6Qk5fTExPTkc6OjoiLAoiY2MiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyMjI1ZPUyBDb25maWd1cmF0aW9ucwoidm9zLWdjYyIsImdjYzotYiBocHBhMS4xLXN0cmF0dXMtdm9zIC1PMyAtV2FsbCAtV3VuaW5pdGlhbGl6ZWQgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0Q6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKImRlYnVnLXZvcy1nY2MiLCJnY2M6LWIgaHBwYTEuMS1zdHJhdHVzLXZvcyAtTzAgLWcgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCiJ2b3MtdmNjIiwidmNjOi1iIGkzODYtc3RyYXR1cy12b3MgLU8zIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOjoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLXZjYyIsInZjYzotYiBpMzg2LXN0cmF0dXMtdm9zIC1PMCAtZyAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6OiR7bm9fYXNtfTo6Ojo6LnNvOiIsCgojIyMjIFNvbGFyaXMgeDg2IHdpdGggR05VIEMgc2V0dXBzCiMgLURPUEVOU1NMX05PX0lOTElORV9BU00gc3dpdGNoZXMgb2ZmIGlubGluZSBhc3NlbWJsZXIuIFdlIGhhdmUgdG8gZG8gaXQKIyBoZXJlIGJlY2F1c2Ugd2hlbmV2ZXIgR05VIEMgaW5zdGFudGlhdGVzIGFuIGFzc2VtYmxlciB0ZW1wbGF0ZSBpdAojIHN1cnJvdW5kcyBpdCB3aXRoICNBUFAgI05PX0FQUCBjb21tZW50IHBhaXIgd2hpY2ggKGF0IGxlYXN0IFNvbGFyaXMKIyA3X3g4NikgL3Vzci9jY3MvYmluL2FzIGZhaWxzIHRvIGFzc2VtYmxlIHdpdGggIklsbGVnYWwgbW5lbW9uaWMiCiMgZXJyb3IgbWVzc2FnZS4KInNvbGFyaXMteDg2LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW00ODYgLVdhbGwgLURMX0VORElBTiAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjIG1pZ2h0IGFwcGVhciBjb250cm92ZXJzaWFsLCBidXQgbW9kdWxlcyB0YWtlbgojIGZyb20gc3RhdGljIGxpYmdjYyBkbyBub3QgaGF2ZSByZWxvY2F0aW9ucyBhbmQgbGlua2luZyB0aGVtIGludG8gb3VyCiMgc2hhcmVkIG9iamVjdHMgZG9lc24ndCBoYXZlIGFueSBuZWdhdGl2ZSBzaWRlLWVmZmVjdHMuIE9uIHRoZSBjb250cmFyeSwKIyBkb2luZyBzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2NjIHNoYXJlZCBidWlsZCB3aXRoIFN1biBDLiBHaXZlbgojIHRoYXQgZ2NjIGdlbmVyYXRlcyBmYXN0ZXIgY29kZSBbdGhhbmtzIHRvIGlubGluZSBhc3NlbWJsZXJdLCBJIHdvdWxkCiMgYWN0dWFsbHkgcmVjb21tZW5kIHRvIGNvbnNpZGVyIHVzaW5nIGdjYyBzaGFyZWQgYnVpbGQgZXZlbiB3aXRoIHZlbmRvcgojIGNvbXBpbGVyOi0pCiMJCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiJzb2xhcmlzNjQteDg2XzY0LWdjYyIsImdjYzotbTY0IC1PMyAtV2FsbCAtRExfRU5ESUFOIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZCAtc3RhdGljLWxpYmdjYzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiAKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIFN1biBDIHNldHVwcwoic29sYXJpcy14ODYtY2MiLCJjYzotZmFzdCAtTyAtWGE6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXg4Nl82NC1jYyIsImNjOi1mYXN0IC14YXJjaD1hbWQ2NCAteHN0cmNvbnN0IC1YYSAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgQkZfUFRSMiBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD1hbWQ2NCAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBHTlUgQyBzZXR1cHMKInNvbGFyaXMtc3BhcmN2Ny1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1tdjggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLW0zMiBzaG91bGQgYmUgc2FmZSB0byBhZGQgYXMgbG9uZyBhcyBkcml2ZXIgcmVjb2duaXplcyAtbWNwdT11bHRyYXNwYXJjCiJzb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y4cGx1cy5vOjo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1nY2MiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1PMyAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLU8gLWcgLW12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86Ojo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLURQRURBTlRJQyAtTyAtZyAtbWNwdT11bHRyYXNwYXJjIC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV25vLWxvbmctbG9uZyAtRF9fRVhURU5TSU9OU19fIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjhwbHVzLm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86OjptZDUtc3BhcmN2OHBsdXMubzo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y4cGx1cy5vOjo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djkgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6L3Vzci9jY3MvYmluL2FyIHJzIiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteGFyY2g9djggLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86Ojo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjhwbHVzLm86Ojo6bWQ1LXNwYXJjdjhwbHVzLm86Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsIAoKIyMjIyBTdW5PUyBjb25maWdzLCBhc3N1bWluZyBzcGFyYyBmb3IgdGhlIGdjYyBvbmUuCiMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDoke25vX2FzbX06OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMToke25vX2FzbX06OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtY2MiLCAiY2M6LU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246aXJpeC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgSVJJWCA2LnggY29uZmlncwojIE9ubHkgTjMyIGFuZCBONjQgQUJJcyBhcmUgc3VwcG9ydGVkLiBJZiB5b3UgbmVlZCBPMzIgQUJJIGJ1aWxkLCBpbnZva2UKIyAnLi9Db25maWd1cmUgaXJpeC1jYyAtbzMyJyBtYW51YWxseS4KImlyaXgtbWlwczMtZ2NjIiwiZ2NjOi1tYWJpPW4zMiAtbW1pcHMtYXMgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOjptaXBzMy5vOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1taXBzMy1jYyIsICJjYzotbjMyIC1taXBzMyAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6REVTX1BUUiBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOjptaXBzMy5vOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBONjQgQUJJIGJ1aWxkcy4KImlyaXg2NC1taXBzNC1nY2MiLCJnY2M6LW1hYmk9NjQgLW1pcHM0IC1tbWlwcy1hcyAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOjptaXBzMy5vOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4NjQtbWlwczQtY2MiLCAiY2M6LTY0IC1taXBzNCAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6Om1pcHMzLm86Ojo6Ojo6Ojo6ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MyLWdjYyIsImdjYzotbWFyY2g9Mi4wIC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzJXLm86Ojo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMC1jYyIsImNjOitEQXBvcnRhYmxlICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzIubzo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1jYyIsImNjOitERDY0ICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzJXLm86Ojo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBIUC9VWCBJQS02NCB0YXJnZXRzCiJocHV4LWlhNjQtY2MiLCJjYzotQWUgK0REMzIgK08yICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDMyIC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgR0NDIGJ1aWxkcy4uLgoiaHB1eC1pYTY0LWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6aWE2NC5vOjphZXMtaWE2NC5vOjo6c2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vOjo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtaWE2NC1nY2MiLCJnY2M6LW1scDY0IC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LW1scDY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMgTGVnYWN5IEhQVVggOS5YIGNvbmZpZ3MuLi4KImhwdXgtY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVkgLUFlICtFU2xpdCArTzIgLXo6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSFAgTVBFL2lYIGh0dHA6Ly9qYXp6LmV4dGVybmFsLmhwLmNvbS9zcmMvb3BlbnNzbC8KIk1QRS9pWC1nY2MiLAkiZ2NjOi1EX0VORElBTiAtREJOX0RJVjJXIC1PMyAtRF9QT1NJWF9TT1VSQ0UgLURfU09DS0VUX1NPVVJDRSAtSS9TWVNMT0cvUFVCOjoodW5rbm93bik6TVBFOi1ML1NZU0xPRy9QVUIgLWxzeXNsb2cgLWxzb2NrZXQgLWxjdXJzZXM6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6OiIsCgojIERFQyBBbHBoYSBPU0YvMS9UcnU2NCB0YXJnZXRzLgojCiMJIldoYXQncyBpbiBhIG5hbWU/IFRoYXQgd2hpY2ggd2UgY2FsbCBhIHJvc2UKIwkgQnkgYW55IG90aGVyIHdvcmQgd291bGQgc21lbGwgYXMgc3dlZXQuIgojCiMgLSBXaWxsaWFtIFNoYWtlc3BlYXJlLCAiUm9tZW8gJiBKdWxpZXQiLCBBY3QgSUksIHNjZW5lIElJLgojCiMgVGhlcmUncyBhbHNvIGFuIGFsdGVybmF0ZSB0YXJnZXQgYXZhaWxhYmxlICh3aGljaCBgY29uZmlnJyB3aWxsIG5ldmVyCiMgc2VsZWN0KSBjYWxsZWQgYWxwaGEtY2MtcnBhdGguICBUaGlzIHRhcmdldCBidWlsZHMgYW4gUlBBVEggaW50byB0aGUKIyBzaGFyZWQgbGlicmFyaWVzLCB3aGljaCBpcyB2ZXJ5IGNvbnZlbmllbnQgb24gVHJ1NjQgc2luY2UgYmluYXJpZXMKIyBsaW5rZWQgYWdhaW5zdCB0aGF0IHNoYXJlZCBsaWJyYXJ5IHdpbGwgYXV0b21hdGljYWxseSBpbmhlcml0IHRoYXQgUlBBVEgsCiMgYW5kIGhlbmNlIGtub3cgd2hlcmUgdG8gbG9vayBmb3IgdGhlIG9wZW5zc2wgbGlicmFyaWVzLCBldmVuIGlmIHRoZXkncmUgaW4KIyBhbiBvZGQgcGxhY2UuCiMKIyBGb3IgZ2NjLCB0aGUgZm9sbG93aW5nIGdhdmUgYSAlNTAgc3BlZWR1cCBvbiBhIDE2NCBvdmVyIHRoZSAnREVTX0lOVCcgdmVyc2lvbgojCiJvc2YxLWFscGhhLWdjYyIsICJnY2M6LU8zOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoib2ZzMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7bm9fYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7bm9fYXNtfTpkbGZjbjp0cnU2NC1zaGFyZWQ6Ojouc28iLAoiYWxwaGEtY2MtcnBhdGgiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke25vX2FzbX06ZGxmY246dHJ1NjQtc2hhcmVkLXJwYXRoOjo6LnNvIiwKCiMjIyMKIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCiMjIyMKIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmlnIGlzIGZyZWUgdG8KIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOjpsaW51eF9wcGMzMi5vOjo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElBLTMyIHRhcmdldHMuLi4KImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW00ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfSIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtYnBvd2VycGM2NC1saW51eCBpcyB0cmFuc2llbnQgb3B0aW9uLCAtbTY0IHNob3VsZCBiZSB0aGUgb25lIHRvIHVzZS4uLgoibGludXgtcHBjNjQiLAkiZ2NjOi1icG93ZXJwYzY0LWxpbnV4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6OmxpbnV4X3BwYzY0Lm86Ojo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1icG93ZXJwYzY0LWxpbnV4Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWVjYyIsImVjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbCAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgQkZfUFRSMiBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgU1BBUkMgTGludXggc2V0dXBzCiMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CiMgYXNzaXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgoibGludXgtc3BhcmN2OCIsImdjYzotbXY4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIGl0J3MgYSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0CiMgLVdhLC1BdjhwbHVzIHNob3VsZCBkbyB0aGUgdHJpY2sgbm8gbWF0dGVyIHdoYXQuCiJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjhwbHVzLm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86OjptZDUtc3BhcmN2OHBsdXMubzo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Om1kNS1zcGFyY3Y5Lm86Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfSIsCgojIyMjICpCU0QgW2RvIHNlZSBjb21tZW50IGFib3V0ICR7QlNEdGhyZWFkc30gYWJvdmUhXQoiQlNELWdlbmVyaWMzMiIsImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLUJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGwgLWc6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXNwYXJjdjgiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtbXY4IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6bWQ1LXNwYXJjdjkubzo6Ojo6OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHtpYTY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODZfNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtRE1EMzJfUkVHX1Q9aW50IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJic2RpLWVsZi1nY2MiLCAgICAgImdjYzotRFBFUkw1IC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoibmV4dHN0ZXAiLAkiY2M6LU8gLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKIm5leHRzdGVwMy4zIiwJImNjOi1PMyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBOQ1IgTVAtUkFTIFVOSVggdmVyIDAyLjAzLjAxCiJuY3Itc2NkZSIsImNjOi1PNiAtWGEgLUhvZmY9QkVIQVZFRCAtNjg2IC1Id2lkZSAtSGl3OjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsIC1sYzg5OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIFFOWAoicW54NCIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPOjoodW5rbm93bik6Ojoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKInFueDYiLAkiY2M6LURMX0VORElBTiAtRFRFUk1JT1M6Oih1bmtub3duKTo6LWxzb2NrZXQ6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIsCgojIyMjIFNDTy9DYWxkZXJhIHRhcmdldHMuCiMKIyBPcmlnaW5hbGx5IHdlIGhhZCBsaWtlIHVuaXh3YXJlLSosIHVuaXh3YXJlLSotcGVudGl1bSwgdW5peHdhcmUtKi1wNiwgZXRjLgojIE5vdyB3ZSBvbmx5IGhhdmUgYmxlbmRlZCB1bml4d2FyZS0qIGFzIGl0J3MgdGhlIG9ubHkgb25lIHVzZWQgYnkgLi9jb25maWcuCiMgSWYgeW91IHdhbnQgdG8gb3B0aW1pemUgZm9yIHBhcnRpY3VsYXIgbWljcm9hcmNoaXRlY3R1cmUsIGJ5cGFzcyAuL2NvbmZpZwojIGFuZCAnLi9Db25maWd1cmUgdW5peHdhcmUtNyAtS3BlbnRpdW1fcHJvJyBvciB3aGF0ZXZlciBhcHByb3ByaWF0ZS4KIyBOb3RlIHRoYXQgbm90IGFsbCB0YXJnZXRzIGluY2x1ZGUgYXNzZW1ibGVyIHN1cHBvcnQuIE1vc3RseSBiZWNhdXNlIG9mCiMgbGFjayBvZiBtb3RpdmF0aW9uIHRvIHN1cHBvcnQgb3V0LW9mLWRhdGUgcGxhdGZvcm1zIHdpdGggb3V0LW9mLWRhdGUKIyBjb21waWxlciBkcml2ZXJzIGFuZCBhc3NlbWJsZXJzLiBUaW0gUmljZSA8dGltQG11bHRpdGFsZW50cy5uZXQ+IGhhcwojIHBhdGllbnRseSBhc3Npc3RlZCB0byBkZWJ1ZyBtb3N0IG9mIGl0LgojCiMgVW5peFdhcmUgMi4weCBmYWlscyBkZXN0ZXN0IHdpdGggLU8uCiJ1bml4d2FyZS0yLjAiLCJjYzotREZJTElPX0ggLUROT19TVFJJTkdTX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTIuMSIsImNjOi1PIC1ERklMSU9fSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtNyIsImNjOi1PIC1ERklMSU9fSCAtS2FsbG9jYTo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCAke3g4Nl9nY2NfZGVzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnI1LXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoidW5peHdhcmUtNy1nY2MiLCJnY2M6LURMX0VORElBTiAtREZJTElPX0ggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpnbnUtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuVU5JWC04IiwiY2M6LU8gLURGSUxJT19IIC1LYWxsb2NhOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYICR7eDg2X2djY19kZXN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjUtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJPcGVuVU5JWC04LWdjYyIsImdjYzotTyAtREZJTElPX0ggLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1wdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNjbzMtZ2NjIiwgICJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1Ec3NpemVfdD1pbnQgLUROT19TWVNfVU5fSDo6KHVua25vd24pOjotbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLCAjIHRoZSBTQ08gYXNzZW1ibGVyIGRvZXNuJ3Qgc2VlbSB0byBsaWtlIG91ciBhc3NlbWJsZXIgZmlsZXMgLi4uCiMgU0NPIDUgLSBCZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az4gc2F5cyB0aGUgLU8gYnJlYWtzIHRoZSBTQ08gY2MuCiJzY281LWNjIiwgICJjYzotYmVsZjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNjbzUtZ2NjIiwgICJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBJQk0ncyBBSVguCiJhaXgzLWNjIiwgICJjYzotTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6OiIsCiJhaXgtZ2NjIiwgICJnY2M6LU8gLURCX0VORElBTjo6LURfVEhSRUFEX1NBRkU6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6YWl4X3BwYzMyLm86Ojo6Ojo6Ojo6ZGxmY246IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6LXF0aHJlYWRlZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjphaXhfcHBjMzIubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotcTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCAzMiIsCiJhaXg2NC1jYyIsICJjYzotcTY0IC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQ6Oih1bmtub3duKTpBSVg6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVI6OmFpeF9wcGM2NC5vOjo6Ojo6Ojo6OmRsZmNuOmFpeC1zaGFyZWQ6Oi1xNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YIDY0IiwKCiMKIyBDcmF5IFQ5MCBhbmQgc2ltaWxhciAoU0RTQykKIyBJdCdzIEJpZy1lbmRpYW4sIGJ1dCB0aGUgYWxnb3JpdGhtcyB3b3JrIHByb3Blcmx5IHdoZW4gQl9FTkRJQU4gaXMgTk9UCiMgZGVmaW5lZC4gIFRoZSBUOTAgaW50cyBhbmQgbG9uZ3MgYXJlIDggYnl0ZXMgbG9uZywgYW5kIGFwcGFyZW50bHkgdGhlCiMgQl9FTkRJQU4gY29kZSBhc3N1bWVzIDQgYnl0ZSBpbnRzLiAgRm9ydHVuYXRlbHksIHRoZSBub24tQl9FTkRJQU4gYW5kCiMgbm9uIExfRU5ESUFOIGNvZGUgYWxpZ25zIHRoZSBieXRlcyBpbiBlYWNoIHdvcmQgY29ycmVjdGx5LgojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIGlzIHRvIGF2b2lkIHR3byBmYXRhbCBjb21waWxlciBlcnJvcnM6CiMnVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgYml0IGZpZWxkIGlzIG5vdCBhbGxvd2VkLiAnCiMnQW4gZXhwcmVzc2lvbiB3aXRoIGJpdCBmaWVsZCBleGlzdHMgYXMgdGhlIG9wZXJhbmQgb2YgInNpemVvZiIgJwojICh3cml0dGVuIGJ5IFdheW5lIFNjaHJvZWRlciA8c2Nocm9lZGVAU0RTQy5FRFU+KQojCiMgajkwIGlzIGNvbnNpZGVyZWQgdGhlIGJhc2UgbWFjaGluZSB0eXBlIGZvciB1bmljb3MgbWFjaGluZXMsCiMgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIG5vdyBjYWxsZWQgImNyYXktajkwIiAuLi4KImNyYXktajkwIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UOjo6IiwKCiMKIyBDcmF5IFQzRSAoUmVzZWFyY2ggQ2VudGVyIEp1ZWxpY2gsIGJlY2ttYW5AYWNsLmxhbmwuZ292KQojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIHdhcyB3cml0dGVuIGZvciB0aGUgQzkwIChpdCBzZWVtcykuICBJIGFkZGVkCiMgYW5vdGhlciB1c2UuICBCYXNpY2FsbHksIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIFQzRSB1c2VzIHNvbWUgYml0IGZpZWxkcwojIGZvciBzb21lIHN0X2FkZHIgc3R1ZmYsIGFuZCB0aGVuIHNpemVvZiBhbmQgYWRkcmVzcy1vZiBmYWlscwojIEkgY291bGQgbm90IHVzZSB0aGUgYW1zL2FscGhhLm8gb3B0aW9uIGJlY2F1c2UgdGhlIENyYXkgYXNzZW1ibGVyLCAnY2FtJwojIGRpZCBub3QgbGlrZSBpdC4KImNyYXktdDNlIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDo6OiIsCgojIERHVVgsIDg4MTAwLgoiZGd1eC1SMy1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LXg4Ni1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCgojIFNpbml4L1JlbGlhbnRVTklYIFJNNDAwCiMgTk9URTogVGhlIENEUysrIENvbXBpbGVyIHVwIHRvIFYyLjBCc29tZXRoaW5nIGhhcyB0aGUgSVJJWF9DQ19CVUcgb3B0aW1pemVyIHByb2JsZW0uIEJldHRlciB1c2UgLWcgICovCiJSZWxpYW50VU5JWCIsImNjOi1LUElDIC1nIC1EVEVSTUlPUyAtREJfRU5ESUFOOjotS3RocmVhZDpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6Qk5fTExPTkcgREVTX1BUUiBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnJlbGlhbnR1bml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlNJTklYIiwiY2M6LU86Oih1bmtub3duKTpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKIlNJTklYLU4iLCIvdXNyL3VjYi9jYzotTzIgLW1pc2FsaWduZWQ6Oih1bmtub3duKTo6LWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKCiMgU0lFTUVOUyBCUzIwMDAvT1NEOiBhbiBFQkNESUMtYmFzZWQgbWFpbmZyYW1lCiJCUzIwMDAtT1NEIiwiYzg5Oi1PIC1YTExNTCAtWExMTUsgLVhMIC1EQl9FTkRJQU4gLURURVJNSU9TIC1EQ0hBUlNFVF9FQkNESUM6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBPUy8zOTAgVW5peCBhbiBFQkNESUMtYmFzZWQgVW5peCBzeXN0ZW0gb24gSUJNIG1haW5mcmFtZQojIFlvdSBuZWVkIHRvIGNvbXBpbGUgdXNpbmcgdGhlIGM4OS5zaCB3cmFwcGVyIGluIHRoZSB0b29scyBkaXJlY3RvcnksIGJlY2F1c2UgdGhlCiMgSUJNIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIC1MIHN3aXRjaCBhZnRlciBhbnkgb2JqZWN0IG1vZHVsZXMuCiMKIk9TMzkwLVVuaXgiLCJjODkuc2g6LU8gLURCX0VORElBTiAtRENIQVJTRVRfRUJDRElDIC1ETk9fU1lTX1BBUkFNX0ggIC1EX0FMTF9TT1VSQ0U6Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgV2luNjQgdGFyZ2V0cywgV0lONjRJIGRlbm90ZXMgSUEtNjQgYW5kIFdJTjY0QSAtIEFNRDY0CiJWQy1XSU42NEkiLCJjbDo6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKIlZDLVdJTjY0QSIsImNsOjo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgRVhQT1JUX1ZBUl9BU19GTjoke25vX2FzbX06d2luMzIiLAoKIyBWaXN1YWwgQyB0YXJnZXRzCiJWQy1OVCIsImNsOjo6OldJTk5UOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKIlZDLUNFIiwiY2w6Ojo6V0lOQ0U6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiVkMtV0lOMzIiLCJjbDo6OjpXSU4zMjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1XSU4xNiIsImNsOjo6KHVua25vd24pOldJTjE2OjpNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFRISVJUWV9UV09fQklUOjo6IiwKIlZDLVczMS0xNiIsImNsOjo6KHVua25vd24pOldJTjE2OjpCTl9MTE9ORyBNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFNJWFRFRU5fQklUOjo6IiwKIlZDLVczMS0zMiIsImNsOjo6OldJTjE2OjpCTl9MTE9ORyBNRDJfQ0hBUiBERVNfVU5ST0xMIERFU19QVFIgUkM0X0lOREVYIFRISVJUWV9UV09fQklUOjo6IiwKIlZDLU1TRE9TIiwiY2w6OjoodW5rbm93bik6TVNET1M6OkJOX0xMT05HIE1EMl9DSEFSIERFU19VTlJPTEwgREVTX1BUUiBSQzRfSU5ERVggU0lYVEVFTl9CSVQ6OjoiLAoKIyBCb3JsYW5kIEMrKyA0LjUKIkJDLTMyIiwiYmNjMzI6Ojo6V0lOMzI6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKIkJDLTE2IiwiYmNjOjo6KHVua25vd24pOldJTjE2OjpCTl9MTE9ORyBERVNfUFRSIFJDNF9JTkRFWCBTSVhURUVOX0JJVDo6OiIsCgojIE1pbkdXCiJtaW5ndyIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGwgLURfV0lOMzJfV0lOTlQ9MHgzMzM6OjpNSU5HVzMyOi1sd3NvY2szMiAtbGdkaTMyOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfSBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2X2NvZmZfYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotbW5vLWN5Z3dpbiAtc2hhcmVkOi5kbGwuYSIsCgojIFVXSU4gCiJVV0lOIiwgImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1PIC1XYWxsOjo6VVdJTjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEN5Z3dpbgoiQ3lnd2luLXByZTEuMyIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6OjpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2NvZmZfYXNtfTpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCiJkZWJ1Zy1DeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6OkNZR1dJTjMyOjo6JHtub19hc219OmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKCiMgTmV0V2FyZSBmcm9tIERhdmlkIFdhcmQgKGRzd2FyZEBub3ZlbGwuY29tKSAtIHJlcXVpcmVzIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzCiMgbmV0d2FyZS1jbGliID0+IGxlZ2FjeSBDTGliIGMtcnVudGltZSBzdXBwb3J0CiJuZXR3YXJlLWNsaWIiLCAibXdjY25sbTo6Ojo6JHt4ODZfZ2NjX29wdHN9Ojo6IiwKIyBuZXR3YXJlLWxpYmMgPT4gTGliQy9OS1Mgc3VwcG9ydAoibmV0d2FyZS1saWJjIiwgIm13Y2NubG06Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6OiIsCiJuZXR3YXJlLWxpYmMtZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLUkvbmRrL2xpYmMvaW5jbHVkZS93aW5zb2NrIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6JHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgREpHUFAKIkRKR1BQIiwgImdjYzotSS9kZXYvZW52L1dBVFRfUk9PVC9pbmMgLURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8yIC1XYWxsIC1EREVWUkFORE9NPVwiL2Rldi91cmFuZG9tXFx4MjRcIjo6Ok1TRE9TOi1ML2Rldi9lbnYvV0FUVF9ST09UL2xpYiAtbHdhdHQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCiMgSyZSIEMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsgeW91IG5lZWQgZ2NjIG9uIG9sZCBVbHRyaXggaW5zdGFsbGF0aW9ucwojIyJ1bHRyaXgiLCJjYzotTzIgLUROT1BST1RPIC1ETk9DT05TVCAtRExfRU5ESUFOOjoodW5rbm93bik6Ojo6Ojo6IiwKCiMjIyMjIE1hY09TIFggKGEuay5hLiBSaGFwc29keSBvciBEYXJ3aW4pIHNldHVwCiJyaGFwc29keS1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOk1BQ09TWF9SSEFQU09EWTo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTo6IiwKImRhcndpbi1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpvc3hfcHBjMzIubzo6Ojo6Ojo6Ojo6ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjo6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luLWkzODYtY2MiLCJjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1jb21tb24gLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTo6ZGFyd2luLXNoYXJlZDotZlBJQzo6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGVidWctZGFyd2luLXBwYy1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtREJfRU5ESUFOIC1nIC1XYWxsIC1POjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Om9zeF9wcGMzMi5vOjo6Ojo6Ojo6OjpkYXJ3aW4tc2hhcmVkOi1mUElDOjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1taXBzbGUiLCJjY21pcHM6LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRExfRU5ESUFOIC1FTCAtV2wsLUVMIC1taXBzMiAtbW5vLWJyYW5jaC1saWtlbHkgLUcgMCAtZm5vLWJ1aWx0aW4gLW1zb2Z0LWZsb2F0IC1EQ1BVPU1JUFMzMiAtRE1JUFNFTCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIKCQkgICAgVkMtV0lOMTYgVkMtVzMxLTE2IFZDLVczMS0zMiBWQy1NU0RPUwoJCSAgICBCQy0zMiBCQy0xNiBPUzItRU1YIG5ldHdhcmUtY2xpYiBuZXR3YXJlLWxpYmMpOwoKbXkgJGlkeCA9IDA7Cm15ICRpZHhfY2MgPSAkaWR4Kys7Cm15ICRpZHhfY2ZsYWdzID0gJGlkeCsrOwpteSAkaWR4X3VuaXN0ZCA9ICRpZHgrKzsKbXkgJGlkeF90aHJlYWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc3lzX2lkID0gJGlkeCsrOwpteSAkaWR4X2xmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vcHMgPSAkaWR4Kys7Cm15ICRpZHhfY3B1aWRfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JuX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9kZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Flc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfYmZfb2JqID0gJGlkeCsrOwpteSAkaWR4X21kNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfc2hhMV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfY2FzdF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ybWQxNjBfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZHNvX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfdGFyZ2V0ID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfbGRmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9leHRlbnNpb24gPSAkaWR4Kys7Cm15ICRpZHhfcmFubGliID0gJGlkeCsrOwpteSAkaWR4X2FyZmxhZ3MgPSAkaWR4Kys7CgpteSAkcHJlZml4PSIiOwpteSAkb3BlbnNzbGRpcj0iIjsKbXkgJGV4ZV9leHQ9IiI7Cm15ICRpbnN0YWxsX3ByZWZpeD0iIjsKbXkgJG5vX3RocmVhZHM9MDsKbXkgJHRocmVhZHM9MDsKbXkgJG5vX3NoYXJlZD0wOyAjIGJ1dCAibm8tc2hhcmVkIiBpcyBkZWZhdWx0Cm15ICR6bGliPTE7ICAgICAgIyBidXQgIm5vLXpsaWIiIGlzIGRlZmF1bHQKbXkgJG5vX2tyYjU9MDsgICAjIGJ1dCAibm8ta3JiNSIgaXMgaW1wbGllZCB1bmxlc3MgIi0td2l0aC1rcmI1LS4uLiIgaXMgdXNlZApteSAkbm9fYXNtPTA7Cm15ICRub19kc289MDsKbXkgJG5vX2dtcD0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZSI7Cm15ICRkZXNfbG9jbD0iY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIjsKbXkgJGRlcwk9ImNyeXB0by9kZXMvZGVzLmgiOwpteSAkYm4JPSJjcnlwdG8vYm4vYm4uaCI7Cm15ICRtZDIJPSJjcnlwdG8vbWQyL21kMi5oIjsKbXkgJHJjNAk9ImNyeXB0by9yYzQvcmM0LmgiOwpteSAkcmM0X2xvY2w9ImNyeXB0by9yYzQvcmM0X2xvY2wuaCI7Cm15ICRpZGVhCT0iY3J5cHRvL2lkZWEvaWRlYS5oIjsKbXkgJHJjMgk9ImNyeXB0by9yYzIvcmMyLmgiOwpteSAkYmYJPSJjcnlwdG8vYmYvYmZfbG9jbC5oIjsKbXkgJGJuX2FzbQk9ImJuX2FzbS5vIjsKbXkgJGRlc19lbmM9ImRlc19lbmMubyBmY3J5cHRfYi5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIjsKbXkgJGJmX2VuYwk9ImJmX2VuYy5vIjsKbXkgJGNhc3RfZW5jPSJjX2VuYy5vIjsKbXkgJHJjNF9lbmM9InJjNF9lbmMubyI7Cm15ICRyYzVfZW5jPSJyYzVfZW5jLm8iOwpteSAkbWQ1X29iaj0iIjsKbXkgJHNoYTFfb2JqPSIiOwpteSAkcm1kMTYwX29iaj0iIjsKbXkgJHByb2Nlc3Nvcj0iIjsKbXkgJGRlZmF1bHRfcmFubGliOwpteSAkcGVybDsKCgojIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgoKbXkgJWRpc2FibGVkID0gKCAjICJ3aGF0IiAgICAgICAgID0+ICJjb21tZW50IgoJCSAiZ21wIgkJICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgIm1kYzIiICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInJjNSIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInNoYXJlZCIgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInpsaWIiICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInpsaWItZHluYW1pYyIgICA9PiAiZGVmYXVsdCIKICAgICAgICAgICAgICAgKTsKCiMgQWRkaXRpb25hbCAibm8tLi4uIiBvcHRpb25zIHdpbGwgYmUgY29sbGVjdGVkIGluICVkaXNhYmxlZC4KIyBUbyByZW1vdmUgc29tZXRoaW5nIGZyb20gJWRpc2FibGVkLCB1c2UgZS5nLiAiZW5hYmxlLXJjNSIuCiMgRm9yIHN5bW1ldHJ5LCAiZGlzYWJsZS0uLi4iIGlzIGEgc3lub255bSBmb3IgIm5vLS4uLiIuCgojIFRoaXMgaXMgd2hhdCAkZGVwZmxhZ3Mgd2lsbCBsb29rIGxpa2Ugd2l0aCB0aGUgYWJvdmUgZGVmYXVsdDoKbXkgJGRlZmF1bHRfZGVwZmxhZ3MgPSAiLURPUEVOU1NMX05PX01EQzIgLURPUEVOU1NMX05PX1JDNSAiOwoKCm15ICRub19zc2UyPTA7CgomdXNhZ2UgaWYgKCQjQVJHViA8IDApOwoKbXkgJGZsYWdzOwpteSAkZGVwZmxhZ3M7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcz0iIjsKCSRsaWJzPSIiOwoJJHRhcmdldD0iIjsKCSRvcHRpb25zPSIiOwoJJHN5bWxpbms9MTsKCgkkYXJndl91bnByb2Nlc3NlZD0wOwoJJGFyZ3ZzdHJpbmc9am9pbignICcsQGFyZ3Zjb3B5KTsKClBST0NFU1NfQVJHUzoKCWZvcmVhY2ggKEBhcmd2Y29weSkKCQl7CgkJcyAvXi1uby0vbm8tLzsgIyBzb21lIHBlb3BsZSBqdXN0IGNhbid0IHJlYWQgdGhlIGluc3RydWN0aW9ucwoKCQkjIHJld3JpdGUgc29tZSBvcHRpb25zIGluICJlbmFibGUtLi4uIiBmb3JtCgkJcyAvXi0/LT9zaGFyZWQkL2VuYWJsZS1zaGFyZWQvOwoJCXMgL150aHJlYWRzJC9lbmFibGUtdGhyZWFkcy87CgkJcyAvXnpsaWIkL2VuYWJsZS16bGliLzsKCQlzIC9eemxpYi1keW5hbWljJC9lbmFibGUtemxpYi1keW5hbWljLzsKCgkJaWYgKC9ebm8tKC4rKSQvIHx8IC9eZGlzYWJsZS0oLispJC8pCgkJCXsKCQkJaWYgKCQxIGVxICJzc2wiKQoJCQkJewoJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJJGRpc2FibGVkeyJzc2wzIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJfQoJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQl7CgkJCQkkZGlzYWJsZWR7InRsczEifSA9ICJvcHRpb24odGxzKSIKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQkJJGRpc2FibGVkeyQxfSA9ICJvcHRpb24iOwoJCQkJfQoJCQl9CQkJCgkJZWxzaWYgKC9eZW5hYmxlLSguKykkLykKCQkJewoJCQlkZWxldGUgJGRpc2FibGVkeyQxfTsKCgkJCSR0aHJlYWRzID0gMSBpZiAoJDEgZXEgInRocmVhZHMiKTsKCQkJfQoJCWVsc2lmICgvXi0tdGVzdC1zYW5pdHkkLykKCQkJewoJCQlleGl0KCZ0ZXN0X3Nhbml0eSgpKTsKCQkJfQoJCWVsc2lmICgvXnJlY29uZmlndXJlLyB8fCAvXnJlY29uZi8pCgkJCXsKCQkJaWYgKG9wZW4oSU4sIjwkTWFrZWZpbGUiKSkKCQkJCXsKCQkJCXdoaWxlICg8SU4+KQoJCQkJCXsKCQkJCQljaG9wOwoJCQkJCWlmICgvXkNPTkZJR1VSRV9BUkdTPSguKikvKQoJCQkJCQl7CgkJCQkJCSRhcmd2c3RyaW5nPSQxOwoJCQkJCQlAYXJndmNvcHk9c3BsaXQoJyAnLCRhcmd2c3RyaW5nKTsKCQkJCQkJZGllICJJbmNvcnJlY3QgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiIKCQkJCQkJCWlmIChncmVwKC9ecmVjb25mLyxAYXJndmNvcHkpKTsKCQkJCQkJcHJpbnQgIlJlY29uZmlndXJpbmcgd2l0aDogJGFyZ3ZzdHJpbmdcbiI7CgkJCQkJCSRhcmd2X3VucHJvY2Vzc2VkPTE7CgkJCQkJCWNsb3NlKElOKTsKCQkJCQkJbGFzdCBQUk9DRVNTX0FSR1M7CgkJCQkJCX0KCQkJCQl9CgkJCQljbG9zZShJTik7CgkJCQl9CgkJCWRpZSAiSW5zdWZmaWNpZW50IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iOwoJCQl9CgkJZWxzaWYgKC9eMzg2JC8pCgkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXlstK10vKQoJCQl7CgkJCWlmICgvXi1bbExdKC4qKSQvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLVteLV0vIG9yIC9eXCsvKQoJCQkJewoJCQkJJGZsYWdzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi0tcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRwcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tb3BlbnNzbGRpcj0oLiopJC8pCgkJCQl7CgkJCQkkb3BlbnNzbGRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1rcmI1LShkaXJ8bGlifGluY2x1ZGV8Zmxhdm9yKT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7ImtyYjUtIi4kMX09JDI7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXByaW50IFNUREVSUiAkdXNhZ2U7CgkJCQlleGl0KDEpOwoJCQkJfQoJCQl9CgkJZWxzaWYgKCRfID1+IC9eKFteOl0rKTooLispJC8pCgkJCXsKCQkJZXZhbCAiXCR0YWJsZXtcJDF9ID0gXCIkMlwiIjsgIyBhbGxvdyAkeHh4IGNvbnN0cnVjdHMgaW4gdGhlIHN0cmluZwoJCQkkdGFyZ2V0PSQxOwoJCQl9CgkJZWxzZQoJCQl7CgkJCWRpZSAidGFyZ2V0IGFscmVhZHkgZGVmaW5lZCAtICR0YXJnZXRcbiIgaWYgKCR0YXJnZXQgbmUgIiIpOwoJCQkkdGFyZ2V0PSRfOwoJCQl9CgoJCXVubGVzcyAoJF8gZXEgJHRhcmdldCB8fCAvXm5vLS8gfHwgL15kaXNhYmxlLS8pCgkJCXsKCQkJIyAibm8tLi4uIiBmb2xsb3dzIGxhdGVyIGFmdGVyIGltcGxpZWQgZGlzYWN0aXZhdGlvbnMKCQkJIyBoYXZlIGJlZW4gZGVyaXZlZC4gIChEb24ndCB0YWtlIHRoaXMgdG9vIHNlcm9pdXNseSwKCQkJIyB3ZSByZWFsbHkgb25seSB3cml0ZSBPUFRJT05TIHRvIHRoZSBNYWtlZmlsZSBvdXQgb2YKCQkJIyBub3N0YWxnaWEuKQoKCQkJaWYgKCRvcHRpb25zIGVxICIiKQoJCQkJeyAkb3B0aW9ucyA9ICRfOyB9CgkJCWVsc2UKCQkJCXsgJG9wdGlvbnMgLj0gIiAiLiRfOyB9CgkJCX0KCQl9Cgl9CgoKCmlmICgkcHJvY2Vzc29yIGVxICIzODYiKQoJewoJJGRpc2FibGVkeyJzc2UyIn0gPSAiZm9yY2VkIjsKCX0KCmlmICghZGVmaW5lZCgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0pIHx8ICR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSBlcSAiIikKCXsKCSRkaXNhYmxlZHsia3JiNSJ9ID0gImtyYjUtZmxhdm9yIG5vdCBzcGVjaWZpZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJewoJIyAiemxpYi1keW5hbWljIiB3YXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQsIHNvIGVuYWJsZSAiemxpYiIKCWRlbGV0ZSAkZGlzYWJsZWR7InpsaWIifTsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsicmlqbmRhZWwifSkpCgl7CgkkZGlzYWJsZWR7ImFlcyJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZGVzIn0pKQoJewoJJGRpc2FibGVkeyJtZGMyIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSkKCXsKCSRkaXNhYmxlZHsiZWNkc2EifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJlY2RoIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDIuMCByZXF1aXJlcyBNRDUgYW5kIFJTQQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pKQoJewoJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDMuMCBhbmQgVExTIHJlcXVpcmVzIE1ENSBhbmQgU0hBIGFuZCBlaXRoZXIgUlNBIG9yIERTQStESAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsic2hhIn0pCiAgICB8fCAoZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KQogICAgICAgICYmIChkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkpKQoJewoJJGRpc2FibGVkeyJzc2wzIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsidGxzMSJ9ID0gImZvcmNlZCI7Cgl9CgoKaWYgKCR0YXJnZXQgZXEgIlRBQkxFIikgewoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnRfdGFibGVfZW50cnkoJHRhcmdldCk7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0IGVxICJMSVNUIikgewoJZm9yZWFjaCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50OwoJCXByaW50ICJcbiI7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0ID1+IG0vXkN5Z1dpbjMyKC0uKikkLykgewoJJHRhcmdldCA9ICJDeWd3aW4iLiQxOwp9CgpwcmludCAiQ29uZmlndXJpbmcgZm9yICR0YXJnZXRcbiI7CgomdXNhZ2UgaWYgKCFkZWZpbmVkKCR0YWJsZXskdGFyZ2V0fSkpOwoKCmZvcmVhY2ggKHNvcnQgKGtleXMgJWRpc2FibGVkKSkKCXsKCSRvcHRpb25zIC49ICIgbm8tJF8iOwoKCXByaW50ZiAiICAgIG5vLSUtMTJzICUtMTBzIiwgJF8sICJbJGRpc2FibGVkeyRffV0iOwoKCWlmICgvXmRzbyQvKQoJCXsgJG5vX2RzbyA9IDE7IH0KCWVsc2lmICgvXnRocmVhZHMkLykKCQl7ICRub190aHJlYWRzID0gMTsgfQoJZWxzaWYgKC9ec2hhcmVkJC8pCgkJeyAkbm9fc2hhcmVkID0gMTsgfQoJZWxzaWYgKC9eemxpYiQvKQoJCXsgJHpsaWIgPSAwOyB9CgllbHNpZiAoL156bGliLWR5bmFtaWMkLykKCQl7IH0KCWVsc2lmICgvXnN5bWxpbmtzJC8pCgkJeyAkc3ltbGluayA9IDA7IH0KCWVsc2lmICgvXnNzZTIkLykKCQl7ICRub19zc2UyID0gMTsgfQoJZWxzZQoJCXsKCQlteSAoJEFMR08sICRhbGdvKTsKCQkoJEFMR08gPSAkYWxnbyA9ICRfKSA9fiB0ci9bYS16XS9bQS1aXS87CgoJCWlmICgvXmFzbSQvIHx8IC9eZXJyJC8gfHwgL15odyQvIHx8IC9eaHctLykKCQkJewoJCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgkJCgkJCWlmICgvXmVyciQvKQoJCQkJeyAkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19FUlIgIjsgfQoJCQl9CgkJZWxzZQoJCQl7CgkJCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgoJCQlpZiAoL15rcmI1JC8pCgkJCQl7ICRub19rcmI1ID0gMTsgfQoJCQllbHNlCgkJCQl7CgkJCQlwdXNoIEBza2lwLCAkYWxnbzsKCQkJCXByaW50ICIgKHNraXAgZGlyKSI7CgoJCQkJJGRlcGZsYWdzIC49Ii1ET1BFTlNTTF9OT18kQUxHTyAiOwoJCQkJfQoJCQl9CgkJfQoKCXByaW50ICJcbiI7Cgl9CgoKbXkgJElzTUsxTUY9c2NhbGFyIGdyZXAgL14kdGFyZ2V0JC8sQE1LMU1GX0J1aWxkczsKCiRJc01LMU1GPTEgaWYgKCR0YXJnZXQgZXEgIm1pbmd3IiAmJiAkXk8gbmUgImN5Z3dpbiIpOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iIHx8ICR0YXJnZXQgZXEgIkRKR1BQIiB8fCAkdGFyZ2V0IGVxICJtaW5ndyIpOwokZXhlX2V4dD0iLnBtIiAgaWYgKCR0YXJnZXQgPX4gL3Zvcy8pOwokb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiIGlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIik7CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwoKY2hvcCAkb3BlbnNzbGRpciBpZiAkb3BlbnNzbGRpciA9fiAvXC8kLzsKY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gL1wvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJGRzb19zY2hlbWUgPSAkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV07Cm15ICRzaGFyZWRfdGFyZ2V0ID0gJGZpZWxkc1skaWR4X3NoYXJlZF90YXJnZXRdOwpteSAkc2hhcmVkX2NmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9jZmxhZ107Cm15ICRzaGFyZWRfbGRmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9sZGZsYWddOwpteSAkc2hhcmVkX2V4dGVuc2lvbiA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfZXh0ZW5zaW9uXTsKbXkgJHJhbmxpYiA9ICRmaWVsZHNbJGlkeF9yYW5saWJdOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKCm15ICRub19zaGFyZWRfd2Fybj0wOwpteSAkbm9fdXNlcl9jZmxhZ3M9MDsKCmlmICgkZmxhZ3MgbmUgIiIpCXsgJGNmbGFncz0iJGZsYWdzJGNmbGFncyI7IH0KZWxzZQkJCXsgJG5vX3VzZXJfY2ZsYWdzPTE7ICAgICAgIH0KCiMgS2VyYmVyb3Mgc2V0dGluZ3MuICBUaGUgZmxhdm9yIG11c3QgYmUgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLCBlaXRoZXIgdGhyb3VnaAojIHRoZSBzY3JpcHQgImNvbmZpZyIgb3IgbWFudWFsbHkuCmlmICghJG5vX2tyYjUpCgl7CglteSAoJGxyZXNvbHYsICRscGF0aCwgJGxleHQpOwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltIaF1laW1kYWwkLykKCQl7CgkJZGllICJTb3JyeSwgSGVpbWRhbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIjsKCQl9CgkjIyMjIyBIQUNLIHRvIGZvcmNlIHVzZSBvZiBIZWltZGFsLgoJIyMjIyMgV0FSTklORzogU2luY2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgSGVpbWRhbCwKCSMjIyMjICAgICAgICAgIHVzaW5nIHRoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQuICBZb3UnbGwgaGF2ZSB0byBtYWtlCgkjIyMjIyAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiB5b3UgZG8sIHBsZWFzZSBzZW5kCgkjIyMjIyAgICAgICAgICBwYXRjaGVzIHRvIG9wZW5zc2wtZGV2QG9wZW5zc2wub3JnCglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eZm9yY2UtW0hoXWVpbWRhbCQvKQoJCXsKCQl3YXJuICJIZWltZGFsIGlzbid0IHJlYWxseSBzdXBwb3J0ZWQuICBZb3VyIGJ1aWxkIFdJTEwgYnJlYWtcbiI7CgkJd2FybiAiSWYgeW91IGZpeCB0aGUgcHJvYmxlbXMsIHBsZWFzZSBzZW5kIGEgcGF0Y2ggdG8gb3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnXG4iOwoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2hlaW1kYWwiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGkgLWxrcmI1IC1sY29tX2VyciIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfSEVJTURBTCAkY2ZsYWdzIjsKCQl9CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW01tXVtJaV1bVHRdLykKCQl7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3Iva2VyYmVyb3MiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8iCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiICYmICR0aHJlYWRzKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBbc11oZSBpcyBhbHNvIGV4cGVjdGVkIHRvCgkjIHByb3ZpZGUgYW55IHN5c3RlbS1kZXBlbmRlbnQgY29tcGlsZXIgb3B0aW9ucyB0aGF0IGFyZQoJIyBuZWNlc3NhcnkuCglpZiAoJG5vX3VzZXJfY2ZsYWdzKQoJCXsKCQlwcmludCAiWW91IGFza2VkIGZvciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydCwgYnV0IGRpZG4ndFxuIjsKCQlwcmludCAicHJvdmlkZSBhbnkgc3lzdGVtLXNwZWNpZmljIGNvbXBpbGVyIG9wdGlvbnNcbiI7CgkJZXhpdCgxKTsKCQl9CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJGNmbGFncyIgOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKCX0KZWxzZQoJewoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICR0aHJlYWRfY2ZsYWcgJGNmbGFncyI7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwojCW15ICRkZWY7CiMJZm9yZWFjaCAkZGVmIChzcGxpdCAnICcsJHRocmVhZF9jZmxhZykKIwkJewojCQlpZiAoJGRlZiA9fiBzL14tRC8vICYmICRkZWYgIX4gL15fLykKIwkJCXsKIwkJCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSAkZGVmXG4iOwojCQkJfQojCQl9Cgl9CQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9JGRlc19vYmo9JGFlc19vYmo9JGJmX29iaj0kY2FzdF9vYmo9JHJjNF9vYmo9JHJjNV9vYmo9IiI7Cgkkc2hhMV9vYmo9JG1kNV9vYmo9JHJtZDE2MF9vYmo9IiI7Cgl9CgppZiAoISRub19zaGFyZWQpCgl7CgkkY2FzdF9vYmo9IiI7CSMgQ0FTVCBhc3NlbWJsZXIgaXMgbm90IFBJQwoJfQoKaWYgKCR0aHJlYWRzKQoJewoJJGNmbGFncz0kdGhyZWFkX2NmbGFnczsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzIC49ICR0aHJlYWRfZGVmaW5lczsKCX0KCmlmICgkemxpYikKCXsKCSRjZmxhZ3MgPSAiLURaTElCICRjZmxhZ3MiOwoJaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgkJewoJCSRsZmxhZ3MgPSAiJGxmbGFncyAtbHoiOwoJCX0KCWVsc2UKCQl7CgkJJGNmbGFncyA9ICItRFpMSUJfU0hBUkVEICRjZmxhZ3MiOwoJCX0KCX0KCiMgWW91IHdpbGwgZmluZCBzaGxpYl9tYXJrMSBhbmQgc2hsaWJfbWFyazIgZXhwbGFpbmVkIGluIE1ha2VmaWxlLm9yZwpteSAkc2hhcmVkX21hcmsgPSAiIjsKaWYgKCRzaGFyZWRfdGFyZ2V0IGVxICIiKQoJewoJJG5vX3NoYXJlZF93YXJuID0gMSBpZiAhJG5vX3NoYXJlZDsKCSRub19zaGFyZWQgPSAxOwoJfQppZiAoISRub19zaGFyZWQpCgl7CglpZiAoJHNoYXJlZF9jZmxhZyBuZSAiIikKCQl7CgkJJGNmbGFncyA9ICIkc2hhcmVkX2NmbGFnIC1ET1BFTlNTTF9QSUMgJGNmbGFncyI7CgkJfQoJfQoKaWYgKCRub19zaGFyZWQpCgl7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX0RZTkFNSUNfRU5HSU5FXG4iOwoJfQplbHNlCgl7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkVcbiI7Cgl9CgojIENvbXBpbGVyIGZpeC11cHMKaWYgKCR0YXJnZXQgPX4gL2ljYyQvKQoJewoJbXkoJGljY3Zlcik9YCRjYyAtViAyPiYxYDsKCWlmICgkaWNjdmVyID1+IC9WZXJzaW9uIChbMC05XSspXC4vKQl7ICRpY2N2ZXI9JDE7IH0KCWVsc2UJCQkJCXsgJGljY3Zlcj0wOyAgfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJfQoKaWYgKCRzeXNfaWQgbmUgIiIpCgl7CgkjJGNmbGFncz0iLURPUEVOU1NMX1NZU05BTUVfJHN5c19pZCAkY2ZsYWdzIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIjZGVmaW5lIE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkXG4iOwoJfQoKaWYgKCRyYW5saWIgZXEgIiIpCgl7CgkkcmFubGliID0gJGRlZmF1bHRfcmFubGliOwoJfQoKI215ICgkYm4xKT1zcGxpdCgvXHMrLywkYm5fb2JqKTsKIyRibjEgPSAiIiB1bmxlc3MgZGVmaW5lZCAkYm4xOwojJGJuMT0kYm5fYXNtIHVubGVzcyAoJGJuMSA9fiAvXC5vJC8pOwojJGJuX29iaj0iJGJuMSI7CgokY3B1aWRfb2JqPSIiIGlmICgkcHJvY2Vzc29yIGVxICIzODYiKTsKCiRibl9vYmogPSAkYm5fYXNtIHVubGVzcyAkYm5fb2JqIG5lICIiOwojIGJuODYqIGlzIHRoZSBvbmx5IG9uZSBpbXBsZW1lbnRpbmcgYm5fKl9wYXJ0X3dvcmRzCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9QQVJUX1dPUkRTIiBpZiAoJGJuX29iaiA9fiAvYm44Ni8pOwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5vX3NzZTIgJiYgJGJuX29iaiA9fiAvYm44Ni8pOwoKJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwokYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8pOwokY2FzdF9vYmo9JGNhc3RfZW5jCXVubGVzcyAoJGNhc3Rfb2JqID1+IC9cLm8kLyk7CiRyYzRfb2JqPSRyYzRfZW5jCXVubGVzcyAoJHJjNF9vYmogPX4gL1wubyQvKTsKJHJjNV9vYmo9JHJjNV9lbmMJdW5sZXNzICgkcmM1X29iaiA9fiAvXC5vJC8pOwppZiAoJHNoYTFfb2JqID1+IC9cLm8kLykKCXsKIwkkc2hhMV9vYmo9JHNoYTFfZW5jOwoJJGNmbGFncy49IiAtRFNIQTFfQVNNIiAgIGlmICgkc2hhMV9vYmogPX4gL3N4ODYvIHx8ICRzaGExX29iaiA9fiAvc2hhMS8pOwoJJGNmbGFncy49IiAtRFNIQTI1Nl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTI1Ni8pOwoJJGNmbGFncy49IiAtRFNIQTUxMl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTUxMi8pOwoJaWYgKCRzaGExX29iaiA9fiAveDg2LykKCSAgICB7CWlmICgkbm9fc3NlMikKCQl7ICAgJHNoYTFfb2JqID1+IHMvXFMqc3NlMlxTKy8vOyAgICAgICAgfQoJCWVsc2lmICgkY2ZsYWdzICF+IC9PUEVOU1NMX0lBMzJfU1NFMi8pCgkJeyAgICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiI7ICAgIH0KCSAgICB9Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CmlmICgkYWVzX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EQUVTX0FTTSI7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CgojICJTdHJpbmdpZnkiIHRoZSBDIGZsYWdzIHN0cmluZy4gIFRoaXMgcGVybWl0cyBpdCB0byBiZSBtYWRlIHBhcnQgb2YgYSBzdHJpbmcKIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgokY2ZsYWdzID1+IHMvKFtcXFwiXSkvXFxcMS9nOwoKbXkgJHZlcnNpb24gPSAidW5rbm93biI7Cm15ICR2ZXJzaW9uX251bSA9ICJ1bmtub3duIjsKbXkgJG1ham9yID0gInVua25vd24iOwpteSAkbWlub3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX251bWJlciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25faGlzdG9yeSA9ICJ1bmtub3duIjsKbXkgJHNobGliX21ham9yID0gInVua25vd24iOwpteSAkc2hsaWJfbWlub3IgPSAidW5rbm93biI7CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2x2LmgnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIG9wZW5zc2x2Lmg6JCFcbiI7CndoaWxlICg8SU4+KQoJewoJJHZlcnNpb249JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5URVhULipPcGVuU1NMIChcUyspIC87CgkkdmVyc2lvbl9udW09JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5OVU1CRVIuKjB4KFxTKykvOwoJJHNobGliX3ZlcnNpb25fbnVtYmVyPSQxIGlmIC9TSExJQl9WRVJTSU9OX05VTUJFUiAqIihbXiJdKykiLzsKCSRzaGxpYl92ZXJzaW9uX2hpc3Rvcnk9JDEgaWYgL1NITElCX1ZFUlNJT05fSElTVE9SWSAqIihbXiJdKikiLzsKCX0KY2xvc2UoSU4pOwppZiAoJHNobGliX3ZlcnNpb25faGlzdG9yeSBuZSAiIikgeyAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IC49ICI6IjsgfQoKaWYgKCR2ZXJzaW9uID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJG1ham9yPSQxOwoJJG1pbm9yPSQyOwoJfQoKaWYgKCRzaGxpYl92ZXJzaW9uX251bWJlciA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRzaGxpYl9tYWpvcj0kMTsKCSRzaGxpYl9taW5vcj0kMjsKCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhbIAldKSRkaXIgL1wxLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglzL15DQz0uKiQvQ0M9ICRjYy87CglzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9ICRkZXBmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkNQVUlEX09CSj0uKiQvQ1BVSURfT0JKPSAkY3B1aWRfb2JqLzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkFFU19BU01fT0JKPS4qJC9BRVNfQVNNX09CSj0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eUFJPQ0VTU09SPS4qL1BST0NFU1NPUj0gJHByb2Nlc3Nvci87CglzL15SQU5MSUI9LiovUkFOTElCPSAkcmFubGliLzsKCXMvXkFSRkxBR1M9LiovQVJGTEFHUz0gJGFyZmxhZ3MvOwoJcy9eUEVSTD0uKi9QRVJMPSAkcGVybC87CglzL15LUkI1X0lOQ0xVREVTPS4qL0tSQjVfSU5DTFVERVM9JHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifS87CglzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwoJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CglzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKCWlmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5keWxpYi87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSpcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01BSk9SKSAucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uXCQoU0hMSUJfTUFKT1IpLmR5bGliIC5keWxpYi87CgkJfQoJcy9eU0hBUkVEX0xERkxBR1M9LiovU0hBUkVEX0xERkxBR1M9JHNoYXJlZF9sZGZsYWcvOwoJcHJpbnQgT1VUICRfLiJcbiI7Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCRNYWtlZmlsZSwiJE1ha2VmaWxlLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGVcbiIgaWYgLWUgJE1ha2VmaWxlOwpyZW5hbWUoIiRNYWtlZmlsZS5uZXciLCRNYWtlZmlsZSkgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZS5uZXdcbiI7CgpwcmludCAiQ0MgICAgICAgICAgICA9JGNjXG4iOwpwcmludCAiQ0ZMQUcgICAgICAgICA9JGNmbGFnc1xuIjsKcHJpbnQgIkVYX0xJQlMgICAgICAgPSRsZmxhZ3NcbiI7CnByaW50ICJDUFVJRF9PQkogICAgID0kY3B1aWRfb2JqXG4iOwpwcmludCAiQk5fQVNNICAgICAgICA9JGJuX29ialxuIjsKcHJpbnQgIkRFU19FTkMgICAgICAgPSRkZXNfb2JqXG4iOwpwcmludCAiQUVTX0FTTV9PQkogICA9JGFlc19vYmpcbiI7CnByaW50ICJCRl9FTkMgICAgICAgID0kYmZfb2JqXG4iOwpwcmludCAiQ0FTVF9FTkMgICAgICA9JGNhc3Rfb2JqXG4iOwpwcmludCAiUkM0X0VOQyAgICAgICA9JHJjNF9vYmpcbiI7CnByaW50ICJSQzVfRU5DICAgICAgID0kcmM1X29ialxuIjsKcHJpbnQgIk1ENV9PQkpfQVNNICAgPSRtZDVfb2JqXG4iOwpwcmludCAiU0hBMV9PQkpfQVNNICA9JHNoYTFfb2JqXG4iOwpwcmludCAiUk1EMTYwX09CSl9BU009JHJtZDE2MF9vYmpcbiI7CnByaW50ICJQUk9DRVNTT1IgICAgID0kcHJvY2Vzc29yXG4iOwpwcmludCAiUkFOTElCICAgICAgICA9JHJhbmxpYlxuIjsKcHJpbnQgIkFSRkxBR1MgICAgICAgPSRhcmZsYWdzXG4iOwpwcmludCAiUEVSTCAgICAgICAgICA9JHBlcmxcbiI7CnByaW50ICJLUkI1X0lOQ0xVREVTID0iLCR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0sIlxuIgoJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBuZSAiIjsKCm15ICRkZXNfcHRyPTA7Cm15ICRkZXNfcmlzYzE9MDsKbXkgJGRlc19yaXNjMj0wOwpteSAkZGVzX3Vucm9sbD0wOwpteSAkYm5fbGw9MDsKbXkgJGRlZl9pbnQ9MjsKbXkgJHJjNF9pbnQ9JGRlZl9pbnQ7Cm15ICRtZDJfaW50PSRkZWZfaW50OwpteSAkaWRlYV9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzJfaW50PSRkZWZfaW50OwpteSAkcmM0X2lkeD0wOwpteSAkcmM0X2NodW5rPTA7Cm15ICRiZl9wdHI9MDsKbXkgQHR5cGU9KCJjaGFyIiwic2hvcnQiLCJpbnQiLCJsb25nIik7Cm15ICgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApOwpteSAkZXhwb3J0X3Zhcl9hc19mbj0wOwoKbXkgJGRlc19pbnQ7Cgpmb3JlYWNoIChzb3J0IHNwbGl0KC9ccysvLCRibl9vcHMpKQoJewoJJGRlc19wdHI9MSBpZiAvREVTX1BUUi87CgkkZGVzX3Jpc2MxPTEgaWYgL0RFU19SSVNDMS87CgkkZGVzX3Jpc2MyPTEgaWYgL0RFU19SSVNDMi87CgkkZGVzX3Vucm9sbD0xIGlmIC9ERVNfVU5ST0xMLzsKCSRkZXNfaW50PTEgaWYgL0RFU19JTlQvOwoJJGJuX2xsPTEgaWYgL0JOX0xMT05HLzsKCSRyYzRfaW50PTAgaWYgL1JDNF9DSEFSLzsKCSRyYzRfaW50PTMgaWYgL1JDNF9MT05HLzsKCSRyYzRfaWR4PTEgaWYgL1JDNF9JTkRFWC87CgkkcmM0X2NodW5rPTEgaWYgL1JDNF9DSFVOSy87CgkkcmM0X2NodW5rPTIgaWYgL1JDNF9DSFVOS19MTC87CgkkbWQyX2ludD0wIGlmIC9NRDJfQ0hBUi87CgkkbWQyX2ludD0zIGlmIC9NRDJfTE9ORy87CgkkaWRlYV9pbnQ9MSBpZiAvSURFQV9TSE9SVC87CgkkaWRlYV9pbnQ9MyBpZiAvSURFQV9MT05HLzsKCSRyYzJfaW50PTEgaWYgL1JDMl9TSE9SVC87CgkkcmMyX2ludD0zIGlmIC9SQzJfTE9ORy87CgkkYmZfcHRyPTEgaWYgJF8gZXEgIkJGX1BUUiI7CgkkYmZfcHRyPTIgaWYgJF8gZXEgIkJGX1BUUjIiOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMSwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgxLDAsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVF9MT05HLzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApIGlmIC9USElSVFlfVFdPX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMSwwKSBpZiAvU0lYVEVFTl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDAsMSkgaWYgL0VJR0hUX0JJVC87CgkkZXhwb3J0X3Zhcl9hc19mbj0xIGlmIC9FWFBPUlRfVkFSX0FTX0ZOLzsKCX0KCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbicpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgY3J5cHRvL29wZW5zc2xjb25mLmguaW46JCFcbiI7CnVubGluaygiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyI7Cm9wZW4oT1VULCc+Y3J5cHRvL29wZW5zc2xjb25mLmgubmV3JykgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIjsKcHJpbnQgT1VUICIvKiBvcGVuc3NsY29uZi5oICovXG4iOwpwcmludCBPVVQgIi8qIFdBUk5JTkc6IEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gb3BlbnNzbGNvbmYuaC5pbiBieSBDb25maWd1cmUuICovXG5cbiI7CgpwcmludCBPVVQgIi8qIE9wZW5TU0wgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6ICovXG4iOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF8oLiopLyMgaWYgZGVmaW5lZChPUEVOU1NMXyQxKSBcJlwmICFkZWZpbmVkKCQxKVxuIyAgZGVmaW5lICQxXG4jIGVuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9ICIgICAvKiBubyBjaXBoZXJzIGV4Y2x1ZGVkICovXG4iIGlmICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIGVxICIiOwokb3BlbnNzbF90aHJlYWRfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9zeXNfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9vdGhlcl9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CnByaW50IE9VVCAkb3BlbnNzbF9zeXNfZGVmaW5lczsKcHJpbnQgT1VUICIjaWZuZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORFxuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CnByaW50IE9VVCAiXG4jZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7IHByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMRElSIFwiJG9wZW5zc2xkaXJcIlxuIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsgcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkcHJlZml4L2xpYi9lbmdpbmVzXCJcbiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIm1ha2UgUEVSTD1cJyRwZXJsXCciOwoJbXkgJG1ha2VfdGFyZ2V0cyA9ICIiOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGxpbmtzIiBpZiAkc3ltbGluazsKCSRtYWtlX3RhcmdldHMgLj0gIiBkZXBlbmQiIGlmICRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAkbWFrZV9kZXBlbmQ7CgkkbWFrZV90YXJnZXRzIC49ICIgZ2VudGVzdHMiIGlmICRzeW1saW5rOwoJKHN5c3RlbSAkbWFrZV9jb21tYW5kLiRtYWtlX3RhcmdldHMpID09IDAgb3IgZXhpdCAkPwoJCWlmICRtYWtlX3RhcmdldHMgbmUgIiI7CglpZiAoICRwZXJsID1+IG1AXi9AKSB7CgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCRwZXJsLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCkgewoJCXByaW50IDw8RU9GOwoKU2luY2UgeW91J3ZlIGRpc2FibGVkIG9yIGVuYWJsZWQgYXQgbGVhc3Qgb25lIGFsZ29yaXRobSwgeW91IG5lZWQgdG8gZG8KdGhlIGZvbGxvd2luZyBiZWZvcmUgYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgl9Cn0KCiMgY3JlYXRlIHRoZSBtcy92ZXJzaW9uMzIucmMgZmlsZSBpZiBuZWVkZWQKaWYgKCRJc01LMU1GKSB7CglteSAoJHYxLCAkdjIsICR2MywgJHY0KTsKCWlmICgkdmVyc2lvbl9udW0gPX4gLyheWzAtOWEtZl17MX0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pL2kpIHsKCQkkdjE9aGV4ICQxOwoJCSR2Mj1oZXggJDI7CgkJJHYzPWhleCAkMzsKCQkkdjQ9aGV4ICQ0OwoJfQoJb3BlbiAoT1VULCI+bXMvdmVyc2lvbjMyLnJjIikgfHwgZGllICJDYW4ndCBvcGVuIG1zL3ZlcnNpb24zMi5yYyI7CglwcmludCBPVVQgPDxFT0Y7CiNpbmNsdWRlIDx3aW52ZXIuaD4KCkxBTkdVQUdFIDB4MDksMHgwMQoKMSBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIFBST0RVQ1RWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogIEZJTEVGTEFHUyAweDAxTAojZWxzZQogIEZJTEVGTEFHUyAweDAwTAojZW5kaWYKICBGSUxFT1MgVk9TX19XSU5ET1dTMzIKICBGSUxFVFlQRSBWRlRfRExMCiAgRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KCUJMT0NLICIwNDA5MDRiMCIKCUJFR0lOCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgoJICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIkdmVyc2lvblxcMCIKI2lmIGRlZmluZWQoQ1JZUFRPKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKFNTTCkKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInNzbGVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInNzbGVheTMyLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lJGV4ZV9leHQiIGFuZCAteCBfKQoJCQl7CgkJCXJldHVybiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgdW5sZXNzICgkbmFtZSBlcSAicGVybCIgYW5kCgkJCSBzeXN0ZW0oIiRwYXRoLyRuYW1lJGV4ZV9leHQgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRjcHVpZF9vYmosbXkgJGJuX29iaixteSAkZGVzX29iaixteSAkYWVzX29iaiwgbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkZHNvX3NjaGVtZSxteSAkc2hhcmVkX3RhcmdldCxteSAkc2hhcmVkX2NmbGFnLAoJbXkgJHNoYXJlZF9sZGZsYWcsbXkgJHNoYXJlZF9leHRlbnNpb24sbXkgJHJhbmxpYixteSAkYXJmbGFncyk9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkY3B1aWRfb2JqICAgID0gJGNwdWlkX29iagpcJGJuX29iaiAgICAgICA9ICRibl9vYmoKXCRkZXNfb2JqICAgICAgPSAkZGVzX29iagpcJGFlc19vYmogICAgICA9ICRhZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZSsxXSA9fiAvXihkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdICF+IC9eKGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2RsJywgJ2RsZmNuJywgJ3dpbjMyJyBhbmQgJ3ZtcydcbiI7CgkJCX0KCQl9CglwcmludCBTVERFUlIgIk5vIHNhbml0eSBlcnJvcnMgZGV0ZWN0ZWQhXG4iIGlmICRlcnJvcmNudCA9PSAwOwoJcmV0dXJuICRlcnJvcmNudDsKCX0K