OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbMzg2XSBbLS1wcmVmaXg9RElSXSBbLS1vcGVuc3NsZGlyPU9QRU5TU0xESVJdIFstLXdpdGgteHh4Wz12dnZdXSBbLS10ZXN0LXNhbml0eV0gb3MvY29tcGlsZXJbOmZsYWdzXVxuIjsKCiMgT3B0aW9uczoKIwojIC0tb3BlbnNzbGRpciAgaW5zdGFsbCBPcGVuU1NMIGluIE9QRU5TU0xESVIgKERlZmF1bHQ6IERJUi9zc2wgaWYgdGhlCiMgICAgICAgICAgICAgICAtLXByZWZpeCBvcHRpb24gaXMgZ2l2ZW47IC91c3IvbG9jYWwvc3NsIG90aGVyd2lzZSkKIyAtLXByZWZpeCAgICAgIHByZWZpeCBmb3IgdGhlIE9wZW5TU0wgaW5jbHVkZSwgbGliIGFuZCBiaW4gZGlyZWN0b3JpZXMKIyAgICAgICAgICAgICAgIChEZWZhdWx0OiB0aGUgT1BFTlNTTERJUiBkaXJlY3RvcnkpCiMKIyAtLWluc3RhbGxfcHJlZml4ICBBZGRpdGlvbmFsIHByZWZpeCBmb3IgcGFja2FnZSBidWlsZGVycyAoZW1wdHkgYnkKIyAgICAgICAgICAgICAgIGRlZmF1bHQpLiAgVGhpcyBuZWVkbid0IGJlIHNldCBpbiBhZHZhbmNlLCB5b3UgY2FuCiMgICAgICAgICAgICAgICBqdXN0IGFzIHdlbGwgdXNlICJtYWtlIElOU1RBTExfUFJFRklYPS93aGF0ZXZlciBpbnN0YWxsIi4KIwojIC0td2l0aC1rcmI1LWRpciAgRGVjbGFyZSB3aGVyZSBLZXJiZXJvcyA1IGxpdmVzLiAgVGhlIGxpYnJhcmllcyBhcmUgZXhwZWN0ZWQKIwkJdG8gbGl2ZSBpbiB0aGUgc3ViZGlyZWN0b3J5IGxpYi8gYW5kIHRoZSBoZWFkZXIgZmlsZXMgaW4KIwkJaW5jbHVkZS8uICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojIC0td2l0aC1rcmI1LWxpYiAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBsaWJyYXJpZXMgbGl2ZS4gIEEgdmFsdWUgaXMKIwkJcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9saWIpCiMgLS13aXRoLWtyYjUtaW5jbHVkZSAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBoZWFkZXIgZmlsZXMgbGl2ZS4gIEEKIwkJdmFsdWUgaXMgcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9pbmNsdWRlKQojIC0td2l0aC1rcmI1LWZsYXZvciAgRGVjbGFyZSB3aGF0IGZsYXZvciBvZiBLZXJiZXJvcyA1IGlzIHVzZWQuICBDdXJyZW50bHkKIwkJc3VwcG9ydGVkIHZhbHVlcyBhcmUgIk1JVCIgYW5kICJIZWltZGFsIi4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMKIyAtLXRlc3Qtc2FuaXR5IE1ha2UgYSBudW1iZXIgb2Ygc2FuaXR5IGNoZWNrcyBvbiB0aGUgZGF0YSBpbiB0aGlzIGZpbGUuCiMgICAgICAgICAgICAgICBUaGlzIGlzIGEgZGVidWdnaW5nIHRvb2wgZm9yIE9wZW5TU0wgZGV2ZWxvcGVycy4KIwojIC0tY3Jvc3MtY29tcGlsZS1wcmVmaXggQWRkIHNwZWNpZmllZCBwcmVmaXggdG8gYmludXRpbHMgY29tcG9uZW50cy4KIwojIG5vLWh3LXh4eCAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMgY3J5cHRvIGhhcmR3YXJlLgojICAgICAgICAgICAgICAgR2VuZXJpYyBPcGVuU1NMLXN0eWxlIG1ldGhvZHMgcmVsYXRpbmcgdG8gdGhpcyBzdXBwb3J0CiMgICAgICAgICAgICAgICBhcmUgYWx3YXlzIGNvbXBpbGVkIGJ1dCByZXR1cm4gTlVMTCBpZiB0aGUgaGFyZHdhcmUKIyAgICAgICAgICAgICAgIHN1cHBvcnQgaXNuJ3QgY29tcGlsZWQuCiMgbm8taHcgICAgICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBhbnkgY3J5cHRvIGhhcmR3YXJlLgojIFtuby1ddGhyZWFkcyAgW2Rvbid0XSB0cnkgdG8gY3JlYXRlIGEgbGlicmFyeSB0aGF0IGlzIHN1aXRhYmxlIGZvcgojICAgICAgICAgICAgICAgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgKGRlZmF1bHQgaXMgInRocmVhZHMiIGlmIHdlCiMgICAgICAgICAgICAgICBrbm93IGhvdyB0byBkbyBpdCkKIyBbbm8tXXNoYXJlZAlbZG9uJ3RdIHRyeSB0byBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyB3aGVuIHN1cHBvcnRlZC4KIyBuby1hc20gICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyCiMgbm8tZHNvICAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgbmF0aXZlIHNoYXJlZC1saWJyYXJ5IG1ldGhvZHMuIFRoaXMKIyAgICAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoYXQgYWxsIG1ldGhvZHMganVzdCByZXR1cm4gTlVMTC4KIyBuby1rcmI1ICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBLUkI1IGxpYnJhcnkgb3IgY29kZS4KIyBbbm8tXXpsaWIgICAgIFtkb24ndF0gY29tcGlsZSBzdXBwb3J0IGZvciB6bGliIGNvbXByZXNzaW9uLgojIHpsaWItZHluYW1pYwlMaWtlICJ6bGliIiwgYnV0IHRoZSB6bGliIGxpYnJhcnkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzaGFyZWQKIwkJbGlicmFyeSBhbmQgd2lsbCBiZSBsb2FkZWQgaW4gcnVuLXRpbWUgYnkgdGhlIE9wZW5TU0wgbGlicmFyeS4KIyAzODYgICAgICAgICAgIGdlbmVyYXRlIDgwMzg2IGNvZGUKIyBuby1zc2UyCWRpc2FibGVzIElBLTMyIFNTRTIgY29kZSwgYWJvdmUgb3B0aW9uIGltcGxpZXMgbm8tc3NlMgojIG5vLTxjaXBoZXI+ICAgYnVpbGQgd2l0aG91dCBzcGVjaWZpZWQgYWxnb3JpdGhtIChyc2EsIGlkZWEsIHJjNSwgLi4uKQojIC08eHh4PiArPHh4eD4gY29tcGlsZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggCiMKIyBERUJVR19TQUZFU1RBQ0sgdXNlIHR5cGUtc2FmZSBzdGFja3MgdG8gZW5mb3JjZSB0eXBlLXNhZmV0eSBvbiBzdGFjayBpdGVtcwojCQlwcm92aWRlZCB0byBzdGFjayBjYWxscy4gR2VuZXJhdGVzIHVuaXF1ZSBzdGFjayBmdW5jdGlvbnMgZm9yCiMJCWVhY2ggcG9zc2libGUgc3RhY2sgdHlwZS4KIyBERVNfUFRSCXVzZSBwb2ludGVyIGxvb2t1cCB2cyBhcnJheXMgaW4gdGhlIERFUyBpbiBjcnlwdG8vZGVzL2Rlc19sb2NsLmgKIyBERVNfUklTQzEJdXNlIGRpZmZlcmVudCBERVNfRU5DUllQVCBtYWNybyB0aGF0IGhlbHBzIHJlZHVjZSByZWdpc3RlcgojCQlkZXBlbmRhbmNpZXMgYnV0IG5lZWRzIHRvIG1vcmUgcmVnaXN0ZXJzLCBnb29kIGZvciBSSVNDIENQVSdzCiMgREVTX1JJU0MyCUEgZGlmZmVyZW50IFJJU0MgdmFyaWFudC4KIyBERVNfVU5ST0xMCXVucm9sbCB0aGUgaW5uZXIgREVTIGxvb3AsIHNvbWV0aW1lcyBoZWxwcywgc29tdGltZXMgaGluZGVycy4KIyBERVNfSU5UCXVzZSAnaW50JyBpbnN0ZWFkIG9mICdsb25nJyBmb3IgREVTX0xPTkcgaW4gY3J5cHRvL2Rlcy9kZXMuaAojCQlUaGlzIGlzIHVzZWQgb24gdGhlIERFQyBBbHBoYSB3aGVyZSBsb25nIGlzIDggYnl0ZXMKIwkJYW5kIGludCBpcyA0CiMgQk5fTExPTkcJdXNlIHRoZSB0eXBlICdsb25nIGxvbmcnIGluIGNyeXB0by9ibi9ibi5oCiMgTUQyX0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBNRDJfSU5UIGluIGNyeXB0by9tZDIvbWQyLmgKIyBNRDJfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIElERUFfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgSURFQV9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgUkMyX1NIT1JUCXVzZSAnc2hvcnQnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDMl9JTlQgaW4gY3J5cHRvL3JjMi9yYzIuaAojIFJDMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkM0X0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzRfSU5UIGluIGNyeXB0by9yYzQvcmM0LmgKIyBSQzRfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9JTkRFWAlkZWZpbmUgUkM0X0lOREVYIGluIGNyeXB0by9yYzQvcmM0X2xvY2wuaC4gIFRoaXMgdHVybnMgb24KIwkJYXJyYXkgbG9va3VwcyBpbnN0ZWFkIG9mIHBvaW50ZXIgdXNlLgojIFJDNF9DSFVOSwllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIChuYXR1cmFsIENQVQojCQl3b3JkKSBib3VuZGFyeS4KIyBSQzRfQ0hVTktfTEwJZW5hYmxlcyBjb2RlIHRoYXQgaGFuZGxlcyBkYXRhIGFsaWduZWQgYXQgbG9uZyBsb25nIGJvdW5kYXJ5CiMJCShpbnRlbmRlZCBmb3IgNjQtYml0IENQVXMgcnVubmluZyAzMi1iaXQgT1MpLgojIEJGX1BUUgl1c2UgJ3BvaW50ZXIgYXJpdGhtYXRpYycgZm9yIEJsb3dmaXNoICh1bnNhZmUgb24gQWxwaGEpLgojIEJGX1BUUjIJaW50ZWwgc3BlY2lmaWMgdmVyc2lvbiAoZ2VuZXJpYyB2ZXJzaW9uIGlzIG1vcmUgZWZmaWNpZW50KS4KIwojIEZvbGxvd2luZyBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBzY3JpcHQKIwojIE1ENV9BU00JdXNlIHNvbWUgZXh0cmEgbWQ1IGFzc2VtYmVyLAojIFNIQTFfQVNNCXVzZSBzb21lIGV4dHJhIHNoYTEgYXNzZW1iZXIsIG11c3QgZGVmaW5lIExfRU5ESUFOIGZvciB4ODYKIyBSTUQxNjBfQVNNCXVzZSBzb21lIGV4dHJhIHJpcGVtZDE2MCBhc3NlbWJlciwKIyBTSEEyNTZfQVNNCXNoYTI1Nl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBTSEE1MTJfQVNNCXNoYTUxMl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBBRVNfQVNNCUFTRV9bZW58ZGVdY3J5cHQgaXMgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibGVyCgojIE1pbmltdW0gd2FybmluZyBvcHRpb25zLi4uIGFueSBjb250cmlidXRpb25zIHRvIE9wZW5TU0wgc2hvdWxkIGF0IGxlYXN0IGdldAojIHBhc3QgdGhlc2UuIAoKbXkgJGdjY19kZXZ0ZWFtX3dhcm4gPSAiLVdhbGwgLXBlZGFudGljIC1EUEVEQU5USUMgLVduby1sb25nLWxvbmcgLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzaGFkb3cgLVdmb3JtYXQgLVdlcnJvciAtRENSWVBUT19NREVCVUdfQUxMIC1EQ1JZUFRPX01ERUJVR19BQk9SVCAtRFJFRl9DSEVDSyAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCI7CgpteSAkc3RyaWN0X3dhcm5pbmdzID0gMDsKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2FzbT0ieDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFlc19jdHIubyBhZXMtNTg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubyI7CgpteSAkeDg2X2VsZl9hc209IiR4ODZfYXNtOmVsZiI7CgpteSAkeDg2XzY0X2FzbT0ieDg2XzY0Y3B1aWQubzp4ODZfNjQtZ2NjLm8geDg2XzY0LW1vbnQubzo6YWVzX2N0ci5vIGFlcy14ODZfNjQubyBhZXNuaS14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubyI7Cm15ICRpYTY0X2FzbT0iaWE2NGNwdWlkLm86Ym4taWE2NC5vIGlhNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXNfY3RyLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86OnJjNC1pYTY0Lm8gcmM0X3NrZXkubzo6Ojo6dm9pZCI7Cm15ICRzcGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8gc3BhcmN2OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlc19jdHIubyBhZXMtc3BhcmN2OS5vOjo6c2hhMS1zcGFyY3Y5Lm8gc2hhMjU2LXNwYXJjdjkubyBzaGE1MTItc3BhcmN2OS5vOjo6Ojo6OnZvaWQiOwpteSAkc3BhcmN2OF9hc209IjpzcGFyY3Y4Lm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6Ojo6OnZvaWQiOwpteSAkYWxwaGFfYXNtPSJhbHBoYWNwdWlkLm86Ym5fYXNtLm8gYWxwaGEtbW9udC5vOjo6Ojo6Ojo6Ojo6dm9pZCI7Cm15ICRtaXBzM19hc209Ijpibi1taXBzMy5vOjo6Ojo6Ojo6Ojo6dm9pZCI7Cm15ICRzMzkweF9hc209InMzOTB4Y2FwLm8gczM5MHhjcHVpZC5vOmJuLXMzOTB4Lm8gczM5MHgtbW9udC5vOjphZXNfY3RyLm8gYWVzLXMzOTB4Lm86OjpzaGExLXMzOTB4Lm8gc2hhMjU2LXMzOTB4Lm8gc2hhNTEyLXMzOTB4Lm86OnJjNC1zMzkweC5vOjo6Ojp2b2lkIjsKbXkgJGFybXY0X2FzbT0iOmJuX2FzbS5vIGFybXY0LW1vbnQubzo6YWVzX2NiYy5vIGFlc19jdHIubyBhZXMtYXJtdjQubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6Ojp2b2lkIjsKbXkgJHBhcmlzYzExX2FzbT0icGFyaXNjaWQubzpibl9hc20ubyBwYXJpc2MtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXNfY3RyLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OjMyIjsKbXkgJHBhcmlzYzIwX2FzbT0icGFyaXNjaWQubzpwYS1yaXNjMlcubyBwYXJpc2MtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXNfY3RyLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OjY0IjsKbXkgJHBwYzMyX2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzX2N0ci5vIGFlcy1wcGMubzo6OnNoYTEtcHBjLm8gc2hhMjU2LXBwYy5vOjo6Ojo6IjsKbXkgJHBwYzY0X2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzX2N0ci5vIGFlcy1wcGMubzo6OnNoYTEtcHBjLm8gc2hhMjU2LXBwYy5vIHNoYTUxMi1wcGMubzo6Ojo6OiI7Cm15ICRub19hc209Ijo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKCiMgQXMgZm9yICRCU0R0aHJlYWRzLiBJZGVhIGlzIHRvIG1haW50YWluICJjb2xsZWN0aXZlIiBzZXQgb2YgZmxhZ3MsCiMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLCAKIyBidXQgaXMgdHJlYXRlZCBkaWZmZXJlbnRseS4gT3BlbkJTRCBleHBhbmRzIGlzIGFzIC1EX1BPU0lYX1RIUkVBRAojIC1sY19yLCB3aGljaCBpcyBzdWZmaWNpZW50LiBGcmVlQlNEIDQueCBleHBhbmRzIGl0IGFzIC1sY19yLAojIHdoaWNoIGhhcyB0byBiZSBhY2NvbXBhbmllZCBieSBleHBsaWNpdCAtRF9USFJFQURfU0FGRSBhbmQKIyBzb21ldGltZXMgLURfUkVFTlRSQU5ULiBGcmVlQlNEIDUueCBleHBhbmRzIGl0IGFzIC1sY19yLCB3aGljaAojIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQ/Cm15ICRCU0R0aHJlYWRzPSItcHRocmVhZCAtRF9USFJFQURfU0FGRSAtRF9SRUVOVFJBTlQiOwoKI2NvbmZpZy1zdHJpbmcJJGNjIDogJGNmbGFncyA6ICR1bmlzdGQgOiAkdGhyZWFkX2NmbGFnIDogJHN5c19pZCA6ICRsZmxhZ3MgOiAkYm5fb3BzIDogJGNwdWlkX29iaiA6ICRibl9vYmogOiAkZGVzX29iaiA6ICRhZXNfb2JqIDogJGJmX29iaiA6ICRtZDVfb2JqIDogJHNoYTFfb2JqIDogJGNhc3Rfb2JqIDogJHJjNF9vYmogOiAkcm1kMTYwX29iaiA6ICRyYzVfb2JqIDogJHdwX29iaiA6ICRjbWxsX29iaiA6ICRkc29fc2NoZW1lIDogJHNoYXJlZF90YXJnZXQgOiAkc2hhcmVkX2NmbGFnIDogJHNoYXJlZF9sZGZsYWcgOiAkc2hhcmVkX2V4dGVuc2lvbiA6ICRyYW5saWIgOiAkYXJmbGFncyA6ICRtdWx0aWxpYgoKbXkgJXRhYmxlPSgKIyBGaWxlICdUQUJMRScgKGNyZWF0ZWQgYnkgJ21ha2UgVEFCTEUnKSBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoaXMgbGlzdCwKIyBmb3JtYXR0ZWQgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KCgojImIiLAkJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX06JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy0yYyIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgTUQyX0NIQVI6JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy1yaSIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0lOREVYOiR7dGJuX211bH06OiIsCiMiYjItaXMtcmktZHAiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMyfUlERUFfU0hPUlQgUkM0X0lOREVYIERFU19QVFI6JHt0Ym5fbXVsfTo6IiwKCiMgT3VyIGRldmVsb3BtZW50IGNvbmZpZ3MKInB1cmlmeSIsCSJwdXJpZnkgZ2NjOi1nIC1EUFVSSUZZIC1XYWxsOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOjo6OiIsCiJkZWJ1ZyIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWdnZGIgLWcyIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6KHVua25vd24pOjotbGVmZW5jZTo6OjoiLAoiZGVidWctYmVuIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6Ojo6Ym44Ni1lbGYubyBjbzg2LWVsZi5vIiwKImRlYnVnLWJlbi1vcGVuYnNkIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QtZGVidWciLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLWRlYnVnIiwJImdjYzokZ2NjX2RldnRlYW1fd2FybiAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZzMgLU8yIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLW5vLW9wdCIsCSJnY2M6IC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUcgLVdlcnJvciAtRExfRU5ESUFOIC1EVEVSTUlPUyAtV2FsbCAtZzM6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOi1ETF9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtRFBFREFOVElDIC1nIC1tYXJjaD1pNDg2IC1wZWRhbnRpYyAtV3NoYWRvdyAtV2FsbCAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbjo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZTY0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1nIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUzMiIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW0zMiAtRExfRU5ESUFOIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUtb3B0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1PMyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZyAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZi1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20tZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZjMyIiwiZ2NjOi1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQk5fU1RSSUNUIC1EUFVSSUZZIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIC1ET1BFTlNTTF9OT19BU00gLURPUEVOU1NMX05PX0lOTElORV9BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRFBFREFOVElDIC1ETUQzMl9SRUdfVD1pbnQgLU8xIC1nZ2RiMiAtV2FsbCAtV2Vycm9yIC1XdW5kZWYgLXBlZGFudGljIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xbm8tbG9uZy1sb25nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmY2NCIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtRE1EMzJfUkVHX1Q9aW50IC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1pYTMyLWFlcyIsICJnY2M6LURBRVNfRVhQRVJJTUVOVEFMIC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ong4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubzpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXNfeDg2Y29yZS5vIGFlc19jYmMubyBhZXNfY3RyLm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWdlbmVyaWMzMiIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1nZW5lcmljNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC14ODZfNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtV2FsbCAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGlzdCIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIEJhc2ljIGNvbmZpZ3MgdGhhdCBzaG91bGQgd29yayBvbiBhbnkgKDMyIGFuZCBsZXNzIGJpdCkgYm94CiJnY2MiLAkJImdjYzotTzM6Oih1bmtub3duKTo6OkJOX0xMT05HOjo6IiwKImNjIiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMjIyNWT1MgQ29uZmlndXJhdGlvbnMKInZvcy1nY2MiLCJnY2M6LU8zIC1XYWxsIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EX1ZPU19FWFRFTkRFRF9OQU1FUyAtREJfRU5ESUFOOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCiJkZWJ1Zy12b3MtZ2NjIiwiZ2NjOi1PMCAtZyAtV2FsbCAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBHTlUgQyBzZXR1cHMKIyAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSBzd2l0Y2hlcyBvZmYgaW5saW5lIGFzc2VtYmxlci4gV2UgaGF2ZSB0byBkbyBpdAojIGhlcmUgYmVjYXVzZSB3aGVuZXZlciBHTlUgQyBpbnN0YW50aWF0ZXMgYW4gYXNzZW1ibGVyIHRlbXBsYXRlIGl0CiMgc3Vycm91bmRzIGl0IHdpdGggI0FQUCAjTk9fQVBQIGNvbW1lbnQgcGFpciB3aGljaCAoYXQgbGVhc3QgU29sYXJpcwojIDdfeDg2KSAvdXNyL2Njcy9iaW4vYXMgZmFpbHMgdG8gYXNzZW1ibGUgd2l0aCAiSWxsZWdhbCBtbmVtb25pYyIKIyBlcnJvciBtZXNzYWdlLgoic29sYXJpcy14ODYtZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbCAtRExfRU5ESUFOIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1zaGFyZWQgLXN0YXRpYy1saWJnY2MgbWlnaHQgYXBwZWFyIGNvbnRyb3ZlcnNpYWwsIGJ1dCBtb2R1bGVzIHRha2VuCiMgZnJvbSBzdGF0aWMgbGliZ2NjIGRvIG5vdCBoYXZlIHJlbG9jYXRpb25zIGFuZCBsaW5raW5nIHRoZW0gaW50byBvdXIKIyBzaGFyZWQgb2JqZWN0cyBkb2Vzbid0IGhhdmUgYW55IG5lZ2F0aXZlIHNpZGUtZWZmZWN0cy4gT24gdGhlIGNvbnRyYXJ5LAojIGRvaW5nIHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBnY2Mgc2hhcmVkIGJ1aWxkIHdpdGggU3VuIEMuIEdpdmVuCiMgdGhhdCBnY2MgZ2VuZXJhdGVzIGZhc3RlciBjb2RlIFt0aGFua3MgdG8gaW5saW5lIGFzc2VtYmxlcl0sIEkgd291bGQKIyBhY3R1YWxseSByZWNvbW1lbmQgdG8gY29uc2lkZXIgdXNpbmcgZ2NjIHNoYXJlZCBidWlsZCBldmVuIHdpdGggdmVuZG9yCiMgY29tcGlsZXI6LSkKIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KInNvbGFyaXM2NC14ODZfNjQtZ2NjIiwiZ2NjOi1tNjQgLU8zIC1XYWxsIC1ETF9FTkRJQU4gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQgLXN0YXRpYy1saWJnY2M6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAogCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBTdW4gQyBzZXR1cHMKInNvbGFyaXMteDg2LWNjIiwiY2M6LWZhc3QgLU8gLVhhOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC14ODZfNjQtY2MiLCJjYzotZmFzdCAteGFyY2g9YW1kNjQgLXhzdHJjb25zdCAtWGEgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9YW1kNjQgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggR05VIEMgc2V0dXBzCiJzb2xhcmlzLXNwYXJjdjctZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotbXY4IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLW0zMiBzaG91bGQgYmUgc2FmZSB0byBhZGQgYXMgbG9uZyBhcyBkcml2ZXIgcmVjb2duaXplcyAtbWNwdT11bHRyYXNwYXJjCiJzb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWdjYyIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6LzY0IiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1PIC1nIC1tdjggLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1PIC1nIC1tY3B1PXVsdHJhc3BhcmMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1Xbm8tbG9uZy1sb25nIC1EX19FWFRFTlNJT05TX18gLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIFN1biBDIHNldHVwcwojIFNDNC4wIGRvZXNuJ3QgcGFzcyAnbWFrZSB0ZXN0JywgdXBncmFkZSB0byBTQzUuMCBvciBTQzQuMi4KIyBTQzQuMiBpcyBvaywgYmV0dGVyIHRoYW4gZ2NjIGV2ZW4gb24gYm4gYXMgbG9uZyBhcyB5b3UgdGVsbCBpdCAteGFyY2g9djgKIyBTQzUuMCBub3RlOiBDb21waWxlciBjb21tb24gcGF0Y2ggMTA3MzU3LTAxIG9yIGxhdGVyIGlzIHJlcXVpcmVkIQoic29sYXJpcy1zcGFyY3Y3LWNjIiwiY2M6LXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1jYyIsImNjOi14YXJjaD12OCAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OSAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LXhhcmNoPXY5IC1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOi91c3IvY2NzL2Jpbi9hciByczo6LzY0IiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteGFyY2g9djggLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY4cGx1cyAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCgojIyMjIFN1bk9TIGNvbmZpZ3MsIGFzc3VtaW5nIHNwYXJjIGZvciB0aGUgZ2NjIG9uZS4KIyJzdW5vcy1jYyIsICJjYzotTzQgLUROT1BST1RPIC1ETk9DT05TVDo6KHVua25vd24pOlNVTk9TOjpERVNfVU5ST0xMOiR7bm9fYXNtfTo6IiwKInN1bm9zLWdjYyIsImdjYzotTzMgLW12OCAtRHNzaXplX3Q9aW50OjoodW5rbm93bik6U1VOT1M6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19QVFIgREVTX1JJU0MxOiR7bm9fYXNtfTo6IiwKCiMjIyMgSVJJWCA1LnggY29uZmlncwojIC1taXBzMiBmbGFnIGlzIGFkZGVkIGJ5IC4vY29uZmlnIHdoZW4gYXBwcm9wcmlhdGUuCiJpcml4LWdjYyIsImdjYzotTzMgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJUklYIDYueCBjb25maWdzCiMgT25seSBOMzIgYW5kIE42NCBBQklzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBuZWVkIE8zMiBBQkkgYnVpbGQsIGludm9rZQojICcuL0NvbmZpZ3VyZSBpcml4LWNjIC1vMzInIG1hbnVhbGx5LgoiaXJpeC1taXBzMy1nY2MiLCJnY2M6LW1hYmk9bjMyIC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDoke21pcHMzX2FzbX06ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPW4zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjMyIiwKImlyaXgtbWlwczMtY2MiLCAiY2M6LW4zMiAtbWlwczMgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OkRFU19QVFIgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDoke21pcHMzX2FzbX06ZGxmY246aXJpeC1zaGFyZWQ6Oi1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiMgTjY0IEFCSSBidWlsZHMuCiJpcml4NjQtbWlwczQtZ2NjIiwiZ2NjOi1tYWJpPTY0IC1taXBzNCAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczNfYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6LW1hYmk9NjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJpcml4NjQtbWlwczQtY2MiLCAiY2M6LTY0IC1taXBzNCAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRzAgLXJkYXRhX3NoYXJlZCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6JHttaXBzM19hc219OmRsZmNuOmlyaXgtc2hhcmVkOjotNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MyLWdjYyIsImdjYzotbWFyY2g9Mi4wIC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6Ojp2b2lkOmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6Ojo6dm9pZDpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfNjQiLAoKIyBNb3JlIGF0dGVtcHRzIGF0IHVuaWZpZWQgMTAuWCBhbmQgMTEuWCB0YXJnZXRzIGZvciBIUCBDIGNvbXBpbGVyLgojCiMgQ2hyaXMgUnVlbW1sZXIgPHJ1ZW1tbGVyQGN1cC5ocC5jb20+CiMgS2V2aW4gU3RldmVzIDxrc0BocC5zZT4KImhwdXgtcGFyaXNjLWNjIiwiY2M6K08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzEtY2MiLCJjYzorREExLjEgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtwYXJpc2MxMV9hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMS4xIiwKImhwdXgtcGFyaXNjMi1jYyIsImNjOitEQTIuMCArRFMyLjAgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWSAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOjpwYS1yaXNjMi5vOjo6Ojo6Ojo6Ojo6dm9pZDpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1jYyIsImNjOitERDY0ICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke3BhcmlzYzIwX2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF82NCIsCgojIEhQL1VYIElBLTY0IHRhcmdldHMKImhwdXgtaWE2NC1jYyIsImNjOi1BZSArREQzMiArTzIgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0REMzIgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDMyIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4NjQiLAojIEdDQyBidWlsZHMuLi4KImhwdXgtaWE2NC1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4MzIiLAoiaHB1eDY0LWlhNjQtZ2NjIiwiZ2NjOi1tbHA2NCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1tbHA2NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXg2NCIsIAoKIyBMZWdhY3kgSFBVWCA5LlggY29uZmlncy4uLgoiaHB1eC1jYyIsCSJjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWSAtQWUgK0VTbGl0ICtPMiAtejo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1nY2MiLAkiZ2NjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtTzM6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBIUCBNUEUvaVggaHR0cDovL2phenouZXh0ZXJuYWwuaHAuY29tL3NyYy9vcGVuc3NsLwoiTVBFL2lYLWdjYyIsCSJnY2M6LURfRU5ESUFOIC1EQk5fRElWMlcgLU8zIC1EX1BPU0lYX1NPVVJDRSAtRF9TT0NLRVRfU09VUkNFIC1JL1NZU0xPRy9QVUI6Oih1bmtub3duKTpNUEU6LUwvU1lTTE9HL1BVQiAtbHN5c2xvZyAtbHNvY2tldCAtbGN1cnNlczpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6IiwKCiMgREVDIEFscGhhIE9TRi8xL1RydTY0IHRhcmdldHMuCiMKIwkiV2hhdCdzIGluIGEgbmFtZT8gVGhhdCB3aGljaCB3ZSBjYWxsIGEgcm9zZQojCSBCeSBhbnkgb3RoZXIgd29yZCB3b3VsZCBzbWVsbCBhcyBzd2VldC4iCiMKIyAtIFdpbGxpYW0gU2hha2VzcGVhcmUsICJSb21lbyAmIEp1bGlldCIsIEFjdCBJSSwgc2NlbmUgSUkuCiMKIyBGb3IgZ2NjLCB0aGUgZm9sbG93aW5nIGdhdmUgYSAlNTAgc3BlZWR1cCBvbiBhIDE2NCBvdmVyIHRoZSAnREVTX0lOVCcgdmVyc2lvbgojCiJvc2YxLWFscGhhLWdjYyIsICJnY2M6LU8zOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMToke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoib3NmMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6LW1zeW06LnNvIiwKCiMjIyMKIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCiMjIyMKIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmlnIGlzIGZyZWUgdG8KIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZpbmUgYXBwcm9wcmlhdGUgLW1hcmNoLgojIElmIHlvdSBjb21waWxlciBkb2VzIG5vdCwgZG8gY29tcGxlbWVudCBjb25maWcgY29tbWFuZCBsaW5lIHdpdGggb25lIQoibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dCIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbCAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXgtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAojIyMjIFNQQVJDIExpbnV4IHNldHVwcwojIFJheSBNaWxsZXIgPHJheS5taWxsZXJAY29tcHV0aW5nLXNlcnZpY2VzLm94Zm9yZC5hYy51az4gaGFzIHBhdGllbnRseQojIGFzc2lzdGVkIHdpdGggZGVidWdnaW5nIG9mIGZvbGxvd2luZyB0d28gY29uZmlncy4KImxpbnV4LXNwYXJjdjgiLCJnY2M6LW12OCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIGl0J3MgYSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0CiMgLVdhLC1BdjhwbHVzIHNob3VsZCBkbyB0aGUgdHJpY2sgbm8gbWF0dGVyIHdoYXQuCiJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEdDQyAzLjEgaXMgYSByZXF1aXJlbWVudAoibGludXg2NC1zcGFyY3Y5IiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKIyBTcGVjaWFsIG5vdGVzOgojIC0gbGludXgtYWxwaGErYnd4LWdjYyBpcyBtZW50IHRvIGJlIHVzZWQgZnJvbSAuL2NvbmZpZyBvbmx5LiBJZiB5b3UKIyAgIG91Z2h0IHRvIHJ1biAnLi9Db25maWd1cmUgbGludXgtYWxwaGErYnd4LWdjYycgbWFudWFsbHksIGRvCiMgICBjb21wbGVtZW50IHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtbWNwdT1ldjU2LCAtbWNwdT1ldjYgb3Igd2hhdGV2ZXIKIyAgIHdoaWNoIGlzIGFwcHJvcHJpYXRlLgojIC0gSWYgeW91IHVzZSBjY2Mga2VlcCBpbiBtaW5kIHRoYXQgLWZhc3QgaW1wbGllcyAtYXJjaCBob3N0IGFuZCB0aGUKIyAgIGNvbXBpbGVyIGlzIGZyZWUgdG8gaXNzdWUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGdvbm5hIG1ha2UgZWxkZXIgQ1BVCiMgICBjaG9rZS4gSWYgeW91IHdpc2ggdG8gYnVpbGQgImJsZW5kZWQiIHRvb2xraXQsIGFkZCAtYXJjaCBnZW5lcmljCiMgICAqYWZ0ZXIqIC1mYXN0IGFuZCBpbnZva2UgJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhLWNjYycgbWFudWFsbHkuCiMKIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiJsaW51eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYStid3gtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAoibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKCiMjIyMgKkJTRCBbZG8gc2VlIGNvbW1lbnQgYWJvdXQgJHtCU0R0aHJlYWRzfSBhYm92ZSFdCiJCU0QtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4NiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1CU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsIC1nOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1zcGFyY3Y4IiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLW12OCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6JHtzcGFyY3Y4X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMiBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODZfNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtRE1EMzJfUkVHX1Q9aW50IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiYnNkaS1lbGYtZ2NjIiwgICAgICJnY2M6LURQRVJMNSAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIm5leHRzdGVwIiwJImNjOi1PIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJuZXh0c3RlcDMuMyIsCSJjYzotTzMgLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgTkNSIE1QLVJBUyBVTklYIHZlciAwMi4wMy4wMQoibmNyLXNjZGUiLCJjYzotTzYgLVhhIC1Ib2ZmPUJFSEFWRUQgLTY4NiAtSHdpZGUgLUhpdzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbCAtbGM4OToke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBRTlgKInFueDQiLAkiY2M6LURMX0VORElBTiAtRFRFUk1JTzo6KHVua25vd24pOjo6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIsCiJRTlg2IiwgICAgICAgImdjYzotRFRFUk1JT1M6Ojo6LWxzb2NrZXQ6OiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiUU5YNi1pMzg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8yIC1XYWxsOjo6Oi1sc29ja2V0OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBCZU9TCiJiZW9zLXg4Ni1yNSIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbG5ldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06YmVvczpiZW9zLXNoYXJlZDotZlBJQyAtRFBJQzotc2hhcmVkOi5zbyIsCiJiZW9zLXg4Ni1ib25lIiwgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbGJpbmQgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmJlb3M6YmVvcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28iLAoKIyMjIyBTQ08vQ2FsZGVyYSB0YXJnZXRzLgojCiMgT3JpZ2luYWxseSB3ZSBoYWQgbGlrZSB1bml4d2FyZS0qLCB1bml4d2FyZS0qLXBlbnRpdW0sIHVuaXh3YXJlLSotcDYsIGV0Yy4KIyBOb3cgd2Ugb25seSBoYXZlIGJsZW5kZWQgdW5peHdhcmUtKiBhcyBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IC4vY29uZmlnLgojIElmIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLCBieXBhc3MgLi9jb25maWcKIyBhbmQgJy4vQ29uZmlndXJlIHVuaXh3YXJlLTcgLUtwZW50aXVtX3Bybycgb3Igd2hhdGV2ZXIgYXBwcm9wcmlhdGUuCiMgTm90ZSB0aGF0IG5vdCBhbGwgdGFyZ2V0cyBpbmNsdWRlIGFzc2VtYmxlciBzdXBwb3J0LiBNb3N0bHkgYmVjYXVzZSBvZgojIGxhY2sgb2YgbW90aXZhdGlvbiB0byBzdXBwb3J0IG91dC1vZi1kYXRlIHBsYXRmb3JtcyB3aXRoIG91dC1vZi1kYXRlCiMgY29tcGlsZXIgZHJpdmVycyBhbmQgYXNzZW1ibGVycy4gVGltIFJpY2UgPHRpbUBtdWx0aXRhbGVudHMubmV0PiBoYXMKIyBwYXRpZW50bHkgYXNzaXN0ZWQgdG8gZGVidWcgbW9zdCBvZiBpdC4KIwojIFVuaXhXYXJlIDIuMHggZmFpbHMgZGVzdGVzdCB3aXRoIC1PLgoidW5peHdhcmUtMi4wIiwiY2M6LURGSUxJT19IIC1ETk9fU1RSSU5HU19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS0yLjEiLCJjYzotTyAtREZJTElPX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTciLCJjYzotTyAtREZJTElPX0ggLUthbGxvY2E6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInVuaXh3YXJlLTctZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURGSUxJT19IIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246Z251LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIFNDTyA1IC0gQmVuIExhdXJpZSA8YmVuQGFsZ3JvdXAuY28udWs+IHNheXMgdGhlIC1PIGJyZWFrcyB0aGUgU0NPIGNjLgoic2NvNS1jYyIsICAiY2M6LWJlbGY6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzY281LWdjYyIsICAiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSUJNJ3MgQUlYLgoiYWl4My1jYyIsICAiY2M6LU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OjoiLAoiYWl4LWdjYyIsICAiZ2NjOi1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6JHtwcGMzMl9hc219OmFpeDMyOmRsZmNuOmFpeC1zaGFyZWQ6Oi1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDMyIiwKImFpeDY0LWdjYyIsImdjYzotbWFpeDY0IC1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LW1haXg2NCAtc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVg2NCIsCiMgQmVsb3cgdGFyZ2V0cyBhc3N1bWUgQUlYIDUuIElkZWEgaXMgdG8gZWZmZWN0aXZlbHkgZGlzcmVnYXJkICRPQkpFQ1RfTU9ERQojIGF0IGJ1aWxkIHRpbWUuICRPQkpFQ1RfTU9ERSBpcyByZXNwZWN0ZWQgYXQgLi9jb25maWcgc3RhZ2UhCiJhaXgtY2MiLCAgICJjYzotcTMyIC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQ6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjoke3BwYzMyX2FzbX06YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXEzMiAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0IC1xcm8gLXFyb2NvbnN0OjotcXRocmVhZGVkOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LXE2NCAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggNjQiLAoKIwojIENyYXkgVDkwIGFuZCBzaW1pbGFyIChTRFNDKQojIEl0J3MgQmlnLWVuZGlhbiwgYnV0IHRoZSBhbGdvcml0aG1zIHdvcmsgcHJvcGVybHkgd2hlbiBCX0VORElBTiBpcyBOT1QKIyBkZWZpbmVkLiAgVGhlIFQ5MCBpbnRzIGFuZCBsb25ncyBhcmUgOCBieXRlcyBsb25nLCBhbmQgYXBwYXJlbnRseSB0aGUKIyBCX0VORElBTiBjb2RlIGFzc3VtZXMgNCBieXRlIGludHMuICBGb3J0dW5hdGVseSwgdGhlIG5vbi1CX0VORElBTiBhbmQKIyBub24gTF9FTkRJQU4gY29kZSBhbGlnbnMgdGhlIGJ5dGVzIGluIGVhY2ggd29yZCBjb3JyZWN0bHkuCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgaXMgdG8gYXZvaWQgdHdvIGZhdGFsIGNvbXBpbGVyIGVycm9yczoKIydUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBiaXQgZmllbGQgaXMgbm90IGFsbG93ZWQuICcKIydBbiBleHByZXNzaW9uIHdpdGggYml0IGZpZWxkIGV4aXN0cyBhcyB0aGUgb3BlcmFuZCBvZiAic2l6ZW9mIiAnCiMgKHdyaXR0ZW4gYnkgV2F5bmUgU2Nocm9lZGVyIDxzY2hyb2VkZUBTRFNDLkVEVT4pCiMKIyBqOTAgaXMgY29uc2lkZXJlZCB0aGUgYmFzZSBtYWNoaW5lIHR5cGUgZm9yIHVuaWNvcyBtYWNoaW5lcywKIyBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgbm93IGNhbGxlZCAiY3JheS1qOTAiIC4uLgoiY3JheS1qOTAiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQ6OjoiLAoKIwojIENyYXkgVDNFIChSZXNlYXJjaCBDZW50ZXIgSnVlbGljaCwgYmVja21hbkBhY2wubGFubC5nb3YpCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgd2FzIHdyaXR0ZW4gZm9yIHRoZSBDOTAgKGl0IHNlZW1zKS4gIEkgYWRkZWQKIyBhbm90aGVyIHVzZS4gIEJhc2ljYWxseSwgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVDNFIHVzZXMgc29tZSBiaXQgZmllbGRzCiMgZm9yIHNvbWUgc3RfYWRkciBzdHVmZiwgYW5kIHRoZW4gc2l6ZW9mIGFuZCBhZGRyZXNzLW9mIGZhaWxzCiMgSSBjb3VsZCBub3QgdXNlIHRoZSBhbXMvYWxwaGEubyBvcHRpb24gYmVjYXVzZSB0aGUgQ3JheSBhc3NlbWJsZXIsICdjYW0nCiMgZGlkIG5vdCBsaWtlIGl0LgoiY3JheS10M2UiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UOjo6IiwKCiMgREdVWCwgODgxMDAuCiJkZ3V4LVIzLWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQteDg2LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKCiMgU2luaXgvUmVsaWFudFVOSVggUk00MDAKIyBOT1RFOiBUaGUgQ0RTKysgQ29tcGlsZXIgdXAgdG8gVjIuMEJzb21ldGhpbmcgaGFzIHRoZSBJUklYX0NDX0JVRyBvcHRpbWl6ZXIgcHJvYmxlbS4gQmV0dGVyIHVzZSAtZyAgKi8KIlJlbGlhbnRVTklYIiwiY2M6LUtQSUMgLWcgLURURVJNSU9TIC1EQl9FTkRJQU46Oi1LdGhyZWFkOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpCTl9MTE9ORyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246cmVsaWFudHVuaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiU0lOSVgiLCJjYzotTzo6KHVua25vd24pOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoiU0lOSVgtTiIsIi91c3IvdWNiL2NjOi1PMiAtbWlzYWxpZ25lZDo6KHVua25vd24pOjotbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoKIyBTSUVNRU5TIEJTMjAwMC9PU0Q6IGFuIEVCQ0RJQy1iYXNlZCBtYWluZnJhbWUKIkJTMjAwMC1PU0QiLCJjODk6LU8gLVhMTE1MIC1YTExNSyAtWEwgLURCX0VORElBTiAtRFRFUk1JT1MgLURDSEFSU0VUX0VCQ0RJQzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIE9TLzM5MCBVbml4IGFuIEVCQ0RJQy1iYXNlZCBVbml4IHN5c3RlbSBvbiBJQk0gbWFpbmZyYW1lCiMgWW91IG5lZWQgdG8gY29tcGlsZSB1c2luZyB0aGUgYzg5LnNoIHdyYXBwZXIgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUKIyBJQk0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgLUwgc3dpdGNoIGFmdGVyIGFueSBvYmplY3QgbW9kdWxlcy4KIwoiT1MzOTAtVW5peCIsImM4OS5zaDotTyAtREJfRU5ESUFOIC1EQ0hBUlNFVF9FQkNESUMgLUROT19TWVNfUEFSQU1fSCAgLURfQUxMX1NPVVJDRTo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBWaXN1YWwgQyB0YXJnZXRzCiMKIyBXaW42NCB0YXJnZXRzLCBXSU42NEkgZGVub3RlcyBJQS02NCBhbmQgV0lONjRBIC0gQU1ENjQKIlZDLVdJTjY0SSIsImNsOi1XMyAtR3MwIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRJOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOmlhNjRjcHVpZC5vOmlhNjQubyBpYTY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzX2N0ci5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjo6Ojo6Omlhczp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjp4ODZfNjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlc19jdHIubyBhZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm86OnJjNC14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86YXV0bzp3aW4zMiIsCiMgeDg2IFdpbjMyIHRhcmdldCBkZWZhdWx0cyB0byBBTlNJIEFQSSwgaWYgeW91IHdhbnQgVU5JQ09ERSwgY29tcGxlbWVudAojICdwZXJsIENvbmZpZ3VyZSBWQy1XSU4zMicgd2l0aCAnLURVTklDT0RFIC1EX1VOSUNPREUnCiJWQy1XSU4zMiIsImNsOi1XMyAtV1ggLUdzMCAtR0YgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU4zMjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06d2luMzJuOndpbjMyIiwKIyBVbmlmaWVkIENFIHRhcmdldAoiZGVidWctVkMtV0lOMzIiLCJjbDotVzMgLVdYIC1HczAgLUdGIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTp3aW4zMm46d2luMzIiLAoiVkMtQ0UiLCJjbDo6OjpXSU5DRTo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEJvcmxhbmQgQysrIDQuNQoiQkMtMzIiLCJiY2MzMjo6OjpXSU4zMjo6Qk5fTExPTkcgREVTX1BUUiBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTjoke25vX2FzbX06d2luMzIiLAoKIyBNaW5HVwoibWluZ3ciLCAiZ2NjOi1tbm8tY3lnd2luIC1ETF9FTkRJQU4gLURXSU4zMl9MRUFOX0FORF9NRUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6Ok1JTkdXMzI6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9IEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfYXNtfTpjb2ZmOndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMIC1ET1BFTlNTTF9VU0VfQVBQTElOSzotbW5vLWN5Z3dpbjouZGxsLmEiLAojIEFzIGZvciBPUEVOU1NMX1VTRV9BUFBMSU5LLiBBcHBsaW5rIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSAuZGxsCiMgY29tcGlsZWQgd2l0aCBvbmUgY29tcGlsZXIgd2l0aCBhcHBsaWNhdGlvbiBjb21waWxlZCB3aXRoIGFub3RoZXIKIyBjb21waWxlci4gSXQncyBwb3NzaWJsZSB0byBlbmdhZ2UgQXBwbGluayBzdXBwb3J0IGluIG1pbmd3NjQgYnVpbGQsCiMgYnV0IGl0J3Mgbm90IGRvbmUsIGJlY2F1c2UgdGlsbCBtaW5ndzY0IHN1cHBvcnRzIHN0cnVjdHVyZWQgZXhjZXB0aW9uCiMgaGFuZGxpbmcsIG9uZSBjYW4ndCBzZXJpb3VzbHkgY29uc2lkZXIgaXRzIGJpbmFyaWVzIGZvciB1c2luZyB3aXRoCiMgbm9uLW1pbmd3NjQgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEFuZCBhcyBtaW5ndzY0IGlzIGFsd2F5cyBjb25zaXN0ZW50CiMgd2l0aCBpdHNlbGYsIEFwcGxpbmsgaXMgbmV2ZXIgZW5nYWdlZCBhbmQgY2FuIGFzIHdlbGwgYmUgb21pdHRlZC4KIm1pbmd3NjQiLCAiZ2NjOi1tbm8tY3lnd2luIC1ETF9FTkRJQU4gLU8zIC1XYWxsIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRFVOSUNPREUgLURfVU5JQ09ERTo6Ok1JTkdXNjQ6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl82NF9hc219Om1pbmd3NjQ6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LW1uby1jeWd3aW46LmRsbC5hIiwKCiMgVVdJTiAKIlVXSU4iLCAiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLU8gLVdhbGw6OjpVV0lOOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQ3lnd2luCiJDeWd3aW4tcHJlMS4zIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW00ODYgLVdhbGw6Oih1bmtub3duKTpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTpjb2ZmOmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKImRlYnVnLUN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoKIyBOZXRXYXJlIGZyb20gRGF2aWQgV2FyZCAoZHN3YXJkQG5vdmVsbC5jb20pCiMgcmVxdWlyZXMgZWl0aGVyIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzLCBvciBnY2MgLyBubG1jb252CiMgTmV0V2FyZSBkZWZhdWx0cyBzb2NrZXQgYmlvIHRvIFdpblNvY2sgc29ja2V0cy4gSG93ZXZlciwKIyB0aGUgYnVpbGRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLUkvbmRrL3dzMjk1c2RrL2luY2x1ZGUgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtRE5FVFdBUkVfQlNEU09DSyAtRE5FVERCX1VTRV9JTlRFUk5FVCAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtSS9uZGsvbGliYy9pbmNsdWRlL3dpbnNvY2sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLURORVRXQVJFX0JTRFNPQ0sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzIgLVdhbGw6OjpNU0RPUzotTC9kZXYvZW52L1dBVFRfUk9PVC9saWIgLWx3YXR0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkc6Ojo6IiwKIyBLJlIgQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkOyB5b3UgbmVlZCBnY2Mgb24gb2xkIFVsdHJpeCBpbnN0YWxsYXRpb25zCiMjInVsdHJpeCIsImNjOi1PMiAtRE5PUFJPVE8gLUROT0NPTlNUIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoKIyMjIyMgTWFjT1MgWCAoYS5rLmEuIFJoYXBzb2R5IG9yIERhcndpbikgc2V0dXAKInJoYXBzb2R5LXBwYy1jYyIsImNjOi1PMyAtREJfRU5ESUFOOjoodW5rbm93bik6TUFDT1NYX1JIQVBTT0RZOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OjoiLAoiZGFyd2luLXBwYy1jYyIsImNjOi1hcmNoIHBwYyAtTzMgLURCX0VORElBTiAtV2EsLWZvcmNlX2NwdXN1YnR5cGVfQUxMOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzY0X2FzbX06b3N4NjQ6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW42NC14ODZfNjQtY2MiLCJjYzotYXJjaCB4ODZfNjQgLU8zIC1ETF9FTkRJQU4gLURNRDMyX1JFR19UPWludCAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKCiMjIyMjIEEvVVgKImF1eDMtZ2NjIiwiZ2NjOi1PMiAtRFRFUk1JTzo6KHVua25vd24pOkFVWDotbGJzZDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjoiLAoKIyMjIyMgU29ueSBORVdTLU9TIDQueAoibmV3c29zNC1nY2MiLCJnY2M6LU8gLURCX0VORElBTjo6KHVua25vd24pOk5FV1M0Oi1sbWxkIC1saWJlcnR5OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OjoiLAoKIyMjIyMgR05VIEh1cmQKImh1cmQteDg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQyIsCgojIyMjIyBPUy8yIEVNWAoiT1MyLUVNWCIsICJnY2M6Ojo6Ojo6OiIsCgojIyMjIyBWeFdvcmtzIGZvciB2YXJpb3VzIHRhcmdldHMKInZ4d29ya3MtcHBjNDA1IiwiY2NwcGM6LWcgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNDA1IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MCIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIFwkKERFQlVHX0ZMQUcpOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjNzUwLWRlYnVnIiwiY2NwcGM6LWFuc2kgLW5vc3RkaW5jIC1EUFBDNzUwIC1EX1JFRU5UUkFOVCAtZnZvbGF0aWxlIC1mbm8tYnVpbHRpbiAtZm5vLWZvci1zY29wZSAtZnNpZ25lZC1jaGFyIC1XYWxsIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURERUJVRyAtZzo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzg2MCIsImNjcHBjOi1ub3N0ZGluYyAtbXNvZnQtZmxvYXQgLURDUFU9UFBDODYwIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLW1pcHNsZSIsImNjbWlwczotQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1ETF9FTkRJQU4gLUVMIC1XbCwtRUwgLW1pcHMyIC1tbm8tYnJhbmNoLWxpa2VseSAtRyAwIC1mbm8tYnVpbHRpbiAtbXNvZnQtZmxvYXQgLURDUFU9TUlQUzMyIC1ETUlQU0VMIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6OiR7bm9fYXNtfTo6Ojo6OnJhbmxpYm1pcHM6IiwKCiMjIyMjIENvbXBhcSBOb24tU3RvcCBLZXJuZWwgKFRhbmRlbSkKInRhbmRlbS1jODkiLCJjODk6LVd3IC1EX19UQU5ERU0gLURfWE9QRU5fU09VUkNFIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0xIC1EX1RBTkRFTV9TT1VSQ0UgLURCX0VORElBTjo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQ6OjoiLAoKIyB1Q2xpbnV4CiJ1Q2xpbnV4LWRpc3QiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpCTl9MTE9ORzo6Ojo6Ojo6Ojo6Ojo6OiRFTlZ7J0xJQlNTTF9kbGZjbid9OmxpbnV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOiRFTlZ7J1JBTkxJQid9OjoiLAoidUNsaW51eC1kaXN0NjQiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpTSVhUWV9GT1VSX0JJVF9MT05HOjo6Ojo6Ojo6Ojo6Ojo6JEVOVnsnTElCU1NMX2RsZmNuJ306bGludXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6JEVOVnsnUkFOTElCJ306OiIsCgopOwoKbXkgQE1LMU1GX0J1aWxkcz1xdyhWQy1XSU42NEkgVkMtV0lONjRBCgkJICAgIFZDLU5UIFZDLUNFIFZDLVdJTjMyIGRlYnVnLVZDLVdJTjMyCgkJICAgIEJDLTMyIAoJCSAgICBuZXR3YXJlLWNsaWIgbmV0d2FyZS1jbGliLWJzZHNvY2sKCQkgICAgbmV0d2FyZS1saWJjIG5ldHdhcmUtbGliYy1ic2Rzb2NrKTsKCm15ICRpZHggPSAwOwpteSAkaWR4X2NjID0gJGlkeCsrOwpteSAkaWR4X2NmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF91bmlzdGQgPSAkaWR4Kys7Cm15ICRpZHhfdGhyZWFkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3N5c19pZCA9ICRpZHgrKzsKbXkgJGlkeF9sZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfYm5fb3BzID0gJGlkeCsrOwpteSAkaWR4X2NwdWlkX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3dwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jbWxsX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9wZXJsYXNtX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9kc29fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF90YXJnZXQgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9sZGZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2V4dGVuc2lvbiA9ICRpZHgrKzsKbXkgJGlkeF9yYW5saWIgPSAkaWR4Kys7Cm15ICRpZHhfYXJmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9tdWx0aWxpYiA9ICRpZHgrKzsKCm15ICRwcmVmaXg9IiI7Cm15ICRsaWJkaXI9IiI7Cm15ICRvcGVuc3NsZGlyPSIiOwpteSAkZXhlX2V4dD0iIjsKbXkgJGluc3RhbGxfcHJlZml4PSAiJEVOVnsnSU5TVEFMTF9QUkVGSVgnfSI7Cm15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKbXkgJG5vX3RocmVhZHM9MDsKbXkgJHRocmVhZHM9MDsKbXkgJG5vX3NoYXJlZD0wOyAjIGJ1dCAibm8tc2hhcmVkIiBpcyBkZWZhdWx0Cm15ICR6bGliPTE7ICAgICAgIyBidXQgIm5vLXpsaWIiIGlzIGRlZmF1bHQKbXkgJG5vX2tyYjU9MDsgICAjIGJ1dCAibm8ta3JiNSIgaXMgaW1wbGllZCB1bmxlc3MgIi0td2l0aC1rcmI1LS4uLiIgaXMgdXNlZApteSAkbm9fcmZjMzc3OT0xOyAjIGJ1dCAibm8tcmZjMzc3OSIgaXMgZGVmYXVsdApteSAkbm9fYXNtPTA7Cm15ICRub19kc289MDsKbXkgJG5vX2dtcD0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZSI7Cm15ICRkZXNfbG9jbD0iY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIjsKbXkgJGRlcwk9ImNyeXB0by9kZXMvZGVzLmgiOwpteSAkYm4JPSJjcnlwdG8vYm4vYm4uaCI7Cm15ICRtZDIJPSJjcnlwdG8vbWQyL21kMi5oIjsKbXkgJHJjNAk9ImNyeXB0by9yYzQvcmM0LmgiOwpteSAkcmM0X2xvY2w9ImNyeXB0by9yYzQvcmM0X2xvY2wuaCI7Cm15ICRpZGVhCT0iY3J5cHRvL2lkZWEvaWRlYS5oIjsKbXkgJHJjMgk9ImNyeXB0by9yYzIvcmMyLmgiOwpteSAkYmYJPSJjcnlwdG8vYmYvYmZfbG9jbC5oIjsKbXkgJGJuX2FzbQk9ImJuX2FzbS5vIjsKbXkgJGRlc19lbmM9ImRlc19lbmMubyBmY3J5cHRfYi5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIGFlc19jdHIubyI7Cm15ICRiZl9lbmMJPSJiZl9lbmMubyI7Cm15ICRjYXN0X2VuYz0iY19lbmMubyI7Cm15ICRyYzRfZW5jPSJyYzRfZW5jLm8gcmM0X3NrZXkubyI7Cm15ICRyYzVfZW5jPSJyYzVfZW5jLm8iOwpteSAkbWQ1X29iaj0iIjsKbXkgJHNoYTFfb2JqPSIiOwpteSAkcm1kMTYwX29iaj0iIjsKbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbGxfY2JjLm8iOwpteSAkcHJvY2Vzc29yPSIiOwpteSAkZGVmYXVsdF9yYW5saWI7Cm15ICRwZXJsOwoKCiMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBlbmFibGVkIGJlZm9yZSAwLjkuOCk6CgpteSAlZGlzYWJsZWQgPSAoICMgIndoYXQiICAgICAgICAgPT4gImNvbW1lbnQiIFtvciBzcGVjaWFsIGtleXdvcmQgImV4cGVyaW1lbnRhbCJdCgkJICJnbXAiCQkgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAianBha2UiICAgICAgICAgID0+ICJleHBlcmltZW50YWwiLAogICAgICAgICAgICAgICAgICJtZDIiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJyYzUiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAoJCSAicmZjMzc3OSIJICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInNoYXJlZCIgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJzdG9yZSIJICA9PiAiZXhwZXJpbWVudGFsIiwKICAgICAgICAgICAgICAgICAiemxpYiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAiemxpYi1keW5hbWljIiAgID0+ICJkZWZhdWx0IgogICAgICAgICAgICAgICApOwpteSBAZXhwZXJpbWVudGFsID0gKCk7CgojIFRoaXMgaXMgd2hhdCAkZGVwZmxhZ3Mgd2lsbCBsb29rIGxpa2Ugd2l0aCB0aGUgYWJvdmUgZGVmYXVsdHMKIyAod2UgbmVlZCB0aGlzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWR2aXNlIHRoZSB1c2VyIHRvIHJ1biAibWFrZSBkZXBlbmQiKToKbXkgJGRlZmF1bHRfZGVwZmxhZ3MgPSAiIC1ET1BFTlNTTF9OT19HTVAgLURPUEVOU1NMX05PX0pQQUtFIC1ET1BFTlNTTF9OT19NRDIgLURPUEVOU1NMX05PX1JDNSAtRE9QRU5TU0xfTk9fUkZDMzc3OSAtRE9QRU5TU0xfTk9fU1RPUkUiOwoKIyBFeHBsaWNpdCAibm8tLi4uIiBvcHRpb25zIHdpbGwgYmUgY29sbGVjdGVkIGluICVkaXNhYmxlZCBhbG9uZyB3aXRoIHRoZSBkZWZhdWx0cy4KIyBUbyByZW1vdmUgc29tZXRoaW5nIGZyb20gJWRpc2FibGVkLCB1c2UgImVuYWJsZS1mb28iICh1bmxlc3MgaXQncyBleHBlcmltZW50YWwpLgojIEZvciBzeW1tZXRyeSwgImRpc2FibGUtZm9vIiBpcyBhIHN5bm9ueW0gZm9yICJuby1mb28iLgoKIyBGb3IgZmVhdHVyZXMgY2FsbGVkICJleHBlcmltZW50YWwiIGhlcmUsIGEgbW9yZSBleHBsaWNpdCAiZXhwZXJpbWVudGFsLWZvbyIgaXMgbmVlZGVkIHRvIGVuYWJsZS4KIyBXZSB3aWxsIGNvbGxlY3Qgc3VjaCByZXF1ZXN0cyBpbiBAZXhwZXJpbWVudGFsLgojIFRvIGF2b2lkIGFjY2lkZW50YWwgdXNlIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcywgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB1c2UgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF9GT08uCgoKbXkgJG5vX3NzZTI9MDsKCiZ1c2FnZSBpZiAoJCNBUkdWIDwgMCk7CgpteSAkZmxhZ3M7Cm15ICRkZXBmbGFnczsKbXkgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzPSIiOwoJJGxpYnM9IiI7CgkkdGFyZ2V0PSIiOwoJJG9wdGlvbnM9IiI7Cgkkc3ltbGluaz0xOwoKCSRhcmd2X3VucHJvY2Vzc2VkPTA7CgkkYXJndnN0cmluZz1qb2luKCcgJyxAYXJndmNvcHkpOwoKUFJPQ0VTU19BUkdTOgoJZm9yZWFjaCAoQGFyZ3Zjb3B5KQoJCXsKCQlzIC9eLW5vLS9uby0vOyAjIHNvbWUgcGVvcGxlIGp1c3QgY2FuJ3QgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zCgoJCSMgcmV3cml0ZSBzb21lIG9wdGlvbnMgaW4gImVuYWJsZS0uLi4iIGZvcm0KCQlzIC9eLT8tP3NoYXJlZCQvZW5hYmxlLXNoYXJlZC87CgkJcyAvXnRocmVhZHMkL2VuYWJsZS10aHJlYWRzLzsKCQlzIC9eemxpYiQvZW5hYmxlLXpsaWIvOwoJCXMgL156bGliLWR5bmFtaWMkL2VuYWJsZS16bGliLWR5bmFtaWMvOwoKCQlpZiAoL15uby0oLispJC8gfHwgL15kaXNhYmxlLSguKykkLykKCQkJewoJCQlpZiAoISgkZGlzYWJsZWR7JDF9IGVxICJleHBlcmltZW50YWwiKSkKCQkJCXsKCQkJCWlmICgkMSBlcSAic3NsIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQl9CgkJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsidGxzMSJ9ID0gIm9wdGlvbih0bHMpIgoJCQkJCX0KCQkJCWVsc2UKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyQxfSA9ICJvcHRpb24iOwoJCQkJCX0KCQkJCX0JCQkKCQkJfQoJCWVsc2lmICgvXmVuYWJsZS0oLispJC8gfHwgL15leHBlcmltZW50YWwtKC4rKSQvKQoJCQl7CgkJCW15ICRhbGdvID0gJDE7CgkJCWlmICgkZGlzYWJsZWR7JGFsZ299IGVxICJleHBlcmltZW50YWwiKQoJCQkJewoJCQkJZGllICJZb3UgYXJlIHJlcXVlc3RpbmcgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU7IHBsZWFzZSBzYXkgJ2V4cGVyaW1lbnRhbC0kYWxnbycgaWYgeW91IGFyZSBzdXJlXG4iCgkJCQkJdW5sZXNzICgvXmV4cGVyaW1lbnRhbC0vKTsKCQkJCXB1c2ggQGV4cGVyaW1lbnRhbCwgJGFsZ287CgkJCQl9CgkJCWRlbGV0ZSAkZGlzYWJsZWR7JGFsZ299OwoKCQkJJHRocmVhZHMgPSAxIGlmICgkYWxnbyBlcSAidGhyZWFkcyIpOwoJCQl9CgkJZWxzaWYgKC9eLS10ZXN0LXNhbml0eSQvKQoJCQl7CgkJCWV4aXQoJnRlc3Rfc2FuaXR5KCkpOwoJCQl9CgkJZWxzaWYgKC9eLS1zdHJpY3Qtd2FybmluZ3MvKQoJCQl7CgkJCSRzdHJpY3Rfd2FybmluZ3MgPSAxOwoJCQl9CgkJZWxzaWYgKC9ecmVjb25maWd1cmUvIHx8IC9ecmVjb25mLykKCQkJewoJCQlpZiAob3BlbihJTiwiPCRNYWtlZmlsZSIpKQoJCQkJewoJCQkJd2hpbGUgKDxJTj4pCgkJCQkJewoJCQkJCWNob21wOwoJCQkJCWlmICgvXkNPTkZJR1VSRV9BUkdTPSguKikvKQoJCQkJCQl7CgkJCQkJCSRhcmd2c3RyaW5nPSQxOwoJCQkJCQlAYXJndmNvcHk9c3BsaXQoJyAnLCRhcmd2c3RyaW5nKTsKCQkJCQkJZGllICJJbmNvcnJlY3QgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiIKCQkJCQkJCWlmIChncmVwKC9ecmVjb25mLyxAYXJndmNvcHkpKTsKCQkJCQkJcHJpbnQgIlJlY29uZmlndXJpbmcgd2l0aDogJGFyZ3ZzdHJpbmdcbiI7CgkJCQkJCSRhcmd2X3VucHJvY2Vzc2VkPTE7CgkJCQkJCWNsb3NlKElOKTsKCQkJCQkJbGFzdCBQUk9DRVNTX0FSR1M7CgkJCQkJCX0KCQkJCQl9CgkJCQljbG9zZShJTik7CgkJCQl9CgkJCWRpZSAiSW5zdWZmaWNpZW50IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iOwoJCQl9CgkJZWxzaWYgKC9eMzg2JC8pCgkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXlstK10vKQoJCQl7CgkJCWlmICgvXi1bbExdKC4qKSQvIG9yIC9eLVdsLC8pCgkJCQl7CgkJCQkkbGlicy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tW14tXS8gb3IgL15cKy8pCgkJCQl7CgkJCQkkZmxhZ3MuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJHByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1saWJkaXI9KC4qKSQvKQoJCQkJewoJCQkJJGxpYmRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1vcGVuc3NsZGlyPSguKikkLykKCQkJCXsKCQkJCSRvcGVuc3NsZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWluc3RhbGwucHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRpbnN0YWxsX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWtyYjUtKGRpcnxsaWJ8aW5jbHVkZXxmbGF2b3IpPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3sia3JiNS0iLiQxfT0kMjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItbGliPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1saWIifT0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItaW5jbHVkZT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9PSItSSQxIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS1jcm9zcy1jb21waWxlLXByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkY3Jvc3NfY29tcGlsZV9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXByaW50IFNUREVSUiAkdXNhZ2U7CgkJCQlleGl0KDEpOwoJCQkJfQoJCQl9CgkJZWxzaWYgKCRfID1+IC9eKFteOl0rKTooLispJC8pCgkJCXsKCQkJZXZhbCAiXCR0YWJsZXtcJDF9ID0gXCIkMlwiIjsgIyBhbGxvdyAkeHh4IGNvbnN0cnVjdHMgaW4gdGhlIHN0cmluZwoJCQkkdGFyZ2V0PSQxOwoJCQl9CgkJZWxzZQoJCQl7CgkJCWRpZSAidGFyZ2V0IGFscmVhZHkgZGVmaW5lZCAtICR0YXJnZXQgKG9mZmVuZGluZyBhcmc6ICRfKVxuIiBpZiAoJHRhcmdldCBuZSAiIik7CgkJCSR0YXJnZXQ9JF87CgkJCX0KCgkJdW5sZXNzICgkXyBlcSAkdGFyZ2V0IHx8IC9ebm8tLyB8fCAvXmRpc2FibGUtLykKCQkJewoJCQkjICJuby0uLi4iIGZvbGxvd3MgbGF0ZXIgYWZ0ZXIgaW1wbGllZCBkaXNhY3RpdmF0aW9ucwoJCQkjIGhhdmUgYmVlbiBkZXJpdmVkLiAgKERvbid0IHRha2UgdGhpcyB0b28gc2Vyb2l1c2x5LAoJCQkjIHdlIHJlYWxseSBvbmx5IHdyaXRlIE9QVElPTlMgdG8gdGhlIE1ha2VmaWxlIG91dCBvZgoJCQkjIG5vc3RhbGdpYS4pCgoJCQlpZiAoJG9wdGlvbnMgZXEgIiIpCgkJCQl7ICRvcHRpb25zID0gJF87IH0KCQkJZWxzZQoJCQkJeyAkb3B0aW9ucyAuPSAiICIuJF87IH0KCQkJfQoJCX0KCX0KCgoKaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpCgl7CgkkZGlzYWJsZWR7InNzZTIifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSkgfHwgJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9IGVxICIiKQoJewoJJGRpc2FibGVkeyJrcmI1In0gPSAia3JiNS1mbGF2b3Igbm90IHNwZWNpZmllZCI7Cgl9CgppZiAoIWRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgl7CgkjICJ6bGliLWR5bmFtaWMiIHdhcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCwgc28gZW5hYmxlICJ6bGliIgoJZGVsZXRlICRkaXNhYmxlZHsiemxpYiJ9OwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJyaWpuZGFlbCJ9KSkKCXsKCSRkaXNhYmxlZHsiYWVzIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJkZXMifSkpCgl7CgkkZGlzYWJsZWR7Im1kYzIifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pKQoJewoJJGRpc2FibGVkeyJlY2RzYSJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7ImVjZGgifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMi4wIHJlcXVpcmVzIE1ENSBhbmQgUlNBCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkpCgl7CgkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMy4wIGFuZCBUTFMgcmVxdWlyZXMgTUQ1IGFuZCBTSEEgYW5kIGVpdGhlciBSU0Egb3IgRFNBK0RICmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJzaGEifSkKICAgIHx8IChkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pCiAgICAgICAgJiYgKGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKSkpCgl7CgkkZGlzYWJsZWR7InNzbDMifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJ0bHMxIn0gPSAiZm9yY2VkIjsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsidGxzMSJ9KSkKCXsKCSRkaXNhYmxlZHsidGxzZXh0In0gPSAiZm9yY2VkIjsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZWMifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRzYSJ9KQogICAgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKQoJewoJJGRpc2FibGVkeyJnb3N0In0gPSAiZm9yY2VkIjsKCX0KCmlmICgkdGFyZ2V0IGVxICJUQUJMRSIpIHsKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50X3RhYmxlX2VudHJ5KCR0YXJnZXQpOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCBlcSAiTElTVCIpIHsKCWZvcmVhY2ggKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludDsKCQlwcmludCAiXG4iOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCA9fiBtL15DeWdXaW4zMigtLiopJC8pIHsKCSR0YXJnZXQgPSAiQ3lnd2luIi4kMTsKfQoKcHJpbnQgIkNvbmZpZ3VyaW5nIGZvciAkdGFyZ2V0XG4iOwoKJnVzYWdlIGlmICghZGVmaW5lZCgkdGFibGV7JHRhcmdldH0pKTsKCgpmb3JlYWNoIChzb3J0IChrZXlzICVkaXNhYmxlZCkpCgl7Cgkkb3B0aW9ucyAuPSAiIG5vLSRfIjsKCglwcmludGYgIiAgICBuby0lLTEycyAlLTEwcyIsICRfLCAiWyRkaXNhYmxlZHskX31dIjsKCglpZiAoL15kc28kLykKCQl7ICRub19kc28gPSAxOyB9CgllbHNpZiAoL150aHJlYWRzJC8pCgkJeyAkbm9fdGhyZWFkcyA9IDE7IH0KCWVsc2lmICgvXnNoYXJlZCQvKQoJCXsgJG5vX3NoYXJlZCA9IDE7IH0KCWVsc2lmICgvXnpsaWIkLykKCQl7ICR6bGliID0gMDsgfQoJZWxzaWYgKC9ec3RhdGljLWVuZ2luZSQvKQoJCXsgfQoJZWxzaWYgKC9eemxpYi1keW5hbWljJC8pCgkJeyB9CgllbHNpZiAoL15zeW1saW5rcyQvKQoJCXsgJHN5bWxpbmsgPSAwOyB9CgllbHNpZiAoL15zc2UyJC8pCgkJeyAkbm9fc3NlMiA9IDE7IH0KCWVsc2UKCQl7CgkJbXkgKCRBTEdPLCAkYWxnbyk7CgkJKCRBTEdPID0gJGFsZ28gPSAkXykgPX4gdHIvW2Etel0vW0EtWl0vOwoKCQlpZiAoL15hc20kLyB8fCAvXmVyciQvIHx8IC9eaHckLyB8fCAvXmh3LS8pCgkJCXsKCQkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoJCQoJCQlpZiAoL15lcnIkLykJeyAkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19FUlIgIjsgfQoJCQllbHNpZiAoL15hc20kLykJeyAkbm9fYXNtID0gMTsgfQoJCQl9CgkJZWxzZQoJCQl7CgkJCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgoJCQlpZiAoL15rcmI1JC8pCgkJCQl7ICRub19rcmI1ID0gMTsgfQoJCQllbHNlCgkJCQl7CgkJCQlwdXNoIEBza2lwLCAkYWxnbzsKCQkJCXByaW50ICIgKHNraXAgZGlyKSI7CgoJCQkJJGRlcGZsYWdzIC49ICIgLURPUEVOU1NMX05PXyRBTEdPIjsKCQkJCX0KCQkJfQoJCX0KCglwcmludCAiXG4iOwoJfQoKbXkgJGV4cF9jZmxhZ3MgPSAiIjsKZm9yZWFjaCAoc29ydCBAZXhwZXJpbWVudGFsKQoJewoJbXkgJEFMR087CgkoJEFMR08gPSAkXykgPX4gdHIvW2Etel0vW0EtWl0vOwoKCSMgb3BlbnNzbGNvbmYuaCB3aWxsIHNldCBPUEVOU1NMX05PXy4uLiB1bmxlc3MgT1BFTlNTTF9FWFBFUklNRU5UQUxfLi4uIGlzIGRlZmluZWQKCSRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkkZXhwX2NmbGFncyAuPSAiIC1ET1BFTlNTTF9FWFBFUklNRU5UQUxfJEFMR08iOwoJfQoKbXkgJElzTUsxTUY9c2NhbGFyIGdyZXAgL14kdGFyZ2V0JC8sQE1LMU1GX0J1aWxkczsKCiRleGVfZXh0PSIuZXhlIiBpZiAoJHRhcmdldCBlcSAiQ3lnd2luIiB8fCAkdGFyZ2V0IGVxICJESkdQUCIgfHwgJHRhcmdldCA9fiAvXm1pbmd3Lyk7CiRleGVfZXh0PSIubmxtIiBpZiAoJHRhcmdldCA9fiAvbmV0d2FyZS8pOwokZXhlX2V4dD0iLnBtIiAgaWYgKCR0YXJnZXQgPX4gL3Zvcy8pOwokb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiIGlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIik7CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwpteSAkbWFrZSA9ICRFTlZ7J01BS0UnfSB8fCAibWFrZSI7CgokY3Jvc3NfY29tcGlsZV9wcmVmaXg9JEVOVnsnQ1JPU1NfQ09NUElMRSd9IGlmICRjcm9zc19jb21waWxlX3ByZWZpeCBlcSAiIjsKCmNob3AgJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgPX4gL1wvJC87CmNob3AgJHByZWZpeCBpZiAkcHJlZml4ID1+IC8uXC8kLzsKCiRvcGVuc3NsZGlyPSRwcmVmaXggLiAiL3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7CiRvcGVuc3NsZGlyPSRwcmVmaXggLiAiLyIgLiAkb3BlbnNzbGRpciBpZiAkb3BlbnNzbGRpciAhfiAvKF5cL3xeW2EtekEtWl06W1xcXC9dKS87CgoKcHJpbnQgIklzTUsxTUY9JElzTUsxTUZcbiI7CgpteSBAZmllbGRzID0gc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwpteSAkY2MgPSAkZmllbGRzWyRpZHhfY2NdOwojIEFsbG93IGVudmlyb25tZW50IENDIHRvIG92ZXJyaWRlIGNvbXBpbGVyLi4uCmlmKCRFTlZ7Q0N9KSB7CiAgICAkY2MgPSAkRU5We0NDfTsKfQpteSAkY2ZsYWdzID0gJGZpZWxkc1skaWR4X2NmbGFnc107Cm15ICR1bmlzdGQgPSAkZmllbGRzWyRpZHhfdW5pc3RkXTsKbXkgJHRocmVhZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF90aHJlYWRfY2ZsYWddOwpteSAkc3lzX2lkID0gJGZpZWxkc1skaWR4X3N5c19pZF07Cm15ICRsZmxhZ3MgPSAkZmllbGRzWyRpZHhfbGZsYWdzXTsKbXkgJGJuX29wcyA9ICRmaWVsZHNbJGlkeF9ibl9vcHNdOwpteSAkY3B1aWRfb2JqID0gJGZpZWxkc1skaWR4X2NwdWlkX29ial07Cm15ICRibl9vYmogPSAkZmllbGRzWyRpZHhfYm5fb2JqXTsKbXkgJGRlc19vYmogPSAkZmllbGRzWyRpZHhfZGVzX29ial07Cm15ICRhZXNfb2JqID0gJGZpZWxkc1skaWR4X2Flc19vYmpdOwpteSAkYmZfb2JqID0gJGZpZWxkc1skaWR4X2JmX29ial07Cm15ICRtZDVfb2JqID0gJGZpZWxkc1skaWR4X21kNV9vYmpdOwpteSAkc2hhMV9vYmogPSAkZmllbGRzWyRpZHhfc2hhMV9vYmpdOwpteSAkY2FzdF9vYmogPSAkZmllbGRzWyRpZHhfY2FzdF9vYmpdOwpteSAkcmM0X29iaiA9ICRmaWVsZHNbJGlkeF9yYzRfb2JqXTsKbXkgJHJtZDE2MF9vYmogPSAkZmllbGRzWyRpZHhfcm1kMTYwX29ial07Cm15ICRyYzVfb2JqID0gJGZpZWxkc1skaWR4X3JjNV9vYmpdOwpteSAkd3Bfb2JqID0gJGZpZWxkc1skaWR4X3dwX29ial07Cm15ICRjbWxsX29iaiA9ICRmaWVsZHNbJGlkeF9jbWxsX29ial07Cm15ICRwZXJsYXNtX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9wZXJsYXNtX3NjaGVtZV07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkRU5WeydSQU5MSUInfSB8fCAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyID0gJEVOVnsnQVInfSB8fCAiYXIiOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKbXkgJG11bHRpbGliID0gJGZpZWxkc1skaWR4X211bHRpbGliXTsKCiRsaWJkaXI9ImxpYiRtdWx0aWxpYiIgaWYgJGxpYmRpciBlcSAiIjsKCiRjZmxhZ3MgPSAiJGNmbGFncyRleHBfY2ZsYWdzIjsKCiMgJyUnIGluICRsZmxhZ3MgaXMgdXNlZCB0byBzcGxpdCBmbGFncyB0byAicHJlLSIgYW5kIHBvc3QtZmxhZ3MKbXkgKCRwcmVsZmxhZ3MsJHBvc3RsZmxhZ3MpPXNwbGl0KCclJywkbGZsYWdzKTsKaWYgKGRlZmluZWQoJHBvc3RsZmxhZ3MpKQl7ICRsZmxhZ3M9JHBvc3RsZmxhZ3M7CX0KZWxzZQkJCQl7ICRsZmxhZ3M9JHByZWxmbGFnczsgdW5kZWYgJHByZWxmbGFnczsJfQoKbXkgJG5vX3NoYXJlZF93YXJuPTA7Cm15ICRub191c2VyX2NmbGFncz0wOwoKaWYgKCRmbGFncyBuZSAiIikJeyAkY2ZsYWdzPSIkZmxhZ3MkY2ZsYWdzIjsgfQplbHNlCQkJeyAkbm9fdXNlcl9jZmxhZ3M9MTsgICAgICAgfQoKIyBLZXJiZXJvcyBzZXR0aW5ncy4gIFRoZSBmbGF2b3IgbXVzdCBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUsIGVpdGhlciB0aHJvdWdoCiMgdGhlIHNjcmlwdCAiY29uZmlnIiBvciBtYW51YWxseS4KaWYgKCEkbm9fa3JiNSkKCXsKCW15ICgkbHJlc29sdiwgJGxwYXRoLCAkbGV4dCk7CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW0hoXWVpbWRhbCQvKQoJCXsKCQlkaWUgIlNvcnJ5LCBIZWltZGFsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iOwoJCX0KCSMjIyMjIEhBQ0sgdG8gZm9yY2UgdXNlIG9mIEhlaW1kYWwuCgkjIyMjIyBXQVJOSU5HOiBTaW5jZSB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhZGVxdWF0ZSBzdXBwb3J0IGZvciBIZWltZGFsLAoJIyMjIyMgICAgICAgICAgdXNpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZC4gIFlvdSdsbCBoYXZlIHRvIG1ha2UKCSMjIyMjICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHlvdSBkbywgcGxlYXNlIHNlbmQKCSMjIyMjICAgICAgICAgIHBhdGNoZXMgdG8gb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15mb3JjZS1bSGhdZWltZGFsJC8pCgkJewoJCXdhcm4gIkhlaW1kYWwgaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZC4gIFlvdXIgYnVpbGQgV0lMTCBicmVha1xuIjsKCQl3YXJuICJJZiB5b3UgZml4IHRoZSBwcm9ibGVtcywgcGxlYXNlIHNlbmQgYSBwYXRjaCB0byBvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmdcbiI7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3IvaGVpbWRhbCIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaSAtbGtyYjUgLWxjb21fZXJyIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9IRUlNREFMICRjZmxhZ3MiOwoJCX0KCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bTW1dW0lpXVtUdF0vKQoJCXsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9rZXJiZXJvcyIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfTUlUICRjZmxhZ3MiOwoJCSR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiBzL15bTW1dW0lpXVtUdF1bLl8tXSovLzsKCQlpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eMVsuXy1dKlswMV0vKQoJCQl7CgkJCSRjZmxhZ3M9Ii1ES1JCNV9NSVRfT0xEMTEgJGNmbGFncyI7CgkJCX0KCQl9CglMUkVTT0xWOgoJZm9yZWFjaCAkbHBhdGggKCIvbGliIiwgIi91c3IvbGliIikKCQl7CgkJZm9yZWFjaCAkbGV4dCAoImEiLCAic28iKQoJCQl7CgkJCSRscmVzb2x2ID0gIiRscGF0aC9saWJyZXNvbHYuJGxleHQiOwoJCQlsYXN0IExSRVNPTFYJaWYgKC1yICIkbHJlc29sdiIpOwoJCQkkbHJlc29sdiA9ICIiOwoJCQl9CgkJfQoJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IC49ICIgLWxyZXNvbHYiCgkJaWYgKCIkbHJlc29sdiIgbmUgIiIpOwoJJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSA9ICItSSIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LiIvaW5jbHVkZSIKCQlpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IGVxICIiICYmCgkJICAgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IG5lICIiOwoJfQoKIyBUaGUgRFNPIGNvZGUgY3VycmVudGx5IGFsd2F5cyBpbXBsZW1lbnRzIGFsbCBmdW5jdGlvbnMgc28gdGhhdCBubwojIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBmcm9tIGEgY29tcGlsYXRpb24gcG9pbnQKIyBvZiB2aWV3LiBIb3dldmVyLCB0aGUgIm1ldGhvZCJzIG1heSByZXR1cm4gemVybyB1bmxlc3MgdGhhdCBwbGF0Zm9ybQojIGhhcyBzdXBwb3J0IGNvbXBpbGVkIGluIGZvciB0aGVtLiBDdXJyZW50bHkgZWFjaCBtZXRob2QgaXMgZW5hYmxlZAojIGJ5IGEgZGVmaW5lICJEU09fPG5hbWU+IiAuLi4gd2UgdHJhbnNsYXRlIHRoZSAiZHNvX3NjaGVtZSIgY29uZmlnCiMgc3RyaW5nIGVudHJ5IGludG8gdXNpbmcgdGhlIGZvbGxvd2luZyBsb2dpYzsKbXkgJGRzb19jZmxhZ3M7CmlmICghJG5vX2RzbyAmJiAkZHNvX3NjaGVtZSBuZSAiIikKCXsKCSRkc29fc2NoZW1lID1+IHRyL1thLXpdL1tBLVpdLzsKCWlmICgkZHNvX3NjaGVtZSBlcSAiRExGQ04iKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCI7CgkJfQoJZWxzaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTl9OT19IIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04iOwoJCX0KCWVsc2UKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fJGRzb19zY2hlbWUiOwoJCX0KCSRjZmxhZ3MgPSAiJGRzb19jZmxhZ3MgJGNmbGFncyI7Cgl9CgpteSAkdGhyZWFkX2NmbGFnczsKbXkgJHRocmVhZF9kZWZpbmVzOwppZiAoJHRocmVhZF9jZmxhZyBuZSAiKHVua25vd24pIiAmJiAhJG5vX3RocmVhZHMpCgl7CgkjIElmIHdlIGtub3cgaG93IHRvIGRvIGl0LCBzdXBwb3J0IHRocmVhZHMgYnkgZGVmYXVsdC4KCSR0aHJlYWRzID0gMTsKCX0KaWYgKCR0aHJlYWRfY2ZsYWcgZXEgIih1bmtub3duKSIgJiYgJHRocmVhZHMpCgl7CgkjIElmIHRoZSB1c2VyIGFza2VkIGZvciAidGhyZWFkcyIsIFtzXWhlIGlzIGFsc28gZXhwZWN0ZWQgdG8KCSMgcHJvdmlkZSBhbnkgc3lzdGVtLWRlcGVuZGVudCBjb21waWxlciBvcHRpb25zIHRoYXQgYXJlCgkjIG5lY2Vzc2FyeS4KCWlmICgkbm9fdXNlcl9jZmxhZ3MpCgkJewoJCXByaW50ICJZb3UgYXNrZWQgZm9yIG11bHRpLXRocmVhZGluZyBzdXBwb3J0LCBidXQgZGlkbid0XG4iOwoJCXByaW50ICJwcm92aWRlIGFueSBzeXN0ZW0tc3BlY2lmaWMgY29tcGlsZXIgb3B0aW9uc1xuIjsKCQlleGl0KDEpOwoJCX0KCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkY2ZsYWdzIiA7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwoJfQplbHNlCgl7CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJHRocmVhZF9jZmxhZyAkY2ZsYWdzIjsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7CiMJbXkgJGRlZjsKIwlmb3JlYWNoICRkZWYgKHNwbGl0ICcgJywkdGhyZWFkX2NmbGFnKQojCQl7CiMJCWlmICgkZGVmID1+IHMvXi1ELy8gJiYgJGRlZiAhfiAvXl8vKQojCQkJewojCQkJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lICRkZWZcbiI7CiMJCQl9CiMJCX0KCX0JCgokbGZsYWdzPSIkbGlicyRsZmxhZ3MiIGlmICgkbGlicyBuZSAiIik7CgppZiAoJG5vX2FzbSkKCXsKCSRjcHVpZF9vYmo9JGJuX29iaj0KCSRkZXNfb2JqPSRhZXNfb2JqPSRiZl9vYmo9JGNhc3Rfb2JqPSRyYzRfb2JqPSRyYzVfb2JqPSRjbWxsX29iaj0KCSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSIiOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQlpZiAoZGVmaW5lZCgkd2l0aGFyZ3N7InpsaWItbGliIn0pKQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtTCIgLiAkd2l0aGFyZ3N7InpsaWItbGliIn0gLiAiIC1seiI7CgkJCX0KCQllbHNlCgkJCXsKCQkJJGxmbGFncyA9ICIkbGZsYWdzIC1seiI7CgkJCX0KCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQ7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICghJElzTUsxTUYpCgl7CgkjIGFkZCB7bm8tfXN0YXRpYy1lbmdpbmUgdG8gb3B0aW9ucyB0byBhbGxvdyBta2RlZi5wbCB0byB3b3JrIHdpdGhvdXQgZXh0cmEgYXJndW1lbnRzCglpZiAoJG5vX3NoYXJlZCkKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBzdGF0aWMtZW5naW5lIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBuby1zdGF0aWMtZW5naW5lIjsKCQl9Cgl9CgokY3B1aWRfb2JqLj0iIHVwbGluay5vIHVwbGluay14ODYubyIgaWYgKCRjZmxhZ3MgPX4gL1wtRE9QRU5TU0xfVVNFX0FQUExJTksvKTsKCiMKIyBQbGF0Zm9ybSBmaXgtdXBzCiMKaWYgKCR0YXJnZXQgPX4gL1wtaWNjJC8pCSMgSW50ZWwgQyBjb21waWxlcgoJewoJbXkgJGljY3Zlcj0wOwoJaWYgKG9wZW4oRkQsIiRjYyAtViAyPiYxIHwiKSkKCQl7CgkJd2hpbGUoPEZEPikgeyAkaWNjdmVyPSQxIGlmICgvVmVyc2lvbiAoWzAtOV0rKVwuLyk7IH0KCQljbG9zZShGRCk7CgkJfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJaWYgKCRpY2N2ZXI+PTkpCgkJewoJCSRjZmxhZ3MuPSIgLWktc3RhdGljIjsKCQkkY2ZsYWdzPX5zL1wtbm9fY3BwcnQvLW5vLWNwcHJ0LzsKCQl9CglpZiAoJGljY3Zlcj49MTApCgkJewoJCSRjZmxhZ3M9fnMvXC1pXC1zdGF0aWMvLXN0YXRpYy1pbnRlbC87CgkJfQoJfQoKIyBVbmxpa2Ugb3RoZXIgT1NlcyAobGlrZSBTb2xhcmlzLCBMaW51eCwgVHJ1NjQsIElSSVgpIEJTRCBydW4tdGltZQojIGxpbmtlcnMgKHRlc3RlZCBPcGVuQlNELCBOZXRCU0QgYW5kIEZyZWVCU0QpICJkZW1hbmQiIFJQQVRIIHNldCBvbgojIC5zbyBvYmplY3RzLiBBcHBhcmVudGx5IGFwcGxpY2F0aW9uIFJQQVRIIGlzIG5vdCBnbG9iYWwgYW5kIGRvZXMKIyBub3QgYXBwbHkgdG8gLnNvIGxpbmtlZCB3aXRoIG90aGVyIC5zby4gUHJvYmxlbSBtYW5pZmVzdHMgaXRzZWxmCiMgd2hlbiBsaWJzc2wuc28gZmFpbHMgdG8gbG9hZCBsaWJjcnlwdG8uc28uIE9uZSBjYW4gYXJndWUgdGhhdCB3ZQojIHNob3VsZCBlbmdyYXZlIHRoaXMgaW50byBNYWtlZmlsZS5zaGFyZWQgcnVsZXMgb3IgaW50byBCU0QtKiBjb25maWcKIyBsaW5lcyBhYm92ZS4gTWVhbndoaWxlIGxldCdzIHRyeSB0byBiZSBjYXV0aW91cyBhbmQgcGFzcyAtcnBhdGggdG8KIyBsaW5rZXIgb25seSB3aGVuIC0tcHJlZml4IGlzIG5vdCAvdXNyLgppZiAoJHRhcmdldCA9fiAvXkJTRFwtLykKCXsKCSRzaGFyZWRfbGRmbGFnLj0iIC1XbCwtcnBhdGgsXCQoTElCUlBBVEgpIiBpZiAoJHByZWZpeCAhfiBtfF4vdXNyWy9dKiR8KTsKCX0KCmlmICgkc3lzX2lkIG5lICIiKQoJewoJIyRjZmxhZ3M9Ii1ET1BFTlNTTF9TWVNOQU1FXyRzeXNfaWQgJGNmbGFncyI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iI2RlZmluZSBPUEVOU1NMX1NZU05BTUVfJHN5c19pZFxuIjsKCX0KCmlmICgkcmFubGliIGVxICIiKQoJewoJJHJhbmxpYiA9ICRkZWZhdWx0X3JhbmxpYjsKCX0KCiNteSAoJGJuMSk9c3BsaXQoL1xzKy8sJGJuX29iaik7CiMkYm4xID0gIiIgdW5sZXNzIGRlZmluZWQgJGJuMTsKIyRibjE9JGJuX2FzbSB1bmxlc3MgKCRibjEgPX4gL1wubyQvKTsKIyRibl9vYmo9IiRibjEiOwoKJGNwdWlkX29iaj0iIiBpZiAoJHByb2Nlc3NvciBlcSAiMzg2Iik7CgokYm5fb2JqID0gJGJuX2FzbSB1bmxlc3MgJGJuX29iaiBuZSAiIjsKIyBibi01ODYgaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGluZyBibl8qX3BhcnRfd29yZHMKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX1BBUlRfV09SRFMiIGlmICgkYm5fb2JqID1+IC9ibi01ODYvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRub19zc2UyICYmICRibl9vYmogPX4gLzg2Lyk7CgokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7CgokY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwokZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7CiRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7CiRjYXN0X29iaj0kY2FzdF9lbmMJdW5sZXNzICgkY2FzdF9vYmogPX4gL1wubyQvKTsKJHJjNF9vYmo9JHJjNF9lbmMJdW5sZXNzICgkcmM0X29iaiA9fiAvXC5vJC8pOwokcmM1X29iaj0kcmM1X2VuYwl1bmxlc3MgKCRyYzVfb2JqID1+IC9cLm8kLyk7CmlmICgkc2hhMV9vYmogPX4gL1wubyQvKQoJewojCSRzaGExX29iaj0kc2hhMV9lbmM7CgkkY2ZsYWdzLj0iIC1EU0hBMV9BU00iICAgaWYgKCRzaGExX29iaiA9fiAvc3g4Ni8gfHwgJHNoYTFfb2JqID1+IC9zaGExLyk7CgkkY2ZsYWdzLj0iIC1EU0hBMjU2X0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhMjU2Lyk7CgkkY2ZsYWdzLj0iIC1EU0hBNTEyX0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhNTEyLyk7CglpZiAoJHNoYTFfb2JqID1+IC9zc2UyLykKCSAgICB7CWlmICgkbm9fc3NlMikKCQl7ICAgJHNoYTFfb2JqID1+IHMvXFMqc3NlMlxTKy8vOyAgICAgICAgfQoJCWVsc2lmICgkY2ZsYWdzICF+IC9PUEVOU1NMX0lBMzJfU1NFMi8pCgkJeyAgICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiI7ICAgIH0KCSAgICB9Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CmlmICgkYWVzX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EQUVTX0FTTSI7CgkkYWVzX29iaiA9fiBzL1xzKmFlc25pXC14ODZcLm8vLyBpZiAoJG5vX3NzZTIpOwoJfQplbHNlCXsKCSRhZXNfb2JqPSRhZXNfZW5jOwoJfQokd3Bfb2JqPSIiIGlmICgkd3Bfb2JqID1+IC9tbXgvICYmICRwcm9jZXNzb3IgZXEgIjM4NiIpOwppZiAoJHdwX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EV0hJUkxQT09MX0FTTSI7Cgl9CmVsc2UJewoJJHdwX29iaj0id3BfYmxvY2subyI7Cgl9CiRjbWxsX29iaj0kY21sbF9lbmMJdW5sZXNzICgkY21sbF9vYmogPX4gLy5vJC8pOwoKIyAiU3RyaW5naWZ5IiB0aGUgQyBmbGFncyBzdHJpbmcuICBUaGlzIHBlcm1pdHMgaXQgdG8gYmUgbWFkZSBwYXJ0IG9mIGEgc3RyaW5nCiMgYW5kIHdvcmtzIGFzIHdlbGwgb24gY29tbWFuZCBsaW5lcy4KJGNmbGFncyA9fiBzLyhbXFxcIl0pL1xcXDEvZzsKCm15ICR2ZXJzaW9uID0gInVua25vd24iOwpteSAkdmVyc2lvbl9udW0gPSAidW5rbm93biI7Cm15ICRtYWpvciA9ICJ1bmtub3duIjsKbXkgJG1pbm9yID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9udW1iZXIgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgPSAidW5rbm93biI7Cm15ICRzaGxpYl9tYWpvciA9ICJ1bmtub3duIjsKbXkgJHNobGliX21pbm9yID0gInVua25vd24iOwoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3Nsdi5oJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBvcGVuc3Nsdi5oOiQhXG4iOwp3aGlsZSAoPElOPikKCXsKCSR2ZXJzaW9uPSQxIGlmIC9PUEVOU1NMLlZFUlNJT04uVEVYVC4qT3BlblNTTCAoXFMrKSAvOwoJJHZlcnNpb25fbnVtPSQxIGlmIC9PUEVOU1NMLlZFUlNJT04uTlVNQkVSLioweChcUyspLzsKCSRzaGxpYl92ZXJzaW9uX251bWJlcj0kMSBpZiAvU0hMSUJfVkVSU0lPTl9OVU1CRVIgKiIoW14iXSspIi87Cgkkc2hsaWJfdmVyc2lvbl9oaXN0b3J5PSQxIGlmIC9TSExJQl9WRVJTSU9OX0hJU1RPUlkgKiIoW14iXSopIi87Cgl9CmNsb3NlKElOKTsKaWYgKCRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgbmUgIiIpIHsgJHNobGliX3ZlcnNpb25faGlzdG9yeSAuPSAiOiI7IH0KCmlmICgkdmVyc2lvbiA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRtYWpvcj0kMTsKCSRtaW5vcj0kMjsKCX0KCmlmICgkc2hsaWJfdmVyc2lvbl9udW1iZXIgPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7Cgkkc2hsaWJfbWFqb3I9JDE7Cgkkc2hsaWJfbWlub3I9JDI7Cgl9CgppZiAoJHN0cmljdF93YXJuaW5ncykKCXsKCW15ICR3b3B0OwoJZGllICJFUlJPUiAtLXN0cmljdC13YXJuaW5ncyByZXF1aXJlcyBnY2MiIHVubGVzcyAoJGNjID1+IC9nY2MkLyk7Cglmb3JlYWNoICR3b3B0IChzcGxpdCAvXHMrLywgJGdjY19kZXZ0ZWFtX3dhcm4pCgkJewoJCSRjZmxhZ3MgLj0gIiAkd29wdCIgdW5sZXNzICgkY2ZsYWdzID1+IC8kd29wdC8pCgkJfQoJfQoKb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOwp1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOwpvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKcHJpbnQgT1VUICIjIyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBNYWtlZmlsZS5vcmcgYnkgQ29uZmlndXJlLlxuXG4iOwpteSAkc2RpcnM9MDsKd2hpbGUgKDxJTj4pCgl7CgljaG9tcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhccykkZGlyIC8kMS87CgkJCXMvXHMkZGlyJC8vOwoJCQl9CgkJfQoJJHNkaXJzID0gMCB1bmxlc3MgL1xcJC87CiAgICAgICAgcy9lbmdpbmVzIC8vIGlmICgvXkRJUlM9LyAmJiAkZGlzYWJsZWR7ImVuZ2luZSJ9KTsKCXMvY2Nnb3N0Ly8gaWYgKC9eRU5HRElSUz0vICYmICRkaXNhYmxlZHsiZ29zdCJ9KTsKCXMvXlZFUlNJT049LiovVkVSU0lPTj0kdmVyc2lvbi87CglzL15NQUpPUj0uKi9NQUpPUj0kbWFqb3IvOwoJcy9eTUlOT1I9LiovTUlOT1I9JG1pbm9yLzsKCXMvXlNITElCX1ZFUlNJT05fTlVNQkVSPS4qL1NITElCX1ZFUlNJT05fTlVNQkVSPSRzaGxpYl92ZXJzaW9uX251bWJlci87CglzL15TSExJQl9WRVJTSU9OX0hJU1RPUlk9LiovU0hMSUJfVkVSU0lPTl9ISVNUT1JZPSRzaGxpYl92ZXJzaW9uX2hpc3RvcnkvOwoJcy9eU0hMSUJfTUFKT1I9LiovU0hMSUJfTUFKT1I9JHNobGliX21ham9yLzsKCXMvXlNITElCX01JTk9SPS4qL1NITElCX01JTk9SPSRzaGxpYl9taW5vci87CglzL15TSExJQl9FWFQ9LiovU0hMSUJfRVhUPSRzaGFyZWRfZXh0ZW5zaW9uLzsKCXMvXklOU1RBTExUT1A9LiokL0lOU1RBTExUT1A9JHByZWZpeC87CglzL15NVUxUSUxJQj0uKiQvTVVMVElMSUI9JG11bHRpbGliLzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eTElCRElSPS4qJC9MSUJESVI9JGxpYmRpci87CglzL15JTlNUQUxMX1BSRUZJWD0uKiQvSU5TVEFMTF9QUkVGSVg9JGluc3RhbGxfcHJlZml4LzsKCXMvXlBMQVRGT1JNPS4qJC9QTEFURk9STT0kdGFyZ2V0LzsKCXMvXk9QVElPTlM9LiokL09QVElPTlM9JG9wdGlvbnMvOwoJcy9eQ09ORklHVVJFX0FSR1M9LiokL0NPTkZJR1VSRV9BUkdTPSRhcmd2c3RyaW5nLzsKCWlmICgkY3Jvc3NfY29tcGlsZV9wcmVmaXgpCgkJewoJCXMvXkNDPS4qJC9DUk9TU19DT01QSUxFPSAkY3Jvc3NfY29tcGlsZV9wcmVmaXhcbkNDPSBcJFwoQ1JPU1NfQ09NUElMRVwpJGNjLzsKCQlzL15BUj1ccyovQVI9IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXk5NPVxzKi9OTT0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eUkFOTElCPVxzKi9SQU5MSUI9IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gXCRcKENST1NTX0NPTVBJTEVcKSRjYy8gaWYgJGNjIGVxICJnY2MiOwoJCX0KCWVsc2UJewoJCXMvXkNDPS4qJC9DQz0gJGNjLzsKCQlzL15BUj1ccyphci9BUj0gJGFyLzsKCQlzL15SQU5MSUI9LiovUkFOTElCPSAkcmFubGliLzsKCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJCX0KCXMvXkNGTEFHPS4qJC9DRkxBRz0gJGNmbGFncy87CglzL15ERVBGTEFHPS4qJC9ERVBGTEFHPSRkZXBmbGFncy87CglzL15QRVhfTElCUz0uKiQvUEVYX0xJQlM9ICRwcmVsZmxhZ3MvOwoJcy9eRVhfTElCUz0uKiQvRVhfTElCUz0gJGxmbGFncy87CglzL15FWEVfRVhUPS4qJC9FWEVfRVhUPSAkZXhlX2V4dC87CglzL15DUFVJRF9PQko9LiokL0NQVUlEX09CSj0gJGNwdWlkX29iai87CglzL15CTl9BU009LiokL0JOX0FTTT0gJGJuX29iai87CglzL15ERVNfRU5DPS4qJC9ERVNfRU5DPSAkZGVzX29iai87CglzL15BRVNfRU5DPS4qJC9BRVNfRU5DPSAkYWVzX29iai87CglzL15CRl9FTkM9LiokL0JGX0VOQz0gJGJmX29iai87CglzL15DQVNUX0VOQz0uKiQvQ0FTVF9FTkM9ICRjYXN0X29iai87CglzL15SQzRfRU5DPS4qJC9SQzRfRU5DPSAkcmM0X29iai87CglzL15SQzVfRU5DPS4qJC9SQzVfRU5DPSAkcmM1X29iai87CglzL15NRDVfQVNNX09CSj0uKiQvTUQ1X0FTTV9PQko9ICRtZDVfb2JqLzsKCXMvXlNIQTFfQVNNX09CSj0uKiQvU0hBMV9BU01fT0JKPSAkc2hhMV9vYmovOwoJcy9eUk1EMTYwX0FTTV9PQko9LiokL1JNRDE2MF9BU01fT0JKPSAkcm1kMTYwX29iai87CglzL15XUF9BU01fT0JKPS4qJC9XUF9BU01fT0JKPSAkd3Bfb2JqLzsKCXMvXkNNTExfRU5DPS4qJC9DTUxMX0VOQz0gJGNtbGxfb2JqLzsKCXMvXlBFUkxBU01fU0NIRU1FPS4qJC9QRVJMQVNNX1NDSEVNRT0gJHBlcmxhc21fc2NoZW1lLzsKCXMvXlBST0NFU1NPUj0uKi9QUk9DRVNTT1I9ICRwcm9jZXNzb3IvOwoJcy9eQVJGTEFHUz0uKi9BUkZMQUdTPSAkYXJmbGFncy87CglzL15QRVJMPS4qL1BFUkw9ICRwZXJsLzsKCXMvXktSQjVfSU5DTFVERVM9LiovS1JCNV9JTkNMVURFUz0kd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LzsKCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwoJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CglzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwoJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CglzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwoJaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LmR5bGliLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5cJChTSExJQl9NQUpPUikuZHlsaWIgLmR5bGliLzsKCQl9CglzL15TSEFSRURfTERGTEFHUz0uKi9TSEFSRURfTERGTEFHUz0kc2hhcmVkX2xkZmxhZy87CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiREVTX0VOQyAgICAgICA9JGRlc19vYmpcbiI7CnByaW50ICJBRVNfRU5DICAgICAgID0kYWVzX29ialxuIjsKcHJpbnQgIkJGX0VOQyAgICAgICAgPSRiZl9vYmpcbiI7CnByaW50ICJDQVNUX0VOQyAgICAgID0kY2FzdF9vYmpcbiI7CnByaW50ICJSQzRfRU5DICAgICAgID0kcmM0X29ialxuIjsKcHJpbnQgIlJDNV9FTkMgICAgICAgPSRyYzVfb2JqXG4iOwpwcmludCAiTUQ1X09CSl9BU00gICA9JG1kNV9vYmpcbiI7CnByaW50ICJTSEExX09CSl9BU00gID0kc2hhMV9vYmpcbiI7CnByaW50ICJSTUQxNjBfT0JKX0FTTT0kcm1kMTYwX29ialxuIjsKcHJpbnQgIkNNTExfRU5DPSAgICAgPSRjbWxsX29ialxuIjsKcHJpbnQgIlBST0NFU1NPUiAgICAgPSRwcm9jZXNzb3JcbiI7CnByaW50ICJSQU5MSUIgICAgICAgID0kcmFubGliXG4iOwpwcmludCAiQVJGTEFHUyAgICAgICA9JGFyZmxhZ3NcbiI7CnByaW50ICJQRVJMICAgICAgICAgID0kcGVybFxuIjsKcHJpbnQgIktSQjVfSU5DTFVERVMgPSIsJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSwiXG4iCglpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IG5lICIiOwoKbXkgJGRlc19wdHI9MDsKbXkgJGRlc19yaXNjMT0wOwpteSAkZGVzX3Jpc2MyPTA7Cm15ICRkZXNfdW5yb2xsPTA7Cm15ICRibl9sbD0wOwpteSAkZGVmX2ludD0yOwpteSAkcmM0X2ludD0kZGVmX2ludDsKbXkgJG1kMl9pbnQ9JGRlZl9pbnQ7Cm15ICRpZGVhX2ludD0kZGVmX2ludDsKbXkgJHJjMl9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzRfaWR4PTA7Cm15ICRyYzRfY2h1bms9MDsKbXkgJGJmX3B0cj0wOwpteSBAdHlwZT0oImNoYXIiLCJzaG9ydCIsImludCIsImxvbmciKTsKbXkgKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCk7Cm15ICRleHBvcnRfdmFyX2FzX2ZuPTA7CgpteSAkZGVzX2ludDsKCmZvcmVhY2ggKHNvcnQgc3BsaXQoL1xzKy8sJGJuX29wcykpCgl7CgkkZGVzX3B0cj0xIGlmIC9ERVNfUFRSLzsKCSRkZXNfcmlzYzE9MSBpZiAvREVTX1JJU0MxLzsKCSRkZXNfcmlzYzI9MSBpZiAvREVTX1JJU0MyLzsKCSRkZXNfdW5yb2xsPTEgaWYgL0RFU19VTlJPTEwvOwoJJGRlc19pbnQ9MSBpZiAvREVTX0lOVC87CgkkYm5fbGw9MSBpZiAvQk5fTExPTkcvOwoJJHJjNF9pbnQ9MCBpZiAvUkM0X0NIQVIvOwoJJHJjNF9pbnQ9MyBpZiAvUkM0X0xPTkcvOwoJJHJjNF9pZHg9MSBpZiAvUkM0X0lOREVYLzsKCSRyYzRfY2h1bms9MSBpZiAvUkM0X0NIVU5LLzsKCSRyYzRfY2h1bms9MiBpZiAvUkM0X0NIVU5LX0xMLzsKCSRtZDJfaW50PTAgaWYgL01EMl9DSEFSLzsKCSRtZDJfaW50PTMgaWYgL01EMl9MT05HLzsKCSRpZGVhX2ludD0xIGlmIC9JREVBX1NIT1JULzsKCSRpZGVhX2ludD0zIGlmIC9JREVBX0xPTkcvOwoJJHJjMl9pbnQ9MSBpZiAvUkMyX1NIT1JULzsKCSRyYzJfaW50PTMgaWYgL1JDMl9MT05HLzsKCSRiZl9wdHI9MSBpZiAkXyBlcSAiQkZfUFRSIjsKCSRiZl9wdHI9MiBpZiAkXyBlcSAiQkZfUFRSMiI7CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwxLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDEsMCwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklUX0xPTkcvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCkgaWYgL1RISVJUWV9UV09fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwxLDApIGlmIC9TSVhURUVOX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMCwxKSBpZiAvRUlHSFRfQklULzsKCSRleHBvcnRfdmFyX2FzX2ZuPTEgaWYgL0VYUE9SVF9WQVJfQVNfRk4vOwoJfQoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3NsY29uZi5oLmluJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbjokIVxuIjsKdW5saW5rKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IjsKb3BlbihPVVQsJz5jcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXcnKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iOwpwcmludCBPVVQgIi8qIG9wZW5zc2xjb25mLmggKi9cbiI7CnByaW50IE9VVCAiLyogV0FSTklORzogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBvcGVuc3NsY29uZi5oLmluIGJ5IENvbmZpZ3VyZS4gKi9cblxuIjsKCnByaW50IE9VVCAiLyogT3BlblNTTCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczogKi9cbiI7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID0gJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CiRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMX05PXyguKikvI2lmbmRlZiBPUEVOU1NMX0VYUEVSSU1FTlRBTF8kMVxuIyBpZm5kZWYgT1BFTlNTTF9OT18kMVxuIyAgZGVmaW5lIE9QRU5TU0xfTk9fJDFcbiMgZW5kaWZcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfKC4qKS8jIGlmIGRlZmluZWQoT1BFTlNTTF8kMSkgXCZcJiAhZGVmaW5lZCgkMSlcbiMgIGRlZmluZSAkMVxuIyBlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPSAiICAgLyogbm8gY2lwaGVycyBleGNsdWRlZCAqL1xuIiBpZiAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyBlcSAiIjsKJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfc3lzX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwpwcmludCBPVVQgJG9wZW5zc2xfc3lzX2RlZmluZXM7CnByaW50IE9VVCAiI2lmbmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkRcblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzOwpwcmludCBPVVQgIlxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpwcmludCBPVVQgIlxuI2VuZGlmIC8qIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORCAqL1xuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaiBuZSAibWVtX2Nsci5vIik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7CgkJbXkgJGZvbyA9ICRvcGVuc3NsZGlyOwoJCSRmb28gPX4gcy9cXC9cXFxcL2c7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xESVIgXCIkZm9vXCJcbiI7CgkJfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsKCQlteSAkZm9vID0gIiRwcmVmaXgvJGxpYmRpci9lbmdpbmVzIjsKCQkkZm9vID1+IHMvXFwvXFxcXC9nOwoJCXByaW50IE9VVCAiI2RlZmluZSBFTkdJTkVTRElSIFwiJGZvb1wiXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIiRtYWtlIFBFUkw9XCckcGVybFwnIjsKCW15ICRtYWtlX3RhcmdldHMgPSAiIjsKCSRtYWtlX3RhcmdldHMgLj0gIiBsaW5rcyIgaWYgJHN5bWxpbms7CgkkbWFrZV90YXJnZXRzIC49ICIgZGVwZW5kIiBpZiAkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgJG1ha2VfZGVwZW5kOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGdlbnRlc3RzIiBpZiAkc3ltbGluazsKCShzeXN0ZW0gJG1ha2VfY29tbWFuZC4kbWFrZV90YXJnZXRzKSA9PSAwIG9yIGV4aXQgJD8KCQlpZiAkbWFrZV90YXJnZXRzIG5lICIiOwoJaWYgKCAkcGVybCA9fiBtQF4vQCkgewoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwkcGVybCwnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwkcGVybCwnXiMhLycsICcjISVzJyk7Cgl9IGVsc2UgewoJICAgICMgTm8gcGF0aCBmb3IgUGVybCBrbm93biAuLi4KCSAgICAmZG9maWxlKCJ0b29scy9jX3JlaGFzaCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywnXiMhLycsICcjISVzJyk7Cgl9CglpZiAoJGRlcGZsYWdzIG5lICRkZWZhdWx0X2RlcGZsYWdzICYmICEkbWFrZV9kZXBlbmQpIHsKCQlwcmludCA8PEVPRjsKClNpbmNlIHlvdSd2ZSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IGxlYXN0IG9uZSBhbGdvcml0aG0sIHlvdSBuZWVkIHRvIGRvCnRoZSBmb2xsb3dpbmcgYmVmb3JlIGJ1aWxkaW5nOgoKCW1ha2UgZGVwZW5kCkVPRgoJfQp9CgojIGNyZWF0ZSB0aGUgbXMvdmVyc2lvbjMyLnJjIGZpbGUgaWYgbmVlZGVkCmlmICgkSXNNSzFNRiAmJiAoJHRhcmdldCAhfiAvXm5ldHdhcmUvKSkgewoJbXkgKCR2MSwgJHYyLCAkdjMsICR2NCk7CglpZiAoJHZlcnNpb25fbnVtID1+IC8oXlswLTlhLWZdezF9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KS9pKSB7CgkJJHYxPWhleCAkMTsKCQkkdjI9aGV4ICQyOwoJCSR2Mz1oZXggJDM7CgkJJHY0PWhleCAkNDsKCX0KCW9wZW4gKE9VVCwiPm1zL3ZlcnNpb24zMi5yYyIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiBtcy92ZXJzaW9uMzIucmMiOwoJcHJpbnQgT1VUIDw8RU9GOwojaW5jbHVkZSA8d2ludmVyLmg+CgpMQU5HVUFHRSAweDA5LDB4MDEKCjEgVkVSU0lPTklORk8KICBGSUxFVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBQUk9EVUNUVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKICBGSUxFRkxBR1MgMHgwMUwKI2Vsc2UKICBGSUxFRkxBR1MgMHgwMEwKI2VuZGlmCiAgRklMRU9TIFZPU19fV0lORE9XUzMyCiAgRklMRVRZUEUgVkZUX0RMTAogIEZJTEVTVUJUWVBFIDB4MEwKQkVHSU4KICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKICAgIEJFR0lOCglCTE9DSyAiMDQwOTA0YjAiCglCRUdJTgoJICAgIC8vIFJlcXVpcmVkOgkgICAgCgkgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlRoZSBPcGVuU1NMIFByb2plY3QsIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvXFwwIgoJICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiT3BlblNTTCBTaGFyZWQgTGlicmFyeVxcMCIKCSAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAiJHZlcnNpb25cXDAiCiNpZiBkZWZpbmVkKENSWVBUTykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYmVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmVheTMyLmRsbFxcMCIKI2VsaWYgZGVmaW5lZChTU0wpCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJzc2xlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJzc2xlYXkzMi5kbGxcXDAiCiNlbmRpZgoJICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJUaGUgT3BlblNTTCBUb29sa2l0XFwwIgoJICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICIkdmVyc2lvblxcMCIKCSAgICAvLyBPcHRpb25hbDoKCSAgICAvL1ZBTFVFICJDb21tZW50cyIsICJcXDAiCgkgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDE5OTgtMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiBDb3B5cmlnaHQgqSAxOTk1LTE5OTggRXJpYyBBLiBZb3VuZywgVGltIEouIEh1ZHNvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXDAiCgkgICAgLy9WQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlxcMCIKCSAgICAvL1ZBTFVFICJQcml2YXRlQnVpbGQiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlNwZWNpYWxCdWlsZCIsICJcXDAiCglFTkQKICAgIEVORAogICAgQkxPQ0sgIlZhckZpbGVJbmZvIgogICAgQkVHSU4KICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMHg0YjAKICAgIEVORApFTkQKRU9GCgljbG9zZShPVVQpOwogIH0KICAKcHJpbnQgPDxFT0Y7CgpDb25maWd1cmVkIGZvciAkdGFyZ2V0LgpFT0YKCnByaW50IDw8XEVPRiBpZiAoISRub190aHJlYWRzICYmICEkdGhyZWFkcyk7CgpUaGUgbGlicmFyeSBjb3VsZCBub3QgYmUgY29uZmlndXJlZCBmb3Igc3VwcG9ydGluZyBtdWx0aS10aHJlYWRlZAphcHBsaWNhdGlvbnMgYXMgdGhlIGNvbXBpbGVyIG9wdGlvbnMgcmVxdWlyZWQgb24gdGhpcyBzeXN0ZW0gYXJlIG5vdCBrbm93bi4KU2VlIGZpbGUgSU5TVEFMTCBmb3IgZGV0YWlscyBpZiB5b3UgbmVlZCBtdWx0aS10aHJlYWRpbmcuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICgkbm9fc2hhcmVkX3dhcm4pOwoKWW91IGdhdmUgdGhlIG9wdGlvbiAnc2hhcmVkJy4gIE5vcm1hbGx5LCB0aGF0IHdvdWxkIGdpdmUgeW91IHNoYXJlZCBsaWJyYXJpZXMuClVuZm9ydHVuYXRlbHksIHRoZSBPcGVuU1NMIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbmNsdWRlIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQKZm9yIHRoaXMgcGxhdGZvcm0geWV0LCBzbyBpdCB3aWxsIHByZXRlbmQgeW91IGdhdmUgdGhlIG9wdGlvbiAnbm8tc2hhcmVkJy4gIElmCnlvdSBjYW4gaW5mb3JtIHRoZSBkZXZlbG9wcGVycyAob3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnKSBob3cgdG8gc3VwcG9ydCBzaGFyZWQKbGlicmFyaWVzIG9uIHRoaXMgcGxhdGZvcm0sIHRoZXkgd2lsbCBhdCBsZWFzdCBsb29rIGF0IGl0IGFuZCB0cnkgdGhlaXIgYmVzdAooYnV0IHBsZWFzZSBmaXJzdCBtYWtlIHN1cmUgeW91IGhhdmUgdHJpZWQgd2l0aCBhIGN1cnJlbnQgdmVyc2lvbiBvZiBPcGVuU1NMKS4KRU9GCgpleGl0KDApOwoKc3ViIHVzYWdlCgl7CglwcmludCBTVERFUlIgJHVzYWdlOwoJcHJpbnQgU1RERVJSICJcbnBpY2sgb3MvY29tcGlsZXIgZnJvbTpcbiI7CglteSAkaj0wOwoJbXkgJGk7CiAgICAgICAgbXkgJGs9MDsKCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgPX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSAhfiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9CglwcmludCBTVERFUlIgIlxuXG5OT1RFOiBJZiBpbiBkb3VidCwgb24gVW5peC1pc2ggc3lzdGVtcyB1c2UgJy4vY29uZmlnJy5cbiI7CglleGl0KDEpOwoJfQoKc3ViIHdoaWNoCgl7CglteSgkbmFtZSk9QF87CglteSAkcGF0aDsKCWZvcmVhY2ggJHBhdGggKHNwbGl0IC86LywgJEVOVntQQVRIfSkKCQl7CgkJaWYgKC1mICIkcGF0aC8kbmFtZSRleGVfZXh0IiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lJGV4ZV9leHQiIHVubGVzcyAoJG5hbWUgZXEgInBlcmwiIGFuZAoJCQkgc3lzdGVtKCIkcGF0aC8kbmFtZSRleGVfZXh0IC1lICIgLiAnXCdleGl0KCRdPDUuMCk7XCcnKSk7CgkJCX0KCQl9Cgl9CgpzdWIgZG9maWxlCgl7CglteSAkZjsgbXkgJHA7IG15ICVtOyBteSBAYTsgbXkgJGs7IG15ICRmZjsKCSgkZiwkcCwlbSk9QF87CgoJb3BlbihJTiwiPCRmLmluIikgfHwgb3BlbihJTiwiPCRmIikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZjokIVxuIjsKCUBhPTxJTj47CgljbG9zZShJTik7Cglmb3JlYWNoICRrIChrZXlzICVtKQoJCXsKCQlncmVwKC8kay8gJiYgKCRfPXNwcmludGYoJG17JGt9LiJcbiIsJHApKSxAYSk7CgkJfQoJb3BlbihPVVQsIj4kZi5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmLm5ldzokIVxuIjsKCXByaW50IE9VVCBAYTsKCWNsb3NlKE9VVCk7CglyZW5hbWUoJGYsIiRmLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZlxuIiBpZiAtZSAkZjsKCXJlbmFtZSgiJGYubmV3IiwkZikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmLm5ld1xuIjsKCX0KCnN1YiBwcmludF90YWJsZV9lbnRyeQoJewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoKCShteSAkY2MsbXkgJGNmbGFncyxteSAkdW5pc3RkLG15ICR0aHJlYWRfY2ZsYWcsbXkgJHN5c19pZCxteSAkbGZsYWdzLAoJbXkgJGJuX29wcyxteSAkY3B1aWRfb2JqLG15ICRibl9vYmosbXkgJGRlc19vYmosbXkgJGFlc19vYmosIG15ICRiZl9vYmosCglteSAkbWQ1X29iaixteSAkc2hhMV9vYmosbXkgJGNhc3Rfb2JqLG15ICRyYzRfb2JqLG15ICRybWQxNjBfb2JqLAoJbXkgJHJjNV9vYmosbXkgJHdwX29iaixteSAkY21sbF9vYmosbXkgJHBlcmxhc21fc2NoZW1lLG15ICRkc29fc2NoZW1lLG15ICRzaGFyZWRfdGFyZ2V0LG15ICRzaGFyZWRfY2ZsYWcsCglteSAkc2hhcmVkX2xkZmxhZyxteSAkc2hhcmVkX2V4dGVuc2lvbixteSAkcmFubGliLG15ICRhcmZsYWdzLG15ICRtdWx0aWxpYik9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkY3B1aWRfb2JqICAgID0gJGNwdWlkX29iagpcJGJuX29iaiAgICAgICA9ICRibl9vYmoKXCRkZXNfb2JqICAgICAgPSAkZGVzX29iagpcJGFlc19vYmogICAgICA9ICRhZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkd3Bfb2JqICAgICAgID0gJHdwX29iagpcJGNtbGxfb2JqICAgICA9ICRjbWxsX29iagpcJHBlcmxhc21fc2NoZW1lID0gJHBlcmxhc21fc2NoZW1lClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKXCRtdWx0aWxpYiAgICAgPSAkbXVsdGlsaWIKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lKzFdID1+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgZm9sbG93aW5nIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSAhfiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2Jlb3MnLCAnZGwnLCAnZGxmY24nLCAnd2luMzInIGFuZCAndm1zJ1xuIjsKCQkJfQoJCX0KCXByaW50IFNUREVSUiAiTm8gc2FuaXR5IGVycm9ycyBkZXRlY3RlZCFcbiIgaWYgJGVycm9yY250ID09IDA7CglyZXR1cm4gJGVycm9yY250OwoJfQo=