LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NUDI0MjAvQVJNMTEzNiBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDA0CVRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCUFsZXggWvxwa2UgPGF6dUBzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoKX2hhbmc6Cgkud29yZAlkb19oYW5nCgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4CS8qIG5vdyAxNio0PTY0ICovCiNlbHNlCglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQpfcGFkOgkJCS53b3JkIDB4MTIzNDU2NzggLyogbm93IDE2KjQ9NjQgKi8KI2VuZGlmCS8qIENPTkZJR19QUkVMT0FERVIgKi8KLmdsb2JhbCBfZW5kX3ZlY3QKX2VuZF92ZWN0OgoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCiAqIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgogKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQogKiBzZXR1cCBzdGFjawogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCi5nbG9ibCBfVEVYVF9CQVNFCl9URVhUX0JBU0U6Cgkud29yZAlDT05GSUdfU1lTX1RFWFRfQkFTRQoKLyoKICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCiAqIFN1YnRyYWN0aW5nIF9zdGFydCBmcm9tIHRoZW0gbGV0cyB0aGUgbGlua2VyIHB1dCB0aGVpcgogKiByZWxhdGl2ZSBwb3NpdGlvbiBpbiB0aGUgZXhlY3V0YWJsZSBpbnN0ZWFkIG9mIGxlYXZpbmcKICogdGhlbSBudWxsLgogKi8KLmdsb2JsIF9ic3Nfc3RhcnRfb2ZzCl9ic3Nfc3RhcnRfb2ZzOgoJLndvcmQgX19ic3Nfc3RhcnQgLSBfc3RhcnQKCi5nbG9ibCBfYnNzX2VuZF9vZnMKX2Jzc19lbmRfb2ZzOgoJLndvcmQgX2VuZCAtIF9zdGFydAoKLmdsb2JsIF9kYXRhcmVsX3N0YXJ0X29mcwpfZGF0YXJlbF9zdGFydF9vZnM6Cgkud29yZCBfX2RhdGFyZWxfc3RhcnQgLSBfc3RhcnQKCi5nbG9ibCBfZGF0YXJlbHJvbG9jYWxfc3RhcnRfb2ZzCl9kYXRhcmVscm9sb2NhbF9zdGFydF9vZnM6Cgkud29yZCBfX2RhdGFyZWxyb2xvY2FsX3N0YXJ0IC0gX3N0YXJ0CgouZ2xvYmwgX2RhdGFyZWxsb2NhbF9zdGFydF9vZnMKX2RhdGFyZWxsb2NhbF9zdGFydF9vZnM6Cgkud29yZCBfX2RhdGFyZWxsb2NhbF9zdGFydCAtIF9zdGFydAoKLmdsb2JsIF9kYXRhcmVscm9fc3RhcnRfb2ZzCl9kYXRhcmVscm9fc3RhcnRfb2ZzOgoJLndvcmQgX19kYXRhcmVscm9fc3RhcnQgLSBfc3RhcnQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgSVJRX1NUQUNLX1NUQVJUCklSUV9TVEFDS19TVEFSVDoKCS53b3JkCTB4MGJhZGMwZGUKCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKRklRX1NUQUNLX1NUQVJUOgoJLndvcmQgMHgwYmFkYzBkZQojZW5kaWYKCiNpZiAhZGVmaW5lZChDT05GSUdfU1lTX0FSTV9XSVRIT1VUX1JFTE9DKQovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSArIDggYnl0ZXMgKi8KLmdsb2JsIElSUV9TVEFDS19TVEFSVF9JTgpJUlFfU1RBQ0tfU1RBUlRfSU46Cgkud29yZAkweDBiYWRjMGRlCiNlbmRpZgoKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweGQzCgltc3IJY3BzcixyMAoKI2lmZGVmIENPTkZJR19PTUFQMjQyMEg0CiAgICAgICAvKiBDb3B5IHZlY3RvcnMgdG8gbWFzayBST00gaW5kaXJlY3QgYWRkciAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCgkJYWRkICAgICByMCwgcjAsICM0CQkJCS8qIHNraXAgcmVzZXQgdmVjdG9yCQkJKi8KCW1vdglyMiwgIzY0CQkJLyogcjIgPC0gc2l6ZSB0byBjb3B5ICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCW1vdglyMSwgI1NSQU1fT0ZGU0VUMAkgIC8qIGJ1aWxkIHZlY3QgYWRkciAqLwoJbW92CXIzLCAjU1JBTV9PRkZTRVQxCglhZGQJcjEsIHIxLCByMwoJbW92CXIzLCAjU1JBTV9PRkZTRVQyCglhZGQJcjEsIHIxLCByMwpuZXh0OgoJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXIxISwge3IzLXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZXNzIFtyMl0gICAgKi8KCWJuZQluZXh0CQkJLyogbG9vcCB1bnRpbCBlcXVhbCAqLwoJYmwJY3B5X2Nsa19jb2RlCQkvKiBwdXQgZHBsbCBhZGp1c3QgY29kZSBiZWhpbmQgdmVjdG9ycyAqLwojZW5kaWYKCS8qIHRoZSBtYXNrIFJPTSBjb2RlIHNob3VsZCBoYXZlIFBMTCBhbmQgb3RoZXJzIHN0YWJsZSAqLwojaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKCWJsICBjcHVfaW5pdF9jcml0CiNlbmRpZgoKLyogU2V0IHN0YWNrcG9pbnRlciBpbiBpbnRlcm5hbCBSQU0gdG8gY2FsbCBib2FyZF9pbml0X2YgKi8KY2FsbF9ib2FyZF9pbml0X2Y6CglsZHIJc3AsID0oQ09ORklHX1NZU19JTklUX1NQX0FERFIpCglsZHIJcjAsPTB4MDAwMDAwMDAKCiNpZmRlZiBDT05GSUdfTkFORF9TUEwKCWJsCW5hbmRfYm9vdAojZWxzZQojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCglibAlzdGFydF9vbmVib290CiNlbHNlCglibAlib2FyZF9pbml0X2YKI2VuZGlmIC8qIENPTkZJR19PTkVOQU5EX0lQTCAqLwojZW5kaWYgLyogQ09ORklHX05BTkRfU1BMICovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKgogKiB2b2lkIHJlbG9jYXRlX2NvZGUgKGFkZHJfc3AsIGdkLCBhZGRyX21vbmkpCiAqCiAqIFRoaXMgImZ1bmN0aW9uIiBkb2VzIG5vdCByZXR1cm4sIGluc3RlYWQgaXQgY29udGludWVzIGluIFJBTQogKiBhZnRlciByZWxvY2F0aW5nIHRoZSBtb25pdG9yIGNvZGUuCiAqCiAqLwoJLmdsb2JsCXJlbG9jYXRlX2NvZGUKcmVsb2NhdGVfY29kZToKCW1vdglyNCwgcjAJLyogc2F2ZSBhZGRyX3NwICovCgltb3YJcjUsIHIxCS8qIHNhdmUgYWRkciBvZiBnZCAqLwoJbW92CXI2LCByMgkvKiBzYXZlIGFkZHIgb2YgZGVzdGluYXRpb24gKi8KCW1vdglyNywgcjIJLyogc2F2ZSBhZGRyIG9mIGRlc3RpbmF0aW9uICovCgoJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLwpzdGFja19zZXR1cDoKCW1vdglzcCwgcjQKCglhZHIJcjAsIF9zdGFydAoJbGRyCXIyLCBfVEVYVF9CQVNFCglsZHIJcjMsIF9ic3Nfc3RhcnRfb2ZzCglhZGQJcjIsIHIwLCByMwkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzCSAgICAqLwoJY21wCXIwLCByNgoJYmVxCWNsZWFyX2JzcwoKI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVApjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyOS1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjYhLCB7cjktcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYmxvCWNvcHlfbG9vcAoKI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCgkvKgoJICogZml4IC5yZWwuZHluIHJlbG9jYXRpb25zCgkgKi8KCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogcjAgPC0gVGV4dCBiYXNlICovCglzdWIJcjksIHI3LCByMAkJLyogcjkgPC0gcmVsb2NhdGlvbiBvZmZzZXQgKi8KCWxkcglyMTAsIF9keW5zeW1fc3RhcnRfb2ZzCS8qIHIxMCA8LSBzeW0gdGFibGUgb2ZzICovCglhZGQJcjEwLCByMTAsIHIwCQkvKiByMTAgPC0gc3ltIHRhYmxlIGluIEZMQVNIICovCglsZHIJcjIsIF9yZWxfZHluX3N0YXJ0X29mcwkvKiByMiA8LSByZWwgZHluIHN0YXJ0IG9mcyAqLwoJYWRkCXIyLCByMiwgcjAJCS8qIHIyIDwtIHJlbCBkeW4gc3RhcnQgaW4gRkxBU0ggKi8KCWxkcglyMywgX3JlbF9keW5fZW5kX29mcwkvKiByMyA8LSByZWwgZHluIGVuZCBvZnMgKi8KCWFkZAlyMywgcjMsIHIwCQkvKiByMyA8LSByZWwgZHluIGVuZCBpbiBGTEFTSCAqLwpmaXhsb29wOgoJbGRyCXIwLCBbcjJdCS8qIHIwIDwtIGxvY2F0aW9uIHRvIGZpeCB1cCwgSU4gRkxBU0ghICovCglhZGQJcjAsIHI5CQkvKiByMCA8LSBsb2NhdGlvbiB0byBmaXggdXAgaW4gUkFNICovCglsZHIJcjEsIFtyMiwgIzRdCglhbmQJcjgsIHIxLCAjMHhmZgoJY21wCXI4LCAjMjMJCS8qIHJlbGF0aXZlIGZpeHVwPyAqLwoJYmVxCWZpeHJlbAoJY21wCXI4LCAjMgkJLyogYWJzb2x1dGUgZml4dXA/ICovCgliZXEJZml4YWJzCgkvKiBpZ25vcmUgdW5rbm93biB0eXBlIG9mIGZpeHVwICovCgliCWZpeG5leHQKZml4YWJzOgoJLyogYWJzb2x1dGUgZml4OiBzZXQgbG9jYXRpb24gdG8gKG9mZnNldCkgc3ltYm9sIHZhbHVlICovCgltb3YJcjEsIHIxLCBMU1IgIzQJCS8qIHIxIDwtIHN5bWJvbCBpbmRleCBpbiAuZHluc3ltICovCglhZGQJcjEsIHIxMCwgcjEJCS8qIHIxIDwtIGFkZHJlc3Mgb2Ygc3ltYm9sIGluIHRhYmxlICovCglsZHIJcjEsIFtyMSwgIzRdCQkvKiByMSA8LSBzeW1ib2wgdmFsdWUgKi8KCWFkZAlyMSwgcjkJCQkvKiByMSA8LSByZWxvY2F0ZWQgc3ltIGFkZHIgKi8KCWIJZml4bmV4dApmaXhyZWw6CgkvKiByZWxhdGl2ZSBmaXg6IGluY3JlYXNlIGxvY2F0aW9uIGJ5IG9mZnNldCAqLwoJbGRyCXIxLCBbcjBdCglhZGQJcjEsIHIxLCByOQpmaXhuZXh0OgoJc3RyCXIxLCBbcjBdCglhZGQJcjIsIHIyLCAjOAkvKiBlYWNoIHJlbC5keW4gZW50cnkgaXMgOCBieXRlcyAqLwoJY21wCXIyLCByMwoJYmxlCWZpeGxvb3AKI2VuZGlmCiNlbmRpZgkvKiAjaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UICovCgpjbGVhcl9ic3M6CiNpZm5kZWYgQ09ORklHX1BSRUxPQURFUgoJbGRyCXIwLCBfYnNzX3N0YXJ0X29mcwoJbGRyCXIxLCBfYnNzX2VuZF9vZnMKCWxkcglyMywgX1RFWFRfQkFTRQkJLyogVGV4dCBiYXNlICovCgltb3YJcjQsIHI3CQkJLyogcmVsb2MgYWRkciAqLwoJYWRkCXIwLCByMCwgcjQKCWFkZAlyMSwgcjEsIHI0Cgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4JCSAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJuZQljbGJzc19sCiNlbmRpZgkvKiAjaWZuZGVmIENPTkZJR19QUkVMT0FERVIgKi8KCi8qCiAqIFdlIGFyZSBkb25lLiBEbyBub3QgcmV0dXJuLCBpbnN0ZWFkIGJyYW5jaCB0byBzZWNvbmQgcGFydCBvZiBib2FyZAogKiBpbml0aWFsaXphdGlvbiwgbm93IHJ1bm5pbmcgZnJvbSBSQU0uCiAqLwojaWZkZWYgQ09ORklHX05BTkRfU1BMCglsZHIgICAgIHIwLCBfbmFuZF9ib290X29mcwoJYWRyCXIxLCBfc3RhcnQKCWFkZAlwYywgcjAsIHIxCl9uYW5kX2Jvb3Rfb2ZzCgk6IC53b3JkIG5hbmRfYm9vdCAtIF9zdGFydAojZWxzZQpqdW1wXzJfcmFtOgoJbGRyCXIwLCBfYm9hcmRfaW5pdF9yX29mcwoJYWRyCXIxLCBfc3RhcnQKCWFkZAlyMCwgcjAsIHIxCglhZGQJbHIsIHIwLCByOQoJLyogc2V0dXAgcGFyYW1ldGVycyBmb3IgYm9hcmRfaW5pdF9yICovCgltb3YJcjAsIHI1CQkvKiBnZF90ICovCgltb3YJcjEsIHI3CQkvKiBkZXN0X2FkZHIgKi8KCS8qIGp1bXAgdG8gaXQgLi4uICovCgltb3YJcGMsIGxyCgpfYm9hcmRfaW5pdF9yX29mczoKCS53b3JkIGJvYXJkX2luaXRfciAtIF9zdGFydAojZW5kaWYKCl9yZWxfZHluX3N0YXJ0X29mczoKCS53b3JkIF9fcmVsX2R5bl9zdGFydCAtIF9zdGFydApfcmVsX2R5bl9lbmRfb2ZzOgoJLndvcmQgX19yZWxfZHluX2VuZCAtIF9zdGFydApfZHluc3ltX3N0YXJ0X29mczoKCS53b3JkIF9fZHluc3ltX3N0YXJ0IC0gX3N0YXJ0CgojZWxzZSAvKiAjaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykgKi8KLyoKICogdGhlIGFjdHVhbCByZXNldCBjb2RlCiAqLwoKcmVzZXQ6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgojaWZkZWYgQ09ORklHX09NQVAyNDIwSDQKICAgICAgIC8qIENvcHkgdmVjdG9ycyB0byBtYXNrIFJPTSBpbmRpcmVjdCBhZGRyICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCQlhZGQgICAgIHIwLCByMCwgIzQJCQkJLyogc2tpcCByZXNldCB2ZWN0b3IJCQkqLwoJbW92CXIyLCAjNjQJCQkvKiByMiA8LSBzaXplIHRvIGNvcHkgICovCglhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzCSAgICAqLwoJbW92CXIxLCAjU1JBTV9PRkZTRVQwCSAgLyogYnVpbGQgdmVjdCBhZGRyICovCgltb3YJcjMsICNTUkFNX09GRlNFVDEKCWFkZAlyMSwgcjEsIHIzCgltb3YJcjMsICNTUkFNX09GRlNFVDIKCWFkZAlyMSwgcjEsIHIzCm5leHQ6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYm5lCW5leHQJCQkvKiBsb29wIHVudGlsIGVxdWFsICovCglibAljcHlfY2xrX2NvZGUJCS8qIHB1dCBkcGxsIGFkanVzdCBjb2RlIGJlaGluZCB2ZWN0b3JzICovCiNlbmRpZgoJLyogdGhlIG1hc2sgUk9NIGNvZGUgc2hvdWxkIGhhdmUgUExMIGFuZCBvdGhlcnMgc3RhYmxlICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwgIGNwdV9pbml0X2NyaXQKI2VuZGlmCgojaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCnJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCgljbXAJcjAsIHIxCQkJLyogZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnCSAgICAqLwojaWZuZGVmIENPTkZJR19QUkVMT0FERVIKCWJlcQlzdGFja19zZXR1cAojZW5kaWYJLyogQ09ORklHX1BSRUxPQURFUiAqLwoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCWxkcglyMywgX2Jzc19zdGFydAoJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdAkgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MJICAgICovCgpjb3B5X2xvb3A6CglsZG1pYQlyMCEsIHtyMy1yMTB9CQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLwoJc3RtaWEJcjEhLCB7cjMtcjEwfQkJLyogY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0gICAgKi8KCWNtcAlyMCwgcjIJCQkvKiB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlc3MgW3IyXSAgICAqLwoJYmxvCWNvcHlfbG9vcAojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJc3ViCXNwLCByMCwgIzEyOAkJLyogbGVhdmUgMzIgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgKi8KI2Vsc2UKCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX01BTExPQ19MRU4gLyogbWFsbG9jIGFyZWEJCQkgICAgKi8KCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvCQkJICAgICovCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1RBQ0tTSVpFX0lSUStDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKI2VuZGlmCglzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCgliaWMJc3AsIHNwLCAjNwkJLyogOC1ieXRlIGFsaWdubWVudCBmb3IgQUJJIGNvbXBsaWFuY2UgKi8KCmNsZWFyX2JzczoKCWFkcglyMiwgX3N0YXJ0CglsZHIJcjAsIF9ic3Nfc3RhcnRfb2ZzCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQgICAgICAgICovCglhZGQJcjAsIHIwLCByMgoJbGRyCXIxLCBfYnNzX2VuZF9vZnMJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWFkZAlyMSwgcjEsIHIyCgltb3YJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhcgkJCSAgICAqLwoKI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCmNsYnNzX2w6c3RyCXIyLCBbcjBdCQkvKiBjbGVhciBsb29wLi4uCQkgICAgKi8KCWFkZAlyMCwgcjAsICM0CgljbXAJcjAsIHIxCglibmUJY2xic3NfbAojZW5kaWYKCglsZHIJcjAsIF9zdGFydF9hcm1ib290X29mcwoJYWRyCXIxLCBfc3RhcnQKCWFkZAlyMCwgcjAsIHIxCglsZHIJcGMsIHIwCgpfc3RhcnRfYXJtYm9vdF9vZnM6CiNpZmRlZiBDT05GSUdfTkFORF9TUEwKCS53b3JkIG5hbmRfYm9vdCAtIF9zdGFydAojZWxzZQojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCgkud29yZCBzdGFydF9vbmVib290IC0gX3N0YXJ0CiNlbHNlCgkud29yZCBzdGFydF9hcm1ib290IC0gX3N0YXJ0CiNlbmRpZiAvKiBDT05GSUdfT05FTkFORF9JUEwgKi8KI2VuZGlmIC8qIENPTkZJR19OQU5EX1NQTCAqLwoKI2VuZGlmIC8qICNpZiAhZGVmaW5lZChDT05GSUdfU1lTX0FSTV9XSVRIT1VUX1JFTE9DKSAqLwoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCiAqCiAqIHNldHVwIGltcG9ydGFudCByZWdpc3RlcnMKICogc2V0dXAgbWVtb3J5IHRpbWluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCmNwdV9pbml0X2NyaXQ6CgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIEludmFsaWRhdGUgSStEK0JUQiBjYWNoZXMgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogSW52YWxpZGF0ZSBVbmlmaWVkIFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoKCS8qCgkgKiBKdW1wIHRvIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLi4uIFRoZSBNYXNrIFJPTSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZAoJICogYmFzaWMgbWVtb3J5LiAgR28gaGVyZSB0byBidW1wIHVwIGNsb2NrIHJhdGUgYW5kIGhhbmRsZSB3YWtlIHVwIGNvbmRpdGlvbnMuCgkgKi8KCW1vdglpcCwgbHIJCS8qIHBlcnNldmVyZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLwoJYmwJbG93bGV2ZWxfaW5pdAkvKiBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeSAqLwoJbW92CWxyLCBpcAkJLyogcmVzdG9yZSBsaW5rICovCgltb3YJcGMsIGxyCQkvKiBiYWNrIHRvIG15IGNhbGxlciAqLwojZW5kaWYgLyogQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAqLwoKI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCBjYXJ2ZSBvdXQgYSBmcmFtZSBvbiBjdXJyZW50IHVzZXIgc3RhY2sKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBTYXZlIHVzZXIgcmVnaXN0ZXJzIChub3cgaW4gc3ZjIG1vZGUpIHIwLXIxMgoKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfQVJNX1dJVEhPVVRfUkVMT0MpCglsZHIJcjIsIElSUV9TVEFDS19TVEFSVF9JTgkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKI2Vsc2UKCWFkcglyMiwgX3N0YXJ0CglzdWIJcjIsIHIyLCAjKENPTkZJR19TWVNfTUFMTE9DX0xFTikKCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpCUAgc2V0IGJhc2UgMiB3b3JkcyBpbnRvIGFib3J0IHN0YWNrCiNlbmRpZgoJbGRtaWEJcjIsIHtyMiAtIHIzfQkJCUAgZ2V0IHZhbHVlcyBmb3IgImFib3J0ZWQiIHBjIGFuZCBjcHNyIChpbnRvIHBhcm0gcmVncykKCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjawoKCWFkZAlyNSwgc3AsICNTX1NQCgltb3YJcjEsIGxyCglzdG1pYQlyNSwge3IwIC0gcjN9CQkJQCBzYXZlIHNwX1NWQywgbHJfU1ZDLCBwYywgY3BzcgoJbW92CXIwLCBzcAkJCQlAIHNhdmUgY3VycmVudCBzdGFjayBpbnRvIHIwIChwYXJhbSByZWdpc3RlcikKCS5lbmRtCgoJLm1hY3JvCWlycV9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCglhZGQJcjgsIHNwLCAjU19QQwkJCUAgISEhISBSOCBORUVEUyB0byBiZSBzYXZlZCAhISEhIGEgcmVzZXJ2ZWQgc3RhY2sgc3BvdCB3b3VsZCBiZSBnb29kLgoJc3RtZGIJcjgsIHtzcCwgbHJ9XgkJCUAgQ2FsbGluZyBTUCwgTFIKCXN0cglsciwgW3I4LCAjMF0JCQlAIFNhdmUgY2FsbGluZyBQQwoJbXJzCXI2LCBzcHNyCglzdHIJcjYsIFtyOCwgIzRdCQkJQCBTYXZlIENQU1IKCXN0cglyMCwgW3I4LCAjOF0JCQlAIFNhdmUgT0xEX1IwCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCWxkbWlhCXNwLCB7cjAgLSBscn1eCQkJQCBDYWxsaW5nIHIwIC0gbHIKCW1vdglyMCwgcjAKCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwoJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFjawojaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKCWxkcglyMTMsIElSUV9TVEFDS19TVEFSVF9JTgkJQCBzZXR1cCBvdXIgbW9kZSBzdGFjayAoZW50ZXIgaW4gYmFua2VkIG1vZGUpCiNlbHNlCglhZHIJcjEzLCBfc3RhcnQJCQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlciBpbiBiYW5rZWQgbW9kZSkKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1RBQ0tTSVpFK0NPTkZJR19TWVNfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkgQCBtb3ZlIHRvIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGZvciBhYm9ydCBzdGFjawojZW5kaWYKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCgltcnMJbHIsIHNwc3IJCQlAIGdldCB0aGUgc3BzcgoJc3RyCWxyLCBbcjEzLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCglAIG1zcglzcHNyX2MsIHIxMwoJbXNyCXNwc3IsIHIxMwkJCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUgbW92ZXMgd2lsbCBleGVjdXRlCgltb3YJbHIsIHBjCQkJCUAgY2FwdHVyZSByZXR1cm4gcGMKCW1vdnMJcGMsIGxyCQkJCUAganVtcCB0byBuZXh0IGluc3RydWN0aW9uICYgc3dpdGNoIG1vZGVzLgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFja19zd2kKCXN1YglyMTMsIHIxMywgIzQJCQlAIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yIHNjcmF0Y2ggcmVnLgoJc3RyCXIwLCBbcjEzXQkJCUAgc2F2ZSBSMCdzIHZhbHVlLgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19BUk1fV0lUSE9VVF9SRUxPQykKCWxkcglyMCwgSVJRX1NUQUNLX1NUQVJUX0lOCQlAIGdldCBkYXRhIHJlZ2lvbnMgc3RhcnQKI2Vsc2UKCWxkcglyMCwgX2FybWJvb3Rfc3RhcnQJCUAgZ2V0IGRhdGEgcmVnaW9ucyBzdGFydAoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1lTX01BTExPQ19MRU4pCUAgbW92ZSBwYXN0IG1hbGxvYyBwb29sCglzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSs4KQlAIG1vdmUgcGFzdCBnYmwgYW5kIGEgY291cGxlIHNwb3RzIGZvciBhYm9ydCBzdGFjawojZW5kaWYKCXN0cglsciwgW3IwXQkJCUAgc2F2ZSBjYWxsZXIgbHIgaW4gcG9zaXRpb24gMCBvZiBzYXZlZCBzdGFjawoJbXJzCXIwLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKCXN0cglsciwgW3IwLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCglsZHIJcjAsIFtyMTNdCQkJQCByZXN0b3JlIHIwCglhZGQJcjEzLCByMTMsICM0CQkJQCBwb3Agc3RhY2sgZW50cnkKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCgovKgogKiBleGNlcHRpb24gaGFuZGxlcnMKICovCiNpZmRlZiBDT05GSUdfUFJFTE9BREVSCgkuYWxpZ24JNQpkb19oYW5nOgoJbGRyCXNwLCBfVEVYVF9CQVNFCQkJLyogdXNlIDMyIHdvcmRzIGFib3V0IHN0YWNrICovCglibAloYW5nCQkJCS8qIGhhbmcgYW5kIG5ldmVyIHJldHVybiAqLwojZWxzZQkvKiAhQ09ORklHX1BSRUxPQURFUiAqLwoJLmFsaWduCTUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrX3N3aQoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJLyogc29tZW9uZSBvdWdodCB0byB3cml0ZSBhIG1vcmUgZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncyAqLwoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCgojZW5kaWYKCS5hbGlnbiA1Ci5nbG9iYWwgYXJtMTEzNl9jYWNoZV9mbHVzaAphcm0xMTM2X2NhY2hlX2ZsdXNoOgojaWYgIWRlZmluZWQoQ09ORklHX1NZU19OT19JQ0FDSEUpCgkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQojZW5kaWYKI2lmICFkZWZpbmVkKENPTkZJR19TWVNfTk9fRENBQ0hFKQoJCW1jcglwMTUsIDAsIHIxLCBjNywgYzE0LCAwCUAgaW52YWxpZGF0ZSBEIGNhY2hlCiNlbmRpZgoJCW1vdglwYywgbHIJCQlAIGJhY2sgdG8gY2FsbGVyCiNlbmRpZgkvKiBDT05GSUdfUFJFTE9BREVSICovCg==