LyoKKiogbGludXgvYXRhcmlody5oIC0tIFRoaXMgaGVhZGVyIGRlZmluZXMgc29tZSBtYWNyb3MgYW5kIHBvaW50ZXJzIGZvcgoqKiAgICAgICAgICAgICAgICAgICAgdGhlIHZhcmlvdXMgQXRhcmkgY3VzdG9tIGhhcmR3YXJlIHJlZ2lzdGVycy4KKioKKiogQ29weXJpZ2h0IDE5OTQgYnkgQmqUcm4gQnJhdWVsCioqCioqIDUvMS85NCBSb21hbiBIb2RlazoKKiogICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVFQgc3BlY2lmaWMgY2hpcHMuCioqCioqIDE5OTYtMDktMTMgbGFycyBicmlua2hvZmYgPGY5M2xhYnJAZGQuY2hhbG1lcnMuc2U+OgoqKiAgIEZpbmFsbHkgYWRkZWQgZGVmaW5pdGlvbnMgZm9yIHRoZSBtYXRyaXgvY29kZWMgYW5kIHRoZSBEU1A1NjAwMSBob3N0CioqICAgaW50ZXJmYWNlLgoqKgoqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwoqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQoqKiBmb3IgbW9yZSBkZXRhaWxzLgoqKgoqLwoKI2lmbmRlZiBfTElOVVhfQVRBUklIV19IXwojZGVmaW5lIF9MSU5VWF9BVEFSSUhXX0hfCgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgojaW5jbHVkZSA8YXNtL3Jhd19pby5oPgoKZXh0ZXJuIHVfbG9uZyBhdGFyaV9tY2hfY29va2llOwpleHRlcm4gdV9sb25nIGF0YXJpX21jaF90eXBlOwpleHRlcm4gdV9sb25nIGF0YXJpX3N3aXRjaGVzOwpleHRlcm4gaW50IGF0YXJpX3J0Y195ZWFyX29mZnNldDsKZXh0ZXJuIGludCBhdGFyaV9kb250X3RvdWNoX2Zsb3BweV9zZWxlY3Q7CgovKiBjb252ZW5pZW5jZSBtYWNyb3MgZm9yIHRlc3RpbmcgbWFjaGluZSB0eXBlICovCiNkZWZpbmUgTUFDSF9JU19TVAkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9TVCkKI2RlZmluZSBNQUNIX0lTX1NURQkoKGF0YXJpX21jaF9jb29raWUgPj4gMTYpID09IEFUQVJJX01DSF9TVEUgJiYgXAoJCQkgKGF0YXJpX21jaF9jb29raWUgJiAweGZmZmYpID09IDApCiNkZWZpbmUgTUFDSF9JU19NU1RFCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1NURSAmJiBcCgkJCSAoYXRhcmlfbWNoX2Nvb2tpZSAmIDB4ZmZmZikgPT0gMHgxMCkKI2RlZmluZSBNQUNIX0lTX1RUCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX1RUKQojZGVmaW5lIE1BQ0hfSVNfRkFMQ09OCSgoYXRhcmlfbWNoX2Nvb2tpZSA+PiAxNikgPT0gQVRBUklfTUNIX0ZBTENPTikKI2RlZmluZSBNQUNIX0lTX01FRFVTQQkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9NRURVU0EpCiNkZWZpbmUgTUFDSF9JU19IQURFUwkoYXRhcmlfbWNoX3R5cGUgPT0gQVRBUklfTUFDSF9IQURFUykKI2RlZmluZSBNQUNIX0lTX0FCNDAJKGF0YXJpX21jaF90eXBlID09IEFUQVJJX01BQ0hfQUI0MCkKCi8qIHZhbHVlcyBmb3IgYXRhcmlfc3dpdGNoZXMgKi8KI2RlZmluZSBBVEFSSV9TV0lUQ0hfSUtCRAkweDAxCiNkZWZpbmUgQVRBUklfU1dJVENIX01JREkJMHgwMgojZGVmaW5lIEFUQVJJX1NXSVRDSF9TTkQ2CTB4MDQKI2RlZmluZSBBVEFSSV9TV0lUQ0hfU05ENwkweDA4CiNkZWZpbmUgQVRBUklfU1dJVENIX09WU0NfU0hJRlQJMTYKI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19JS0JECShBVEFSSV9TV0lUQ0hfSUtCRCA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19NSURJCShBVEFSSV9TV0lUQ0hfTUlESSA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TTkQ2CShBVEFSSV9TV0lUQ0hfU05ENiA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19TTkQ3CShBVEFSSV9TV0lUQ0hfU05ENyA8PCBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVCkKI2RlZmluZSBBVEFSSV9TV0lUQ0hfT1ZTQ19NQVNLCTB4ZmZmZjAwMDAKCi8qCiAqIERlZmluZSBzZXZlcmFsIEhhcmR3YXJlLUNoaXBzIGZvciBpbmRpY2F0aW9uIHNvIHRoYXQgZm9yIHRoZSBBVEFSSSB3ZSBkbwogKiBubyBsb25nZXIgZGVjaWRlIHdoZXRoZXIgaXQgaXMgYSBGYWxjb24gb3Igb3RoZXIgbWFjaGluZSAuIEl0J3MganVzdAogKiBpbXBvcnRhbnQgd2hhdCBoYXJkd2FyZSB0aGUgbWFjaGluZSB1c2VzCiAqLwoKLyogKytyb21hbiAwOC8wOC85NTogcmV3cml0dGVuIGZyb20gT1JpbmcgY29uc3RhbnRzIHRvIGEgQyBiaXRmaWVsZCAqLwoKI2RlZmluZSBBVEFSSUhXX0RFQ0xBUkUobmFtZSkJdW5zaWduZWQgbmFtZSA6IDEKI2RlZmluZSBBVEFSSUhXX1NFVChuYW1lKQkoYXRhcmlfaHdfcHJlc2VudC5uYW1lID0gMSkKI2RlZmluZSBBVEFSSUhXX1BSRVNFTlQobmFtZSkJKGF0YXJpX2h3X3ByZXNlbnQubmFtZSkKCnN0cnVjdCBhdGFyaV9od19wcmVzZW50IHsKICAgIC8qIHZpZGVvIGhhcmR3YXJlICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9TSElGVEVSKTsJLyogU1QtU2hpZnRlciAtIG5vIGJhc2UgbG93ICEgKi8KICAgIEFUQVJJSFdfREVDTEFSRShFWFREX1NISUZURVIpOwkvKiBTVGUtU2hpZnRlciAtIDI0IGJpdCBhZGRyZXNzICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoVFRfU0hJRlRFUik7CS8qIFRULVNoaWZ0ZXIgKi8KICAgIEFUQVJJSFdfREVDTEFSRShWSURFTF9TSElGVEVSKTsJLyogRmFsY29uLVNoaWZ0ZXIgKi8KICAgIC8qIHNvdW5kIGhhcmR3YXJlICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoWU1fMjE0OSk7CQkvKiBZYW1haGEgWU0gMjE0OSAqLwogICAgQVRBUklIV19ERUNMQVJFKFBDTV84QklUKTsJCS8qIFBDTS1Tb3VuZCBpbiBTVGUtQVRBUkkgKi8KICAgIEFUQVJJSFdfREVDTEFSRShDT0RFQyk7CQkvKiBDT0RFQyBTb3VuZCAoRmFsY29uKSAqLwogICAgLyogZGlzayBzdG9yYWdlIGludGVyZmFjZXMgKi8KICAgIEFUQVJJSFdfREVDTEFSRShUVF9TQ1NJKTsJCS8qIERpcmVjdGx5IG1hcHBlZCBOQ1I1MzgwICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoU1RfU0NTSSk7CQkvKiBOQ1I1MzgwIHZpYSBTVC1ETUEgKEZhbGNvbikgKi8KICAgIEFUQVJJSFdfREVDTEFSRShBQ1NJKTsJCS8qIFN0YW5kYXJkIEFDU0kgbGlrZSBpbiBTVHMgKi8KICAgIEFUQVJJSFdfREVDTEFSRShJREUpOwkJLyogSURFIEludGVyZmFjZSAqLwogICAgQVRBUklIV19ERUNMQVJFKEZEQ1NQRUVEKTsJCS8qIDgvMTYgTUh6IHN3aXRjaCBmb3IgRkRDICovCiAgICAvKiBvdGhlciBJL08gaGFyZHdhcmUgKi8KICAgIEFUQVJJSFdfREVDTEFSRShTVF9NRlApOwkJLyogVGhlIFNULU1GUCAodGhlcmUgc2hvdWxkIGJlIG5vIEF0YXJpCgkJCQkJICAgd2l0aG91dCBpdC4uLiBidXQgd2hvIGtub3dzPykgKi8KICAgIEFUQVJJSFdfREVDTEFSRShUVF9NRlApOwkJLyogMm5kIE1GUCAqLwogICAgQVRBUklIV19ERUNMQVJFKFNDQyk7CQkvKiBTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHIuICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoU1RfRVNDQyk7CQkvKiBTQ0MgWjgzMjMwIGluIGFuIFNUICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoQU5BTE9HX0pPWSk7CS8qIFBhZGRsZSBJbnRlcmZhY2UgZm9yIFNUZQoJCQkJCSAgIGFuZCBGYWxjb24gKi8KICAgIEFUQVJJSFdfREVDTEFSRShNSUNST1dJUkUpOwkJLyogTWljcm93aXJlIEludGVyZmFjZSAqLwogICAgLyogRE1BICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoU1RORF9ETUEpOwkJLyogMjQgQml0IGxpbWl0ZWQgU1QtRE1BICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoRVhURF9ETUEpOwkJLyogMzIgQml0IFNULURNQSAqLwogICAgQVRBUklIV19ERUNMQVJFKFNDU0lfRE1BKTsJCS8qIERNQSBmb3IgdGhlIE5DUjUzODAgKi8KICAgIEFUQVJJSFdfREVDTEFSRShTQ0NfRE1BKTsJCS8qIERNQSBmb3IgdGhlIFNDQyAqLwogICAgLyogcmVhbCB0aW1lIGNsb2NrcyAqLwogICAgQVRBUklIV19ERUNMQVJFKFRUX0NMSyk7CQkvKiBUVCBjb21wYXRpYmxlIGNsb2NrIGNoaXAgKi8KICAgIEFUQVJJSFdfREVDTEFSRShNU1RFX0NMSyk7CQkvKiBNZWdhIFNUKEUpIGNsb2NrIGNoaXAgKi8KICAgIC8qIHN1cHBvcnRpbmcgaGFyZHdhcmUgKi8KICAgIEFUQVJJSFdfREVDTEFSRShTQ1UpOwkJLyogU3lzdGVtIENvbnRyb2wgVW5pdCAqLwogICAgQVRBUklIV19ERUNMQVJFKEJMSVRURVIpOwkJLyogQmxpdHRlciAqLwogICAgQVRBUklIV19ERUNMQVJFKFZNRSk7CQkvKiBWTUUgQnVzICovCiAgICBBVEFSSUhXX0RFQ0xBUkUoRFNQNTZLKTsJCS8qIERTUDU2ayBwcm9jZXNzb3IgaW4gRmFsY29uICovCn07CgpleHRlcm4gc3RydWN0IGF0YXJpX2h3X3ByZXNlbnQgYXRhcmlfaHdfcHJlc2VudDsKCgovKiBSZWFkaW5nIHRoZSBNRlAgcG9ydCByZWdpc3RlciBnaXZlcyBhIG1hY2hpbmUgaW5kZXBlbmRlbnQgZGVsYXksIHNpbmNlIHRoZQogKiBNRlAgYWx3YXlzIGhhcyBhIDggTUh6IGNsb2NrLiBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIHRoZSB2YXJ5aW5nIGxlbmd0aAogKiBvZiBub3BzIG9uIHZhcmlvdXMgbWFjaGluZXMuIFNvbWVib2R5IGNsYWltZWQgdGhhdCB0aGUgdHN0YiB0YWtlcyA2MDAgbnMuCiAqLwojZGVmaW5lCU1GUERFTEFZKCkgXAoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCAidHN0YiAlMCIgOiA6ICJtIiAobWZwLnBhcl9kdF9yZWcpIDogImNjIiApOwoKLyogRG8gY2FjaGUgcHVzaC9pbnZhbGlkYXRlIGZvciBETUEgcmVhZC93cml0ZS4gVGhpcyBmdW5jdGlvbiBvYmV5cyB0aGUKICogc25vb3Bpbmcgb24gc29tZSBtYWNoaW5lcyAoTWVkdXNhKSBhbmQgcHJvY2Vzc29yczogVGhlIE1lZHVzYSBpdHNlbGYgY2FuCiAqIHNub29wLCBidXQgb25seSB0aGUgJzA0MCBjYW4gc291cmNlIGRhdGEgZnJvbSBpdHMgY2FjaGUgdG8gRE1BIHdyaXRlcyBpLmUuLAogKiByZWFkcyBmcm9tIG1lbW9yeSkuIEJvdGggJzA0MCBhbmQgJzA2MCBpbnZhbGlkYXRlIGNhY2hlIGVudHJpZXMgb24gc25vb3BlZAogKiBETUEgcmVhZHMgKGkuZS4sIHdyaXRlcyB0byBtZW1vcnkpLgogKi8KCgojZGVmaW5lIGF0YXJpX3JlYWRiICAgcmF3X2luYgojZGVmaW5lIGF0YXJpX3dyaXRlYiAgcmF3X291dGIKCiNkZWZpbmUgYXRhcmlfaW5iX3AgICByYXdfaW5iCiNkZWZpbmUgYXRhcmlfb3V0Yl9wICByYXdfb3V0YgoKCgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CgpzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX21haW50ZW5hbmNlKCB1bnNpZ25lZCBsb25nIHBhZGRyLAoJCQkJCSAgdW5zaWduZWQgbG9uZyBsZW4sCgkJCQkJICBpbnQgd3JpdGVmbGFnICkKCnsKCWlmICh3cml0ZWZsYWcpIHsKCQlpZiAoIU1BQ0hfSVNfTUVEVVNBIHx8IENQVV9JU18wNjApCgkJCWNhY2hlX3B1c2goIHBhZGRyLCBsZW4gKTsKCX0KCWVsc2UgewoJCWlmICghTUFDSF9JU19NRURVU0EpCgkJCWNhY2hlX2NsZWFyKCBwYWRkciwgbGVuICk7Cgl9Cn0KCgovKgoqKiBTaGlmdGVyCiAqLwojZGVmaW5lIFNUX0xPVyAgMAojZGVmaW5lIFNUX01JRCAgMQojZGVmaW5lIFNUX0hJR0ggMgojZGVmaW5lIFRUX0xPVyAgNwojZGVmaW5lIFRUX01JRCAgNAojZGVmaW5lIFRUX0hJR0ggNgoKI2RlZmluZSBTSEZfQkFTICgweGZmZmY4MjAwKQpzdHJ1Y3QgU0hJRlRFUgogewoJdV9jaGFyIHBhZDE7Cgl1X2NoYXIgYmFzX2hpOwoJdV9jaGFyIHBhZDI7Cgl1X2NoYXIgYmFzX21kOwoJdV9jaGFyIHBhZDM7Cgl1X2NoYXIgdm9sYXRpbGUgdmNvdW50aGk7Cgl1X2NoYXIgcGFkNDsKCXVfY2hhciB2b2xhdGlsZSB2Y291bnRtaWQ7Cgl1X2NoYXIgcGFkNTsKCXVfY2hhciB2b2xhdGlsZSB2Y291bnRsb3c7Cgl1X2NoYXIgdm9sYXRpbGUgc3luY21vZGU7Cgl1X2NoYXIgcGFkNjsKCXVfY2hhciBwYWQ3OwoJdV9jaGFyIGJhc19sbzsKIH07CiMgZGVmaW5lIHNoaWZ0ZXIgKCgqKHZvbGF0aWxlIHN0cnVjdCBTSElGVEVSICopU0hGX0JBUykpCgojZGVmaW5lIFNIRl9GQkFTICgweGZmZmY4MjBlKQpzdHJ1Y3QgU0hJRlRFUl9GMDMwCiB7CiAgdV9zaG9ydCBvZmZfbmV4dDsKICB1X3Nob3J0IHNjbl93aWR0aDsKIH07CiMgZGVmaW5lIHNoaWZ0ZXJfZjAzMCAoKCoodm9sYXRpbGUgc3RydWN0IFNISUZURVJfRjAzMCAqKVNIRl9GQkFTKSkKCgojZGVmaW5lCVNIRl9UQkFTICgweGZmZmY4MjAwKQpzdHJ1Y3QgU0hJRlRFUl9UVCB7Cgl1X2NoYXIJY2hhcl9kdW1teTA7Cgl1X2NoYXIJYmFzX2hpOwkJCS8qIHZpZGVvIG1lbSBiYXNlIGFkZHIsIGhpZ2ggYW5kIG1pZCBieXRlICovCgl1X2NoYXIJY2hhcl9kdW1teTE7Cgl1X2NoYXIJYmFzX21kOwoJdV9jaGFyCWNoYXJfZHVtbXkyOwoJdV9jaGFyCXZjb3VudF9oaTsJCS8qIHBvaW50ZXIgdG8gY3VycmVudGx5IGRpc3BsYXllZCBieXRlICovCgl1X2NoYXIJY2hhcl9kdW1teTM7Cgl1X2NoYXIJdmNvdW50X21kOwoJdV9jaGFyCWNoYXJfZHVtbXk0OwoJdV9jaGFyCXZjb3VudF9sbzsKCXVfc2hvcnQJc3Rfc3luYzsJCS8qIFNUIGNvbXBhdGlibGUgc3luYyBtb2RlIHJlZ2lzdGVyLCB1bnVzZWQgKi8KCXVfY2hhcgljaGFyX2R1bW15NTsKCXVfY2hhcgliYXNfbG87CQkJLyogdmlkZW8gbWVtIGFkZHIsIGxvdyBieXRlICovCgl1X2NoYXIJY2hhcl9kdW1teTZbMiszKjE2XTsKCS8qICRmZmZmODI0MDogKi8KCXVfc2hvcnQJY29sb3JfcmVnWzE2XTsJLyogMTYgY29sb3IgcmVnaXN0ZXJzICovCgl1X2NoYXIJc3Rfc2hpZnRtb2RlOwkvKiBTVCBjb21wYXRpYmxlIHNoaWZ0IG1vZGUgcmVnaXN0ZXIsIHVudXNlZCAqLwoJdV9jaGFyICBjaGFyX2R1bW15NzsKCXVfc2hvcnQgdHRfc2hpZnRtb2RlOwkvKiBUVCBzaGlmdCBtb2RlIHJlZ2lzdGVyICovCgoKfTsKI2RlZmluZQlzaGlmdGVyX3R0CSgoKih2b2xhdGlsZSBzdHJ1Y3QgU0hJRlRFUl9UVCAqKVNIRl9UQkFTKSkKCi8qIHZhbHVlcyBmb3Igc2hpZnRlcl90dC0+dHRfc2hpZnRtb2RlICovCiNkZWZpbmUJVFRfU0hJRlRFUl9TVExPVwkJMHgwMDAwCiNkZWZpbmUJVFRfU0hJRlRFUl9TVE1JRAkJMHgwMTAwCiNkZWZpbmUJVFRfU0hJRlRFUl9TVEhJR0gJCTB4MDIwMAojZGVmaW5lCVRUX1NISUZURVJfVFRMT1cJCTB4MDcwMAojZGVmaW5lCVRUX1NISUZURVJfVFRNSUQJCTB4MDQwMAojZGVmaW5lCVRUX1NISUZURVJfVFRISUdICQkweDA2MDAKI2RlZmluZQlUVF9TSElGVEVSX01PREVNQVNLCTB4MDcwMAojZGVmaW5lIFRUX1NISUZURVJfTlVNTU9ERQkweDAwMDgKI2RlZmluZQlUVF9TSElGVEVSX1BBTEVUVEVfTUFTSwkweDAwMGYKI2RlZmluZQlUVF9TSElGVEVSX0dSQVlNT0RFCQkweDEwMDAKCi8qIDI1NiBUVCBwYWxldHRlIHJlZ2lzdGVycyAqLwojZGVmaW5lCVRUX1BBTEVUVEVfQkFTRQkoMHhmZmZmODQwMCkKI2RlZmluZQl0dF9wYWxldHRlCSgodm9sYXRpbGUgdV9zaG9ydCAqKVRUX1BBTEVUVEVfQkFTRSkKCiNkZWZpbmUJVFRfUEFMRVRURV9SRURfTUFTSwkJMHgwZjAwCiNkZWZpbmUJVFRfUEFMRVRURV9HUkVFTl9NQVNLCTB4MDBmMAojZGVmaW5lCVRUX1BBTEVUVEVfQkxVRV9NQVNLCTB4MDAwZgoKLyoKKiogRmFsY29uMDMwIFZJREVMIFZpZGVvIENvbnRyb2xsZXIKKiogZm9yIGRlc2NyaXB0aW9uIHNlZSBGaWxlICdsaW51eFx0b29sc1xhdGFyaVxoYXJkd2FyZS50eHQKICovCiNkZWZpbmUgZjAzMF9jb2wgKCh1X2xvbmcgKikJCTB4ZmZmZjk4MDApCiNkZWZpbmUgZjAzMF94cmVnICgodV9zaG9ydCopCQkweGZmZmY4MjgyKQojZGVmaW5lIGYwMzBfeXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODJhMikKI2RlZmluZSBmMDMwX2NyZWcgKCh1X3Nob3J0KikJCTB4ZmZmZjgyYzApCiNkZWZpbmUgZjAzMF9zcmVnICgodV9zaG9ydCopCQkweGZmZmY4MjYwKQojZGVmaW5lIGYwMzBfbXJlZyAoKHVfc2hvcnQqKQkJMHhmZmZmODIwYSkKI2RlZmluZSBmMDMwX2xpbmV3aWR0aCAoKHVfc2hvcnQqKSAgICAgIDB4ZmZmZjgyMGUpCiNkZWZpbmUgZjAzMF9oc2Nyb2xsICgodV9jaGFyKikJCTB4ZmZmZjgyNjUpCgojZGVmaW5lIFZJREVMX0JBUyAoMHhmZmZmODI2MCkKc3RydWN0IFZJREVMIHsKCXVfc2hvcnQgc3Rfc2hpZnQ7Cgl1X3Nob3J0IHBhZDE7Cgl1X2NoYXIgIHhvZmZzZXRfczsKCXVfY2hhciAgeG9mZnNldDsKCXVfc2hvcnQgZl9zaGlmdDsKCXVfY2hhciAgcGFkMlsweDFhXTsKCXVfc2hvcnQgaGh0OwoJdV9zaG9ydCBoYmI7Cgl1X3Nob3J0IGhiZTsKCXVfc2hvcnQgaGRiOwoJdV9zaG9ydCBoZGU7Cgl1X3Nob3J0IGhzczsKCXVfY2hhciAgcGFkM1sweDE0XTsKCXVfc2hvcnQgdmZ0OwoJdV9zaG9ydCB2YmI7Cgl1X3Nob3J0IHZiZTsKCXVfc2hvcnQgdmRiOwoJdV9zaG9ydCB2ZGU7Cgl1X3Nob3J0IHZzczsKCXVfY2hhciAgcGFkNFsweDEyXTsKCXVfc2hvcnQgY29udHJvbDsKCXVfc2hvcnQgbW9kZTsKfTsKI2RlZmluZQl2aWRlbAkoKCoodm9sYXRpbGUgc3RydWN0IFZJREVMICopVklERUxfQkFTKSkKCi8qCioqIERNQS9XRDE3NzIgRGlzayBDb250cm9sbGVyCiAqLwoKI2RlZmluZSBGV0RfQkFTICgweGZmZmY4NjA0KQpzdHJ1Y3QgRE1BX1dECiB7CiAgdV9zaG9ydCBmZGNfYWNjZXNfc2VjY291bnQ7CiAgdV9zaG9ydCBkbWFfbW9kZV9zdGF0dXM7CiAgdV9jaGFyIGRtYV92aGk7CS8qIFNvbWUgZXh0ZW5kZWQgU1QtRE1BcyBjYW4gaGFuZGxlIDMyIGJpdCBhZGRyZXNzZXMgKi8KICB1X2NoYXIgZG1hX2hpOwogIHVfY2hhciBjaGFyX2R1bW15MjsKICB1X2NoYXIgZG1hX21kOwogIHVfY2hhciBjaGFyX2R1bW15MzsKICB1X2NoYXIgZG1hX2xvOwogIHVfc2hvcnQgZmRjX3NwZWVkOwogfTsKIyBkZWZpbmUgZG1hX3dkICgoKih2b2xhdGlsZSBzdHJ1Y3QgRE1BX1dEICopRldEX0JBUykpCi8qIGFsaWFzICovCiNkZWZpbmUJc3RfZG1hIGRtYV93ZAovKiBUaGUgdHdvIGhpZ2hlc3QgYnl0ZXMgb2YgYW4gZXh0ZW5kZWQgRE1BIGFzIGEgc2hvcnQ7IHRoaXMgaXMgYSBtdXN0CiAqIGZvciB0aGUgTWVkdXNhLgogKi8KI2RlZmluZSBzdF9kbWFfZXh0X2RtYWhpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKTB4ZmZmZjg2MDgpKQoKLyoKKiogWU0yMTQ5IFNvdW5kIENoaXAKKiogYWNjZXNzIGluIGJ5dGVzCiAqLwoKI2RlZmluZSBZTV9CQVMgKDB4ZmZmZjg4MDApCnN0cnVjdCBTT1VORF9ZTQogewogIHVfY2hhciByZF9kYXRhX3JlZ19zZWw7CiAgdV9jaGFyIGNoYXJfZHVtbXkxOwogIHVfY2hhciB3ZF9kYXRhOwogfTsKI2RlZmluZSBzb3VuZF95bSAoKCoodm9sYXRpbGUgc3RydWN0IFNPVU5EX1lNICopWU1fQkFTKSkKCi8qIFRUIFNDU0kgRE1BICovCgojZGVmaW5lCVRUX1NDU0lfRE1BX0JBUwkoMHhmZmZmODcwMCkKc3RydWN0IFRUX0RNQSB7Cgl1X2NoYXIJY2hhcl9kdW1teTA7Cgl1X2NoYXIJZG1hX2FkZHJfaGk7Cgl1X2NoYXIJY2hhcl9kdW1teTE7Cgl1X2NoYXIJZG1hX2FkZHJfaG1kOwoJdV9jaGFyCWNoYXJfZHVtbXkyOwoJdV9jaGFyCWRtYV9hZGRyX2xtZDsKCXVfY2hhcgljaGFyX2R1bW15MzsKCXVfY2hhcglkbWFfYWRkcl9sbzsKCXVfY2hhcgljaGFyX2R1bW15NDsKCXVfY2hhcglkbWFfY250X2hpOwoJdV9jaGFyCWNoYXJfZHVtbXk1OwoJdV9jaGFyCWRtYV9jbnRfaG1kOwoJdV9jaGFyCWNoYXJfZHVtbXk2OwoJdV9jaGFyCWRtYV9jbnRfbG1kOwoJdV9jaGFyCWNoYXJfZHVtbXk3OwoJdV9jaGFyCWRtYV9jbnRfbG87Cgl1X2xvbmcJZG1hX3Jlc3RkYXRhOwoJdV9zaG9ydAlkbWFfY3RybDsKfTsKI2RlZmluZQl0dF9zY3NpX2RtYQkoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQSAqKVRUX1NDU0lfRE1BX0JBUykpCgovKiBUVCBTQ1NJIENvbnRyb2xsZXIgNTM4MCAqLwoKI2RlZmluZQlUVF81MzgwX0JBUwkoMHhmZmZmODc4MSkKc3RydWN0IFRUXzUzODAgewoJdV9jaGFyCXNjc2lfZGF0YTsKCXVfY2hhcgljaGFyX2R1bW15MTsKCXVfY2hhcglzY3NpX2ljcjsKCXVfY2hhcgljaGFyX2R1bW15MjsKCXVfY2hhcglzY3NpX21vZGU7Cgl1X2NoYXIJY2hhcl9kdW1teTM7Cgl1X2NoYXIJc2NzaV90Y3I7Cgl1X2NoYXIJY2hhcl9kdW1teTQ7Cgl1X2NoYXIJc2NzaV9pZHN0YXQ7Cgl1X2NoYXIJY2hhcl9kdW1teTU7Cgl1X2NoYXIJc2NzaV9kbWFzdGF0OwoJdV9jaGFyCWNoYXJfZHVtbXk2OwoJdV9jaGFyCXNjc2lfdGFyZ3JjdjsKCXVfY2hhcgljaGFyX2R1bW15NzsKCXVfY2hhcglzY3NpX2luaXJjdjsKfTsKI2RlZmluZQl0dF9zY3NpCQkJKCgqKHZvbGF0aWxlIHN0cnVjdCBUVF81MzgwICopVFRfNTM4MF9CQVMpKQojZGVmaW5lCXR0X3Njc2lfcmVncAkoKHZvbGF0aWxlIGNoYXIgKilUVF81MzgwX0JBUykKCgovKgoqKiBGYWxjb24gRE1BIFNvdW5kIFN1YnN5c3RlbQogKi8KCiNkZWZpbmUgTUFUUklYX0JBU0UgKDB4ZmZmZjg5MzApCnN0cnVjdCBNQVRSSVgKewogIHVfc2hvcnQgc291cmNlOwogIHVfc2hvcnQgZGVzdGluYXRpb247CiAgdV9jaGFyIGV4dGVybmFsX2ZyZXF1ZW5jeV9kaXZpZGVyOwogIHVfY2hhciBpbnRlcm5hbF9mcmVxdWVuY3lfZGl2aWRlcjsKfTsKI2RlZmluZSBmYWxjb25fbWF0cml4ICgqKHZvbGF0aWxlIHN0cnVjdCBNQVRSSVggKilNQVRSSVhfQkFTRSkKCiNkZWZpbmUgQ09ERUNfQkFTRSAoMHhmZmZmODkzNikKc3RydWN0IENPREVDCnsKICB1X2NoYXIgdHJhY2tzOwogIHVfY2hhciBpbnB1dF9zb3VyY2U7CiNkZWZpbmUgQ09ERUNfU09VUkNFX0FEQyAgICAgICAgMQojZGVmaW5lIENPREVDX1NPVVJDRV9NQVRSSVggICAgIDIKICB1X2NoYXIgYWRjX3NvdXJjZTsKI2RlZmluZSBBRENfU09VUkNFX1JJR0hUX1BTRyAgICAxCiNkZWZpbmUgQURDX1NPVVJDRV9MRUZUX1BTRyAgICAgMgogIHVfY2hhciBnYWluOwojZGVmaW5lIENPREVDX0dBSU5fUklHSFQgICAgICAgIDB4MGYKI2RlZmluZSBDT0RFQ19HQUlOX0xFRlQgICAgICAgICAweGYwCiAgdV9jaGFyIGF0dGVudWF0aW9uOwojZGVmaW5lIENPREVDX0FUVEVOVUFUSU9OX1JJR0hUIDB4MGYKI2RlZmluZSBDT0RFQ19BVFRFTlVBVElPTl9MRUZUICAweGYwCiAgdV9jaGFyIHVudXNlZDE7CiAgdV9jaGFyIHN0YXR1czsKI2RlZmluZSBDT0RFQ19PVkVSRkxPV19SSUdIVCAgICAxCiNkZWZpbmUgQ09ERUNfT1ZFUkZMT1dfTEVGVCAgICAgMgogIHVfY2hhciB1bnVzZWQyLCB1bnVzZWQzLCB1bnVzZWQ0LCB1bnVzZWQ1OwogIHVfY2hhciBncGlvX2RpcmVjdGlvbnM7CiNkZWZpbmUgR1BJT19JTiAgICAgICAgICAgICAgICAgMAojZGVmaW5lIEdQSU9fT1VUICAgICAgICAgICAgICAgIDEKICB1X2NoYXIgdW51c2VkNjsKICB1X2NoYXIgZ3Bpb19kYXRhOwp9OwojZGVmaW5lIGZhbGNvbl9jb2RlYyAoKih2b2xhdGlsZSBzdHJ1Y3QgQ09ERUMgKilDT0RFQ19CQVNFKQoKLyoKKiogRmFsY29uIEJsaXR0ZXIKKi8KCiNkZWZpbmUgQkxUX0JBUyAoMHhmZmZmOGEwMCkKCnN0cnVjdCBCTElUVEVSCiB7CiAgdV9zaG9ydCBoYWxmdG9uZVsxNl07CiAgdV9zaG9ydCBzcmNfeF9pbmM7CiAgdV9zaG9ydCBzcmNfeV9pbmM7CiAgdV9sb25nIHNyY19hZGRyZXNzOwogIHVfc2hvcnQgZW5kbWFzazE7CiAgdV9zaG9ydCBlbmRtYXNrMjsKICB1X3Nob3J0IGVuZG1hc2szOwogIHVfc2hvcnQgZHN0X3hfaW5jOwogIHVfc2hvcnQgZHN0X3lfaW5jOwogIHVfbG9uZyBkc3RfYWRkcmVzczsKICB1X3Nob3J0IHdkX3Blcl9saW5lOwogIHVfc2hvcnQgbG5fcGVyX2JiOwogIHVfc2hvcnQgaGxmX29wX3JlZzsKICB1X3Nob3J0IGxvZ19vcF9yZWc7CiAgdV9zaG9ydCBsaW5fbm1fcmVnOwogIHVfc2hvcnQgc2tld19yZWc7CiB9OwojIGRlZmluZSBibGl0dGVyICgoKih2b2xhdGlsZSBzdHJ1Y3QgQkxJVFRFUiAqKUJMVF9CQVMpKQoKCi8qCioqIFNDQyBaODUzMAogKi8KCiNkZWZpbmUgU0NDX0JBUyAoMHhmZmZmOGM4MSkKc3RydWN0IFNDQwogewogIHVfY2hhciBjaGFfYV9jdHJsOwogIHVfY2hhciBjaGFyX2R1bW15MTsKICB1X2NoYXIgY2hhX2FfZGF0YTsKICB1X2NoYXIgY2hhcl9kdW1teTI7CiAgdV9jaGFyIGNoYV9iX2N0cmw7CiAgdV9jaGFyIGNoYXJfZHVtbXkzOwogIHVfY2hhciBjaGFfYl9kYXRhOwogfTsKIyBkZWZpbmUgc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKCi8qIFRoZSBFU0NDIChaODUyMzApIGluIGFuIEF0YXJpIFNULiBUaGUgY2hhbm5lbHMgYXJlIHJldmVyc2VkISAqLwojIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKIyBkZWZpbmUgc3RfZXNjY19kc3IgKCgqKHZvbGF0aWxlIGNoYXIgKikweGZmZmZmYTM5KSkKCi8qIFRUIFNDQyBETUEgQ29udHJvbGxlciAoc2FtZSBjaGlwIGFzIFNDU0kgRE1BKSAqLwoKI2RlZmluZQlUVF9TQ0NfRE1BX0JBUwkoMHhmZmZmOGMwMCkKI2RlZmluZQl0dF9zY2NfZG1hCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfRE1BICopVFRfU0NDX0RNQV9CQVMpKQoKLyoKKiogVklERUwgUGFsZXR0ZSBSZWdpc3RlcgogKi8KCiNkZWZpbmUgRlBMX0JBUyAoMHhmZmZmOTgwMCkKc3RydWN0IFZJREVMX1BBTEVUVEUKIHsKICB1X2xvbmcgcmVnWzI1Nl07CiB9OwojIGRlZmluZSB2aWRlbF9wYWxldHRlICgoKih2b2xhdGlsZSBzdHJ1Y3QgVklERUxfUEFMRVRURSopRlBMX0JBUykpCgoKLyoKKiogRmFsY29uIERTUCBIb3N0IEludGVyZmFjZQogKi8KCiNkZWZpbmUgRFNQNTZLX0hPU1RfSU5URVJGQUNFX0JBU0UgKDB4ZmZmZmEyMDApCnN0cnVjdCBEU1A1NktfSE9TVF9JTlRFUkZBQ0UgewogIHVfY2hhciBpY3I7CiNkZWZpbmUgRFNQNTZLX0lDUl9SUkVRCTB4MDEKI2RlZmluZSBEU1A1NktfSUNSX1RSRVEJMHgwMgojZGVmaW5lIERTUDU2S19JQ1JfSEYwCTB4MDgKI2RlZmluZSBEU1A1NktfSUNSX0hGMQkweDEwCiNkZWZpbmUgRFNQNTZLX0lDUl9ITTAJMHgyMAojZGVmaW5lIERTUDU2S19JQ1JfSE0xCTB4NDAKI2RlZmluZSBEU1A1NktfSUNSX0lOSVQJMHg4MAoKICB1X2NoYXIgY3ZyOwojZGVmaW5lIERTUDU2S19DVlJfSFZfTUFTSyAweDFmCiNkZWZpbmUgRFNQNTZLX0NWUl9IQwkweDgwCgogIHVfY2hhciBpc3I7CiNkZWZpbmUgRFNQNTZLX0lTUl9SWERGCTB4MDEKI2RlZmluZSBEU1A1NktfSVNSX1RYREUJMHgwMgojZGVmaW5lIERTUDU2S19JU1JfVFJEWQkweDA0CiNkZWZpbmUgRFNQNTZLX0lTUl9IRjIJMHgwOAojZGVmaW5lIERTUDU2S19JU1JfSEYzCTB4MTAKI2RlZmluZSBEU1A1NktfSVNSX0RNQQkweDQwCiNkZWZpbmUgRFNQNTZLX0lTUl9IUkVRCTB4ODAKCiAgdV9jaGFyIGl2cjsKCiAgdW5pb24gewogICAgdV9jaGFyIGJbNF07CiAgICB1X3Nob3J0IHdbMl07CiAgICB1X2xvbmcgbDsKICB9IGRhdGE7Cn07CiNkZWZpbmUgZHNwNTZrX2hvc3RfaW50ZXJmYWNlICgoKih2b2xhdGlsZSBzdHJ1Y3QgRFNQNTZLX0hPU1RfSU5URVJGQUNFICopRFNQNTZLX0hPU1RfSU5URVJGQUNFX0JBU0UpKQoKLyoKKiogTUZQIDY4OTAxCiAqLwoKI2RlZmluZSBNRlBfQkFTICgweGZmZmZmYTAxKQpzdHJ1Y3QgTUZQCiB7CiAgdV9jaGFyIHBhcl9kdF9yZWc7CiAgdV9jaGFyIGNoYXJfZHVtbXkxOwogIHVfY2hhciBhY3RpdmVfZWRnZTsKICB1X2NoYXIgY2hhcl9kdW1teTI7CiAgdV9jaGFyIGRhdGFfZGlyOwogIHVfY2hhciBjaGFyX2R1bW15MzsKICB1X2NoYXIgaW50X2VuX2E7CiAgdV9jaGFyIGNoYXJfZHVtbXk0OwogIHVfY2hhciBpbnRfZW5fYjsKICB1X2NoYXIgY2hhcl9kdW1teTU7CiAgdV9jaGFyIGludF9wbl9hOwogIHVfY2hhciBjaGFyX2R1bW15NjsKICB1X2NoYXIgaW50X3BuX2I7CiAgdV9jaGFyIGNoYXJfZHVtbXk3OwogIHVfY2hhciBpbnRfc3ZfYTsKICB1X2NoYXIgY2hhcl9kdW1teTg7CiAgdV9jaGFyIGludF9zdl9iOwogIHVfY2hhciBjaGFyX2R1bW15OTsKICB1X2NoYXIgaW50X21rX2E7CiAgdV9jaGFyIGNoYXJfZHVtbXkxMDsKICB1X2NoYXIgaW50X21rX2I7CiAgdV9jaGFyIGNoYXJfZHVtbXkxMTsKICB1X2NoYXIgdmVjX2FkcjsKICB1X2NoYXIgY2hhcl9kdW1teTEyOwogIHVfY2hhciB0aW1fY3RfYTsKICB1X2NoYXIgY2hhcl9kdW1teTEzOwogIHVfY2hhciB0aW1fY3RfYjsKICB1X2NoYXIgY2hhcl9kdW1teTE0OwogIHVfY2hhciB0aW1fY3RfY2Q7CiAgdV9jaGFyIGNoYXJfZHVtbXkxNTsKICB1X2NoYXIgdGltX2R0X2E7CiAgdV9jaGFyIGNoYXJfZHVtbXkxNjsKICB1X2NoYXIgdGltX2R0X2I7CiAgdV9jaGFyIGNoYXJfZHVtbXkxNzsKICB1X2NoYXIgdGltX2R0X2M7CiAgdV9jaGFyIGNoYXJfZHVtbXkxODsKICB1X2NoYXIgdGltX2R0X2Q7CiAgdV9jaGFyIGNoYXJfZHVtbXkxOTsKICB1X2NoYXIgc3luY19jaGFyOwogIHVfY2hhciBjaGFyX2R1bW15MjA7CiAgdV9jaGFyIHVzYXJ0X2N0cjsKICB1X2NoYXIgY2hhcl9kdW1teTIxOwogIHVfY2hhciByY3Zfc3RhdDsKICB1X2NoYXIgY2hhcl9kdW1teTIyOwogIHVfY2hhciB0cm5fc3RhdDsKICB1X2NoYXIgY2hhcl9kdW1teTIzOwogIHVfY2hhciB1c2FydF9kdGE7CiB9OwojIGRlZmluZSBtZnAgKCgqKHZvbGF0aWxlIHN0cnVjdCBNRlAqKU1GUF9CQVMpKQoKLyogVFQncyBzZWNvbmQgTUZQICovCgojZGVmaW5lCVRUX01GUF9CQVMJKDB4ZmZmZmZhODEpCiMgZGVmaW5lIHR0X21mcCAoKCoodm9sYXRpbGUgc3RydWN0IE1GUCopVFRfTUZQX0JBUykpCgoKLyogVFQgU3lzdGVtIENvbnRyb2wgVW5pdCAqLwoKI2RlZmluZQlUVF9TQ1VfQkFTCSgweGZmZmY4ZTAxKQpzdHJ1Y3QgVFRfU0NVIHsKCXVfY2hhcglzeXNfbWFzazsKCXVfY2hhcgljaGFyX2R1bW15MTsKCXVfY2hhcglzeXNfc3RhdDsKCXVfY2hhcgljaGFyX2R1bW15MjsKCXVfY2hhcglzb2Z0aW50OwoJdV9jaGFyCWNoYXJfZHVtbXkzOwoJdV9jaGFyCXZtZWludDsKCXVfY2hhcgljaGFyX2R1bW15NDsKCXVfY2hhcglncF9yZWcxOwoJdV9jaGFyCWNoYXJfZHVtbXk1OwoJdV9jaGFyCWdwX3JlZzI7Cgl1X2NoYXIJY2hhcl9kdW1teTY7Cgl1X2NoYXIJdm1lX21hc2s7Cgl1X2NoYXIJY2hhcl9kdW1teTc7Cgl1X2NoYXIJdm1lX3N0YXQ7Cn07CiNkZWZpbmUJdHRfc2N1CSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfU0NVICopVFRfU0NVX0JBUykpCgovKiBUVCByZWFsIHRpbWUgY2xvY2sgKi8KCiNkZWZpbmUJVFRfUlRDX0JBUwkoMHhmZmZmODk2MSkKc3RydWN0IFRUX1JUQyB7Cgl1X2NoYXIJcmVnc2VsOwoJdV9jaGFyCWR1bW15OwoJdV9jaGFyCWRhdGE7Cn07CiNkZWZpbmUJdHRfcnRjCSgoKih2b2xhdGlsZSBzdHJ1Y3QgVFRfUlRDICopVFRfUlRDX0JBUykpCgoKLyoKKiogQUNJQSA2ODUwCiAqLwovKiBjb25zdGFudHMgZm9yIHRoZSBBQ0lBIHJlZ2lzdGVycyAqLwoKLyogYmF1ZHJhdGUgc2VsZWN0aW9uIGFuZCByZXNldCAoQmF1ZHJhdGUgPSBjbG9jay9mYWN0b3IpICovCiNkZWZpbmUgQUNJQV9ESVYxICAwCiNkZWZpbmUgQUNJQV9ESVYxNiAxCiNkZWZpbmUgQUNJQV9ESVY2NCAyCiNkZWZpbmUgQUNJQV9SRVNFVCAzCgovKiBjaGFyYWN0ZXIgZm9ybWF0ICovCiNkZWZpbmUgQUNJQV9EN0UyUyAoMDw8MikJLyogNyBkYXRhLCBldmVuIHBhcml0eSwgMiBzdG9wICovCiNkZWZpbmUgQUNJQV9EN08yUyAoMTw8MikJLyogNyBkYXRhLCBvZGQgcGFyaXR5LCAyIHN0b3AgKi8KI2RlZmluZSBBQ0lBX0Q3RTFTICgyPDwyKQkvKiA3IGRhdGEsIGV2ZW4gcGFyaXR5LCAxIHN0b3AgKi8KI2RlZmluZSBBQ0lBX0Q3TzFTICgzPDwyKQkvKiA3IGRhdGEsIG9kZCBwYXJpdHksIDEgc3RvcCAqLwojZGVmaW5lIEFDSUFfRDhOMlMgKDQ8PDIpCS8qIDggZGF0YSwgbm8gcGFyaXR5LCAyIHN0b3AgKi8KI2RlZmluZSBBQ0lBX0Q4TjFTICg1PDwyKQkvKiA4IGRhdGEsIG5vIHBhcml0eSwgMSBzdG9wICovCiNkZWZpbmUgQUNJQV9EOEUxUyAoNjw8MikJLyogOCBkYXRhLCBldmVuIHBhcml0eSwgMSBzdG9wICovCiNkZWZpbmUgQUNJQV9EOE8xUyAoNzw8MikJLyogOCBkYXRhLCBvZGQgcGFyaXR5LCAxIHN0b3AgKi8KCi8qIHRyYW5zbWl0IGNvbnRyb2wgKi8KI2RlZmluZSBBQ0lBX1JMVElEICgwPDw1KQkvKiBSVFMgbG93LCBUeElOVCBkaXNhYmxlZCAqLwojZGVmaW5lIEFDSUFfUkxUSUUgKDE8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGVuYWJsZWQgKi8KI2RlZmluZSBBQ0lBX1JIVElEICgyPDw1KQkvKiBSVFMgaGlnaCwgVHhJTlQgZGlzYWJsZWQgKi8KI2RlZmluZSBBQ0lBX1JMVElEU0IgKDM8PDUpCS8qIFJUUyBsb3csIFR4SU5UIGRpc2FibGVkLCBzZW5kIGJyZWFrICovCgovKiByZWNlaXZlIGNvbnRyb2wgKi8KI2RlZmluZSBBQ0lBX1JJRCAoMDw8NykJCS8qIFJ4SU5UIGRpc2FibGVkICovCiNkZWZpbmUgQUNJQV9SSUUgKDE8PDcpCQkvKiBSeElOVCBlbmFibGVkICovCgovKiBzdGF0dXMgZmllbGRzIG9mIHRoZSBBQ0lBICovCiNkZWZpbmUgQUNJQV9SRFJGIDEJCS8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciBGdWxsICovCiNkZWZpbmUgQUNJQV9URFJFICgxPDwxKQkvKiBUcmFuc21pdCBEYXRhIFJlZ2lzdGVyIEVtcHR5ICovCiNkZWZpbmUgQUNJQV9EQ0QgICgxPDwyKQkvKiBEYXRhIENhcnJpZXIgRGV0ZWN0ICovCiNkZWZpbmUgQUNJQV9DVFMgICgxPDwzKQkvKiBDbGVhciBUbyBTZW5kICovCiNkZWZpbmUgQUNJQV9GRSAgICgxPDw0KQkvKiBGcmFtaW5nIEVycm9yICovCiNkZWZpbmUgQUNJQV9PVlJOICgxPDw1KQkvKiBSZWNlaXZlciBPdmVycnVuICovCiNkZWZpbmUgQUNJQV9QRSAgICgxPDw2KQkvKiBQYXJpdHkgRXJyb3IgKi8KI2RlZmluZSBBQ0lBX0lSUSAgKDE8PDcpCS8qIEludGVycnVwdCBSZXF1ZXN0ICovCgojZGVmaW5lIEFDSUFfQkFTICgweGZmZmZmYzAwKQpzdHJ1Y3QgQUNJQQogewogIHVfY2hhciBrZXlfY3RybDsKICB1X2NoYXIgY2hhcl9kdW1teTE7CiAgdV9jaGFyIGtleV9kYXRhOwogIHVfY2hhciBjaGFyX2R1bW15MjsKICB1X2NoYXIgbWlkX2N0cmw7CiAgdV9jaGFyIGNoYXJfZHVtbXkzOwogIHVfY2hhciBtaWRfZGF0YTsKIH07CiMgZGVmaW5lIGFjaWEgKCgqKHZvbGF0aWxlIHN0cnVjdCBBQ0lBKilBQ0lBX0JBUykpCgojZGVmaW5lCVRUX0RNQVNORF9CQVMgKDB4ZmZmZjg5MDApCnN0cnVjdCBUVF9ETUFTTkQgewoJdV9jaGFyCWludF9jdHJsOwkvKiBGYWxjb246IEludGVycnVwdCBjb250cm9sICovCgl1X2NoYXIJY3RybDsKCXVfY2hhcglwYWQyOwoJdV9jaGFyCWJhc19oaTsKCXVfY2hhcglwYWQzOwoJdV9jaGFyCWJhc19taWQ7Cgl1X2NoYXIJcGFkNDsKCXVfY2hhcgliYXNfbG93OwoJdV9jaGFyCXBhZDU7Cgl1X2NoYXIJYWRkcl9oaTsKCXVfY2hhcglwYWQ2OwoJdV9jaGFyCWFkZHJfbWlkOwoJdV9jaGFyCXBhZDc7Cgl1X2NoYXIJYWRkcl9sb3c7Cgl1X2NoYXIJcGFkODsKCXVfY2hhcgllbmRfaGk7Cgl1X2NoYXIJcGFkOTsKCXVfY2hhcgllbmRfbWlkOwoJdV9jaGFyCXBhZDEwOwoJdV9jaGFyCWVuZF9sb3c7Cgl1X2NoYXIJcGFkMTFbMTJdOwoJdV9jaGFyCXRyYWNrX3NlbGVjdDsJLyogRmFsY29uICovCgl1X2NoYXIJbW9kZTsKCXVfY2hhcglwYWQxMlsxNF07CgkvKiBGYWxjb24gb25seTogKi8KCXVfc2hvcnQJY2Jhcl9zcmM7Cgl1X3Nob3J0IGNiYXJfZHN0OwoJdV9jaGFyCWV4dF9kaXY7Cgl1X2NoYXIJaW50X2RpdjsKCXVfY2hhcglyZWNfdHJhY2tfc2VsZWN0OwoJdV9jaGFyCWRhY19zcmM7Cgl1X2NoYXIJYWRjX3NyYzsKCXVfY2hhcglpbnB1dF9nYWluOwoJdV9zaG9ydAlvdXRwdXRfYXR0ZW47Cn07CiMgZGVmaW5lIHR0X2RtYXNuZCAoKCoodm9sYXRpbGUgc3RydWN0IFRUX0RNQVNORCAqKVRUX0RNQVNORF9CQVMpKQoKI2RlZmluZSBETUFTTkRfTUZQX0lOVF9SRVBMQVkgICAgIDB4MDEKI2RlZmluZSBETUFTTkRfTUZQX0lOVF9SRUNPUkQgICAgIDB4MDIKI2RlZmluZSBETUFTTkRfVElNRVJBX0lOVF9SRVBMQVkgIDB4MDQKI2RlZmluZSBETUFTTkRfVElNRVJBX0lOVF9SRUNPUkQgIDB4MDgKCiNkZWZpbmUJRE1BU05EX0NUUkxfT0ZGCQkgIDB4MDAKI2RlZmluZQlETUFTTkRfQ1RSTF9PTgkJICAweDAxCiNkZWZpbmUJRE1BU05EX0NUUkxfUkVQRUFUCSAgMHgwMgojZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9PTiAgICAgMHgxMAojZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9PRkYgICAgMHgwMAojZGVmaW5lIERNQVNORF9DVFJMX1JFQ09SRF9SRVBFQVQgMHgyMAojZGVmaW5lIERNQVNORF9DVFJMX1NFTEVDVF9SRVBMQVkgMHgwMAojZGVmaW5lIERNQVNORF9DVFJMX1NFTEVDVF9SRUNPUkQgMHg4MAojZGVmaW5lCURNQVNORF9NT0RFX01PTk8JICAweDgwCiNkZWZpbmUJRE1BU05EX01PREVfU1RFUkVPCSAgMHgwMAojZGVmaW5lIERNQVNORF9NT0RFXzhCSVQJICAweDAwCiNkZWZpbmUgRE1BU05EX01PREVfMTZCSVQJICAweDQwCS8qIEZhbGNvbiBvbmx5ICovCiNkZWZpbmUJRE1BU05EX01PREVfNktIWgkgIDB4MDAJLyogRmFsY29uOiBtdXRlICovCiNkZWZpbmUJRE1BU05EX01PREVfMTJLSFoJICAweDAxCiNkZWZpbmUJRE1BU05EX01PREVfMjVLSFoJICAweDAyCiNkZWZpbmUJRE1BU05EX01PREVfNTBLSFoJICAweDAzCgoKI2RlZmluZSBETUFTTkRTZXRCYXNlKGJ1ZnN0YXJ0KQkJCQkJCVwKICAgIGRvIHsJCQkJCQkJCVwKCXR0X2RtYXNuZC5iYXNfaGkgID0gKHVuc2lnbmVkIGNoYXIpKCgoYnVmc3RhcnQpICYgMHhmZjAwMDApID4+IDE2KTsgXAoJdHRfZG1hc25kLmJhc19taWQgPSAodW5zaWduZWQgY2hhcikoKChidWZzdGFydCkgJiAweDAwZmYwMCkgPj4gOCk7IFwKCXR0X2RtYXNuZC5iYXNfbG93ID0gKHVuc2lnbmVkIGNoYXIpICgoYnVmc3RhcnQpICYgMHgwMDAwZmYpOyBcCiAgICB9IHdoaWxlKCAwICkKCiNkZWZpbmUgRE1BU05ER2V0QWRyKCkgKCh0dF9kbWFzbmQuYWRkcl9oaSA8PCAxNikgKwlcCgkJCSh0dF9kbWFzbmQuYWRkcl9taWQgPDwgOCkgKwlcCgkJCSh0dF9kbWFzbmQuYWRkcl9sb3cpKQoKI2RlZmluZSBETUFTTkRTZXRFbmQoYnVmZW5kKQkJCQlcCiAgICBkbyB7CQkJCQkJXAoJdHRfZG1hc25kLmVuZF9oaSAgPSAodW5zaWduZWQgY2hhcikoKChidWZlbmQpICYgMHhmZjAwMDApID4+IDE2KTsgXAoJdHRfZG1hc25kLmVuZF9taWQgPSAodW5zaWduZWQgY2hhcikoKChidWZlbmQpICYgMHgwMGZmMDApID4+IDgpOyBcCgl0dF9kbWFzbmQuZW5kX2xvdyA9ICh1bnNpZ25lZCBjaGFyKSAoKGJ1ZmVuZCkgJiAweDAwMDBmZik7IFwKICAgIH0gd2hpbGUoIDAgKQoKCiNkZWZpbmUJVFRfTUlDUk9XSVJFX0JBUwkoMHhmZmZmODkyMikKc3RydWN0IFRUX01JQ1JPV0lSRSB7Cgl1X3Nob3J0CWRhdGE7Cgl1X3Nob3J0CW1hc2s7Cn07CiMgZGVmaW5lIHR0X21pY3Jvd2lyZSAoKCoodm9sYXRpbGUgc3RydWN0IFRUX01JQ1JPV0lSRSAqKVRUX01JQ1JPV0lSRV9CQVMpKQoKI2RlZmluZQlNV19MTTE5OTJfQUREUgkJMHgwNDAwCgojZGVmaW5lCU1XX0xNMTk5Ml9WT0xVTUUoZEIpCVwKICAgICgweDBjMCB8ICgoZEIpIDwgLTgwID8gMCA6IChkQikgPiAwID8gNDAgOiAoKChkQikgKyA4MCkgLyAyKSkpCiNkZWZpbmUJTVdfTE0xOTkyX0JBTExFRlQoZEIpCVwKICAgICgweDE0MCB8ICgoZEIpIDwgLTQwID8gMCA6IChkQikgPiAwID8gMjAgOiAoKChkQikgKyA0MCkgLyAyKSkpCiNkZWZpbmUJTVdfTE0xOTkyX0JBTFJJR0hUKGRCKQlcCiAgICAoMHgxMDAgfCAoKGRCKSA8IC00MCA/IDAgOiAoZEIpID4gMCA/IDIwIDogKCgoZEIpICsgNDApIC8gMikpKQojZGVmaW5lCU1XX0xNMTk5Ml9UUkVCTEUoZEIpCVwKICAgICgweDA4MCB8ICgoZEIpIDwgLTEyID8gMCA6IChkQikgPiAxMiA/IDEyIDogKCgoZEIpIC8gMikgKyA2KSkpCiNkZWZpbmUJTVdfTE0xOTkyX0JBU1MoZEIpCVwKICAgICgweDA0MCB8ICgoZEIpIDwgLTEyID8gMCA6IChkQikgPiAxMiA/IDEyIDogKCgoZEIpIC8gMikgKyA2KSkpCgojZGVmaW5lCU1XX0xNMTk5Ml9QU0dfTE9XCTB4MDAwCiNkZWZpbmUJTVdfTE0xOTkyX1BTR19ISUdICTB4MDAxCiNkZWZpbmUJTVdfTE0xOTkyX1BTR19PRkYJMHgwMDIKCiNkZWZpbmUgTVNURV9SVENfQkFTCSgweGZmZmZmYzIxKQoKc3RydWN0IE1TVEVfUlRDIHsKCXVfY2hhciBzZWNfb25lczsKCXVfY2hhciBkdW1teTE7Cgl1X2NoYXIgc2VjX3RlbnM7Cgl1X2NoYXIgZHVtbXkyOwoJdV9jaGFyIG1pbl9vbmVzOwoJdV9jaGFyIGR1bW15MzsKCXVfY2hhciBtaW5fdGVuczsKCXVfY2hhciBkdW1teTQ7Cgl1X2NoYXIgaHJfb25lczsKCXVfY2hhciBkdW1teTU7Cgl1X2NoYXIgaHJfdGVuczsKCXVfY2hhciBkdW1teTY7Cgl1X2NoYXIgd2Vla2RheTsKCXVfY2hhciBkdW1teTc7Cgl1X2NoYXIgZGF5X29uZXM7Cgl1X2NoYXIgZHVtbXk4OwoJdV9jaGFyIGRheV90ZW5zOwoJdV9jaGFyIGR1bW15OTsKCXVfY2hhciBtb25fb25lczsKCXVfY2hhciBkdW1teTEwOwoJdV9jaGFyIG1vbl90ZW5zOwoJdV9jaGFyIGR1bW15MTE7Cgl1X2NoYXIgeWVhcl9vbmVzOwoJdV9jaGFyIGR1bW15MTI7Cgl1X2NoYXIgeWVhcl90ZW5zOwoJdV9jaGFyIGR1bW15MTM7Cgl1X2NoYXIgbW9kZTsKCXVfY2hhciBkdW1teTE0OwoJdV9jaGFyIHRlc3Q7Cgl1X2NoYXIgZHVtbXkxNTsKCXVfY2hhciByZXNldDsKfTsKCiNkZWZpbmUgbXN0ZV9ydGMgKCgqKHZvbGF0aWxlIHN0cnVjdCBNU1RFX1JUQyAqKU1TVEVfUlRDX0JBUykpCgojZW5kaWYgLyogbGludXgvYXRhcmlody5oICovCgo=