Ly8gTW9yZ2VuR3JhdWVuIE1VRGxpYgovLwovLyBtYWdpZXIuaCAtLSBNYWdpZXJlcndlaXRlcnVuZyBkZXIgU2hlbGwKLy8KLy8gJElkOiBtYWdpZXIuaCA5NTUzIDIwMTYtMDUtMDMgMjA6MjI6NDdaIFplc3N0cmEgJAoKI2lmbmRlZiBfTUFHSUVSX0hfCiNkZWZpbmUgX01BR0lFUl9IXwoKI2RlZmluZSBTSEVMTERFQlVHR0VSICJ6ZXNzdHJhIgoKI2RlZmluZSBNQVhfQVJSQVlfU0laRSAgIDMwMDAgLy8gTVVTUyBFSUdFTlRMSUNIIE5BQ0ggL3N5cy9jb25maWcuaCBvZGVyIHNvCgojZGVmaW5lIEVSUk9SKG1zZywgYXJnLCByZXMpICAgKHByaW50Zihtc2csIGFyZykscmVzKQoKI2RlZmluZSBOT19SRUFEICAgICAgICAgIiVzOiBLZWluZSBMZXNlcmVjaHRlIVxuIgojZGVmaW5lIE5PX1dSSVRFICAgICAgICAiJXM6IEtlaW5lIFNjaHJlaWJyZWNodGUhXG4iCiNkZWZpbmUgRE9FU05UX0VYSVNUICAgICIlczogRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IVxuIgojZGVmaW5lIEFMUkVBRFlfRVhJU1RTICAiJXM6IERhdGVpIGV4aXN0aWVydCBzY2hvbi5cbiIKI2RlZmluZSBOT19ESVJTICAgICAgICAgICIlcyBpc3QgZWluIFZlcnplaWNobmlzLlxuIgojZGVmaW5lIFNBTUVfRklMRSAgICAgICAgIiVzOiBHbGVpY2hlcyBRdWVsbC0gdW5kIFppZWxmaWxlOiB1ZWJlcmdhbmdlbi5cbiIKI2RlZmluZSBOT19DUkVBVEVfRElSICAgIiVzOiBWZXJ6ZWljaG5pcyBrb25udGUgbmljaHQgZXJzdGVsbHQgd2VyZGVuLlxuIgojZGVmaW5lIERFU1RfSVNfRElSICAgICAiJXM6IFppZWxkYXRlaSBpc3QgZWluIFZlcnplaWNobmlzLlxuIgojZGVmaW5lIERFU1RfTk9fREVMRVRFICAiJXM6IFppZWxkYXRlaSBrb25udGUgbmljaHQgZ2Vsb2VzY2h0IHdlcmRlbi5cbiIKI2RlZmluZSBOT19NT1ZFICAgICAgICAgIiVzOiBEYXRlaSBrb25udGUgbmljaHQgdmVyc2Nob2JlbiB3ZXJkZW4uXG4iCiNkZWZpbmUgTk9fQ09QWSAgICAgICAgICIlczogRGF0ZWkga29ubnRlIG5pY2h0IGtvcGllcnQgd2VyZGVuLlxuIgojZGVmaW5lIEZJTEVfQ09QSUVEICAgICAiJXM6IGtvcGllcnQuXG4iCiNkZWZpbmUgRElSX0NSRUFURUQgICAgICIlczogVmVyemVpY2huaXMgZXJ6ZXVndC5cbiIKI2RlZmluZSBGSUxFX01PVkVEICAgICAgIiVzOiB2ZXJzY2hvYmVuLlxuIgojZGVmaW5lIEZJTEVfREVMRVRFRCAgICAiJXMgd3VyZGUgZ2Vsb2VzY2h0LlxuIgojZGVmaW5lIE5PX0RFTEVURSAgICAgICAiJXMga29ubnRlIG5pY2h0IGdlbG9lc2NodCB3ZXJkZW4uXG4iCgojZGVmaW5lIE1BWV9SRUFEKHgpICAgY2FsbF9vdGhlcihfX01BU1RFUl9PQkpFQ1RfXywidmFsaWRfcmVhZCIseCxnZXR1aWQodGhpc19vYmplY3QoKSkpCiNkZWZpbmUgTUFZX1dSSVRFKHgpICBjYWxsX290aGVyKF9fTUFTVEVSX09CSkVDVF9fLCJ2YWxpZF93cml0ZSIseCxnZXR1aWQodGhpc19vYmplY3QoKSkpCiNkZWZpbmUgTUFZX0RFTEVURSh4KSBjYWxsX290aGVyKF9fTUFTVEVSX09CSkVDVF9fLCJyZW1vdmVfZmlsZSIseCxnZXR1aWQodGhpc19vYmplY3QoKSkpCgojZGVmaW5lIE1BWExFTiAgNTAwMDAKCiNkZWZpbmUgUF9WQVJJQUJMRVMgInZhcmlhYmxlcyIKCiNkZWZpbmUgTUFOX09QVFMgICAibXJpIgojZGVmaW5lIE1BTl9NICAgICAgICAgICAgMSAgICAgICAgICAgLy8gTWF0Y2hlbiBkZXMgQmVncmlmZnMKI2RlZmluZSBNQU5fUiAgICAgICAgICAgIDIgICAgICAgICAgIC8vIFJlZ2V4cC1NYXRjaGVuCiNkZWZpbmUgTUFOX0kgICAgICAgICAgICA0ICAgICAgICAgICAvLyBJbnRlcmFrdGl2ZSBIaWxmZSAoZGVha3RpdmllcnQpCgojZGVmaW5lIE1LRElSX09QVFMgInZycCIKI2RlZmluZSBNS0RJUl9WICAgICAgICAgIDEgICAgICAgICAgIC8vIFZlcmJvc2U6IEF1c2dlYmVuLCB3YXMgZ2VtYWNodCB3aXJkCiNkZWZpbmUgTUtESVJfUiAgICAgICAgICAyICAgICAgICAgICAvLyBSZWt1cnNpdiBhbGxlIGhvZWhlcmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJ6ZWljaG5pc3NlIGVyc3RlbGxlbgojZGVmaW5lIE1LRElSX1AgICAgICAgICAgMiAgICAgICAgICAgLy8gZGFzIGdsZWljaGUgd2llIE1LRElSX1IKCiNkZWZpbmUgUk1ESVJfT1BUUyAidiIKI2RlZmluZSBSTURJUl9WICAgICAgICAgIDEgICAgICAgICAgIC8vIFZlcmJvc2U6IEF1c2dlYmVuLCB3YXMgZ2VtYWNodCB3aXJkCgojZGVmaW5lIFJNX09QVFMgICAidnJtaSIKI2RlZmluZSBSTV9WICAgICAgICAgICAgMSAgICAgICAgICAgIC8vIFZlcmJvc2U6IEF1c2dlYmVuLCB3YXMgZ2VtYWNodCB3aXJkCiNkZWZpbmUgUk1fUiAgICAgICAgICAgIDIgICAgICAgICAgICAvLyBWZXJ6ZWljaG5pc3NlIHJla3Vyc2l2IGxvZXNjaGVuCiNkZWZpbmUgUk1fTSAgICAgICAgICAgIDQgICAgICAgICAgICAvLyBEYXRlaU1BU0tFIGJlYWNodGVuCiNkZWZpbmUgUk1fSSAgICAgICAgICAgIDggICAgICAgICAgICAvLyBJbnRlcmFrdGl2IGxvZXNjaGVuIChpbW1lciBmcmFnZW4pCgojZGVmaW5lIFVQRF9PUFRTICAiYWZpbHJtYnZjZGhzQyIKI2RlZmluZSBVUERfQSAgICAgICAgICAgIDEgICAgICAgICAgIC8vIEFsbGUgSW5zdGFuemVuIGJlYXJiZWl0ZW4KI2RlZmluZSBVUERfRiAgICAgICAgICAgIDIgICAgICAgICAgIC8vIEFsbGUgSW5zdGFuemVuIGZpbmRlbiB1bmQgYW56ZWlnZW4KI2RlZmluZSBVUERfSSAgICAgICAgICAgIDQgICAgICAgICAgIC8vIEdlZXJidGUgS2xhc3NlbiBha3R1YWxpc2llcmVuCiNkZWZpbmUgVVBEX0wgICAgICAgICAgICA4ICAgICAgICAgICAvLyB6ZXJzdG9lcmVuIHVuZCBuZXUgbGFkZW4KI2RlZmluZSBVUERfUiAgICAgICAgICAgMTYgICAgICAgICAgIC8vIG5ldSBsYWRlbiwgZmFsbHMgemVyc3RvZXJ0CiNkZWZpbmUgVVBEX00gICAgICAgICAgIDMyICAgICAgICAgICAvLyBhbGxlIGdlZXJidGVuIEtsYXNzZW4gYXVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBha3R1YWxpdGFldCBUZXN0ZW4gdW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZ2YuIGFrdHVhbGlzaWVyZW4KI2RlZmluZSBVUERfQiAgICAgICAgICAgNjQgICAgICAgICAgIC8vIEJhY2t0cmFjZSBiZWkgRmVobGVybgojZGVmaW5lIFVQRF9WICAgICAgICAgIDEyOCAgICAgICAgICAgLy8gRXJic2NoYWZ0c2xpc3RlbiBtaXQgYXVzZ2ViZW4KI2RlZmluZSBVUERfQyAgICAgICAgICAyNTYgICAgICAgICAgIC8vIFByb3BlcnRpZXMgZXJoYWx0ZW4KI2RlZmluZSBVUERfRCAgICAgICAgICA1MTIgICAgICAgICAgIC8vIE9iamVrdGluaGFsdCBrb21wbGV0dCBkZXN0cnVjdGVuCiNkZWZpbmUgVVBEX0ggICAgICAgICAxMDI0ICAgICAgICAgICAvLyBIYXJkLURlc3RydWN0IChrZWluIHJlbW92ZSgpKQojZGVmaW5lIFVQRF9TICAgICAgICAgMjA0OCAgICAgICAgICAgLy8gU2lsZW50CiNkZWZpbmUgVVBEX0NPTkYgICAgICA0MDk2ICAgICAgICAgICAvLyBDb25maWd1cmUoKSBlcnp3aW5nZW4gKGQuaC4ga2VpbiBVcGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZW5uIENvbmZpZ3VyZSgpIG5pY2h0IGRlZmluaWVydCBpc3QpCiNkZWZpbmUgVVBEX0xPQUQgICAgICA4MTkyICAgICAgICAgICAvLyBsYWRlbiwgZmFsbHMgbmljaHQgZ2VsYWRlbiAobnVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcm4gZnVlciAnbG9hZCkKCiNkZWZpbmUgQ1BfT1BUUyAgICAgICAgICJ2cmZtaSIKI2RlZmluZSBDUF9WICAgICAgICAgICAgMSAgICAgICAgICAgIC8vIFZlcmJvc2U6IEF1c2dlYmVuLCB3YXMgZ2VtYWNodCB3aXJkCiNkZWZpbmUgQ1BfUiAgICAgICAgICAgIDIgICAgICAgICAgICAvLyBSZWt1cnNpdiBrb3BpZXJlbgojZGVmaW5lIENQX0YgICAgICAgICAgICA0ICAgICAgICAgICAgLy8gRm9yY2UgKG5pZSBmcmFnZW4pCiNkZWZpbmUgQ1BfTSAgICAgICAgICAgIDggICAgICAgICAgICAvLyBEYXRlaU1BU0tFIGJlYWNodGVuCiNkZWZpbmUgQ1BfSSAgICAgICAgICAgMTYgICAgICAgICAgICAvLyBJbnRlcmFrdGl2IGtvcGllcmVuIChpbW1lciBmcmFnZW4pCgojZGVmaW5lIE1WX09QVFMgICAgICAgICAidnJmbWkiCiNkZWZpbmUgTVZfViAgICAgICAgICAgIDEgICAgICAgICAgICAvLyBWZXJib3NlOiBBdXNnZWJlbiwgd2FzIGdlbWFjaHQgd2lyZAojZGVmaW5lIE1WX1IgICAgICAgICAgICAyICAgICAgICAgICAgLy8gSW1tZXIgYXVjaCBEYXRlaWVuIGltIERpciBtb3ZlbgojZGVmaW5lIE1WX0YgICAgICAgICAgICA0ICAgICAgICAgICAgLy8gRm9yY2UgKG5pZSBmcmFnZW4pCiNkZWZpbmUgTVZfTSAgICAgICAgICAgIDggICAgICAgICAgICAvLyBEYXRlaU1BU0tFIGJlYWNodGVuCiNkZWZpbmUgTVZfSSAgICAgICAgICAgMTYgICAgICAgICAgICAvLyBJbnRlcmFrdGl2IGJld2VnZW4gKGltbWVyIGZyYWdlbikKCiNkZWZpbmUgQ0RfT1BUUyAgICAgICAgICJscyIKI2RlZmluZSBDRF9MICAgICAgICAgICAgMSAgICAgICAgICAgIC8vIC5yZWFkbWUgYXVzZ2ViZW4KI2RlZmluZSBDRF9TICAgICAgICAgICAgMiAgICAgICAgICAgIC8vIC5yZWFkbWUgdW50ZXJkcnVlY2tlbgojZGVmaW5lIENEX0IgICAgICAgICAgICA0ICAgICAgICAgICAgLy8gWnVydWVjayB6dW0gbGV0enRlbiBWZXJ6ZWljaG5pcwoKI2RlZmluZSBMU19PUFRTICAgICAgICAgImFscnRzdWciCiNkZWZpbmUgTFNfQSAgICAgICAgICAgIDEgICAgICAgICAgICAvLyBBTExFIEZpbGVzIGFuemVpZ2VuCiNkZWZpbmUgTFNfTCAgICAgICAgICAgIDIgICAgICAgICAgICAvLyBMYW5nZSBBdXNnYWJlCiNkZWZpbmUgTFNfUiAgICAgICAgICAgIDQgICAgICAgICAgICAvLyBSdWVja3dhZXJ0cyBhdXNnZWJlbgojZGVmaW5lIExTX1QgICAgICAgICAgICA4ICAgICAgICAgICAgLy8gTmFjaCBaZWl0IG9yZG5lbgojZGVmaW5lIExTX1MgICAgICAgICAgICAxNiAgICAgICAgICAgLy8gTmFjaCBHcvbfZSBvcmRuZW4KI2RlZmluZSBMU19VICAgICAgICAgICAgMzIgICAgICAgICAgIC8vIFVJRCBhbnplaWdlbgojZGVmaW5lIExTX0cgICAgICAgICAgICA2NCAgICAgICAgICAgLy8gR3J1cHBlIGFuemVpZ2VuCgojZGVmaW5lIENMT05FX09QVFMgICAgICAiZiIKI2RlZmluZSBDTE9ORV9GICAgICAgICAgMSAgICAgICAgICAgIC8vIEF1ZiBqZWRlbiBGYWxsIHZlcnN1Y2hlbiB6dSBjbG9uZW4KCiNkZWZpbmUgR1JFUF9PUFRTICAgICAgICJjaGlsbnZybWYiCiNkZWZpbmUgR1JFUF9DICAgICAgICAgIDEgICAgICAgICAgICAvLyBOdXIgWmFobCBkZXIgWmVpbGVuIGF1c2dlYmVuCiNkZWZpbmUgR1JFUF9IICAgICAgICAgIDIgICAgICAgICAgICAvLyBEYXRlaW5hbWVuIG5pY2h0IG1pdCBhdXNnZWJlbgojZGVmaW5lIEdSRVBfSSAgICAgICAgICA0ICAgICAgICAgICAgLy8gR3Jvc3MtL0tsZWluc2NocmVpYnVuZyBpZ25vcmllcmVuCiNkZWZpbmUgR1JFUF9MICAgICAgICAgIDggICAgICAgICAgICAvLyBEYXRlaW5hbWVuIGltbWVyIG1pdCBhdXNnZWJlbgojZGVmaW5lIEdSRVBfTiAgICAgICAgICAxNiAgICAgICAgICAgLy8gWmVpbGVubnVtbWVybiBtaXQgYXVzZ2ViZW4KI2RlZmluZSBHUkVQX1YgICAgICAgICAgMzIgICAgICAgICAgIC8vIE51ciBaZWlsZW4gbWF0Y2hlbiwgZGllIE5JQ0hUIHBhc3NlbgojZGVmaW5lIEdSRVBfUiAgICAgICAgICA2NCAgICAgICAgICAgLy8gUmVrdXJzaXYgc3VjaGVuCiNkZWZpbmUgR1JFUF9NICAgICAgICAgIDEyOCAgICAgICAgICAvLyBEYXRlaW1hc2tlIGFuZ2VnZWJlbgojZGVmaW5lIEdSRVBfRiAgICAgICAgICAyNTYgICAgICAgICAgLy8gQXVzZ2FiZSBpbiBEYXRlaQoKI2RlZmluZSBBQ0NFU1NfT1BUUyAgICAgImFybGZnbSIKI2RlZmluZSBBQ0NFU1NfQSAgICAgICAgMSAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBoaW56dWZ1ZWdlbgojZGVmaW5lIEFDQ0VTU19SICAgICAgICAyICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIGVudGZlcm5lbgojZGVmaW5lIEFDQ0VTU19MICAgICAgICA0ICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nZW4gYW56ZWlnZW4KI2RlZmluZSBBQ0NFU1NfRiAgICAgICAgOCAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBmdWVyIERhdGVpZW4gYW56ZWlnZW4KI2RlZmluZSBBQ0NFU1NfRyAgICAgICAgMTYgICAgICAgICAgIC8vIERhcyBnYW56ZSBmdWVyIEdydXBwZW4KI2RlZmluZSBBQ0NFU1NfTSAgICAgICAgMzIgICAgICAgICAgIC8vIERhcyBnYW56ZSBmdWVyIEdydXBwZW5sZWl0ZXIKCi8vIEZ1bmt0aW9uaWVydCBudXIsIHdlbm4gU05PT1BfTCA9PSBTRl9MT0NLRUQgdW5kIFNOT09QX0YgPT0gU0ZfRk9SQ0UKLy8gKERlZmluaXRpb25lbiBhdXMgL3N5cy9zbm9vcGluZy5oKQojZGVmaW5lIFNOT09QX09QVFMgICAgICAibGYiCiNkZWZpbmUgU05PT1BfTCAgICAgICAgIDEgICAgICAgICAgICAvLyBOaWVkcmlnZXIgTWFnaWVyIGthbm4gc2ljaCBuaWNodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF6d2lzY2hlbmtsaW5rZW4KI2RlZmluZSBTTk9PUF9GICAgICAgICAgMiAgICAgICAgICAgIC8vIFNub29wZSBzbm9vcGVuZGVuIE1hZ2llciwgd2VubiBkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJha3RlciBzY2hvbiBnZXNub29wdCB3aXJkCgojZGVmaW5lIE5PX0NIRUNLICAgICAgICBNX0dPfE1fU0lMRU5UfE1fTk9fU0hPV3xNX05PX0FUVEFDS3xNX05PQ0hFQ0sKCiNkZWZpbmUgSU5WX1NBVkUgICAgICAgICIvcm9vbS92b2lkLmMiCgojZGVmaW5lIFVTQUdFKHN0cikgICAgICAoX25vdGlmeV9mYWlsKGJyZWFrX3N0cmluZyhzcHJpbnRmKCJTeW50YXg6ICVzXG4iLCBzdHIpLDc3KSksIDApCgojZGVmaW5lIEJBU0VOQU1FIDAKI2RlZmluZSBGSUxFU0laRSAxCiNkZWZpbmUgRklMRURBVEUgMgojZGVmaW5lIEZVTExOQU1FIDMKI2RlZmluZSBQQVRITkFNRSA0CiNkZWZpbmUgREVTVE5BTUUgNQojZGVmaW5lIFNVQkRJUlNJWkUgNgoKI2RlZmluZSBSRVRfT0sgMQojZGVmaW5lIFJFVF9GQUlMIDAKI2RlZmluZSBSRVRfSlVNUCAtMQojZGVmaW5lIFJFVF9ERUxFVEUgLTIKCiNkZWZpbmUgTU9ERV9MU0EgICAwCiNkZWZpbmUgTU9ERV9MU0IgICAxCiNkZWZpbmUgTU9ERV9DUCAgICAyCiNkZWZpbmUgTU9ERV9NViAgICAzCiNkZWZpbmUgTU9ERV9STSAgICA0CiNkZWZpbmUgTU9ERV9DRCAgICA1CiNkZWZpbmUgTU9ERV9DQVQgICA2CiNkZWZpbmUgTU9ERV9HUkVQICA3CiNkZWZpbmUgTU9ERV9FRCAgICA4CiNkZWZpbmUgTU9ERV9VUEQgICA5CiNkZWZpbmUgTU9ERV9NT1JFICAxMAojZGVmaW5lIE1PREVfUk1ESVIgMTEKI2RlZmluZSBNT0RFX0NMT05FIDEyCgojZGVmaW5lIENPTE9SUyAoWyAibm9uZSI6IEFOU0lfTk9STUFMLCBcCiAgICAgICAgICAgICAgICAgICJib2xkIjogQU5TSV9CT0xELCBcCiAgICAgICAgICAgICAgICAgICJibGluayI6IEFOU0lfQkxJTkssIFwKICAgICAgICAgICAgICAgICAgImludmVycyI6IEFOU0lfSU5WRVJTLCBcCiAgICAgICAgICAgICAgICAgICJibGFjayI6IEFOU0lfQkxBQ0ssIFwKICAgICAgICAgICAgICAgICAgInJlZCI6IEFOU0lfUkVELCBcCiAgICAgICAgICAgICAgICAgICJncmVlbiI6IEFOU0lfR1JFRU4sIFwKICAgICAgICAgICAgICAgICAgInllbGxvdyI6IEFOU0lfWUVMTE9XLCBcCiAgICAgICAgICAgICAgICAgICJibHVlIjogQU5TSV9CTFVFLCBcCiAgICAgICAgICAgICAgICAgICJwdXJwbGUiOiBBTlNJX1BVUlBMRSwgXAogICAgICAgICAgICAgICAgICAiY3lhbiI6IEFOU0lfQ1lBTiwgXAogICAgICAgICAgICAgICAgICAid2hpdGUiOiBBTlNJX1dISVRFLCBcCiAgICAgICAgICAgICAgICAgICJiYmxhY2siOiBBTlNJX0JHX0JMQUNLLCBcCiAgICAgICAgICAgICAgICAgICJicmVkIjogQU5TSV9CR19SRUQsIFwKICAgICAgICAgICAgICAgICAgImJncmVlbiI6IEFOU0lfQkdfR1JFRU4sIFwKICAgICAgICAgICAgICAgICAgImJ5ZWxsb3ciOiBBTlNJX0JHX1lFTExPVywgXAogICAgICAgICAgICAgICAgICAiYmJsdWUiOiBBTlNJX0JHX0JMVUUsIFwKICAgICAgICAgICAgICAgICAgImJwdXJwbGUiOiBBTlNJX0JHX1BVUlBMRSwgXAogICAgICAgICAgICAgICAgICAiYmN5YW4iOiBBTlNJX0JHX0NZQU4sIFwKICAgICAgICAgICAgICAgICAgImJ3aGl0ZSI6IEFOU0lfQkdfV0hJVEUsIFwKICAgICAgICAgICAgICAgIF0pCgojZGVmaW5lIFZBTElEX1JFQURfQ0wgIHN5bWJvbF9mdW5jdGlvbigidmFsaWRfcmVhZCIsX19NQVNURVJfT0JKRUNUX18pCiNkZWZpbmUgVkFMSURfV1JJVEVfQ0wgc3ltYm9sX2Z1bmN0aW9uKCJ2YWxpZF93cml0ZSIsX19NQVNURVJfT0JKRUNUX18pCiNkZWZpbmUgQ1JFQVRPUl9DTCAgc3ltYm9sX2Z1bmN0aW9uKCJjcmVhdG9yX2ZpbGUiLF9fTUFTVEVSX09CSkVDVF9fKQoKI2RlZmluZSBESVIgImRpcmVjdG9yeSIKI2RlZmluZSBPQkogImxvYWRlZCIKI2RlZmluZSBWQyAgInZpcnR1YWwiCgojaWZkZWYgREVCVUcKI3VuZGVmIERFQlVHCiNlbmRpZgojZGVmaW5lIERFQlVHKHgpIGlmIChmaW5kX3BsYXllcihTSEVMTERFQlVHR0VSKSkgXAogICAgICAgICAgICAgICAgICAgICB0ZWxsX29iamVjdChmaW5kX3BsYXllcihTSEVMTERFQlVHR0VSKSx4KyJcbiIpCgojZW5kaWYgLy8gX01BR0lFUl9IXwoKCiNpZmRlZiBORUVEX1BST1RPVFlQRVMKI2lmbmRlZiBfTUFHSUVSX0hfUFJPVE9TXwojZGVmaW5lIF9NQUdJRVJfSF9QUk9UT1NfCnN0YXRpYyBzdHJpbmcgKnBhcnNlYXJncyhzdHJpbmcgY21kbGluZSxpbnQgZmxhZ3Msc3RyaW5nIG9wdHMsaW50IGJ1aWxkX2ZuKTsKc3RhdGljIHZhcmFyZ3Mgdm9pZCBhc3luY2hyb24obWl4ZWQqIGFycmF5LCBjbG9zdXJlIGNtZCwgbWl4ZWQgZGF0YSwgbWl4ZWQgZmxhZ3MsIGludCBjKTsKc3RhdGljIHZhcmFyZ3MgbWl4ZWQgKmZpbGVfbGlzdChzdHJpbmcgKmZpbGVzLCBpbnQgbW9kZSwgaW50IHJlY3Vyc2l2ZSwgc3RyaW5nIGRlc3QsIHN0cmluZyBtYXNrKTsKc3RhdGljIG1peGVkIHRvX2ZpbGVuYW1lKHN0cmluZyBzdHIpOwpzdGF0aWMgaW50IF92ZXJmb2xnZShzdHJpbmcgc3RyKTsKc3RhdGljIHN0cmluZyBnbG9iMnJlZ2V4cChzdHJpbmcgc3RyKTsKCnZhcmFyZ3MgcHVibGljIHZvaWQgTW9yZShzdHJpbmcgdHh0LCBpbnQgZmlsZSxtaXhlZCBjdHJsLCBtaXhlZCAqY3RybGFyZ3MsIGludCBmbGFncyk7CiNlbmRpZiAvLyBfTUFHSUVSX0hfUFJPVE9TXwojZW5kaWYgLy8gTkVFRF9QUk9UT1RZUEVTCgoK